Merge "Check whether stream use case is supported and invoke populateStreamUseCaseStreamSpecOption() in SupportedSurfaceCombination" into androidx-main
diff --git a/.github/actions/build-single-project/action.yml b/.github/actions/build-single-project/action.yml
index 19a8cb4..79a8af1 100644
--- a/.github/actions/build-single-project/action.yml
+++ b/.github/actions/build-single-project/action.yml
@@ -40,7 +40,7 @@
run: echo "yes" | $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --install "cmake;3.22.1"
- name: "Install Android SDK Build-Tools"
shell: bash
- run: echo "yes" | $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --install "build-tools;34.0.0-rc3"
+ run: echo "yes" | $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --install "build-tools;34.0.0-rc4"
- name: "Set environment variables"
shell: bash
run: |
diff --git a/.github/workflows/integration_tests.yml b/.github/workflows/integration_tests.yml
index db2e46a..cb49084 100644
--- a/.github/workflows/integration_tests.yml
+++ b/.github/workflows/integration_tests.yml
@@ -25,6 +25,12 @@
gcp-token: ${{ secrets.GCP_SA_KEY }}
github-token: ${{ secrets.GITHUB_TOKEN }}
output-folder: ${{ steps.dirs.outputs.output-dir }}
+ gcp-bucket-name: "androidx-ftl-test-results"
+ gcp-bucket-path: "github-ci-action"
+ log-file: ${{ steps.dirs.outputs.output-dir }}/ftl-logs.txt
+ device-specs: Pixel2.arm:30
+ use-test-config-files: true
+ test-suite-tags: androidx_unit_tests
- uses: actions/upload-artifact@v2
if: always()
with:
diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml
index 4e63517..57633d7 100644
--- a/.github/workflows/scorecards.yml
+++ b/.github/workflows/scorecards.yml
@@ -3,7 +3,8 @@
# Only the default branch is supported.
branch_protection_rule:
schedule:
- - cron: '24 14 * * 1'
+ # Weekly on Saturdays.
+ - cron: '30 1 * * 6'
push:
branches: [ androidx-main ]
@@ -17,32 +18,38 @@
permissions:
# Needed to upload the results to code-scanning dashboard.
security-events: write
+ # Used to receive a badge. (Upcoming feature)
+ id-token: write
actions: read
contents: read
steps:
- name: "Checkout code"
- uses: actions/checkout@a12a3943b4bdde767164f792f33f40b04645d846 # v3.0.0
+ uses: actions/checkout@a12a3943b4bdde767164f792f33f40b04645d846 # tag=v3.0.0
with:
persist-credentials: false
- name: "Run analysis"
- uses: ossf/scorecard-action@c1aec4ac820532bab364f02a81873c555a0ba3a1 # v1.0.4
+ uses: ossf/scorecard-action@3e15ea8318eee9b333819ec77a36aca8d39df13e # tag=v1.1.1
with:
results_file: results.sarif
results_format: sarif
- # Read-only PAT token. To create it,
- # follow the steps in https://github.com/ossf/scorecard-action#pat-token-creation.
- repo_token: ${{ secrets.SCORECARD_READ_TOKEN }}
- # Publish the results to enable scorecard badges. For more details, see
+ # (Optional) "write" PAT token. Uncomment the `repo_token` line below if:
+ # - you want to enable the Branch-Protection check on a *public* repository, or
+ # - you are installing Scorecards on a *private* repository
+ # To create the PAT, follow the steps in https://github.com/ossf/scorecard-action#authentication-with-pat.
+ # repo_token: ${{ secrets.SCORECARD_TOKEN }}
+
+ # Publish the results for public repositories to enable scorecard badges. For more details, see
# https://github.com/ossf/scorecard-action#publishing-results.
- # For private repositories, `publish_results` will automatically be set to `false`,
- # regardless of the value entered here.
+ # For private repositories, `publish_results` will automatically be set to `false`, regardless
+ # of the value entered here.
publish_results: true
- # Upload the results as artifacts (optional).
+ # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
+ # format to the repository Actions tab.
- name: "Upload artifact"
- uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v3.0.0
+ uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # tag=v3.0.0
with:
name: SARIF file
path: results.sarif
@@ -50,7 +57,6 @@
# Upload the results to GitHub's code scanning dashboard.
- name: "Upload to code-scanning"
- uses: github/codeql-action/upload-sarif@5f532563584d71fdef14ee64d17bafb34f751ce5 # v1.0.26
+ uses: github/codeql-action/upload-sarif@5f532563584d71fdef14ee64d17bafb34f751ce5 # tag=v1.0.26
with:
sarif_file: results.sarif
-
diff --git a/activity/activity-compose-lint/src/main/java/androidx/activity/compose/lint/ActivityResultLaunchDetector.kt b/activity/activity-compose-lint/src/main/java/androidx/activity/compose/lint/ActivityResultLaunchDetector.kt
index ce8a629..07c1e46 100644
--- a/activity/activity-compose-lint/src/main/java/androidx/activity/compose/lint/ActivityResultLaunchDetector.kt
+++ b/activity/activity-compose-lint/src/main/java/androidx/activity/compose/lint/ActivityResultLaunchDetector.kt
@@ -31,8 +31,8 @@
import com.android.tools.lint.detector.api.Severity
import com.android.tools.lint.detector.api.SourceCodeScanner
import com.intellij.psi.PsiMethod
-import org.jetbrains.uast.UCallExpression
import java.util.EnumSet
+import org.jetbrains.uast.UCallExpression
/**
* [Detector] that checks `launch` calls to make sure they don't happen inside the body of a
diff --git a/activity/activity-compose/api/public_plus_experimental_current.txt b/activity/activity-compose/api/public_plus_experimental_current.txt
deleted file mode 100644
index 48d220b..0000000
--- a/activity/activity-compose/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-// Signature format: 4.0
-package androidx.activity.compose {
-
- public final class ActivityResultRegistryKt {
- method @androidx.compose.runtime.Composable public static <I, O> androidx.activity.compose.ManagedActivityResultLauncher<I,O> rememberLauncherForActivityResult(androidx.activity.result.contract.ActivityResultContract<I,O> contract, kotlin.jvm.functions.Function1<? super O,kotlin.Unit> onResult);
- }
-
- public final class BackHandlerKt {
- method @androidx.compose.runtime.Composable public static void BackHandler(optional boolean enabled, kotlin.jvm.functions.Function0<kotlin.Unit> onBack);
- }
-
- public final class ComponentActivityKt {
- method public static void setContent(androidx.activity.ComponentActivity, optional androidx.compose.runtime.CompositionContext? parent, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- }
-
- public final class LocalActivityResultRegistryOwner {
- method @androidx.compose.runtime.Composable public androidx.activity.result.ActivityResultRegistryOwner? getCurrent();
- method public infix androidx.compose.runtime.ProvidedValue<androidx.activity.result.ActivityResultRegistryOwner> provides(androidx.activity.result.ActivityResultRegistryOwner registryOwner);
- property @androidx.compose.runtime.Composable public final androidx.activity.result.ActivityResultRegistryOwner? current;
- field public static final androidx.activity.compose.LocalActivityResultRegistryOwner INSTANCE;
- }
-
- public final class LocalFullyDrawnReporterOwner {
- method @androidx.compose.runtime.Composable public androidx.activity.FullyDrawnReporterOwner? getCurrent();
- method public infix androidx.compose.runtime.ProvidedValue<androidx.activity.FullyDrawnReporterOwner> provides(androidx.activity.FullyDrawnReporterOwner fullyDrawnReporterOwner);
- property @androidx.compose.runtime.Composable public final androidx.activity.FullyDrawnReporterOwner? current;
- field public static final androidx.activity.compose.LocalFullyDrawnReporterOwner INSTANCE;
- }
-
- public final class LocalOnBackPressedDispatcherOwner {
- method @androidx.compose.runtime.Composable public androidx.activity.OnBackPressedDispatcherOwner? getCurrent();
- method public infix androidx.compose.runtime.ProvidedValue<androidx.activity.OnBackPressedDispatcherOwner> provides(androidx.activity.OnBackPressedDispatcherOwner dispatcherOwner);
- property @androidx.compose.runtime.Composable public final androidx.activity.OnBackPressedDispatcherOwner? current;
- field public static final androidx.activity.compose.LocalOnBackPressedDispatcherOwner INSTANCE;
- }
-
- public final class ManagedActivityResultLauncher<I, O> extends androidx.activity.result.ActivityResultLauncher<I> {
- method public androidx.activity.result.contract.ActivityResultContract<I,?> getContract();
- method public void launch(I input, androidx.core.app.ActivityOptionsCompat? options);
- method @Deprecated public void unregister();
- }
-
- public final class ReportDrawnKt {
- method @androidx.compose.runtime.Composable public static void ReportDrawn();
- method @androidx.compose.runtime.Composable public static void ReportDrawnAfter(kotlin.jvm.functions.Function1<? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
- method @androidx.compose.runtime.Composable public static void ReportDrawnWhen(kotlin.jvm.functions.Function0<java.lang.Boolean> predicate);
- }
-
-}
-
diff --git a/activity/activity-compose/samples/build.gradle b/activity/activity-compose/samples/build.gradle
index e76d4bc..3190107 100644
--- a/activity/activity-compose/samples/build.gradle
+++ b/activity/activity-compose/samples/build.gradle
@@ -40,7 +40,7 @@
}
androidx {
- name = "AndroidX Compose UI Activity Integration Samples"
+ name = "Compose UI Activity Integration Samples"
type = LibraryType.SAMPLES
inceptionYear = "2020"
description = "Samples for Compose integration with Activity"
diff --git a/activity/activity-compose/samples/src/main/java/androidx/activity/compose/samples/ReportLoadedSamples.kt b/activity/activity-compose/samples/src/main/java/androidx/activity/compose/samples/ReportLoadedSamples.kt
index 22244e9..8a4a86b 100644
--- a/activity/activity-compose/samples/src/main/java/androidx/activity/compose/samples/ReportLoadedSamples.kt
+++ b/activity/activity-compose/samples/src/main/java/androidx/activity/compose/samples/ReportLoadedSamples.kt
@@ -15,8 +15,8 @@
*/
package androidx.activity.compose.samples
-import androidx.activity.compose.ReportDrawnAfter
import androidx.activity.compose.ReportDrawn
+import androidx.activity.compose.ReportDrawnAfter
import androidx.activity.compose.ReportDrawnWhen
import androidx.annotation.Sampled
import androidx.compose.foundation.layout.fillMaxSize
diff --git a/activity/activity-compose/src/androidTest/java/androidx/activity/compose/ReportDrawnTest.kt b/activity/activity-compose/src/androidTest/java/androidx/activity/compose/ReportDrawnTest.kt
index 75be5f1..db1fee8 100644
--- a/activity/activity-compose/src/androidTest/java/androidx/activity/compose/ReportDrawnTest.kt
+++ b/activity/activity-compose/src/androidTest/java/androidx/activity/compose/ReportDrawnTest.kt
@@ -265,4 +265,15 @@
}
assertThat(localValue).isSameInstanceAs(fullyDrawnReporterOwner)
}
+
+ @Test
+ fun testDisposingBeforeReporting() {
+ rule.setContent {
+ // Reporting never finishes
+ ReportDrawnWhen { false }
+ // Report that finishes immediatelly
+ ReportDrawn()
+ }
+ // By going out of the scope, both reporters call onDismiss
+ }
}
diff --git a/activity/activity-compose/src/main/java/androidx/activity/compose/BackHandler.kt b/activity/activity-compose/src/main/java/androidx/activity/compose/BackHandler.kt
index 0ed7d53..384b780 100644
--- a/activity/activity-compose/src/main/java/androidx/activity/compose/BackHandler.kt
+++ b/activity/activity-compose/src/main/java/androidx/activity/compose/BackHandler.kt
@@ -16,10 +16,10 @@
package androidx.activity.compose
-import androidx.activity.findViewTreeOnBackPressedDispatcherOwner
import androidx.activity.OnBackPressedCallback
import androidx.activity.OnBackPressedDispatcher
import androidx.activity.OnBackPressedDispatcherOwner
+import androidx.activity.findViewTreeOnBackPressedDispatcherOwner
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.ProvidedValue
diff --git a/activity/activity-ktx/api/current.txt b/activity/activity-ktx/api/current.txt
index 4f387c3..4514923 100644
--- a/activity/activity-ktx/api/current.txt
+++ b/activity/activity-ktx/api/current.txt
@@ -2,8 +2,8 @@
package androidx.activity {
public final class ActivityViewModelLazyKt {
- method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> viewModels(androidx.activity.ComponentActivity, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> viewModels(androidx.activity.ComponentActivity, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+ method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> viewModels(androidx.activity.ComponentActivity, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
}
public final class PipHintTrackerKt {
diff --git a/activity/activity-ktx/api/public_plus_experimental_current.txt b/activity/activity-ktx/api/public_plus_experimental_current.txt
deleted file mode 100644
index 4f387c3..0000000
--- a/activity/activity-ktx/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-// Signature format: 4.0
-package androidx.activity {
-
- public final class ActivityViewModelLazyKt {
- method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> viewModels(androidx.activity.ComponentActivity, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
- method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> viewModels(androidx.activity.ComponentActivity, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
- }
-
- public final class PipHintTrackerKt {
- method @RequiresApi(android.os.Build.VERSION_CODES.O) public static suspend Object? trackPipAnimationHintView(android.app.Activity, android.view.View view, kotlin.coroutines.Continuation<? super kotlin.Unit>);
- }
-
-}
-
-package androidx.activity.result {
-
- public final class ActivityResultCallerKt {
- method public static <I, O> androidx.activity.result.ActivityResultLauncher<kotlin.Unit> registerForActivityResult(androidx.activity.result.ActivityResultCaller, androidx.activity.result.contract.ActivityResultContract<I,O> contract, I input, androidx.activity.result.ActivityResultRegistry registry, kotlin.jvm.functions.Function1<? super O,kotlin.Unit> callback);
- method public static <I, O> androidx.activity.result.ActivityResultLauncher<kotlin.Unit> registerForActivityResult(androidx.activity.result.ActivityResultCaller, androidx.activity.result.contract.ActivityResultContract<I,O> contract, I input, kotlin.jvm.functions.Function1<? super O,kotlin.Unit> callback);
- }
-
- public final class ActivityResultKt {
- method public static operator int component1(androidx.activity.result.ActivityResult);
- method public static operator android.content.Intent? component2(androidx.activity.result.ActivityResult);
- }
-
- public final class ActivityResultLauncherKt {
- method public static void launch(androidx.activity.result.ActivityResultLauncher<java.lang.Void>, optional androidx.core.app.ActivityOptionsCompat? options);
- method public static void launchUnit(androidx.activity.result.ActivityResultLauncher<kotlin.Unit>, optional androidx.core.app.ActivityOptionsCompat? options);
- }
-
-}
-
diff --git a/activity/activity-ktx/api/restricted_current.txt b/activity/activity-ktx/api/restricted_current.txt
index 4f387c3..4514923 100644
--- a/activity/activity-ktx/api/restricted_current.txt
+++ b/activity/activity-ktx/api/restricted_current.txt
@@ -2,8 +2,8 @@
package androidx.activity {
public final class ActivityViewModelLazyKt {
- method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> viewModels(androidx.activity.ComponentActivity, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> viewModels(androidx.activity.ComponentActivity, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+ method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> viewModels(androidx.activity.ComponentActivity, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
}
public final class PipHintTrackerKt {
diff --git a/activity/activity-ktx/src/androidTest/java/androidx/activity/ActivityViewModelLazyTest.kt b/activity/activity-ktx/src/androidTest/java/androidx/activity/ActivityViewModelLazyTest.kt
index c3f7793..6601b128 100644
--- a/activity/activity-ktx/src/androidTest/java/androidx/activity/ActivityViewModelLazyTest.kt
+++ b/activity/activity-ktx/src/androidTest/java/androidx/activity/ActivityViewModelLazyTest.kt
@@ -28,9 +28,9 @@
import androidx.test.annotation.UiThreadTest
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
+import java.lang.IllegalArgumentException
import org.junit.Rule
import org.junit.Test
-import java.lang.IllegalArgumentException
@MediumTest
class ActivityViewModelLazyTest {
diff --git a/activity/activity-lint/build.gradle b/activity/activity-lint/build.gradle
index 704ee58..554da78 100644
--- a/activity/activity-lint/build.gradle
+++ b/activity/activity-lint/build.gradle
@@ -36,7 +36,7 @@
}
androidx {
- name = "Android Activity Lint Checks"
+ name = "Activity Lint Checks"
type = LibraryType.LINT
inceptionYear = "2020"
description = "Android Activity Lint Checks"
diff --git a/activity/activity-lint/src/main/java/androidx/activity/lint/ActivityResultFragmentVersionDetector.kt b/activity/activity-lint/src/main/java/androidx/activity/lint/ActivityResultFragmentVersionDetector.kt
index edb3b36..8ab79a4 100644
--- a/activity/activity-lint/src/main/java/androidx/activity/lint/ActivityResultFragmentVersionDetector.kt
+++ b/activity/activity-lint/src/main/java/androidx/activity/lint/ActivityResultFragmentVersionDetector.kt
@@ -30,12 +30,12 @@
import com.android.tools.lint.detector.api.Project
import com.android.tools.lint.detector.api.Scope
import com.android.tools.lint.detector.api.Severity
-import org.jetbrains.uast.UCallExpression
-import org.jetbrains.uast.UElement
import java.util.EnumSet
import kotlin.reflect.full.memberFunctions
import kotlin.reflect.full.memberProperties
import kotlin.reflect.jvm.isAccessible
+import org.jetbrains.uast.UCallExpression
+import org.jetbrains.uast.UElement
class ActivityResultFragmentVersionDetector : Detector(), UastScanner, GradleScanner {
companion object {
diff --git a/activity/activity/api/current.txt b/activity/activity/api/current.txt
index c7520eb..22ecc41 100644
--- a/activity/activity/api/current.txt
+++ b/activity/activity/api/current.txt
@@ -30,8 +30,8 @@
method @Deprecated public Object? onRetainCustomNonConfigurationInstance();
method public final Object? onRetainNonConfigurationInstance();
method public android.content.Context? peekAvailableContext();
- method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultRegistry, androidx.activity.result.ActivityResultCallback<O!>);
method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+ method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultRegistry, androidx.activity.result.ActivityResultCallback<O!>);
method public void removeMenuProvider(androidx.core.view.MenuProvider);
method public final void removeOnConfigurationChangedListener(androidx.core.util.Consumer<android.content.res.Configuration!>);
method public final void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
@@ -46,8 +46,8 @@
}
public class ComponentDialog extends android.app.Dialog implements androidx.lifecycle.LifecycleOwner androidx.activity.OnBackPressedDispatcherOwner androidx.savedstate.SavedStateRegistryOwner {
- ctor public ComponentDialog(android.content.Context context, optional @StyleRes int themeResId);
ctor public ComponentDialog(android.content.Context context);
+ ctor public ComponentDialog(android.content.Context context, optional @StyleRes int themeResId);
method public androidx.lifecycle.Lifecycle getLifecycle();
method public final androidx.activity.OnBackPressedDispatcher getOnBackPressedDispatcher();
method public androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
@@ -59,9 +59,9 @@
}
public final class EdgeToEdge {
- method public static void enable(androidx.activity.ComponentActivity, optional androidx.activity.SystemBarStyle statusBarStyle, optional androidx.activity.SystemBarStyle navigationBarStyle);
- method public static void enable(androidx.activity.ComponentActivity, optional androidx.activity.SystemBarStyle statusBarStyle);
method public static void enable(androidx.activity.ComponentActivity);
+ method public static void enable(androidx.activity.ComponentActivity, optional androidx.activity.SystemBarStyle statusBarStyle);
+ method public static void enable(androidx.activity.ComponentActivity, optional androidx.activity.SystemBarStyle statusBarStyle, optional androidx.activity.SystemBarStyle navigationBarStyle);
}
public final class FullyDrawnReporter {
@@ -93,8 +93,8 @@
}
public final class OnBackPressedDispatcher {
- ctor public OnBackPressedDispatcher(optional Runnable? fallbackOnBackPressed);
ctor public OnBackPressedDispatcher();
+ ctor public OnBackPressedDispatcher(optional Runnable? fallbackOnBackPressed);
method @MainThread public void addCallback(androidx.activity.OnBackPressedCallback onBackPressedCallback);
method @MainThread public void addCallback(androidx.lifecycle.LifecycleOwner owner, androidx.activity.OnBackPressedCallback onBackPressedCallback);
method @MainThread public boolean hasEnabledCallbacks();
@@ -199,8 +199,8 @@
method @MainThread public abstract <I, O> void onLaunch(int, androidx.activity.result.contract.ActivityResultContract<I!,O!>, I!, androidx.core.app.ActivityOptionsCompat?);
method public final void onRestoreInstanceState(android.os.Bundle?);
method public final void onSaveInstanceState(android.os.Bundle);
- method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.lifecycle.LifecycleOwner, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+ method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.lifecycle.LifecycleOwner, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
}
public interface ActivityResultRegistryOwner {
@@ -224,8 +224,8 @@
}
public static final class IntentSenderRequest.Builder {
- ctor public IntentSenderRequest.Builder(android.content.IntentSender intentSender);
ctor public IntentSenderRequest.Builder(android.app.PendingIntent pendingIntent);
+ ctor public IntentSenderRequest.Builder(android.content.IntentSender intentSender);
method public androidx.activity.result.IntentSenderRequest build();
method public androidx.activity.result.IntentSenderRequest.Builder setFillInIntent(android.content.Intent? fillInIntent);
method public androidx.activity.result.IntentSenderRequest.Builder setFlags(int values, int mask);
@@ -277,8 +277,8 @@
}
@RequiresApi(19) public static class ActivityResultContracts.CreateDocument extends androidx.activity.result.contract.ActivityResultContract<java.lang.String,android.net.Uri> {
- ctor public ActivityResultContracts.CreateDocument(String mimeType);
ctor @Deprecated public ActivityResultContracts.CreateDocument();
+ ctor public ActivityResultContracts.CreateDocument(String mimeType);
method @CallSuper public android.content.Intent createIntent(android.content.Context context, String input);
method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, String input);
method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
diff --git a/activity/activity/api/public_plus_experimental_current.txt b/activity/activity/api/public_plus_experimental_current.txt
index c7520eb..22ecc41 100644
--- a/activity/activity/api/public_plus_experimental_current.txt
+++ b/activity/activity/api/public_plus_experimental_current.txt
@@ -30,8 +30,8 @@
method @Deprecated public Object? onRetainCustomNonConfigurationInstance();
method public final Object? onRetainNonConfigurationInstance();
method public android.content.Context? peekAvailableContext();
- method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultRegistry, androidx.activity.result.ActivityResultCallback<O!>);
method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+ method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultRegistry, androidx.activity.result.ActivityResultCallback<O!>);
method public void removeMenuProvider(androidx.core.view.MenuProvider);
method public final void removeOnConfigurationChangedListener(androidx.core.util.Consumer<android.content.res.Configuration!>);
method public final void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
@@ -46,8 +46,8 @@
}
public class ComponentDialog extends android.app.Dialog implements androidx.lifecycle.LifecycleOwner androidx.activity.OnBackPressedDispatcherOwner androidx.savedstate.SavedStateRegistryOwner {
- ctor public ComponentDialog(android.content.Context context, optional @StyleRes int themeResId);
ctor public ComponentDialog(android.content.Context context);
+ ctor public ComponentDialog(android.content.Context context, optional @StyleRes int themeResId);
method public androidx.lifecycle.Lifecycle getLifecycle();
method public final androidx.activity.OnBackPressedDispatcher getOnBackPressedDispatcher();
method public androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
@@ -59,9 +59,9 @@
}
public final class EdgeToEdge {
- method public static void enable(androidx.activity.ComponentActivity, optional androidx.activity.SystemBarStyle statusBarStyle, optional androidx.activity.SystemBarStyle navigationBarStyle);
- method public static void enable(androidx.activity.ComponentActivity, optional androidx.activity.SystemBarStyle statusBarStyle);
method public static void enable(androidx.activity.ComponentActivity);
+ method public static void enable(androidx.activity.ComponentActivity, optional androidx.activity.SystemBarStyle statusBarStyle);
+ method public static void enable(androidx.activity.ComponentActivity, optional androidx.activity.SystemBarStyle statusBarStyle, optional androidx.activity.SystemBarStyle navigationBarStyle);
}
public final class FullyDrawnReporter {
@@ -93,8 +93,8 @@
}
public final class OnBackPressedDispatcher {
- ctor public OnBackPressedDispatcher(optional Runnable? fallbackOnBackPressed);
ctor public OnBackPressedDispatcher();
+ ctor public OnBackPressedDispatcher(optional Runnable? fallbackOnBackPressed);
method @MainThread public void addCallback(androidx.activity.OnBackPressedCallback onBackPressedCallback);
method @MainThread public void addCallback(androidx.lifecycle.LifecycleOwner owner, androidx.activity.OnBackPressedCallback onBackPressedCallback);
method @MainThread public boolean hasEnabledCallbacks();
@@ -199,8 +199,8 @@
method @MainThread public abstract <I, O> void onLaunch(int, androidx.activity.result.contract.ActivityResultContract<I!,O!>, I!, androidx.core.app.ActivityOptionsCompat?);
method public final void onRestoreInstanceState(android.os.Bundle?);
method public final void onSaveInstanceState(android.os.Bundle);
- method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.lifecycle.LifecycleOwner, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+ method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.lifecycle.LifecycleOwner, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
}
public interface ActivityResultRegistryOwner {
@@ -224,8 +224,8 @@
}
public static final class IntentSenderRequest.Builder {
- ctor public IntentSenderRequest.Builder(android.content.IntentSender intentSender);
ctor public IntentSenderRequest.Builder(android.app.PendingIntent pendingIntent);
+ ctor public IntentSenderRequest.Builder(android.content.IntentSender intentSender);
method public androidx.activity.result.IntentSenderRequest build();
method public androidx.activity.result.IntentSenderRequest.Builder setFillInIntent(android.content.Intent? fillInIntent);
method public androidx.activity.result.IntentSenderRequest.Builder setFlags(int values, int mask);
@@ -277,8 +277,8 @@
}
@RequiresApi(19) public static class ActivityResultContracts.CreateDocument extends androidx.activity.result.contract.ActivityResultContract<java.lang.String,android.net.Uri> {
- ctor public ActivityResultContracts.CreateDocument(String mimeType);
ctor @Deprecated public ActivityResultContracts.CreateDocument();
+ ctor public ActivityResultContracts.CreateDocument(String mimeType);
method @CallSuper public android.content.Intent createIntent(android.content.Context context, String input);
method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, String input);
method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
diff --git a/activity/activity/api/restricted_current.txt b/activity/activity/api/restricted_current.txt
index 9244450..10c4134 100644
--- a/activity/activity/api/restricted_current.txt
+++ b/activity/activity/api/restricted_current.txt
@@ -29,8 +29,8 @@
method @Deprecated public Object? onRetainCustomNonConfigurationInstance();
method public final Object? onRetainNonConfigurationInstance();
method public android.content.Context? peekAvailableContext();
- method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultRegistry, androidx.activity.result.ActivityResultCallback<O!>);
method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+ method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultRegistry, androidx.activity.result.ActivityResultCallback<O!>);
method public void removeMenuProvider(androidx.core.view.MenuProvider);
method public final void removeOnConfigurationChangedListener(androidx.core.util.Consumer<android.content.res.Configuration!>);
method public final void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
@@ -45,8 +45,8 @@
}
public class ComponentDialog extends android.app.Dialog implements androidx.lifecycle.LifecycleOwner androidx.activity.OnBackPressedDispatcherOwner androidx.savedstate.SavedStateRegistryOwner {
- ctor public ComponentDialog(android.content.Context context, optional @StyleRes int themeResId);
ctor public ComponentDialog(android.content.Context context);
+ ctor public ComponentDialog(android.content.Context context, optional @StyleRes int themeResId);
method public androidx.lifecycle.Lifecycle getLifecycle();
method public final androidx.activity.OnBackPressedDispatcher getOnBackPressedDispatcher();
method public androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
@@ -58,9 +58,9 @@
}
public final class EdgeToEdge {
- method public static void enable(androidx.activity.ComponentActivity, optional androidx.activity.SystemBarStyle statusBarStyle, optional androidx.activity.SystemBarStyle navigationBarStyle);
- method public static void enable(androidx.activity.ComponentActivity, optional androidx.activity.SystemBarStyle statusBarStyle);
method public static void enable(androidx.activity.ComponentActivity);
+ method public static void enable(androidx.activity.ComponentActivity, optional androidx.activity.SystemBarStyle statusBarStyle);
+ method public static void enable(androidx.activity.ComponentActivity, optional androidx.activity.SystemBarStyle statusBarStyle, optional androidx.activity.SystemBarStyle navigationBarStyle);
}
public final class FullyDrawnReporter {
@@ -92,8 +92,8 @@
}
public final class OnBackPressedDispatcher {
- ctor public OnBackPressedDispatcher(optional Runnable? fallbackOnBackPressed);
ctor public OnBackPressedDispatcher();
+ ctor public OnBackPressedDispatcher(optional Runnable? fallbackOnBackPressed);
method @MainThread public void addCallback(androidx.activity.OnBackPressedCallback onBackPressedCallback);
method @MainThread public void addCallback(androidx.lifecycle.LifecycleOwner owner, androidx.activity.OnBackPressedCallback onBackPressedCallback);
method @MainThread public boolean hasEnabledCallbacks();
@@ -198,8 +198,8 @@
method @MainThread public abstract <I, O> void onLaunch(int, androidx.activity.result.contract.ActivityResultContract<I!,O!>, I!, androidx.core.app.ActivityOptionsCompat?);
method public final void onRestoreInstanceState(android.os.Bundle?);
method public final void onSaveInstanceState(android.os.Bundle);
- method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.lifecycle.LifecycleOwner, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+ method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.lifecycle.LifecycleOwner, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
}
public interface ActivityResultRegistryOwner {
@@ -223,8 +223,8 @@
}
public static final class IntentSenderRequest.Builder {
- ctor public IntentSenderRequest.Builder(android.content.IntentSender intentSender);
ctor public IntentSenderRequest.Builder(android.app.PendingIntent pendingIntent);
+ ctor public IntentSenderRequest.Builder(android.content.IntentSender intentSender);
method public androidx.activity.result.IntentSenderRequest build();
method public androidx.activity.result.IntentSenderRequest.Builder setFillInIntent(android.content.Intent? fillInIntent);
method public androidx.activity.result.IntentSenderRequest.Builder setFlags(int values, int mask);
@@ -276,8 +276,8 @@
}
@RequiresApi(19) public static class ActivityResultContracts.CreateDocument extends androidx.activity.result.contract.ActivityResultContract<java.lang.String,android.net.Uri> {
- ctor public ActivityResultContracts.CreateDocument(String mimeType);
ctor @Deprecated public ActivityResultContracts.CreateDocument();
+ ctor public ActivityResultContracts.CreateDocument(String mimeType);
method @CallSuper public android.content.Intent createIntent(android.content.Context context, String input);
method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, String input);
method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
diff --git a/activity/activity/lint-baseline.xml b/activity/activity/lint-baseline.xml
new file mode 100644
index 0000000..d97aee4
--- /dev/null
+++ b/activity/activity/lint-baseline.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.1.0-beta01" type="baseline" client="gradle" dependencies="false" name="AGP (8.1.0-beta01)" variant="all" version="8.1.0-beta01">
+
+ <issue
+ id="PrereleaseSdkCoreDependency"
+ message="Prelease SDK check isAtLeastT cannot be called as this project has a versioned dependency on androidx.core:core"
+ errorLine1=" if (BuildCompat.isAtLeastT()) {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/main/java/androidx/activity/ComponentActivity.java"/>
+ </issue>
+
+</issues>
diff --git a/activity/activity/src/androidTest/java/androidx/activity/ComponentActivityResultTest.kt b/activity/activity/src/androidTest/java/androidx/activity/ComponentActivityResultTest.kt
index e2025c9..48c87c7 100644
--- a/activity/activity/src/androidTest/java/androidx/activity/ComponentActivityResultTest.kt
+++ b/activity/activity/src/androidTest/java/androidx/activity/ComponentActivityResultTest.kt
@@ -31,10 +31,10 @@
import androidx.test.filters.LargeTest
import androidx.testutils.withActivity
import com.google.common.truth.Truth.assertThat
-import leakcanary.DetectLeaksAfterTestSuccess
-import org.junit.Rule
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
+import leakcanary.DetectLeaksAfterTestSuccess
+import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
diff --git a/activity/activity/src/main/java/androidx/activity/FullyDrawnReporter.kt b/activity/activity/src/main/java/androidx/activity/FullyDrawnReporter.kt
index 8c57628..dd87c18 100644
--- a/activity/activity/src/main/java/androidx/activity/FullyDrawnReporter.kt
+++ b/activity/activity/src/main/java/androidx/activity/FullyDrawnReporter.kt
@@ -103,10 +103,7 @@
*/
fun removeReporter() {
synchronized(lock) {
- if (!reportedFullyDrawn) {
- check(reporterCount > 0) {
- "removeReporter() called when all reporters have already been removed."
- }
+ if (!reportedFullyDrawn && reporterCount > 0) {
reporterCount--
postWhenReportersAreDone()
}
@@ -189,4 +186,4 @@
} finally {
removeReporter()
}
-}
\ No newline at end of file
+}
diff --git a/activity/activity/src/main/java/androidx/activity/result/PickVisualMediaRequest.kt b/activity/activity/src/main/java/androidx/activity/result/PickVisualMediaRequest.kt
index 45cbfe9..66f30ef 100644
--- a/activity/activity/src/main/java/androidx/activity/result/PickVisualMediaRequest.kt
+++ b/activity/activity/src/main/java/androidx/activity/result/PickVisualMediaRequest.kt
@@ -16,8 +16,8 @@
package androidx.activity.result
-import androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType
import androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.ImageAndVideo
+import androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType
/**
* Creates a request for a
diff --git a/activity/integration-tests/testapp/src/main/java/androidx/activity/integration/testapp/MainActivity.kt b/activity/integration-tests/testapp/src/main/java/androidx/activity/integration/testapp/MainActivity.kt
index d795756..5fe827e 100644
--- a/activity/integration-tests/testapp/src/main/java/androidx/activity/integration/testapp/MainActivity.kt
+++ b/activity/integration-tests/testapp/src/main/java/androidx/activity/integration/testapp/MainActivity.kt
@@ -42,8 +42,8 @@
import androidx.activity.result.contract.ActivityResultContracts.CreateDocument
import androidx.activity.result.contract.ActivityResultContracts.GetContent
import androidx.activity.result.contract.ActivityResultContracts.OpenMultipleDocuments
-import androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia
import androidx.activity.result.contract.ActivityResultContracts.PickMultipleVisualMedia
+import androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia
import androidx.activity.result.contract.ActivityResultContracts.RequestPermission
import androidx.activity.result.contract.ActivityResultContracts.TakePicture
import androidx.activity.result.contract.ActivityResultContracts.TakePicturePreview
diff --git a/annotation/annotation-experimental-lint/integration-tests/src/main/java/sample/experimental/UseJavaPackageFromKt.kt b/annotation/annotation-experimental-lint/integration-tests/src/main/java/sample/experimental/UseJavaPackageFromKt.kt
index 417b29f..312c3a5 100644
--- a/annotation/annotation-experimental-lint/integration-tests/src/main/java/sample/experimental/UseJavaPackageFromKt.kt
+++ b/annotation/annotation-experimental-lint/integration-tests/src/main/java/sample/experimental/UseJavaPackageFromKt.kt
@@ -19,7 +19,6 @@
package sample.experimental
import androidx.annotation.experimental.UseExperimental
-
import sample.experimental.foo.Bar
import sample.experimental.foo.ExperimentalPackage
diff --git a/annotation/annotation-experimental-lint/integration-tests/src/main/java/sample/optin/UseJavaPackageFromKt.kt b/annotation/annotation-experimental-lint/integration-tests/src/main/java/sample/optin/UseJavaPackageFromKt.kt
index f995a66..caf4c94 100644
--- a/annotation/annotation-experimental-lint/integration-tests/src/main/java/sample/optin/UseJavaPackageFromKt.kt
+++ b/annotation/annotation-experimental-lint/integration-tests/src/main/java/sample/optin/UseJavaPackageFromKt.kt
@@ -17,7 +17,6 @@
package sample.optin
import androidx.annotation.OptIn
-
import sample.optin.foo.AnnotatedJavaPackage
@Suppress("unused", "MemberVisibilityCanBePrivate")
diff --git a/annotation/annotation-experimental-lint/src/test/kotlin/androidx/annotation/experimental/lint/ExperimentalDetectorTest.kt b/annotation/annotation-experimental-lint/src/test/kotlin/androidx/annotation/experimental/lint/ExperimentalDetectorTest.kt
index 62fa26e..25567ce 100644
--- a/annotation/annotation-experimental-lint/src/test/kotlin/androidx/annotation/experimental/lint/ExperimentalDetectorTest.kt
+++ b/annotation/annotation-experimental-lint/src/test/kotlin/androidx/annotation/experimental/lint/ExperimentalDetectorTest.kt
@@ -424,13 +424,13 @@
/* ktlint-disable max-line-length */
val expected = """
-src/sample/experimental/UseJavaPackageFromKt.kt:32: Error: This declaration is opt-in and its usage should be marked with @sample.experimental.foo.ExperimentalPackage or @OptIn(markerClass = sample.experimental.foo.ExperimentalPackage.class) [UnsafeOptInUsageError]
+src/sample/experimental/UseJavaPackageFromKt.kt:31: Error: This declaration is opt-in and its usage should be marked with @sample.experimental.foo.ExperimentalPackage or @OptIn(markerClass = sample.experimental.foo.ExperimentalPackage.class) [UnsafeOptInUsageError]
val bar = Bar()
~~~
-src/sample/experimental/UseJavaPackageFromKt.kt:33: Error: This declaration is opt-in and its usage should be marked with @sample.experimental.foo.ExperimentalPackage or @OptIn(markerClass = sample.experimental.foo.ExperimentalPackage.class) [UnsafeOptInUsageError]
+src/sample/experimental/UseJavaPackageFromKt.kt:32: Error: This declaration is opt-in and its usage should be marked with @sample.experimental.foo.ExperimentalPackage or @OptIn(markerClass = sample.experimental.foo.ExperimentalPackage.class) [UnsafeOptInUsageError]
bar.baz()
~~~
-src/sample/experimental/UseJavaPackageFromKt.kt:56: Error: This declaration is opt-in and its usage should be marked with @sample.experimental.foo.ExperimentalPackage or @OptIn(markerClass = sample.experimental.foo.ExperimentalPackage.class) [UnsafeOptInUsageError]
+src/sample/experimental/UseJavaPackageFromKt.kt:55: Error: This declaration is opt-in and its usage should be marked with @sample.experimental.foo.ExperimentalPackage or @OptIn(markerClass = sample.experimental.foo.ExperimentalPackage.class) [UnsafeOptInUsageError]
callPackageExperimental()
~~~~~~~~~~~~~~~~~~~~~~~
3 errors, 0 warnings
diff --git a/annotation/annotation-experimental-lint/src/test/kotlin/androidx/annotation/experimental/lint/RequiresOptInDetectorTest.kt b/annotation/annotation-experimental-lint/src/test/kotlin/androidx/annotation/experimental/lint/RequiresOptInDetectorTest.kt
index 89a38ed..99ca8e3 100644
--- a/annotation/annotation-experimental-lint/src/test/kotlin/androidx/annotation/experimental/lint/RequiresOptInDetectorTest.kt
+++ b/annotation/annotation-experimental-lint/src/test/kotlin/androidx/annotation/experimental/lint/RequiresOptInDetectorTest.kt
@@ -318,13 +318,13 @@
/* ktlint-disable max-line-length */
val expected = """
-src/sample/optin/UseJavaPackageFromKt.kt:30: Error: This declaration is opt-in and its usage should be marked with @sample.optin.ExperimentalJavaAnnotation or @OptIn(markerClass = sample.optin.ExperimentalJavaAnnotation.class) [UnsafeOptInUsageError]
+src/sample/optin/UseJavaPackageFromKt.kt:29: Error: This declaration is opt-in and its usage should be marked with @sample.optin.ExperimentalJavaAnnotation or @OptIn(markerClass = sample.optin.ExperimentalJavaAnnotation.class) [UnsafeOptInUsageError]
val experimentalObject = AnnotatedJavaPackage()
~~~~~~~~~~~~~~~~~~~~
-src/sample/optin/UseJavaPackageFromKt.kt:31: Error: This declaration is opt-in and its usage should be marked with @sample.optin.ExperimentalJavaAnnotation or @OptIn(markerClass = sample.optin.ExperimentalJavaAnnotation.class) [UnsafeOptInUsageError]
+src/sample/optin/UseJavaPackageFromKt.kt:30: Error: This declaration is opt-in and its usage should be marked with @sample.optin.ExperimentalJavaAnnotation or @OptIn(markerClass = sample.optin.ExperimentalJavaAnnotation.class) [UnsafeOptInUsageError]
experimentalObject.method()
~~~~~~
-src/sample/optin/UseJavaPackageFromKt.kt:64: Error: This declaration is opt-in and its usage should be marked with @sample.optin.ExperimentalJavaAnnotation or @OptIn(markerClass = sample.optin.ExperimentalJavaAnnotation.class) [UnsafeOptInUsageError]
+src/sample/optin/UseJavaPackageFromKt.kt:63: Error: This declaration is opt-in and its usage should be marked with @sample.optin.ExperimentalJavaAnnotation or @OptIn(markerClass = sample.optin.ExperimentalJavaAnnotation.class) [UnsafeOptInUsageError]
callPackageExperimental()
~~~~~~~~~~~~~~~~~~~~~~~
3 errors, 0 warnings
diff --git a/annotation/annotation-experimental/api/public_plus_experimental_current.txt b/annotation/annotation-experimental/api/public_plus_experimental_current.txt
deleted file mode 100644
index 117beb3..0000000
--- a/annotation/annotation-experimental/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-// Signature format: 4.0
-package androidx.annotation {
-
- @java.lang.annotation.Target({java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PACKAGE, java.lang.annotation.ElementType.TYPE}) @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.PROPERTY, kotlin.annotation.AnnotationTarget.LOCAL_VARIABLE, kotlin.annotation.AnnotationTarget.VALUE_PARAMETER, kotlin.annotation.AnnotationTarget.CONSTRUCTOR, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER, kotlin.annotation.AnnotationTarget.PROPERTY_SETTER, kotlin.annotation.AnnotationTarget.FILE, kotlin.annotation.AnnotationTarget.TYPEALIAS}) public @interface OptIn {
- method public abstract kotlin.reflect.KClass<? extends java.lang.annotation.Annotation>[] markerClass();
- property public abstract kotlin.reflect.KClass<? extends java.lang.annotation.Annotation>[] markerClass;
- }
-
- @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS) public @interface RequiresOptIn {
- method public abstract androidx.annotation.RequiresOptIn.Level level() default androidx.annotation.RequiresOptIn.Level.ERROR;
- property public abstract androidx.annotation.RequiresOptIn.Level level;
- }
-
- public enum RequiresOptIn.Level {
- method public static androidx.annotation.RequiresOptIn.Level valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
- method public static androidx.annotation.RequiresOptIn.Level[] values();
- enum_constant public static final androidx.annotation.RequiresOptIn.Level ERROR;
- enum_constant public static final androidx.annotation.RequiresOptIn.Level WARNING;
- }
-
-}
-
-package androidx.annotation.experimental {
-
- @Deprecated @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS) public @interface Experimental {
- method @Deprecated public abstract androidx.annotation.experimental.Experimental.Level level() default androidx.annotation.experimental.Experimental.Level.ERROR;
- property @Deprecated public abstract androidx.annotation.experimental.Experimental.Level level;
- }
-
- @Deprecated public enum Experimental.Level {
- method @Deprecated public static androidx.annotation.experimental.Experimental.Level valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
- method @Deprecated public static androidx.annotation.experimental.Experimental.Level[] values();
- enum_constant @Deprecated public static final androidx.annotation.experimental.Experimental.Level ERROR;
- enum_constant @Deprecated public static final androidx.annotation.experimental.Experimental.Level WARNING;
- }
-
- @Deprecated @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.PROPERTY, kotlin.annotation.AnnotationTarget.LOCAL_VARIABLE, kotlin.annotation.AnnotationTarget.VALUE_PARAMETER, kotlin.annotation.AnnotationTarget.CONSTRUCTOR, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER, kotlin.annotation.AnnotationTarget.PROPERTY_SETTER, kotlin.annotation.AnnotationTarget.FILE, kotlin.annotation.AnnotationTarget.TYPEALIAS}) public @interface UseExperimental {
- method @Deprecated public abstract kotlin.reflect.KClass<? extends java.lang.annotation.Annotation>[] markerClass();
- property @Deprecated public abstract kotlin.reflect.KClass<? extends java.lang.annotation.Annotation>[] markerClass;
- }
-
-}
-
diff --git a/annotation/annotation/build.gradle b/annotation/annotation/build.gradle
index e821397..769ac65 100644
--- a/annotation/annotation/build.gradle
+++ b/annotation/annotation/build.gradle
@@ -66,10 +66,10 @@
}
androidx {
- name = "Android Support Library Annotations"
+ name = "Annotation"
type = LibraryType.PUBLISHED_LIBRARY
mavenVersion = LibraryVersions.ANNOTATION
mavenMultiplatformVersion = LibraryVersions.ANNOTATION_KMP
inceptionYear = "2013"
- description = "The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs."
+ description = "Provides source annotations for tooling and readability."
}
diff --git a/appactions/builtintypes/builtintypes-core/api/current.txt b/appactions/builtintypes/builtintypes-core/api/current.txt
index 469cd358c..198ed2d 100644
--- a/appactions/builtintypes/builtintypes-core/api/current.txt
+++ b/appactions/builtintypes/builtintypes-core/api/current.txt
@@ -2,8 +2,8 @@
package androidx.appactions.builtintypes.properties {
public final class Description {
- ctor public Description(String text);
ctor public Description(androidx.appactions.builtintypes.properties.Description.CanonicalValue canonicalValue);
+ ctor public Description(String text);
method public androidx.appactions.builtintypes.properties.Description.CanonicalValue? getAsCanonicalValue();
method public String? getAsText();
method public <R> R mapWhen(androidx.appactions.builtintypes.properties.Description.Mapper<R> mapper);
@@ -23,8 +23,8 @@
}
public final class DisambiguatingDescription {
- ctor public DisambiguatingDescription(String text);
ctor public DisambiguatingDescription(androidx.appactions.builtintypes.properties.DisambiguatingDescription.CanonicalValue canonicalValue);
+ ctor public DisambiguatingDescription(String text);
method public androidx.appactions.builtintypes.properties.DisambiguatingDescription.CanonicalValue? getAsCanonicalValue();
method public String? getAsText();
method public <R> R mapWhen(androidx.appactions.builtintypes.properties.DisambiguatingDescription.Mapper<R> mapper);
@@ -44,8 +44,8 @@
}
public final class Name {
- ctor public Name(String text);
ctor public Name(androidx.appactions.builtintypes.properties.Name.CanonicalValue canonicalValue);
+ ctor public Name(String text);
method public androidx.appactions.builtintypes.properties.Name.CanonicalValue? getAsCanonicalValue();
method public String? getAsText();
method public <R> R mapWhen(androidx.appactions.builtintypes.properties.Name.Mapper<R> mapper);
@@ -65,10 +65,10 @@
}
public final class Temporal {
+ ctor public Temporal(androidx.appactions.builtintypes.properties.Temporal.CanonicalValue canonicalValue);
+ ctor public Temporal(String text);
ctor public Temporal(java.time.LocalDateTime localDateTime);
ctor public Temporal(java.time.ZonedDateTime zonedDateTime);
- ctor public Temporal(String text);
- ctor public Temporal(androidx.appactions.builtintypes.properties.Temporal.CanonicalValue canonicalValue);
method public androidx.appactions.builtintypes.properties.Temporal.CanonicalValue? getAsCanonicalValue();
method public java.time.LocalDateTime? getAsLocalDateTime();
method public String? getAsText();
@@ -156,18 +156,18 @@
public static interface Thing.Builder<Self extends androidx.appactions.builtintypes.types.Thing.Builder<Self>> {
method public androidx.appactions.builtintypes.types.Thing build();
- method public default Self setDescription(String text);
method public Self setDescription(androidx.appactions.builtintypes.properties.Description? description);
- method public default Self setDisambiguatingDescription(String text);
- method public default Self setDisambiguatingDescription(androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue canonicalValue);
+ method public default Self setDescription(String text);
method public Self setDisambiguatingDescription(androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription);
+ method public default Self setDisambiguatingDescription(androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue canonicalValue);
+ method public default Self setDisambiguatingDescription(String text);
method public Self setIdentifier(String? text);
- method public default Self setName(String text);
method public Self setName(androidx.appactions.builtintypes.properties.Name? name);
+ method public default Self setName(String text);
+ method public Self setTemporal(androidx.appactions.builtintypes.properties.Temporal? temporal);
+ method public default Self setTemporal(String text);
method public default Self setTemporal(java.time.LocalDateTime localDateTime);
method public default Self setTemporal(java.time.ZonedDateTime zonedDateTime);
- method public default Self setTemporal(String text);
- method public Self setTemporal(androidx.appactions.builtintypes.properties.Temporal? temporal);
}
public static final class Thing.Companion {
diff --git a/appactions/builtintypes/builtintypes-core/api/public_plus_experimental_current.txt b/appactions/builtintypes/builtintypes-core/api/public_plus_experimental_current.txt
deleted file mode 100644
index 469cd358c..0000000
--- a/appactions/builtintypes/builtintypes-core/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,202 +0,0 @@
-// Signature format: 4.0
-package androidx.appactions.builtintypes.properties {
-
- public final class Description {
- ctor public Description(String text);
- ctor public Description(androidx.appactions.builtintypes.properties.Description.CanonicalValue canonicalValue);
- method public androidx.appactions.builtintypes.properties.Description.CanonicalValue? getAsCanonicalValue();
- method public String? getAsText();
- method public <R> R mapWhen(androidx.appactions.builtintypes.properties.Description.Mapper<R> mapper);
- property public final androidx.appactions.builtintypes.properties.Description.CanonicalValue? asCanonicalValue;
- property public final String? asText;
- }
-
- public abstract static class Description.CanonicalValue {
- method public abstract String getTextValue();
- property public abstract String textValue;
- }
-
- public static interface Description.Mapper<R> {
- method public default R canonicalValue(androidx.appactions.builtintypes.properties.Description.CanonicalValue instance);
- method public R orElse();
- method public default R text(String instance);
- }
-
- public final class DisambiguatingDescription {
- ctor public DisambiguatingDescription(String text);
- ctor public DisambiguatingDescription(androidx.appactions.builtintypes.properties.DisambiguatingDescription.CanonicalValue canonicalValue);
- method public androidx.appactions.builtintypes.properties.DisambiguatingDescription.CanonicalValue? getAsCanonicalValue();
- method public String? getAsText();
- method public <R> R mapWhen(androidx.appactions.builtintypes.properties.DisambiguatingDescription.Mapper<R> mapper);
- property public final androidx.appactions.builtintypes.properties.DisambiguatingDescription.CanonicalValue? asCanonicalValue;
- property public final String? asText;
- }
-
- public abstract static class DisambiguatingDescription.CanonicalValue {
- method public abstract String getTextValue();
- property public abstract String textValue;
- }
-
- public static interface DisambiguatingDescription.Mapper<R> {
- method public default R canonicalValue(androidx.appactions.builtintypes.properties.DisambiguatingDescription.CanonicalValue instance);
- method public R orElse();
- method public default R text(String instance);
- }
-
- public final class Name {
- ctor public Name(String text);
- ctor public Name(androidx.appactions.builtintypes.properties.Name.CanonicalValue canonicalValue);
- method public androidx.appactions.builtintypes.properties.Name.CanonicalValue? getAsCanonicalValue();
- method public String? getAsText();
- method public <R> R mapWhen(androidx.appactions.builtintypes.properties.Name.Mapper<R> mapper);
- property public final androidx.appactions.builtintypes.properties.Name.CanonicalValue? asCanonicalValue;
- property public final String? asText;
- }
-
- public abstract static class Name.CanonicalValue {
- method public abstract String getTextValue();
- property public abstract String textValue;
- }
-
- public static interface Name.Mapper<R> {
- method public default R canonicalValue(androidx.appactions.builtintypes.properties.Name.CanonicalValue instance);
- method public R orElse();
- method public default R text(String instance);
- }
-
- public final class Temporal {
- ctor public Temporal(java.time.LocalDateTime localDateTime);
- ctor public Temporal(java.time.ZonedDateTime zonedDateTime);
- ctor public Temporal(String text);
- ctor public Temporal(androidx.appactions.builtintypes.properties.Temporal.CanonicalValue canonicalValue);
- method public androidx.appactions.builtintypes.properties.Temporal.CanonicalValue? getAsCanonicalValue();
- method public java.time.LocalDateTime? getAsLocalDateTime();
- method public String? getAsText();
- method public java.time.ZonedDateTime? getAsZonedDateTime();
- method public <R> R mapWhen(androidx.appactions.builtintypes.properties.Temporal.Mapper<R> mapper);
- property public final androidx.appactions.builtintypes.properties.Temporal.CanonicalValue? asCanonicalValue;
- property public final java.time.LocalDateTime? asLocalDateTime;
- property public final String? asText;
- property public final java.time.ZonedDateTime? asZonedDateTime;
- }
-
- public abstract static class Temporal.CanonicalValue {
- method public abstract String getTextValue();
- property public abstract String textValue;
- }
-
- public static interface Temporal.Mapper<R> {
- method public default R canonicalValue(androidx.appactions.builtintypes.properties.Temporal.CanonicalValue instance);
- method public default R localDateTime(java.time.LocalDateTime instance);
- method public R orElse();
- method public default R text(String instance);
- method public default R zonedDateTime(java.time.ZonedDateTime instance);
- }
-
-}
-
-package androidx.appactions.builtintypes.types {
-
- public abstract class GenericThing<Self extends androidx.appactions.builtintypes.types.GenericThing<Self, Builder>, Builder extends androidx.appactions.builtintypes.types.GenericThing.Builder<Builder, Self>> implements androidx.appactions.builtintypes.types.Thing {
- ctor public GenericThing(androidx.appactions.builtintypes.types.Thing thing);
- method public final boolean equals(Object? other);
- method protected abstract java.util.Map<java.lang.String,java.lang.Object> getAdditionalProperties();
- method public final androidx.appactions.builtintypes.properties.Description? getDescription();
- method public final androidx.appactions.builtintypes.properties.DisambiguatingDescription? getDisambiguatingDescription();
- method public final String? getIdentifier();
- method public final androidx.appactions.builtintypes.properties.Name? getName();
- method protected abstract String getSelfTypeName();
- method public final androidx.appactions.builtintypes.properties.Temporal? getTemporal();
- method public final int hashCode();
- method public final Builder toBuilder();
- method protected abstract Builder toBuilderWithAdditionalPropertiesOnly();
- method public final String toString();
- property protected abstract java.util.Map<java.lang.String,java.lang.Object> additionalProperties;
- property public final androidx.appactions.builtintypes.properties.Description? description;
- property public final androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription;
- property public final String? identifier;
- property public final androidx.appactions.builtintypes.properties.Name? name;
- property protected abstract String selfTypeName;
- property public final androidx.appactions.builtintypes.properties.Temporal? temporal;
- }
-
- public abstract static class GenericThing.Builder<Self extends androidx.appactions.builtintypes.types.GenericThing.Builder<Self, Built>, Built extends androidx.appactions.builtintypes.types.GenericThing<Built, Self>> implements androidx.appactions.builtintypes.types.Thing.Builder<Self> {
- ctor public GenericThing.Builder();
- method public final Built build();
- method protected abstract Built buildFromThing(androidx.appactions.builtintypes.types.Thing thing);
- method public final boolean equals(Object? other);
- method protected abstract java.util.Map<java.lang.String,java.lang.Object> getAdditionalProperties();
- method protected abstract String getSelfTypeName();
- method public final int hashCode();
- method public final Self setDescription(androidx.appactions.builtintypes.properties.Description? description);
- method public final Self setDisambiguatingDescription(androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription);
- method public final Self setIdentifier(String? text);
- method public final Self setName(androidx.appactions.builtintypes.properties.Name? name);
- method public final Self setTemporal(androidx.appactions.builtintypes.properties.Temporal? temporal);
- method public final String toString();
- property protected abstract java.util.Map<java.lang.String,java.lang.Object> additionalProperties;
- property protected abstract String selfTypeName;
- }
-
- public interface Thing {
- method public default static androidx.appactions.builtintypes.types.Thing.Builder<?> Builder();
- method public androidx.appactions.builtintypes.properties.Description? getDescription();
- method public androidx.appactions.builtintypes.properties.DisambiguatingDescription? getDisambiguatingDescription();
- method public String? getIdentifier();
- method public androidx.appactions.builtintypes.properties.Name? getName();
- method public androidx.appactions.builtintypes.properties.Temporal? getTemporal();
- method public androidx.appactions.builtintypes.types.Thing.Builder<?> toBuilder();
- property public abstract androidx.appactions.builtintypes.properties.Description? description;
- property public abstract androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription;
- property public abstract String? identifier;
- property public abstract androidx.appactions.builtintypes.properties.Name? name;
- property public abstract androidx.appactions.builtintypes.properties.Temporal? temporal;
- field public static final androidx.appactions.builtintypes.types.Thing.Companion Companion;
- }
-
- public static interface Thing.Builder<Self extends androidx.appactions.builtintypes.types.Thing.Builder<Self>> {
- method public androidx.appactions.builtintypes.types.Thing build();
- method public default Self setDescription(String text);
- method public Self setDescription(androidx.appactions.builtintypes.properties.Description? description);
- method public default Self setDisambiguatingDescription(String text);
- method public default Self setDisambiguatingDescription(androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue canonicalValue);
- method public Self setDisambiguatingDescription(androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription);
- method public Self setIdentifier(String? text);
- method public default Self setName(String text);
- method public Self setName(androidx.appactions.builtintypes.properties.Name? name);
- method public default Self setTemporal(java.time.LocalDateTime localDateTime);
- method public default Self setTemporal(java.time.ZonedDateTime zonedDateTime);
- method public default Self setTemporal(String text);
- method public Self setTemporal(androidx.appactions.builtintypes.properties.Temporal? temporal);
- }
-
- public static final class Thing.Companion {
- method public androidx.appactions.builtintypes.types.Thing.Builder<?> Builder();
- }
-
- public static final class Thing.DisambiguatingDescriptionValue extends androidx.appactions.builtintypes.properties.DisambiguatingDescription.CanonicalValue {
- method public String getTextValue();
- property public String textValue;
- field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue ALBUM;
- field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue AUDIOBOOK;
- field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue.Companion Companion;
- field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue EPISODE;
- field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue MOVIE;
- field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue MUSIC;
- field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue OTHER;
- field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue PHOTOGRAPH;
- field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue PODCAST;
- field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue SONG;
- field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue SOUNDTRACK;
- field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue TELEVISION_CHANNEL;
- field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue TELEVISION_SHOW;
- field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue TRAILER;
- field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue VIDEO;
- field public static final androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue VIDEO_GAME;
- }
-
- public static final class Thing.DisambiguatingDescriptionValue.Companion {
- }
-
-}
-
diff --git a/appactions/builtintypes/builtintypes-core/api/restricted_current.txt b/appactions/builtintypes/builtintypes-core/api/restricted_current.txt
index 469cd358c..198ed2d 100644
--- a/appactions/builtintypes/builtintypes-core/api/restricted_current.txt
+++ b/appactions/builtintypes/builtintypes-core/api/restricted_current.txt
@@ -2,8 +2,8 @@
package androidx.appactions.builtintypes.properties {
public final class Description {
- ctor public Description(String text);
ctor public Description(androidx.appactions.builtintypes.properties.Description.CanonicalValue canonicalValue);
+ ctor public Description(String text);
method public androidx.appactions.builtintypes.properties.Description.CanonicalValue? getAsCanonicalValue();
method public String? getAsText();
method public <R> R mapWhen(androidx.appactions.builtintypes.properties.Description.Mapper<R> mapper);
@@ -23,8 +23,8 @@
}
public final class DisambiguatingDescription {
- ctor public DisambiguatingDescription(String text);
ctor public DisambiguatingDescription(androidx.appactions.builtintypes.properties.DisambiguatingDescription.CanonicalValue canonicalValue);
+ ctor public DisambiguatingDescription(String text);
method public androidx.appactions.builtintypes.properties.DisambiguatingDescription.CanonicalValue? getAsCanonicalValue();
method public String? getAsText();
method public <R> R mapWhen(androidx.appactions.builtintypes.properties.DisambiguatingDescription.Mapper<R> mapper);
@@ -44,8 +44,8 @@
}
public final class Name {
- ctor public Name(String text);
ctor public Name(androidx.appactions.builtintypes.properties.Name.CanonicalValue canonicalValue);
+ ctor public Name(String text);
method public androidx.appactions.builtintypes.properties.Name.CanonicalValue? getAsCanonicalValue();
method public String? getAsText();
method public <R> R mapWhen(androidx.appactions.builtintypes.properties.Name.Mapper<R> mapper);
@@ -65,10 +65,10 @@
}
public final class Temporal {
+ ctor public Temporal(androidx.appactions.builtintypes.properties.Temporal.CanonicalValue canonicalValue);
+ ctor public Temporal(String text);
ctor public Temporal(java.time.LocalDateTime localDateTime);
ctor public Temporal(java.time.ZonedDateTime zonedDateTime);
- ctor public Temporal(String text);
- ctor public Temporal(androidx.appactions.builtintypes.properties.Temporal.CanonicalValue canonicalValue);
method public androidx.appactions.builtintypes.properties.Temporal.CanonicalValue? getAsCanonicalValue();
method public java.time.LocalDateTime? getAsLocalDateTime();
method public String? getAsText();
@@ -156,18 +156,18 @@
public static interface Thing.Builder<Self extends androidx.appactions.builtintypes.types.Thing.Builder<Self>> {
method public androidx.appactions.builtintypes.types.Thing build();
- method public default Self setDescription(String text);
method public Self setDescription(androidx.appactions.builtintypes.properties.Description? description);
- method public default Self setDisambiguatingDescription(String text);
- method public default Self setDisambiguatingDescription(androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue canonicalValue);
+ method public default Self setDescription(String text);
method public Self setDisambiguatingDescription(androidx.appactions.builtintypes.properties.DisambiguatingDescription? disambiguatingDescription);
+ method public default Self setDisambiguatingDescription(androidx.appactions.builtintypes.types.Thing.DisambiguatingDescriptionValue canonicalValue);
+ method public default Self setDisambiguatingDescription(String text);
method public Self setIdentifier(String? text);
- method public default Self setName(String text);
method public Self setName(androidx.appactions.builtintypes.properties.Name? name);
+ method public default Self setName(String text);
+ method public Self setTemporal(androidx.appactions.builtintypes.properties.Temporal? temporal);
+ method public default Self setTemporal(String text);
method public default Self setTemporal(java.time.LocalDateTime localDateTime);
method public default Self setTemporal(java.time.ZonedDateTime zonedDateTime);
- method public default Self setTemporal(String text);
- method public Self setTemporal(androidx.appactions.builtintypes.properties.Temporal? temporal);
}
public static final class Thing.Companion {
diff --git a/appactions/builtintypes/builtintypes-core/build.gradle b/appactions/builtintypes/builtintypes-core/build.gradle
index 9d98eb3..828e4de 100644
--- a/appactions/builtintypes/builtintypes-core/build.gradle
+++ b/appactions/builtintypes/builtintypes-core/build.gradle
@@ -43,7 +43,7 @@
}
androidx {
- name = "androidx.appactions.builtintypes:builtintypes-core"
+ name = "AppActions Builtin Types Core"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2023"
description = "This library exposes a core set of data types based on schema.org definitions."
diff --git a/appactions/interaction/interaction-capabilities-communication/api/public_plus_experimental_current.txt b/appactions/interaction/interaction-capabilities-communication/api/public_plus_experimental_current.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/appactions/interaction/interaction-capabilities-communication/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/appactions/interaction/interaction-capabilities-communication/build.gradle b/appactions/interaction/interaction-capabilities-communication/build.gradle
index 9de46bb..826c8b6a 100644
--- a/appactions/interaction/interaction-capabilities-communication/build.gradle
+++ b/appactions/interaction/interaction-capabilities-communication/build.gradle
@@ -31,8 +31,7 @@
android {
namespace "androidx.appactions.interaction.capabilities.communication"
defaultConfig {
- // TODO(b/266649259): lower minSdk version once Optional is removed.
- minSdkVersion 33
+ minSdkVersion 26
}
}
diff --git a/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/ParticipantValue.kt b/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/ParticipantValue.kt
index 048d9e5..077274a 100644
--- a/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/ParticipantValue.kt
+++ b/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/ParticipantValue.kt
@@ -16,10 +16,10 @@
package androidx.appactions.interaction.capabilities.communication
import androidx.appactions.builtintypes.experimental.properties.Participant
+import androidx.appactions.interaction.capabilities.core.SearchAction
import androidx.appactions.interaction.capabilities.core.impl.converters.ParamValueConverter
import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters
import androidx.appactions.interaction.capabilities.core.impl.converters.UnionTypeSpec
-import androidx.appactions.interaction.capabilities.core.SearchAction
class ParticipantValue private constructor(
val asParticipant: Participant?,
diff --git a/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/RecipientValue.kt b/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/RecipientValue.kt
index bf3620d..f66ad67 100644
--- a/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/RecipientValue.kt
+++ b/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/RecipientValue.kt
@@ -17,10 +17,10 @@
package androidx.appactions.interaction.capabilities.communication
import androidx.appactions.builtintypes.experimental.properties.Recipient
+import androidx.appactions.interaction.capabilities.core.SearchAction
import androidx.appactions.interaction.capabilities.core.impl.converters.ParamValueConverter
import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters
import androidx.appactions.interaction.capabilities.core.impl.converters.UnionTypeSpec
-import androidx.appactions.interaction.capabilities.core.SearchAction
class RecipientValue private constructor(
val asRecipient: Recipient?,
diff --git a/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/package-info.java b/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/package-info.java
index 5d9654e..4c3216d 100644
--- a/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/package-info.java
+++ b/appactions/interaction/interaction-capabilities-communication/src/main/java/androidx/appactions/interaction/capabilities/communication/package-info.java
@@ -14,7 +14,6 @@
* limitations under the License.
*/
-/** @hide */
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
package androidx.appactions.interaction.capabilities.communication;
diff --git a/appactions/interaction/interaction-capabilities-core/api/public_plus_experimental_current.txt b/appactions/interaction/interaction-capabilities-core/api/public_plus_experimental_current.txt
deleted file mode 100644
index 4045e23..0000000
--- a/appactions/interaction/interaction-capabilities-core/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,52 +0,0 @@
-// Signature format: 4.0
-package androidx.appactions.interaction.capabilities.core {
-
- public interface BaseExecutionSession<ArgumentsT, OutputT> {
- method public default void onCreate(androidx.appactions.interaction.capabilities.core.SessionConfig sessionConfig);
- method public default void onDestroy();
- method public default suspend Object? onExecute(ArgumentsT arguments, kotlin.coroutines.Continuation<? super androidx.appactions.interaction.capabilities.core.ExecutionResult<OutputT>>);
- method public default com.google.common.util.concurrent.ListenableFuture<androidx.appactions.interaction.capabilities.core.ExecutionResult<OutputT>> onExecuteAsync(ArgumentsT arguments);
- }
-
- public abstract class Capability {
- method public String getId();
- property public String id;
- }
-
- public abstract static class Capability.Builder<BuilderT extends androidx.appactions.interaction.capabilities.core.Capability.Builder<BuilderT, ArgumentsT, OutputT, ConfirmationT, ExecutionSessionT>, ArgumentsT, OutputT, ConfirmationT, ExecutionSessionT extends androidx.appactions.interaction.capabilities.core.BaseExecutionSession<ArgumentsT, OutputT>> {
- method public androidx.appactions.interaction.capabilities.core.Capability build();
- method public final BuilderT setExecutionCallback(androidx.appactions.interaction.capabilities.core.ExecutionCallback<ArgumentsT,OutputT> executionCallback);
- method public final BuilderT setExecutionCallback(androidx.appactions.interaction.capabilities.core.ExecutionCallbackAsync<ArgumentsT,OutputT> executionCallbackAsync);
- method public BuilderT setExecutionSessionFactory(kotlin.jvm.functions.Function1<? super androidx.appactions.interaction.capabilities.core.HostProperties,? extends ExecutionSessionT> sessionFactory);
- method public final BuilderT setId(String id);
- }
-
- public fun interface ExecutionCallback<ArgumentsT, OutputT> {
- method public suspend Object? onExecute(ArgumentsT arguments, kotlin.coroutines.Continuation<? super androidx.appactions.interaction.capabilities.core.ExecutionResult<OutputT>>);
- }
-
- public fun interface ExecutionCallbackAsync<ArgumentsT, OutputT> {
- method public com.google.common.util.concurrent.ListenableFuture<androidx.appactions.interaction.capabilities.core.ExecutionResult<OutputT>> onExecute(ArgumentsT arguments);
- }
-
- public final class ExecutionResult<OutputT> {
- method public OutputT? getOutput();
- property public final OutputT? output;
- }
-
- public static final class ExecutionResult.Builder<OutputT> {
- ctor public ExecutionResult.Builder();
- method public androidx.appactions.interaction.capabilities.core.ExecutionResult<OutputT> build();
- method public androidx.appactions.interaction.capabilities.core.ExecutionResult.Builder<OutputT> setOutput(OutputT output);
- }
-
- public final class HostProperties {
- method public android.util.SizeF getMaxHostSizeDp();
- property public final android.util.SizeF maxHostSizeDp;
- }
-
- public final class SessionConfig {
- }
-
-}
-
diff --git a/appactions/interaction/interaction-capabilities-core/build.gradle b/appactions/interaction/interaction-capabilities-core/build.gradle
index 5bca53c..5d66474 100644
--- a/appactions/interaction/interaction-capabilities-core/build.gradle
+++ b/appactions/interaction/interaction-capabilities-core/build.gradle
@@ -50,7 +50,6 @@
resValues = true
}
defaultConfig {
- // TODO(b/266649259): lower minSdk version to 19.
minSdkVersion 26
resValue "string", "appactions_interaction_library_version", androidx.LibraryVersions.APPACTIONS_INTERACTION.toString()
}
diff --git a/appactions/interaction/interaction-capabilities-core/lint-baseline.xml b/appactions/interaction/interaction-capabilities-core/lint-baseline.xml
deleted file mode 100644
index e55c629..0000000
--- a/appactions/interaction/interaction-capabilities-core/lint-baseline.xml
+++ /dev/null
@@ -1,130 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.1.0-alpha07" type="baseline" client="gradle" dependencies="false" name="AGP (8.0.0-beta03)" variant="all" version="8.1.0-alpha07">
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" fun getAppAction(): AppAction"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/appactions/interaction/capabilities/core/ActionCapability.kt"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" fun createSession(hostProperties: HostProperties): ActionCapabilitySession"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/appactions/interaction/capabilities/core/ActionCapability.kt"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="interface ActionCapabilitySession {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/ActionCapabilitySession.kt"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="interface AppEntityListListener<T> : ValueListener<List<T>> {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/appactions/interaction/capabilities/core/task/AppEntityListListener.kt"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="interface AppEntityListener<T> : ValueListener<T> {"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/appactions/interaction/capabilities/core/task/AppEntityListener.kt"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="annotation class CapabilityFactory(val name: String)"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/appactions/interaction/capabilities/core/CapabilityFactory.kt"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" fun lookupInternal(request: GroundingRequest): GroundingResponse {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="interface InventoryListListener<T> : ValueListener<List<T>> {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/appactions/interaction/capabilities/core/task/InventoryListListener.kt"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="interface InventoryListener<T> : ValueListener<T> {"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/appactions/interaction/capabilities/core/task/InventoryListener.kt"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="data class LibInfo(val context: Context) {"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/appactions/interaction/capabilities/core/LibInfo.kt"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="fun <T> convertToListenableFuture("
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/concurrent/ListenableFutureHelper.kt"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="fun interface SessionBridge<"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/appactions/interaction/capabilities/core/task/impl/SessionBridge.kt"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="internal class SingleTurnCapabilityImpl<"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/SingleTurnCapabilityImpl.kt"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="internal class SingleTurnCapabilitySession<"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/SingleTurnCapabilitySession.kt"/>
- </issue>
-
-</issues>
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/package-info.java b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/experimental/package-info.java
similarity index 85%
rename from appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/package-info.java
rename to appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/experimental/package-info.java
index be939da..d6624512 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/package-info.java
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/experimental/package-info.java
@@ -14,8 +14,8 @@
* limitations under the License.
*/
-/** @hide */
+// TODO(b/271000058): Delete experimental builtintypes package.
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-package androidx.appactions.builtintypes;
+package androidx.appactions.builtintypes.experimental;
import androidx.annotation.RestrictTo;
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/experimental/types/CalendarEvent.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/experimental/types/CalendarEvent.kt
index fa8d0d8..f904e1f 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/experimental/types/CalendarEvent.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/experimental/types/CalendarEvent.kt
@@ -16,11 +16,10 @@
package androidx.appactions.builtintypes.experimental.types
-// TODO(b/271634410): Update Attendee references
+import androidx.appactions.builtintypes.experimental.properties.Attendee
import androidx.appactions.builtintypes.experimental.properties.EndDate
import androidx.appactions.builtintypes.experimental.properties.Name
import androidx.appactions.builtintypes.experimental.properties.StartDate
-import androidx.appactions.builtintypes.experimental.properties.Attendee
import java.time.LocalDate
import java.time.ZonedDateTime
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/experimental/types/ItemList.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/experimental/types/ItemList.kt
index e2308b6..df7d88a 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/experimental/types/ItemList.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/builtintypes/experimental/types/ItemList.kt
@@ -16,8 +16,8 @@
package androidx.appactions.builtintypes.experimental.types
-import androidx.appactions.builtintypes.experimental.properties.Name
import androidx.appactions.builtintypes.experimental.properties.ItemListElement
+import androidx.appactions.builtintypes.experimental.properties.Name
interface ItemList : Thing {
val itemListElements: List<ItemListElement>
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/AppEntityListener.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/AppEntityListener.kt
index a28c9a2..10c014c 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/AppEntityListener.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/AppEntityListener.kt
@@ -21,8 +21,6 @@
/**
* Handle grounding of ungrounded values.
- *
- * @suppress
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
interface AppEntityListenerBase<T> {
@@ -54,16 +52,12 @@
/**
* Similar to ValueListener, but also need to handle grounding of ungrounded values.
- *
- * @suppress
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
interface AppEntityListener<T> : ValueListener<T>, AppEntityListenerBase<T>
/**
* Similar to ValueListener, but also need to handle grounding of ungrounded values.
- *
- * @suppress
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
interface AppEntityListListener<T> : ValueListener<List<T>>, AppEntityListenerBase<T>
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/Capability.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/Capability.kt
index a720034..0fcd4a2 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/Capability.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/Capability.kt
@@ -38,8 +38,6 @@
/**
* Returns an app action proto describing how to fulfill this capability.
- *
- * @suppress
*/
@get:RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
abstract val appAction: AppAction
@@ -47,8 +45,6 @@
/**
* Create a new capability session. The capability library doesn't maintain registry of
* capabilities, so it's not going to assign any session id.
- *
- * @suppress
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
abstract fun createSession(
@@ -89,8 +85,6 @@
/**
* The SessionBridge object, which is used to normalize Session instances to TaskHandler.
* see SessionBridge documentation for more information.
- *
- * @suppress
*/
@get:RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
protected open val sessionBridge: SessionBridge<
@@ -127,7 +121,7 @@
* calling one will nullify the other.
*
* This method accepts a coroutine-based ExecutionCallback instance. There is also an
- * overload which accepts the ExecutionCallbackAsync instead.
+ * overload which accepts the [ExecutionCallbackAsync] instead.
*/
@SuppressLint("MissingGetterMatchingBuilder")
fun setExecutionCallback(executionCallback: ExecutionCallback<ArgumentsT, OutputT>) =
@@ -136,13 +130,13 @@
}
/**
- * Sets the ExecutionCallbackAsync for this capability.
+ * Sets the [ExecutionCallbackAsync] for this capability.
*
- * setExecutionSessionFactory and setExecutionCallback are mutually exclusive, so calling
- * one will nullify the other.
+ * [setExecutionSessionFactory] and [setExecutionCallback] are mutually exclusive, so
+ * calling one will nullify the other.
*
- * This method accepts the ExecutionCallbackAsync interface which returns a
- * [ListenableFuture].
+ * This method accepts the [ExecutionCallbackAsync] interface, which is the Future version
+ * of [ExecutionCallback]
*/
@SuppressLint("MissingGetterMatchingBuilder")
fun setExecutionCallback(
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/CapabilityFactory.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/CapabilityFactory.kt
index 5849af3..d1d45ea 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/CapabilityFactory.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/CapabilityFactory.kt
@@ -18,9 +18,8 @@
import androidx.annotation.RestrictTo
-/** Annotates a class for creating some Capability.
- *
- * @suppress
+/**
+ * Annotates a class for creating some Capability.
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@Target(AnnotationTarget.CLASS)
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/HostProperties.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/HostProperties.kt
index 564a173..b3cdb06 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/HostProperties.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/HostProperties.kt
@@ -52,7 +52,7 @@
* Builds and returns the HostProperties instance.
*/
fun build() = HostProperties(
- requireNotNull(maxHostSizeDp, { "maxHostSizeDp must be set." }),
+ requireNotNull(maxHostSizeDp) { "maxHostSizeDp must be set." },
)
}
}
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/InventoryListener.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/InventoryListener.kt
index 77dfdad..9415c17 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/InventoryListener.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/InventoryListener.kt
@@ -21,8 +21,6 @@
/**
* Handles entity rendering.
- *
- * @suppress
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
interface InventoryListenerBase {
@@ -51,16 +49,12 @@
/**
* Similar to ValueListener, but also need to handle entity rendering.
- *
- * @suppress
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
interface InventoryListener<T> : ValueListener<T>, InventoryListenerBase
/**
* Similar to ValueListener, but also need to handle entity rendering.
- *
- * @suppress
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
interface InventoryListListener<T> : ValueListener<List<T>>, InventoryListenerBase
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/LibInfo.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/LibInfo.kt
index c1c053c..dd84a19 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/LibInfo.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/LibInfo.kt
@@ -18,11 +18,9 @@
import android.content.Context
import androidx.annotation.RestrictTo
-
-import java.util.regex.Pattern
import java.util.Objects.requireNonNull
+import java.util.regex.Pattern
-/** @suppress */
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
data class LibInfo(val context: Context) {
fun getVersion(): Version {
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/SearchAction.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/SearchAction.kt
index 10beb9a..03648fd4 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/SearchAction.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/SearchAction.kt
@@ -35,6 +35,12 @@
return true
}
+ override fun hashCode(): Int {
+ var result = query?.hashCode() ?: 0
+ result += 31 * (filter?.hashCode() ?: 0)
+ return result
+ }
+
/** Builder class for Entity. */
class Builder<FilterT> {
private var query: String? = null
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityLookupCandidate.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityLookupCandidate.kt
index e1734cb..9fac8e1 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityLookupCandidate.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityLookupCandidate.kt
@@ -22,7 +22,7 @@
) {
override fun toString(): String {
- return "EntityLookupCandidate(cadidate=$candidate)"
+ return "EntityLookupCandidate(candidate=$candidate)"
}
override fun equals(other: Any?): Boolean {
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityLookupResponse.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityLookupResponse.kt
index 029e261..1f3f166 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityLookupResponse.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityLookupResponse.kt
@@ -56,7 +56,7 @@
private var candidateList: List<EntityLookupCandidate<T>> = listOf()
@property:EntityLookupStatus
- private var status: Int = EntityLookupResponse.SUCCESS
+ private var status: Int = SUCCESS
private var nextPageToken: ByteString? = null
fun setCandidateList(candidateList: List<EntityLookupCandidate<T>>): Builder<T> = apply {
this.candidateList = candidateList
@@ -71,7 +71,7 @@
this.nextPageToken = nextPageToken
}
- fun build() = EntityLookupResponse<T>(candidateList, status, nextPageToken)
+ fun build() = EntityLookupResponse(candidateList, status, nextPageToken)
}
companion object {
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt
index 121b582..8a7514b 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt
@@ -17,14 +17,14 @@
package androidx.appactions.interaction.capabilities.core.entity
import androidx.annotation.RestrictTo
-import androidx.appactions.interaction.capabilities.core.impl.converters.EntityConverter
+import androidx.appactions.builtintypes.experimental.types.Thing
+import androidx.appactions.interaction.capabilities.core.SearchAction
import androidx.appactions.interaction.capabilities.core.impl.concurrent.Futures
+import androidx.appactions.interaction.capabilities.core.impl.converters.EntityConverter
import androidx.appactions.interaction.capabilities.core.impl.converters.SearchActionConverter
import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters
import androidx.appactions.interaction.capabilities.core.impl.converters.TypeSpec
import androidx.appactions.interaction.capabilities.core.impl.exceptions.StructConversionException
-import androidx.appactions.interaction.capabilities.core.SearchAction
-import androidx.appactions.builtintypes.experimental.types.Thing
import androidx.appactions.interaction.proto.GroundingRequest
import androidx.appactions.interaction.proto.GroundingResponse
import androidx.concurrent.futures.await
@@ -72,8 +72,6 @@
/**
* Internal method to lookup untyped entity, which will be used by service library to handle
* {@link GroundingRequest}.
- *
- * @suppress
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
suspend fun lookupInternal(request: GroundingRequest): GroundingResponse {
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/entity/package-info.java b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/entity/package-info.java
index 1d8cf70..4f695da 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/entity/package-info.java
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/entity/package-info.java
@@ -14,7 +14,6 @@
* limitations under the License.
*/
-/** @hide */
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
package androidx.appactions.interaction.capabilities.core.entity;
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/ArgumentsWrapper.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/ArgumentsWrapper.kt
index 8aaadae..f6178d5 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/ArgumentsWrapper.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/ArgumentsWrapper.kt
@@ -54,7 +54,7 @@
) {
null
} else {
- RequestMetadata(fulfillment.type)
+ RequestMetadata(fulfillment.type, fulfillment.syncStatus)
}
}
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/CapabilitySession.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/CapabilitySession.kt
index e2ced1d..0f9640d 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/CapabilitySession.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/CapabilitySession.kt
@@ -21,8 +21,6 @@
/**
* Internal interface for a session, contains developer's Session instance
- *
- * @suppress
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
interface CapabilitySession {
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/RequestMetadata.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/RequestMetadata.kt
index 37be7ca..d001532 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/RequestMetadata.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/RequestMetadata.kt
@@ -21,12 +21,14 @@
@RestrictTo(RestrictTo.Scope.LIBRARY)
data class RequestMetadata internal constructor(
- val requestType: Fulfillment.Type
+ val requestType: Fulfillment.Type,
+ val syncStatus: Fulfillment.SyncStatus
) {
companion object {
@JvmStatic
- fun create(requestType: Fulfillment.Type): RequestMetadata {
- return RequestMetadata(requestType)
+ fun create(requestType: Fulfillment.Type, syncStatus: Fulfillment.SyncStatus):
+ RequestMetadata {
+ return RequestMetadata(requestType, syncStatus)
}
}
}
\ No newline at end of file
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/SingleTurnCapabilityImpl.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/SingleTurnCapabilityImpl.kt
index 2a9393e..862385b 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/SingleTurnCapabilityImpl.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/SingleTurnCapabilityImpl.kt
@@ -26,7 +26,6 @@
import androidx.appactions.interaction.proto.TaskInfo
import kotlinx.coroutines.sync.Mutex
-/** @suppress */
@RestrictTo(RestrictTo.Scope.LIBRARY)
internal class SingleTurnCapabilityImpl<
ArgumentsT,
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/SingleTurnCapabilitySession.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/SingleTurnCapabilitySession.kt
index f61a922..dabe1cd 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/SingleTurnCapabilitySession.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/SingleTurnCapabilitySession.kt
@@ -22,8 +22,8 @@
import androidx.appactions.interaction.capabilities.core.impl.spec.ActionSpec
import androidx.appactions.interaction.capabilities.core.impl.utils.CapabilityLogger
import androidx.appactions.interaction.capabilities.core.impl.utils.LoggerInternal
-import androidx.appactions.interaction.capabilities.core.impl.utils.invokeExternalSuspendBlock
import androidx.appactions.interaction.capabilities.core.impl.utils.handleExceptionFromRequestProcessing
+import androidx.appactions.interaction.capabilities.core.impl.utils.invokeExternalSuspendBlock
import androidx.appactions.interaction.proto.AppActionsContext.AppDialogState
import androidx.appactions.interaction.proto.FulfillmentResponse
import androidx.appactions.interaction.proto.ParamValue
@@ -36,8 +36,6 @@
/**
* CapabilitySession implementation for executing single-turn fulfillment requests.
- *
- * @suppress
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
internal class SingleTurnCapabilitySession<
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/concurrent/FutureCallback.java b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/concurrent/FutureCallback.kt
similarity index 81%
rename from appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/concurrent/FutureCallback.java
rename to appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/concurrent/FutureCallback.kt
index 6d2ca04..e807783 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/concurrent/FutureCallback.java
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/concurrent/FutureCallback.kt
@@ -13,20 +13,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-package androidx.appactions.interaction.capabilities.core.impl.concurrent;
-
-import androidx.annotation.NonNull;
+package androidx.appactions.interaction.capabilities.core.impl.concurrent
/**
* A FutureCallback that can be attached to a ListenableFuture with Futures#addCallback.
- *
- * @param <V>
*/
-public interface FutureCallback<V> {
- /** Called with the ListenableFuture's result if it completes successfully. */
- void onSuccess(V result);
+interface FutureCallback<V> {
+ /** Called with the ListenableFuture's result if it completes successfully. */
+ fun onSuccess(result: V)
- /** Called with the ListenableFuture's exception if it fails. */
- void onFailure(@NonNull Throwable t);
-}
+ /** Called with the ListenableFuture's exception if it fails. */
+ fun onFailure(t: Throwable)
+}
\ No newline at end of file
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/concurrent/Futures.java b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/concurrent/Futures.java
deleted file mode 100644
index 51a4614..0000000
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/concurrent/Futures.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Copyright 2023 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
- *
- * http://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.
- */
-
-package androidx.appactions.interaction.capabilities.core.impl.concurrent;
-
-import android.annotation.SuppressLint;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.concurrent.futures.CallbackToFutureAdapter;
-import androidx.concurrent.futures.CallbackToFutureAdapter.Completer;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Executor;
-import java.util.concurrent.Future;
-import java.util.function.Function;
-
-/** Future/ListenableFuture related utility methods. */
-public final class Futures {
- private Futures() {
- }
-
- /** Attach a FutureCallback to a ListenableFuture instance. */
- public static <V> void addCallback(
- @NonNull final ListenableFuture<V> future,
- @NonNull final FutureCallback<? super V> callback,
- @NonNull Executor executor) {
- Utils.checkNotNull(callback);
- future.addListener(new CallbackListener<>(future, callback), executor);
- }
-
- /**
- * Transforms an input ListenableFuture into a second ListenableFuture by applying a
- * transforming
- * function to the result of the input ListenableFuture.
- */
- @NonNull
- @SuppressLint("LambdaLast")
- public static <I, O> ListenableFuture<O> transform(
- @NonNull ListenableFuture<I> input,
- @NonNull Function<I, O> function,
- @NonNull Executor executor,
- @Nullable String tag) {
- return CallbackToFutureAdapter.getFuture(
- completer -> {
- addCallback(input, transformFutureCallback(completer, function), executor);
- return tag;
- });
- }
-
- /**
- * Transforms an input ListenableFuture into a second ListenableFuture by applying an
- * asynchronous
- * transforming function to the result of the input ListenableFuture.
- */
- @NonNull
- @SuppressLint("LambdaLast")
- public static <I, O> ListenableFuture<O> transformAsync(
- @NonNull ListenableFuture<I> input,
- @NonNull Function<I, ListenableFuture<O>> asyncFunction,
- @NonNull Executor executor,
- @NonNull String tag) {
-
- return CallbackToFutureAdapter.getFuture(
- completer -> {
- addCallback(input, asyncTransformFutureCallback(completer, asyncFunction),
- executor);
- return tag;
- });
- }
-
- /** Returns a Future that is immediately complete with the given value. */
- @NonNull
- public static <V> ListenableFuture<V> immediateFuture(V value) {
- return CallbackToFutureAdapter.getFuture(completer -> completer.set(value));
- }
-
- /** Returns a Future that is immediately complete with null value. */
- @NonNull
- public static ListenableFuture<Void> immediateVoidFuture() {
- return CallbackToFutureAdapter.getFuture(completer -> completer.set(null));
- }
-
- /** Returns a Future that is immediately complete with an exception. */
- @NonNull
- public static <V> ListenableFuture<V> immediateFailedFuture(@NonNull Throwable throwable) {
- return CallbackToFutureAdapter.getFuture(completer -> completer.setException(throwable));
- }
-
- /**
- * Returns a FutureCallback that transform the result in onSuccess, and then set the result in
- * completer.
- */
- static <I, O> FutureCallback<I> transformFutureCallback(
- Completer<O> completer, Function<I, O> function) {
- return new FutureCallback<I>() {
- @Override
- public void onSuccess(I result) {
- try {
- completer.set(function.apply(result));
- } catch (Throwable t) {
- if (t instanceof InterruptedException) {
- Thread.currentThread().interrupt();
- }
- completer.setException(t);
- }
- }
-
- @Override
- public void onFailure(Throwable failure) {
- completer.setException(failure);
- }
- };
- }
-
- /** Returns a FutureCallback that asynchronously transform the result. */
- private static <I, O> FutureCallback<I> asyncTransformFutureCallback(
- Completer<O> completer, Function<I, ListenableFuture<O>> asyncFunction) {
- return new FutureCallback<I>() {
- @Override
- public void onSuccess(I inputResult) {
- try {
- addCallback(
- asyncFunction.apply(inputResult),
- transformFutureCallback(completer, Function.identity()),
- Runnable::run);
- } catch (Throwable t) {
- if (t instanceof InterruptedException) {
- Thread.currentThread().interrupt();
- }
- completer.setException(t);
- }
- }
-
- @Override
- public void onFailure(@NonNull Throwable failure) {
- completer.setException(failure);
- }
- };
- }
-
- static <V> V getDone(Future<V> future) throws ExecutionException {
- Utils.checkState(future.isDone(), "future is expected to be done already.");
- boolean interrupted = false;
- try {
- while (true) {
- try {
- return future.get();
- } catch (InterruptedException e) {
- interrupted = true;
- }
- }
- } finally {
- if (interrupted) {
- Thread.currentThread().interrupt();
- }
- }
- }
-
- private static final class CallbackListener<V> implements Runnable {
- final Future<V> mFuture;
- final FutureCallback<? super V> mCallback;
-
- CallbackListener(Future<V> future, FutureCallback<? super V> callback) {
- this.mFuture = future;
- this.mCallback = callback;
- }
-
- @Override
- public void run() {
- final V value;
- try {
- value = getDone(mFuture);
- } catch (ExecutionException e) {
- Throwable cause = e.getCause();
- mCallback.onFailure(cause != null ? cause : e);
- return;
- } catch (RuntimeException | Error e) {
- mCallback.onFailure(e);
- return;
- }
- mCallback.onSuccess(value);
- }
- }
-}
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/concurrent/Futures.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/concurrent/Futures.kt
new file mode 100644
index 0000000..0005982
--- /dev/null
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/concurrent/Futures.kt
@@ -0,0 +1,223 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+package androidx.appactions.interaction.capabilities.core.impl.concurrent
+
+import androidx.concurrent.futures.CallbackToFutureAdapter
+import com.google.common.util.concurrent.ListenableFuture
+import java.util.concurrent.ExecutionException
+import java.util.concurrent.Executor
+import java.util.concurrent.Future
+import java.util.function.Function
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+
+/** Future/ListenableFuture related utility methods. */
+object Futures {
+ /** Attach a FutureCallback to a ListenableFuture instance. */
+ fun <V> addCallback(
+ future: ListenableFuture<V>,
+ callback: FutureCallback<in V>,
+ executor: Executor
+ ) {
+ future.addListener(CallbackListener(future, callback), executor)
+ }
+
+ /**
+ * Transforms an input ListenableFuture into a second ListenableFuture by applying a
+ * transforming
+ * function to the result of the input ListenableFuture.
+ */
+ fun <I, O> transform(
+ input: ListenableFuture<I>,
+ function: Function<I, O>,
+ executor: Executor,
+ tag: String?
+ ): ListenableFuture<O> {
+ return CallbackToFutureAdapter.getFuture {
+ completer: CallbackToFutureAdapter.Completer<O> ->
+ addCallback(input, transformFutureCallback(completer, function), executor)
+ tag
+ }
+ }
+
+ /**
+ * Transforms an input ListenableFuture into a second ListenableFuture by applying an
+ * asynchronous
+ * transforming function to the result of the input ListenableFuture.
+ */
+ fun <I, O> transformAsync(
+ input: ListenableFuture<I>,
+ asyncFunction: Function<I, ListenableFuture<O>>,
+ executor: Executor,
+ tag: String
+ ): ListenableFuture<O> {
+ return CallbackToFutureAdapter.getFuture {
+ completer: CallbackToFutureAdapter.Completer<O> ->
+ addCallback(
+ input, asyncTransformFutureCallback(completer, asyncFunction),
+ executor
+ )
+ tag
+ }
+ }
+
+ /** Returns a Future that is immediately complete with the given value. */
+ fun <V> immediateFuture(value: V): ListenableFuture<V> {
+ return CallbackToFutureAdapter.getFuture {
+ completer: CallbackToFutureAdapter.Completer<V> ->
+ completer.set(
+ value
+ )
+ }
+ }
+
+ /** Returns a Future that is immediately complete with null value. */
+ fun immediateVoidFuture(): ListenableFuture<Void> {
+ return CallbackToFutureAdapter.getFuture {
+ completer: CallbackToFutureAdapter.Completer<Void> ->
+ completer.set(
+ null
+ )
+ }
+ }
+
+ /** Returns a Future that is immediately complete with an exception. */
+ fun <V> immediateFailedFuture(throwable: Throwable): ListenableFuture<V> {
+ return CallbackToFutureAdapter.getFuture {
+ completer: CallbackToFutureAdapter.Completer<V> ->
+ completer.setException(
+ throwable
+ )
+ }
+ }
+
+ /**
+ * Returns a FutureCallback that transform the result in onSuccess, and then set the result in
+ * completer.
+ */
+ fun <I, O> transformFutureCallback(
+ completer: CallbackToFutureAdapter.Completer<O>,
+ function: Function<I, O>
+ ): FutureCallback<I> {
+ return object : FutureCallback<I> {
+ override fun onSuccess(result: I) {
+ try {
+ completer.set(function.apply(result))
+ } catch (t: Throwable) {
+ if (t is InterruptedException) {
+ Thread.currentThread().interrupt()
+ }
+ completer.setException(t)
+ }
+ }
+
+ override fun onFailure(t: Throwable) {
+ completer.setException(t)
+ }
+ }
+ }
+
+ /** Returns a FutureCallback that asynchronously transform the result. */
+ private fun <I, O> asyncTransformFutureCallback(
+ completer: CallbackToFutureAdapter.Completer<O>,
+ asyncFunction: Function<I, ListenableFuture<O>>
+ ): FutureCallback<I> {
+ return object : FutureCallback<I> {
+ override fun onSuccess(result: I) {
+ try {
+ addCallback(
+ asyncFunction.apply(result),
+ transformFutureCallback(completer, Function.identity())
+ ) { obj: Runnable -> obj.run() }
+ } catch (t: Throwable) {
+ if (t is InterruptedException) {
+ Thread.currentThread().interrupt()
+ }
+ completer.setException(t)
+ }
+ }
+
+ override fun onFailure(t: Throwable) {
+ completer.setException(t)
+ }
+ }
+ }
+
+ @Throws(ExecutionException::class)
+ fun <V> getDone(future: Future<V>): V {
+ if (!future.isDone) {
+ throw IllegalStateException("future is expected to be done already.")
+ }
+ var interrupted = false
+ try {
+ while (true) {
+ interrupted = try {
+ return future.get()
+ } catch (e: InterruptedException) {
+ true
+ }
+ }
+ } finally {
+ if (interrupted) {
+ Thread.currentThread().interrupt()
+ }
+ }
+ }
+
+ private class CallbackListener<V> internal constructor(
+ val mFuture: Future<V>,
+ val mCallback: FutureCallback<in V>
+ ) : Runnable {
+ override fun run() {
+ val value: V
+ value = try {
+ getDone(mFuture)
+ } catch (e: ExecutionException) {
+ val cause = e.cause
+ mCallback.onFailure(cause ?: e)
+ return
+ } catch (e: RuntimeException) {
+ mCallback.onFailure(e)
+ return
+ } catch (e: Error) {
+ mCallback.onFailure(e)
+ return
+ }
+ mCallback.onSuccess(value)
+ }
+ }
+}
+
+fun <T> convertToListenableFuture(
+ tag: String,
+ block: suspend CoroutineScope.() -> T,
+): ListenableFuture<T> {
+ return CallbackToFutureAdapter.getFuture { completer ->
+ val job = CoroutineScope(Dispatchers.Unconfined).launch {
+ try {
+ completer.set(block())
+ } catch (t: Throwable) {
+ completer.setException(t)
+ }
+ }
+ completer.addCancellationListener(
+ { job.cancel() },
+ Runnable::run,
+ )
+ "ListenableFutureHelper#convertToListenableFuture for '$tag'"
+ }
+}
\ No newline at end of file
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/concurrent/ListenableFutureHelper.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/concurrent/ListenableFutureHelper.kt
deleted file mode 100644
index b640f22..0000000
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/concurrent/ListenableFutureHelper.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-package androidx.appactions.interaction.capabilities.core.impl.concurrent
-
-import androidx.annotation.RestrictTo
-import androidx.concurrent.futures.CallbackToFutureAdapter
-import com.google.common.util.concurrent.ListenableFuture
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.launch
-
-// TODO(b/269525385): merge this into Futures utility class once it's migrated to Kotlin.
-/** @suppress */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-fun <T> convertToListenableFuture(
- tag: String,
- block: suspend CoroutineScope.() -> T,
-): ListenableFuture<T> {
- return CallbackToFutureAdapter.getFuture { completer ->
- val job = CoroutineScope(Dispatchers.Unconfined).launch {
- try {
- completer.set(block())
- } catch (t: Throwable) {
- completer.setException(t)
- }
- }
- completer.addCancellationListener(
- { job.cancel() },
- Runnable::run,
- )
- "ListenableFutureHelper#convertToListenableFuture for '$tag'"
- }
-}
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/concurrent/Utils.java b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/concurrent/Utils.java
deleted file mode 100644
index aeb0e9b..0000000
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/concurrent/Utils.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2023 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
- *
- * http://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.
- */
-
-package androidx.appactions.interaction.capabilities.core.impl.concurrent;
-
-import androidx.annotation.Nullable;
-
-final class Utils {
-
- private Utils() {
- }
-
- public static <T> T checkNotNull(@Nullable T reference) {
- if (reference == null) {
- throw new NullPointerException();
- }
- return reference;
- }
-
- public static <T> T checkNotNull(@Nullable T reference, String errorMessage) {
- if (reference == null) {
- throw new NullPointerException(errorMessage);
- }
- return reference;
- }
-
- public static void checkState(boolean b, String message) {
- if (!b) {
- throw new IllegalStateException(message);
- }
- }
-}
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/EntityConverter.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/EntityConverter.kt
index 6c7a290..05072dd 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/EntityConverter.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/EntityConverter.kt
@@ -43,13 +43,13 @@
}
}
- internal fun valueToEntity(value: Value): Entity {
+ private fun valueToEntity(value: Value): Entity {
val builder = Entity.newBuilder()
when {
- value.hasStringValue() -> builder.setStringValue(value.getStringValue())
- value.hasBoolValue() -> builder.setBoolValue(value.getBoolValue())
- value.hasNumberValue() -> builder.setNumberValue(value.getNumberValue())
- value.hasStructValue() -> builder.setStructValue(value.getStructValue())
+ value.hasStringValue() -> builder.stringValue = value.stringValue
+ value.hasBoolValue() -> builder.boolValue = value.boolValue
+ value.hasNumberValue() -> builder.numberValue = value.numberValue
+ value.hasStructValue() -> builder.structValue = value.structValue
else -> throw IllegalStateException("cannot convert $value into Entity.")
}
return builder.build()
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt
index df74750..a2ec085 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt
@@ -54,10 +54,10 @@
internal fun paramValueToValue(paramValue: ParamValue): Value {
val builder = Value.newBuilder()
when {
- paramValue.hasStringValue() -> builder.setStringValue(paramValue.getStringValue())
- paramValue.hasBoolValue() -> builder.setBoolValue(paramValue.getBoolValue())
- paramValue.hasNumberValue() -> builder.setNumberValue(paramValue.getNumberValue())
- paramValue.hasStructValue() -> builder.setStructValue(paramValue.getStructValue())
+ paramValue.hasStringValue() -> builder.stringValue = paramValue.stringValue
+ paramValue.hasBoolValue() -> builder.boolValue = paramValue.boolValue
+ paramValue.hasNumberValue() -> builder.numberValue = paramValue.numberValue
+ paramValue.hasStructValue() -> builder.structValue = paramValue.structValue
else -> throw StructConversionException("cannot convert $paramValue into Value.")
}
return builder.build()
@@ -66,10 +66,10 @@
internal fun valueToParamValue(value: Value): ParamValue {
val builder = ParamValue.newBuilder()
when {
- value.hasStringValue() -> builder.setStringValue(value.getStringValue())
- value.hasBoolValue() -> builder.setBoolValue(value.getBoolValue())
- value.hasNumberValue() -> builder.setNumberValue(value.getNumberValue())
- value.hasStructValue() -> builder.setStructValue(value.getStructValue())
+ value.hasStringValue() -> builder.stringValue = value.stringValue
+ value.hasBoolValue() -> builder.boolValue = value.boolValue
+ value.hasNumberValue() -> builder.numberValue = value.numberValue
+ value.hasStructValue() -> builder.structValue = value.structValue
else -> throw IllegalStateException("cannot convert $value to ParamValue.")
}
return builder.build()
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeConverters.java b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeConverters.java
index a963bf6..8d26ad7 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeConverters.java
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeConverters.java
@@ -373,15 +373,15 @@
return TypeSpecBuilder.newBuilder(
"SearchAction",
SearchAction.Builder<T>::new,
- SearchAction.Builder<T>::build)
+ SearchAction.Builder::build)
.bindStringField(
"query",
SearchAction::getQuery,
- SearchAction.Builder<T>::setQuery)
+ SearchAction.Builder::setQuery)
.bindSpecField(
"filter",
SearchAction::getFilter,
- SearchAction.Builder<T>::setFilter,
+ SearchAction.Builder::setFilter,
nestedTypeSpec)
.build();
}
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeSpec.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeSpec.kt
index fbb5d4a..4656db6 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeSpec.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeSpec.kt
@@ -47,7 +47,7 @@
): Value = Value.newBuilder().setStringValue(obj).build()
override fun fromValue(value: Value): String = when {
- value.hasStringValue() -> value.getStringValue()
+ value.hasStringValue() -> value.stringValue
else -> throw StructConversionException("STRING_TYPE_SPEC cannot convert $value")
}
}
@@ -61,7 +61,7 @@
): Value = Value.newBuilder().setBoolValue(obj).build()
override fun fromValue(value: Value): Boolean = when {
- value.hasBoolValue() -> value.getBoolValue()
+ value.hasBoolValue() -> value.boolValue
else -> throw StructConversionException("BOOL_TYPE_SPEC cannot convert $value")
}
}
@@ -75,7 +75,7 @@
): Value = Value.newBuilder().setNumberValue(obj).build()
override fun fromValue(value: Value): Double = when {
- value.hasNumberValue() -> value.getNumberValue()
+ value.hasNumberValue() -> value.numberValue
else -> throw StructConversionException("NUMBER_TYPE_SPEC cannot convert $value")
}
}
@@ -89,7 +89,7 @@
): Value = Value.newBuilder().setNumberValue(obj.toDouble()).build()
override fun fromValue(value: Value): Int = when {
- value.hasNumberValue() -> value.getNumberValue().toInt()
+ value.hasNumberValue() -> value.numberValue.toInt()
else -> throw StructConversionException("INTEGER_TYPE_SPEC cannot convert $value")
}
}
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeSpecBuilder.java b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeSpecBuilder.java
index 21c30a6..279e65c 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeSpecBuilder.java
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeSpecBuilder.java
@@ -305,9 +305,7 @@
}
return spec.toValue(value);
},
- (builder, value) -> {
- valueSetter.accept(builder, spec.fromValue(value));
- });
+ (builder, value) -> valueSetter.accept(builder, spec.fromValue(value)));
}
/** binds a repeated spec field to read from / write to Struct. */
@@ -321,7 +319,7 @@
valueGetter,
valueSetter,
spec::toValue,
- (value) -> spec.fromValue(value));
+ spec::fromValue);
}
TypeSpec<T> build() {
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/UnionTypeSpec.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/UnionTypeSpec.kt
index 8f161a6..025c5fa 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/UnionTypeSpec.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/UnionTypeSpec.kt
@@ -25,9 +25,9 @@
private val bindings: List<MemberBinding<T, *>>,
) : TypeSpec<T> {
internal class MemberBinding<T, M>(
- val memberGetter: (T) -> M?,
- val ctor: (M) -> T,
- val typeSpec: TypeSpec<M>,
+ private val memberGetter: (T) -> M?,
+ private val ctor: (M) -> T,
+ private val typeSpec: TypeSpec<M>,
) {
@Throws(StructConversionException::class)
fun tryDeserialize(value: Value): T {
@@ -48,7 +48,7 @@
}
private fun getApplicableBinding(obj: T): MemberBinding<T, *> {
- var applicableBindings = bindings.filter { it.isMemberSet(obj) }
+ val applicableBindings = bindings.filter { it.isMemberSet(obj) }
return when (applicableBindings.size) {
0 -> throw IllegalStateException("$obj is invalid, all union members are null.")
1 -> applicableBindings[0]
@@ -95,6 +95,6 @@
)
}
- fun build() = UnionTypeSpec<T>(bindings.toList())
+ fun build() = UnionTypeSpec(bindings.toList())
}
}
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/package-info.java b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/package-info.java
index ea6e4cc..8d0f6b6 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/package-info.java
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/package-info.java
@@ -14,7 +14,6 @@
* limitations under the License.
*/
-/** @hide */
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
package androidx.appactions.interaction.capabilities.core.impl;
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/SessionBridge.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/SessionBridge.kt
index a31759c..225f3f8 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/SessionBridge.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/SessionBridge.kt
@@ -19,9 +19,7 @@
import androidx.annotation.RestrictTo
/**
- * converts an external Session into TaskHandler instance.
- *
- * @suppress
+ * Converts an external Session into TaskHandler instance.
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
fun interface SessionBridge<
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskHandler.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskHandler.kt
index 9601c24..d4d418a 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskHandler.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskHandler.kt
@@ -35,7 +35,7 @@
internal val confirmationDataBindings: Map<String, (ConfirmationT) -> List<ParamValue>>,
internal val onReadyToConfirmListener: OnReadyToConfirmListener<ArgumentsT, ConfirmationT>?,
) {
- class Builder<ArgumentsT, ConfirmationT>() {
+ class Builder<ArgumentsT, ConfirmationT> {
private val mutableTaskParamMap = mutableMapOf<String, TaskParamBinding<*>>()
private val confirmationDataBindings =
mutableMapOf<String, (ConfirmationT) -> List<ParamValue>>()
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt
index 3b4ca84..44cb4e0 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt
@@ -38,6 +38,7 @@
import androidx.appactions.interaction.proto.AppActionsContext
import androidx.appactions.interaction.proto.CurrentValue
import androidx.appactions.interaction.proto.FulfillmentRequest
+import androidx.appactions.interaction.proto.FulfillmentRequest.Fulfillment.SyncStatus
import androidx.appactions.interaction.proto.FulfillmentResponse
import androidx.appactions.interaction.proto.ParamValue
import androidx.appactions.interaction.proto.TouchEventMetadata
@@ -92,14 +93,19 @@
internal var status: Status = Status.UNINITIATED
private set
+ /**
+ * Last known Sync Status of the request. Required to process Touch Event Updates
+ */
+ private var lastKnownSyncStatus = SyncStatus.UNKNOWN_SYNC_STATUS
+
+ private val inProgressLock = Any()
+
// Set a TouchEventCallback instance. This callback is invoked when state changes from manual
// input.
internal fun setTouchEventCallback(touchEventCallback: TouchEventCallback?) {
this.touchEventCallback = touchEventCallback
}
- private val inProgressLock = Any()
-
@GuardedBy("inProgressLock")
private var inProgress = false
@@ -185,7 +191,8 @@
val fulfillmentResult: FulfillmentResult = when (
argumentsWrapper.requestMetadata?.requestType
) {
- FulfillmentRequest.Fulfillment.Type.SYNC -> handleSync(argumentsWrapper)
+ FulfillmentRequest.Fulfillment.Type.SYNC ->
+ handleSyncStatus(argumentsWrapper)
FulfillmentRequest.Fulfillment.Type.CONFIRM -> handleConfirm()
FulfillmentRequest.Fulfillment.Type.CANCEL -> {
terminate()
@@ -276,7 +283,8 @@
val finalArguments = getCurrentAcceptedArguments()
if (
anyParamsOfStatus(CurrentValue.Status.REJECTED) ||
- !TaskCapabilityUtils.isSlotFillingComplete(finalArguments, appAction.paramsList)
+ !TaskCapabilityUtils.isSlotFillingComplete(finalArguments, appAction.paramsList) ||
+ lastKnownSyncStatus != SyncStatus.SLOTS_COMPLETE
) {
return FulfillmentResponse.getDefaultInstance()
}
@@ -298,12 +306,35 @@
}
/**
+ * Decides if the SDK should perform execution or not based on the Sync Status of the request
+ *
+ * SyncStatus - SLOTS_INCOMPLETE : Execution is blocked even if all validations pass
+ * SyncStatus - SLOTS_COMPLETE : Execution is completed if all validations pass
+ * SyncStatus - INTENT_CONFIRMED : User has confirmed the request and execution will be completed
+ */
+ private suspend fun handleSyncStatus(argumentsWrapper: ArgumentsWrapper):
+ FulfillmentResult {
+ lastKnownSyncStatus = argumentsWrapper.requestMetadata!!.syncStatus
+ return when (lastKnownSyncStatus) {
+ SyncStatus.SLOTS_INCOMPLETE,
+ SyncStatus.SLOTS_COMPLETE,
+ ->
+ handleSyncFulfillmentRequest(argumentsWrapper)
+ SyncStatus.INTENT_CONFIRMED
+ ->
+ handleConfirm()
+ else -> FulfillmentResult(ErrorStatusInternal.INVALID_REQUEST)
+ }
+ }
+
+ /**
* Handles a SYNC request from assistant.
*
* Control-flow logic for a single task turn. Note, a task may start and finish in the same
* turn, so the logic should include onEnter, arg validation, and onExit.
*/
- private suspend fun handleSync(argumentsWrapper: ArgumentsWrapper): FulfillmentResult {
+ private suspend fun handleSyncFulfillmentRequest(argumentsWrapper: ArgumentsWrapper):
+ FulfillmentResult {
maybeInitializeTask()
clearMissingArgs(argumentsWrapper)
processFulfillmentValues(argumentsWrapper.paramValues)
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/exceptions/DisambigStateException.java b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/exceptions/DisambigStateException.java
index af225a1..616c7b3 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/exceptions/DisambigStateException.java
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/exceptions/DisambigStateException.java
@@ -21,7 +21,7 @@
/**
* Represents an internal issue with the state sync between the SDK and Assistant. One example is
- * when the SDK places an argument in dismabig state, but then Assistant sends the same argument
+ * when the SDK places an argument in disambig state, but then Assistant sends the same argument
* data again without any grounding.
*/
public final class DisambigStateException extends InvalidRequestException {
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/utils/CallbackUtils.kt b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/utils/CallbackUtils.kt
index cd36c47..536472e 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/utils/CallbackUtils.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/utils/CallbackUtils.kt
@@ -23,6 +23,7 @@
import androidx.appactions.interaction.capabilities.core.impl.task.exceptions.DisambigStateException
import androidx.appactions.interaction.capabilities.core.impl.task.exceptions.InvalidResolverException
import kotlin.reflect.KClass
+import kotlinx.coroutines.withTimeout
private const val LOG_TAG = "CallbackUtils"
@@ -39,14 +40,18 @@
/** invoke an externally implemented suspend method, wrapping any exceptions with
* ExternalException.
*/
+
+private const val TIMEOUT_MILLIS = 3000L
internal suspend fun <T> invokeExternalSuspendBlock(
description: String,
block: suspend () -> T
): T {
- try {
- return block()
- } catch (t: Throwable) {
- throw ExternalException("exception occurred during '$description'", t)
+ return withTimeout(TIMEOUT_MILLIS) {
+ try {
+ block()
+ } catch (t: Throwable) {
+ throw ExternalException("exception occurred during '$description'", t)
+ }
}
}
@@ -83,7 +88,7 @@
}
/**
- * Handles an exception encountered during request proessing (one-shot or multi-turn).
+ * Handles an exception encountered during request processing (one-shot or multi-turn).
* Includes reporting an ErrorStatusInternal to some callback based on the exception.
*/
internal fun handleExceptionFromRequestProcessing(
diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/properties/package-info.java b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/properties/package-info.java
index 2229543..bf6a7d8 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/properties/package-info.java
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/properties/package-info.java
@@ -14,7 +14,6 @@
* limitations under the License.
*/
-/** @hide */
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
package androidx.appactions.interaction.capabilities.core.properties;
diff --git a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/LibInfoTest.kt b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/LibInfoTest.kt
index 8bed86d..f564983 100644
--- a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/LibInfoTest.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/LibInfoTest.kt
@@ -17,9 +17,7 @@
package androidx.appactions.interaction.capabilities.core
import androidx.appactions.interaction.capabilities.core.LibInfo.Version
-
import com.google.common.truth.Truth.assertThat
-
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
diff --git a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/concurrent/ListenableFutureHelperTest.kt b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/concurrent/ConvertToListenableFutureTest.kt
similarity index 98%
rename from appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/concurrent/ListenableFutureHelperTest.kt
rename to appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/concurrent/ConvertToListenableFutureTest.kt
index 310078e..2422b97 100644
--- a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/concurrent/ListenableFutureHelperTest.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/concurrent/ConvertToListenableFutureTest.kt
@@ -17,6 +17,8 @@
package androidx.appactions.interaction.capabilities.core.impl.concurrent
import com.google.common.truth.Truth.assertThat
+import kotlin.coroutines.cancellation.CancellationException
+import kotlin.time.Duration.Companion.seconds
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.channels.ReceiveChannel
import kotlinx.coroutines.channels.SendChannel
@@ -25,11 +27,9 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import kotlin.coroutines.cancellation.CancellationException
-import kotlin.time.Duration.Companion.seconds
@RunWith(JUnit4::class)
-class ListenableFutureHelperTest {
+class ConvertToListenableFutureTest {
val TAG = "tag"
@Test
diff --git a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/concurrent/FuturesTest.kt b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/concurrent/FuturesTest.kt
index 6d9de02..c7140ba 100644
--- a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/concurrent/FuturesTest.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/concurrent/FuturesTest.kt
@@ -21,13 +21,13 @@
import androidx.concurrent.futures.CallbackToFutureAdapter
import androidx.concurrent.futures.CallbackToFutureAdapter.Completer
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.ExecutionException
+import java.util.concurrent.TimeUnit.MILLISECONDS
import kotlinx.coroutines.CompletableDeferred
import org.junit.Assert.assertThrows
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import java.util.concurrent.ExecutionException
-import java.util.concurrent.TimeUnit.MILLISECONDS
@RunWith(JUnit4::class)
class FuturesTest {
@@ -173,7 +173,7 @@
Futures.addCallback(
transformedFuture,
object : FutureCallback<Int> {
- override fun onSuccess(value: Int) {}
+ override fun onSuccess(result: Int) {}
override fun onFailure(t: Throwable) {
errorDeferred.complete(t)
@@ -203,7 +203,7 @@
Futures.addCallback(
transformedFuture,
object : FutureCallback<Int> {
- override fun onSuccess(value: Int) {}
+ override fun onSuccess(result: Int) {}
override fun onFailure(t: Throwable) {
errorDeferred.complete(t)
diff --git a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityImplTest.kt b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityImplTest.kt
index 241d5f3..744863d 100644
--- a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityImplTest.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityImplTest.kt
@@ -58,8 +58,8 @@
import androidx.appactions.interaction.proto.CurrentValue
import androidx.appactions.interaction.proto.DisambiguationData
import androidx.appactions.interaction.proto.Entity
+import androidx.appactions.interaction.proto.FulfillmentRequest.Fulfillment.SyncStatus
import androidx.appactions.interaction.proto.FulfillmentRequest.Fulfillment.Type.CANCEL
-import androidx.appactions.interaction.proto.FulfillmentRequest.Fulfillment.Type
import androidx.appactions.interaction.proto.FulfillmentRequest.Fulfillment.Type.SYNC
import androidx.appactions.interaction.proto.FulfillmentRequest.Fulfillment.Type.UNKNOWN_TYPE
import androidx.appactions.interaction.proto.FulfillmentResponse.StructuredOutput
@@ -605,7 +605,7 @@
@Test
@kotlin.Throws(Exception::class)
- @Suppress("DEPRECATION") // TODO(b/269638788) migrate session state to AppDialogState message
+ @Suppress("DEPRECATION")
fun disambig_singleParam_disambigEntitiesInContext() {
val capability: Capability =
createCapability(
@@ -738,7 +738,7 @@
*/
@Test
@kotlin.Throws(Exception::class)
- @Suppress("DEPRECATION") // TODO(b/269638788) migrate session state to AppDialogState message
+ @Suppress("DEPRECATION")
fun identifierOnly_refillsStruct() = runBlocking<Unit> {
val property = mapOf(
"listItem" to Property.Builder<
@@ -1036,7 +1036,6 @@
@Test
@kotlin.Throws(Exception::class)
- @Suppress("DEPRECATION") // TODO(b/279830425) implement tryExecute (INTENT_CONFIRMED can be used instead)
fun fulfillmentType_syncWithConfirmation_stateClearedAfterConfirmation() {
val sessionFactory: (hostProperties: HostProperties?) -> ExecutionSession =
{ _ ->
@@ -1090,7 +1089,7 @@
// active
val callback2 = FakeCallbackInternal()
session.execute(
- buildRequestArgs(Type.CONFIRM),
+ buildRequestArgs(SYNC, SyncStatus.INTENT_CONFIRMED),
callback2
)
@@ -1148,6 +1147,259 @@
assertThat(callback2.receiveResponse().errorStatus)
.isEqualTo(ErrorStatusInternal.SESSION_ALREADY_DESTROYED)
}
+ @Test
+ @kotlin.Throws(Exception::class)
+ fun syncStatus_unknown_errorReported() {
+ val capability: Capability =
+ createCapability(
+ SINGLE_REQUIRED_FIELD_PROPERTY,
+ sessionFactory =
+ { _ ->
+ object : ExecutionSession {
+ override suspend fun onExecute(arguments: Arguments) =
+ ExecutionResult.Builder<Output>().build()
+ }
+ },
+ sessionBridge = SessionBridge { TaskHandler.Builder<Arguments, Confirmation>()
+ .build() },
+ sessionUpdaterSupplier = ::RequiredTaskUpdater,
+ )
+ val session = capability.createSession(fakeSessionId, hostProperties)
+
+ assertThat(capability.appAction)
+ .isEqualTo(
+ AppAction.newBuilder()
+ .setName("actions.intent.TEST")
+ .setIdentifier("id")
+ .addParams(
+ IntentParameter.newBuilder().setName("required").setIsRequired(true),
+ )
+ .setTaskInfo(
+ TaskInfo.newBuilder().setSupportsPartialFulfillment(true),
+ )
+ .build(),
+ )
+
+ // TURN 1 (UNKNOWN).
+ val errorCallback = FakeCallbackInternal()
+ session.execute(buildRequestArgs(SYNC, SyncStatus.UNKNOWN_SYNC_STATUS),
+ errorCallback)
+ assertThat(errorCallback.receiveResponse().errorStatus)
+ .isEqualTo(ErrorStatusInternal.INVALID_REQUEST)
+
+ // TURN 2 (UNRECOGNIZED)
+ val errorCallback2 = FakeCallbackInternal()
+ session.execute(buildRequestArgs(SYNC, SyncStatus.UNRECOGNIZED),
+ errorCallback2)
+ assertThat(errorCallback2.receiveResponse().errorStatus)
+ .isEqualTo(ErrorStatusInternal.INVALID_REQUEST)
+ }
+
+ @Test
+ @kotlin.Throws(Exception::class)
+ fun syncStatus_slotsIncomplete_taskNotExecuted() {
+ val property = mapOf(
+ "required" to Property.Builder<StringValue>().setRequired(true).build()
+ )
+ val onExecuteInvocationCount = AtomicInteger(0)
+ val sessionFactory: (hostProperties: HostProperties?) -> ExecutionSession =
+ { _ ->
+ object : ExecutionSession {
+ override suspend fun onExecute(arguments: Arguments): ExecutionResult<Output> {
+ onExecuteInvocationCount.incrementAndGet()
+ return ExecutionResult.Builder<Output>().build()
+ }
+ }
+ }
+ val capability: Capability =
+ createCapability(
+ property,
+ sessionFactory = sessionFactory,
+ sessionBridge = SessionBridge { TaskHandler.Builder<Arguments, Confirmation>()
+ .build() },
+ sessionUpdaterSupplier = ::EmptyTaskUpdater,
+ )
+ val session = capability.createSession(fakeSessionId, hostProperties)
+
+ /** TURN 1. Not providing all the required slots and passing SyncStatus as SLOTS_INCOMPLETE
+ * Execution should not happen as sync status is SLOTS_INCOMPLETE
+ */
+ val callback = FakeCallbackInternal()
+ session.execute(buildRequestArgs(SYNC, SyncStatus.SLOTS_INCOMPLETE), callback)
+ assertThat(callback.receiveResponse()).isNotNull()
+ assertThat(getCurrentValues("required", session.state!!)).isEmpty()
+ assertThat(onExecuteInvocationCount.get()).isEqualTo(0)
+
+ /** TURN 2. Providing all the required slots but still passing SyncStatus as
+ * SLOTS_INCOMPLETE. Execution should not happen as sync status is SLOTS_INCOMPLETE
+ */
+ val callback2 = FakeCallbackInternal()
+ session.execute(
+ buildRequestArgs(
+ SYNC,
+ SyncStatus.SLOTS_INCOMPLETE,
+ "required",
+ ParamValue.newBuilder().setIdentifier("foo").setStringValue("foo").build(),
+ ),
+ callback2,
+ )
+ assertThat(callback2.receiveResponse()).isNotNull()
+ assertThat(getCurrentValues("required", session.state!!))
+ .containsExactly(
+ CurrentValue.newBuilder()
+ .setValue(
+ ParamValue.newBuilder().setIdentifier("foo").setStringValue("foo"),
+ )
+ .setStatus(CurrentValue.Status.ACCEPTED)
+ .build(),
+ )
+ assertThat(onExecuteInvocationCount.get()).isEqualTo(0)
+
+ /**
+ * TURN 3. Providing all the required slots and passing SyncStatus as SLOTS_COMPLETE
+ * Execution should happen
+ */
+ val callback3 = FakeCallbackInternal()
+ session.execute(
+ buildRequestArgs(
+ SYNC,
+ SyncStatus.SLOTS_COMPLETE,
+ "required",
+ ParamValue.newBuilder().setIdentifier("foo").setStringValue("foo").build(),
+ ),
+ callback3,
+ )
+ assertThat(callback3.receiveResponse()).isNotNull()
+ assertThat(onExecuteInvocationCount.get()).isEqualTo(1)
+ }
+
+ @Test
+ @kotlin.Throws(Exception::class)
+ fun syncStatus_intentConfirmed_taskExecuted() {
+ val onConfirmationInvocationCount = AtomicInteger(0)
+ var onReadyConfirm =
+ object : OnReadyToConfirmListener<Arguments, Confirmation> {
+ override suspend fun onReadyToConfirm(arguments: Arguments):
+ ConfirmationOutput<Confirmation> {
+ onConfirmationInvocationCount.incrementAndGet()
+ return ConfirmationOutput.Builder<Confirmation>()
+ .setConfirmation(Confirmation.Builder().setOptionalStringField("bar")
+ .build())
+ .build()
+ }
+ }
+ val property = mapOf(
+ "required" to Property.Builder<StringValue>().setRequired(true).build()
+ )
+ val onExecuteInvocationCount = AtomicInteger(0)
+ val sessionFactory: (hostProperties: HostProperties?) -> ExecutionSession =
+ { _ ->
+ object : ExecutionSession {
+ override suspend fun onExecute(arguments: Arguments): ExecutionResult<Output> {
+ onExecuteInvocationCount.incrementAndGet()
+ return ExecutionResult.Builder<Output>()
+ .setOutput(
+ Output.Builder()
+ .setOptionalStringField("baz")
+ .setRepeatedStringField(listOf("baz1", "baz2"))
+ .build())
+ .build()
+ }
+ }
+ }
+ val capability: Capability =
+ createCapability(
+ property,
+ sessionFactory = sessionFactory,
+ sessionBridge = {
+ TaskHandler.Builder<Arguments, Confirmation>()
+ .setOnReadyToConfirmListener(onReadyConfirm)
+ .registerConfirmationOutput(
+ "optionalStringOutput",
+ Confirmation::optionalStringField,
+ TypeConverters.STRING_PARAM_VALUE_CONVERTER
+ ::toParamValue)
+ .build() },
+ sessionUpdaterSupplier = ::EmptyTaskUpdater,
+ )
+
+ val session = capability.createSession(fakeSessionId, hostProperties)
+
+ /** TURN 1. Providing all the required slots and passing SyncStatus as SLOTS_COMPLETE
+ * This should trigger the confirmation. Execution should not happen
+ */
+ val callback = FakeCallbackInternal()
+ session.execute(buildRequestArgs(
+ SYNC,
+ SyncStatus.SLOTS_COMPLETE,
+ "required",
+ ParamValue.newBuilder().setIdentifier("foo").setStringValue("foo").build(),
+ ), callback)
+ assertThat(callback.receiveResponse()).isNotNull()
+ assertThat(getCurrentValues("required", session.state!!))
+ .containsExactly(
+ CurrentValue.newBuilder()
+ .setValue(
+ ParamValue.newBuilder().setIdentifier("foo").setStringValue("foo"),
+ )
+ .setStatus(CurrentValue.Status.ACCEPTED)
+ .build(),
+ )
+ assertThat(onExecuteInvocationCount.get()).isEqualTo(0)
+ assertThat(onConfirmationInvocationCount.get()).isEqualTo(1)
+
+ // Confirm the BIC
+ val expectedConfirmationOutput: StructuredOutput =
+ StructuredOutput.newBuilder()
+ .addOutputValues(
+ OutputValue.newBuilder()
+ .setName("optionalStringOutput")
+ .addValues(ParamValue.newBuilder().setStringValue("bar").build())
+ .build())
+ .build()
+ assertThat(callback.receiveResponse()
+ .fulfillmentResponse!!
+ .confirmationData
+ .outputValuesList
+ )
+ .containsExactlyElementsIn(expectedConfirmationOutput.outputValuesList)
+
+ /** TURN 2. Send CONFIRM request using INTENT_CONFIRMED sync status.
+ * Execution should happen
+ */
+ val callback2 = FakeCallbackInternal()
+ session.execute(
+ buildRequestArgs(
+ SYNC,
+ SyncStatus.INTENT_CONFIRMED,
+ ),
+ callback2,
+ )
+ assertThat(callback2.receiveResponse()).isNotNull()
+ assertThat(onExecuteInvocationCount.get()).isEqualTo(1)
+
+ // Confirm the BIO
+ val expectedOutput: StructuredOutput =
+ StructuredOutput.newBuilder()
+ .addOutputValues(
+ OutputValue.newBuilder()
+ .setName("optionalStringOutput")
+ .addValues(ParamValue.newBuilder().setStringValue("baz"))
+ .build())
+ .addOutputValues(
+ OutputValue.newBuilder()
+ .setName("repeatedStringOutput")
+ .addValues(ParamValue.newBuilder().setStringValue("baz1").build())
+ .addValues(ParamValue.newBuilder().setStringValue("baz2").build())
+ .build()
+ )
+ .build()
+ assertThat(callback2.receiveResponse()
+ .fulfillmentResponse!!
+ .getExecutionOutput()
+ .getOutputValuesList())
+ .containsExactlyElementsIn(expectedOutput.getOutputValuesList())
+ }
@Test
fun structConversionException_shouldReportStructConversionFailure() {
diff --git a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskSlotProcessorTest.kt b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskSlotProcessorTest.kt
index bd0a338..eca8de0 100644
--- a/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskSlotProcessorTest.kt
+++ b/appactions/interaction/interaction-capabilities-core/src/test/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskSlotProcessorTest.kt
@@ -18,11 +18,11 @@
import androidx.appactions.interaction.capabilities.core.AppEntityListener
import androidx.appactions.interaction.capabilities.core.EntitySearchResult
import androidx.appactions.interaction.capabilities.core.InventoryListener
+import androidx.appactions.interaction.capabilities.core.SearchAction
import androidx.appactions.interaction.capabilities.core.ValidationResult
import androidx.appactions.interaction.capabilities.core.ValueListener
import androidx.appactions.interaction.capabilities.core.impl.concurrent.Futures
import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters
-import androidx.appactions.interaction.capabilities.core.SearchAction
import androidx.appactions.interaction.capabilities.testing.internal.ArgumentUtils
import androidx.appactions.interaction.capabilities.testing.internal.TestingUtils.awaitSync
import androidx.appactions.interaction.proto.CurrentValue
diff --git a/appactions/interaction/interaction-capabilities-fitness/api/public_plus_experimental_current.txt b/appactions/interaction/interaction-capabilities-fitness/api/public_plus_experimental_current.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/appactions/interaction/interaction-capabilities-fitness/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/appactions/interaction/interaction-capabilities-fitness/build.gradle b/appactions/interaction/interaction-capabilities-fitness/build.gradle
index 1cbd09a..c2e5bb0 100644
--- a/appactions/interaction/interaction-capabilities-fitness/build.gradle
+++ b/appactions/interaction/interaction-capabilities-fitness/build.gradle
@@ -31,7 +31,6 @@
android {
namespace "androidx.appactions.interaction.capabilities.fitness"
defaultConfig {
- // TODO(b/266649259): lower minSdk version once Optional is removed.
minSdkVersion 26
}
}
diff --git a/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/package-info.java b/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/package-info.java
index 8b8e318..f90ac95 100644
--- a/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/package-info.java
+++ b/appactions/interaction/interaction-capabilities-fitness/src/main/java/androidx/appactions/interaction/capabilities/fitness/fitness/package-info.java
@@ -14,7 +14,6 @@
* limitations under the License.
*/
-/** @hide */
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
package androidx.appactions.interaction.capabilities.fitness.fitness;
diff --git a/appactions/interaction/interaction-capabilities-productivity/api/public_plus_experimental_current.txt b/appactions/interaction/interaction-capabilities-productivity/api/public_plus_experimental_current.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/appactions/interaction/interaction-capabilities-productivity/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/appactions/interaction/interaction-capabilities-productivity/build.gradle b/appactions/interaction/interaction-capabilities-productivity/build.gradle
index 891f726..b3d5bdc 100644
--- a/appactions/interaction/interaction-capabilities-productivity/build.gradle
+++ b/appactions/interaction/interaction-capabilities-productivity/build.gradle
@@ -31,7 +31,6 @@
android {
namespace "androidx.appactions.interaction.capabilities.productivity"
defaultConfig {
- // TODO(b/266649259): lower minSdk version once Optional is removed.
minSdkVersion 26
}
}
diff --git a/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/TimerValue.kt b/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/TimerValue.kt
index 7f21f96..b16d175 100644
--- a/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/TimerValue.kt
+++ b/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/TimerValue.kt
@@ -17,11 +17,11 @@
package androidx.appactions.interaction.capabilities.productivity
import androidx.appactions.builtintypes.experimental.types.Timer
+import androidx.appactions.interaction.capabilities.core.SearchAction
import androidx.appactions.interaction.capabilities.core.impl.converters.EntityConverter
import androidx.appactions.interaction.capabilities.core.impl.converters.ParamValueConverter
import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters
import androidx.appactions.interaction.capabilities.core.impl.converters.UnionTypeSpec
-import androidx.appactions.interaction.capabilities.core.SearchAction
import java.util.Objects
class TimerValue
diff --git a/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/package-info.java b/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/package-info.java
index 9738140..612634d 100644
--- a/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/package-info.java
+++ b/appactions/interaction/interaction-capabilities-productivity/src/main/java/androidx/appactions/interaction/capabilities/productivity/package-info.java
@@ -14,7 +14,6 @@
* limitations under the License.
*/
-/** @hide */
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
package androidx.appactions.interaction.capabilities.productivity;
diff --git a/appactions/interaction/interaction-capabilities-safety/api/public_plus_experimental_current.txt b/appactions/interaction/interaction-capabilities-safety/api/public_plus_experimental_current.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/appactions/interaction/interaction-capabilities-safety/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/appactions/interaction/interaction-capabilities-safety/build.gradle b/appactions/interaction/interaction-capabilities-safety/build.gradle
index dbf7f9cb..6f81c38 100644
--- a/appactions/interaction/interaction-capabilities-safety/build.gradle
+++ b/appactions/interaction/interaction-capabilities-safety/build.gradle
@@ -34,7 +34,6 @@
android {
namespace "androidx.appactions.interaction.capabilities.safety"
defaultConfig {
- // TODO(b/266649259): lower minSdk version once Optional is removed.
minSdkVersion 26
}
}
diff --git a/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StartEmergencySharing.kt b/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StartEmergencySharing.kt
index 908051a..704cbf1 100644
--- a/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StartEmergencySharing.kt
+++ b/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StartEmergencySharing.kt
@@ -38,7 +38,6 @@
/** A capability corresponding to actions.intent.START_EMERGENCY_SHARING */
@CapabilityFactory(name = CAPABILITY_NAME)
class StartEmergencySharing private constructor() {
- // TODO(b/267805819): Update to include the SessionFactory once Session API is ready.
class CapabilityBuilder :
Capability.Builder<
CapabilityBuilder, Arguments, Output, Confirmation, ExecutionSession,
diff --git a/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StartSafetyCheck.kt b/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StartSafetyCheck.kt
index 5a9a6e2..63737d9 100644
--- a/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StartSafetyCheck.kt
+++ b/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StartSafetyCheck.kt
@@ -49,7 +49,6 @@
CHECK_IN_TIME("safetycheck.checkInTime")
}
- // TODO(b/267805819): Update to include the SessionFactory once Session API is ready.
class CapabilityBuilder :
Capability.Builder<
CapabilityBuilder, Arguments, Output, Confirmation, ExecutionSession
diff --git a/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StopEmergencySharing.kt b/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StopEmergencySharing.kt
index 28967d6..e35c3b5 100644
--- a/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StopEmergencySharing.kt
+++ b/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StopEmergencySharing.kt
@@ -38,7 +38,6 @@
/** A capability corresponding to actions.intent.STOP_EMERGENCY_SHARING */
@CapabilityFactory(name = CAPABILITY_NAME)
class StopEmergencySharing private constructor() {
- // TODO(b/267805819): Update to include the SessionFactory once Session API is ready.
class CapabilityBuilder :
Capability.Builder<
CapabilityBuilder, Arguments, Output, Confirmation, ExecutionSession,
diff --git a/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StopSafetyCheck.kt b/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StopSafetyCheck.kt
index 53893f4..7734f23 100644
--- a/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StopSafetyCheck.kt
+++ b/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/StopSafetyCheck.kt
@@ -38,7 +38,6 @@
/** A capability corresponding to actions.intent.STOP_SAFETY_CHECK */
@CapabilityFactory(name = CAPABILITY_NAME)
class StopSafetyCheck private constructor() {
- // TODO(b/267805819): Update to include the SessionFactory once Session API is ready.
class CapabilityBuilder :
Capability.Builder<
CapabilityBuilder, Arguments, Output, Confirmation, ExecutionSession
diff --git a/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/package-info.java b/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/package-info.java
index c947d85..01a762e 100644
--- a/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/package-info.java
+++ b/appactions/interaction/interaction-capabilities-safety/src/main/java/androidx/appactions/interaction/capabilities/safety/package-info.java
@@ -14,7 +14,6 @@
* limitations under the License.
*/
-/** @hide */
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
package androidx.appactions.interaction.capabilities.safety;
diff --git a/appactions/interaction/interaction-capabilities-testing/api/public_plus_experimental_current.txt b/appactions/interaction/interaction-capabilities-testing/api/public_plus_experimental_current.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/appactions/interaction/interaction-capabilities-testing/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/appactions/interaction/interaction-capabilities-testing/build.gradle b/appactions/interaction/interaction-capabilities-testing/build.gradle
index 4a8d94d..bf9b569 100644
--- a/appactions/interaction/interaction-capabilities-testing/build.gradle
+++ b/appactions/interaction/interaction-capabilities-testing/build.gradle
@@ -33,7 +33,6 @@
android {
defaultConfig {
- // TODO(b/266649259): lower minSdk version to 19.
minSdkVersion 26
}
namespace "androidx.appactions.interaction.capabilities.testing.internal"
diff --git a/appactions/interaction/interaction-capabilities-testing/src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt b/appactions/interaction/interaction-capabilities-testing/src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt
index 4408c92..a452ee0 100644
--- a/appactions/interaction/interaction-capabilities-testing/src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt
+++ b/appactions/interaction/interaction-capabilities-testing/src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt
@@ -93,19 +93,42 @@
/**
* Convenience method to build ArgumentsWrapper based on plain java types. Input args should be
- * even in length, where each String argName is followed by any type of argVal.
+ * even in length, where each String argName is followed by any type of argVal. This method
+ * will use SLOTS_COMPLETE as the default value for the SyncStatus
*/
fun buildRequestArgs(
type: Fulfillment.Type,
vararg args: Any,
): ArgumentsWrapper {
- val builder = Fulfillment.newBuilder()
+ return buildRequestArgs(type, Fulfillment.SyncStatus.SLOTS_COMPLETE, *args)
+ }
+
+ /**
+ * Convenience method to build ArgumentsWrapper based on plain java types and
+ * also sets the SyncStatus. Input args should be even in length, where each String
+ * argName is followed by any type of argVal.
+ */
+ fun buildRequestArgs(
+ type: Fulfillment.Type,
+ syncStatus: Fulfillment.SyncStatus,
+ vararg args: Any,
+ ): ArgumentsWrapper {
+ val builder = Fulfillment.newBuilder().addAllParams(buildFulfillmentParams(*args))
if (type != Fulfillment.Type.UNRECOGNIZED) {
builder.type = type
+ if (type == Fulfillment.Type.SYNC &&
+ syncStatus != Fulfillment.SyncStatus.UNRECOGNIZED) {
+ builder.syncStatus = syncStatus
+ }
}
+ return ArgumentsWrapper.create(builder.build())
+ }
+
+ private fun buildFulfillmentParams(vararg args: Any): List<FulfillmentParam> {
if (args.isEmpty()) {
- return ArgumentsWrapper.create(builder.build())
+ return emptyList()
}
+ val fulfillmentParams = mutableListOf<FulfillmentParam>()
require(args.size % 2 == 0) { "Must call function with even number of args" }
val argsMap: MutableMap<String, MutableList<ParamValue>> = LinkedHashMap()
var argNamePos = 0
@@ -128,13 +151,13 @@
for ((key, valueList) in argsMap.entries) {
val paramBuilder = FulfillmentParam.newBuilder().setName(key)
for (value in valueList) {
- builder.addParams(
+ fulfillmentParams.add(
paramBuilder.addFulfillmentValues(
FulfillmentValue.newBuilder().setValue(value).build()
- )
+ ).build()
)
}
}
- return ArgumentsWrapper.create(builder.build())
+ return fulfillmentParams.toList()
}
}
diff --git a/appactions/interaction/interaction-capabilities-testing/src/main/java/androidx/appactions/interaction/capabilities/testing/internal/package-info.java b/appactions/interaction/interaction-capabilities-testing/src/main/java/androidx/appactions/interaction/capabilities/testing/internal/package-info.java
index 79cafa4..c5871f6 100644
--- a/appactions/interaction/interaction-capabilities-testing/src/main/java/androidx/appactions/interaction/capabilities/testing/internal/package-info.java
+++ b/appactions/interaction/interaction-capabilities-testing/src/main/java/androidx/appactions/interaction/capabilities/testing/internal/package-info.java
@@ -14,7 +14,6 @@
* limitations under the License.
*/
-/** @hide */
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
package androidx.appactions.interaction.capabilities.testing.internal;
diff --git a/appactions/interaction/interaction-proto/api/public_plus_experimental_current.txt b/appactions/interaction/interaction-proto/api/public_plus_experimental_current.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/appactions/interaction/interaction-proto/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/appactions/interaction/interaction-proto/src/main/java/androidx/appactions/interaction/proto/package-info.java b/appactions/interaction/interaction-proto/src/main/java/androidx/appactions/interaction/proto/package-info.java
index 5a37125..7de97d8 100644
--- a/appactions/interaction/interaction-proto/src/main/java/androidx/appactions/interaction/proto/package-info.java
+++ b/appactions/interaction/interaction-proto/src/main/java/androidx/appactions/interaction/proto/package-info.java
@@ -14,5 +14,7 @@
* limitations under the License.
*/
-/** @hide */
-package androidx.appactions.interaction.proto;
\ No newline at end of file
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+package androidx.appactions.interaction.proto;
+
+import androidx.annotation.RestrictTo;
\ No newline at end of file
diff --git a/appactions/interaction/interaction-service-proto/src/main/java/androidx/appactions/interaction/package-info.java b/appactions/interaction/interaction-service-proto/src/main/java/androidx/appactions/interaction/package-info.java
index 28ff8dc..8fae19e 100644
--- a/appactions/interaction/interaction-service-proto/src/main/java/androidx/appactions/interaction/package-info.java
+++ b/appactions/interaction/interaction-service-proto/src/main/java/androidx/appactions/interaction/package-info.java
@@ -16,6 +16,8 @@
/**
* Internal protos for interaction-service.
- * @hide
*/
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
package androidx.appactions.interaction.service.proto;
+
+import androidx.annotation.RestrictTo;
\ No newline at end of file
diff --git a/appactions/interaction/interaction-service/api/public_plus_experimental_current.txt b/appactions/interaction/interaction-service/api/public_plus_experimental_current.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/appactions/interaction/interaction-service/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/appactions/interaction/interaction-service/build.gradle b/appactions/interaction/interaction-service/build.gradle
index 3c69353..ba0be12 100644
--- a/appactions/interaction/interaction-service/build.gradle
+++ b/appactions/interaction/interaction-service/build.gradle
@@ -73,8 +73,6 @@
android {
namespace "androidx.appactions.interaction.service"
defaultConfig {
- // TODO(b/266649259): Temporary bump to 33 to support capabilities-core. Lower back to 25 to
- // support wear:tiles
minSdkVersion 26
}
defaultConfig {
diff --git a/appactions/interaction/interaction-service/lint-baseline.xml b/appactions/interaction/interaction-service/lint-baseline.xml
deleted file mode 100644
index bc38132..0000000
--- a/appactions/interaction/interaction-service/lint-baseline.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.1.0-alpha07" type="baseline" client="gradle" dependencies="false" name="AGP (8.0.0-beta03)" variant="all" version="8.1.0-alpha07">
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="object AppInteractionServiceFactory {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceFactory.kt"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="data class RemoteViewsInternal("
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/appactions/interaction/service/RemoteViewsInternal.kt"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="data class TileLayoutInternal("
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/appactions/interaction/service/TileLayoutInternal.kt"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" val remoteViewsInternal: RemoteViewsInternal?"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/appactions/interaction/service/UiResponse.kt"/>
- </issue>
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1=" val tileLayoutInternal: TileLayoutInternal?"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/appactions/interaction/service/UiResponse.kt"/>
- </issue>
-
- <issue
- id="UnsafeOptInUsageError"
- message="This declaration is opt-in and its usage should be marked with `@androidx.wear.tiles.TilesExperimental` or `@OptIn(markerClass = androidx.wear.tiles.TilesExperimental.class)`"
- errorLine1=" .setLayout(ByteString.copyFrom(layout.toByteArray()))"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/appactions/interaction/service/TileLayoutInternal.kt"/>
- </issue>
-
- <issue
- id="UnsafeOptInUsageError"
- message="This declaration is opt-in and its usage should be marked with `@androidx.wear.tiles.TilesExperimental` or `@OptIn(markerClass = androidx.wear.tiles.TilesExperimental.class)`"
- errorLine1=" .setResources(ByteString.copyFrom(resources.toByteArray()))"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/appactions/interaction/service/TileLayoutInternal.kt"/>
- </issue>
-
-</issues>
diff --git a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/AppInteractionServiceFactory.kt b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/AppInteractionServiceFactory.kt
index da36ea0..d95524a 100644
--- a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/AppInteractionServiceFactory.kt
+++ b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/AppInteractionServiceFactory.kt
@@ -21,8 +21,6 @@
/**
* Factory for returning a [BindableService] from an []AppInteractionService].
- *
- * @suppress
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
object AppInteractionServiceFactory {
diff --git a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt
index 69a32b0..c3b7557 100644
--- a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt
+++ b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt
@@ -138,13 +138,13 @@
if (currentSessionId != null) {
return
}
- val sessionId = request.getSessionIdentifier()!!
+ val sessionId = request.sessionIdentifier!!
currentSessionId = sessionId
- if (registeredCapabilities.size == 0) {
+ if (registeredCapabilities.isEmpty()) {
registeredCapabilities = appInteractionService.registeredCapabilities
}
val targetCapability = registeredCapabilities
- .filter { request.getIdentifier() == it.id }
+ .filter { request.identifier == it.id }
.firstOrNull()
if (targetCapability == null) {
return respondWithError(
@@ -159,8 +159,8 @@
val hostProperties = HostProperties.Builder()
.setMaxHostSizeDp(
SizeF(
- request.getHostProperties().getHostViewHeightDp(),
- request.getHostProperties().getHostViewWidthDp(),
+ request.hostProperties.hostViewHeightDp,
+ request.hostProperties.hostViewWidthDp,
),
).build()
val session = targetCapability.createSession(
@@ -194,7 +194,7 @@
request: Request,
responseObserver: StreamObserver<Response>,
) {
- if (request.getFulfillmentRequest().getFulfillmentsList().isEmpty()) {
+ if (request.fulfillmentRequest.fulfillmentsList.isEmpty()) {
return respondWithError(
StatusRuntimeException(
Status.FAILED_PRECONDITION.withDescription(
@@ -204,10 +204,9 @@
responseObserver,
)
}
- val selectedFulfillment = request.getFulfillmentRequest().getFulfillments(0)
- val capability = registeredCapabilities
- .filter { selectedFulfillment.getIdentifier() == it.id }
- .firstOrNull()
+ val selectedFulfillment = request.fulfillmentRequest.getFulfillments(0)
+ val capability =
+ registeredCapabilities.firstOrNull { selectedFulfillment.identifier == it.id }
if (capability == null) {
return respondWithError(
StatusRuntimeException(
@@ -218,7 +217,7 @@
responseObserver,
)
}
- val sessionId = request.getSessionIdentifier()!!
+ val sessionId = request.sessionIdentifier!!
val currentSession = SessionManager.getSession(sessionId)
if (currentSession == null) {
return respondWithError(
@@ -239,16 +238,17 @@
Futures.addCallback(
executeFulfillmentRequest(currentSession, selectedFulfillment),
object : FutureCallback<FulfillmentResponse> {
- override fun onSuccess(fulfillmentResponse: FulfillmentResponse) {
+ override fun onSuccess(result: FulfillmentResponse) {
val responseBuilder =
- convertFulfillmentResponse(fulfillmentResponse, capability)
+ convertFulfillmentResponse(result, capability, currentSession)
.toBuilder()
val uiCache = UiSessions.getUiCacheOrNull(sessionId)
if (uiCache != null && uiCache.hasUnreadUiResponse) {
val cachedRemoteViewsInternal = uiCache.cachedRemoteViewsInternal
- responseBuilder.setUiUpdate(UiUpdate.getDefaultInstance())
+ responseBuilder.uiUpdate = UiUpdate.getDefaultInstance()
if (cachedRemoteViewsInternal != null &&
- !cachedRemoteViewsInternal.collectionViewFactories.keys.isEmpty()) {
+ cachedRemoteViewsInternal.collectionViewFactories.keys.isNotEmpty()
+ ) {
responseBuilder.setCollectionUpdate(
AppInteractionServiceProto.CollectionUpdate.newBuilder()
.addAllViewIds(
@@ -263,9 +263,9 @@
override fun onFailure(t: Throwable) {
respondWithError(
- when {
- t is CapabilityExecutionException -> convertToGrpcException(t)
- t is StatusRuntimeException || t is StatusException -> t
+ when (t) {
+ is CapabilityExecutionException -> convertToGrpcException(t)
+ is StatusRuntimeException, is StatusException -> t
else -> StatusRuntimeException(
Status.INTERNAL.withDescription(
t.message,
@@ -286,7 +286,7 @@
req: AppInteractionServiceProto.UiRequest,
responseObserver: StreamObserver<AppInteractionServiceProto.UiResponse>,
) {
- val sessionId = req.getSessionIdentifier()!!
+ val sessionId = req.sessionIdentifier!!
if (SessionManager.getSession(sessionId) == null) {
return respondWithError(
StatusRuntimeException(
@@ -347,9 +347,7 @@
responseObserver,
)
}
- val factory = uiCache.cachedRemoteViewsInternal?.collectionViewFactories?.get(
- req.getViewId()
- )
+ val factory = uiCache.cachedRemoteViewsInternal?.collectionViewFactories?.get(req.viewId)
if (factory == null) {
return respondWithError(
StatusRuntimeException(
@@ -358,7 +356,7 @@
responseObserver,
)
}
- when (req.getRequestDataCase()) {
+ when (req.requestDataCase) {
RequestDataCase.ON_DESTROY -> {
requestCollectionOnDestroy(factory, responseObserver)
}
@@ -369,7 +367,7 @@
requestCollectionGetViewAt(
factory,
responseObserver,
- req.getGetViewAt().getPosition(),
+ req.getViewAt.position,
)
}
RequestDataCase.GET_LOADING_VIEW -> {
@@ -382,7 +380,7 @@
requestCollectionGetItemId(
factory,
responseObserver,
- req.getGetItemId().getPosition(),
+ req.getItemId.position,
)
}
RequestDataCase.HAS_STABLE_IDS -> {
@@ -400,9 +398,9 @@
request: GroundingRequest,
responseObserver: StreamObserver<GroundingResponse>,
) {
- val entityProvider = appInteractionService.registeredEntityProviders.filter {
- it.id == request.getRequest().getEntityProviderId()
- }.firstOrNull()
+ val entityProvider = appInteractionService.registeredEntityProviders.firstOrNull {
+ it.id == request.request.entityProviderId
+ }
if (entityProvider == null) {
return respondAndComplete(
GroundingResponse.newBuilder()
@@ -422,8 +420,8 @@
)
} catch (t: Throwable) {
respondWithError(
- when {
- t is StatusRuntimeException || t is StatusException -> t
+ when (t) {
+ is StatusRuntimeException, is StatusException -> t
else -> StatusRuntimeException(
Status.INTERNAL.withDescription(
t.message,
@@ -452,7 +450,7 @@
CollectionResponse.newBuilder()
.setGetCount(
CollectionResponse.GetCount.newBuilder()
- .setCount(factory.getCount()),
+ .setCount(factory.count),
)
.build(),
observer,
@@ -472,7 +470,7 @@
factory: RemoteViewsFactory,
observer: StreamObserver<CollectionResponse>,
) {
- factory.getLoadingView()?.let(RemoteViewsOverMetadataInterceptor::setRemoteViews)
+ factory.loadingView?.let(RemoteViewsOverMetadataInterceptor::setRemoteViews)
respondAndComplete(CollectionResponse.getDefaultInstance(), observer)
}
@@ -484,7 +482,7 @@
CollectionResponse.newBuilder()
.setGetViewTypeCount(
CollectionResponse.GetViewTypeCount.newBuilder()
- .setViewTypeCount(factory.getViewTypeCount()),
+ .setViewTypeCount(factory.viewTypeCount),
)
.build(),
observer,
@@ -543,7 +541,7 @@
}
internal fun convertToGrpcException(e: CapabilityExecutionException): StatusRuntimeException {
- return when (e.getErrorStatus()) {
+ return when (e.errorStatus) {
ErrorStatusInternal.TIMEOUT -> StatusRuntimeException(
Status.DEADLINE_EXCEEDED.withDescription(e.message).withCause(e),
)
@@ -556,28 +554,25 @@
internal fun convertFulfillmentResponse(
fulfillmentResponse: FulfillmentResponse,
capability: Capability,
+ currentSession: CapabilitySession
): Response {
val appAction = capability.appAction
- val isDialogSession = appAction.getTaskInfo().getSupportsPartialFulfillment()
+ val isDialogSession = appAction.taskInfo.supportsPartialFulfillment
val version = convertToAppActionsContextVersion(
- LibInfo(appInteractionService.getApplicationContext()).getVersion(),
+ LibInfo(appInteractionService.applicationContext).getVersion(),
)
+ val appActionsContextBuilder = AppActionsContext.newBuilder()
+ .addActions(appAction)
+ .setVersion(version)
+ currentSession.state?.let(appActionsContextBuilder::addDialogStates)
val responseBuilder: Response.Builder =
- // TODO(b/269638788): Add DialogState to the Response proto.
Response.newBuilder()
.setFulfillmentResponse(fulfillmentResponse)
- .setAppActionsContext(
- AppActionsContext.newBuilder()
- .addActions(appAction)
- .setVersion(version)
- .build(),
- )
+ .setAppActionsContext(appActionsContextBuilder.build())
if (!isDialogSession) {
- responseBuilder.setEndingStatus(
- AppInteractionServiceProto.Status.newBuilder()
- .setStatusCode(Code.COMPLETE)
- .build(),
- )
+ responseBuilder.endingStatus = AppInteractionServiceProto.Status.newBuilder()
+ .setStatusCode(Code.COMPLETE)
+ .build()
}
return responseBuilder.build()
}
diff --git a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/RemoteViewsInternal.kt b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/RemoteViewsInternal.kt
index bd704bf..4f5cb78 100644
--- a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/RemoteViewsInternal.kt
+++ b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/RemoteViewsInternal.kt
@@ -23,8 +23,6 @@
/**
* Holder for RemoteViews UI response.
- *
- * @suppress
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
data class RemoteViewsInternal(
diff --git a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/TileLayoutInternal.kt b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/TileLayoutInternal.kt
index 2ddab08..1f3559c 100644
--- a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/TileLayoutInternal.kt
+++ b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/TileLayoutInternal.kt
@@ -22,10 +22,8 @@
/**
* Holder for TileLayout response.
- *
- * @suppress
*/
-@Suppress("deprecation") // for backward compatibility
+@Suppress("deprecation", "UnsafeOptInUsageError") // for backward compatibility
@RestrictTo(RestrictTo.Scope.LIBRARY)
data class TileLayoutInternal(
val layout: androidx.wear.tiles.LayoutElementBuilders.Layout,
diff --git a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/UiResponse.kt b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/UiResponse.kt
index 915be548..d253a4d 100644
--- a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/UiResponse.kt
+++ b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/UiResponse.kt
@@ -1,3 +1,4 @@
+
/*
* Copyright 2023 The Android Open Source Project
*
@@ -13,39 +14,30 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package androidx.appactions.interaction.service
-
import android.annotation.SuppressLint
import android.util.SizeF
import android.widget.RemoteViews
import android.widget.RemoteViewsService.RemoteViewsFactory
import androidx.annotation.IdRes
import androidx.annotation.RestrictTo
-
/**
* A class representing the UI response being returned to the host. A `UiResponse` cannot be built
* directly, it must be built from a [UiResponse] Builder.
*/
class UiResponse {
- /** @suppress */
@RestrictTo(RestrictTo.Scope.LIBRARY)
val remoteViewsInternal: RemoteViewsInternal?
-
- /** @suppress */
@RestrictTo(RestrictTo.Scope.LIBRARY)
val tileLayoutInternal: TileLayoutInternal?
-
internal constructor(remoteViewsInternal: RemoteViewsInternal) {
this.remoteViewsInternal = remoteViewsInternal
this.tileLayoutInternal = null
}
-
internal constructor(tileLayout: TileLayoutInternal) {
this.remoteViewsInternal = null
this.tileLayoutInternal = tileLayout
}
-
/** Builder for TileLayouts, used in Wear OS. */
@Suppress("deprecation") // for backward compatibility
class TileLayoutBuilder {
@@ -53,11 +45,13 @@
private var resources: androidx.wear.tiles.ResourceBuilders.Resources? = null
/**
- * Sets the [LayoutElementBuilders.Layout] and the associated [ResourceBuilders.Resources]
- * to be displayed. [RemoteViews] should not be used together with
- * [LayoutElementBuilders.Layout] in the same session.
+ * Sets the [androidx.wear.tiles.LayoutElementBuilders.Layout] and the associated
+ * [androidx.wear.tiles.ResourceBuilders.Resources] to be displayed. [RemoteViews] should
+ * not be used together with [androidx.wear.tiles.LayoutElementBuilders.Layout] in the same
+ * session.
*
- * @param layout the wear-tile [LayoutElementBuilders.Layout] to be displayed.
+ * @param layout the wear-tile [androidx.wear.tiles.LayoutElementBuilders.Layout] to be
+ * displayed.
* @param resources the resources associated with the layout.
*/
@SuppressLint("MissingGetterMatchingBuilder")
@@ -69,17 +63,14 @@
this.resources = resources
return this
}
-
/** Builds the UiResponse. */
fun build() = UiResponse(TileLayoutInternal(layout!!, resources!!))
}
-
/** Builder for RemoteViews UI response. */
class RemoteViewsUiBuilder {
private var remoteViews: RemoteViews? = null
private var size: SizeF? = null
private val collectionViewFactories: HashMap<Int, RemoteViewsFactory> = HashMap()
-
/**
* Sets the `RemoteViews` to be displayed in the host.
*
@@ -92,7 +83,6 @@
this.size = size
return this
}
-
/**
* Implemented to generate the appropriate factories for collection views (e.g. ListView).
* Called when the host detects a collection view in the response UI. The
@@ -106,14 +96,13 @@
@IdRes viewId: Int,
factory: RemoteViewsFactory
): RemoteViewsUiBuilder {
- collectionViewFactories.put(viewId, factory)
+ collectionViewFactories[viewId] = factory
return this
}
-
/** Builds the UiResponse. */
fun build() =
UiResponse(
RemoteViewsInternal(remoteViews!!, size!!, collectionViewFactories)
)
}
-}
+}
\ No newline at end of file
diff --git a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/UiSessions.kt b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/UiSessions.kt
index 1774fa6..4214766 100644
--- a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/UiSessions.kt
+++ b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/UiSessions.kt
@@ -18,8 +18,8 @@
package androidx.appactions.interaction.service
import androidx.annotation.GuardedBy
-import androidx.appactions.interaction.capabilities.core.ExecutionCallback
import androidx.appactions.interaction.capabilities.core.BaseExecutionSession
+import androidx.appactions.interaction.capabilities.core.ExecutionCallback
import androidx.appactions.interaction.capabilities.core.impl.UiHandleRegistry
import androidx.appactions.interaction.service.UiSessions.removeUiCache
import javax.annotation.concurrent.ThreadSafe
diff --git a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/package-info.java b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/package-info.java
index 026eda8..2b467b6 100644
--- a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/package-info.java
+++ b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/package-info.java
@@ -14,7 +14,6 @@
* limitations under the License.
*/
-/** @hide */
@RestrictTo(RestrictTo.Scope.LIBRARY)
package androidx.appactions.interaction.service;
diff --git a/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/AppInteractionServiceEntityProviderTest.kt b/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/AppInteractionServiceEntityProviderTest.kt
index b571b2f..d2794ec 100644
--- a/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/AppInteractionServiceEntityProviderTest.kt
+++ b/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/AppInteractionServiceEntityProviderTest.kt
@@ -45,10 +45,8 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import org.mockito.kotlin.times
import org.robolectric.Robolectric
-// TODO(b/271929200) Implement tests for the 2 UI related RPCs
@RunWith(AndroidJUnit4::class)
class AppInteractionServiceEntityProviderTest {
val testServerName = "testServer"
diff --git a/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImplTest.kt b/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImplTest.kt
index b24255e..66c8427 100644
--- a/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImplTest.kt
+++ b/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImplTest.kt
@@ -17,37 +17,31 @@
package androidx.appactions.interaction.service
import androidx.appactions.interaction.capabilities.core.Capability
-import androidx.appactions.interaction.capabilities.core.impl.CapabilitySession
import androidx.appactions.interaction.capabilities.core.impl.CallbackInternal
+import androidx.appactions.interaction.capabilities.core.impl.CapabilitySession
+import androidx.appactions.interaction.proto.AppActionsContext
import androidx.appactions.interaction.proto.AppActionsContext.AppAction
import androidx.appactions.interaction.proto.AppActionsContext.AppDialogState
+import androidx.appactions.interaction.proto.CurrentValue
import androidx.appactions.interaction.proto.FulfillmentRequest
import androidx.appactions.interaction.proto.FulfillmentRequest.Fulfillment
import androidx.appactions.interaction.proto.FulfillmentResponse
import androidx.appactions.interaction.proto.FulfillmentResponse.StructuredOutput
import androidx.appactions.interaction.proto.FulfillmentResponse.StructuredOutput.OutputValue
+import androidx.appactions.interaction.proto.ParamValue
import androidx.appactions.interaction.service.AppInteractionServiceGrpcImpl.Companion.ERROR_NO_ACTION_CAPABILITY
import androidx.appactions.interaction.service.AppInteractionServiceGrpcImpl.Companion.ERROR_NO_FULFILLMENT_REQUEST
import androidx.appactions.interaction.service.AppInteractionServiceGrpcImpl.Companion.ERROR_NO_SESSION
import androidx.appactions.interaction.service.AppInteractionServiceGrpcImpl.Companion.ERROR_SESSION_ENDED
-import androidx.appactions.interaction.service.testing.internal.FakeAppInteractionService
import androidx.appactions.interaction.service.proto.AppInteractionServiceGrpc
import androidx.appactions.interaction.service.proto.AppInteractionServiceGrpc.AppInteractionServiceStub
import androidx.appactions.interaction.service.proto.AppInteractionServiceProto.Request
import androidx.appactions.interaction.service.proto.AppInteractionServiceProto.StartSessionRequest
import androidx.appactions.interaction.service.proto.AppInteractionServiceProto.StartSessionResponse
+import androidx.appactions.interaction.service.testing.internal.FakeAppInteractionService
import androidx.concurrent.futures.await
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.google.common.truth.Truth.assertThat
-import org.mockito.kotlin.any
-import org.mockito.kotlin.argumentCaptor
-import org.mockito.kotlin.doAnswer
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.never
-import org.mockito.kotlin.times
-import org.mockito.kotlin.verify
-import org.mockito.kotlin.whenever
-import org.robolectric.Robolectric
import io.grpc.BindableService
import io.grpc.ManagedChannel
import io.grpc.Server
@@ -67,6 +61,15 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.kotlin.any
+import org.mockito.kotlin.argumentCaptor
+import org.mockito.kotlin.doAnswer
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.never
+import org.mockito.kotlin.times
+import org.mockito.kotlin.verify
+import org.mockito.kotlin.whenever
+import org.robolectric.Robolectric
// TODO(b/271929200) Implement tests for the 2 UI related RPCs
@RunWith(AndroidJUnit4::class)
@@ -98,6 +101,16 @@
.addOutputValues(OutputValue.newBuilder().setName("bio_arg1")),
)
.build()
+ private val testAppDialogState = AppDialogState.newBuilder().setFulfillmentIdentifier("id")
+ .addParams(
+ AppActionsContext.DialogParameter.newBuilder()
+ .setName("Sample dialog")
+ .addCurrentValue(
+ CurrentValue.newBuilder().setValue(
+ ParamValue.newBuilder().setStringValue("Sample Test").build()
+ )
+ )
+ ).build()
private lateinit var capability1: Capability
private lateinit var appInteractionService: FakeAppInteractionService
@@ -212,6 +225,8 @@
val response = responseFuture.await()
assertThat(response).isNotNull()
assertThat(response.fulfillmentResponse).isEqualTo(testFulfillmentResponse)
+
+ assertThat(response.appActionsContext.dialogStatesList).containsExactly(testAppDialogState)
server.shutdownNow()
}
@@ -396,7 +411,7 @@
(invocation.arguments[1] as CallbackInternal).onSuccess(testFulfillmentResponse)
}
whenever(mockSession.sessionId).thenReturn(sessionId)
- whenever(mockSession.state).thenReturn(AppDialogState.getDefaultInstance())
+ whenever(mockSession.state).thenReturn(testAppDialogState)
whenever(mockSession.isActive).thenReturn(true)
whenever(mockSession.uiHandle).thenReturn(Any())
return mockSession
diff --git a/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/SessionManagerTest.kt b/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/SessionManagerTest.kt
index 95e16b9..ebc1d73 100644
--- a/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/SessionManagerTest.kt
+++ b/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/SessionManagerTest.kt
@@ -16,9 +16,9 @@
package androidx.appactions.interaction.service
-import androidx.appactions.interaction.capabilities.core.impl.CapabilitySession
import androidx.appactions.interaction.capabilities.core.impl.ArgumentsWrapper
import androidx.appactions.interaction.capabilities.core.impl.CallbackInternal
+import androidx.appactions.interaction.capabilities.core.impl.CapabilitySession
import androidx.appactions.interaction.capabilities.core.impl.TouchEventCallback
import androidx.appactions.interaction.proto.AppActionsContext
import androidx.test.ext.junit.runners.AndroidJUnit4
diff --git a/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/UiSessionsTest.kt b/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/UiSessionsTest.kt
index 64335ff..970860c 100644
--- a/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/UiSessionsTest.kt
+++ b/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/UiSessionsTest.kt
@@ -22,17 +22,17 @@
import androidx.appactions.interaction.capabilities.core.ExecutionCallback
import androidx.appactions.interaction.capabilities.core.ExecutionResult
import androidx.appactions.interaction.capabilities.core.HostProperties
+import androidx.appactions.interaction.capabilities.testing.internal.ArgumentUtils.buildArgs
+import androidx.appactions.interaction.capabilities.testing.internal.ArgumentUtils.buildRequestArgs
+import androidx.appactions.interaction.capabilities.testing.internal.FakeCallbackInternal
+import androidx.appactions.interaction.capabilities.testing.internal.TestingUtils.CB_TIMEOUT
import androidx.appactions.interaction.proto.FulfillmentRequest.Fulfillment.Type.SYNC
import androidx.appactions.interaction.proto.ParamValue
import androidx.appactions.interaction.service.test.R
-import androidx.appactions.interaction.capabilities.testing.internal.FakeCallbackInternal
-import androidx.appactions.interaction.capabilities.testing.internal.ArgumentUtils.buildRequestArgs
-import androidx.appactions.interaction.capabilities.testing.internal.ArgumentUtils.buildArgs
-import androidx.appactions.interaction.capabilities.testing.internal.TestingUtils.CB_TIMEOUT
import androidx.appactions.interaction.service.testing.internal.FakeCapability
import androidx.appactions.interaction.service.testing.internal.FakeCapability.Arguments
-import androidx.appactions.interaction.service.testing.internal.FakeCapability.Output
import androidx.appactions.interaction.service.testing.internal.FakeCapability.ExecutionSession
+import androidx.appactions.interaction.service.testing.internal.FakeCapability.Output
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.google.common.truth.Truth.assertThat
diff --git a/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/testing/internal/FakeAlarmEntityProvider.kt b/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/testing/internal/FakeAlarmEntityProvider.kt
index fd99a27..e0151be 100644
--- a/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/testing/internal/FakeAlarmEntityProvider.kt
+++ b/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/testing/internal/FakeAlarmEntityProvider.kt
@@ -17,10 +17,10 @@
package androidx.appactions.interaction.service.testing.internal
import androidx.appactions.builtintypes.experimental.types.Alarm
-import androidx.appactions.interaction.capabilities.core.entity.EntityProvider
+import androidx.appactions.interaction.capabilities.core.entity.EntityLookupCandidate
import androidx.appactions.interaction.capabilities.core.entity.EntityLookupRequest
import androidx.appactions.interaction.capabilities.core.entity.EntityLookupResponse
-import androidx.appactions.interaction.capabilities.core.entity.EntityLookupCandidate
+import androidx.appactions.interaction.capabilities.core.entity.EntityProvider
import androidx.appactions.interaction.capabilities.core.impl.converters.TypeConverters
class FakeAlarmEntityProvider(
diff --git a/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/testing/internal/FakeAppInteractionService.kt b/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/testing/internal/FakeAppInteractionService.kt
index 9521309..e4e6f44 100644
--- a/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/testing/internal/FakeAppInteractionService.kt
+++ b/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/testing/internal/FakeAppInteractionService.kt
@@ -16,10 +16,10 @@
package androidx.appactions.interaction.service.testing.internal
-import androidx.appactions.interaction.service.AppInteractionService
-import androidx.appactions.interaction.service.AppVerificationInfo
import androidx.appactions.interaction.capabilities.core.Capability
import androidx.appactions.interaction.capabilities.core.entity.EntityProvider
+import androidx.appactions.interaction.service.AppInteractionService
+import androidx.appactions.interaction.service.AppVerificationInfo
import io.grpc.binder.SecurityPolicies
import io.grpc.binder.SecurityPolicy
diff --git a/appcompat/appcompat-resources/api/public_plus_experimental_current.txt b/appcompat/appcompat-resources/api/public_plus_experimental_current.txt
deleted file mode 100644
index 58fa6a3..0000000
--- a/appcompat/appcompat-resources/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-// Signature format: 4.0
-package androidx.appcompat.content.res {
-
- public final class AppCompatResources {
- method public static android.content.res.ColorStateList! getColorStateList(android.content.Context, @ColorRes int);
- method public static android.graphics.drawable.Drawable? getDrawable(android.content.Context, @DrawableRes int);
- }
-
-}
-
-package androidx.appcompat.graphics.drawable {
-
- public class AnimatedStateListDrawableCompat extends androidx.appcompat.graphics.drawable.StateListDrawableCompat {
- ctor public AnimatedStateListDrawableCompat();
- method public void addState(int[], android.graphics.drawable.Drawable, int);
- method public <T extends android.graphics.drawable.Drawable & android.graphics.drawable.Animatable> void addTransition(int, int, T, boolean);
- method public static androidx.appcompat.graphics.drawable.AnimatedStateListDrawableCompat? create(android.content.Context, @DrawableRes int, android.content.res.Resources.Theme?);
- method public static androidx.appcompat.graphics.drawable.AnimatedStateListDrawableCompat createFromXmlInner(android.content.Context, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme?) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
- }
-
- public class DrawableContainerCompat extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
- ctor public DrawableContainerCompat();
- method public void draw(android.graphics.Canvas);
- method public final android.graphics.drawable.Drawable.ConstantState! getConstantState();
- method public int getOpacity();
- method public void invalidateDrawable(android.graphics.drawable.Drawable);
- method public void scheduleDrawable(android.graphics.drawable.Drawable, Runnable, long);
- method public void setAlpha(int);
- method public void setColorFilter(android.graphics.ColorFilter!);
- method public void setDither(boolean);
- method public void setEnterFadeDuration(int);
- method public void setExitFadeDuration(int);
- method public void unscheduleDrawable(android.graphics.drawable.Drawable, Runnable);
- }
-
- public class DrawableWrapperCompat extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
- ctor public DrawableWrapperCompat(android.graphics.drawable.Drawable!);
- method public void draw(android.graphics.Canvas);
- method public android.graphics.drawable.Drawable? getDrawable();
- method public int getOpacity();
- method public void invalidateDrawable(android.graphics.drawable.Drawable!);
- method public void scheduleDrawable(android.graphics.drawable.Drawable!, Runnable!, long);
- method public void setAlpha(int);
- method public void setColorFilter(android.graphics.ColorFilter!);
- method public void setDither(boolean);
- method public void setDrawable(android.graphics.drawable.Drawable?);
- method public void unscheduleDrawable(android.graphics.drawable.Drawable!, Runnable!);
- }
-
- public class StateListDrawableCompat extends androidx.appcompat.graphics.drawable.DrawableContainerCompat {
- ctor public StateListDrawableCompat();
- method public void addState(int[]!, android.graphics.drawable.Drawable!);
- method public void inflate(android.content.Context, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme?) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
- }
-
-}
-
diff --git a/appcompat/appcompat-resources/build.gradle b/appcompat/appcompat-resources/build.gradle
index cd96606..7686cb1 100644
--- a/appcompat/appcompat-resources/build.gradle
+++ b/appcompat/appcompat-resources/build.gradle
@@ -59,8 +59,9 @@
}
androidx {
- name = "Android Resources Library"
+ name = "AppCompat Resources"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2019"
- description = "The Resources Library is a static library that you can add to your Android application in order to use resource APIs that backport the latest APIs to older versions of the platform. Compatible on devices running API 14 or later."
+ description = "Provides backward-compatible implementations of resource-related Android SDK" +
+ "functionality, including color state list theming."
}
diff --git a/appcompat/appcompat/api/current.txt b/appcompat/appcompat/api/current.txt
index 08d0661..fea9e92 100644
--- a/appcompat/appcompat/api/current.txt
+++ b/appcompat/appcompat/api/current.txt
@@ -45,24 +45,24 @@
method public void setElevation(float);
method public void setHideOffset(int);
method public void setHideOnContentScrollEnabled(boolean);
- method public void setHomeActionContentDescription(CharSequence?);
method public void setHomeActionContentDescription(@StringRes int);
+ method public void setHomeActionContentDescription(CharSequence?);
method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable?);
method public void setHomeAsUpIndicator(@DrawableRes int);
method public void setHomeButtonEnabled(boolean);
- method public abstract void setIcon(@DrawableRes int);
method public abstract void setIcon(android.graphics.drawable.Drawable!);
+ method public abstract void setIcon(@DrawableRes int);
method @Deprecated public abstract void setListNavigationCallbacks(android.widget.SpinnerAdapter!, androidx.appcompat.app.ActionBar.OnNavigationListener!);
- method public abstract void setLogo(@DrawableRes int);
method public abstract void setLogo(android.graphics.drawable.Drawable!);
+ method public abstract void setLogo(@DrawableRes int);
method @Deprecated public abstract void setNavigationMode(int);
method @Deprecated public abstract void setSelectedNavigationItem(int);
method public void setSplitBackgroundDrawable(android.graphics.drawable.Drawable!);
method public void setStackedBackgroundDrawable(android.graphics.drawable.Drawable!);
- method public abstract void setSubtitle(CharSequence!);
method public abstract void setSubtitle(int);
- method public abstract void setTitle(CharSequence!);
+ method public abstract void setSubtitle(CharSequence!);
method public abstract void setTitle(@StringRes int);
+ method public abstract void setTitle(CharSequence!);
method public abstract void show();
field public static final int DISPLAY_HOME_AS_UP = 4; // 0x4
field public static final int DISPLAY_SHOW_CUSTOM = 16; // 0x10
@@ -76,11 +76,11 @@
public static class ActionBar.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
ctor public ActionBar.LayoutParams(android.content.Context, android.util.AttributeSet!);
+ ctor public ActionBar.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ ctor public ActionBar.LayoutParams(androidx.appcompat.app.ActionBar.LayoutParams!);
+ ctor public ActionBar.LayoutParams(int);
ctor public ActionBar.LayoutParams(int, int);
ctor public ActionBar.LayoutParams(int, int, int);
- ctor public ActionBar.LayoutParams(int);
- ctor public ActionBar.LayoutParams(androidx.appcompat.app.ActionBar.LayoutParams!);
- ctor public ActionBar.LayoutParams(android.view.ViewGroup.LayoutParams!);
field public int gravity;
}
@@ -109,8 +109,8 @@
method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setIcon(@DrawableRes int);
method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setTabListener(androidx.appcompat.app.ActionBar.TabListener!);
method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setTag(Object!);
- method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setText(CharSequence!);
method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setText(int);
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setText(CharSequence!);
field @Deprecated public static final int INVALID_POSITION = -1; // 0xffffffff
}
@@ -121,8 +121,8 @@
}
public class ActionBarDrawerToggle implements androidx.drawerlayout.widget.DrawerLayout.DrawerListener {
- ctor public ActionBarDrawerToggle(android.app.Activity!, androidx.drawerlayout.widget.DrawerLayout!, @StringRes int, @StringRes int);
ctor public ActionBarDrawerToggle(android.app.Activity!, androidx.drawerlayout.widget.DrawerLayout!, androidx.appcompat.widget.Toolbar!, @StringRes int, @StringRes int);
+ ctor public ActionBarDrawerToggle(android.app.Activity!, androidx.drawerlayout.widget.DrawerLayout!, @StringRes int, @StringRes int);
method public androidx.appcompat.graphics.drawable.DrawerArrowDrawable getDrawerArrowDrawable();
method public android.view.View.OnClickListener! getToolbarNavigationClickListener();
method public boolean isDrawerIndicatorEnabled();
@@ -156,16 +156,16 @@
public class AlertDialog extends androidx.appcompat.app.AppCompatDialog implements android.content.DialogInterface {
ctor protected AlertDialog(android.content.Context);
- ctor protected AlertDialog(android.content.Context, @StyleRes int);
ctor protected AlertDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener?);
+ ctor protected AlertDialog(android.content.Context, @StyleRes int);
method public android.widget.Button! getButton(int);
method public android.widget.ListView! getListView();
- method public void setButton(int, CharSequence!, android.os.Message!);
method public void setButton(int, CharSequence!, android.content.DialogInterface.OnClickListener!);
method public void setButton(int, CharSequence!, android.graphics.drawable.Drawable!, android.content.DialogInterface.OnClickListener!);
+ method public void setButton(int, CharSequence!, android.os.Message!);
method public void setCustomTitle(android.view.View!);
- method public void setIcon(int);
method public void setIcon(android.graphics.drawable.Drawable!);
+ method public void setIcon(int);
method public void setIconAttribute(int);
method public void setMessage(CharSequence!);
method public void setView(android.view.View!);
@@ -181,17 +181,17 @@
method public androidx.appcompat.app.AlertDialog.Builder! setCancelable(boolean);
method public androidx.appcompat.app.AlertDialog.Builder! setCursor(android.database.Cursor!, android.content.DialogInterface.OnClickListener!, String!);
method public androidx.appcompat.app.AlertDialog.Builder! setCustomTitle(android.view.View?);
- method public androidx.appcompat.app.AlertDialog.Builder! setIcon(@DrawableRes int);
method public androidx.appcompat.app.AlertDialog.Builder! setIcon(android.graphics.drawable.Drawable?);
+ method public androidx.appcompat.app.AlertDialog.Builder! setIcon(@DrawableRes int);
method public androidx.appcompat.app.AlertDialog.Builder! setIconAttribute(@AttrRes int);
method @Deprecated public androidx.appcompat.app.AlertDialog.Builder! setInverseBackgroundForced(boolean);
method public androidx.appcompat.app.AlertDialog.Builder! setItems(@ArrayRes int, android.content.DialogInterface.OnClickListener!);
method public androidx.appcompat.app.AlertDialog.Builder! setItems(CharSequence![]!, android.content.DialogInterface.OnClickListener!);
method public androidx.appcompat.app.AlertDialog.Builder! setMessage(@StringRes int);
method public androidx.appcompat.app.AlertDialog.Builder! setMessage(CharSequence?);
+ method public androidx.appcompat.app.AlertDialog.Builder! setMultiChoiceItems(android.database.Cursor!, String!, String!, android.content.DialogInterface.OnMultiChoiceClickListener!);
method public androidx.appcompat.app.AlertDialog.Builder! setMultiChoiceItems(@ArrayRes int, boolean[]!, android.content.DialogInterface.OnMultiChoiceClickListener!);
method public androidx.appcompat.app.AlertDialog.Builder! setMultiChoiceItems(CharSequence![]!, boolean[]!, android.content.DialogInterface.OnMultiChoiceClickListener!);
- method public androidx.appcompat.app.AlertDialog.Builder! setMultiChoiceItems(android.database.Cursor!, String!, String!, android.content.DialogInterface.OnMultiChoiceClickListener!);
method public androidx.appcompat.app.AlertDialog.Builder! setNegativeButton(@StringRes int, android.content.DialogInterface.OnClickListener!);
method public androidx.appcompat.app.AlertDialog.Builder! setNegativeButton(CharSequence!, android.content.DialogInterface.OnClickListener!);
method public androidx.appcompat.app.AlertDialog.Builder! setNegativeButtonIcon(android.graphics.drawable.Drawable!);
@@ -205,14 +205,14 @@
method public androidx.appcompat.app.AlertDialog.Builder! setPositiveButton(@StringRes int, android.content.DialogInterface.OnClickListener!);
method public androidx.appcompat.app.AlertDialog.Builder! setPositiveButton(CharSequence!, android.content.DialogInterface.OnClickListener!);
method public androidx.appcompat.app.AlertDialog.Builder! setPositiveButtonIcon(android.graphics.drawable.Drawable!);
- method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(@ArrayRes int, int, android.content.DialogInterface.OnClickListener!);
method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(android.database.Cursor!, int, String!, android.content.DialogInterface.OnClickListener!);
- method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(CharSequence![]!, int, android.content.DialogInterface.OnClickListener!);
method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(android.widget.ListAdapter!, int, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(@ArrayRes int, int, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(CharSequence![]!, int, android.content.DialogInterface.OnClickListener!);
method public androidx.appcompat.app.AlertDialog.Builder! setTitle(@StringRes int);
method public androidx.appcompat.app.AlertDialog.Builder! setTitle(CharSequence?);
- method public androidx.appcompat.app.AlertDialog.Builder! setView(int);
method public androidx.appcompat.app.AlertDialog.Builder! setView(android.view.View!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setView(int);
method public androidx.appcompat.app.AlertDialog! show();
}
@@ -258,8 +258,8 @@
method @CallSuper public android.content.Context attachBaseContext2(android.content.Context);
method public static androidx.appcompat.app.AppCompatDelegate create(android.app.Activity, androidx.appcompat.app.AppCompatCallback?);
method public static androidx.appcompat.app.AppCompatDelegate create(android.app.Dialog, androidx.appcompat.app.AppCompatCallback?);
- method public static androidx.appcompat.app.AppCompatDelegate create(android.content.Context, android.view.Window, androidx.appcompat.app.AppCompatCallback?);
method public static androidx.appcompat.app.AppCompatDelegate create(android.content.Context, android.app.Activity, androidx.appcompat.app.AppCompatCallback?);
+ method public static androidx.appcompat.app.AppCompatDelegate create(android.content.Context, android.view.Window, androidx.appcompat.app.AppCompatCallback?);
method public abstract android.view.View! createView(android.view.View?, String!, android.content.Context, android.util.AttributeSet);
method public abstract <T extends android.view.View> T! findViewById(@IdRes int);
method @AnyThread public static androidx.core.os.LocaleListCompat getApplicationLocales();
@@ -286,8 +286,8 @@
method public static void setApplicationLocales(androidx.core.os.LocaleListCompat);
method public static void setCompatVectorFromResourcesEnabled(boolean);
method public abstract void setContentView(android.view.View!);
- method public abstract void setContentView(@LayoutRes int);
method public abstract void setContentView(android.view.View!, android.view.ViewGroup.LayoutParams!);
+ method public abstract void setContentView(@LayoutRes int);
method public static void setDefaultNightMode(int);
method public abstract void setHandleNativeActionModesEnabled(boolean);
method @RequiresApi(17) public abstract void setLocalNightMode(int);
@@ -310,8 +310,8 @@
public class AppCompatDialog extends androidx.activity.ComponentDialog implements androidx.appcompat.app.AppCompatCallback {
ctor public AppCompatDialog(android.content.Context);
- ctor public AppCompatDialog(android.content.Context, int);
ctor protected AppCompatDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener?);
+ ctor public AppCompatDialog(android.content.Context, int);
method public androidx.appcompat.app.AppCompatDelegate getDelegate();
method public androidx.appcompat.app.ActionBar! getSupportActionBar();
method public void onSupportActionModeFinished(androidx.appcompat.view.ActionMode!);
@@ -341,8 +341,8 @@
method protected androidx.appcompat.widget.AppCompatSpinner createSpinner(android.content.Context!, android.util.AttributeSet!);
method protected androidx.appcompat.widget.AppCompatTextView createTextView(android.content.Context!, android.util.AttributeSet!);
method protected androidx.appcompat.widget.AppCompatToggleButton createToggleButton(android.content.Context!, android.util.AttributeSet!);
- method public final android.view.View? createView(android.view.View?, String, android.content.Context, android.util.AttributeSet, boolean, boolean, boolean, boolean);
method protected android.view.View? createView(android.content.Context!, String!, android.util.AttributeSet!);
+ method public final android.view.View? createView(android.view.View?, String, android.content.Context, android.util.AttributeSet, boolean, boolean, boolean, boolean);
}
public final class AppLocalesMetadataHolderService extends android.app.Service {
@@ -404,11 +404,11 @@
method public abstract void invalidate();
method public boolean isTitleOptional();
method public abstract void setCustomView(android.view.View!);
- method public abstract void setSubtitle(CharSequence!);
method public abstract void setSubtitle(int);
+ method public abstract void setSubtitle(CharSequence!);
method public void setTag(Object!);
- method public abstract void setTitle(CharSequence!);
method public abstract void setTitle(int);
+ method public abstract void setTitle(CharSequence!);
method public void setTitleOptionalHint(boolean);
}
@@ -426,8 +426,8 @@
public class ContextThemeWrapper extends android.content.ContextWrapper {
ctor public ContextThemeWrapper();
- ctor public ContextThemeWrapper(android.content.Context!, @StyleRes int);
ctor public ContextThemeWrapper(android.content.Context!, android.content.res.Resources.Theme!);
+ ctor public ContextThemeWrapper(android.content.Context!, @StyleRes int);
method public void applyOverrideConfiguration(android.content.res.Configuration!);
method public int getThemeResId();
method protected void onApplyThemeResource(android.content.res.Resources.Theme!, int, boolean);
@@ -645,11 +645,11 @@
public class AppCompatSpinner extends android.widget.Spinner implements androidx.core.view.TintableBackgroundView {
ctor public AppCompatSpinner(android.content.Context);
- ctor public AppCompatSpinner(android.content.Context, int);
ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet?);
ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet?, int);
ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet?, int, int);
ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet?, int, int, android.content.res.Resources.Theme!);
+ ctor public AppCompatSpinner(android.content.Context, int);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
@@ -739,10 +739,10 @@
public static class LinearLayoutCompat.LayoutParams extends android.widget.LinearLayout.LayoutParams {
ctor public LinearLayoutCompat.LayoutParams(android.content.Context!, android.util.AttributeSet!);
- ctor public LinearLayoutCompat.LayoutParams(int, int);
- ctor public LinearLayoutCompat.LayoutParams(int, int, float);
ctor public LinearLayoutCompat.LayoutParams(android.view.ViewGroup.LayoutParams!);
ctor public LinearLayoutCompat.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+ ctor public LinearLayoutCompat.LayoutParams(int, int);
+ ctor public LinearLayoutCompat.LayoutParams(int, int, float);
}
public class ListPopupWindow {
@@ -923,8 +923,8 @@
method public void setSwitchMinWidth(int);
method public void setSwitchPadding(int);
method public void setSwitchTextAppearance(android.content.Context!, int);
- method public void setSwitchTypeface(android.graphics.Typeface!, int);
method public void setSwitchTypeface(android.graphics.Typeface!);
+ method public void setSwitchTypeface(android.graphics.Typeface!, int);
method public void setTextOff(CharSequence!);
method public void setTextOn(CharSequence!);
method public void setThumbDrawable(android.graphics.drawable.Drawable!);
@@ -997,20 +997,20 @@
method public void setBackInvokedCallbackEnabled(boolean);
method public void setCollapseContentDescription(@StringRes int);
method public void setCollapseContentDescription(CharSequence?);
- method public void setCollapseIcon(@DrawableRes int);
method public void setCollapseIcon(android.graphics.drawable.Drawable?);
+ method public void setCollapseIcon(@DrawableRes int);
method public void setContentInsetEndWithActions(int);
method public void setContentInsetStartWithNavigation(int);
method public void setContentInsetsAbsolute(int, int);
method public void setContentInsetsRelative(int, int);
- method public void setLogo(@DrawableRes int);
method public void setLogo(android.graphics.drawable.Drawable!);
+ method public void setLogo(@DrawableRes int);
method public void setLogoDescription(@StringRes int);
method public void setLogoDescription(CharSequence!);
method public void setNavigationContentDescription(@StringRes int);
method public void setNavigationContentDescription(CharSequence?);
- method public void setNavigationIcon(@DrawableRes int);
method public void setNavigationIcon(android.graphics.drawable.Drawable?);
+ method public void setNavigationIcon(@DrawableRes int);
method public void setNavigationOnClickListener(android.view.View.OnClickListener!);
method public void setOnMenuItemClickListener(androidx.appcompat.widget.Toolbar.OnMenuItemClickListener!);
method public void setOverflowIcon(android.graphics.drawable.Drawable?);
@@ -1018,8 +1018,8 @@
method public void setSubtitle(@StringRes int);
method public void setSubtitle(CharSequence!);
method public void setSubtitleTextAppearance(android.content.Context!, @StyleRes int);
- method public void setSubtitleTextColor(@ColorInt int);
method public void setSubtitleTextColor(android.content.res.ColorStateList);
+ method public void setSubtitleTextColor(@ColorInt int);
method public void setTitle(@StringRes int);
method public void setTitle(CharSequence!);
method public void setTitleMargin(int, int, int, int);
@@ -1028,20 +1028,20 @@
method public void setTitleMarginStart(int);
method public void setTitleMarginTop(int);
method public void setTitleTextAppearance(android.content.Context!, @StyleRes int);
- method public void setTitleTextColor(@ColorInt int);
method public void setTitleTextColor(android.content.res.ColorStateList);
+ method public void setTitleTextColor(@ColorInt int);
method public boolean showOverflowMenu();
}
public static class Toolbar.LayoutParams extends androidx.appcompat.app.ActionBar.LayoutParams {
ctor public Toolbar.LayoutParams(android.content.Context, android.util.AttributeSet!);
+ ctor public Toolbar.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ ctor public Toolbar.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+ ctor public Toolbar.LayoutParams(androidx.appcompat.app.ActionBar.LayoutParams!);
+ ctor public Toolbar.LayoutParams(androidx.appcompat.widget.Toolbar.LayoutParams!);
+ ctor public Toolbar.LayoutParams(int);
ctor public Toolbar.LayoutParams(int, int);
ctor public Toolbar.LayoutParams(int, int, int);
- ctor public Toolbar.LayoutParams(int);
- ctor public Toolbar.LayoutParams(androidx.appcompat.widget.Toolbar.LayoutParams!);
- ctor public Toolbar.LayoutParams(androidx.appcompat.app.ActionBar.LayoutParams!);
- ctor public Toolbar.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
- ctor public Toolbar.LayoutParams(android.view.ViewGroup.LayoutParams!);
}
public static interface Toolbar.OnMenuItemClickListener {
diff --git a/appcompat/appcompat/api/public_plus_experimental_current.txt b/appcompat/appcompat/api/public_plus_experimental_current.txt
deleted file mode 100644
index 08d0661..0000000
--- a/appcompat/appcompat/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,1063 +0,0 @@
-// Signature format: 4.0
-package androidx.appcompat.app {
-
- public abstract class ActionBar {
- ctor public ActionBar();
- method public abstract void addOnMenuVisibilityListener(androidx.appcompat.app.ActionBar.OnMenuVisibilityListener!);
- method @Deprecated public abstract void addTab(androidx.appcompat.app.ActionBar.Tab!);
- method @Deprecated public abstract void addTab(androidx.appcompat.app.ActionBar.Tab!, boolean);
- method @Deprecated public abstract void addTab(androidx.appcompat.app.ActionBar.Tab!, int);
- method @Deprecated public abstract void addTab(androidx.appcompat.app.ActionBar.Tab!, int, boolean);
- method public abstract android.view.View! getCustomView();
- method public abstract int getDisplayOptions();
- method public float getElevation();
- method public abstract int getHeight();
- method public int getHideOffset();
- method @Deprecated public abstract int getNavigationItemCount();
- method @Deprecated public abstract int getNavigationMode();
- method @Deprecated public abstract int getSelectedNavigationIndex();
- method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab? getSelectedTab();
- method public abstract CharSequence? getSubtitle();
- method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! getTabAt(int);
- method @Deprecated public abstract int getTabCount();
- method public android.content.Context! getThemedContext();
- method public abstract CharSequence? getTitle();
- method public abstract void hide();
- method public boolean isHideOnContentScrollEnabled();
- method public abstract boolean isShowing();
- method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! newTab();
- method @Deprecated public abstract void removeAllTabs();
- method public abstract void removeOnMenuVisibilityListener(androidx.appcompat.app.ActionBar.OnMenuVisibilityListener!);
- method @Deprecated public abstract void removeTab(androidx.appcompat.app.ActionBar.Tab!);
- method @Deprecated public abstract void removeTabAt(int);
- method @Deprecated public abstract void selectTab(androidx.appcompat.app.ActionBar.Tab!);
- method public abstract void setBackgroundDrawable(android.graphics.drawable.Drawable?);
- method public abstract void setCustomView(android.view.View!);
- method public abstract void setCustomView(android.view.View!, androidx.appcompat.app.ActionBar.LayoutParams!);
- method public abstract void setCustomView(int);
- method public abstract void setDisplayHomeAsUpEnabled(boolean);
- method public abstract void setDisplayOptions(int);
- method public abstract void setDisplayOptions(int, int);
- method public abstract void setDisplayShowCustomEnabled(boolean);
- method public abstract void setDisplayShowHomeEnabled(boolean);
- method public abstract void setDisplayShowTitleEnabled(boolean);
- method public abstract void setDisplayUseLogoEnabled(boolean);
- method public void setElevation(float);
- method public void setHideOffset(int);
- method public void setHideOnContentScrollEnabled(boolean);
- method public void setHomeActionContentDescription(CharSequence?);
- method public void setHomeActionContentDescription(@StringRes int);
- method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable?);
- method public void setHomeAsUpIndicator(@DrawableRes int);
- method public void setHomeButtonEnabled(boolean);
- method public abstract void setIcon(@DrawableRes int);
- method public abstract void setIcon(android.graphics.drawable.Drawable!);
- method @Deprecated public abstract void setListNavigationCallbacks(android.widget.SpinnerAdapter!, androidx.appcompat.app.ActionBar.OnNavigationListener!);
- method public abstract void setLogo(@DrawableRes int);
- method public abstract void setLogo(android.graphics.drawable.Drawable!);
- method @Deprecated public abstract void setNavigationMode(int);
- method @Deprecated public abstract void setSelectedNavigationItem(int);
- method public void setSplitBackgroundDrawable(android.graphics.drawable.Drawable!);
- method public void setStackedBackgroundDrawable(android.graphics.drawable.Drawable!);
- method public abstract void setSubtitle(CharSequence!);
- method public abstract void setSubtitle(int);
- method public abstract void setTitle(CharSequence!);
- method public abstract void setTitle(@StringRes int);
- method public abstract void show();
- field public static final int DISPLAY_HOME_AS_UP = 4; // 0x4
- field public static final int DISPLAY_SHOW_CUSTOM = 16; // 0x10
- field public static final int DISPLAY_SHOW_HOME = 2; // 0x2
- field public static final int DISPLAY_SHOW_TITLE = 8; // 0x8
- field public static final int DISPLAY_USE_LOGO = 1; // 0x1
- field @Deprecated public static final int NAVIGATION_MODE_LIST = 1; // 0x1
- field @Deprecated public static final int NAVIGATION_MODE_STANDARD = 0; // 0x0
- field @Deprecated public static final int NAVIGATION_MODE_TABS = 2; // 0x2
- }
-
- public static class ActionBar.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
- ctor public ActionBar.LayoutParams(android.content.Context, android.util.AttributeSet!);
- ctor public ActionBar.LayoutParams(int, int);
- ctor public ActionBar.LayoutParams(int, int, int);
- ctor public ActionBar.LayoutParams(int);
- ctor public ActionBar.LayoutParams(androidx.appcompat.app.ActionBar.LayoutParams!);
- ctor public ActionBar.LayoutParams(android.view.ViewGroup.LayoutParams!);
- field public int gravity;
- }
-
- public static interface ActionBar.OnMenuVisibilityListener {
- method public void onMenuVisibilityChanged(boolean);
- }
-
- @Deprecated public static interface ActionBar.OnNavigationListener {
- method @Deprecated public boolean onNavigationItemSelected(int, long);
- }
-
- @Deprecated public abstract static class ActionBar.Tab {
- ctor @Deprecated public ActionBar.Tab();
- method @Deprecated public abstract CharSequence! getContentDescription();
- method @Deprecated public abstract android.view.View! getCustomView();
- method @Deprecated public abstract android.graphics.drawable.Drawable! getIcon();
- method @Deprecated public abstract int getPosition();
- method @Deprecated public abstract Object! getTag();
- method @Deprecated public abstract CharSequence! getText();
- method @Deprecated public abstract void select();
- method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setContentDescription(@StringRes int);
- method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setContentDescription(CharSequence!);
- method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setCustomView(android.view.View!);
- method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setCustomView(int);
- method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setIcon(android.graphics.drawable.Drawable!);
- method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setIcon(@DrawableRes int);
- method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setTabListener(androidx.appcompat.app.ActionBar.TabListener!);
- method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setTag(Object!);
- method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setText(CharSequence!);
- method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setText(int);
- field @Deprecated public static final int INVALID_POSITION = -1; // 0xffffffff
- }
-
- @Deprecated public static interface ActionBar.TabListener {
- method @Deprecated public void onTabReselected(androidx.appcompat.app.ActionBar.Tab!, androidx.fragment.app.FragmentTransaction!);
- method @Deprecated public void onTabSelected(androidx.appcompat.app.ActionBar.Tab!, androidx.fragment.app.FragmentTransaction!);
- method @Deprecated public void onTabUnselected(androidx.appcompat.app.ActionBar.Tab!, androidx.fragment.app.FragmentTransaction!);
- }
-
- public class ActionBarDrawerToggle implements androidx.drawerlayout.widget.DrawerLayout.DrawerListener {
- ctor public ActionBarDrawerToggle(android.app.Activity!, androidx.drawerlayout.widget.DrawerLayout!, @StringRes int, @StringRes int);
- ctor public ActionBarDrawerToggle(android.app.Activity!, androidx.drawerlayout.widget.DrawerLayout!, androidx.appcompat.widget.Toolbar!, @StringRes int, @StringRes int);
- method public androidx.appcompat.graphics.drawable.DrawerArrowDrawable getDrawerArrowDrawable();
- method public android.view.View.OnClickListener! getToolbarNavigationClickListener();
- method public boolean isDrawerIndicatorEnabled();
- method public boolean isDrawerSlideAnimationEnabled();
- method public void onConfigurationChanged(android.content.res.Configuration!);
- method public void onDrawerClosed(android.view.View!);
- method public void onDrawerOpened(android.view.View!);
- method public void onDrawerSlide(android.view.View!, float);
- method public void onDrawerStateChanged(int);
- method public boolean onOptionsItemSelected(android.view.MenuItem!);
- method public void setDrawerArrowDrawable(androidx.appcompat.graphics.drawable.DrawerArrowDrawable);
- method public void setDrawerIndicatorEnabled(boolean);
- method public void setDrawerSlideAnimationEnabled(boolean);
- method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable!);
- method public void setHomeAsUpIndicator(int);
- method public void setToolbarNavigationClickListener(android.view.View.OnClickListener!);
- method public void syncState();
- }
-
- public static interface ActionBarDrawerToggle.Delegate {
- method public android.content.Context! getActionBarThemedContext();
- method public android.graphics.drawable.Drawable! getThemeUpIndicator();
- method public boolean isNavigationVisible();
- method public void setActionBarDescription(@StringRes int);
- method public void setActionBarUpIndicator(android.graphics.drawable.Drawable!, @StringRes int);
- }
-
- public static interface ActionBarDrawerToggle.DelegateProvider {
- method public androidx.appcompat.app.ActionBarDrawerToggle.Delegate? getDrawerToggleDelegate();
- }
-
- public class AlertDialog extends androidx.appcompat.app.AppCompatDialog implements android.content.DialogInterface {
- ctor protected AlertDialog(android.content.Context);
- ctor protected AlertDialog(android.content.Context, @StyleRes int);
- ctor protected AlertDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener?);
- method public android.widget.Button! getButton(int);
- method public android.widget.ListView! getListView();
- method public void setButton(int, CharSequence!, android.os.Message!);
- method public void setButton(int, CharSequence!, android.content.DialogInterface.OnClickListener!);
- method public void setButton(int, CharSequence!, android.graphics.drawable.Drawable!, android.content.DialogInterface.OnClickListener!);
- method public void setCustomTitle(android.view.View!);
- method public void setIcon(int);
- method public void setIcon(android.graphics.drawable.Drawable!);
- method public void setIconAttribute(int);
- method public void setMessage(CharSequence!);
- method public void setView(android.view.View!);
- method public void setView(android.view.View!, int, int, int, int);
- }
-
- public static class AlertDialog.Builder {
- ctor public AlertDialog.Builder(android.content.Context);
- ctor public AlertDialog.Builder(android.content.Context, @StyleRes int);
- method public androidx.appcompat.app.AlertDialog create();
- method public android.content.Context getContext();
- method public androidx.appcompat.app.AlertDialog.Builder! setAdapter(android.widget.ListAdapter!, android.content.DialogInterface.OnClickListener!);
- method public androidx.appcompat.app.AlertDialog.Builder! setCancelable(boolean);
- method public androidx.appcompat.app.AlertDialog.Builder! setCursor(android.database.Cursor!, android.content.DialogInterface.OnClickListener!, String!);
- method public androidx.appcompat.app.AlertDialog.Builder! setCustomTitle(android.view.View?);
- method public androidx.appcompat.app.AlertDialog.Builder! setIcon(@DrawableRes int);
- method public androidx.appcompat.app.AlertDialog.Builder! setIcon(android.graphics.drawable.Drawable?);
- method public androidx.appcompat.app.AlertDialog.Builder! setIconAttribute(@AttrRes int);
- method @Deprecated public androidx.appcompat.app.AlertDialog.Builder! setInverseBackgroundForced(boolean);
- method public androidx.appcompat.app.AlertDialog.Builder! setItems(@ArrayRes int, android.content.DialogInterface.OnClickListener!);
- method public androidx.appcompat.app.AlertDialog.Builder! setItems(CharSequence![]!, android.content.DialogInterface.OnClickListener!);
- method public androidx.appcompat.app.AlertDialog.Builder! setMessage(@StringRes int);
- method public androidx.appcompat.app.AlertDialog.Builder! setMessage(CharSequence?);
- method public androidx.appcompat.app.AlertDialog.Builder! setMultiChoiceItems(@ArrayRes int, boolean[]!, android.content.DialogInterface.OnMultiChoiceClickListener!);
- method public androidx.appcompat.app.AlertDialog.Builder! setMultiChoiceItems(CharSequence![]!, boolean[]!, android.content.DialogInterface.OnMultiChoiceClickListener!);
- method public androidx.appcompat.app.AlertDialog.Builder! setMultiChoiceItems(android.database.Cursor!, String!, String!, android.content.DialogInterface.OnMultiChoiceClickListener!);
- method public androidx.appcompat.app.AlertDialog.Builder! setNegativeButton(@StringRes int, android.content.DialogInterface.OnClickListener!);
- method public androidx.appcompat.app.AlertDialog.Builder! setNegativeButton(CharSequence!, android.content.DialogInterface.OnClickListener!);
- method public androidx.appcompat.app.AlertDialog.Builder! setNegativeButtonIcon(android.graphics.drawable.Drawable!);
- method public androidx.appcompat.app.AlertDialog.Builder! setNeutralButton(@StringRes int, android.content.DialogInterface.OnClickListener!);
- method public androidx.appcompat.app.AlertDialog.Builder! setNeutralButton(CharSequence!, android.content.DialogInterface.OnClickListener!);
- method public androidx.appcompat.app.AlertDialog.Builder! setNeutralButtonIcon(android.graphics.drawable.Drawable!);
- method public androidx.appcompat.app.AlertDialog.Builder! setOnCancelListener(android.content.DialogInterface.OnCancelListener!);
- method public androidx.appcompat.app.AlertDialog.Builder! setOnDismissListener(android.content.DialogInterface.OnDismissListener!);
- method public androidx.appcompat.app.AlertDialog.Builder! setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener!);
- method public androidx.appcompat.app.AlertDialog.Builder! setOnKeyListener(android.content.DialogInterface.OnKeyListener!);
- method public androidx.appcompat.app.AlertDialog.Builder! setPositiveButton(@StringRes int, android.content.DialogInterface.OnClickListener!);
- method public androidx.appcompat.app.AlertDialog.Builder! setPositiveButton(CharSequence!, android.content.DialogInterface.OnClickListener!);
- method public androidx.appcompat.app.AlertDialog.Builder! setPositiveButtonIcon(android.graphics.drawable.Drawable!);
- method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(@ArrayRes int, int, android.content.DialogInterface.OnClickListener!);
- method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(android.database.Cursor!, int, String!, android.content.DialogInterface.OnClickListener!);
- method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(CharSequence![]!, int, android.content.DialogInterface.OnClickListener!);
- method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(android.widget.ListAdapter!, int, android.content.DialogInterface.OnClickListener!);
- method public androidx.appcompat.app.AlertDialog.Builder! setTitle(@StringRes int);
- method public androidx.appcompat.app.AlertDialog.Builder! setTitle(CharSequence?);
- method public androidx.appcompat.app.AlertDialog.Builder! setView(int);
- method public androidx.appcompat.app.AlertDialog.Builder! setView(android.view.View!);
- method public androidx.appcompat.app.AlertDialog! show();
- }
-
- public class AppCompatActivity extends androidx.fragment.app.FragmentActivity implements androidx.appcompat.app.ActionBarDrawerToggle.DelegateProvider androidx.appcompat.app.AppCompatCallback androidx.lifecycle.LifecycleOwner androidx.core.app.TaskStackBuilder.SupportParentable {
- ctor public AppCompatActivity();
- ctor @ContentView public AppCompatActivity(@LayoutRes int);
- method public androidx.appcompat.app.AppCompatDelegate getDelegate();
- method public androidx.appcompat.app.ActionBarDrawerToggle.Delegate? getDrawerToggleDelegate();
- method public androidx.appcompat.app.ActionBar? getSupportActionBar();
- method public android.content.Intent? getSupportParentActivityIntent();
- method public void onCreateSupportNavigateUpTaskStack(androidx.core.app.TaskStackBuilder);
- method protected void onLocalesChanged(androidx.core.os.LocaleListCompat);
- method public final boolean onMenuItemSelected(int, android.view.MenuItem);
- method protected void onNightModeChanged(int);
- method public void onPrepareSupportNavigateUpTaskStack(androidx.core.app.TaskStackBuilder);
- method @CallSuper public void onSupportActionModeFinished(androidx.appcompat.view.ActionMode);
- method @CallSuper public void onSupportActionModeStarted(androidx.appcompat.view.ActionMode);
- method @Deprecated public void onSupportContentChanged();
- method public boolean onSupportNavigateUp();
- method public androidx.appcompat.view.ActionMode? onWindowStartingSupportActionMode(androidx.appcompat.view.ActionMode.Callback);
- method public void setSupportActionBar(androidx.appcompat.widget.Toolbar?);
- method @Deprecated public void setSupportProgress(int);
- method @Deprecated public void setSupportProgressBarIndeterminate(boolean);
- method @Deprecated public void setSupportProgressBarIndeterminateVisibility(boolean);
- method @Deprecated public void setSupportProgressBarVisibility(boolean);
- method public androidx.appcompat.view.ActionMode? startSupportActionMode(androidx.appcompat.view.ActionMode.Callback);
- method public void supportInvalidateOptionsMenu();
- method public void supportNavigateUpTo(android.content.Intent);
- method public boolean supportRequestWindowFeature(int);
- method public boolean supportShouldUpRecreateTask(android.content.Intent);
- }
-
- public interface AppCompatCallback {
- method public void onSupportActionModeFinished(androidx.appcompat.view.ActionMode!);
- method public void onSupportActionModeStarted(androidx.appcompat.view.ActionMode!);
- method public androidx.appcompat.view.ActionMode? onWindowStartingSupportActionMode(androidx.appcompat.view.ActionMode.Callback!);
- }
-
- public abstract class AppCompatDelegate {
- method public abstract void addContentView(android.view.View!, android.view.ViewGroup.LayoutParams!);
- method public abstract boolean applyDayNight();
- method @Deprecated public void attachBaseContext(android.content.Context!);
- method @CallSuper public android.content.Context attachBaseContext2(android.content.Context);
- method public static androidx.appcompat.app.AppCompatDelegate create(android.app.Activity, androidx.appcompat.app.AppCompatCallback?);
- method public static androidx.appcompat.app.AppCompatDelegate create(android.app.Dialog, androidx.appcompat.app.AppCompatCallback?);
- method public static androidx.appcompat.app.AppCompatDelegate create(android.content.Context, android.view.Window, androidx.appcompat.app.AppCompatCallback?);
- method public static androidx.appcompat.app.AppCompatDelegate create(android.content.Context, android.app.Activity, androidx.appcompat.app.AppCompatCallback?);
- method public abstract android.view.View! createView(android.view.View?, String!, android.content.Context, android.util.AttributeSet);
- method public abstract <T extends android.view.View> T! findViewById(@IdRes int);
- method @AnyThread public static androidx.core.os.LocaleListCompat getApplicationLocales();
- method public android.content.Context? getContextForDelegate();
- method public static int getDefaultNightMode();
- method public abstract androidx.appcompat.app.ActionBarDrawerToggle.Delegate? getDrawerToggleDelegate();
- method public int getLocalNightMode();
- method public abstract android.view.MenuInflater! getMenuInflater();
- method public abstract androidx.appcompat.app.ActionBar? getSupportActionBar();
- method public abstract boolean hasWindowFeature(int);
- method public abstract void installViewFactory();
- method public abstract void invalidateOptionsMenu();
- method public static boolean isCompatVectorFromResourcesEnabled();
- method public abstract boolean isHandleNativeActionModesEnabled();
- method public abstract void onConfigurationChanged(android.content.res.Configuration!);
- method public abstract void onCreate(android.os.Bundle!);
- method public abstract void onDestroy();
- method public abstract void onPostCreate(android.os.Bundle!);
- method public abstract void onPostResume();
- method public abstract void onSaveInstanceState(android.os.Bundle!);
- method public abstract void onStart();
- method public abstract void onStop();
- method public abstract boolean requestWindowFeature(int);
- method public static void setApplicationLocales(androidx.core.os.LocaleListCompat);
- method public static void setCompatVectorFromResourcesEnabled(boolean);
- method public abstract void setContentView(android.view.View!);
- method public abstract void setContentView(@LayoutRes int);
- method public abstract void setContentView(android.view.View!, android.view.ViewGroup.LayoutParams!);
- method public static void setDefaultNightMode(int);
- method public abstract void setHandleNativeActionModesEnabled(boolean);
- method @RequiresApi(17) public abstract void setLocalNightMode(int);
- method @CallSuper @RequiresApi(33) public void setOnBackInvokedDispatcher(android.window.OnBackInvokedDispatcher?);
- method public abstract void setSupportActionBar(androidx.appcompat.widget.Toolbar?);
- method public void setTheme(@StyleRes int);
- method public abstract void setTitle(CharSequence?);
- method public abstract androidx.appcompat.view.ActionMode? startSupportActionMode(androidx.appcompat.view.ActionMode.Callback);
- field public static final int FEATURE_ACTION_MODE_OVERLAY = 10; // 0xa
- field public static final int FEATURE_SUPPORT_ACTION_BAR = 108; // 0x6c
- field public static final int FEATURE_SUPPORT_ACTION_BAR_OVERLAY = 109; // 0x6d
- field @Deprecated public static final int MODE_NIGHT_AUTO = 0; // 0x0
- field public static final int MODE_NIGHT_AUTO_BATTERY = 3; // 0x3
- field @Deprecated public static final int MODE_NIGHT_AUTO_TIME = 0; // 0x0
- field public static final int MODE_NIGHT_FOLLOW_SYSTEM = -1; // 0xffffffff
- field public static final int MODE_NIGHT_NO = 1; // 0x1
- field public static final int MODE_NIGHT_UNSPECIFIED = -100; // 0xffffff9c
- field public static final int MODE_NIGHT_YES = 2; // 0x2
- }
-
- public class AppCompatDialog extends androidx.activity.ComponentDialog implements androidx.appcompat.app.AppCompatCallback {
- ctor public AppCompatDialog(android.content.Context);
- ctor public AppCompatDialog(android.content.Context, int);
- ctor protected AppCompatDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener?);
- method public androidx.appcompat.app.AppCompatDelegate getDelegate();
- method public androidx.appcompat.app.ActionBar! getSupportActionBar();
- method public void onSupportActionModeFinished(androidx.appcompat.view.ActionMode!);
- method public void onSupportActionModeStarted(androidx.appcompat.view.ActionMode!);
- method public androidx.appcompat.view.ActionMode? onWindowStartingSupportActionMode(androidx.appcompat.view.ActionMode.Callback!);
- method public boolean supportRequestWindowFeature(int);
- }
-
- public class AppCompatDialogFragment extends androidx.fragment.app.DialogFragment {
- ctor public AppCompatDialogFragment();
- ctor public AppCompatDialogFragment(@LayoutRes int);
- }
-
- public class AppCompatViewInflater {
- ctor public AppCompatViewInflater();
- method protected androidx.appcompat.widget.AppCompatAutoCompleteTextView createAutoCompleteTextView(android.content.Context!, android.util.AttributeSet!);
- method protected androidx.appcompat.widget.AppCompatButton createButton(android.content.Context!, android.util.AttributeSet!);
- method protected androidx.appcompat.widget.AppCompatCheckBox createCheckBox(android.content.Context!, android.util.AttributeSet!);
- method protected androidx.appcompat.widget.AppCompatCheckedTextView createCheckedTextView(android.content.Context!, android.util.AttributeSet!);
- method protected androidx.appcompat.widget.AppCompatEditText createEditText(android.content.Context!, android.util.AttributeSet!);
- method protected androidx.appcompat.widget.AppCompatImageButton createImageButton(android.content.Context!, android.util.AttributeSet!);
- method protected androidx.appcompat.widget.AppCompatImageView createImageView(android.content.Context!, android.util.AttributeSet!);
- method protected androidx.appcompat.widget.AppCompatMultiAutoCompleteTextView createMultiAutoCompleteTextView(android.content.Context!, android.util.AttributeSet!);
- method protected androidx.appcompat.widget.AppCompatRadioButton createRadioButton(android.content.Context!, android.util.AttributeSet!);
- method protected androidx.appcompat.widget.AppCompatRatingBar createRatingBar(android.content.Context!, android.util.AttributeSet!);
- method protected androidx.appcompat.widget.AppCompatSeekBar createSeekBar(android.content.Context!, android.util.AttributeSet!);
- method protected androidx.appcompat.widget.AppCompatSpinner createSpinner(android.content.Context!, android.util.AttributeSet!);
- method protected androidx.appcompat.widget.AppCompatTextView createTextView(android.content.Context!, android.util.AttributeSet!);
- method protected androidx.appcompat.widget.AppCompatToggleButton createToggleButton(android.content.Context!, android.util.AttributeSet!);
- method public final android.view.View? createView(android.view.View?, String, android.content.Context, android.util.AttributeSet, boolean, boolean, boolean, boolean);
- method protected android.view.View? createView(android.content.Context!, String!, android.util.AttributeSet!);
- }
-
- public final class AppLocalesMetadataHolderService extends android.app.Service {
- ctor public AppLocalesMetadataHolderService();
- method public static android.content.pm.ServiceInfo getServiceInfo(android.content.Context) throws android.content.pm.PackageManager.NameNotFoundException;
- method public android.os.IBinder onBind(android.content.Intent);
- }
-
-}
-
-package androidx.appcompat.graphics.drawable {
-
- public class DrawerArrowDrawable extends android.graphics.drawable.Drawable {
- ctor public DrawerArrowDrawable(android.content.Context!);
- method public void draw(android.graphics.Canvas);
- method public float getArrowHeadLength();
- method public float getArrowShaftLength();
- method public float getBarLength();
- method public float getBarThickness();
- method @ColorInt public int getColor();
- method public int getDirection();
- method public float getGapSize();
- method public int getOpacity();
- method public final android.graphics.Paint! getPaint();
- method @FloatRange(from=0.0, to=1.0) public float getProgress();
- method public boolean isSpinEnabled();
- method public void setAlpha(int);
- method public void setArrowHeadLength(float);
- method public void setArrowShaftLength(float);
- method public void setBarLength(float);
- method public void setBarThickness(float);
- method public void setColor(@ColorInt int);
- method public void setColorFilter(android.graphics.ColorFilter!);
- method public void setDirection(int);
- method public void setGapSize(float);
- method public void setProgress(@FloatRange(from=0.0, to=1.0) float);
- method public void setSpinEnabled(boolean);
- method public void setVerticalMirror(boolean);
- field public static final int ARROW_DIRECTION_END = 3; // 0x3
- field public static final int ARROW_DIRECTION_LEFT = 0; // 0x0
- field public static final int ARROW_DIRECTION_RIGHT = 1; // 0x1
- field public static final int ARROW_DIRECTION_START = 2; // 0x2
- }
-
-}
-
-package androidx.appcompat.view {
-
- public abstract class ActionMode {
- ctor public ActionMode();
- method public abstract void finish();
- method public abstract android.view.View! getCustomView();
- method public abstract android.view.Menu! getMenu();
- method public abstract android.view.MenuInflater! getMenuInflater();
- method public abstract CharSequence! getSubtitle();
- method public Object! getTag();
- method public abstract CharSequence! getTitle();
- method public boolean getTitleOptionalHint();
- method public abstract void invalidate();
- method public boolean isTitleOptional();
- method public abstract void setCustomView(android.view.View!);
- method public abstract void setSubtitle(CharSequence!);
- method public abstract void setSubtitle(int);
- method public void setTag(Object!);
- method public abstract void setTitle(CharSequence!);
- method public abstract void setTitle(int);
- method public void setTitleOptionalHint(boolean);
- }
-
- public static interface ActionMode.Callback {
- method public boolean onActionItemClicked(androidx.appcompat.view.ActionMode!, android.view.MenuItem!);
- method public boolean onCreateActionMode(androidx.appcompat.view.ActionMode!, android.view.Menu!);
- method public void onDestroyActionMode(androidx.appcompat.view.ActionMode!);
- method public boolean onPrepareActionMode(androidx.appcompat.view.ActionMode!, android.view.Menu!);
- }
-
- @Deprecated public interface CollapsibleActionView {
- method @Deprecated public void onActionViewCollapsed();
- method @Deprecated public void onActionViewExpanded();
- }
-
- public class ContextThemeWrapper extends android.content.ContextWrapper {
- ctor public ContextThemeWrapper();
- ctor public ContextThemeWrapper(android.content.Context!, @StyleRes int);
- ctor public ContextThemeWrapper(android.content.Context!, android.content.res.Resources.Theme!);
- method public void applyOverrideConfiguration(android.content.res.Configuration!);
- method public int getThemeResId();
- method protected void onApplyThemeResource(android.content.res.Resources.Theme!, int, boolean);
- }
-
-}
-
-package androidx.appcompat.widget {
-
- public class ActionMenuView extends androidx.appcompat.widget.LinearLayoutCompat {
- ctor public ActionMenuView(android.content.Context);
- ctor public ActionMenuView(android.content.Context, android.util.AttributeSet?);
- method public void dismissPopupMenus();
- method protected androidx.appcompat.widget.ActionMenuView.LayoutParams! generateDefaultLayoutParams();
- method public androidx.appcompat.widget.ActionMenuView.LayoutParams! generateLayoutParams(android.util.AttributeSet!);
- method protected androidx.appcompat.widget.ActionMenuView.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
- method public android.view.Menu! getMenu();
- method public android.graphics.drawable.Drawable? getOverflowIcon();
- method public int getPopupTheme();
- method public boolean hideOverflowMenu();
- method public boolean isOverflowMenuShowing();
- method public void onConfigurationChanged(android.content.res.Configuration!);
- method public void onDetachedFromWindow();
- method public void setOnMenuItemClickListener(androidx.appcompat.widget.ActionMenuView.OnMenuItemClickListener!);
- method public void setOverflowIcon(android.graphics.drawable.Drawable?);
- method public void setPopupTheme(@StyleRes int);
- method public boolean showOverflowMenu();
- }
-
- public static class ActionMenuView.LayoutParams extends androidx.appcompat.widget.LinearLayoutCompat.LayoutParams {
- ctor public ActionMenuView.LayoutParams(android.content.Context!, android.util.AttributeSet!);
- ctor public ActionMenuView.LayoutParams(android.view.ViewGroup.LayoutParams!);
- ctor public ActionMenuView.LayoutParams(androidx.appcompat.widget.ActionMenuView.LayoutParams!);
- ctor public ActionMenuView.LayoutParams(int, int);
- field public int cellsUsed;
- field public boolean expandable;
- field public int extraPixels;
- field public boolean isOverflowButton;
- field public boolean preventEdgeOffset;
- }
-
- public static interface ActionMenuView.OnMenuItemClickListener {
- method public boolean onMenuItemClick(android.view.MenuItem!);
- }
-
- public class AppCompatAutoCompleteTextView extends android.widget.AutoCompleteTextView implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundDrawablesView {
- ctor public AppCompatAutoCompleteTextView(android.content.Context);
- ctor public AppCompatAutoCompleteTextView(android.content.Context, android.util.AttributeSet?);
- ctor public AppCompatAutoCompleteTextView(android.content.Context, android.util.AttributeSet?, int);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
- method public boolean isEmojiCompatEnabled();
- method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
- method public void setEmojiCompatEnabled(boolean);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
- method public void setTextAppearance(android.content.Context!, int);
- }
-
- public class AppCompatButton extends android.widget.Button implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundDrawablesView {
- ctor public AppCompatButton(android.content.Context);
- ctor public AppCompatButton(android.content.Context, android.util.AttributeSet?);
- ctor public AppCompatButton(android.content.Context, android.util.AttributeSet?, int);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
- method public boolean isEmojiCompatEnabled();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setAutoSizeTextTypeUniformWithConfiguration(int, int, int, int) throws java.lang.IllegalArgumentException;
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setAutoSizeTextTypeUniformWithPresetSizes(int[], int) throws java.lang.IllegalArgumentException;
- method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
- method public void setEmojiCompatEnabled(boolean);
- method public void setSupportAllCaps(boolean);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
- method public void setTextAppearance(android.content.Context!, int);
- }
-
- public class AppCompatCheckBox extends android.widget.CheckBox implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundButton androidx.core.widget.TintableCompoundDrawablesView {
- ctor public AppCompatCheckBox(android.content.Context);
- ctor public AppCompatCheckBox(android.content.Context, android.util.AttributeSet?);
- ctor public AppCompatCheckBox(android.content.Context, android.util.AttributeSet?, int);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportButtonTintList();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportButtonTintMode();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
- method public boolean isEmojiCompatEnabled();
- method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
- method public void setEmojiCompatEnabled(boolean);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportButtonTintList(android.content.res.ColorStateList?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportButtonTintMode(android.graphics.PorterDuff.Mode?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
- }
-
- public class AppCompatCheckedTextView extends android.widget.CheckedTextView implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundDrawablesView {
- ctor public AppCompatCheckedTextView(android.content.Context);
- ctor public AppCompatCheckedTextView(android.content.Context, android.util.AttributeSet?);
- ctor public AppCompatCheckedTextView(android.content.Context, android.util.AttributeSet?, int);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
- method public boolean isEmojiCompatEnabled();
- method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
- method public void setEmojiCompatEnabled(boolean);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
- method public void setTextAppearance(android.content.Context, int);
- }
-
- public class AppCompatEditText extends android.widget.EditText implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.OnReceiveContentViewBehavior androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundDrawablesView {
- ctor public AppCompatEditText(android.content.Context);
- ctor public AppCompatEditText(android.content.Context, android.util.AttributeSet?);
- ctor public AppCompatEditText(android.content.Context, android.util.AttributeSet?, int);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
- method public boolean isEmojiCompatEnabled();
- method public androidx.core.view.ContentInfoCompat? onReceiveContent(androidx.core.view.ContentInfoCompat);
- method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
- method public void setEmojiCompatEnabled(boolean);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
- method public void setTextAppearance(android.content.Context!, int);
- }
-
- public class AppCompatImageButton extends android.widget.ImageButton implements androidx.core.view.TintableBackgroundView {
- ctor public AppCompatImageButton(android.content.Context);
- ctor public AppCompatImageButton(android.content.Context, android.util.AttributeSet?);
- ctor public AppCompatImageButton(android.content.Context, android.util.AttributeSet?, int);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
- method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
- }
-
- public class AppCompatImageView extends android.widget.ImageView implements androidx.core.view.TintableBackgroundView {
- ctor public AppCompatImageView(android.content.Context);
- ctor public AppCompatImageView(android.content.Context, android.util.AttributeSet?);
- ctor public AppCompatImageView(android.content.Context, android.util.AttributeSet?, int);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
- method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
- }
-
- public class AppCompatMultiAutoCompleteTextView extends android.widget.MultiAutoCompleteTextView implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundDrawablesView {
- ctor public AppCompatMultiAutoCompleteTextView(android.content.Context);
- ctor public AppCompatMultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet?);
- ctor public AppCompatMultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet?, int);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
- method public boolean isEmojiCompatEnabled();
- method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
- method public void setEmojiCompatEnabled(boolean);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
- method public void setTextAppearance(android.content.Context!, int);
- }
-
- public class AppCompatRadioButton extends android.widget.RadioButton implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundButton androidx.core.widget.TintableCompoundDrawablesView {
- ctor public AppCompatRadioButton(android.content.Context!);
- ctor public AppCompatRadioButton(android.content.Context!, android.util.AttributeSet?);
- ctor public AppCompatRadioButton(android.content.Context!, android.util.AttributeSet?, int);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportButtonTintList();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportButtonTintMode();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
- method public boolean isEmojiCompatEnabled();
- method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
- method public void setEmojiCompatEnabled(boolean);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportButtonTintList(android.content.res.ColorStateList?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportButtonTintMode(android.graphics.PorterDuff.Mode?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
- }
-
- public class AppCompatRatingBar extends android.widget.RatingBar {
- ctor public AppCompatRatingBar(android.content.Context);
- ctor public AppCompatRatingBar(android.content.Context, android.util.AttributeSet?);
- ctor public AppCompatRatingBar(android.content.Context, android.util.AttributeSet?, int);
- }
-
- public class AppCompatSeekBar extends android.widget.SeekBar {
- ctor public AppCompatSeekBar(android.content.Context);
- ctor public AppCompatSeekBar(android.content.Context, android.util.AttributeSet?);
- ctor public AppCompatSeekBar(android.content.Context, android.util.AttributeSet?, int);
- }
-
- public class AppCompatSpinner extends android.widget.Spinner implements androidx.core.view.TintableBackgroundView {
- ctor public AppCompatSpinner(android.content.Context);
- ctor public AppCompatSpinner(android.content.Context, int);
- ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet?);
- ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet?, int);
- ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet?, int, int, android.content.res.Resources.Theme!);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
- method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
- }
-
- public class AppCompatTextView extends android.widget.TextView implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundDrawablesView {
- ctor public AppCompatTextView(android.content.Context);
- ctor public AppCompatTextView(android.content.Context, android.util.AttributeSet?);
- ctor public AppCompatTextView(android.content.Context, android.util.AttributeSet?, int);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
- method public androidx.core.text.PrecomputedTextCompat.Params getTextMetricsParamsCompat();
- method public boolean isEmojiCompatEnabled();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setAutoSizeTextTypeUniformWithConfiguration(int, int, int, int) throws java.lang.IllegalArgumentException;
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setAutoSizeTextTypeUniformWithPresetSizes(int[], int) throws java.lang.IllegalArgumentException;
- method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
- method public void setEmojiCompatEnabled(boolean);
- method public void setPrecomputedText(androidx.core.text.PrecomputedTextCompat);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
- method public void setTextAppearance(android.content.Context!, int);
- method public void setTextFuture(java.util.concurrent.Future<androidx.core.text.PrecomputedTextCompat!>?);
- method public void setTextMetricsParamsCompat(androidx.core.text.PrecomputedTextCompat.Params);
- }
-
- public class AppCompatToggleButton extends android.widget.ToggleButton implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundDrawablesView {
- ctor public AppCompatToggleButton(android.content.Context);
- ctor public AppCompatToggleButton(android.content.Context, android.util.AttributeSet?);
- ctor public AppCompatToggleButton(android.content.Context, android.util.AttributeSet?, int);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
- method public boolean isEmojiCompatEnabled();
- method public void setEmojiCompatEnabled(boolean);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
- }
-
- public interface EmojiCompatConfigurationView {
- method public boolean isEmojiCompatEnabled();
- method public void setEmojiCompatEnabled(boolean);
- }
-
- public class LinearLayoutCompat extends android.view.ViewGroup {
- ctor public LinearLayoutCompat(android.content.Context);
- ctor public LinearLayoutCompat(android.content.Context, android.util.AttributeSet?);
- ctor public LinearLayoutCompat(android.content.Context, android.util.AttributeSet?, int);
- method protected androidx.appcompat.widget.LinearLayoutCompat.LayoutParams! generateDefaultLayoutParams();
- method public androidx.appcompat.widget.LinearLayoutCompat.LayoutParams! generateLayoutParams(android.util.AttributeSet!);
- method protected androidx.appcompat.widget.LinearLayoutCompat.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
- method @androidx.resourceinspection.annotation.Attribute("android:baselineAlignedChildIndex") public int getBaselineAlignedChildIndex();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:divider") public android.graphics.drawable.Drawable! getDividerDrawable();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:dividerPadding") public int getDividerPadding();
- method @GravityInt @androidx.resourceinspection.annotation.Attribute("android:gravity") public int getGravity();
- method @androidx.resourceinspection.annotation.Attribute(value="android:orientation", intMapping={@androidx.resourceinspection.annotation.Attribute.IntMap(name="horizontal", value=0), @androidx.resourceinspection.annotation.Attribute.IntMap(name="vertical", value=1)}) public int getOrientation();
- method @androidx.resourceinspection.annotation.Attribute(value="androidx.appcompat:showDividers", intMapping={@androidx.resourceinspection.annotation.Attribute.IntMap(name="none", value=0), @androidx.resourceinspection.annotation.Attribute.IntMap(name="beginning", value=1, mask=1), @androidx.resourceinspection.annotation.Attribute.IntMap(name="middle", value=2, mask=2), @androidx.resourceinspection.annotation.Attribute.IntMap(name="end", value=4, mask=4)}) public int getShowDividers();
- method @androidx.resourceinspection.annotation.Attribute("android:weightSum") public float getWeightSum();
- method @androidx.resourceinspection.annotation.Attribute("android:baselineAligned") public boolean isBaselineAligned();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:measureWithLargestChild") public boolean isMeasureWithLargestChildEnabled();
- method public void setBaselineAligned(boolean);
- method public void setBaselineAlignedChildIndex(int);
- method public void setDividerDrawable(android.graphics.drawable.Drawable!);
- method public void setDividerPadding(int);
- method public void setGravity(@GravityInt int);
- method public void setHorizontalGravity(int);
- method public void setMeasureWithLargestChildEnabled(boolean);
- method public void setOrientation(int);
- method public void setShowDividers(int);
- method public void setVerticalGravity(int);
- method public void setWeightSum(float);
- field public static final int HORIZONTAL = 0; // 0x0
- field public static final int SHOW_DIVIDER_BEGINNING = 1; // 0x1
- field public static final int SHOW_DIVIDER_END = 4; // 0x4
- field public static final int SHOW_DIVIDER_MIDDLE = 2; // 0x2
- field public static final int SHOW_DIVIDER_NONE = 0; // 0x0
- field public static final int VERTICAL = 1; // 0x1
- }
-
- public static class LinearLayoutCompat.LayoutParams extends android.widget.LinearLayout.LayoutParams {
- ctor public LinearLayoutCompat.LayoutParams(android.content.Context!, android.util.AttributeSet!);
- ctor public LinearLayoutCompat.LayoutParams(int, int);
- ctor public LinearLayoutCompat.LayoutParams(int, int, float);
- ctor public LinearLayoutCompat.LayoutParams(android.view.ViewGroup.LayoutParams!);
- ctor public LinearLayoutCompat.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
- }
-
- public class ListPopupWindow {
- ctor public ListPopupWindow(android.content.Context);
- ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet?);
- ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet?, @AttrRes int);
- ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet?, @AttrRes int, @StyleRes int);
- method public void clearListSelection();
- method public android.view.View.OnTouchListener! createDragToOpenListener(android.view.View!);
- method public void dismiss();
- method public android.view.View? getAnchorView();
- method @StyleRes public int getAnimationStyle();
- method public android.graphics.drawable.Drawable? getBackground();
- method public android.graphics.Rect? getEpicenterBounds();
- method public int getHeight();
- method public int getHorizontalOffset();
- method public int getInputMethodMode();
- method public android.widget.ListView? getListView();
- method public int getPromptPosition();
- method public Object? getSelectedItem();
- method public long getSelectedItemId();
- method public int getSelectedItemPosition();
- method public android.view.View? getSelectedView();
- method public int getSoftInputMode();
- method public int getVerticalOffset();
- method public int getWidth();
- method public boolean isInputMethodNotNeeded();
- method public boolean isModal();
- method public boolean isShowing();
- method public boolean onKeyDown(int, android.view.KeyEvent);
- method public boolean onKeyPreIme(int, android.view.KeyEvent);
- method public boolean onKeyUp(int, android.view.KeyEvent);
- method public boolean performItemClick(int);
- method public void postShow();
- method public void setAdapter(android.widget.ListAdapter?);
- method public void setAnchorView(android.view.View?);
- method public void setAnimationStyle(@StyleRes int);
- method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
- method public void setContentWidth(int);
- method public void setDropDownGravity(int);
- method public void setEpicenterBounds(android.graphics.Rect?);
- method public void setHeight(int);
- method public void setHorizontalOffset(int);
- method public void setInputMethodMode(int);
- method public void setListSelector(android.graphics.drawable.Drawable!);
- method public void setModal(boolean);
- method public void setOnDismissListener(android.widget.PopupWindow.OnDismissListener?);
- method public void setOnItemClickListener(android.widget.AdapterView.OnItemClickListener?);
- method public void setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener?);
- method public void setPromptPosition(int);
- method public void setPromptView(android.view.View?);
- method public void setSelection(int);
- method public void setSoftInputMode(int);
- method public void setVerticalOffset(int);
- method public void setWidth(int);
- method public void setWindowLayoutType(int);
- method public void show();
- field public static final int INPUT_METHOD_FROM_FOCUSABLE = 0; // 0x0
- field public static final int INPUT_METHOD_NEEDED = 1; // 0x1
- field public static final int INPUT_METHOD_NOT_NEEDED = 2; // 0x2
- field public static final int MATCH_PARENT = -1; // 0xffffffff
- field public static final int POSITION_PROMPT_ABOVE = 0; // 0x0
- field public static final int POSITION_PROMPT_BELOW = 1; // 0x1
- field public static final int WRAP_CONTENT = -2; // 0xfffffffe
- }
-
- public class PopupMenu {
- ctor public PopupMenu(android.content.Context, android.view.View);
- ctor public PopupMenu(android.content.Context, android.view.View, int);
- ctor public PopupMenu(android.content.Context, android.view.View, int, @AttrRes int, @StyleRes int);
- method public void dismiss();
- method public android.view.View.OnTouchListener getDragToOpenListener();
- method public int getGravity();
- method public android.view.Menu getMenu();
- method public android.view.MenuInflater getMenuInflater();
- method public void inflate(@MenuRes int);
- method public void setForceShowIcon(boolean);
- method public void setGravity(int);
- method public void setOnDismissListener(androidx.appcompat.widget.PopupMenu.OnDismissListener?);
- method public void setOnMenuItemClickListener(androidx.appcompat.widget.PopupMenu.OnMenuItemClickListener?);
- method public void show();
- }
-
- public static interface PopupMenu.OnDismissListener {
- method public void onDismiss(androidx.appcompat.widget.PopupMenu!);
- }
-
- public static interface PopupMenu.OnMenuItemClickListener {
- method public boolean onMenuItemClick(android.view.MenuItem!);
- }
-
- public class SearchView extends androidx.appcompat.widget.LinearLayoutCompat implements androidx.appcompat.view.CollapsibleActionView {
- ctor public SearchView(android.content.Context);
- ctor public SearchView(android.content.Context, android.util.AttributeSet?);
- ctor public SearchView(android.content.Context, android.util.AttributeSet?, int);
- method @androidx.resourceinspection.annotation.Attribute("android:imeOptions") public int getImeOptions();
- method public int getInputType();
- method @androidx.resourceinspection.annotation.Attribute("android:maxWidth") public int getMaxWidth();
- method public CharSequence! getQuery();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:queryHint") public CharSequence? getQueryHint();
- method public androidx.cursoradapter.widget.CursorAdapter! getSuggestionsAdapter();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:iconifiedByDefault") public boolean isIconfiedByDefault();
- method public boolean isIconified();
- method public boolean isQueryRefinementEnabled();
- method public boolean isSubmitButtonEnabled();
- method public void onActionViewCollapsed();
- method public void onActionViewExpanded();
- method protected void onQueryRefine(CharSequence?);
- method public void setIconified(boolean);
- method public void setIconifiedByDefault(boolean);
- method public void setImeOptions(int);
- method public void setInputType(int);
- method public void setMaxWidth(int);
- method public void setOnCloseListener(androidx.appcompat.widget.SearchView.OnCloseListener!);
- method public void setOnQueryTextFocusChangeListener(android.view.View.OnFocusChangeListener!);
- method public void setOnQueryTextListener(androidx.appcompat.widget.SearchView.OnQueryTextListener!);
- method public void setOnSearchClickListener(android.view.View.OnClickListener!);
- method public void setOnSuggestionListener(androidx.appcompat.widget.SearchView.OnSuggestionListener!);
- method public void setQuery(CharSequence!, boolean);
- method public void setQueryHint(CharSequence?);
- method public void setQueryRefinementEnabled(boolean);
- method public void setSearchableInfo(android.app.SearchableInfo!);
- method public void setSubmitButtonEnabled(boolean);
- method public void setSuggestionsAdapter(androidx.cursoradapter.widget.CursorAdapter!);
- }
-
- public static interface SearchView.OnCloseListener {
- method public boolean onClose();
- }
-
- public static interface SearchView.OnQueryTextListener {
- method public boolean onQueryTextChange(String!);
- method public boolean onQueryTextSubmit(String!);
- }
-
- public static interface SearchView.OnSuggestionListener {
- method public boolean onSuggestionClick(int);
- method public boolean onSuggestionSelect(int);
- }
-
- public class ShareActionProvider extends androidx.core.view.ActionProvider {
- ctor public ShareActionProvider(android.content.Context!);
- method public android.view.View! onCreateActionView();
- method public void setOnShareTargetSelectedListener(androidx.appcompat.widget.ShareActionProvider.OnShareTargetSelectedListener!);
- method public void setShareHistoryFileName(String!);
- method public void setShareIntent(android.content.Intent!);
- field public static final String DEFAULT_SHARE_HISTORY_FILE_NAME = "share_history.xml";
- }
-
- public static interface ShareActionProvider.OnShareTargetSelectedListener {
- method public boolean onShareTargetSelected(androidx.appcompat.widget.ShareActionProvider!, android.content.Intent!);
- }
-
- public class SwitchCompat extends android.widget.CompoundButton implements androidx.appcompat.widget.EmojiCompatConfigurationView {
- ctor public SwitchCompat(android.content.Context);
- ctor public SwitchCompat(android.content.Context, android.util.AttributeSet?);
- ctor public SwitchCompat(android.content.Context, android.util.AttributeSet?, int);
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:showText") public boolean getShowText();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:splitTrack") public boolean getSplitTrack();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:switchMinWidth") public int getSwitchMinWidth();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:switchPadding") public int getSwitchPadding();
- method @androidx.resourceinspection.annotation.Attribute("android:textOff") public CharSequence! getTextOff();
- method @androidx.resourceinspection.annotation.Attribute("android:textOn") public CharSequence! getTextOn();
- method @androidx.resourceinspection.annotation.Attribute("android:thumb") public android.graphics.drawable.Drawable! getThumbDrawable();
- method @FloatRange(from=0.0, to=1.0) protected final float getThumbPosition();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:thumbTextPadding") public int getThumbTextPadding();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:thumbTint") public android.content.res.ColorStateList? getThumbTintList();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:thumbTintMode") public android.graphics.PorterDuff.Mode? getThumbTintMode();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:track") public android.graphics.drawable.Drawable! getTrackDrawable();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:trackTint") public android.content.res.ColorStateList? getTrackTintList();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:trackTintMode") public android.graphics.PorterDuff.Mode? getTrackTintMode();
- method public boolean isEmojiCompatEnabled();
- method public void onMeasure(int, int);
- method public void setEmojiCompatEnabled(boolean);
- method protected final void setEnforceSwitchWidth(boolean);
- method public void setShowText(boolean);
- method public void setSplitTrack(boolean);
- method public void setSwitchMinWidth(int);
- method public void setSwitchPadding(int);
- method public void setSwitchTextAppearance(android.content.Context!, int);
- method public void setSwitchTypeface(android.graphics.Typeface!, int);
- method public void setSwitchTypeface(android.graphics.Typeface!);
- method public void setTextOff(CharSequence!);
- method public void setTextOn(CharSequence!);
- method public void setThumbDrawable(android.graphics.drawable.Drawable!);
- method public void setThumbResource(int);
- method public void setThumbTextPadding(int);
- method public void setThumbTintList(android.content.res.ColorStateList?);
- method public void setThumbTintMode(android.graphics.PorterDuff.Mode?);
- method public void setTrackDrawable(android.graphics.drawable.Drawable!);
- method public void setTrackResource(int);
- method public void setTrackTintList(android.content.res.ColorStateList?);
- method public void setTrackTintMode(android.graphics.PorterDuff.Mode?);
- }
-
- public interface ThemedSpinnerAdapter extends android.widget.SpinnerAdapter {
- method public android.content.res.Resources.Theme? getDropDownViewTheme();
- method public void setDropDownViewTheme(android.content.res.Resources.Theme?);
- }
-
- public static final class ThemedSpinnerAdapter.Helper {
- ctor public ThemedSpinnerAdapter.Helper(android.content.Context);
- method public android.view.LayoutInflater getDropDownViewInflater();
- method public android.content.res.Resources.Theme? getDropDownViewTheme();
- method public void setDropDownViewTheme(android.content.res.Resources.Theme?);
- }
-
- public class Toolbar extends android.view.ViewGroup implements androidx.core.view.MenuHost {
- ctor public Toolbar(android.content.Context);
- ctor public Toolbar(android.content.Context, android.util.AttributeSet?);
- ctor public Toolbar(android.content.Context, android.util.AttributeSet?, int);
- method @MainThread public void addMenuProvider(androidx.core.view.MenuProvider);
- method @MainThread public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner);
- method @MainThread public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State);
- method public void collapseActionView();
- method public void dismissPopupMenus();
- method protected androidx.appcompat.widget.Toolbar.LayoutParams! generateDefaultLayoutParams();
- method public androidx.appcompat.widget.Toolbar.LayoutParams! generateLayoutParams(android.util.AttributeSet!);
- method protected androidx.appcompat.widget.Toolbar.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:collapseContentDescription") public CharSequence? getCollapseContentDescription();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:collapseIcon") public android.graphics.drawable.Drawable? getCollapseIcon();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:contentInsetEnd") public int getContentInsetEnd();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:contentInsetEndWithActions") public int getContentInsetEndWithActions();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:contentInsetLeft") public int getContentInsetLeft();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:contentInsetRight") public int getContentInsetRight();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:contentInsetStart") public int getContentInsetStart();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:contentInsetStartWithNavigation") public int getContentInsetStartWithNavigation();
- method public int getCurrentContentInsetEnd();
- method public int getCurrentContentInsetLeft();
- method public int getCurrentContentInsetRight();
- method public int getCurrentContentInsetStart();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:logo") public android.graphics.drawable.Drawable! getLogo();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:logoDescription") public CharSequence! getLogoDescription();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:menu") public android.view.Menu! getMenu();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:navigationContentDescription") public CharSequence? getNavigationContentDescription();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:navigationIcon") public android.graphics.drawable.Drawable? getNavigationIcon();
- method public android.graphics.drawable.Drawable? getOverflowIcon();
- method @StyleRes @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:popupTheme") public int getPopupTheme();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:subtitle") public CharSequence! getSubtitle();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:title") public CharSequence! getTitle();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:titleMarginBottom") public int getTitleMarginBottom();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:titleMarginEnd") public int getTitleMarginEnd();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:titleMarginStart") public int getTitleMarginStart();
- method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:titleMarginTop") public int getTitleMarginTop();
- method public boolean hasExpandedActionView();
- method public boolean hideOverflowMenu();
- method public void inflateMenu(@MenuRes int);
- method @MainThread public void invalidateMenu();
- method public boolean isBackInvokedCallbackEnabled();
- method public boolean isOverflowMenuShowing();
- method @MainThread public void removeMenuProvider(androidx.core.view.MenuProvider);
- method public void setBackInvokedCallbackEnabled(boolean);
- method public void setCollapseContentDescription(@StringRes int);
- method public void setCollapseContentDescription(CharSequence?);
- method public void setCollapseIcon(@DrawableRes int);
- method public void setCollapseIcon(android.graphics.drawable.Drawable?);
- method public void setContentInsetEndWithActions(int);
- method public void setContentInsetStartWithNavigation(int);
- method public void setContentInsetsAbsolute(int, int);
- method public void setContentInsetsRelative(int, int);
- method public void setLogo(@DrawableRes int);
- method public void setLogo(android.graphics.drawable.Drawable!);
- method public void setLogoDescription(@StringRes int);
- method public void setLogoDescription(CharSequence!);
- method public void setNavigationContentDescription(@StringRes int);
- method public void setNavigationContentDescription(CharSequence?);
- method public void setNavigationIcon(@DrawableRes int);
- method public void setNavigationIcon(android.graphics.drawable.Drawable?);
- method public void setNavigationOnClickListener(android.view.View.OnClickListener!);
- method public void setOnMenuItemClickListener(androidx.appcompat.widget.Toolbar.OnMenuItemClickListener!);
- method public void setOverflowIcon(android.graphics.drawable.Drawable?);
- method public void setPopupTheme(@StyleRes int);
- method public void setSubtitle(@StringRes int);
- method public void setSubtitle(CharSequence!);
- method public void setSubtitleTextAppearance(android.content.Context!, @StyleRes int);
- method public void setSubtitleTextColor(@ColorInt int);
- method public void setSubtitleTextColor(android.content.res.ColorStateList);
- method public void setTitle(@StringRes int);
- method public void setTitle(CharSequence!);
- method public void setTitleMargin(int, int, int, int);
- method public void setTitleMarginBottom(int);
- method public void setTitleMarginEnd(int);
- method public void setTitleMarginStart(int);
- method public void setTitleMarginTop(int);
- method public void setTitleTextAppearance(android.content.Context!, @StyleRes int);
- method public void setTitleTextColor(@ColorInt int);
- method public void setTitleTextColor(android.content.res.ColorStateList);
- method public boolean showOverflowMenu();
- }
-
- public static class Toolbar.LayoutParams extends androidx.appcompat.app.ActionBar.LayoutParams {
- ctor public Toolbar.LayoutParams(android.content.Context, android.util.AttributeSet!);
- ctor public Toolbar.LayoutParams(int, int);
- ctor public Toolbar.LayoutParams(int, int, int);
- ctor public Toolbar.LayoutParams(int);
- ctor public Toolbar.LayoutParams(androidx.appcompat.widget.Toolbar.LayoutParams!);
- ctor public Toolbar.LayoutParams(androidx.appcompat.app.ActionBar.LayoutParams!);
- ctor public Toolbar.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
- ctor public Toolbar.LayoutParams(android.view.ViewGroup.LayoutParams!);
- }
-
- public static interface Toolbar.OnMenuItemClickListener {
- method public boolean onMenuItemClick(android.view.MenuItem!);
- }
-
- public static class Toolbar.SavedState extends androidx.customview.view.AbsSavedState {
- ctor public Toolbar.SavedState(android.os.Parcel!);
- ctor public Toolbar.SavedState(android.os.Parcel!, ClassLoader!);
- ctor public Toolbar.SavedState(android.os.Parcelable!);
- field public static final android.os.Parcelable.Creator<androidx.appcompat.widget.Toolbar.SavedState!>! CREATOR;
- }
-
- public class TooltipCompat {
- method public static void setTooltipText(android.view.View, CharSequence?);
- }
-
-}
-
diff --git a/appcompat/appcompat/api/restricted_current.txt b/appcompat/appcompat/api/restricted_current.txt
index f278271..a2375a5 100644
--- a/appcompat/appcompat/api/restricted_current.txt
+++ b/appcompat/appcompat/api/restricted_current.txt
@@ -55,25 +55,25 @@
method public void setElevation(float);
method public void setHideOffset(int);
method public void setHideOnContentScrollEnabled(boolean);
- method public void setHomeActionContentDescription(CharSequence?);
method public void setHomeActionContentDescription(@StringRes int);
+ method public void setHomeActionContentDescription(CharSequence?);
method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable?);
method public void setHomeAsUpIndicator(@DrawableRes int);
method public void setHomeButtonEnabled(boolean);
- method public abstract void setIcon(@DrawableRes int);
method public abstract void setIcon(android.graphics.drawable.Drawable!);
+ method public abstract void setIcon(@DrawableRes int);
method @Deprecated public abstract void setListNavigationCallbacks(android.widget.SpinnerAdapter!, androidx.appcompat.app.ActionBar.OnNavigationListener!);
- method public abstract void setLogo(@DrawableRes int);
method public abstract void setLogo(android.graphics.drawable.Drawable!);
+ method public abstract void setLogo(@DrawableRes int);
method @Deprecated public abstract void setNavigationMode(@androidx.appcompat.app.ActionBar.NavigationMode int);
method @Deprecated public abstract void setSelectedNavigationItem(int);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setShowHideAnimationEnabled(boolean);
method public void setSplitBackgroundDrawable(android.graphics.drawable.Drawable!);
method public void setStackedBackgroundDrawable(android.graphics.drawable.Drawable!);
- method public abstract void setSubtitle(CharSequence!);
method public abstract void setSubtitle(int);
- method public abstract void setTitle(CharSequence!);
+ method public abstract void setSubtitle(CharSequence!);
method public abstract void setTitle(@StringRes int);
+ method public abstract void setTitle(CharSequence!);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setWindowTitle(CharSequence!);
method public abstract void show();
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.appcompat.view.ActionMode! startActionMode(androidx.appcompat.view.ActionMode.Callback!);
@@ -92,11 +92,11 @@
public static class ActionBar.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
ctor public ActionBar.LayoutParams(android.content.Context, android.util.AttributeSet!);
+ ctor public ActionBar.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ ctor public ActionBar.LayoutParams(androidx.appcompat.app.ActionBar.LayoutParams!);
+ ctor public ActionBar.LayoutParams(int);
ctor public ActionBar.LayoutParams(int, int);
ctor public ActionBar.LayoutParams(int, int, int);
- ctor public ActionBar.LayoutParams(int);
- ctor public ActionBar.LayoutParams(androidx.appcompat.app.ActionBar.LayoutParams!);
- ctor public ActionBar.LayoutParams(android.view.ViewGroup.LayoutParams!);
field public int gravity;
}
@@ -128,8 +128,8 @@
method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setIcon(@DrawableRes int);
method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setTabListener(androidx.appcompat.app.ActionBar.TabListener!);
method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setTag(Object!);
- method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setText(CharSequence!);
method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setText(int);
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setText(CharSequence!);
field @Deprecated public static final int INVALID_POSITION = -1; // 0xffffffff
}
@@ -140,8 +140,8 @@
}
public class ActionBarDrawerToggle implements androidx.drawerlayout.widget.DrawerLayout.DrawerListener {
- ctor public ActionBarDrawerToggle(android.app.Activity!, androidx.drawerlayout.widget.DrawerLayout!, @StringRes int, @StringRes int);
ctor public ActionBarDrawerToggle(android.app.Activity!, androidx.drawerlayout.widget.DrawerLayout!, androidx.appcompat.widget.Toolbar!, @StringRes int, @StringRes int);
+ ctor public ActionBarDrawerToggle(android.app.Activity!, androidx.drawerlayout.widget.DrawerLayout!, @StringRes int, @StringRes int);
method public androidx.appcompat.graphics.drawable.DrawerArrowDrawable getDrawerArrowDrawable();
method public android.view.View.OnClickListener! getToolbarNavigationClickListener();
method public boolean isDrawerIndicatorEnabled();
@@ -175,16 +175,16 @@
public class AlertDialog extends androidx.appcompat.app.AppCompatDialog implements android.content.DialogInterface {
ctor protected AlertDialog(android.content.Context);
- ctor protected AlertDialog(android.content.Context, @StyleRes int);
ctor protected AlertDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener?);
+ ctor protected AlertDialog(android.content.Context, @StyleRes int);
method public android.widget.Button! getButton(int);
method public android.widget.ListView! getListView();
- method public void setButton(int, CharSequence!, android.os.Message!);
method public void setButton(int, CharSequence!, android.content.DialogInterface.OnClickListener!);
method public void setButton(int, CharSequence!, android.graphics.drawable.Drawable!, android.content.DialogInterface.OnClickListener!);
+ method public void setButton(int, CharSequence!, android.os.Message!);
method public void setCustomTitle(android.view.View!);
- method public void setIcon(int);
method public void setIcon(android.graphics.drawable.Drawable!);
+ method public void setIcon(int);
method public void setIconAttribute(int);
method public void setMessage(CharSequence!);
method public void setView(android.view.View!);
@@ -200,17 +200,17 @@
method public androidx.appcompat.app.AlertDialog.Builder! setCancelable(boolean);
method public androidx.appcompat.app.AlertDialog.Builder! setCursor(android.database.Cursor!, android.content.DialogInterface.OnClickListener!, String!);
method public androidx.appcompat.app.AlertDialog.Builder! setCustomTitle(android.view.View?);
- method public androidx.appcompat.app.AlertDialog.Builder! setIcon(@DrawableRes int);
method public androidx.appcompat.app.AlertDialog.Builder! setIcon(android.graphics.drawable.Drawable?);
+ method public androidx.appcompat.app.AlertDialog.Builder! setIcon(@DrawableRes int);
method public androidx.appcompat.app.AlertDialog.Builder! setIconAttribute(@AttrRes int);
method @Deprecated public androidx.appcompat.app.AlertDialog.Builder! setInverseBackgroundForced(boolean);
method public androidx.appcompat.app.AlertDialog.Builder! setItems(@ArrayRes int, android.content.DialogInterface.OnClickListener!);
method public androidx.appcompat.app.AlertDialog.Builder! setItems(CharSequence![]!, android.content.DialogInterface.OnClickListener!);
method public androidx.appcompat.app.AlertDialog.Builder! setMessage(@StringRes int);
method public androidx.appcompat.app.AlertDialog.Builder! setMessage(CharSequence?);
+ method public androidx.appcompat.app.AlertDialog.Builder! setMultiChoiceItems(android.database.Cursor!, String!, String!, android.content.DialogInterface.OnMultiChoiceClickListener!);
method public androidx.appcompat.app.AlertDialog.Builder! setMultiChoiceItems(@ArrayRes int, boolean[]!, android.content.DialogInterface.OnMultiChoiceClickListener!);
method public androidx.appcompat.app.AlertDialog.Builder! setMultiChoiceItems(CharSequence![]!, boolean[]!, android.content.DialogInterface.OnMultiChoiceClickListener!);
- method public androidx.appcompat.app.AlertDialog.Builder! setMultiChoiceItems(android.database.Cursor!, String!, String!, android.content.DialogInterface.OnMultiChoiceClickListener!);
method public androidx.appcompat.app.AlertDialog.Builder! setNegativeButton(@StringRes int, android.content.DialogInterface.OnClickListener!);
method public androidx.appcompat.app.AlertDialog.Builder! setNegativeButton(CharSequence!, android.content.DialogInterface.OnClickListener!);
method public androidx.appcompat.app.AlertDialog.Builder! setNegativeButtonIcon(android.graphics.drawable.Drawable!);
@@ -225,15 +225,15 @@
method public androidx.appcompat.app.AlertDialog.Builder! setPositiveButton(CharSequence!, android.content.DialogInterface.OnClickListener!);
method public androidx.appcompat.app.AlertDialog.Builder! setPositiveButtonIcon(android.graphics.drawable.Drawable!);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.appcompat.app.AlertDialog.Builder! setRecycleOnMeasureEnabled(boolean);
- method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(@ArrayRes int, int, android.content.DialogInterface.OnClickListener!);
method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(android.database.Cursor!, int, String!, android.content.DialogInterface.OnClickListener!);
- method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(CharSequence![]!, int, android.content.DialogInterface.OnClickListener!);
method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(android.widget.ListAdapter!, int, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(@ArrayRes int, int, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(CharSequence![]!, int, android.content.DialogInterface.OnClickListener!);
method public androidx.appcompat.app.AlertDialog.Builder! setTitle(@StringRes int);
method public androidx.appcompat.app.AlertDialog.Builder! setTitle(CharSequence?);
- method public androidx.appcompat.app.AlertDialog.Builder! setView(int);
method public androidx.appcompat.app.AlertDialog.Builder! setView(android.view.View!);
method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.appcompat.app.AlertDialog.Builder! setView(android.view.View!, int, int, int, int);
+ method public androidx.appcompat.app.AlertDialog.Builder! setView(int);
method public androidx.appcompat.app.AlertDialog! show();
}
@@ -279,8 +279,8 @@
method @CallSuper public android.content.Context attachBaseContext2(android.content.Context);
method public static androidx.appcompat.app.AppCompatDelegate create(android.app.Activity, androidx.appcompat.app.AppCompatCallback?);
method public static androidx.appcompat.app.AppCompatDelegate create(android.app.Dialog, androidx.appcompat.app.AppCompatCallback?);
- method public static androidx.appcompat.app.AppCompatDelegate create(android.content.Context, android.view.Window, androidx.appcompat.app.AppCompatCallback?);
method public static androidx.appcompat.app.AppCompatDelegate create(android.content.Context, android.app.Activity, androidx.appcompat.app.AppCompatCallback?);
+ method public static androidx.appcompat.app.AppCompatDelegate create(android.content.Context, android.view.Window, androidx.appcompat.app.AppCompatCallback?);
method public abstract android.view.View! createView(android.view.View?, String!, android.content.Context, android.util.AttributeSet);
method public abstract <T extends android.view.View> T! findViewById(@IdRes int);
method @AnyThread public static androidx.core.os.LocaleListCompat getApplicationLocales();
@@ -307,8 +307,8 @@
method public static void setApplicationLocales(androidx.core.os.LocaleListCompat);
method public static void setCompatVectorFromResourcesEnabled(boolean);
method public abstract void setContentView(android.view.View!);
- method public abstract void setContentView(@LayoutRes int);
method public abstract void setContentView(android.view.View!, android.view.ViewGroup.LayoutParams!);
+ method public abstract void setContentView(@LayoutRes int);
method public static void setDefaultNightMode(@androidx.appcompat.app.AppCompatDelegate.NightMode int);
method public abstract void setHandleNativeActionModesEnabled(boolean);
method @RequiresApi(17) public abstract void setLocalNightMode(@androidx.appcompat.app.AppCompatDelegate.NightMode int);
@@ -334,8 +334,8 @@
public class AppCompatDialog extends androidx.activity.ComponentDialog implements androidx.appcompat.app.AppCompatCallback {
ctor public AppCompatDialog(android.content.Context);
- ctor public AppCompatDialog(android.content.Context, int);
ctor protected AppCompatDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener?);
+ ctor public AppCompatDialog(android.content.Context, int);
method public androidx.appcompat.app.AppCompatDelegate getDelegate();
method public androidx.appcompat.app.ActionBar! getSupportActionBar();
method public void onSupportActionModeFinished(androidx.appcompat.view.ActionMode!);
@@ -365,8 +365,8 @@
method protected androidx.appcompat.widget.AppCompatSpinner createSpinner(android.content.Context!, android.util.AttributeSet!);
method protected androidx.appcompat.widget.AppCompatTextView createTextView(android.content.Context!, android.util.AttributeSet!);
method protected androidx.appcompat.widget.AppCompatToggleButton createToggleButton(android.content.Context!, android.util.AttributeSet!);
- method public final android.view.View? createView(android.view.View?, String, android.content.Context, android.util.AttributeSet, boolean, boolean, boolean, boolean);
method protected android.view.View? createView(android.content.Context!, String!, android.util.AttributeSet!);
+ method public final android.view.View? createView(android.view.View?, String, android.content.Context, android.util.AttributeSet, boolean, boolean, boolean, boolean);
}
public final class AppLocalesMetadataHolderService extends android.app.Service {
@@ -381,8 +381,8 @@
ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public WindowDecorActionBar(android.view.View!);
method public void addOnMenuVisibilityListener(androidx.appcompat.app.ActionBar.OnMenuVisibilityListener!);
method public void addTab(androidx.appcompat.app.ActionBar.Tab!);
- method public void addTab(androidx.appcompat.app.ActionBar.Tab!, int);
method public void addTab(androidx.appcompat.app.ActionBar.Tab!, boolean);
+ method public void addTab(androidx.appcompat.app.ActionBar.Tab!, int);
method public void addTab(androidx.appcompat.app.ActionBar.Tab!, int, boolean);
method public void animateToMode(boolean);
method public void doHide(boolean);
@@ -415,9 +415,9 @@
method public boolean requestFocus();
method public void selectTab(androidx.appcompat.app.ActionBar.Tab!);
method public void setBackgroundDrawable(android.graphics.drawable.Drawable!);
- method public void setCustomView(int);
method public void setCustomView(android.view.View!);
method public void setCustomView(android.view.View!, androidx.appcompat.app.ActionBar.LayoutParams!);
+ method public void setCustomView(int);
method public void setDisplayHomeAsUpEnabled(boolean);
method public void setDisplayOptions(int);
method public void setDisplayOptions(int, int);
@@ -425,11 +425,11 @@
method public void setDisplayShowHomeEnabled(boolean);
method public void setDisplayShowTitleEnabled(boolean);
method public void setDisplayUseLogoEnabled(boolean);
- method public void setIcon(int);
method public void setIcon(android.graphics.drawable.Drawable!);
+ method public void setIcon(int);
method public void setListNavigationCallbacks(android.widget.SpinnerAdapter!, androidx.appcompat.app.ActionBar.OnNavigationListener!);
- method public void setLogo(int);
method public void setLogo(android.graphics.drawable.Drawable!);
+ method public void setLogo(int);
method public void setNavigationMode(int);
method public void setSelectedNavigationItem(int);
method public void setSubtitle(int);
@@ -456,10 +456,10 @@
method public void onMenuModeChange(androidx.appcompat.view.menu.MenuBuilder);
method public boolean onSubMenuSelected(androidx.appcompat.view.menu.SubMenuBuilder!);
method public void setCustomView(android.view.View!);
- method public void setSubtitle(CharSequence!);
method public void setSubtitle(int);
- method public void setTitle(CharSequence!);
+ method public void setSubtitle(CharSequence!);
method public void setTitle(int);
+ method public void setTitle(CharSequence!);
}
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class WindowDecorActionBar.TabImpl extends androidx.appcompat.app.ActionBar.Tab {
@@ -481,8 +481,8 @@
method public void setPosition(int);
method public androidx.appcompat.app.ActionBar.Tab! setTabListener(androidx.appcompat.app.ActionBar.TabListener!);
method public androidx.appcompat.app.ActionBar.Tab! setTag(Object!);
- method public androidx.appcompat.app.ActionBar.Tab! setText(CharSequence!);
method public androidx.appcompat.app.ActionBar.Tab! setText(int);
+ method public androidx.appcompat.app.ActionBar.Tab! setText(CharSequence!);
}
}
@@ -563,11 +563,11 @@
method public boolean isTitleOptional();
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean isUiFocusable();
method public abstract void setCustomView(android.view.View!);
- method public abstract void setSubtitle(CharSequence!);
method public abstract void setSubtitle(int);
+ method public abstract void setSubtitle(CharSequence!);
method public void setTag(Object!);
- method public abstract void setTitle(CharSequence!);
method public abstract void setTitle(int);
+ method public abstract void setTitle(CharSequence!);
method public void setTitleOptionalHint(boolean);
}
@@ -585,8 +585,8 @@
public class ContextThemeWrapper extends android.content.ContextWrapper {
ctor public ContextThemeWrapper();
- ctor public ContextThemeWrapper(android.content.Context!, @StyleRes int);
ctor public ContextThemeWrapper(android.content.Context!, android.content.res.Resources.Theme!);
+ ctor public ContextThemeWrapper(android.content.Context!, @StyleRes int);
method public void applyOverrideConfiguration(android.content.res.Configuration!);
method public int getThemeResId();
method protected void onApplyThemeResource(android.content.res.Resources.Theme!, int, boolean);
@@ -607,10 +607,10 @@
method public void onMenuModeChange(androidx.appcompat.view.menu.MenuBuilder);
method public boolean onSubMenuSelected(androidx.appcompat.view.menu.SubMenuBuilder!);
method public void setCustomView(android.view.View!);
- method public void setSubtitle(CharSequence!);
method public void setSubtitle(int);
- method public void setTitle(CharSequence!);
+ method public void setSubtitle(CharSequence!);
method public void setTitle(int);
+ method public void setTitle(CharSequence!);
}
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class SupportActionModeWrapper extends android.view.ActionMode {
@@ -623,10 +623,10 @@
method public CharSequence! getTitle();
method public void invalidate();
method public void setCustomView(android.view.View!);
- method public void setSubtitle(CharSequence!);
method public void setSubtitle(int);
- method public void setTitle(CharSequence!);
+ method public void setSubtitle(CharSequence!);
method public void setTitle(int);
+ method public void setTitle(CharSequence!);
}
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static class SupportActionModeWrapper.CallbackWrapper implements androidx.appcompat.view.ActionMode.Callback {
@@ -673,8 +673,8 @@
method public boolean onMenuOpened(int, android.view.Menu!);
method public void onPanelClosed(int, android.view.Menu!);
method public boolean onPreparePanel(int, android.view.View!, android.view.Menu!);
- method @RequiresApi(23) public boolean onSearchRequested(android.view.SearchEvent!);
method public boolean onSearchRequested();
+ method @RequiresApi(23) public boolean onSearchRequested(android.view.SearchEvent!);
method public void onWindowAttributesChanged(android.view.WindowManager.LayoutParams!);
method public void onWindowFocusChanged(boolean);
method public android.view.ActionMode! onWindowStartingActionMode(android.view.ActionMode.Callback!);
@@ -731,8 +731,8 @@
method public void setShowAsAction(int);
method public androidx.core.internal.view.SupportMenuItem setShowAsActionFlags(int);
method public androidx.core.internal.view.SupportMenuItem setSupportActionProvider(androidx.core.view.ActionProvider!);
- method public android.view.MenuItem! setTitle(CharSequence!);
method public android.view.MenuItem! setTitle(int);
+ method public android.view.MenuItem! setTitle(CharSequence!);
method public android.view.MenuItem! setTitleCondensed(CharSequence!);
method public androidx.core.internal.view.SupportMenuItem setTooltipText(CharSequence!);
method public android.view.MenuItem! setVisible(boolean);
@@ -857,24 +857,24 @@
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class MenuBuilder implements androidx.core.internal.view.SupportMenu {
ctor public MenuBuilder(android.content.Context!);
- method public android.view.MenuItem! add(CharSequence!);
method public android.view.MenuItem! add(int);
- method public android.view.MenuItem! add(int, int, int, CharSequence!);
method public android.view.MenuItem! add(int, int, int, int);
+ method public android.view.MenuItem! add(int, int, int, CharSequence!);
+ method public android.view.MenuItem! add(CharSequence!);
method public int addIntentOptions(int, int, int, android.content.ComponentName!, android.content.Intent![]!, android.content.Intent!, int, android.view.MenuItem![]!);
method protected android.view.MenuItem! addInternal(int, int, int, CharSequence!);
method public void addMenuPresenter(androidx.appcompat.view.menu.MenuPresenter!);
method public void addMenuPresenter(androidx.appcompat.view.menu.MenuPresenter!, android.content.Context!);
- method public android.view.SubMenu! addSubMenu(CharSequence!);
method public android.view.SubMenu! addSubMenu(int);
- method public android.view.SubMenu! addSubMenu(int, int, int, CharSequence!);
method public android.view.SubMenu! addSubMenu(int, int, int, int);
+ method public android.view.SubMenu! addSubMenu(int, int, int, CharSequence!);
+ method public android.view.SubMenu! addSubMenu(CharSequence!);
method public void changeMenuMode();
method public void clear();
method public void clearAll();
method public void clearHeader();
- method public final void close(boolean);
method public void close();
+ method public final void close(boolean);
method public boolean collapseItemActionView(androidx.appcompat.view.menu.MenuItemImpl!);
method public boolean expandItemActionView(androidx.appcompat.view.menu.MenuItemImpl!);
method public int findGroupIndex(int);
@@ -900,8 +900,8 @@
method public boolean isShortcutsVisible();
method public void onItemsChanged(boolean);
method public boolean performIdentifierAction(int, int);
- method public boolean performItemAction(android.view.MenuItem!, int);
method public boolean performItemAction(android.view.MenuItem!, androidx.appcompat.view.menu.MenuPresenter!, int);
+ method public boolean performItemAction(android.view.MenuItem!, int);
method public boolean performShortcut(int, android.view.KeyEvent!, int);
method public void removeGroup(int);
method public void removeItem(int);
@@ -919,8 +919,8 @@
method public void setGroupVisible(int, boolean);
method protected androidx.appcompat.view.menu.MenuBuilder! setHeaderIconInt(android.graphics.drawable.Drawable!);
method protected androidx.appcompat.view.menu.MenuBuilder! setHeaderIconInt(int);
- method protected androidx.appcompat.view.menu.MenuBuilder! setHeaderTitleInt(CharSequence!);
method protected androidx.appcompat.view.menu.MenuBuilder! setHeaderTitleInt(int);
+ method protected androidx.appcompat.view.menu.MenuBuilder! setHeaderTitleInt(CharSequence!);
method protected androidx.appcompat.view.menu.MenuBuilder! setHeaderViewInt(android.view.View!);
method public void setOptionalIconsVisible(boolean);
method public void setOverrideVisibleItems(boolean);
@@ -995,8 +995,8 @@
method public androidx.core.internal.view.SupportMenuItem setShowAsActionFlags(int);
method public void setSubMenu(androidx.appcompat.view.menu.SubMenuBuilder!);
method public androidx.core.internal.view.SupportMenuItem setSupportActionProvider(androidx.core.view.ActionProvider!);
- method public android.view.MenuItem! setTitle(CharSequence!);
method public android.view.MenuItem! setTitle(int);
+ method public android.view.MenuItem! setTitle(CharSequence!);
method public android.view.MenuItem! setTitleCondensed(CharSequence!);
method public androidx.core.internal.view.SupportMenuItem setTooltipText(CharSequence!);
method public android.view.MenuItem! setVisible(boolean);
@@ -1044,8 +1044,8 @@
method public android.view.MenuItem! setShortcut(char, char);
method public void setShowAsAction(int);
method public android.view.MenuItem! setShowAsActionFlags(int);
- method public android.view.MenuItem! setTitle(CharSequence!);
method public android.view.MenuItem! setTitle(int);
+ method public android.view.MenuItem! setTitle(CharSequence!);
method public android.view.MenuItem! setTitleCondensed(CharSequence!);
method public android.view.MenuItem! setVisible(boolean);
}
@@ -1111,15 +1111,15 @@
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class MenuWrapperICS implements android.view.Menu {
ctor public MenuWrapperICS(android.content.Context!, androidx.core.internal.view.SupportMenu!);
- method public android.view.MenuItem! add(CharSequence!);
method public android.view.MenuItem! add(int);
- method public android.view.MenuItem! add(int, int, int, CharSequence!);
method public android.view.MenuItem! add(int, int, int, int);
+ method public android.view.MenuItem! add(int, int, int, CharSequence!);
+ method public android.view.MenuItem! add(CharSequence!);
method public int addIntentOptions(int, int, int, android.content.ComponentName!, android.content.Intent![]!, android.content.Intent!, int, android.view.MenuItem![]!);
- method public android.view.SubMenu! addSubMenu(CharSequence!);
method public android.view.SubMenu! addSubMenu(int);
- method public android.view.SubMenu! addSubMenu(int, int, int, CharSequence!);
method public android.view.SubMenu! addSubMenu(int, int, int, int);
+ method public android.view.SubMenu! addSubMenu(int, int, int, CharSequence!);
+ method public android.view.SubMenu! addSubMenu(CharSequence!);
method public void clear();
method public void close();
method public android.view.MenuItem! findItem(int);
@@ -1152,8 +1152,8 @@
method public boolean isQwertyMode();
method public android.view.SubMenu! setHeaderIcon(android.graphics.drawable.Drawable!);
method public android.view.SubMenu! setHeaderIcon(int);
- method public android.view.SubMenu! setHeaderTitle(CharSequence!);
method public android.view.SubMenu! setHeaderTitle(int);
+ method public android.view.SubMenu! setHeaderTitle(CharSequence!);
method public android.view.SubMenu! setHeaderView(android.view.View!);
method public android.view.SubMenu! setIcon(android.graphics.drawable.Drawable!);
method public android.view.SubMenu! setIcon(int);
@@ -1226,8 +1226,8 @@
method public boolean isOverflowMenuShowPending();
method public boolean isOverflowMenuShowing();
method public void onNestedPreScroll(android.view.View!, int, int, int[]!, int);
- method public void onNestedScroll(android.view.View!, int, int, int, int, int, int[]!);
method public void onNestedScroll(android.view.View!, int, int, int, int, int);
+ method public void onNestedScroll(android.view.View!, int, int, int, int, int, int[]!);
method public void onNestedScrollAccepted(android.view.View!, android.view.View!, int, int);
method public boolean onStartNestedScroll(android.view.View!, android.view.View!, int, int);
method public void onStopNestedScroll(android.view.View!, int);
@@ -1237,8 +1237,8 @@
method public void setActionBarVisibilityCallback(androidx.appcompat.widget.ActionBarOverlayLayout.ActionBarVisibilityCallback!);
method public void setHasNonEmbeddedTabs(boolean);
method public void setHideOnContentScrollEnabled(boolean);
- method public void setIcon(int);
method public void setIcon(android.graphics.drawable.Drawable!);
+ method public void setIcon(int);
method public void setLogo(int);
method public void setMenu(android.view.Menu!, androidx.appcompat.view.menu.MenuPresenter.Callback!);
method public void setMenuPrepared();
@@ -1261,9 +1261,9 @@
public static class ActionBarOverlayLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
ctor public ActionBarOverlayLayout.LayoutParams(android.content.Context!, android.util.AttributeSet!);
- ctor public ActionBarOverlayLayout.LayoutParams(int, int);
ctor public ActionBarOverlayLayout.LayoutParams(android.view.ViewGroup.LayoutParams!);
ctor public ActionBarOverlayLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+ ctor public ActionBarOverlayLayout.LayoutParams(int, int);
}
public class ActionMenuView extends androidx.appcompat.widget.LinearLayoutCompat implements androidx.appcompat.view.menu.MenuBuilder.ItemInvoker androidx.appcompat.view.menu.MenuView {
@@ -1541,11 +1541,11 @@
@androidx.resourceinspection.annotation.AppCompatShadowedAttributes public class AppCompatSpinner extends android.widget.Spinner implements androidx.core.view.TintableBackgroundView {
ctor public AppCompatSpinner(android.content.Context);
- ctor public AppCompatSpinner(android.content.Context, int);
ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet?);
ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet?, int);
ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet?, int, int);
ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet?, int, int, android.content.res.Resources.Theme!);
+ ctor public AppCompatSpinner(android.content.Context, int);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
@@ -1610,8 +1610,8 @@
method public boolean isOverflowMenuShowing();
method public void restoreToolbarHierarchyState(android.util.SparseArray<android.os.Parcelable!>!);
method public void saveToolbarHierarchyState(android.util.SparseArray<android.os.Parcelable!>!);
- method public void setIcon(int);
method public void setIcon(android.graphics.drawable.Drawable!);
+ method public void setIcon(int);
method public void setLogo(int);
method public void setMenu(android.view.Menu!, androidx.appcompat.view.menu.MenuPresenter.Callback!);
method public void setMenuPrepared();
@@ -1660,15 +1660,15 @@
method public void setDropdownSelectedPosition(int);
method public void setEmbeddedTabView(androidx.appcompat.widget.ScrollingTabContainerView!);
method public void setHomeButtonEnabled(boolean);
- method public void setIcon(int);
method public void setIcon(android.graphics.drawable.Drawable!);
- method public void setLogo(int);
+ method public void setIcon(int);
method public void setLogo(android.graphics.drawable.Drawable!);
+ method public void setLogo(int);
method public void setMenu(android.view.Menu!, androidx.appcompat.view.menu.MenuPresenter.Callback!);
method public void setMenuCallbacks(androidx.appcompat.view.menu.MenuPresenter.Callback!, androidx.appcompat.view.menu.MenuBuilder.Callback!);
method public void setMenuPrepared();
- method public void setNavigationContentDescription(CharSequence!);
method public void setNavigationContentDescription(int);
+ method public void setNavigationContentDescription(CharSequence!);
method public void setNavigationIcon(android.graphics.drawable.Drawable!);
method public void setNavigationIcon(int);
method public void setNavigationMode(int);
@@ -1682,9 +1682,9 @@
}
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class DialogTitle extends androidx.appcompat.widget.AppCompatTextView {
- ctor public DialogTitle(android.content.Context, android.util.AttributeSet?, int);
- ctor public DialogTitle(android.content.Context, android.util.AttributeSet?);
ctor public DialogTitle(android.content.Context);
+ ctor public DialogTitle(android.content.Context, android.util.AttributeSet?);
+ ctor public DialogTitle(android.content.Context, android.util.AttributeSet?, int);
}
public interface EmojiCompatConfigurationView {
@@ -1765,10 +1765,10 @@
public static class LinearLayoutCompat.LayoutParams extends android.widget.LinearLayout.LayoutParams {
ctor public LinearLayoutCompat.LayoutParams(android.content.Context!, android.util.AttributeSet!);
- ctor public LinearLayoutCompat.LayoutParams(int, int);
- ctor public LinearLayoutCompat.LayoutParams(int, int, float);
ctor public LinearLayoutCompat.LayoutParams(android.view.ViewGroup.LayoutParams!);
ctor public LinearLayoutCompat.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+ ctor public LinearLayoutCompat.LayoutParams(int, int);
+ ctor public LinearLayoutCompat.LayoutParams(int, int, float);
}
@IntDef({androidx.appcompat.widget.LinearLayoutCompat.HORIZONTAL, androidx.appcompat.widget.LinearLayoutCompat.VERTICAL}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface LinearLayoutCompat.OrientationMode {
@@ -2015,8 +2015,8 @@
method public void setSwitchMinWidth(int);
method public void setSwitchPadding(int);
method public void setSwitchTextAppearance(android.content.Context!, int);
- method public void setSwitchTypeface(android.graphics.Typeface!, int);
method public void setSwitchTypeface(android.graphics.Typeface!);
+ method public void setSwitchTypeface(android.graphics.Typeface!, int);
method public void setTextOff(CharSequence!);
method public void setTextOn(CharSequence!);
method public void setThumbDrawable(android.graphics.drawable.Drawable!);
@@ -2059,8 +2059,8 @@
method public int getIndexCount();
method public int getInt(int, int);
method public int getInteger(int, int);
- method public int getLayoutDimension(int, String!);
method public int getLayoutDimension(int, int);
+ method public int getLayoutDimension(int, String!);
method public String! getNonResourceString(int);
method public String! getPositionDescription();
method public int getResourceId(int, int);
@@ -2131,22 +2131,22 @@
method public void setBackInvokedCallbackEnabled(boolean);
method public void setCollapseContentDescription(@StringRes int);
method public void setCollapseContentDescription(CharSequence?);
- method public void setCollapseIcon(@DrawableRes int);
method public void setCollapseIcon(android.graphics.drawable.Drawable?);
+ method public void setCollapseIcon(@DrawableRes int);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setCollapsible(boolean);
method public void setContentInsetEndWithActions(int);
method public void setContentInsetStartWithNavigation(int);
method public void setContentInsetsAbsolute(int, int);
method public void setContentInsetsRelative(int, int);
- method public void setLogo(@DrawableRes int);
method public void setLogo(android.graphics.drawable.Drawable!);
+ method public void setLogo(@DrawableRes int);
method public void setLogoDescription(@StringRes int);
method public void setLogoDescription(CharSequence!);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setMenuCallbacks(androidx.appcompat.view.menu.MenuPresenter.Callback!, androidx.appcompat.view.menu.MenuBuilder.Callback!);
method public void setNavigationContentDescription(@StringRes int);
method public void setNavigationContentDescription(CharSequence?);
- method public void setNavigationIcon(@DrawableRes int);
method public void setNavigationIcon(android.graphics.drawable.Drawable?);
+ method public void setNavigationIcon(@DrawableRes int);
method public void setNavigationOnClickListener(android.view.View.OnClickListener!);
method public void setOnMenuItemClickListener(androidx.appcompat.widget.Toolbar.OnMenuItemClickListener!);
method public void setOverflowIcon(android.graphics.drawable.Drawable?);
@@ -2154,8 +2154,8 @@
method public void setSubtitle(@StringRes int);
method public void setSubtitle(CharSequence!);
method public void setSubtitleTextAppearance(android.content.Context!, @StyleRes int);
- method public void setSubtitleTextColor(@ColorInt int);
method public void setSubtitleTextColor(android.content.res.ColorStateList);
+ method public void setSubtitleTextColor(@ColorInt int);
method public void setTitle(@StringRes int);
method public void setTitle(CharSequence!);
method public void setTitleMargin(int, int, int, int);
@@ -2164,20 +2164,20 @@
method public void setTitleMarginStart(int);
method public void setTitleMarginTop(int);
method public void setTitleTextAppearance(android.content.Context!, @StyleRes int);
- method public void setTitleTextColor(@ColorInt int);
method public void setTitleTextColor(android.content.res.ColorStateList);
+ method public void setTitleTextColor(@ColorInt int);
method public boolean showOverflowMenu();
}
public static class Toolbar.LayoutParams extends androidx.appcompat.app.ActionBar.LayoutParams {
ctor public Toolbar.LayoutParams(android.content.Context, android.util.AttributeSet!);
+ ctor public Toolbar.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ ctor public Toolbar.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+ ctor public Toolbar.LayoutParams(androidx.appcompat.app.ActionBar.LayoutParams!);
+ ctor public Toolbar.LayoutParams(androidx.appcompat.widget.Toolbar.LayoutParams!);
+ ctor public Toolbar.LayoutParams(int);
ctor public Toolbar.LayoutParams(int, int);
ctor public Toolbar.LayoutParams(int, int, int);
- ctor public Toolbar.LayoutParams(int);
- ctor public Toolbar.LayoutParams(androidx.appcompat.widget.Toolbar.LayoutParams!);
- ctor public Toolbar.LayoutParams(androidx.appcompat.app.ActionBar.LayoutParams!);
- ctor public Toolbar.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
- ctor public Toolbar.LayoutParams(android.view.ViewGroup.LayoutParams!);
}
public static interface Toolbar.OnMenuItemClickListener {
@@ -2232,15 +2232,15 @@
method public void setDropdownSelectedPosition(int);
method public void setEmbeddedTabView(androidx.appcompat.widget.ScrollingTabContainerView!);
method public void setHomeButtonEnabled(boolean);
- method public void setIcon(int);
method public void setIcon(android.graphics.drawable.Drawable!);
- method public void setLogo(int);
+ method public void setIcon(int);
method public void setLogo(android.graphics.drawable.Drawable!);
+ method public void setLogo(int);
method public void setMenu(android.view.Menu!, androidx.appcompat.view.menu.MenuPresenter.Callback!);
method public void setMenuCallbacks(androidx.appcompat.view.menu.MenuPresenter.Callback!, androidx.appcompat.view.menu.MenuBuilder.Callback!);
method public void setMenuPrepared();
- method public void setNavigationContentDescription(CharSequence!);
method public void setNavigationContentDescription(int);
+ method public void setNavigationContentDescription(CharSequence!);
method public void setNavigationIcon(android.graphics.drawable.Drawable!);
method public void setNavigationIcon(int);
method public void setNavigationMode(int);
diff --git a/appcompat/appcompat/build.gradle b/appcompat/appcompat/build.gradle
index 614c612..7eab234 100644
--- a/appcompat/appcompat/build.gradle
+++ b/appcompat/appcompat/build.gradle
@@ -9,7 +9,7 @@
dependencies {
api("androidx.annotation:annotation:1.3.0")
- api("androidx.core:core:1.9.0")
+ api(project(":core:core"))
// Required to make activity 1.5.0-rc01 dependencies resolve.
implementation("androidx.core:core-ktx:1.8.0")
@@ -104,9 +104,10 @@
}
androidx {
- name = "Android AppCompat Library"
+ name = "AppCompat"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2011"
- description = "The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren\'t a part of the framework APIs. Compatible on devices running API 14 or later."
+ description = "Provides backwards-compatible implementations of UI-related Android SDK " +
+ "functionality, including dark mode and Material theming."
failOnDeprecationWarnings = false
}
diff --git a/appcompat/appcompat/lint-baseline.xml b/appcompat/appcompat/lint-baseline.xml
index 0936e35..dc8d901 100644
--- a/appcompat/appcompat/lint-baseline.xml
+++ b/appcompat/appcompat/lint-baseline.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.0.0-beta03" type="baseline" client="gradle" dependencies="false" name="AGP (8.0.0-beta03)" variant="all" version="8.0.0-beta03">
+<issues format="6" by="lint 8.1.0-beta01" type="baseline" client="gradle" dependencies="false" name="AGP (8.1.0-beta01)" variant="all" version="8.1.0-beta01">
<issue
id="NewApi"
@@ -434,6 +434,24 @@
</issue>
<issue
+ id="PrereleaseSdkCoreDependency"
+ message="Prelease SDK check isAtLeastT cannot be called as this project has a versioned dependency on androidx.core:core"
+ errorLine1=" if (BuildCompat.isAtLeastT()) {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/main/java/androidx/appcompat/widget/DropDownListView.java"/>
+ </issue>
+
+ <issue
+ id="PrereleaseSdkCoreDependency"
+ message="Prelease SDK check isAtLeastT cannot be called as this project has a versioned dependency on androidx.core:core"
+ errorLine1=" if (BuildCompat.isAtLeastT()) {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/main/java/androidx/appcompat/widget/DropDownListView.java"/>
+ </issue>
+
+ <issue
id="KotlinPropertyAccess"
message="The getter return type (`View`) and setter parameter type (`ScrollingTabContainerView`) getter and setter methods for property `tabContainer` should have exactly the same type to allow be accessed as a property from Kotlin; see https://android.github.io/kotlin-guides/interop.html#property-prefixes"
errorLine1=" public View getTabContainer() {"
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/AppCompatActivityViewTreeTest.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/AppCompatActivityViewTreeTest.kt
index e3dafc5..050577f 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/AppCompatActivityViewTreeTest.kt
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/AppCompatActivityViewTreeTest.kt
@@ -16,10 +16,10 @@
package androidx.appcompat.app
-import androidx.lifecycle.findViewTreeLifecycleOwner
-import androidx.savedstate.findViewTreeSavedStateRegistryOwner
import androidx.activity.findViewTreeOnBackPressedDispatcherOwner
+import androidx.lifecycle.findViewTreeLifecycleOwner
import androidx.lifecycle.findViewTreeViewModelStoreOwner
+import androidx.savedstate.findViewTreeSavedStateRegistryOwner
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/AppCompatDialogTest.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/AppCompatDialogTest.kt
index ceb8677..c82b2ce 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/AppCompatDialogTest.kt
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/AppCompatDialogTest.kt
@@ -17,8 +17,8 @@
package androidx.appcompat.app
import android.view.View
-import androidx.lifecycle.findViewTreeLifecycleOwner
import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.findViewTreeLifecycleOwner
import androidx.test.core.app.ActivityScenario
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomAttachBaseContextActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomAttachBaseContextActivity.java
index 9f929e5..cbb0e5e 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomAttachBaseContextActivity.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomAttachBaseContextActivity.java
@@ -25,7 +25,7 @@
* An activity with customized configuration.
*/
public class LocalesCustomAttachBaseContextActivity extends LocalesUpdateActivity {
- public static final float CUSTOM_FONT_SCALE = 4.24f;
+ public static final float CUSTOM_FONT_SCALE = 4.23f;
@Override
protected void attachBaseContext(Context newBase) {
@@ -33,7 +33,7 @@
}
private Context useCustomConfig(Context context) {
- if (Build.VERSION.SDK_INT >= 24) {
+ if (Build.VERSION.SDK_INT >= 17) {
Configuration config = new Configuration();
config.fontScale = CUSTOM_FONT_SCALE;
return context.createConfigurationContext(config);
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomAttachBaseContextTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomAttachBaseContextTestCase.kt
index bece087..395b839 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomAttachBaseContextTestCase.kt
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomAttachBaseContextTestCase.kt
@@ -18,7 +18,7 @@
import android.content.res.Configuration
import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_YES
-import androidx.appcompat.app.NightModeCustomAttachBaseContextActivity.CUSTOM_FONT_SCALE
+import androidx.appcompat.app.LocalesCustomAttachBaseContextActivity.CUSTOM_FONT_SCALE
import androidx.appcompat.testutils.LocalesActivityTestRule
import androidx.appcompat.testutils.LocalesUtils.CUSTOM_LOCALE_LIST
import androidx.appcompat.testutils.LocalesUtils.setLocalesAndWaitForRecreate
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesPersistTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesPersistTestCase.kt
index fa0c892..c00c10b 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesPersistTestCase.kt
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesPersistTestCase.kt
@@ -18,16 +18,20 @@
package androidx.appcompat.app
+import android.content.Context
import android.content.Intent
import androidx.appcompat.testutils.LocalesActivityTestRule
import androidx.appcompat.testutils.LocalesUtils.CUSTOM_LOCALE_LIST
import androidx.appcompat.testutils.LocalesUtils.assertConfigurationLocalesEquals
+import androidx.appcompat.testutils.LocalesUtils.setLocalesAndWait
import androidx.appcompat.testutils.LocalesUtils.setLocalesAndWaitForRecreate
+import androidx.core.app.LocaleManagerCompat
import androidx.core.os.LocaleListCompat
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import androidx.test.filters.SdkSuppress
import androidx.test.platform.app.InstrumentationRegistry
+import junit.framework.Assert.assertEquals
import junit.framework.Assert.assertNull
import org.junit.After
import org.junit.Before
@@ -117,6 +121,16 @@
assertConfigurationLocalesEquals(systemLocales, secondActivity)
}
+ @Test
+ fun testGetAppLocalesFromNonActivityContext() {
+ AppCompatDelegate.setIsAutoStoreLocalesOptedIn(true)
+
+ setLocalesAndWait(rule, CUSTOM_LOCALE_LIST)
+
+ val appContext: Context = InstrumentationRegistry.getInstrumentation().targetContext
+ assertEquals(CUSTOM_LOCALE_LIST, LocaleManagerCompat.getApplicationLocales(appContext))
+ }
+
@After
fun teardown() {
rule.runOnUiThread {
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesSyncToFrameworkTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesSyncToFrameworkTestCase.kt
index 536e283..da2a2b3 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesSyncToFrameworkTestCase.kt
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesSyncToFrameworkTestCase.kt
@@ -26,6 +26,7 @@
import androidx.appcompat.testutils.LocalesActivityTestRule
import androidx.appcompat.testutils.LocalesUtils.CUSTOM_LOCALE_LIST
import androidx.appcompat.testutils.LocalesUtils.assertConfigurationLocalesEquals
+import androidx.core.app.AppLocalesStorageHelper
import androidx.core.os.LocaleListCompat
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
@@ -72,7 +73,7 @@
appLocalesComponent = ComponentName(
instrumentation.context,
- AppLocalesStorageHelper.APP_LOCALES_META_DATA_HOLDER_SERVICE_NAME
+ AppCompatDelegate.APP_LOCALES_META_DATA_HOLDER_SERVICE_NAME
)
}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeCustomApplyOverrideConfigurationActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeCustomApplyOverrideConfigurationActivity.java
index 1f187b1..5c9e24e 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeCustomApplyOverrideConfigurationActivity.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeCustomApplyOverrideConfigurationActivity.java
@@ -26,8 +26,8 @@
@RequiresApi(17)
public class NightModeCustomApplyOverrideConfigurationActivity extends NightModeActivity {
- public static final float CUSTOM_FONT_SCALE = 4.24f;
- public static final Locale CUSTOM_LOCALE = Locale.CANADA_FRENCH;
+ public static final float CUSTOM_FONT_SCALE = 4.22f;
+ public static final Locale CUSTOM_LOCALE = Locale.CANADA;
@Override
protected void attachBaseContext(Context newBase) {
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeCustomApplyOverrideConfigurationTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeCustomApplyOverrideConfigurationTestCase.kt
index 7b2013e..a96dcb7 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeCustomApplyOverrideConfigurationTestCase.kt
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeCustomApplyOverrideConfigurationTestCase.kt
@@ -18,8 +18,8 @@
import android.os.Build
import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_YES
-import androidx.appcompat.app.NightModeCustomAttachBaseContextActivity.CUSTOM_FONT_SCALE
-import androidx.appcompat.app.NightModeCustomAttachBaseContextActivity.CUSTOM_LOCALE
+import androidx.appcompat.app.NightModeCustomApplyOverrideConfigurationActivity.CUSTOM_FONT_SCALE
+import androidx.appcompat.app.NightModeCustomApplyOverrideConfigurationActivity.CUSTOM_LOCALE
import androidx.appcompat.testutils.NightModeActivityTestRule
import androidx.appcompat.testutils.NightModeUtils.NightSetMode
import androidx.appcompat.testutils.NightModeUtils.setNightModeAndWaitForRecreate
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeCustomAttachBaseContextActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeCustomAttachBaseContextActivity.java
index 16d0bf1..7878c94 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeCustomAttachBaseContextActivity.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeCustomAttachBaseContextActivity.java
@@ -27,7 +27,7 @@
* This is the recommended approach to customizing Activity configuration.
*/
public class NightModeCustomAttachBaseContextActivity extends NightModeActivity {
- public static final float CUSTOM_FONT_SCALE = 4.24f;
+ public static final float CUSTOM_FONT_SCALE = 4.21f;
public static final Locale CUSTOM_LOCALE = Locale.CANADA_FRENCH;
@Override
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeRtlTestUtilsRegressionTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeRtlTestUtilsRegressionTestCase.kt
index d395ac9..3144e25 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeRtlTestUtilsRegressionTestCase.kt
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeRtlTestUtilsRegressionTestCase.kt
@@ -25,13 +25,13 @@
import androidx.test.filters.MediumTest
import androidx.test.filters.SdkSuppress
import androidx.test.platform.app.InstrumentationRegistry
+import java.util.Locale
import org.junit.After
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.Locale
/**
* This is one approach to customizing Activity configuration that's used in google3.
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeTestCase.kt
index c0139a5..501bcfc 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeTestCase.kt
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeTestCase.kt
@@ -42,6 +42,7 @@
import androidx.test.platform.app.InstrumentationRegistry
import androidx.testutils.LifecycleOwnerUtils.waitForRecreation
import androidx.testutils.waitForExecution
+import java.util.concurrent.CountDownLatch
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertNull
@@ -49,7 +50,6 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import java.util.concurrent.CountDownLatch
@Suppress("DEPRECATION")
@LargeTest
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NoThemeAppCompatActivity.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NoThemeAppCompatActivity.kt
index e0a6fb8..f894124 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NoThemeAppCompatActivity.kt
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NoThemeAppCompatActivity.kt
@@ -17,7 +17,6 @@
package androidx.appcompat.app
import android.os.Bundle
-
import androidx.appcompat.test.R
class NoThemeAppCompatActivity : AppCompatActivity() {
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatAttributeTest.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatAttributeTest.kt
index 715a55e..aa2e0f5 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatAttributeTest.kt
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatAttributeTest.kt
@@ -22,8 +22,8 @@
import android.widget.ImageView
import android.widget.SeekBar
import android.widget.TextView
-import androidx.appcompat.test.R
import androidx.appcompat.app.AppCompatActivity
+import androidx.appcompat.test.R
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import androidx.test.filters.SdkSuppress
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java
index ec995d7..df731da1 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java
@@ -16,16 +16,17 @@
package androidx.appcompat.app;
+import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
+import static android.content.pm.PackageManager.DONT_KILL_APP;
+
import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;
-import static androidx.appcompat.app.AppLocalesStorageHelper.persistLocales;
-import static androidx.appcompat.app.AppLocalesStorageHelper.readLocales;
-import static androidx.appcompat.app.AppLocalesStorageHelper.syncLocalesToFramework;
import static java.util.Objects.requireNonNull;
import android.app.Activity;
import android.app.Dialog;
import android.app.LocaleManager;
+import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.ServiceInfo;
@@ -57,6 +58,7 @@
import androidx.appcompat.widget.Toolbar;
import androidx.appcompat.widget.VectorEnabledTintResources;
import androidx.collection.ArraySet;
+import androidx.core.app.AppLocalesStorageHelper;
import androidx.core.os.LocaleListCompat;
import androidx.core.view.WindowCompat;
import androidx.fragment.app.FragmentActivity;
@@ -64,7 +66,10 @@
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.ref.WeakReference;
+import java.util.ArrayDeque;
import java.util.Iterator;
+import java.util.Queue;
+import java.util.concurrent.Executor;
/**
* This class represents a delegate which you can use to extend AppCompat's support to any
@@ -110,9 +115,62 @@
static final boolean DEBUG = false;
static final String TAG = "AppCompatDelegate";
- static AppLocalesStorageHelper.SerialExecutor sSerialExecutorForLocalesStorage = new
- AppLocalesStorageHelper.SerialExecutor(
- new AppLocalesStorageHelper.ThreadPerTaskExecutor());
+ static SerialExecutor sSerialExecutorForLocalesStorage = new
+ SerialExecutor(new ThreadPerTaskExecutor());
+
+ static final String APP_LOCALES_META_DATA_HOLDER_SERVICE_NAME = "androidx.appcompat.app"
+ + ".AppLocalesMetadataHolderService";
+
+ /**
+ * Implementation of {@link java.util.concurrent.Executor} that executes runnables serially
+ * by synchronizing the {@link Executor#execute(Runnable)} method and maintaining a tasks
+ * queue.
+ */
+ static class SerialExecutor implements Executor {
+ private final Object mLock = new Object();
+ final Queue<Runnable> mTasks = new ArrayDeque<>();
+ final Executor mExecutor;
+ Runnable mActive;
+
+ SerialExecutor(Executor executor) {
+ this.mExecutor = executor;
+ }
+
+ @Override
+ public void execute(final Runnable r) {
+ synchronized (mLock) {
+ mTasks.add(() -> {
+ try {
+ r.run();
+ } finally {
+ scheduleNext();
+ }
+ });
+ if (mActive == null) {
+ scheduleNext();
+ }
+ }
+ }
+
+ protected void scheduleNext() {
+ synchronized (mLock) {
+ if ((mActive = mTasks.poll()) != null) {
+ mExecutor.execute(mActive);
+ }
+ }
+ }
+ }
+
+ /**
+ * Implementation of {@link java.util.concurrent.Executor} that executes each runnable on a
+ * new thread.
+ */
+ static class ThreadPerTaskExecutor implements Executor {
+ @Override
+ public void execute(Runnable r) {
+ new Thread(r).start();
+ }
+ }
/**
* Mode which uses the system's night mode setting to determine if it is night or not.
@@ -714,6 +772,12 @@
* this transition on their end.</li>
* </ul>
*
+ * <p><b>Note: This API work with the AppCompatActivity context, not for others context, for
+ * Android 12 (API level 32) and earlier. If there is a requirement to get the localized
+ * string which respects the per-app locale in non-AppCompatActivity context, please consider
+ * using {@link androidx.core.content.ContextCompat#getString(Context, int)} or
+ * {@link androidx.core.content.ContextCompat#getContextForLanguage(Context)}. </b></p>
+ *
* @param locales a list of locales.
*/
public static void setApplicationLocales(@NonNull LocaleListCompat locales) {
@@ -749,7 +813,8 @@
* <p>Returns a {@link LocaleListCompat#getEmptyLocaleList()} if no app-specific locales are
* set.
*
- * <p><b>Note: This API should always be called after Activity.onCreate().</b></p>
+ * <p><b>Note: This API only work at AppCompatDelegate and it should always be called after
+ * Activity.onCreate().</b></p>
*/
@AnyThread
@NonNull
@@ -913,7 +978,8 @@
if (sRequestedAppLocales == null) {
if (sStoredAppLocales == null) {
sStoredAppLocales =
- LocaleListCompat.forLanguageTags(readLocales(context));
+ LocaleListCompat.forLanguageTags(
+ AppLocalesStorageHelper.readLocales(context));
}
if (sStoredAppLocales.isEmpty()) {
// if both requestedLocales and storedLocales not set, then the user has not
@@ -926,7 +992,8 @@
// if requestedLocales is set and is not equal to the storedLocales then in this
// case we need to store these locales in storage.
sStoredAppLocales = sRequestedAppLocales;
- persistLocales(context, sRequestedAppLocales.toLanguageTags());
+ AppLocalesStorageHelper.persistLocales(context,
+ sRequestedAppLocales.toLanguageTags());
}
}
}
@@ -996,6 +1063,53 @@
}
}
+ /**
+ * Syncs app-specific locales from androidX to framework. This is used to maintain a smooth
+ * transition for a device that updates from pre-T API versions to T.
+ *
+ * <p><b>NOTE:</b> This should only be called when auto-storage is opted-in. This method
+ * uses the meta-data service provided during the opt-in and hence if the service is not found
+ * this method will throw an error.</p>
+ */
+ static void syncLocalesToFramework(Context context) {
+ if (Build.VERSION.SDK_INT >= 33) {
+ ComponentName app_locales_component = new ComponentName(
+ context, APP_LOCALES_META_DATA_HOLDER_SERVICE_NAME);
+
+ if (context.getPackageManager().getComponentEnabledSetting(app_locales_component)
+ != COMPONENT_ENABLED_STATE_ENABLED) {
+ // ComponentEnabledSetting for the app component app_locales_component is used as a
+ // marker to represent that the locales has been synced from AndroidX to framework
+ // If this marker is found in ENABLED state then we do not need to sync again.
+ if (AppCompatDelegate.getApplicationLocales().isEmpty()) {
+ // We check if some locales are applied by the framework or not (this is done to
+ // ensure that we don't overwrite newer locales set by the framework). If no
+ // app-locales are found then we need to sync the app-specific locales from
+ // androidX to framework.
+
+ String appLocales = AppLocalesStorageHelper.readLocales(context);
+ // if locales are present in storage, call the setApplicationLocales() API. As
+ // the API version is >= 33, this call will be directed to the framework API and
+ // the locales will be persisted there.
+ Object localeManager = context.getSystemService(Context.LOCALE_SERVICE);
+ if (localeManager != null) {
+ AppCompatDelegate.Api33Impl.localeManagerSetApplicationLocales(
+ localeManager,
+ AppCompatDelegate.Api24Impl.localeListForLanguageTags(appLocales));
+ }
+ }
+ // setting ComponentEnabledSetting for app component using
+ // AppLocalesMetadataHolderService (used only for locales, thus minimizing
+ // the chances of conflicts). Setting it as ENABLED marks the success of app-locales
+ // sync from AndroidX to framework.
+ // Flag DONT_KILL_APP indicates that you don't want to kill the app containing the
+ // component.
+ context.getPackageManager().setComponentEnabledSetting(app_locales_component,
+ COMPONENT_ENABLED_STATE_ENABLED, /* flags= */ DONT_KILL_APP);
+ }
+ }
+ }
+
private static void removeDelegateFromActives(@NonNull AppCompatDelegate toRemove) {
synchronized (sActivityDelegatesLock) {
final Iterator<WeakReference<AppCompatDelegate>> i = sActivityDelegates.iterator();
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppLocalesStorageHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppLocalesStorageHelper.java
deleted file mode 100644
index 2a0cb70..0000000
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppLocalesStorageHelper.java
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
- * Copyright 2022 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
- *
- * http://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.
- */
-
-package androidx.appcompat.app;
-
-import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
-import static android.content.pm.PackageManager.DONT_KILL_APP;
-
-import static androidx.appcompat.app.AppCompatDelegate.getApplicationLocales;
-
-import android.content.ComponentName;
-import android.content.Context;
-import android.os.Build;
-import android.util.Log;
-import android.util.Xml;
-
-import androidx.annotation.NonNull;
-
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-import org.xmlpull.v1.XmlSerializer;
-
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.ArrayDeque;
-import java.util.Queue;
-import java.util.concurrent.Executor;
-
-/**
- * Helper class to manage storage of locales in app's persistent files.
- */
-class AppLocalesStorageHelper {
- static final String APPLICATION_LOCALES_RECORD_FILE =
- "androidx.appcompat.app.AppCompatDelegate.application_locales_record_file";
- static final String LOCALE_RECORD_ATTRIBUTE_TAG = "application_locales";
- static final String LOCALE_RECORD_FILE_TAG = "locales";
- static final String APP_LOCALES_META_DATA_HOLDER_SERVICE_NAME = "androidx.appcompat.app"
- + ".AppLocalesMetadataHolderService";
- static final String TAG = "AppLocalesStorageHelper";
- static final boolean DEBUG = false;
-
- private AppLocalesStorageHelper() {}
-
- /**
- * Returns app locales after reading from storage, fetched using the application context.
- */
- @NonNull
- static String readLocales(@NonNull Context context) {
- String appLocales = "";
-
- FileInputStream fis;
- try {
- fis = context.openFileInput(APPLICATION_LOCALES_RECORD_FILE);
- } catch (FileNotFoundException fnfe) {
- if (DEBUG) {
- Log.d(TAG, "Reading app Locales : Locales record file not found: "
- + APPLICATION_LOCALES_RECORD_FILE);
- }
- return appLocales;
- }
- try {
- XmlPullParser parser = Xml.newPullParser();
- parser.setInput(fis, "UTF-8");
- int type;
- int outerDepth = parser.getDepth();
- while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
- && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
- if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
- continue;
- }
-
- String tagName = parser.getName();
- if (tagName.equals(LOCALE_RECORD_FILE_TAG)) {
- appLocales = parser.getAttributeValue(/*namespace= */ null,
- LOCALE_RECORD_ATTRIBUTE_TAG);
- break;
- }
- }
- } catch (XmlPullParserException | IOException e) {
- Log.w(TAG,
- "Reading app Locales : Unable to parse through file :"
- + APPLICATION_LOCALES_RECORD_FILE);
- } finally {
- if (fis != null) {
- try {
- fis.close();
- } catch (IOException e) {
- /* ignore */
- }
- }
- }
-
- if (!appLocales.isEmpty()) {
- if (DEBUG) {
- Log.d(TAG,
- "Reading app Locales : Locales read from file: "
- + APPLICATION_LOCALES_RECORD_FILE + " ," + " appLocales: "
- + appLocales);
- }
- } else {
- context.deleteFile(APPLICATION_LOCALES_RECORD_FILE);
- }
- return appLocales;
- }
-
- /**
- * Stores the provided locales in internal app file, using the application context.
- */
- static void persistLocales(@NonNull Context context, @NonNull String locales) {
- if (locales.equals("")) {
- context.deleteFile(APPLICATION_LOCALES_RECORD_FILE);
- return;
- }
-
- FileOutputStream fos;
- try {
- fos = context.openFileOutput(APPLICATION_LOCALES_RECORD_FILE, Context.MODE_PRIVATE);
- } catch (FileNotFoundException fnfe) {
- Log.w(TAG, String.format("Storing App Locales : FileNotFoundException: Cannot open "
- + "file %s for writing ", APPLICATION_LOCALES_RECORD_FILE));
- return;
- }
- XmlSerializer serializer = Xml.newSerializer();
- try {
- serializer.setOutput(fos, /* encoding= */ null);
- serializer.startDocument("UTF-8", true);
- serializer.startTag(/* namespace= */ null, LOCALE_RECORD_FILE_TAG);
- serializer.attribute(/* namespace= */ null, LOCALE_RECORD_ATTRIBUTE_TAG, locales);
- serializer.endTag(/* namespace= */ null, LOCALE_RECORD_FILE_TAG);
- serializer.endDocument();
- if (DEBUG) {
- Log.d(TAG, "Storing App Locales : app-locales: "
- + locales + " persisted successfully.");
- }
- } catch (Exception e) {
- Log.w(TAG, "Storing App Locales : Failed to persist app-locales in storage ",
- e);
- } finally {
- if (fos != null) {
- try {
- fos.close();
- } catch (IOException e) {
- /* ignore */
- }
- }
- }
- }
-
- /**
- * Syncs app-specific locales from androidX to framework. This is used to maintain a smooth
- * transition for a device that updates from pre-T API versions to T.
- *
- * <p><b>NOTE:</b> This should only be called when auto-storage is opted-in. This method
- * uses the meta-data service provided during the opt-in and hence if the service is not found
- * this method will throw an error.</p>
- */
- static void syncLocalesToFramework(Context context) {
- if (Build.VERSION.SDK_INT >= 33) {
- ComponentName app_locales_component = new ComponentName(
- context, APP_LOCALES_META_DATA_HOLDER_SERVICE_NAME);
-
- if (context.getPackageManager().getComponentEnabledSetting(app_locales_component)
- != COMPONENT_ENABLED_STATE_ENABLED) {
- // ComponentEnabledSetting for the app component app_locales_component is used as a
- // marker to represent that the locales has been synced from AndroidX to framework
- // If this marker is found in ENABLED state then we do not need to sync again.
- if (getApplicationLocales().isEmpty()) {
- // We check if some locales are applied by the framework or not (this is done to
- // ensure that we don't overwrite newer locales set by the framework). If no
- // app-locales are found then we need to sync the app-specific locales from
- // androidX to framework.
-
- String appLocales = readLocales(context);
- // if locales are present in storage, call the setApplicationLocales() API. As
- // the API version is >= 33, this call will be directed to the framework API and
- // the locales will be persisted there.
- Object localeManager = context.getSystemService(Context.LOCALE_SERVICE);
- if (localeManager != null) {
- AppCompatDelegate.Api33Impl.localeManagerSetApplicationLocales(
- localeManager,
- AppCompatDelegate.Api24Impl.localeListForLanguageTags(appLocales));
- }
- }
- // setting ComponentEnabledSetting for app component using
- // AppLocalesMetadataHolderService (used only for locales, thus minimizing
- // the chances of conflicts). Setting it as ENABLED marks the success of app-locales
- // sync from AndroidX to framework.
- // Flag DONT_KILL_APP indicates that you don't want to kill the app containing the
- // component.
- context.getPackageManager().setComponentEnabledSetting(app_locales_component,
- COMPONENT_ENABLED_STATE_ENABLED, /* flags= */ DONT_KILL_APP);
- }
- }
- }
-
- /**
- * Implementation of {@link java.util.concurrent.Executor} that executes each runnable on a
- * new thread.
- */
- static class ThreadPerTaskExecutor implements Executor {
- @Override
- public void execute(Runnable r) {
- new Thread(r).start();
- }
- }
-
- /**
- * Implementation of {@link java.util.concurrent.Executor} that executes runnables serially
- * by synchronizing the {@link Executor#execute(Runnable)} method and maintaining a tasks
- * queue.
- */
- static class SerialExecutor implements Executor {
- private final Object mLock = new Object();
- final Queue<Runnable> mTasks = new ArrayDeque<>();
- final Executor mExecutor;
- Runnable mActive;
-
- SerialExecutor(Executor executor) {
- this.mExecutor = executor;
- }
-
- @Override
- public void execute(final Runnable r) {
- synchronized (mLock) {
- mTasks.add(() -> {
- try {
- r.run();
- } finally {
- scheduleNext();
- }
- });
- if (mActive == null) {
- scheduleNext();
- }
- }
- }
-
- protected void scheduleNext() {
- synchronized (mLock) {
- if ((mActive = mTasks.poll()) != null) {
- mExecutor.execute(mActive);
- }
- }
- }
- }
-}
diff --git a/appcompat/appcompat/src/main/res/values-or/strings.xml b/appcompat/appcompat/src/main/res/values-or/strings.xml
index 2ce1a310..ad5622b 100644
--- a/appcompat/appcompat/src/main/res/values-or/strings.xml
+++ b/appcompat/appcompat/src/main/res/values-or/strings.xml
@@ -43,5 +43,5 @@
<string name="abc_menu_function_shortcut_label" msgid="375214403600139847">"Function+"</string>
<string name="abc_menu_space_shortcut_label" msgid="5473865519181928982">"ସ୍ପେସ୍"</string>
<string name="abc_menu_enter_shortcut_label" msgid="7986526966204849475">"ଏଣ୍ଟର୍"</string>
- <string name="abc_menu_delete_shortcut_label" msgid="838001238306846836">"ଡିଲିଟ୍ କରନ୍ତୁ"</string>
+ <string name="abc_menu_delete_shortcut_label" msgid="838001238306846836">"ଡିଲିଟ କରନ୍ତୁ"</string>
</resources>
diff --git a/appsearch/appsearch-builtin-types/api/current.txt b/appsearch/appsearch-builtin-types/api/current.txt
index cb472ce..a3244de 100644
--- a/appsearch/appsearch-builtin-types/api/current.txt
+++ b/appsearch/appsearch-builtin-types/api/current.txt
@@ -26,8 +26,8 @@
}
public static final class Alarm.Builder {
- ctor public Alarm.Builder(String, String);
ctor public Alarm.Builder(androidx.appsearch.builtintypes.Alarm);
+ ctor public Alarm.Builder(String, String);
method public androidx.appsearch.builtintypes.Alarm.Builder addAlternateName(String);
method public androidx.appsearch.builtintypes.Alarm build();
method public androidx.appsearch.builtintypes.Alarm.Builder clearAlternateNames();
@@ -63,8 +63,8 @@
}
public static final class AlarmInstance.Builder {
- ctor public AlarmInstance.Builder(String, String, String);
ctor public AlarmInstance.Builder(androidx.appsearch.builtintypes.AlarmInstance);
+ ctor public AlarmInstance.Builder(String, String, String);
method public androidx.appsearch.builtintypes.AlarmInstance.Builder addAlternateName(String);
method public androidx.appsearch.builtintypes.AlarmInstance build();
method public androidx.appsearch.builtintypes.AlarmInstance.Builder clearAlternateNames();
@@ -87,8 +87,8 @@
}
public static final class ContactPoint.Builder {
- ctor public ContactPoint.Builder(String, String, String);
ctor public ContactPoint.Builder(androidx.appsearch.builtintypes.ContactPoint);
+ ctor public ContactPoint.Builder(String, String, String);
method public androidx.appsearch.builtintypes.ContactPoint.Builder addAlternateName(String);
method public androidx.appsearch.builtintypes.ContactPoint build();
method public androidx.appsearch.builtintypes.ContactPoint.Builder clearAlternateNames();
@@ -111,11 +111,11 @@
}
public static final class ImageObject.Builder {
- ctor public ImageObject.Builder(String, String);
ctor public ImageObject.Builder(androidx.appsearch.builtintypes.ImageObject);
+ ctor public ImageObject.Builder(String, String);
method public androidx.appsearch.builtintypes.ImageObject.Builder addAlternateName(String);
- method public androidx.appsearch.builtintypes.ImageObject.Builder addKeyword(String);
method public androidx.appsearch.builtintypes.ImageObject.Builder addKeyword(androidx.appsearch.builtintypes.properties.Keyword);
+ method public androidx.appsearch.builtintypes.ImageObject.Builder addKeyword(String);
method public androidx.appsearch.builtintypes.ImageObject.Builder addKeywords(Iterable<androidx.appsearch.builtintypes.properties.Keyword!>);
method public androidx.appsearch.builtintypes.ImageObject build();
method public androidx.appsearch.builtintypes.ImageObject.Builder clearAlternateNames();
@@ -156,8 +156,8 @@
}
public static final class Person.Builder {
- ctor public Person.Builder(String, String, String);
ctor public Person.Builder(androidx.appsearch.builtintypes.Person);
+ ctor public Person.Builder(String, String, String);
method public androidx.appsearch.builtintypes.Person.Builder addAlternateName(String);
method public androidx.appsearch.builtintypes.Person build();
method public androidx.appsearch.builtintypes.Person.Builder clearAlternateNames();
@@ -198,14 +198,14 @@
}
public static final class Stopwatch.Builder {
- ctor public Stopwatch.Builder(String, String);
ctor public Stopwatch.Builder(androidx.appsearch.builtintypes.Stopwatch);
+ ctor public Stopwatch.Builder(String, String);
method public androidx.appsearch.builtintypes.Stopwatch.Builder addAlternateName(String);
method public androidx.appsearch.builtintypes.Stopwatch build();
method public androidx.appsearch.builtintypes.Stopwatch.Builder clearAlternateNames();
method public androidx.appsearch.builtintypes.Stopwatch.Builder setAccumulatedDurationMillis(long);
- method public androidx.appsearch.builtintypes.Stopwatch.Builder setBaseTimeMillis(long, long, int);
method @RequiresApi(api=android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) public androidx.appsearch.builtintypes.Stopwatch.Builder setBaseTimeMillis(android.content.Context, long, long);
+ method public androidx.appsearch.builtintypes.Stopwatch.Builder setBaseTimeMillis(long, long, int);
method public androidx.appsearch.builtintypes.Stopwatch.Builder setCreationTimestampMillis(long);
method public androidx.appsearch.builtintypes.Stopwatch.Builder setDescription(String?);
method public androidx.appsearch.builtintypes.Stopwatch.Builder setDocumentScore(int);
@@ -224,8 +224,8 @@
}
public static final class StopwatchLap.Builder {
- ctor public StopwatchLap.Builder(String, String);
ctor public StopwatchLap.Builder(androidx.appsearch.builtintypes.StopwatchLap);
+ ctor public StopwatchLap.Builder(String, String);
method public androidx.appsearch.builtintypes.StopwatchLap.Builder addAlternateName(String);
method public androidx.appsearch.builtintypes.StopwatchLap build();
method public androidx.appsearch.builtintypes.StopwatchLap.Builder clearAlternateNames();
@@ -255,8 +255,8 @@
}
public static final class Thing.Builder {
- ctor public Thing.Builder(String, String);
ctor public Thing.Builder(androidx.appsearch.builtintypes.Thing);
+ ctor public Thing.Builder(String, String);
method public androidx.appsearch.builtintypes.Thing.Builder addAlternateName(String);
method public androidx.appsearch.builtintypes.Thing build();
method public androidx.appsearch.builtintypes.Thing.Builder clearAlternateNames();
@@ -292,13 +292,13 @@
}
public static final class Timer.Builder {
- ctor public Timer.Builder(String, String);
ctor public Timer.Builder(androidx.appsearch.builtintypes.Timer);
+ ctor public Timer.Builder(String, String);
method public androidx.appsearch.builtintypes.Timer.Builder addAlternateName(String);
method public androidx.appsearch.builtintypes.Timer build();
method public androidx.appsearch.builtintypes.Timer.Builder clearAlternateNames();
- method public androidx.appsearch.builtintypes.Timer.Builder setBaseTimeMillis(long, long, int);
method @RequiresApi(api=android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) public androidx.appsearch.builtintypes.Timer.Builder setBaseTimeMillis(android.content.Context, long, long);
+ method public androidx.appsearch.builtintypes.Timer.Builder setBaseTimeMillis(long, long, int);
method public androidx.appsearch.builtintypes.Timer.Builder setCreationTimestampMillis(long);
method public androidx.appsearch.builtintypes.Timer.Builder setDescription(String?);
method public androidx.appsearch.builtintypes.Timer.Builder setDocumentScore(int);
diff --git a/appsearch/appsearch-builtin-types/api/public_plus_experimental_current.txt b/appsearch/appsearch-builtin-types/api/public_plus_experimental_current.txt
index cb472ce..a3244de 100644
--- a/appsearch/appsearch-builtin-types/api/public_plus_experimental_current.txt
+++ b/appsearch/appsearch-builtin-types/api/public_plus_experimental_current.txt
@@ -26,8 +26,8 @@
}
public static final class Alarm.Builder {
- ctor public Alarm.Builder(String, String);
ctor public Alarm.Builder(androidx.appsearch.builtintypes.Alarm);
+ ctor public Alarm.Builder(String, String);
method public androidx.appsearch.builtintypes.Alarm.Builder addAlternateName(String);
method public androidx.appsearch.builtintypes.Alarm build();
method public androidx.appsearch.builtintypes.Alarm.Builder clearAlternateNames();
@@ -63,8 +63,8 @@
}
public static final class AlarmInstance.Builder {
- ctor public AlarmInstance.Builder(String, String, String);
ctor public AlarmInstance.Builder(androidx.appsearch.builtintypes.AlarmInstance);
+ ctor public AlarmInstance.Builder(String, String, String);
method public androidx.appsearch.builtintypes.AlarmInstance.Builder addAlternateName(String);
method public androidx.appsearch.builtintypes.AlarmInstance build();
method public androidx.appsearch.builtintypes.AlarmInstance.Builder clearAlternateNames();
@@ -87,8 +87,8 @@
}
public static final class ContactPoint.Builder {
- ctor public ContactPoint.Builder(String, String, String);
ctor public ContactPoint.Builder(androidx.appsearch.builtintypes.ContactPoint);
+ ctor public ContactPoint.Builder(String, String, String);
method public androidx.appsearch.builtintypes.ContactPoint.Builder addAlternateName(String);
method public androidx.appsearch.builtintypes.ContactPoint build();
method public androidx.appsearch.builtintypes.ContactPoint.Builder clearAlternateNames();
@@ -111,11 +111,11 @@
}
public static final class ImageObject.Builder {
- ctor public ImageObject.Builder(String, String);
ctor public ImageObject.Builder(androidx.appsearch.builtintypes.ImageObject);
+ ctor public ImageObject.Builder(String, String);
method public androidx.appsearch.builtintypes.ImageObject.Builder addAlternateName(String);
- method public androidx.appsearch.builtintypes.ImageObject.Builder addKeyword(String);
method public androidx.appsearch.builtintypes.ImageObject.Builder addKeyword(androidx.appsearch.builtintypes.properties.Keyword);
+ method public androidx.appsearch.builtintypes.ImageObject.Builder addKeyword(String);
method public androidx.appsearch.builtintypes.ImageObject.Builder addKeywords(Iterable<androidx.appsearch.builtintypes.properties.Keyword!>);
method public androidx.appsearch.builtintypes.ImageObject build();
method public androidx.appsearch.builtintypes.ImageObject.Builder clearAlternateNames();
@@ -156,8 +156,8 @@
}
public static final class Person.Builder {
- ctor public Person.Builder(String, String, String);
ctor public Person.Builder(androidx.appsearch.builtintypes.Person);
+ ctor public Person.Builder(String, String, String);
method public androidx.appsearch.builtintypes.Person.Builder addAlternateName(String);
method public androidx.appsearch.builtintypes.Person build();
method public androidx.appsearch.builtintypes.Person.Builder clearAlternateNames();
@@ -198,14 +198,14 @@
}
public static final class Stopwatch.Builder {
- ctor public Stopwatch.Builder(String, String);
ctor public Stopwatch.Builder(androidx.appsearch.builtintypes.Stopwatch);
+ ctor public Stopwatch.Builder(String, String);
method public androidx.appsearch.builtintypes.Stopwatch.Builder addAlternateName(String);
method public androidx.appsearch.builtintypes.Stopwatch build();
method public androidx.appsearch.builtintypes.Stopwatch.Builder clearAlternateNames();
method public androidx.appsearch.builtintypes.Stopwatch.Builder setAccumulatedDurationMillis(long);
- method public androidx.appsearch.builtintypes.Stopwatch.Builder setBaseTimeMillis(long, long, int);
method @RequiresApi(api=android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) public androidx.appsearch.builtintypes.Stopwatch.Builder setBaseTimeMillis(android.content.Context, long, long);
+ method public androidx.appsearch.builtintypes.Stopwatch.Builder setBaseTimeMillis(long, long, int);
method public androidx.appsearch.builtintypes.Stopwatch.Builder setCreationTimestampMillis(long);
method public androidx.appsearch.builtintypes.Stopwatch.Builder setDescription(String?);
method public androidx.appsearch.builtintypes.Stopwatch.Builder setDocumentScore(int);
@@ -224,8 +224,8 @@
}
public static final class StopwatchLap.Builder {
- ctor public StopwatchLap.Builder(String, String);
ctor public StopwatchLap.Builder(androidx.appsearch.builtintypes.StopwatchLap);
+ ctor public StopwatchLap.Builder(String, String);
method public androidx.appsearch.builtintypes.StopwatchLap.Builder addAlternateName(String);
method public androidx.appsearch.builtintypes.StopwatchLap build();
method public androidx.appsearch.builtintypes.StopwatchLap.Builder clearAlternateNames();
@@ -255,8 +255,8 @@
}
public static final class Thing.Builder {
- ctor public Thing.Builder(String, String);
ctor public Thing.Builder(androidx.appsearch.builtintypes.Thing);
+ ctor public Thing.Builder(String, String);
method public androidx.appsearch.builtintypes.Thing.Builder addAlternateName(String);
method public androidx.appsearch.builtintypes.Thing build();
method public androidx.appsearch.builtintypes.Thing.Builder clearAlternateNames();
@@ -292,13 +292,13 @@
}
public static final class Timer.Builder {
- ctor public Timer.Builder(String, String);
ctor public Timer.Builder(androidx.appsearch.builtintypes.Timer);
+ ctor public Timer.Builder(String, String);
method public androidx.appsearch.builtintypes.Timer.Builder addAlternateName(String);
method public androidx.appsearch.builtintypes.Timer build();
method public androidx.appsearch.builtintypes.Timer.Builder clearAlternateNames();
- method public androidx.appsearch.builtintypes.Timer.Builder setBaseTimeMillis(long, long, int);
method @RequiresApi(api=android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) public androidx.appsearch.builtintypes.Timer.Builder setBaseTimeMillis(android.content.Context, long, long);
+ method public androidx.appsearch.builtintypes.Timer.Builder setBaseTimeMillis(long, long, int);
method public androidx.appsearch.builtintypes.Timer.Builder setCreationTimestampMillis(long);
method public androidx.appsearch.builtintypes.Timer.Builder setDescription(String?);
method public androidx.appsearch.builtintypes.Timer.Builder setDocumentScore(int);
diff --git a/appsearch/appsearch-builtin-types/api/restricted_current.txt b/appsearch/appsearch-builtin-types/api/restricted_current.txt
index 0123823..a9939c7 100644
--- a/appsearch/appsearch-builtin-types/api/restricted_current.txt
+++ b/appsearch/appsearch-builtin-types/api/restricted_current.txt
@@ -28,8 +28,8 @@
}
public static final class Alarm.Builder {
- ctor public Alarm.Builder(String, String);
ctor public Alarm.Builder(androidx.appsearch.builtintypes.Alarm);
+ ctor public Alarm.Builder(String, String);
method public androidx.appsearch.builtintypes.Alarm.Builder addAlternateName(String);
method public androidx.appsearch.builtintypes.Alarm build();
method public androidx.appsearch.builtintypes.Alarm.Builder clearAlternateNames();
@@ -65,8 +65,8 @@
}
public static final class AlarmInstance.Builder {
- ctor public AlarmInstance.Builder(String, String, String);
ctor public AlarmInstance.Builder(androidx.appsearch.builtintypes.AlarmInstance);
+ ctor public AlarmInstance.Builder(String, String, String);
method public androidx.appsearch.builtintypes.AlarmInstance.Builder addAlternateName(String);
method public androidx.appsearch.builtintypes.AlarmInstance build();
method public androidx.appsearch.builtintypes.AlarmInstance.Builder clearAlternateNames();
@@ -89,8 +89,8 @@
}
public static final class ContactPoint.Builder {
- ctor public ContactPoint.Builder(String, String, String);
ctor public ContactPoint.Builder(androidx.appsearch.builtintypes.ContactPoint);
+ ctor public ContactPoint.Builder(String, String, String);
method public androidx.appsearch.builtintypes.ContactPoint.Builder addAlternateName(String);
method public androidx.appsearch.builtintypes.ContactPoint build();
method public androidx.appsearch.builtintypes.ContactPoint.Builder clearAlternateNames();
@@ -113,11 +113,11 @@
}
public static final class ImageObject.Builder {
- ctor public ImageObject.Builder(String, String);
ctor public ImageObject.Builder(androidx.appsearch.builtintypes.ImageObject);
+ ctor public ImageObject.Builder(String, String);
method public androidx.appsearch.builtintypes.ImageObject.Builder addAlternateName(String);
- method public androidx.appsearch.builtintypes.ImageObject.Builder addKeyword(String);
method public androidx.appsearch.builtintypes.ImageObject.Builder addKeyword(androidx.appsearch.builtintypes.properties.Keyword);
+ method public androidx.appsearch.builtintypes.ImageObject.Builder addKeyword(String);
method public androidx.appsearch.builtintypes.ImageObject.Builder addKeywords(Iterable<androidx.appsearch.builtintypes.properties.Keyword!>);
method public androidx.appsearch.builtintypes.ImageObject build();
method public androidx.appsearch.builtintypes.ImageObject.Builder clearAlternateNames();
@@ -158,8 +158,8 @@
}
public static final class Person.Builder {
- ctor public Person.Builder(String, String, String);
ctor public Person.Builder(androidx.appsearch.builtintypes.Person);
+ ctor public Person.Builder(String, String, String);
method public androidx.appsearch.builtintypes.Person.Builder addAlternateName(String);
method public androidx.appsearch.builtintypes.Person build();
method public androidx.appsearch.builtintypes.Person.Builder clearAlternateNames();
@@ -200,14 +200,14 @@
}
public static final class Stopwatch.Builder {
- ctor public Stopwatch.Builder(String, String);
ctor public Stopwatch.Builder(androidx.appsearch.builtintypes.Stopwatch);
+ ctor public Stopwatch.Builder(String, String);
method public androidx.appsearch.builtintypes.Stopwatch.Builder addAlternateName(String);
method public androidx.appsearch.builtintypes.Stopwatch build();
method public androidx.appsearch.builtintypes.Stopwatch.Builder clearAlternateNames();
method public androidx.appsearch.builtintypes.Stopwatch.Builder setAccumulatedDurationMillis(long);
- method public androidx.appsearch.builtintypes.Stopwatch.Builder setBaseTimeMillis(long, long, int);
method @RequiresApi(api=android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) public androidx.appsearch.builtintypes.Stopwatch.Builder setBaseTimeMillis(android.content.Context, long, long);
+ method public androidx.appsearch.builtintypes.Stopwatch.Builder setBaseTimeMillis(long, long, int);
method public androidx.appsearch.builtintypes.Stopwatch.Builder setCreationTimestampMillis(long);
method public androidx.appsearch.builtintypes.Stopwatch.Builder setDescription(String?);
method public androidx.appsearch.builtintypes.Stopwatch.Builder setDocumentScore(int);
@@ -226,8 +226,8 @@
}
public static final class StopwatchLap.Builder {
- ctor public StopwatchLap.Builder(String, String);
ctor public StopwatchLap.Builder(androidx.appsearch.builtintypes.StopwatchLap);
+ ctor public StopwatchLap.Builder(String, String);
method public androidx.appsearch.builtintypes.StopwatchLap.Builder addAlternateName(String);
method public androidx.appsearch.builtintypes.StopwatchLap build();
method public androidx.appsearch.builtintypes.StopwatchLap.Builder clearAlternateNames();
@@ -257,8 +257,8 @@
}
public static final class Thing.Builder {
- ctor public Thing.Builder(String, String);
ctor public Thing.Builder(androidx.appsearch.builtintypes.Thing);
+ ctor public Thing.Builder(String, String);
method public androidx.appsearch.builtintypes.Thing.Builder addAlternateName(String);
method public androidx.appsearch.builtintypes.Thing build();
method public androidx.appsearch.builtintypes.Thing.Builder clearAlternateNames();
@@ -294,13 +294,13 @@
}
public static final class Timer.Builder {
- ctor public Timer.Builder(String, String);
ctor public Timer.Builder(androidx.appsearch.builtintypes.Timer);
+ ctor public Timer.Builder(String, String);
method public androidx.appsearch.builtintypes.Timer.Builder addAlternateName(String);
method public androidx.appsearch.builtintypes.Timer build();
method public androidx.appsearch.builtintypes.Timer.Builder clearAlternateNames();
- method public androidx.appsearch.builtintypes.Timer.Builder setBaseTimeMillis(long, long, int);
method @RequiresApi(api=android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) public androidx.appsearch.builtintypes.Timer.Builder setBaseTimeMillis(android.content.Context, long, long);
+ method public androidx.appsearch.builtintypes.Timer.Builder setBaseTimeMillis(long, long, int);
method public androidx.appsearch.builtintypes.Timer.Builder setCreationTimestampMillis(long);
method public androidx.appsearch.builtintypes.Timer.Builder setDescription(String?);
method public androidx.appsearch.builtintypes.Timer.Builder setDocumentScore(int);
diff --git a/appsearch/appsearch-builtin-types/build.gradle b/appsearch/appsearch-builtin-types/build.gradle
index 892b427..369bdb7 100644
--- a/appsearch/appsearch-builtin-types/build.gradle
+++ b/appsearch/appsearch-builtin-types/build.gradle
@@ -41,7 +41,7 @@
}
androidx {
- name = 'AppSearch Builtin Types'
+ name = "AppSearch Builtin Types"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = '2021'
description = 'Contains AppSearch Document classes and builders for a variety of common ' +
diff --git a/appsearch/appsearch-debug-view/api/public_plus_experimental_current.txt b/appsearch/appsearch-debug-view/api/public_plus_experimental_current.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/appsearch/appsearch-debug-view/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/appsearch/appsearch-debug-view/build.gradle b/appsearch/appsearch-debug-view/build.gradle
index 1b0c3f2..91cc056 100644
--- a/appsearch/appsearch-debug-view/build.gradle
+++ b/appsearch/appsearch-debug-view/build.gradle
@@ -44,7 +44,7 @@
}
androidx {
- name = "AndroidX AppSearch Debug View"
+ name = "AppSearch Debug View"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2021"
description = "A support library for AndroidX AppSearch that contains activities and views " +
diff --git a/appsearch/appsearch-debug-view/samples/build.gradle b/appsearch/appsearch-debug-view/samples/build.gradle
index 6724661..532b284 100644
--- a/appsearch/appsearch-debug-view/samples/build.gradle
+++ b/appsearch/appsearch-debug-view/samples/build.gradle
@@ -46,7 +46,7 @@
}
androidx {
- name = "AndroidX AppSearch Debug View Sample App"
+ name = "AppSearch Debug View Sample App"
type = LibraryType.SAMPLES
inceptionYear = "2021"
description = "Contains a sample app for integrating the Androidx AppSearch Debug View"
diff --git a/appsearch/appsearch-ktx/api/public_plus_experimental_current.txt b/appsearch/appsearch-ktx/api/public_plus_experimental_current.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/appsearch/appsearch-ktx/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/appsearch/appsearch-ktx/build.gradle b/appsearch/appsearch-ktx/build.gradle
index fd812db..7b75083 100644
--- a/appsearch/appsearch-ktx/build.gradle
+++ b/appsearch/appsearch-ktx/build.gradle
@@ -37,7 +37,7 @@
}
androidx {
- name = 'AndroidX AppSearch - Kotlin Extensions'
+ name = "AppSearch - Kotlin Extensions"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = '2021'
description = 'AndroidX AppSearch - Kotlin Extensions'
diff --git a/appsearch/appsearch-local-storage/api/public_plus_experimental_current.txt b/appsearch/appsearch-local-storage/api/public_plus_experimental_current.txt
deleted file mode 100644
index 7e20080..0000000
--- a/appsearch/appsearch-local-storage/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-// Signature format: 4.0
-package androidx.appsearch.localstorage {
-
- public class LocalStorage {
- method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GlobalSearchSession!> createGlobalSearchSessionAsync(androidx.appsearch.localstorage.LocalStorage.GlobalSearchContext);
- method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSessionAsync(androidx.appsearch.localstorage.LocalStorage.SearchContext);
- }
-
- public static final class LocalStorage.GlobalSearchContext {
- method public java.util.concurrent.Executor getWorkerExecutor();
- }
-
- public static final class LocalStorage.GlobalSearchContext.Builder {
- ctor public LocalStorage.GlobalSearchContext.Builder(android.content.Context);
- method public androidx.appsearch.localstorage.LocalStorage.GlobalSearchContext build();
- method public androidx.appsearch.localstorage.LocalStorage.GlobalSearchContext.Builder setWorkerExecutor(java.util.concurrent.Executor);
- }
-
- public static final class LocalStorage.SearchContext {
- method public String getDatabaseName();
- method public java.util.concurrent.Executor getWorkerExecutor();
- }
-
- public static final class LocalStorage.SearchContext.Builder {
- ctor public LocalStorage.SearchContext.Builder(android.content.Context, String);
- method public androidx.appsearch.localstorage.LocalStorage.SearchContext build();
- method public androidx.appsearch.localstorage.LocalStorage.SearchContext.Builder setWorkerExecutor(java.util.concurrent.Executor);
- }
-
-}
-
diff --git a/appsearch/appsearch-platform-storage/api/public_plus_experimental_current.txt b/appsearch/appsearch-platform-storage/api/public_plus_experimental_current.txt
deleted file mode 100644
index 29bfa55..0000000
--- a/appsearch/appsearch-platform-storage/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-// Signature format: 4.0
-package androidx.appsearch.platformstorage {
-
- @RequiresApi(android.os.Build.VERSION_CODES.S) public final class PlatformStorage {
- method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GlobalSearchSession!> createGlobalSearchSessionAsync(androidx.appsearch.platformstorage.PlatformStorage.GlobalSearchContext);
- method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSessionAsync(androidx.appsearch.platformstorage.PlatformStorage.SearchContext);
- }
-
- public static final class PlatformStorage.GlobalSearchContext {
- method public java.util.concurrent.Executor getWorkerExecutor();
- }
-
- public static final class PlatformStorage.GlobalSearchContext.Builder {
- ctor public PlatformStorage.GlobalSearchContext.Builder(android.content.Context);
- method public androidx.appsearch.platformstorage.PlatformStorage.GlobalSearchContext build();
- method public androidx.appsearch.platformstorage.PlatformStorage.GlobalSearchContext.Builder setWorkerExecutor(java.util.concurrent.Executor);
- }
-
- public static final class PlatformStorage.SearchContext {
- method public String getDatabaseName();
- method public java.util.concurrent.Executor getWorkerExecutor();
- }
-
- public static final class PlatformStorage.SearchContext.Builder {
- ctor public PlatformStorage.SearchContext.Builder(android.content.Context, String);
- method public androidx.appsearch.platformstorage.PlatformStorage.SearchContext build();
- method public androidx.appsearch.platformstorage.PlatformStorage.SearchContext.Builder setWorkerExecutor(java.util.concurrent.Executor);
- }
-
-}
-
diff --git a/appsearch/appsearch-platform-storage/lint-baseline.xml b/appsearch/appsearch-platform-storage/lint-baseline.xml
index 279ab97..d82c712 100644
--- a/appsearch/appsearch-platform-storage/lint-baseline.xml
+++ b/appsearch/appsearch-platform-storage/lint-baseline.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.1.0-alpha07" type="baseline" client="gradle" dependencies="false" name="AGP (8.0.0-beta03)" variant="all" version="8.1.0-alpha07">
+<issues format="6" by="lint 8.1.0-beta01" type="baseline" client="gradle" dependencies="false" name="AGP (8.1.0-beta01)" variant="all" version="8.1.0-beta01">
<issue
id="WrongConstant"
@@ -244,4 +244,31 @@
file="src/main/java/androidx/appsearch/platformstorage/converter/SetSchemaRequestToPlatformConverter.java"/>
</issue>
+ <issue
+ id="PrereleaseSdkCoreDependency"
+ message="Prelease SDK check isAtLeastT cannot be called as this project has a versioned dependency on androidx.core:core"
+ errorLine1=" return BuildCompat.isAtLeastT();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/main/java/androidx/appsearch/platformstorage/FeaturesImpl.java"/>
+ </issue>
+
+ <issue
+ id="PrereleaseSdkCoreDependency"
+ message="Prelease SDK check isAtLeastT cannot be called as this project has a versioned dependency on androidx.core:core"
+ errorLine1=" if (BuildCompat.isAtLeastT()) {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/main/java/androidx/appsearch/platformstorage/converter/GetSchemaResponseToPlatformConverter.java"/>
+ </issue>
+
+ <issue
+ id="PrereleaseSdkCoreDependency"
+ message="Prelease SDK check isAtLeastT cannot be called as this project has a versioned dependency on androidx.core:core"
+ errorLine1=" if (BuildCompat.isAtLeastT()) {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/main/java/androidx/appsearch/platformstorage/converter/SearchResultToPlatformConverter.java"/>
+ </issue>
+
</issues>
diff --git a/appsearch/appsearch/api/current.txt b/appsearch/appsearch/api/current.txt
index 289cdbf..7b7f92e 100644
--- a/appsearch/appsearch/api/current.txt
+++ b/appsearch/appsearch/api/current.txt
@@ -354,16 +354,16 @@
}
public class PropertyPath implements java.lang.Iterable<androidx.appsearch.app.PropertyPath.PathSegment> {
- ctor public PropertyPath(java.util.List<androidx.appsearch.app.PropertyPath.PathSegment!>);
ctor public PropertyPath(String);
+ ctor public PropertyPath(java.util.List<androidx.appsearch.app.PropertyPath.PathSegment!>);
method public androidx.appsearch.app.PropertyPath.PathSegment get(int);
method public java.util.Iterator<androidx.appsearch.app.PropertyPath.PathSegment!> iterator();
method public int size();
}
public static class PropertyPath.PathSegment {
- method public static androidx.appsearch.app.PropertyPath.PathSegment create(String, int);
method public static androidx.appsearch.app.PropertyPath.PathSegment create(String);
+ method public static androidx.appsearch.app.PropertyPath.PathSegment create(String, int);
method public int getPropertyIndex();
method public String getPropertyName();
field public static final int NON_REPEATED_CARDINALITY = -1; // 0xffffffff
@@ -514,8 +514,8 @@
public static final class SearchSpec.Builder {
ctor public SearchSpec.Builder();
- method public androidx.appsearch.app.SearchSpec.Builder addFilterDocumentClasses(java.util.Collection<? extends java.lang.Class<?>>) throws androidx.appsearch.exceptions.AppSearchException;
method public androidx.appsearch.app.SearchSpec.Builder addFilterDocumentClasses(Class<?>!...) throws androidx.appsearch.exceptions.AppSearchException;
+ method public androidx.appsearch.app.SearchSpec.Builder addFilterDocumentClasses(java.util.Collection<? extends java.lang.Class<?>>) throws androidx.appsearch.exceptions.AppSearchException;
method public androidx.appsearch.app.SearchSpec.Builder addFilterNamespaces(java.lang.String!...);
method public androidx.appsearch.app.SearchSpec.Builder addFilterNamespaces(java.util.Collection<java.lang.String!>);
method public androidx.appsearch.app.SearchSpec.Builder addFilterPackageNames(java.lang.String!...);
diff --git a/appsearch/appsearch/api/public_plus_experimental_current.txt b/appsearch/appsearch/api/public_plus_experimental_current.txt
index 289cdbf..7b7f92e 100644
--- a/appsearch/appsearch/api/public_plus_experimental_current.txt
+++ b/appsearch/appsearch/api/public_plus_experimental_current.txt
@@ -354,16 +354,16 @@
}
public class PropertyPath implements java.lang.Iterable<androidx.appsearch.app.PropertyPath.PathSegment> {
- ctor public PropertyPath(java.util.List<androidx.appsearch.app.PropertyPath.PathSegment!>);
ctor public PropertyPath(String);
+ ctor public PropertyPath(java.util.List<androidx.appsearch.app.PropertyPath.PathSegment!>);
method public androidx.appsearch.app.PropertyPath.PathSegment get(int);
method public java.util.Iterator<androidx.appsearch.app.PropertyPath.PathSegment!> iterator();
method public int size();
}
public static class PropertyPath.PathSegment {
- method public static androidx.appsearch.app.PropertyPath.PathSegment create(String, int);
method public static androidx.appsearch.app.PropertyPath.PathSegment create(String);
+ method public static androidx.appsearch.app.PropertyPath.PathSegment create(String, int);
method public int getPropertyIndex();
method public String getPropertyName();
field public static final int NON_REPEATED_CARDINALITY = -1; // 0xffffffff
@@ -514,8 +514,8 @@
public static final class SearchSpec.Builder {
ctor public SearchSpec.Builder();
- method public androidx.appsearch.app.SearchSpec.Builder addFilterDocumentClasses(java.util.Collection<? extends java.lang.Class<?>>) throws androidx.appsearch.exceptions.AppSearchException;
method public androidx.appsearch.app.SearchSpec.Builder addFilterDocumentClasses(Class<?>!...) throws androidx.appsearch.exceptions.AppSearchException;
+ method public androidx.appsearch.app.SearchSpec.Builder addFilterDocumentClasses(java.util.Collection<? extends java.lang.Class<?>>) throws androidx.appsearch.exceptions.AppSearchException;
method public androidx.appsearch.app.SearchSpec.Builder addFilterNamespaces(java.lang.String!...);
method public androidx.appsearch.app.SearchSpec.Builder addFilterNamespaces(java.util.Collection<java.lang.String!>);
method public androidx.appsearch.app.SearchSpec.Builder addFilterPackageNames(java.lang.String!...);
diff --git a/appsearch/appsearch/api/restricted_current.txt b/appsearch/appsearch/api/restricted_current.txt
index 289cdbf..7b7f92e 100644
--- a/appsearch/appsearch/api/restricted_current.txt
+++ b/appsearch/appsearch/api/restricted_current.txt
@@ -354,16 +354,16 @@
}
public class PropertyPath implements java.lang.Iterable<androidx.appsearch.app.PropertyPath.PathSegment> {
- ctor public PropertyPath(java.util.List<androidx.appsearch.app.PropertyPath.PathSegment!>);
ctor public PropertyPath(String);
+ ctor public PropertyPath(java.util.List<androidx.appsearch.app.PropertyPath.PathSegment!>);
method public androidx.appsearch.app.PropertyPath.PathSegment get(int);
method public java.util.Iterator<androidx.appsearch.app.PropertyPath.PathSegment!> iterator();
method public int size();
}
public static class PropertyPath.PathSegment {
- method public static androidx.appsearch.app.PropertyPath.PathSegment create(String, int);
method public static androidx.appsearch.app.PropertyPath.PathSegment create(String);
+ method public static androidx.appsearch.app.PropertyPath.PathSegment create(String, int);
method public int getPropertyIndex();
method public String getPropertyName();
field public static final int NON_REPEATED_CARDINALITY = -1; // 0xffffffff
@@ -514,8 +514,8 @@
public static final class SearchSpec.Builder {
ctor public SearchSpec.Builder();
- method public androidx.appsearch.app.SearchSpec.Builder addFilterDocumentClasses(java.util.Collection<? extends java.lang.Class<?>>) throws androidx.appsearch.exceptions.AppSearchException;
method public androidx.appsearch.app.SearchSpec.Builder addFilterDocumentClasses(Class<?>!...) throws androidx.appsearch.exceptions.AppSearchException;
+ method public androidx.appsearch.app.SearchSpec.Builder addFilterDocumentClasses(java.util.Collection<? extends java.lang.Class<?>>) throws androidx.appsearch.exceptions.AppSearchException;
method public androidx.appsearch.app.SearchSpec.Builder addFilterNamespaces(java.lang.String!...);
method public androidx.appsearch.app.SearchSpec.Builder addFilterNamespaces(java.util.Collection<java.lang.String!>);
method public androidx.appsearch.app.SearchSpec.Builder addFilterPackageNames(java.lang.String!...);
diff --git a/appsearch/appsearch/build.gradle b/appsearch/appsearch/build.gradle
index 7c0365c..f991e23 100644
--- a/appsearch/appsearch/build.gradle
+++ b/appsearch/appsearch/build.gradle
@@ -55,7 +55,7 @@
}
androidx {
- name = 'AndroidX AppSearch'
+ name = "AppSearch"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = '2019'
description = 'AndroidX AppSearch - App Indexing'
diff --git a/appsearch/compiler/build.gradle b/appsearch/compiler/build.gradle
index f2c72b7..cb9caf4 100644
--- a/appsearch/compiler/build.gradle
+++ b/appsearch/compiler/build.gradle
@@ -37,7 +37,7 @@
}
androidx {
- name = 'AndroidX AppSearch Compiler'
+ name = "AppSearch Compiler"
type = LibraryType.ANNOTATION_PROCESSOR
inceptionYear = '2019'
description = 'Compiler for classes annotated with @androidx.appsearch.annotation.Document'
diff --git a/arch/core/core-common/api/public_plus_experimental_current.txt b/arch/core/core-common/api/public_plus_experimental_current.txt
deleted file mode 100644
index 43568b1..0000000
--- a/arch/core/core-common/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-// Signature format: 4.0
-package androidx.arch.core.util {
-
- public interface Function<I, O> {
- method public O! apply(I!);
- }
-
-}
-
diff --git a/arch/core/core-common/build.gradle b/arch/core/core-common/build.gradle
index 8a60844..f8d646f7 100644
--- a/arch/core/core-common/build.gradle
+++ b/arch/core/core-common/build.gradle
@@ -29,7 +29,7 @@
}
androidx {
- name = "Android Arch-Common"
+ name = "Arch-Common"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2017"
description = "Android Arch-Common"
diff --git a/arch/core/core-runtime/api/public_plus_experimental_current.txt b/arch/core/core-runtime/api/public_plus_experimental_current.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/arch/core/core-runtime/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/arch/core/core-runtime/build.gradle b/arch/core/core-runtime/build.gradle
index 6652bdf..f1d60e1 100644
--- a/arch/core/core-runtime/build.gradle
+++ b/arch/core/core-runtime/build.gradle
@@ -27,7 +27,7 @@
}
androidx {
- name = "Android Arch-Runtime"
+ name = "Arch-Runtime"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2017"
description = "Android Arch-Runtime"
diff --git a/arch/core/core-testing/api/public_plus_experimental_current.txt b/arch/core/core-testing/api/public_plus_experimental_current.txt
deleted file mode 100644
index 0303b8a..0000000
--- a/arch/core/core-testing/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-// Signature format: 4.0
-package androidx.arch.core.executor.testing {
-
- public class CountingTaskExecutorRule extends org.junit.rules.TestWatcher {
- ctor public CountingTaskExecutorRule();
- method public void drainTasks(int, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException, java.util.concurrent.TimeoutException;
- method public boolean isIdle();
- method protected void onIdle();
- }
-
- public class InstantTaskExecutorRule extends org.junit.rules.TestWatcher {
- ctor public InstantTaskExecutorRule();
- }
-
-}
-
diff --git a/arch/core/core-testing/build.gradle b/arch/core/core-testing/build.gradle
index 0476e53..4b071ea 100644
--- a/arch/core/core-testing/build.gradle
+++ b/arch/core/core-testing/build.gradle
@@ -37,7 +37,7 @@
}
androidx {
- name = "Android Core-Testing"
+ name = "Core-Testing"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2017"
description = "Android Core-Testing"
diff --git a/asynclayoutinflater/asynclayoutinflater-appcompat/api/public_plus_experimental_current.txt b/asynclayoutinflater/asynclayoutinflater-appcompat/api/public_plus_experimental_current.txt
deleted file mode 100644
index 909bc02..0000000
--- a/asynclayoutinflater/asynclayoutinflater-appcompat/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-// Signature format: 4.0
-package androidx.asynclayoutinflater.appcompat {
-
- public class AsyncAppCompatFactory implements androidx.asynclayoutinflater.view.AsyncLayoutFactory {
- ctor public AsyncAppCompatFactory();
- method public android.view.View? onCreateView(android.view.View?, String, android.content.Context, android.util.AttributeSet);
- method public android.view.View? onCreateView(String, android.content.Context, android.util.AttributeSet);
- }
-
-}
-
diff --git a/asynclayoutinflater/asynclayoutinflater-appcompat/build.gradle b/asynclayoutinflater/asynclayoutinflater-appcompat/build.gradle
index 8f08e8c..a6034b9 100644
--- a/asynclayoutinflater/asynclayoutinflater-appcompat/build.gradle
+++ b/asynclayoutinflater/asynclayoutinflater-appcompat/build.gradle
@@ -13,10 +13,11 @@
}
androidx {
- name = "AsyncLayoutInflater integration for AppCompat"
+ name = "AsyncLayoutInflater AppCompat"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2022"
- description = "A thread-safe LayoutInflater Factory that provides compatibility between AsyncLayoutInflater and AppCompat."
+ description = "A thread-safe LayoutInflater Factory that provides compatibility between " +
+ "AsyncLayoutInflater and AppCompat."
}
android {
diff --git a/asynclayoutinflater/asynclayoutinflater/api/public_plus_experimental_current.txt b/asynclayoutinflater/asynclayoutinflater/api/public_plus_experimental_current.txt
deleted file mode 100644
index dc4faf2..0000000
--- a/asynclayoutinflater/asynclayoutinflater/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-// Signature format: 4.0
-package androidx.asynclayoutinflater.view {
-
- public interface AsyncLayoutFactory extends android.view.LayoutInflater.Factory2 {
- }
-
- public final class AsyncLayoutInflater {
- ctor public AsyncLayoutInflater(android.content.Context);
- ctor public AsyncLayoutInflater(android.content.Context, androidx.asynclayoutinflater.view.AsyncLayoutFactory);
- method @UiThread public void inflate(@LayoutRes int, android.view.ViewGroup?, androidx.asynclayoutinflater.view.AsyncLayoutInflater.OnInflateFinishedListener);
- method @UiThread public void inflate(@LayoutRes int, android.view.ViewGroup?, java.util.concurrent.Executor?, androidx.asynclayoutinflater.view.AsyncLayoutInflater.OnInflateFinishedListener);
- }
-
- public static interface AsyncLayoutInflater.OnInflateFinishedListener {
- method public void onInflateFinished(android.view.View, @LayoutRes int, android.view.ViewGroup?);
- }
-
-}
-
diff --git a/asynclayoutinflater/asynclayoutinflater/build.gradle b/asynclayoutinflater/asynclayoutinflater/build.gradle
index 713ec8e..44ec7c0 100644
--- a/asynclayoutinflater/asynclayoutinflater/build.gradle
+++ b/asynclayoutinflater/asynclayoutinflater/build.gradle
@@ -19,10 +19,10 @@
}
androidx {
- name = "Android Support Library Async Layout Inflater"
+ name = "AsyncLayoutInflater"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
- description = "The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later."
+ description = "Provides support for inflating layouts off the UI thread."
}
android {
diff --git a/autofill/autofill/api/public_plus_experimental_current.txt b/autofill/autofill/api/public_plus_experimental_current.txt
deleted file mode 100644
index 0b0a188..0000000
--- a/autofill/autofill/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,193 +0,0 @@
-// Signature format: 4.0
-package androidx.autofill {
-
- public final class HintConstants {
- method public static String generateSmsOtpHintForCharacterPosition(int);
- field public static final String AUTOFILL_HINT_2FA_APP_OTP = "2faAppOTPCode";
- field public static final String AUTOFILL_HINT_BIRTH_DATE_DAY = "birthDateDay";
- field public static final String AUTOFILL_HINT_BIRTH_DATE_FULL = "birthDateFull";
- field public static final String AUTOFILL_HINT_BIRTH_DATE_MONTH = "birthDateMonth";
- field public static final String AUTOFILL_HINT_BIRTH_DATE_YEAR = "birthDateYear";
- field public static final String AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DATE = "creditCardExpirationDate";
- field public static final String AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DAY = "creditCardExpirationDay";
- field public static final String AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_MONTH = "creditCardExpirationMonth";
- field public static final String AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_YEAR = "creditCardExpirationYear";
- field public static final String AUTOFILL_HINT_CREDIT_CARD_NUMBER = "creditCardNumber";
- field public static final String AUTOFILL_HINT_CREDIT_CARD_SECURITY_CODE = "creditCardSecurityCode";
- field public static final String AUTOFILL_HINT_EMAIL_ADDRESS = "emailAddress";
- field public static final String AUTOFILL_HINT_EMAIL_OTP = "emailOTPCode";
- field public static final String AUTOFILL_HINT_FLIGHT_CONFIRMATION_CODE = "flightConfirmationCode";
- field public static final String AUTOFILL_HINT_FLIGHT_NUMBER = "flightNumber";
- field public static final String AUTOFILL_HINT_GENDER = "gender";
- field public static final String AUTOFILL_HINT_GIFT_CARD_NUMBER = "giftCardNumber";
- field public static final String AUTOFILL_HINT_GIFT_CARD_PIN = "giftCardPIN";
- field public static final String AUTOFILL_HINT_LOYALTY_ACCOUNT_NUMBER = "loyaltyAccountNumber";
- field @Deprecated public static final String AUTOFILL_HINT_NAME = "name";
- field public static final String AUTOFILL_HINT_NEW_PASSWORD = "newPassword";
- field public static final String AUTOFILL_HINT_NEW_USERNAME = "newUsername";
- field public static final String AUTOFILL_HINT_NOT_APPLICABLE = "notApplicable";
- field public static final String AUTOFILL_HINT_PASSWORD = "password";
- field public static final String AUTOFILL_HINT_PERSON_NAME = "personName";
- field public static final String AUTOFILL_HINT_PERSON_NAME_FAMILY = "personFamilyName";
- field public static final String AUTOFILL_HINT_PERSON_NAME_GIVEN = "personGivenName";
- field public static final String AUTOFILL_HINT_PERSON_NAME_MIDDLE = "personMiddleName";
- field public static final String AUTOFILL_HINT_PERSON_NAME_MIDDLE_INITIAL = "personMiddleInitial";
- field public static final String AUTOFILL_HINT_PERSON_NAME_PREFIX = "personNamePrefix";
- field public static final String AUTOFILL_HINT_PERSON_NAME_SUFFIX = "personNameSuffix";
- field @Deprecated public static final String AUTOFILL_HINT_PHONE = "phone";
- field public static final String AUTOFILL_HINT_PHONE_COUNTRY_CODE = "phoneCountryCode";
- field public static final String AUTOFILL_HINT_PHONE_NATIONAL = "phoneNational";
- field public static final String AUTOFILL_HINT_PHONE_NUMBER = "phoneNumber";
- field public static final String AUTOFILL_HINT_PHONE_NUMBER_DEVICE = "phoneNumberDevice";
- field public static final String AUTOFILL_HINT_POSTAL_ADDRESS = "postalAddress";
- field public static final String AUTOFILL_HINT_POSTAL_ADDRESS_APT_NUMBER = "aptNumber";
- field public static final String AUTOFILL_HINT_POSTAL_ADDRESS_COUNTRY = "addressCountry";
- field public static final String AUTOFILL_HINT_POSTAL_ADDRESS_DEPENDENT_LOCALITY = "dependentLocality";
- field public static final String AUTOFILL_HINT_POSTAL_ADDRESS_EXTENDED_ADDRESS = "extendedAddress";
- field public static final String AUTOFILL_HINT_POSTAL_ADDRESS_EXTENDED_POSTAL_CODE = "extendedPostalCode";
- field public static final String AUTOFILL_HINT_POSTAL_ADDRESS_LOCALITY = "addressLocality";
- field public static final String AUTOFILL_HINT_POSTAL_ADDRESS_REGION = "addressRegion";
- field public static final String AUTOFILL_HINT_POSTAL_ADDRESS_STREET_ADDRESS = "streetAddress";
- field public static final String AUTOFILL_HINT_POSTAL_CODE = "postalCode";
- field public static final String AUTOFILL_HINT_PROMO_CODE = "promoCode";
- field public static final String AUTOFILL_HINT_SMS_OTP = "smsOTPCode";
- field public static final String AUTOFILL_HINT_UPI_VPA = "upiVirtualPaymentAddress";
- field public static final String AUTOFILL_HINT_USERNAME = "username";
- field public static final String AUTOFILL_HINT_WIFI_PASSWORD = "wifiPassword";
- }
-
-}
-
-package androidx.autofill.inline {
-
- @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class Renderer {
- method public static android.app.PendingIntent? getAttributionIntent(android.app.slice.Slice);
- method public static android.os.Bundle getSupportedInlineUiVersionsAsBundle();
- method public static android.view.View? render(android.content.Context, android.app.slice.Slice, android.os.Bundle);
- }
-
- @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class SuggestionHintConstants {
- field public static final String SUGGESTION_HINT_CLIPBOARD_CONTENT = "clipboardContent";
- field public static final String SUGGESTION_HINT_SMART_REPLY = "smartReply";
- }
-
- @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class UiVersions {
- method public static java.util.List<java.lang.String!> getVersions(android.os.Bundle);
- method public static androidx.autofill.inline.UiVersions.StylesBuilder newStylesBuilder();
- field public static final String INLINE_UI_VERSION_1 = "androidx.autofill.inline.ui.version:v1";
- }
-
- public static interface UiVersions.Content {
- method public android.app.slice.Slice getSlice();
- }
-
- public static interface UiVersions.Style {
- }
-
- public static final class UiVersions.StylesBuilder {
- method public androidx.autofill.inline.UiVersions.StylesBuilder addStyle(androidx.autofill.inline.UiVersions.Style);
- method public android.os.Bundle build();
- }
-
-}
-
-package androidx.autofill.inline.common {
-
- @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class ImageViewStyle extends androidx.autofill.inline.common.ViewStyle {
- }
-
- public static final class ImageViewStyle.Builder {
- ctor public ImageViewStyle.Builder();
- method public androidx.autofill.inline.common.ImageViewStyle build();
- method public androidx.autofill.inline.common.ImageViewStyle.Builder setBackground(android.graphics.drawable.Icon);
- method public androidx.autofill.inline.common.ImageViewStyle.Builder setBackgroundColor(@ColorInt int);
- method public androidx.autofill.inline.common.ImageViewStyle.Builder setLayoutMargin(int, int, int, int);
- method public androidx.autofill.inline.common.ImageViewStyle.Builder setMaxHeight(int);
- method public androidx.autofill.inline.common.ImageViewStyle.Builder setMaxWidth(int);
- method public androidx.autofill.inline.common.ImageViewStyle.Builder setPadding(int, int, int, int);
- method public androidx.autofill.inline.common.ImageViewStyle.Builder setScaleType(android.widget.ImageView.ScaleType);
- method public androidx.autofill.inline.common.ImageViewStyle.Builder setTintList(android.content.res.ColorStateList);
- }
-
- @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class TextViewStyle extends androidx.autofill.inline.common.ViewStyle {
- }
-
- public static final class TextViewStyle.Builder {
- ctor public TextViewStyle.Builder();
- method public androidx.autofill.inline.common.TextViewStyle build();
- method public androidx.autofill.inline.common.TextViewStyle.Builder setBackground(android.graphics.drawable.Icon);
- method public androidx.autofill.inline.common.TextViewStyle.Builder setBackgroundColor(@ColorInt int);
- method public androidx.autofill.inline.common.TextViewStyle.Builder setLayoutMargin(int, int, int, int);
- method public androidx.autofill.inline.common.TextViewStyle.Builder setPadding(int, int, int, int);
- method public androidx.autofill.inline.common.TextViewStyle.Builder setTextColor(@ColorInt int);
- method public androidx.autofill.inline.common.TextViewStyle.Builder setTextSize(float);
- method public androidx.autofill.inline.common.TextViewStyle.Builder setTextSize(int, float);
- method public androidx.autofill.inline.common.TextViewStyle.Builder setTypeface(String, int);
- }
-
- @RequiresApi(api=android.os.Build.VERSION_CODES.R) public class ViewStyle {
- }
-
- public static final class ViewStyle.Builder {
- ctor public ViewStyle.Builder();
- method public androidx.autofill.inline.common.ViewStyle build();
- method public androidx.autofill.inline.common.ViewStyle.Builder setBackground(android.graphics.drawable.Icon);
- method public androidx.autofill.inline.common.ViewStyle.Builder setBackgroundColor(@ColorInt int);
- method public androidx.autofill.inline.common.ViewStyle.Builder setLayoutMargin(int, int, int, int);
- method public androidx.autofill.inline.common.ViewStyle.Builder setPadding(int, int, int, int);
- }
-
-}
-
-package androidx.autofill.inline.v1 {
-
- @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class InlineSuggestionUi {
- method public static androidx.autofill.inline.v1.InlineSuggestionUi.Content.Builder newContentBuilder(android.app.PendingIntent);
- method public static androidx.autofill.inline.v1.InlineSuggestionUi.Style.Builder newStyleBuilder();
- }
-
- public static final class InlineSuggestionUi.Content implements androidx.autofill.inline.UiVersions.Content {
- method public android.app.PendingIntent? getAttributionIntent();
- method public CharSequence? getContentDescription();
- method public android.graphics.drawable.Icon? getEndIcon();
- method public final android.app.slice.Slice getSlice();
- method public android.graphics.drawable.Icon? getStartIcon();
- method public CharSequence? getSubtitle();
- method public CharSequence? getTitle();
- }
-
- public static final class InlineSuggestionUi.Content.Builder {
- method public androidx.autofill.inline.v1.InlineSuggestionUi.Content build();
- method public androidx.autofill.inline.v1.InlineSuggestionUi.Content.Builder setContentDescription(CharSequence);
- method public androidx.autofill.inline.v1.InlineSuggestionUi.Content.Builder setEndIcon(android.graphics.drawable.Icon);
- method public androidx.autofill.inline.v1.InlineSuggestionUi.Content.Builder setHints(java.util.List<java.lang.String!>);
- method public androidx.autofill.inline.v1.InlineSuggestionUi.Content.Builder setStartIcon(android.graphics.drawable.Icon);
- method public androidx.autofill.inline.v1.InlineSuggestionUi.Content.Builder setSubtitle(CharSequence);
- method public androidx.autofill.inline.v1.InlineSuggestionUi.Content.Builder setTitle(CharSequence);
- }
-
- public static final class InlineSuggestionUi.Style implements androidx.autofill.inline.UiVersions.Style {
- method public androidx.autofill.inline.common.ViewStyle? getChipStyle();
- method public androidx.autofill.inline.common.ImageViewStyle? getEndIconStyle();
- method public int getLayoutDirection();
- method public androidx.autofill.inline.common.ImageViewStyle? getSingleIconChipIconStyle();
- method public androidx.autofill.inline.common.ViewStyle? getSingleIconChipStyle();
- method public androidx.autofill.inline.common.ImageViewStyle? getStartIconStyle();
- method public androidx.autofill.inline.common.TextViewStyle? getSubtitleStyle();
- method public androidx.autofill.inline.common.TextViewStyle? getTitleStyle();
- }
-
- public static final class InlineSuggestionUi.Style.Builder {
- method public androidx.autofill.inline.v1.InlineSuggestionUi.Style build();
- method public androidx.autofill.inline.v1.InlineSuggestionUi.Style.Builder setChipStyle(androidx.autofill.inline.common.ViewStyle);
- method public androidx.autofill.inline.v1.InlineSuggestionUi.Style.Builder setEndIconStyle(androidx.autofill.inline.common.ImageViewStyle);
- method public androidx.autofill.inline.v1.InlineSuggestionUi.Style.Builder setLayoutDirection(int);
- method public androidx.autofill.inline.v1.InlineSuggestionUi.Style.Builder setSingleIconChipIconStyle(androidx.autofill.inline.common.ImageViewStyle);
- method public androidx.autofill.inline.v1.InlineSuggestionUi.Style.Builder setSingleIconChipStyle(androidx.autofill.inline.common.ViewStyle);
- method public androidx.autofill.inline.v1.InlineSuggestionUi.Style.Builder setStartIconStyle(androidx.autofill.inline.common.ImageViewStyle);
- method public androidx.autofill.inline.v1.InlineSuggestionUi.Style.Builder setSubtitleStyle(androidx.autofill.inline.common.TextViewStyle);
- method public androidx.autofill.inline.v1.InlineSuggestionUi.Style.Builder setTitleStyle(androidx.autofill.inline.common.TextViewStyle);
- }
-
-}
-
diff --git a/autofill/autofill/build.gradle b/autofill/autofill/build.gradle
index c4a5853..e5bbb65 100644
--- a/autofill/autofill/build.gradle
+++ b/autofill/autofill/build.gradle
@@ -34,7 +34,7 @@
}
androidx {
- name = "AndroidX Autofill"
+ name = "Autofill"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2019"
description = "AndroidX Autofill"
diff --git a/benchmark/baseline-profile-gradle-plugin/build.gradle b/benchmark/baseline-profile-gradle-plugin/build.gradle
index 9038336..e4884b6 100644
--- a/benchmark/baseline-profile-gradle-plugin/build.gradle
+++ b/benchmark/baseline-profile-gradle-plugin/build.gradle
@@ -72,7 +72,7 @@
}
androidx {
- name = "Android Baseline Profile Gradle Plugin"
+ name = "Baseline Profile Gradle Plugin"
publish = Publish.SNAPSHOT_AND_RELEASE
type = LibraryType.GRADLE_PLUGIN
inceptionYear = "2022"
diff --git a/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/BaselineProfileConsumerExtension.kt b/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/BaselineProfileConsumerExtension.kt
index 0ae17d0..00934a5 100644
--- a/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/BaselineProfileConsumerExtension.kt
+++ b/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/BaselineProfileConsumerExtension.kt
@@ -54,19 +54,30 @@
// These are the default global settings.
it.mergeIntoMain = null
it.baselineProfileOutputDir = "generated/baselineProfiles"
- it.enableR8BaselineProfileRewrite = false
+ it.baselineProfileRulesRewrite = null
+ it.dexLayoutOptimization = null
it.saveInSrc = true
it.automaticGenerationDuringBuild = false
}
/**
- * Controls the global [BaselineProfileVariantConfiguration.enableR8BaselineProfileRewrite].
+ * Controls the global [BaselineProfileVariantConfiguration.baselineProfileRulesRewrite].
* Note that this value is overridden by per variant configurations.
*/
- override var enableR8BaselineProfileRewrite: Boolean?
- get() = main.enableR8BaselineProfileRewrite
+ override var baselineProfileRulesRewrite: Boolean?
+ get() = main.baselineProfileRulesRewrite
set(value) {
- main.enableR8BaselineProfileRewrite = value
+ main.baselineProfileRulesRewrite = value
+ }
+
+ /**
+ * Controls the global [BaselineProfileVariantConfiguration.dexLayoutOptimization].
+ * Note that this value is overridden by per variant configurations.
+ */
+ override var dexLayoutOptimization: Boolean?
+ get() = main.dexLayoutOptimization
+ set(value) {
+ main.dexLayoutOptimization = value
}
/**
@@ -182,7 +193,13 @@
* TODO: This feature is experimental and currently not working properly.
* https://issuetracker.google.com/issue?id=271172067.
*/
- var enableR8BaselineProfileRewrite: Boolean?
+ var baselineProfileRulesRewrite: Boolean?
+
+ /**
+ * Enables R8 to optimize the primary dex file used to contain only classes utilized for
+ * startup.
+ */
+ var dexLayoutOptimization: Boolean?
/**
* Specifies whether generated baseline profiles should be stored in the src folder.
diff --git a/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/BaselineProfileConsumerPlugin.kt b/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/BaselineProfileConsumerPlugin.kt
index 995c84d..b2792c6 100644
--- a/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/BaselineProfileConsumerPlugin.kt
+++ b/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/BaselineProfileConsumerPlugin.kt
@@ -20,6 +20,7 @@
import androidx.baselineprofile.gradle.consumer.task.MainGenerateBaselineProfileTask
import androidx.baselineprofile.gradle.consumer.task.MergeBaselineProfileTask
import androidx.baselineprofile.gradle.consumer.task.PrintConfigurationForVariantTask
+import androidx.baselineprofile.gradle.consumer.task.PrintMapPropertiesForVariantTask
import androidx.baselineprofile.gradle.consumer.task.maybeCreateGenerateTask
import androidx.baselineprofile.gradle.utils.AgpFeature
import androidx.baselineprofile.gradle.utils.AgpPlugin
@@ -169,10 +170,19 @@
variant = variant,
variantConfig = variantConfiguration
)
+ PrintMapPropertiesForVariantTask.registerForVariant(
+ project = project,
+ variant = variant
+ )
// Sets the r8 rewrite baseline profile for the non debuggable variant.
- if (variantConfiguration.enableR8BaselineProfileRewrite) {
- r8Utils.enableR8RulesRewriteForVariant(variant)
+ variantConfiguration.baselineProfileRulesRewrite?.let {
+ r8Utils.setRulesRewriteForVariantEnabled(variant, it)
+ }
+
+ // Sets the r8 startup dex optimization profile for the non debuggable variant.
+ variantConfiguration.dexLayoutOptimization?.let {
+ r8Utils.setDexLayoutOptimizationEnabled(variant, it)
}
// Check if this variant has any direct dependency
diff --git a/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/PerVariantConsumerExtensionManager.kt b/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/PerVariantConsumerExtensionManager.kt
index 6168f23..eb7b035 100644
--- a/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/PerVariantConsumerExtensionManager.kt
+++ b/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/PerVariantConsumerExtensionManager.kt
@@ -52,8 +52,11 @@
val dependencies: List<Pair<Project, String?>>
get() = getMergedListForVariant(variant) { dependencies }
- val enableR8BaselineProfileRewrite: Boolean
- get() = getOverriddenValueForVariant(variant) { enableR8BaselineProfileRewrite }
+ val baselineProfileRulesRewrite: Boolean?
+ get() = getOverriddenValueForVariantAllowNull(variant) { baselineProfileRulesRewrite }
+
+ val dexLayoutOptimization: Boolean?
+ get() = getOverriddenValueForVariantAllowNull(variant) { dexLayoutOptimization }
val saveInSrc: Boolean
get() = getOverriddenValueForVariant(variant) { saveInSrc }
diff --git a/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/task/PrintConfigurationForVariantTask.kt b/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/task/PrintConfigurationForVariantTask.kt
index c9e2d08..d33f08a 100644
--- a/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/task/PrintConfigurationForVariantTask.kt
+++ b/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/task/PrintConfigurationForVariantTask.kt
@@ -49,7 +49,8 @@
"""
mergeIntoMain=`${variantConfig.mergeIntoMain}`
baselineProfileOutputDir=`${variantConfig.baselineProfileOutputDir}`
- enableR8BaselineProfileRewrite=`${variantConfig.enableR8BaselineProfileRewrite}`
+ baselineProfileRulesRewrite=`${variantConfig.baselineProfileRulesRewrite}`
+ dexLayoutOptimization=`${variantConfig.dexLayoutOptimization}`
saveInSrc=`${variantConfig.saveInSrc}`
automaticGenerationDuringBuild=`${variantConfig.automaticGenerationDuringBuild}`
""".trimIndent()
diff --git a/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/task/PrintMapPropertiesForVariantTask.kt b/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/task/PrintMapPropertiesForVariantTask.kt
new file mode 100644
index 0000000..2318a42
--- /dev/null
+++ b/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/task/PrintMapPropertiesForVariantTask.kt
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.baselineprofile.gradle.consumer.task
+
+import androidx.baselineprofile.gradle.utils.maybeRegister
+import com.android.build.api.variant.Variant
+import org.gradle.api.DefaultTask
+import org.gradle.api.Project
+import org.gradle.api.provider.MapProperty
+import org.gradle.api.tasks.Input
+import org.gradle.api.tasks.TaskAction
+import org.gradle.work.DisableCachingByDefault
+
+/**
+ * Only used for testing, this task does not have description or group so that it doesn't show up
+ * in the task list. It prints internal properties to facilitate assertions in integration tests.
+ */
+@DisableCachingByDefault(because = "Not worth caching. Used only for tests.")
+abstract class PrintMapPropertiesForVariantTask : DefaultTask() {
+
+ companion object {
+
+ private const val TASK_NAME_PREFIX = "printExperimentalPropertiesForVariant"
+
+ internal fun registerForVariant(
+ project: Project,
+ variant: Variant,
+ ) {
+ project
+ .tasks
+ .maybeRegister<PrintMapPropertiesForVariantTask>(TASK_NAME_PREFIX, variant.name) {
+ it.properties.set(variant.experimentalProperties)
+ }
+ }
+ }
+
+ @get: Input
+ abstract val properties: MapProperty<String, Any>
+
+ @TaskAction
+ fun exec() {
+ properties.get().forEach { logger.warn("${it.key}=${it.value}") }
+ }
+}
diff --git a/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/utils/AgpPlugin.kt b/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/utils/AgpPlugin.kt
index 413406a..19d2d8d 100644
--- a/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/utils/AgpPlugin.kt
+++ b/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/utils/AgpPlugin.kt
@@ -50,16 +50,6 @@
private val maxAgpVersion: AndroidPluginVersion,
) {
- companion object {
- private val gradleSyncProps by lazy {
- listOf(
- "android.injected.build.model.v2",
- "android.injected.build.model.only",
- "android.injected.build.model.only.advanced",
- )
- }
- }
-
protected val logger: Logger
get() = project.logger
@@ -175,9 +165,7 @@
}
}
- protected fun isGradleSyncRunning() = gradleSyncProps.any {
- it in project.properties && project.properties[it].toString().toBoolean()
- }
+ protected fun isGradleSyncRunning() = project.isGradleSyncRunning()
protected fun afterVariants(block: () -> (Unit)) = afterVariantBlocks.add(block)
@@ -277,6 +265,18 @@
.findByType(com.android.build.gradle.TestExtension::class.java)
}
+private val gradleSyncProps by lazy {
+ listOf(
+ "android.injected.build.model.v2",
+ "android.injected.build.model.only",
+ "android.injected.build.model.only.advanced",
+ )
+}
+
+internal fun Project.isGradleSyncRunning() = gradleSyncProps.any {
+ it in project.properties && project.properties[it].toString().toBoolean()
+}
+
/**
* Enumerates the supported android plugins.
*/
diff --git a/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/utils/R8Utils.kt b/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/utils/R8Utils.kt
index 121dc35..a56a3de 100644
--- a/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/utils/R8Utils.kt
+++ b/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/utils/R8Utils.kt
@@ -32,26 +32,56 @@
companion object {
private const val PROPERTY_R8_REWRITE_BASELINE_PROFILE_RULES =
"android.experimental.art-profile-r8-rewriting"
- private val AGP_MIN_VERSION = AndroidPluginVersion(8, 1, 0).alpha(8)
+ private const val PROPERTY_R8_DEX_LAYOUT_OPTIMIZATION =
+ "android.experimental.r8.dex-startup-optimization"
}
@Suppress("UnstableApiUsage")
- fun enableR8RulesRewriteForVariant(variant: Variant) {
+ fun setRulesRewriteForVariantEnabled(variant: Variant, value: Boolean) {
// Checks the AGP min version to support this.
- if (project.agpVersion() < AGP_MIN_VERSION) {
+ if (project.agpVersion() < AndroidPluginVersion(8, 1, 0).alpha(8)) {
+ if (!project.isGradleSyncRunning()) {
+ throw IllegalStateException(
+ """
+ Unable to set baseline profile rules rewrite property in module `${project.path}`
+ due to minimum AGP version requirement not met. This functionality requires at
+ least AGP version 8.1.0. Please check your module build.gradle file and ensure
+ the property `baselineProfileRulesRewrite` is not set.
+ """.trimIndent()
+ )
+ }
return
}
- // TODO: Checks the R8 version to support this.
-
// TODO: Note that currently there needs to be at least a baseline profile,
// even if empty. For this reason we always add a src set that points to
// an empty file. This can removed after b/271158087 is fixed.
- GenerateDummyBaselineProfileTask.setupForVariant(project, variant)
+ if (value) GenerateDummyBaselineProfileTask.setupForVariant(project, variant)
// Sets the experimental property
- variant.experimentalProperties.put(PROPERTY_R8_REWRITE_BASELINE_PROFILE_RULES, true)
+ variant.experimentalProperties.put(PROPERTY_R8_REWRITE_BASELINE_PROFILE_RULES, value)
+ }
+
+ @Suppress("UnstableApiUsage")
+ fun setDexLayoutOptimizationEnabled(variant: Variant, value: Boolean) {
+
+ // Checks the AGP min version to support this.
+ if (project.agpVersion() < AndroidPluginVersion(8, 1, 0).alpha(11)) {
+ if (!project.isGradleSyncRunning()) {
+ throw IllegalStateException(
+ """
+ Unable to set dex layout optimization property in module `${project.path}` due to
+ minimum AGP version requirement not met. This functionality requires at least AGP
+ version 8.1.0. Please check your module build.gradle file and ensure the property
+ `dexLayoutOptimization` is not set.
+ """.trimIndent()
+ )
+ }
+ }
+
+ // Sets the experimental property
+ variant.experimentalProperties.put(PROPERTY_R8_DEX_LAYOUT_OPTIMIZATION, value)
}
}
diff --git a/benchmark/baseline-profile-gradle-plugin/src/test/kotlin/androidx/baselineprofile/gradle/consumer/BaselineProfileConsumerPluginTest.kt b/benchmark/baseline-profile-gradle-plugin/src/test/kotlin/androidx/baselineprofile/gradle/consumer/BaselineProfileConsumerPluginTest.kt
index a7e1cdf..2ab457a 100644
--- a/benchmark/baseline-profile-gradle-plugin/src/test/kotlin/androidx/baselineprofile/gradle/consumer/BaselineProfileConsumerPluginTest.kt
+++ b/benchmark/baseline-profile-gradle-plugin/src/test/kotlin/androidx/baselineprofile/gradle/consumer/BaselineProfileConsumerPluginTest.kt
@@ -27,6 +27,7 @@
import androidx.baselineprofile.gradle.utils.VariantProfile
import androidx.baselineprofile.gradle.utils.build
import androidx.baselineprofile.gradle.utils.buildAndAssertThatOutput
+import androidx.baselineprofile.gradle.utils.buildAndFailAndAssertThatOutput
import androidx.baselineprofile.gradle.utils.require
import androidx.baselineprofile.gradle.utils.requireInOrder
import com.google.common.truth.Truth.assertThat
@@ -286,9 +287,6 @@
androidPlugin = ANDROID_APPLICATION_PLUGIN,
flavors = true,
dependencyOnProducerProject = true,
- baselineProfileBlock = """
- enableR8BaselineProfileRewrite = false
- """.trimIndent(),
additionalGradleCodeBlock = """
androidComponents {
onVariants(selector()) { variant ->
@@ -343,7 +341,7 @@
}
@Test
- fun testR8RewriteBaselineProfilePropertySet() {
+ fun testExperimentalPropertiesNotSet() {
projectSetup.producer.setupWithFreeAndPaidFlavors(
freeReleaseProfileLines = listOf(Fixtures.CLASS_1_METHOD_1, Fixtures.CLASS_1),
paidReleaseProfileLines = listOf(Fixtures.CLASS_2_METHOD_1, Fixtures.CLASS_2)
@@ -352,31 +350,20 @@
androidPlugin = ANDROID_LIBRARY_PLUGIN,
dependencyOnProducerProject = true,
flavors = true,
- buildTypeAnotherRelease = true,
- additionalGradleCodeBlock = """
- androidComponents {
- onVariants(selector()) { variant ->
- println(variant.name)
- tasks.register("print" + variant.name, PrintTask) { t ->
- def prop = "android.experimental.art-profile-r8-rewriting"
- if (prop in variant.experimentalProperties) {
- def value = variant.experimentalProperties[prop].get().toString()
- t.text.set( "r8-rw=" + value)
- } else {
- t.text.set( "r8-rw=false")
- }
- }
- }
- }
- """.trimIndent()
+ buildTypeAnotherRelease = true
)
arrayOf(
- "printFreeRelease",
- "printPaidRelease",
- "printFreeAnotherRelease",
- "printPaidAnotherRelease",
- ).forEach { gradleRunner.buildAndAssertThatOutput(it) { contains("r8-rw=false") } }
+ "printExperimentalPropertiesForVariantFreeRelease",
+ "printExperimentalPropertiesForVariantPaidRelease",
+ "printExperimentalPropertiesForVariantFreeAnotherRelease",
+ "printExperimentalPropertiesForVariantPaidAnotherRelease",
+ ).forEach {
+ gradleRunner.buildAndAssertThatOutput(it) {
+ doesNotContain("android.experimental.art-profile-r8-rewriting=")
+ doesNotContain("android.experimental.r8.dex-startup-optimization=")
+ }
+ }
}
@Test
@@ -672,7 +659,6 @@
baselineProfileBlock = """
// Global configuration
- enableR8BaselineProfileRewrite = false
saveInSrc = true
automaticGenerationDuringBuild = false
baselineProfileOutputDir = "generated/baselineProfiles"
@@ -681,14 +667,12 @@
// Per variant configuration overrides global configuration.
variants {
free {
- enableR8BaselineProfileRewrite = true
saveInSrc = false
automaticGenerationDuringBuild = true
baselineProfileOutputDir = "somefolder"
mergeIntoMain = false
}
paidRelease {
- enableR8BaselineProfileRewrite = true
saveInSrc = false
automaticGenerationDuringBuild = true
baselineProfileOutputDir = "someOtherfolder"
@@ -702,7 +686,6 @@
gradleRunner.buildAndAssertThatOutput(
"printBaselineProfileExtensionForVariantFreeRelease"
) {
- contains("enableR8BaselineProfileRewrite=`true`")
contains("saveInSrc=`false`")
contains("automaticGenerationDuringBuild=`true`")
contains("baselineProfileOutputDir=`somefolder`")
@@ -712,7 +695,6 @@
gradleRunner.buildAndAssertThatOutput(
"printBaselineProfileExtensionForVariantPaidRelease"
) {
- contains("enableR8BaselineProfileRewrite=`true`")
contains("saveInSrc=`false`")
contains("automaticGenerationDuringBuild=`true`")
contains("baselineProfileOutputDir=`someOtherfolder`")
@@ -732,7 +714,6 @@
baselineProfileBlock = """
// Global configuration
- enableR8BaselineProfileRewrite = false
saveInSrc = true
automaticGenerationDuringBuild = false
baselineProfileOutputDir = "generated/baselineProfiles"
@@ -741,14 +722,12 @@
// Per variant configuration overrides global configuration.
variants {
release {
- enableR8BaselineProfileRewrite = true
saveInSrc = false
automaticGenerationDuringBuild = true
baselineProfileOutputDir = "myReleaseFolder"
mergeIntoMain = false
}
paidRelease {
- enableR8BaselineProfileRewrite = true
saveInSrc = false
automaticGenerationDuringBuild = true
baselineProfileOutputDir = "someOtherfolder"
@@ -762,7 +741,6 @@
gradleRunner.buildAndAssertThatOutput(
"printBaselineProfileExtensionForVariantFreeRelease"
) {
- contains("enableR8BaselineProfileRewrite=`true`")
contains("saveInSrc=`false`")
contains("automaticGenerationDuringBuild=`true`")
contains("baselineProfileOutputDir=`myReleaseFolder`")
@@ -772,7 +750,6 @@
gradleRunner.buildAndAssertThatOutput(
"printBaselineProfileExtensionForVariantPaidRelease"
) {
- contains("enableR8BaselineProfileRewrite=`true`")
contains("saveInSrc=`false`")
contains("automaticGenerationDuringBuild=`true`")
contains("baselineProfileOutputDir=`someOtherfolder`")
@@ -1108,6 +1085,60 @@
assertThat(notFound).isEmpty()
}
}
+
+ @Test
+ fun testRulesRewriteExperimentalPropertiesSet() {
+ projectSetup.producer.setupWithFreeAndPaidFlavors(
+ freeReleaseProfileLines = listOf(Fixtures.CLASS_1_METHOD_1, Fixtures.CLASS_1),
+ paidReleaseProfileLines = listOf(Fixtures.CLASS_2_METHOD_1, Fixtures.CLASS_2)
+ )
+ projectSetup.consumer.setup(
+ androidPlugin = ANDROID_LIBRARY_PLUGIN,
+ dependencyOnProducerProject = true,
+ flavors = true,
+ buildTypeAnotherRelease = true,
+ baselineProfileBlock = """
+ baselineProfileRulesRewrite = true
+ """.trimIndent()
+ )
+ arrayOf(
+ "printExperimentalPropertiesForVariantFreeRelease",
+ "printExperimentalPropertiesForVariantPaidRelease",
+ "printExperimentalPropertiesForVariantFreeAnotherRelease",
+ "printExperimentalPropertiesForVariantPaidAnotherRelease",
+ ).forEach {
+ projectSetup.consumer.gradleRunner.buildAndFailAndAssertThatOutput(it) {
+ contains("Unable to set baseline profile rules rewrite property")
+ }
+ }
+ }
+
+ @Test
+ fun testDexLayoutOptimizationExperimentalPropertiesSet() {
+ projectSetup.producer.setupWithFreeAndPaidFlavors(
+ freeReleaseProfileLines = listOf(Fixtures.CLASS_1_METHOD_1, Fixtures.CLASS_1),
+ paidReleaseProfileLines = listOf(Fixtures.CLASS_2_METHOD_1, Fixtures.CLASS_2)
+ )
+ projectSetup.consumer.setup(
+ androidPlugin = ANDROID_LIBRARY_PLUGIN,
+ dependencyOnProducerProject = true,
+ flavors = true,
+ buildTypeAnotherRelease = true,
+ baselineProfileBlock = """
+ dexLayoutOptimization = true
+ """.trimIndent()
+ )
+ arrayOf(
+ "printExperimentalPropertiesForVariantFreeRelease",
+ "printExperimentalPropertiesForVariantPaidRelease",
+ "printExperimentalPropertiesForVariantFreeAnotherRelease",
+ "printExperimentalPropertiesForVariantPaidAnotherRelease",
+ ).forEach {
+ projectSetup.consumer.gradleRunner.buildAndFailAndAssertThatOutput(it) {
+ contains(" Unable to set dex layout optimization property")
+ }
+ }
+ }
}
@RunWith(JUnit4::class)
@@ -1253,4 +1284,35 @@
assertThat(notFound).isEmpty()
}
}
+
+ @Test
+ fun testExperimentalPropertiesSet() {
+ projectSetup.producer.setupWithFreeAndPaidFlavors(
+ freeReleaseProfileLines = listOf(Fixtures.CLASS_1_METHOD_1, Fixtures.CLASS_1),
+ paidReleaseProfileLines = listOf(Fixtures.CLASS_2_METHOD_1, Fixtures.CLASS_2)
+ )
+ projectSetup.consumer.setup(
+ androidPlugin = ANDROID_LIBRARY_PLUGIN,
+ dependencyOnProducerProject = true,
+ flavors = true,
+ buildTypeAnotherRelease = true,
+ baselineProfileBlock = """
+ baselineProfileRulesRewrite = true
+ dexLayoutOptimization = true
+ """.trimIndent()
+ )
+
+ arrayOf(
+ "printExperimentalPropertiesForVariantFreeRelease",
+ "printExperimentalPropertiesForVariantPaidRelease",
+ "printExperimentalPropertiesForVariantFreeAnotherRelease",
+ "printExperimentalPropertiesForVariantPaidAnotherRelease",
+ ).forEach {
+ projectSetup.consumer.gradleRunner.buildAndAssertThatOutput(it) {
+ // These properties are ignored in agp 8.0
+ contains("android.experimental.art-profile-r8-rewriting=true")
+ contains("android.experimental.r8.dex-startup-optimization=true")
+ }
+ }
+ }
}
diff --git a/benchmark/benchmark-common/api/current.ignore b/benchmark/benchmark-common/api/current.ignore
index 3de172d..6bb53f3 100644
--- a/benchmark/benchmark-common/api/current.ignore
+++ b/benchmark/benchmark-common/api/current.ignore
@@ -15,7 +15,7 @@
Removed class androidx.benchmark.ProfilerKt
RemovedClass: androidx.benchmark.UserspaceTracingKt:
Removed class androidx.benchmark.UserspaceTracingKt
-
-
-RemovedPackage: androidx.benchmark.perfetto:
- Removed package androidx.benchmark.perfetto
+RemovedClass: androidx.benchmark.perfetto.PerfettoConfigKt:
+ Removed class androidx.benchmark.perfetto.PerfettoConfigKt
+RemovedClass: androidx.benchmark.perfetto.UiStateKt:
+ Removed class androidx.benchmark.perfetto.UiStateKt
diff --git a/benchmark/benchmark-common/api/current.txt b/benchmark/benchmark-common/api/current.txt
index fbecc64..80555b0 100644
--- a/benchmark/benchmark-common/api/current.txt
+++ b/benchmark/benchmark-common/api/current.txt
@@ -5,13 +5,71 @@
}
public final class BenchmarkState {
+ ctor @androidx.benchmark.ExperimentalBenchmarkStateApi public BenchmarkState(optional Integer? warmupCount, optional Integer? repeatCount);
+ method @androidx.benchmark.ExperimentalBenchmarkStateApi public java.util.List<java.lang.Double> getMeasurementTimeNs();
method public boolean keepRunning();
method public void pauseTiming();
+ method @androidx.benchmark.BenchmarkState.Companion.ExperimentalExternalReport public static void reportData(String className, String testName, @IntRange(from=0L) long totalRunTimeNs, java.util.List<java.lang.Long> dataNs, @IntRange(from=0L) int warmupIterations, @IntRange(from=0L) long thermalThrottleSleepSeconds, @IntRange(from=1L) int repeatIterations);
method public void resumeTiming();
field public static final androidx.benchmark.BenchmarkState.Companion Companion;
}
public static final class BenchmarkState.Companion {
+ method @androidx.benchmark.BenchmarkState.Companion.ExperimentalExternalReport public void reportData(String className, String testName, @IntRange(from=0L) long totalRunTimeNs, java.util.List<java.lang.Long> dataNs, @IntRange(from=0L) int warmupIterations, @IntRange(from=0L) long thermalThrottleSleepSeconds, @IntRange(from=1L) int repeatIterations);
+ }
+
+ @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.FUNCTION) public static @interface BenchmarkState.Companion.ExperimentalExternalReport {
+ }
+
+ @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalBenchmarkStateApi {
+ }
+
+}
+
+package androidx.benchmark.perfetto {
+
+ @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalPerfettoCaptureApi {
+ }
+
+ @androidx.benchmark.perfetto.ExperimentalPerfettoCaptureApi public abstract sealed class PerfettoConfig {
+ }
+
+ public static final class PerfettoConfig.Binary extends androidx.benchmark.perfetto.PerfettoConfig {
+ ctor public PerfettoConfig.Binary(byte[] bytes);
+ method public byte[] getBytes();
+ property public final byte[] bytes;
+ }
+
+ public static final class PerfettoConfig.Text extends androidx.benchmark.perfetto.PerfettoConfig {
+ ctor public PerfettoConfig.Text(String text);
+ method public String getText();
+ property public final String text;
+ }
+
+ @RequiresApi(23) @androidx.benchmark.perfetto.ExperimentalPerfettoCaptureApi public final class PerfettoTrace {
+ ctor public PerfettoTrace(String path);
+ method public String getPath();
+ method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public static void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public static void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public static void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public static void record(String fileLabel, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ property public final String path;
+ field public static final androidx.benchmark.perfetto.PerfettoTrace.Companion Companion;
+ }
+
+ public static final class PerfettoTrace.Companion {
+ method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public void record(String fileLabel, kotlin.jvm.functions.Function0<kotlin.Unit> block);
}
}
diff --git a/benchmark/benchmark-common/api/public_plus_experimental_current.txt b/benchmark/benchmark-common/api/public_plus_experimental_current.txt
deleted file mode 100644
index c948ed9..0000000
--- a/benchmark/benchmark-common/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,76 +0,0 @@
-// Signature format: 4.0
-package androidx.benchmark {
-
- public final class ArgumentsKt {
- }
-
- public final class BenchmarkState {
- ctor @androidx.benchmark.ExperimentalBenchmarkStateApi public BenchmarkState(optional Integer? warmupCount, optional Integer? repeatCount);
- method @androidx.benchmark.ExperimentalBenchmarkStateApi public java.util.List<java.lang.Double> getMeasurementTimeNs();
- method public boolean keepRunning();
- method public void pauseTiming();
- method @androidx.benchmark.BenchmarkState.Companion.ExperimentalExternalReport public static void reportData(String className, String testName, @IntRange(from=0L) long totalRunTimeNs, java.util.List<java.lang.Long> dataNs, @IntRange(from=0L) int warmupIterations, @IntRange(from=0L) long thermalThrottleSleepSeconds, @IntRange(from=1L) int repeatIterations);
- method public void resumeTiming();
- field public static final androidx.benchmark.BenchmarkState.Companion Companion;
- }
-
- public static final class BenchmarkState.Companion {
- method @androidx.benchmark.BenchmarkState.Companion.ExperimentalExternalReport public void reportData(String className, String testName, @IntRange(from=0L) long totalRunTimeNs, java.util.List<java.lang.Long> dataNs, @IntRange(from=0L) int warmupIterations, @IntRange(from=0L) long thermalThrottleSleepSeconds, @IntRange(from=1L) int repeatIterations);
- }
-
- @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.FUNCTION) public static @interface BenchmarkState.Companion.ExperimentalExternalReport {
- }
-
- @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalBenchmarkStateApi {
- }
-
-}
-
-package androidx.benchmark.perfetto {
-
- @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalPerfettoCaptureApi {
- }
-
- @androidx.benchmark.perfetto.ExperimentalPerfettoCaptureApi public abstract sealed class PerfettoConfig {
- }
-
- public static final class PerfettoConfig.Binary extends androidx.benchmark.perfetto.PerfettoConfig {
- ctor public PerfettoConfig.Binary(byte[] bytes);
- method public byte[] getBytes();
- property public final byte[] bytes;
- }
-
- public static final class PerfettoConfig.Text extends androidx.benchmark.perfetto.PerfettoConfig {
- ctor public PerfettoConfig.Text(String text);
- method public String getText();
- property public final String text;
- }
-
- @RequiresApi(23) @androidx.benchmark.perfetto.ExperimentalPerfettoCaptureApi public final class PerfettoTrace {
- ctor public PerfettoTrace(String path);
- method public String getPath();
- method public static void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0<kotlin.Unit> block);
- method public static void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
- method public static void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, kotlin.jvm.functions.Function0<kotlin.Unit> block);
- method public static void record(String fileLabel, kotlin.jvm.functions.Function0<kotlin.Unit> block);
- method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0<kotlin.Unit> block);
- method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
- method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
- method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, kotlin.jvm.functions.Function0<kotlin.Unit> block);
- property public final String path;
- field public static final androidx.benchmark.perfetto.PerfettoTrace.Companion Companion;
- }
-
- public static final class PerfettoTrace.Companion {
- method public void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0<kotlin.Unit> block);
- method public void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
- method public void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, kotlin.jvm.functions.Function0<kotlin.Unit> block);
- method public void record(String fileLabel, kotlin.jvm.functions.Function0<kotlin.Unit> block);
- method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0<kotlin.Unit> block);
- method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
- method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
- method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, kotlin.jvm.functions.Function0<kotlin.Unit> block);
- }
-
-}
-
diff --git a/benchmark/benchmark-common/api/restricted_current.ignore b/benchmark/benchmark-common/api/restricted_current.ignore
index 3de172d..6bb53f3 100644
--- a/benchmark/benchmark-common/api/restricted_current.ignore
+++ b/benchmark/benchmark-common/api/restricted_current.ignore
@@ -15,7 +15,7 @@
Removed class androidx.benchmark.ProfilerKt
RemovedClass: androidx.benchmark.UserspaceTracingKt:
Removed class androidx.benchmark.UserspaceTracingKt
-
-
-RemovedPackage: androidx.benchmark.perfetto:
- Removed package androidx.benchmark.perfetto
+RemovedClass: androidx.benchmark.perfetto.PerfettoConfigKt:
+ Removed class androidx.benchmark.perfetto.PerfettoConfigKt
+RemovedClass: androidx.benchmark.perfetto.UiStateKt:
+ Removed class androidx.benchmark.perfetto.UiStateKt
diff --git a/benchmark/benchmark-common/api/restricted_current.txt b/benchmark/benchmark-common/api/restricted_current.txt
index df789c6..ca38a9f 100644
--- a/benchmark/benchmark-common/api/restricted_current.txt
+++ b/benchmark/benchmark-common/api/restricted_current.txt
@@ -5,15 +5,73 @@
}
public final class BenchmarkState {
+ ctor @androidx.benchmark.ExperimentalBenchmarkStateApi public BenchmarkState(optional Integer? warmupCount, optional Integer? repeatCount);
+ method @androidx.benchmark.ExperimentalBenchmarkStateApi public java.util.List<java.lang.Double> getMeasurementTimeNs();
method public boolean keepRunning();
method @kotlin.PublishedApi internal boolean keepRunningInternal();
method public void pauseTiming();
+ method @androidx.benchmark.BenchmarkState.Companion.ExperimentalExternalReport public static void reportData(String className, String testName, @IntRange(from=0L) long totalRunTimeNs, java.util.List<java.lang.Long> dataNs, @IntRange(from=0L) int warmupIterations, @IntRange(from=0L) long thermalThrottleSleepSeconds, @IntRange(from=1L) int repeatIterations);
method public void resumeTiming();
field public static final androidx.benchmark.BenchmarkState.Companion Companion;
field @kotlin.PublishedApi internal int iterationsRemaining;
}
public static final class BenchmarkState.Companion {
+ method @androidx.benchmark.BenchmarkState.Companion.ExperimentalExternalReport public void reportData(String className, String testName, @IntRange(from=0L) long totalRunTimeNs, java.util.List<java.lang.Long> dataNs, @IntRange(from=0L) int warmupIterations, @IntRange(from=0L) long thermalThrottleSleepSeconds, @IntRange(from=1L) int repeatIterations);
+ }
+
+ @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.FUNCTION) public static @interface BenchmarkState.Companion.ExperimentalExternalReport {
+ }
+
+ @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalBenchmarkStateApi {
+ }
+
+}
+
+package androidx.benchmark.perfetto {
+
+ @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalPerfettoCaptureApi {
+ }
+
+ @androidx.benchmark.perfetto.ExperimentalPerfettoCaptureApi public abstract sealed class PerfettoConfig {
+ }
+
+ public static final class PerfettoConfig.Binary extends androidx.benchmark.perfetto.PerfettoConfig {
+ ctor public PerfettoConfig.Binary(byte[] bytes);
+ method public byte[] getBytes();
+ property public final byte[] bytes;
+ }
+
+ public static final class PerfettoConfig.Text extends androidx.benchmark.perfetto.PerfettoConfig {
+ ctor public PerfettoConfig.Text(String text);
+ method public String getText();
+ property public final String text;
+ }
+
+ @RequiresApi(23) @androidx.benchmark.perfetto.ExperimentalPerfettoCaptureApi public final class PerfettoTrace {
+ ctor public PerfettoTrace(String path);
+ method public String getPath();
+ method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public static void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public static void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public static void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public static void record(String fileLabel, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ property public final String path;
+ field public static final androidx.benchmark.perfetto.PerfettoTrace.Companion Companion;
+ }
+
+ public static final class PerfettoTrace.Companion {
+ method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public void record(String fileLabel, kotlin.jvm.functions.Function0<kotlin.Unit> block);
}
}
diff --git a/benchmark/benchmark-common/build.gradle b/benchmark/benchmark-common/build.gradle
index e8f2eca..b66a11b 100644
--- a/benchmark/benchmark-common/build.gradle
+++ b/benchmark/benchmark-common/build.gradle
@@ -66,7 +66,7 @@
}
androidx {
- name = "Android Benchmark - Common"
+ name = "Benchmark - Common"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "Android Benchmark - Common"
diff --git a/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/BenchmarkStateTest.kt b/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/BenchmarkStateTest.kt
index 737b39d..ceb4d5e 100644
--- a/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/BenchmarkStateTest.kt
+++ b/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/BenchmarkStateTest.kt
@@ -23,6 +23,9 @@
import androidx.test.filters.LargeTest
import androidx.test.filters.SdkSuppress
import androidx.test.rule.GrantPermissionRule
+import java.util.concurrent.TimeUnit
+import kotlin.test.assertFailsWith
+import kotlin.test.assertTrue
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotEquals
import org.junit.Assert.assertNotNull
@@ -33,9 +36,6 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.TimeUnit
-import kotlin.test.assertFailsWith
-import kotlin.test.assertTrue
@LargeTest
@RunWith(AndroidJUnit4::class)
diff --git a/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/ConfigurationErrorTest.kt b/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/ConfigurationErrorTest.kt
index 7342c236..80df5f0 100644
--- a/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/ConfigurationErrorTest.kt
+++ b/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/ConfigurationErrorTest.kt
@@ -18,13 +18,13 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
+import kotlin.test.assertEquals
+import kotlin.test.assertFailsWith
+import kotlin.test.assertNotNull
import org.junit.Assert.assertNull
import org.junit.Assert.assertTrue
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.test.assertEquals
-import kotlin.test.assertFailsWith
-import kotlin.test.assertNotNull
@RunWith(AndroidJUnit4::class)
@SmallTest
diff --git a/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/PerfettoHelperTest.kt b/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/PerfettoHelperTest.kt
index a919048..7aa7c6e 100644
--- a/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/PerfettoHelperTest.kt
+++ b/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/PerfettoHelperTest.kt
@@ -23,15 +23,15 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import androidx.test.filters.SdkSuppress
+import kotlin.test.assertEquals
+import kotlin.test.assertFalse
+import kotlin.test.assertNotEquals
+import kotlin.test.assertTrue
import org.junit.After
import org.junit.Assume
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.test.assertEquals
-import kotlin.test.assertFalse
-import kotlin.test.assertNotEquals
-import kotlin.test.assertTrue
@LargeTest
@SdkSuppress(minSdkVersion = 23)
@@ -53,8 +53,12 @@
// start perfetto
val capture = PerfettoCapture(unbundled)
- capture.start(PerfettoConfig.Benchmark(listOf(Packages.TEST)))
-
+ capture.start(
+ PerfettoConfig.Benchmark(
+ appTagPackages = listOf(Packages.TEST),
+ useStackSamplingConfig = false
+ )
+ )
// should be at least one perfetto process
assertNotEquals(illegal = listOf(), actual = getPerfettoPids())
assertTrue(capture.isRunning())
diff --git a/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/PerfettoTraceTest.kt b/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/PerfettoTraceTest.kt
index affb068..e612a1b 100644
--- a/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/PerfettoTraceTest.kt
+++ b/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/PerfettoTraceTest.kt
@@ -141,7 +141,8 @@
perfettoConfig(
atraceApps = listOf(
InstrumentationRegistry.getInstrumentation().targetContext.packageName
- )
+ ),
+ stackSamplingConfig = null
).validateAndEncode()
)
)
diff --git a/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/ResultWriterTest.kt b/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/ResultWriterTest.kt
index 02231c1d..73a35d4 100644
--- a/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/ResultWriterTest.kt
+++ b/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/ResultWriterTest.kt
@@ -19,12 +19,12 @@
import android.os.Build
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
+import kotlin.test.assertTrue
import org.junit.Assert.assertEquals
import org.junit.Rule
import org.junit.Test
import org.junit.rules.TemporaryFolder
import org.junit.runner.RunWith
-import kotlin.test.assertTrue
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/UserspaceTracingTest.kt b/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/UserspaceTracingTest.kt
index 73f5067..8b8bfb0 100644
--- a/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/UserspaceTracingTest.kt
+++ b/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/UserspaceTracingTest.kt
@@ -19,6 +19,8 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
+import java.io.File
+import kotlin.test.assertNotNull
import org.junit.After
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
@@ -28,8 +30,6 @@
import perfetto.protos.TracePacket
import perfetto.protos.TrackDescriptor
import perfetto.protos.TrackEvent
-import java.io.File
-import kotlin.test.assertNotNull
@RunWith(AndroidJUnit4::class)
@SmallTest
diff --git a/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/WarmupManagerTest.kt b/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/WarmupManagerTest.kt
index 9b2eac8..8ab7d68 100644
--- a/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/WarmupManagerTest.kt
+++ b/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/WarmupManagerTest.kt
@@ -18,11 +18,11 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
+import java.util.concurrent.TimeUnit
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.TimeUnit
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/perfetto/AtraceTagTest.kt b/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/perfetto/AtraceTagTest.kt
index c5f13d6..749c4f5 100644
--- a/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/perfetto/AtraceTagTest.kt
+++ b/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/perfetto/AtraceTagTest.kt
@@ -20,12 +20,12 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
-import org.junit.Assume
-import org.junit.Test
-import org.junit.runner.RunWith
import kotlin.test.assertContains
import kotlin.test.assertEquals
import kotlin.test.assertNotEquals
+import org.junit.Assume
+import org.junit.Test
+import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
@SdkSuppress(minSdkVersion = 21)
diff --git a/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/perfetto/PerfettoConfigTest.kt b/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/perfetto/PerfettoConfigTest.kt
index f1815b3..d97fdced 100644
--- a/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/perfetto/PerfettoConfigTest.kt
+++ b/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/perfetto/PerfettoConfigTest.kt
@@ -20,16 +20,16 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
+import kotlin.test.assertEquals
+import kotlin.test.assertFailsWith
+import kotlin.test.assertFalse
+import kotlin.test.assertNotNull
import org.junit.Assert.assertTrue
import org.junit.Test
import org.junit.runner.RunWith
import perfetto.protos.DataSourceConfig
import perfetto.protos.FtraceConfig
import perfetto.protos.TraceConfig
-import kotlin.test.assertEquals
-import kotlin.test.assertFailsWith
-import kotlin.test.assertFalse
-import kotlin.test.assertNotNull
@RunWith(AndroidJUnit4::class)
@SmallTest
@@ -37,7 +37,7 @@
@Test
fun ftraceBasics() {
val atraceApps = listOf(Packages.TEST)
- val ftraceDataSource = perfettoConfig(atraceApps)
+ val ftraceDataSource = perfettoConfig(atraceApps = atraceApps, stackSamplingConfig = null)
.data_sources
.first { it.config?.name == "linux.ftrace" }
@@ -57,7 +57,10 @@
@Test
fun validateAndEncode() {
// default config shouldn't throw
- perfettoConfig(listOf(Packages.TEST)).validateAndEncode()
+ perfettoConfig(
+ atraceApps = listOf(Packages.TEST),
+ stackSamplingConfig = null
+ ).validateAndEncode()
}
@SdkSuppress(minSdkVersion = 21)
@@ -124,7 +127,7 @@
@Test
fun validateAndEncode_invalidLength() {
val invalidConfig = perfettoConfig(
- listOf(
+ atraceApps = listOf(
"0123456789",
"0123456789",
"0123456789",
@@ -134,7 +137,8 @@
"0123456789",
"0123456789",
"0123456789",
- )
+ ),
+ stackSamplingConfig = null
)
val exception = assertFailsWith<IllegalStateException> {
invalidConfig.validateAndEncode()
diff --git a/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/perfetto/UiStateTest.kt b/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/perfetto/UiStateTest.kt
index 101ea48..9bf3860 100644
--- a/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/perfetto/UiStateTest.kt
+++ b/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/perfetto/UiStateTest.kt
@@ -19,6 +19,8 @@
import androidx.benchmark.createTempFileFromAsset
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
+import java.io.File
+import kotlin.test.assertEquals
import okio.ByteString
import org.junit.Assert.assertTrue
import org.junit.Test
@@ -26,8 +28,6 @@
import perfetto.protos.Trace
import perfetto.protos.TracePacket
import perfetto.protos.UiState
-import java.io.File
-import kotlin.test.assertEquals
@RunWith(AndroidJUnit4::class)
@SmallTest
diff --git a/benchmark/benchmark-common/src/main/java/androidx/benchmark/Errors.kt b/benchmark/benchmark-common/src/main/java/androidx/benchmark/Errors.kt
index 6403312..ecbba2a 100644
--- a/benchmark/benchmark-common/src/main/java/androidx/benchmark/Errors.kt
+++ b/benchmark/benchmark-common/src/main/java/androidx/benchmark/Errors.kt
@@ -22,13 +22,15 @@
import android.os.BatteryManager
import android.os.Build
import android.util.Log
+import androidx.annotation.RestrictTo
import androidx.test.platform.app.InstrumentationRegistry
import java.io.File
/**
* Lazy-initialized test-suite global state for errors around measurement inaccuracy.
*/
-internal object Errors {
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+object Errors {
/**
* Same as trimMargins, but add newlines on either side.
*/
diff --git a/benchmark/benchmark-common/src/main/java/androidx/benchmark/Profiler.kt b/benchmark/benchmark-common/src/main/java/androidx/benchmark/Profiler.kt
index 7028319..ae631c1 100644
--- a/benchmark/benchmark-common/src/main/java/androidx/benchmark/Profiler.kt
+++ b/benchmark/benchmark-common/src/main/java/androidx/benchmark/Profiler.kt
@@ -23,6 +23,7 @@
import androidx.annotation.VisibleForTesting
import androidx.benchmark.BenchmarkState.Companion.TAG
import androidx.benchmark.Outputs.dateToFileName
+import androidx.benchmark.perfetto.StackSamplingConfig
import androidx.benchmark.simpleperf.ProfileSession
import androidx.benchmark.simpleperf.RecordOptions
@@ -47,6 +48,7 @@
abstract fun start(traceUniqueName: String): ResultFile?
abstract fun stop()
+ internal open fun config(packageNames: List<String>): StackSamplingConfig? = null
/**
* Measure exactly one loop (one repeat, one iteration).
@@ -260,5 +262,11 @@
securityPerfHarden.resetIfOverridden()
}
+ override fun config(packageNames: List<String>) = StackSamplingConfig(
+ packageNames = packageNames,
+ frequency = Arguments.profilerSampleFrequency.toLong(),
+ duration = Arguments.profilerSampleDurationSeconds,
+ )
+
override val requiresLibraryOutputDir: Boolean = false
}
diff --git a/benchmark/benchmark-common/src/main/java/androidx/benchmark/perfetto/PerfettoConfig.kt b/benchmark/benchmark-common/src/main/java/androidx/benchmark/perfetto/PerfettoConfig.kt
index 2ea9b46..77e58ab 100644
--- a/benchmark/benchmark-common/src/main/java/androidx/benchmark/perfetto/PerfettoConfig.kt
+++ b/benchmark/benchmark-common/src/main/java/androidx/benchmark/perfetto/PerfettoConfig.kt
@@ -19,12 +19,16 @@
import android.os.Build
import androidx.annotation.RequiresApi
import androidx.annotation.RestrictTo
+import androidx.benchmark.Arguments
import androidx.benchmark.Shell
import java.io.File
-import perfetto.protos.DataSourceConfig
import perfetto.protos.AndroidPowerConfig
+import perfetto.protos.DataSourceConfig
import perfetto.protos.FtraceConfig
+import perfetto.protos.HeapprofdConfig
import perfetto.protos.MeminfoCounters
+import perfetto.protos.PerfEventConfig
+import perfetto.protos.PerfEvents
import perfetto.protos.ProcessStatsConfig
import perfetto.protos.SysStatsConfig
import perfetto.protos.TraceConfig
@@ -81,17 +85,24 @@
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
class Benchmark(
- private val appTagPackages: List<String>
+ private val appTagPackages: List<String>,
+ private val useStackSamplingConfig: Boolean,
) : PerfettoConfig(isTextProto = false) {
@RequiresApi(23)
override fun writeTo(file: File) {
+ val stackSamplingConfig = if (useStackSamplingConfig) {
+ Arguments.profiler?.config(appTagPackages)
+ } else {
+ null
+ }
file.writeBytes(
perfettoConfig(
atraceApps = if (Build.VERSION.SDK_INT <= 28 || appTagPackages.isEmpty()) {
appTagPackages
} else {
listOf("*")
- }
+ },
+ stackSamplingConfig = stackSamplingConfig
).validateAndEncode()
)
}
@@ -157,19 +168,22 @@
)
)
-private val PROCESS_STATS_DATASOURCE = TraceConfig.DataSource(
- config = DataSourceConfig(
- name = "linux.process_stats",
- target_buffer = 1,
- process_stats_config = ProcessStatsConfig(
- proc_stats_poll_ms = 10000,
- // This flag appears to be unreliable on API 29 unbundled perfetto, so to avoid very
- // frequent proc stats polling to name processes correctly, we currently use unbundled
- // perfetto on API 29, even though the bundled version exists. (b/218668335)
- scan_all_processes_on_start = true
+private fun processStatsDataSource(stackSamplingConfig: StackSamplingConfig?):
+ TraceConfig.DataSource {
+ return TraceConfig.DataSource(
+ config = DataSourceConfig(
+ name = "linux.process_stats",
+ target_buffer = 1,
+ process_stats_config = ProcessStatsConfig(
+ proc_stats_poll_ms = stackSamplingConfig?.frequency?.toInt() ?: 10000,
+ // This flag appears to be unreliable on API 29 unbundled perfetto, so to avoid very
+ // frequent proc stats polling to name processes correctly, we currently use unbundled
+ // perfetto on API 29, even though the bundled version exists. (b/218668335)
+ scan_all_processes_on_start = true
+ )
)
)
-)
+}
private val PACKAGE_LIST_DATASOURCE = TraceConfig.DataSource(
config = DataSourceConfig(
@@ -226,6 +240,72 @@
)
/**
+ * A Perfetto data source to enable stack sampling.
+ */
+private fun stackSamplingSource(
+ config: StackSamplingConfig,
+): List<TraceConfig.DataSource> {
+ val sources = mutableListOf<TraceConfig.DataSource>()
+ sources += TraceConfig.DataSource(
+ config = DataSourceConfig(
+ name = "linux.perf",
+ target_buffer = 1,
+ perf_event_config = PerfEventConfig(
+ timebase = PerfEvents.Timebase(
+ counter = PerfEvents.Counter.SW_CPU_CLOCK,
+ frequency = config.frequency,
+ timestamp_clock = PerfEvents.PerfClock.PERF_CLOCK_MONOTONIC
+ ),
+ callstack_sampling = PerfEventConfig.CallstackSampling(
+ scope = PerfEventConfig.Scope(
+ target_cmdline = config.packageNames
+ )
+ ),
+ kernel_frames = false
+ )
+ )
+ )
+ sources += TraceConfig.DataSource(
+ config = DataSourceConfig(
+ name = "linux.perf",
+ target_buffer = 1,
+ perf_event_config = PerfEventConfig(
+ timebase = PerfEvents.Timebase(
+ tracepoint = PerfEvents.Tracepoint(
+ name = "sched_switch"
+ ),
+ period = 1
+ ),
+ callstack_sampling = PerfEventConfig.CallstackSampling(
+ scope = PerfEventConfig.Scope(
+ target_cmdline = config.packageNames
+ )
+ ),
+ kernel_frames = false
+ )
+ )
+ )
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+ // https://perfetto.dev/docs/reference/trace-config-proto#HeapprofdConfig
+ sources += TraceConfig.DataSource(
+ config = DataSourceConfig(
+ name = "android.heapprofd",
+ heapprofd_config = HeapprofdConfig(
+ shmem_size_bytes = 8388608,
+ sampling_interval_bytes = 4096,
+ block_client = true,
+ process_cmdline = config.packageNames,
+ continuous_dump_config = HeapprofdConfig.ContinuousDumpConfig(
+ dump_interval_ms = 500 // ms
+ )
+ )
+ )
+ )
+ }
+ return sources
+}
+
+/**
* Config for perfetto.
*
* Eventually, this should be more configurable.
@@ -234,36 +314,44 @@
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
internal fun perfettoConfig(
- atraceApps: List<String>
-) = TraceConfig(
- buffers = listOf(
- BufferConfig(size_kb = 32768, FillPolicy.RING_BUFFER),
- BufferConfig(size_kb = 4096, FillPolicy.RING_BUFFER)
- ),
- data_sources = listOf(
+ atraceApps: List<String>,
+ stackSamplingConfig: StackSamplingConfig?
+): TraceConfig {
+ val dataSources = mutableListOf(
ftraceDataSource(atraceApps),
- PROCESS_STATS_DATASOURCE,
+ processStatsDataSource(stackSamplingConfig),
PACKAGE_LIST_DATASOURCE,
LINUX_SYS_STATS_DATASOURCE,
ANDROID_POWER_DATASOURCE,
+ TraceConfig.DataSource(DataSourceConfig("android.gpu.memory")),
TraceConfig.DataSource(DataSourceConfig("android.surfaceflinger.frame")),
TraceConfig.DataSource(DataSourceConfig("android.surfaceflinger.frametimeline")),
TraceConfig.DataSource(DataSourceConfig("track_event")) // required by tracing-perfetto
- ),
- // periodically dump to file, so we don't overrun our ring buffer
- // buffers are expected to be big enough for 5 seconds, so conservatively set 2.5 dump
- write_into_file = true,
- file_write_period_ms = 2500,
+ )
+ if (stackSamplingConfig != null) {
+ dataSources += stackSamplingSource(
+ config = stackSamplingConfig
+ )
+ }
+ return TraceConfig(
+ buffers = listOf(
+ BufferConfig(size_kb = 32768, FillPolicy.RING_BUFFER),
+ BufferConfig(size_kb = 4096, FillPolicy.RING_BUFFER)
+ ),
+ data_sources = dataSources,
+ // periodically dump to file, so we don't overrun our ring buffer
+ // buffers are expected to be big enough for 5 seconds, so conservatively set 2.5 dump
+ write_into_file = true,
+ file_write_period_ms = 2500,
- // multiple of file_write_period_ms, enables trace processor to work in batches
- flush_period_ms = 5000
-)
+ // multiple of file_write_period_ms, enables trace processor to work in batches
+ flush_period_ms = 5000
+ )
+}
@RequiresApi(21) // needed for shell access
internal fun TraceConfig.validateAndEncode(): ByteArray {
- val ftraceConfig = data_sources
- .mapNotNull { it.config?.ftrace_config }
- .first()
+ val ftraceConfig = data_sources.firstNotNullOf { it.config?.ftrace_config }
// check tags against known-supported tags based on SDK_INT / root status
val supportedTags = AtraceTag.supported(
diff --git a/benchmark/benchmark-common/src/main/java/androidx/benchmark/perfetto/PerfettoTrace.kt b/benchmark/benchmark-common/src/main/java/androidx/benchmark/perfetto/PerfettoTrace.kt
index 656ba2f..411db99 100644
--- a/benchmark/benchmark-common/src/main/java/androidx/benchmark/perfetto/PerfettoTrace.kt
+++ b/benchmark/benchmark-common/src/main/java/androidx/benchmark/perfetto/PerfettoTrace.kt
@@ -85,7 +85,10 @@
block: () -> Unit
) = record(
fileLabel = fileLabel,
- config = PerfettoConfig.Benchmark(appTagPackages),
+ config = PerfettoConfig.Benchmark(
+ appTagPackages = appTagPackages,
+ useStackSamplingConfig = true
+ ),
userspaceTracingPackage = userspaceTracingPackage,
traceCallback = traceCallback,
block = block
diff --git a/wear/compose/compose-material/src/androidMain/kotlin/androidx/wear/compose/material/DefaultPlatformTextStyle.android.kt b/benchmark/benchmark-common/src/main/java/androidx/benchmark/perfetto/StackSamplingConfig.kt
similarity index 60%
copy from wear/compose/compose-material/src/androidMain/kotlin/androidx/wear/compose/material/DefaultPlatformTextStyle.android.kt
copy to benchmark/benchmark-common/src/main/java/androidx/benchmark/perfetto/StackSamplingConfig.kt
index 5365a53..5af31a6 100644
--- a/wear/compose/compose-material/src/androidMain/kotlin/androidx/wear/compose/material/DefaultPlatformTextStyle.android.kt
+++ b/benchmark/benchmark-common/src/main/java/androidx/benchmark/perfetto/StackSamplingConfig.kt
@@ -14,14 +14,21 @@
* limitations under the License.
*/
-package androidx.wear.compose.material
-
-import androidx.compose.ui.text.PlatformTextStyle
-
-private const val DefaultIncludeFontPadding = true
-
-@Suppress("DEPRECATION")
-private val DefaultPlatformTextStyle = PlatformTextStyle(
- includeFontPadding = DefaultIncludeFontPadding
+package androidx.benchmark.perfetto
+/**
+ * The call stack sampling configuration when using Perfetto.
+ */
+internal data class StackSamplingConfig(
+ /**
+ * A list of packages to enable stack sampling.
+ */
+ val packageNames: List<String>,
+ /**
+ * The sampling frequency in Hertz.
+ */
+ val frequency: Long,
+ /**
+ * The sampling duration.
+ */
+ val duration: Long
)
-internal actual fun defaultPlatformTextStyle(): PlatformTextStyle? = DefaultPlatformTextStyle
\ No newline at end of file
diff --git a/benchmark/benchmark-common/src/main/proto/perfetto_config.proto b/benchmark/benchmark-common/src/main/proto/perfetto_config.proto
index fd66876..9ffc5db 100644
--- a/benchmark/benchmark-common/src/main/proto/perfetto_config.proto
+++ b/benchmark/benchmark-common/src/main/proto/perfetto_config.proto
@@ -836,6 +836,13 @@
RawEvent raw_event = 5;
}
+ // If set, samples will be timestamped with the given clock.
+ // If unset, the clock is chosen by the implementation.
+ // For software events, prefer PERF_CLOCK_BOOTTIME. However it cannot be
+ // used for hardware events (due to interrupt safety), for which the
+ // recommendation is to use one of the monotonic clocks.
+ optional PerfClock timestamp_clock = 11;
+
// Optional arbitrary name for the event, to identify it in the parsed
// trace. Does *not* affect the profiling itself. If unset, the trace
// parser will choose a suitable name.
@@ -875,6 +882,17 @@
optional uint64 config1 = 3;
optional uint64 config2 = 4;
}
+
+ // Subset of clocks that is supported by perf timestamping.
+ // CLOCK_TAI is excluded since it's not expected to be used in practice, but
+ // would require additions to the trace clock synchronisation logic.
+ enum PerfClock {
+ UNKNOWN_PERF_CLOCK = 0;
+ PERF_CLOCK_REALTIME = 1;
+ PERF_CLOCK_MONOTONIC = 2;
+ PERF_CLOCK_MONOTONIC_RAW = 3;
+ PERF_CLOCK_BOOTTIME = 4;
+ }
}
// End of protos/perfetto/common/perf_events.proto
diff --git a/benchmark/benchmark-darwin-core/build.gradle b/benchmark/benchmark-darwin-core/build.gradle
index ac9243d..12b8a6b 100644
--- a/benchmark/benchmark-darwin-core/build.gradle
+++ b/benchmark/benchmark-darwin-core/build.gradle
@@ -39,7 +39,7 @@
}
androidx {
- name = "AndroidX Benchmarks - Darwin Core"
+ name = "Benchmarks - Darwin Core"
inceptionYear = "2022"
description = "AndroidX Benchmarks - Darwin Core"
}
diff --git a/benchmark/benchmark-darwin-gradle-plugin/build.gradle b/benchmark/benchmark-darwin-gradle-plugin/build.gradle
index 7a16cf9..5c3aa31 100644
--- a/benchmark/benchmark-darwin-gradle-plugin/build.gradle
+++ b/benchmark/benchmark-darwin-gradle-plugin/build.gradle
@@ -44,7 +44,7 @@
}
androidx {
- name = "AndroidX Benchmarks - Darwin Gradle Plugin"
+ name = "Benchmarks - Darwin Gradle Plugin"
publish = Publish.SNAPSHOT_ONLY
type = LibraryType.GRADLE_PLUGIN
inceptionYear = "2022"
diff --git a/benchmark/benchmark-darwin-samples/build.gradle b/benchmark/benchmark-darwin-samples/build.gradle
index c297722..3684119 100644
--- a/benchmark/benchmark-darwin-samples/build.gradle
+++ b/benchmark/benchmark-darwin-samples/build.gradle
@@ -60,7 +60,7 @@
}
androidx {
- name = "AndroidX Benchmarks - Darwin Samples"
+ name = "Benchmarks - Darwin Samples"
inceptionYear = "2022"
description = "AndroidX Benchmarks - Darwin Samples"
}
diff --git a/benchmark/benchmark-darwin/build.gradle b/benchmark/benchmark-darwin/build.gradle
index 473a5c3..e192b8f 100644
--- a/benchmark/benchmark-darwin/build.gradle
+++ b/benchmark/benchmark-darwin/build.gradle
@@ -43,7 +43,7 @@
}
androidx {
- name = "AndroidX Benchmarks - Darwin"
+ name = "Benchmarks - Darwin"
inceptionYear = "2022"
description = "AndroidX Benchmarks - Darwin"
}
diff --git a/benchmark/benchmark-junit4/api/current.txt b/benchmark/benchmark-junit4/api/current.txt
index 819dd90..f68f2a0 100644
--- a/benchmark/benchmark-junit4/api/current.txt
+++ b/benchmark/benchmark-junit4/api/current.txt
@@ -19,5 +19,16 @@
method public static inline void measureRepeated(androidx.benchmark.junit4.BenchmarkRule, kotlin.jvm.functions.Function1<? super androidx.benchmark.junit4.BenchmarkRule.Scope,kotlin.Unit> block);
}
+ @androidx.benchmark.perfetto.ExperimentalPerfettoCaptureApi public final class PerfettoTraceRule implements org.junit.rules.TestRule {
+ ctor public PerfettoTraceRule(optional boolean enableAppTagTracing, optional boolean enableUserspaceTracing, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback);
+ method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+ method public boolean getEnableAppTagTracing();
+ method public boolean getEnableUserspaceTracing();
+ method public kotlin.jvm.functions.Function1<androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? getTraceCallback();
+ property public final boolean enableAppTagTracing;
+ property public final boolean enableUserspaceTracing;
+ property public final kotlin.jvm.functions.Function1<androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback;
+ }
+
}
diff --git a/benchmark/benchmark-junit4/api/public_plus_experimental_current.txt b/benchmark/benchmark-junit4/api/public_plus_experimental_current.txt
deleted file mode 100644
index f68f2a0..0000000
--- a/benchmark/benchmark-junit4/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-// Signature format: 4.0
-package androidx.benchmark.junit4 {
-
- public class AndroidBenchmarkRunner extends androidx.test.runner.AndroidJUnitRunner {
- ctor public AndroidBenchmarkRunner();
- }
-
- public final class BenchmarkRule implements org.junit.rules.TestRule {
- ctor public BenchmarkRule();
- method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
- method public androidx.benchmark.BenchmarkState getState();
- }
-
- public final class BenchmarkRule.Scope {
- method public inline <T> T runWithTimingDisabled(kotlin.jvm.functions.Function0<? extends T> block);
- }
-
- public final class BenchmarkRuleKt {
- method public static inline void measureRepeated(androidx.benchmark.junit4.BenchmarkRule, kotlin.jvm.functions.Function1<? super androidx.benchmark.junit4.BenchmarkRule.Scope,kotlin.Unit> block);
- }
-
- @androidx.benchmark.perfetto.ExperimentalPerfettoCaptureApi public final class PerfettoTraceRule implements org.junit.rules.TestRule {
- ctor public PerfettoTraceRule(optional boolean enableAppTagTracing, optional boolean enableUserspaceTracing, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback);
- method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
- method public boolean getEnableAppTagTracing();
- method public boolean getEnableUserspaceTracing();
- method public kotlin.jvm.functions.Function1<androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? getTraceCallback();
- property public final boolean enableAppTagTracing;
- property public final boolean enableUserspaceTracing;
- property public final kotlin.jvm.functions.Function1<androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback;
- }
-
-}
-
diff --git a/benchmark/benchmark-junit4/api/restricted_current.txt b/benchmark/benchmark-junit4/api/restricted_current.txt
index 1003a639..9232827 100644
--- a/benchmark/benchmark-junit4/api/restricted_current.txt
+++ b/benchmark/benchmark-junit4/api/restricted_current.txt
@@ -20,5 +20,16 @@
method public static inline void measureRepeated(androidx.benchmark.junit4.BenchmarkRule, kotlin.jvm.functions.Function1<? super androidx.benchmark.junit4.BenchmarkRule.Scope,kotlin.Unit> block);
}
+ @androidx.benchmark.perfetto.ExperimentalPerfettoCaptureApi public final class PerfettoTraceRule implements org.junit.rules.TestRule {
+ ctor public PerfettoTraceRule(optional boolean enableAppTagTracing, optional boolean enableUserspaceTracing, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback);
+ method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+ method public boolean getEnableAppTagTracing();
+ method public boolean getEnableUserspaceTracing();
+ method public kotlin.jvm.functions.Function1<androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? getTraceCallback();
+ property public final boolean enableAppTagTracing;
+ property public final boolean enableUserspaceTracing;
+ property public final kotlin.jvm.functions.Function1<androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback;
+ }
+
}
diff --git a/benchmark/benchmark-junit4/build.gradle b/benchmark/benchmark-junit4/build.gradle
index 4db5a73..cfb08c2 100644
--- a/benchmark/benchmark-junit4/build.gradle
+++ b/benchmark/benchmark-junit4/build.gradle
@@ -47,7 +47,7 @@
}
androidx {
- name = "Android Benchmark - JUnit4"
+ name = "Benchmark - JUnit4"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2019"
description = "Android Benchmark - JUnit4"
diff --git a/benchmark/benchmark-junit4/src/androidTest/java/androidx/benchmark/junit4/BenchmarkRuleTest.kt b/benchmark/benchmark-junit4/src/androidTest/java/androidx/benchmark/junit4/BenchmarkRuleTest.kt
index 9b4f1f3..3c34893 100644
--- a/benchmark/benchmark-junit4/src/androidTest/java/androidx/benchmark/junit4/BenchmarkRuleTest.kt
+++ b/benchmark/benchmark-junit4/src/androidTest/java/androidx/benchmark/junit4/BenchmarkRuleTest.kt
@@ -18,11 +18,11 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
+import java.util.concurrent.TimeUnit
import org.junit.Assert
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.TimeUnit
@LargeTest
@RunWith(AndroidJUnit4::class)
diff --git a/benchmark/benchmark-junit4/src/main/java/androidx/benchmark/junit4/BenchmarkRule.kt b/benchmark/benchmark-junit4/src/main/java/androidx/benchmark/junit4/BenchmarkRule.kt
index 0c686fe..73b4c49 100644
--- a/benchmark/benchmark-junit4/src/main/java/androidx/benchmark/junit4/BenchmarkRule.kt
+++ b/benchmark/benchmark-junit4/src/main/java/androidx/benchmark/junit4/BenchmarkRule.kt
@@ -213,7 +213,10 @@
val tracePath = PerfettoCaptureWrapper().record(
fileLabel = uniqueName,
- config = PerfettoConfig.Benchmark(packages),
+ config = PerfettoConfig.Benchmark(
+ appTagPackages = packages,
+ useStackSamplingConfig = false
+ ),
userspaceTracingPackage = null
) {
UserspaceTracing.commitToTrace() // clear buffer
diff --git a/benchmark/benchmark-junit4/src/main/java/androidx/benchmark/junit4/InstrumentationResultsRunListener.kt b/benchmark/benchmark-junit4/src/main/java/androidx/benchmark/junit4/InstrumentationResultsRunListener.kt
index 752f230..db192f8 100644
--- a/benchmark/benchmark-junit4/src/main/java/androidx/benchmark/junit4/InstrumentationResultsRunListener.kt
+++ b/benchmark/benchmark-junit4/src/main/java/androidx/benchmark/junit4/InstrumentationResultsRunListener.kt
@@ -20,8 +20,8 @@
import androidx.annotation.RestrictTo
import androidx.benchmark.InstrumentationResults
import androidx.test.internal.runner.listener.InstrumentationRunListener
-import org.junit.runner.Result
import java.io.PrintStream
+import org.junit.runner.Result
/**
* Used to register files to copy at the end of the entire test run in CI.
diff --git a/benchmark/benchmark-macro-junit4/api/current.txt b/benchmark/benchmark-macro-junit4/api/current.txt
index 94459b9..3849ac9 100644
--- a/benchmark/benchmark-macro-junit4/api/current.txt
+++ b/benchmark/benchmark-macro-junit4/api/current.txt
@@ -4,18 +4,24 @@
@RequiresApi(28) public final class BaselineProfileRule implements org.junit.rules.TestRule {
ctor public BaselineProfileRule();
method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
- method public void collectBaselineProfile(String packageName, optional int iterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, optional kotlin.jvm.functions.Function1<? super java.lang.String,java.lang.Boolean> filterPredicate, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
method public void collectBaselineProfile(String packageName, optional int iterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+ method public void collectBaselineProfile(String packageName, optional int iterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, optional kotlin.jvm.functions.Function1<? super java.lang.String,java.lang.Boolean> filterPredicate, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
method public void collectBaselineProfile(String packageName, optional int iterations, optional String? outputFilePrefix, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
method public void collectBaselineProfile(String packageName, optional int iterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
method public void collectBaselineProfile(String packageName, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+ method @androidx.benchmark.macro.ExperimentalStableBaselineProfilesApi public void collectStableBaselineProfile(String packageName, int maxIterations, optional int stableIterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, optional boolean strictStability, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+ method @androidx.benchmark.macro.ExperimentalStableBaselineProfilesApi public void collectStableBaselineProfile(String packageName, int maxIterations, optional int stableIterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, optional boolean strictStability, optional kotlin.jvm.functions.Function1<? super java.lang.String,java.lang.Boolean> filterPredicate, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+ method @androidx.benchmark.macro.ExperimentalStableBaselineProfilesApi public void collectStableBaselineProfile(String packageName, int maxIterations, optional int stableIterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+ method @androidx.benchmark.macro.ExperimentalStableBaselineProfilesApi public void collectStableBaselineProfile(String packageName, int maxIterations, optional int stableIterations, optional String? outputFilePrefix, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+ method @androidx.benchmark.macro.ExperimentalStableBaselineProfilesApi public void collectStableBaselineProfile(String packageName, int maxIterations, optional int stableIterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+ method @androidx.benchmark.macro.ExperimentalStableBaselineProfilesApi public void collectStableBaselineProfile(String packageName, int maxIterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
}
public final class MacrobenchmarkRule implements org.junit.rules.TestRule {
ctor public MacrobenchmarkRule();
method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
- method public void measureRepeated(String packageName, java.util.List<? extends androidx.benchmark.macro.Metric> metrics, optional androidx.benchmark.macro.CompilationMode compilationMode, optional androidx.benchmark.macro.StartupMode? startupMode, @IntRange(from=1L) int iterations, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> setupBlock, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> measureBlock);
method public void measureRepeated(String packageName, java.util.List<? extends androidx.benchmark.macro.Metric> metrics, optional androidx.benchmark.macro.CompilationMode compilationMode, optional androidx.benchmark.macro.StartupMode? startupMode, @IntRange(from=1L) int iterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> measureBlock);
+ method public void measureRepeated(String packageName, java.util.List<? extends androidx.benchmark.macro.Metric> metrics, optional androidx.benchmark.macro.CompilationMode compilationMode, optional androidx.benchmark.macro.StartupMode? startupMode, @IntRange(from=1L) int iterations, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> setupBlock, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> measureBlock);
method public void measureRepeated(String packageName, java.util.List<? extends androidx.benchmark.macro.Metric> metrics, optional androidx.benchmark.macro.CompilationMode compilationMode, @IntRange(from=1L) int iterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> measureBlock);
method public void measureRepeated(String packageName, java.util.List<? extends androidx.benchmark.macro.Metric> metrics, @IntRange(from=1L) int iterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> measureBlock);
}
diff --git a/benchmark/benchmark-macro-junit4/api/public_plus_experimental_current.txt b/benchmark/benchmark-macro-junit4/api/public_plus_experimental_current.txt
deleted file mode 100644
index f2b4517..0000000
--- a/benchmark/benchmark-macro-junit4/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-// Signature format: 4.0
-package androidx.benchmark.macro.junit4 {
-
- @RequiresApi(28) public final class BaselineProfileRule implements org.junit.rules.TestRule {
- ctor public BaselineProfileRule();
- method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
- method public void collectBaselineProfile(String packageName, optional int iterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, optional kotlin.jvm.functions.Function1<? super java.lang.String,java.lang.Boolean> filterPredicate, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
- method public void collectBaselineProfile(String packageName, optional int iterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
- method public void collectBaselineProfile(String packageName, optional int iterations, optional String? outputFilePrefix, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
- method public void collectBaselineProfile(String packageName, optional int iterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
- method public void collectBaselineProfile(String packageName, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
- method @androidx.benchmark.macro.ExperimentalStableBaselineProfilesApi public void collectStableBaselineProfile(String packageName, int maxIterations, optional int stableIterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, optional boolean strictStability, optional kotlin.jvm.functions.Function1<? super java.lang.String,java.lang.Boolean> filterPredicate, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
- method @androidx.benchmark.macro.ExperimentalStableBaselineProfilesApi public void collectStableBaselineProfile(String packageName, int maxIterations, optional int stableIterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, optional boolean strictStability, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
- method @androidx.benchmark.macro.ExperimentalStableBaselineProfilesApi public void collectStableBaselineProfile(String packageName, int maxIterations, optional int stableIterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
- method @androidx.benchmark.macro.ExperimentalStableBaselineProfilesApi public void collectStableBaselineProfile(String packageName, int maxIterations, optional int stableIterations, optional String? outputFilePrefix, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
- method @androidx.benchmark.macro.ExperimentalStableBaselineProfilesApi public void collectStableBaselineProfile(String packageName, int maxIterations, optional int stableIterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
- method @androidx.benchmark.macro.ExperimentalStableBaselineProfilesApi public void collectStableBaselineProfile(String packageName, int maxIterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
- }
-
- public final class MacrobenchmarkRule implements org.junit.rules.TestRule {
- ctor public MacrobenchmarkRule();
- method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
- method public void measureRepeated(String packageName, java.util.List<? extends androidx.benchmark.macro.Metric> metrics, optional androidx.benchmark.macro.CompilationMode compilationMode, optional androidx.benchmark.macro.StartupMode? startupMode, @IntRange(from=1L) int iterations, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> setupBlock, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> measureBlock);
- method public void measureRepeated(String packageName, java.util.List<? extends androidx.benchmark.macro.Metric> metrics, optional androidx.benchmark.macro.CompilationMode compilationMode, optional androidx.benchmark.macro.StartupMode? startupMode, @IntRange(from=1L) int iterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> measureBlock);
- method public void measureRepeated(String packageName, java.util.List<? extends androidx.benchmark.macro.Metric> metrics, optional androidx.benchmark.macro.CompilationMode compilationMode, @IntRange(from=1L) int iterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> measureBlock);
- method public void measureRepeated(String packageName, java.util.List<? extends androidx.benchmark.macro.Metric> metrics, @IntRange(from=1L) int iterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> measureBlock);
- }
-
-}
-
diff --git a/benchmark/benchmark-macro-junit4/api/restricted_current.txt b/benchmark/benchmark-macro-junit4/api/restricted_current.txt
index 94459b9..3849ac9 100644
--- a/benchmark/benchmark-macro-junit4/api/restricted_current.txt
+++ b/benchmark/benchmark-macro-junit4/api/restricted_current.txt
@@ -4,18 +4,24 @@
@RequiresApi(28) public final class BaselineProfileRule implements org.junit.rules.TestRule {
ctor public BaselineProfileRule();
method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
- method public void collectBaselineProfile(String packageName, optional int iterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, optional kotlin.jvm.functions.Function1<? super java.lang.String,java.lang.Boolean> filterPredicate, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
method public void collectBaselineProfile(String packageName, optional int iterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+ method public void collectBaselineProfile(String packageName, optional int iterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, optional kotlin.jvm.functions.Function1<? super java.lang.String,java.lang.Boolean> filterPredicate, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
method public void collectBaselineProfile(String packageName, optional int iterations, optional String? outputFilePrefix, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
method public void collectBaselineProfile(String packageName, optional int iterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
method public void collectBaselineProfile(String packageName, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+ method @androidx.benchmark.macro.ExperimentalStableBaselineProfilesApi public void collectStableBaselineProfile(String packageName, int maxIterations, optional int stableIterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, optional boolean strictStability, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+ method @androidx.benchmark.macro.ExperimentalStableBaselineProfilesApi public void collectStableBaselineProfile(String packageName, int maxIterations, optional int stableIterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, optional boolean strictStability, optional kotlin.jvm.functions.Function1<? super java.lang.String,java.lang.Boolean> filterPredicate, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+ method @androidx.benchmark.macro.ExperimentalStableBaselineProfilesApi public void collectStableBaselineProfile(String packageName, int maxIterations, optional int stableIterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+ method @androidx.benchmark.macro.ExperimentalStableBaselineProfilesApi public void collectStableBaselineProfile(String packageName, int maxIterations, optional int stableIterations, optional String? outputFilePrefix, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+ method @androidx.benchmark.macro.ExperimentalStableBaselineProfilesApi public void collectStableBaselineProfile(String packageName, int maxIterations, optional int stableIterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+ method @androidx.benchmark.macro.ExperimentalStableBaselineProfilesApi public void collectStableBaselineProfile(String packageName, int maxIterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
}
public final class MacrobenchmarkRule implements org.junit.rules.TestRule {
ctor public MacrobenchmarkRule();
method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
- method public void measureRepeated(String packageName, java.util.List<? extends androidx.benchmark.macro.Metric> metrics, optional androidx.benchmark.macro.CompilationMode compilationMode, optional androidx.benchmark.macro.StartupMode? startupMode, @IntRange(from=1L) int iterations, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> setupBlock, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> measureBlock);
method public void measureRepeated(String packageName, java.util.List<? extends androidx.benchmark.macro.Metric> metrics, optional androidx.benchmark.macro.CompilationMode compilationMode, optional androidx.benchmark.macro.StartupMode? startupMode, @IntRange(from=1L) int iterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> measureBlock);
+ method public void measureRepeated(String packageName, java.util.List<? extends androidx.benchmark.macro.Metric> metrics, optional androidx.benchmark.macro.CompilationMode compilationMode, optional androidx.benchmark.macro.StartupMode? startupMode, @IntRange(from=1L) int iterations, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> setupBlock, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> measureBlock);
method public void measureRepeated(String packageName, java.util.List<? extends androidx.benchmark.macro.Metric> metrics, optional androidx.benchmark.macro.CompilationMode compilationMode, @IntRange(from=1L) int iterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> measureBlock);
method public void measureRepeated(String packageName, java.util.List<? extends androidx.benchmark.macro.Metric> metrics, @IntRange(from=1L) int iterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> measureBlock);
}
diff --git a/benchmark/benchmark-macro-junit4/build.gradle b/benchmark/benchmark-macro-junit4/build.gradle
index cd4804f..5fa8211 100644
--- a/benchmark/benchmark-macro-junit4/build.gradle
+++ b/benchmark/benchmark-macro-junit4/build.gradle
@@ -53,7 +53,7 @@
}
androidx {
- name = "Android Benchmark - Macrobenchmark JUnit4"
+ name = "Benchmark - Macrobenchmark JUnit4"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2020"
description = "Android Benchmark - Macrobenchmark JUnit4"
diff --git a/benchmark/benchmark-macro/api/current.txt b/benchmark/benchmark-macro/api/current.txt
index 2e20107..856e208 100644
--- a/benchmark/benchmark-macro/api/current.txt
+++ b/benchmark/benchmark-macro/api/current.txt
@@ -1,6 +1,10 @@
// Signature format: 4.0
package androidx.benchmark.macro {
+ @androidx.benchmark.macro.ExperimentalMetricApi public final class AudioUnderrunMetric extends androidx.benchmark.macro.Metric {
+ ctor public AudioUnderrunMetric();
+ }
+
public enum BaselineProfileMode {
method public static androidx.benchmark.macro.BaselineProfileMode valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
method public static androidx.benchmark.macro.BaselineProfileMode[] values();
@@ -21,20 +25,33 @@
ctor public CompilationMode.Full();
}
+ @androidx.benchmark.macro.ExperimentalMacrobenchmarkApi public static final class CompilationMode.Ignore extends androidx.benchmark.macro.CompilationMode {
+ ctor public CompilationMode.Ignore();
+ }
+
@RequiresApi(24) public static final class CompilationMode.None extends androidx.benchmark.macro.CompilationMode {
ctor public CompilationMode.None();
}
@RequiresApi(24) public static final class CompilationMode.Partial extends androidx.benchmark.macro.CompilationMode {
- ctor public CompilationMode.Partial(optional androidx.benchmark.macro.BaselineProfileMode baselineProfileMode, optional @IntRange(from=0L) int warmupIterations);
- ctor public CompilationMode.Partial(optional androidx.benchmark.macro.BaselineProfileMode baselineProfileMode);
ctor public CompilationMode.Partial();
+ ctor public CompilationMode.Partial(optional androidx.benchmark.macro.BaselineProfileMode baselineProfileMode);
+ ctor public CompilationMode.Partial(optional androidx.benchmark.macro.BaselineProfileMode baselineProfileMode, optional @IntRange(from=0L) int warmupIterations);
method public androidx.benchmark.macro.BaselineProfileMode getBaselineProfileMode();
method public int getWarmupIterations();
property public final androidx.benchmark.macro.BaselineProfileMode baselineProfileMode;
property public final int warmupIterations;
}
+ @kotlin.RequiresOptIn(message="This Macrobenchmark API is experimental.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalMacrobenchmarkApi {
+ }
+
+ @kotlin.RequiresOptIn(message="This Metric API is experimental.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalMetricApi {
+ }
+
+ @kotlin.RequiresOptIn(message="The stable Baseline profile generation API is experimental.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalStableBaselineProfilesApi {
+ }
+
public final class FrameTimingMetric extends androidx.benchmark.macro.Metric {
ctor public FrameTimingMetric();
}
@@ -46,21 +63,136 @@
method public androidx.test.uiautomator.UiDevice getDevice();
method public Integer? getIteration();
method public String getPackageName();
- method public void killProcess(optional boolean useKillAll);
method public void killProcess();
- method public void pressHome(optional long delayDurationMs);
+ method public void killProcess(optional boolean useKillAll);
method public void pressHome();
- method public void startActivityAndWait(optional kotlin.jvm.functions.Function1<? super android.content.Intent,kotlin.Unit> block);
+ method public void pressHome(optional long delayDurationMs);
method public void startActivityAndWait();
method public void startActivityAndWait(android.content.Intent intent);
+ method public void startActivityAndWait(optional kotlin.jvm.functions.Function1<? super android.content.Intent,kotlin.Unit> block);
property public final androidx.test.uiautomator.UiDevice device;
property public final Integer? iteration;
property public final String packageName;
}
+ @androidx.benchmark.macro.ExperimentalMetricApi public final class MemoryCountersMetric extends androidx.benchmark.macro.TraceMetric {
+ ctor public MemoryCountersMetric();
+ method public java.util.List<androidx.benchmark.macro.Metric.Measurement> getResult(androidx.benchmark.macro.Metric.CaptureInfo captureInfo, androidx.benchmark.perfetto.PerfettoTraceProcessor.Session traceSession);
+ }
+
+ @androidx.benchmark.macro.ExperimentalMetricApi public final class MemoryUsageMetric extends androidx.benchmark.macro.TraceMetric {
+ ctor public MemoryUsageMetric(androidx.benchmark.macro.MemoryUsageMetric.Mode mode, optional java.util.List<? extends androidx.benchmark.macro.MemoryUsageMetric.SubMetric> subMetrics);
+ method public java.util.List<androidx.benchmark.macro.Metric.Measurement> getResult(androidx.benchmark.macro.Metric.CaptureInfo captureInfo, androidx.benchmark.perfetto.PerfettoTraceProcessor.Session traceSession);
+ }
+
+ public enum MemoryUsageMetric.Mode {
+ method public static androidx.benchmark.macro.MemoryUsageMetric.Mode valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+ method public static androidx.benchmark.macro.MemoryUsageMetric.Mode[] values();
+ enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.Mode Last;
+ enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.Mode Max;
+ }
+
+ public enum MemoryUsageMetric.SubMetric {
+ method public static androidx.benchmark.macro.MemoryUsageMetric.SubMetric valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+ method public static androidx.benchmark.macro.MemoryUsageMetric.SubMetric[] values();
+ enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.SubMetric Gpu;
+ enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.SubMetric HeapSize;
+ enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.SubMetric RssAnon;
+ enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.SubMetric RssFile;
+ enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.SubMetric RssShmem;
+ }
+
public abstract sealed class Metric {
}
+ @androidx.benchmark.macro.ExperimentalMetricApi public static final class Metric.CaptureInfo {
+ ctor public Metric.CaptureInfo(int apiLevel, String targetPackageName, String testPackageName, androidx.benchmark.macro.StartupMode? startupMode);
+ method public int component1();
+ method public String component2();
+ method public String component3();
+ method public androidx.benchmark.macro.StartupMode? component4();
+ method public androidx.benchmark.macro.Metric.CaptureInfo copy(int apiLevel, String targetPackageName, String testPackageName, androidx.benchmark.macro.StartupMode? startupMode);
+ method public int getApiLevel();
+ method public androidx.benchmark.macro.StartupMode? getStartupMode();
+ method public String getTargetPackageName();
+ method public String getTestPackageName();
+ property public final int apiLevel;
+ property public final androidx.benchmark.macro.StartupMode? startupMode;
+ property public final String targetPackageName;
+ property public final String testPackageName;
+ }
+
+ @androidx.benchmark.macro.ExperimentalMetricApi public static final class Metric.Measurement {
+ ctor public Metric.Measurement(String name, double data);
+ ctor public Metric.Measurement(String name, java.util.List<java.lang.Double> dataSamples);
+ method public String component1();
+ method public java.util.List<java.lang.Double> component2();
+ method public boolean component3();
+ method public androidx.benchmark.macro.Metric.Measurement copy(String name, java.util.List<java.lang.Double> data, boolean requireSingleValue);
+ method public java.util.List<java.lang.Double> getData();
+ method public String getName();
+ method public boolean getRequireSingleValue();
+ property public final java.util.List<java.lang.Double> data;
+ property public final String name;
+ property public final boolean requireSingleValue;
+ }
+
+ public final class MetricResultExtensionsKt {
+ method @androidx.benchmark.macro.ExperimentalMetricApi public static void assertEqualMeasurements(java.util.List<androidx.benchmark.macro.Metric.Measurement> expected, java.util.List<androidx.benchmark.macro.Metric.Measurement> observed, double threshold);
+ }
+
+ @androidx.benchmark.macro.ExperimentalMetricApi public enum PowerCategory {
+ method public static androidx.benchmark.macro.PowerCategory valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+ method public static androidx.benchmark.macro.PowerCategory[] values();
+ enum_constant public static final androidx.benchmark.macro.PowerCategory CPU;
+ enum_constant public static final androidx.benchmark.macro.PowerCategory DISPLAY;
+ enum_constant public static final androidx.benchmark.macro.PowerCategory GPS;
+ enum_constant public static final androidx.benchmark.macro.PowerCategory GPU;
+ enum_constant public static final androidx.benchmark.macro.PowerCategory MACHINE_LEARNING;
+ enum_constant public static final androidx.benchmark.macro.PowerCategory MEMORY;
+ enum_constant public static final androidx.benchmark.macro.PowerCategory NETWORK;
+ enum_constant public static final androidx.benchmark.macro.PowerCategory UNCATEGORIZED;
+ }
+
+ @androidx.benchmark.macro.ExperimentalMetricApi public enum PowerCategoryDisplayLevel {
+ method public static androidx.benchmark.macro.PowerCategoryDisplayLevel valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+ method public static androidx.benchmark.macro.PowerCategoryDisplayLevel[] values();
+ enum_constant public static final androidx.benchmark.macro.PowerCategoryDisplayLevel BREAKDOWN;
+ enum_constant public static final androidx.benchmark.macro.PowerCategoryDisplayLevel TOTAL;
+ }
+
+ @RequiresApi(29) @androidx.benchmark.macro.ExperimentalMetricApi public final class PowerMetric extends androidx.benchmark.macro.Metric {
+ ctor public PowerMetric(androidx.benchmark.macro.PowerMetric.Type type);
+ method public static androidx.benchmark.macro.PowerMetric.Type.Battery Battery();
+ method public static androidx.benchmark.macro.PowerMetric.Type.Energy Energy(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> categories);
+ method public static androidx.benchmark.macro.PowerMetric.Type.Power Power(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> categories);
+ field public static final androidx.benchmark.macro.PowerMetric.Companion Companion;
+ }
+
+ public static final class PowerMetric.Companion {
+ method public androidx.benchmark.macro.PowerMetric.Type.Battery Battery();
+ method public androidx.benchmark.macro.PowerMetric.Type.Energy Energy(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> categories);
+ method public androidx.benchmark.macro.PowerMetric.Type.Power Power(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> categories);
+ }
+
+ public abstract static sealed class PowerMetric.Type {
+ method public final java.util.Map<androidx.benchmark.macro.PowerCategory,androidx.benchmark.macro.PowerCategoryDisplayLevel> getCategories();
+ method public final void setCategories(java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel>);
+ property public final java.util.Map<androidx.benchmark.macro.PowerCategory,androidx.benchmark.macro.PowerCategoryDisplayLevel> categories;
+ }
+
+ public static final class PowerMetric.Type.Battery extends androidx.benchmark.macro.PowerMetric.Type {
+ ctor public PowerMetric.Type.Battery();
+ }
+
+ public static final class PowerMetric.Type.Energy extends androidx.benchmark.macro.PowerMetric.Type {
+ ctor public PowerMetric.Type.Energy(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> energyCategories);
+ }
+
+ public static final class PowerMetric.Type.Power extends androidx.benchmark.macro.PowerMetric.Type {
+ ctor public PowerMetric.Type.Power(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> powerCategories);
+ }
+
public enum StartupMode {
method public static androidx.benchmark.macro.StartupMode valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
method public static androidx.benchmark.macro.StartupMode[] values();
@@ -73,5 +205,60 @@
ctor public StartupTimingMetric();
}
+ @androidx.benchmark.macro.ExperimentalMetricApi public abstract class TraceMetric extends androidx.benchmark.macro.Metric {
+ ctor public TraceMetric();
+ method public abstract java.util.List<androidx.benchmark.macro.Metric.Measurement> getResult(androidx.benchmark.macro.Metric.CaptureInfo captureInfo, androidx.benchmark.perfetto.PerfettoTraceProcessor.Session traceSession);
+ }
+
+ @androidx.benchmark.macro.ExperimentalMetricApi public final class TraceSectionMetric extends androidx.benchmark.macro.Metric {
+ ctor public TraceSectionMetric(String sectionName, optional androidx.benchmark.macro.TraceSectionMetric.Mode mode);
+ }
+
+ public enum TraceSectionMetric.Mode {
+ method public static androidx.benchmark.macro.TraceSectionMetric.Mode valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+ method public static androidx.benchmark.macro.TraceSectionMetric.Mode[] values();
+ enum_constant public static final androidx.benchmark.macro.TraceSectionMetric.Mode First;
+ enum_constant public static final androidx.benchmark.macro.TraceSectionMetric.Mode Sum;
+ }
+
+}
+
+package androidx.benchmark.perfetto {
+
+ @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalPerfettoTraceProcessorApi {
+ }
+
+ @androidx.benchmark.perfetto.ExperimentalPerfettoTraceProcessorApi public final class PerfettoTraceProcessor {
+ ctor public PerfettoTraceProcessor();
+ method public <T> T loadTrace(androidx.benchmark.perfetto.PerfettoTrace trace, kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTraceProcessor.Session,? extends T> block);
+ method public static <T> T runServer(kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTraceProcessor,? extends T> block);
+ field public static final androidx.benchmark.perfetto.PerfettoTraceProcessor.Companion Companion;
+ }
+
+ public static final class PerfettoTraceProcessor.Companion {
+ method public <T> T runServer(kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTraceProcessor,? extends T> block);
+ }
+
+ public static final class PerfettoTraceProcessor.Session {
+ method public kotlin.sequences.Sequence<androidx.benchmark.perfetto.Row> query(@org.intellij.lang.annotations.Language("sql") String query);
+ method public byte[] rawQuery(@org.intellij.lang.annotations.Language("sql") String query);
+ }
+
+ @androidx.benchmark.perfetto.ExperimentalPerfettoTraceProcessorApi public final class Row implements kotlin.jvm.internal.markers.KMappedMarker java.util.Map<java.lang.String,java.lang.Object> {
+ ctor public Row(java.util.Map<java.lang.String,?> map);
+ method public byte[] bytes(String columnName);
+ method public double double(String columnName);
+ method public long long(String columnName);
+ method public byte[]? nullableBytes(String columnName);
+ method public Double? nullableDouble(String columnName);
+ method public Long? nullableLong(String columnName);
+ method public String? nullableString(String columnName);
+ method public String string(String columnName);
+ }
+
+ public final class RowKt {
+ method @androidx.benchmark.perfetto.ExperimentalPerfettoTraceProcessorApi public static androidx.benchmark.perfetto.Row rowOf(kotlin.Pair<java.lang.String,?>... pairs);
+ }
+
}
diff --git a/benchmark/benchmark-macro/api/public_plus_experimental_current.txt b/benchmark/benchmark-macro/api/public_plus_experimental_current.txt
deleted file mode 100644
index 1597078..0000000
--- a/benchmark/benchmark-macro/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,242 +0,0 @@
-// Signature format: 4.0
-package androidx.benchmark.macro {
-
- @androidx.benchmark.macro.ExperimentalMetricApi public final class AudioUnderrunMetric extends androidx.benchmark.macro.Metric {
- ctor public AudioUnderrunMetric();
- }
-
- public enum BaselineProfileMode {
- method public static androidx.benchmark.macro.BaselineProfileMode valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
- method public static androidx.benchmark.macro.BaselineProfileMode[] values();
- enum_constant public static final androidx.benchmark.macro.BaselineProfileMode Disable;
- enum_constant public static final androidx.benchmark.macro.BaselineProfileMode Require;
- enum_constant public static final androidx.benchmark.macro.BaselineProfileMode UseIfAvailable;
- }
-
- public abstract sealed class CompilationMode {
- field public static final androidx.benchmark.macro.CompilationMode.Companion Companion;
- field public static final androidx.benchmark.macro.CompilationMode DEFAULT;
- }
-
- public static final class CompilationMode.Companion {
- }
-
- public static final class CompilationMode.Full extends androidx.benchmark.macro.CompilationMode {
- ctor public CompilationMode.Full();
- }
-
- @androidx.benchmark.macro.ExperimentalMacrobenchmarkApi public static final class CompilationMode.Ignore extends androidx.benchmark.macro.CompilationMode {
- ctor public CompilationMode.Ignore();
- }
-
- @RequiresApi(24) public static final class CompilationMode.None extends androidx.benchmark.macro.CompilationMode {
- ctor public CompilationMode.None();
- }
-
- @RequiresApi(24) public static final class CompilationMode.Partial extends androidx.benchmark.macro.CompilationMode {
- ctor public CompilationMode.Partial(optional androidx.benchmark.macro.BaselineProfileMode baselineProfileMode, optional @IntRange(from=0L) int warmupIterations);
- ctor public CompilationMode.Partial(optional androidx.benchmark.macro.BaselineProfileMode baselineProfileMode);
- ctor public CompilationMode.Partial();
- method public androidx.benchmark.macro.BaselineProfileMode getBaselineProfileMode();
- method public int getWarmupIterations();
- property public final androidx.benchmark.macro.BaselineProfileMode baselineProfileMode;
- property public final int warmupIterations;
- }
-
- @kotlin.RequiresOptIn(message="This Macrobenchmark API is experimental.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalMacrobenchmarkApi {
- }
-
- @kotlin.RequiresOptIn(message="This Metric API is experimental.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalMetricApi {
- }
-
- @kotlin.RequiresOptIn(message="The stable Baseline profile generation API is experimental.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalStableBaselineProfilesApi {
- }
-
- public final class FrameTimingMetric extends androidx.benchmark.macro.Metric {
- ctor public FrameTimingMetric();
- }
-
- public final class MacrobenchmarkScope {
- ctor public MacrobenchmarkScope(String packageName, boolean launchWithClearTask);
- method public void dropKernelPageCache();
- method public void dropShaderCache();
- method public androidx.test.uiautomator.UiDevice getDevice();
- method public Integer? getIteration();
- method public String getPackageName();
- method public void killProcess(optional boolean useKillAll);
- method public void killProcess();
- method public void pressHome(optional long delayDurationMs);
- method public void pressHome();
- method public void startActivityAndWait(optional kotlin.jvm.functions.Function1<? super android.content.Intent,kotlin.Unit> block);
- method public void startActivityAndWait();
- method public void startActivityAndWait(android.content.Intent intent);
- property public final androidx.test.uiautomator.UiDevice device;
- property public final Integer? iteration;
- property public final String packageName;
- }
-
- @androidx.benchmark.macro.ExperimentalMetricApi public final class MemoryCountersMetric extends androidx.benchmark.macro.TraceMetric {
- ctor public MemoryCountersMetric();
- method public java.util.List<androidx.benchmark.macro.Metric.Measurement> getResult(androidx.benchmark.macro.Metric.CaptureInfo captureInfo, androidx.benchmark.perfetto.PerfettoTraceProcessor.Session traceSession);
- }
-
- public abstract sealed class Metric {
- }
-
- @androidx.benchmark.macro.ExperimentalMetricApi public static final class Metric.CaptureInfo {
- ctor public Metric.CaptureInfo(int apiLevel, String targetPackageName, String testPackageName, androidx.benchmark.macro.StartupMode? startupMode);
- method public int component1();
- method public String component2();
- method public String component3();
- method public androidx.benchmark.macro.StartupMode? component4();
- method public androidx.benchmark.macro.Metric.CaptureInfo copy(int apiLevel, String targetPackageName, String testPackageName, androidx.benchmark.macro.StartupMode? startupMode);
- method public int getApiLevel();
- method public androidx.benchmark.macro.StartupMode? getStartupMode();
- method public String getTargetPackageName();
- method public String getTestPackageName();
- property public final int apiLevel;
- property public final androidx.benchmark.macro.StartupMode? startupMode;
- property public final String targetPackageName;
- property public final String testPackageName;
- }
-
- @androidx.benchmark.macro.ExperimentalMetricApi public static final class Metric.Measurement {
- ctor public Metric.Measurement(String name, double data);
- ctor public Metric.Measurement(String name, java.util.List<java.lang.Double> dataSamples);
- method public String component1();
- method public java.util.List<java.lang.Double> component2();
- method public boolean component3();
- method public androidx.benchmark.macro.Metric.Measurement copy(String name, java.util.List<java.lang.Double> data, boolean requireSingleValue);
- method public java.util.List<java.lang.Double> getData();
- method public String getName();
- method public boolean getRequireSingleValue();
- property public final java.util.List<java.lang.Double> data;
- property public final String name;
- property public final boolean requireSingleValue;
- }
-
- public final class MetricResultExtensionsKt {
- method @androidx.benchmark.macro.ExperimentalMetricApi public static void assertEqualMeasurements(java.util.List<androidx.benchmark.macro.Metric.Measurement> expected, java.util.List<androidx.benchmark.macro.Metric.Measurement> observed, double threshold);
- }
-
- @androidx.benchmark.macro.ExperimentalMetricApi public enum PowerCategory {
- method public static androidx.benchmark.macro.PowerCategory valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
- method public static androidx.benchmark.macro.PowerCategory[] values();
- enum_constant public static final androidx.benchmark.macro.PowerCategory CPU;
- enum_constant public static final androidx.benchmark.macro.PowerCategory DISPLAY;
- enum_constant public static final androidx.benchmark.macro.PowerCategory GPS;
- enum_constant public static final androidx.benchmark.macro.PowerCategory GPU;
- enum_constant public static final androidx.benchmark.macro.PowerCategory MACHINE_LEARNING;
- enum_constant public static final androidx.benchmark.macro.PowerCategory MEMORY;
- enum_constant public static final androidx.benchmark.macro.PowerCategory NETWORK;
- enum_constant public static final androidx.benchmark.macro.PowerCategory UNCATEGORIZED;
- }
-
- @androidx.benchmark.macro.ExperimentalMetricApi public enum PowerCategoryDisplayLevel {
- method public static androidx.benchmark.macro.PowerCategoryDisplayLevel valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
- method public static androidx.benchmark.macro.PowerCategoryDisplayLevel[] values();
- enum_constant public static final androidx.benchmark.macro.PowerCategoryDisplayLevel BREAKDOWN;
- enum_constant public static final androidx.benchmark.macro.PowerCategoryDisplayLevel TOTAL;
- }
-
- @RequiresApi(29) @androidx.benchmark.macro.ExperimentalMetricApi public final class PowerMetric extends androidx.benchmark.macro.Metric {
- ctor public PowerMetric(androidx.benchmark.macro.PowerMetric.Type type);
- method public static androidx.benchmark.macro.PowerMetric.Type.Battery Battery();
- method public static androidx.benchmark.macro.PowerMetric.Type.Energy Energy(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> categories);
- method public static androidx.benchmark.macro.PowerMetric.Type.Power Power(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> categories);
- field public static final androidx.benchmark.macro.PowerMetric.Companion Companion;
- }
-
- public static final class PowerMetric.Companion {
- method public androidx.benchmark.macro.PowerMetric.Type.Battery Battery();
- method public androidx.benchmark.macro.PowerMetric.Type.Energy Energy(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> categories);
- method public androidx.benchmark.macro.PowerMetric.Type.Power Power(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> categories);
- }
-
- public abstract static sealed class PowerMetric.Type {
- method public final java.util.Map<androidx.benchmark.macro.PowerCategory,androidx.benchmark.macro.PowerCategoryDisplayLevel> getCategories();
- method public final void setCategories(java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel>);
- property public final java.util.Map<androidx.benchmark.macro.PowerCategory,androidx.benchmark.macro.PowerCategoryDisplayLevel> categories;
- }
-
- public static final class PowerMetric.Type.Battery extends androidx.benchmark.macro.PowerMetric.Type {
- ctor public PowerMetric.Type.Battery();
- }
-
- public static final class PowerMetric.Type.Energy extends androidx.benchmark.macro.PowerMetric.Type {
- ctor public PowerMetric.Type.Energy(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> energyCategories);
- }
-
- public static final class PowerMetric.Type.Power extends androidx.benchmark.macro.PowerMetric.Type {
- ctor public PowerMetric.Type.Power(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> powerCategories);
- }
-
- public enum StartupMode {
- method public static androidx.benchmark.macro.StartupMode valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
- method public static androidx.benchmark.macro.StartupMode[] values();
- enum_constant public static final androidx.benchmark.macro.StartupMode COLD;
- enum_constant public static final androidx.benchmark.macro.StartupMode HOT;
- enum_constant public static final androidx.benchmark.macro.StartupMode WARM;
- }
-
- public final class StartupTimingMetric extends androidx.benchmark.macro.Metric {
- ctor public StartupTimingMetric();
- }
-
- @androidx.benchmark.macro.ExperimentalMetricApi public abstract class TraceMetric extends androidx.benchmark.macro.Metric {
- ctor public TraceMetric();
- method public abstract java.util.List<androidx.benchmark.macro.Metric.Measurement> getResult(androidx.benchmark.macro.Metric.CaptureInfo captureInfo, androidx.benchmark.perfetto.PerfettoTraceProcessor.Session traceSession);
- }
-
- @androidx.benchmark.macro.ExperimentalMetricApi public final class TraceSectionMetric extends androidx.benchmark.macro.Metric {
- ctor public TraceSectionMetric(String sectionName, optional androidx.benchmark.macro.TraceSectionMetric.Mode mode);
- }
-
- public enum TraceSectionMetric.Mode {
- method public static androidx.benchmark.macro.TraceSectionMetric.Mode valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
- method public static androidx.benchmark.macro.TraceSectionMetric.Mode[] values();
- enum_constant public static final androidx.benchmark.macro.TraceSectionMetric.Mode First;
- enum_constant public static final androidx.benchmark.macro.TraceSectionMetric.Mode Sum;
- }
-
-}
-
-package androidx.benchmark.perfetto {
-
- @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalPerfettoTraceProcessorApi {
- }
-
- @androidx.benchmark.perfetto.ExperimentalPerfettoTraceProcessorApi public final class PerfettoTraceProcessor {
- ctor public PerfettoTraceProcessor();
- method public <T> T loadTrace(androidx.benchmark.perfetto.PerfettoTrace trace, kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTraceProcessor.Session,? extends T> block);
- method public static <T> T runServer(kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTraceProcessor,? extends T> block);
- field public static final androidx.benchmark.perfetto.PerfettoTraceProcessor.Companion Companion;
- }
-
- public static final class PerfettoTraceProcessor.Companion {
- method public <T> T runServer(kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTraceProcessor,? extends T> block);
- }
-
- public static final class PerfettoTraceProcessor.Session {
- method public kotlin.sequences.Sequence<androidx.benchmark.perfetto.Row> query(@org.intellij.lang.annotations.Language("sql") String query);
- method public byte[] rawQuery(@org.intellij.lang.annotations.Language("sql") String query);
- }
-
- @androidx.benchmark.perfetto.ExperimentalPerfettoTraceProcessorApi public final class Row implements kotlin.jvm.internal.markers.KMappedMarker java.util.Map<java.lang.String,java.lang.Object> {
- ctor public Row(java.util.Map<java.lang.String,?> map);
- method public byte[] bytes(String columnName);
- method public double double(String columnName);
- method public long long(String columnName);
- method public byte[]? nullableBytes(String columnName);
- method public Double? nullableDouble(String columnName);
- method public Long? nullableLong(String columnName);
- method public String? nullableString(String columnName);
- method public String string(String columnName);
- }
-
- public final class RowKt {
- method @androidx.benchmark.perfetto.ExperimentalPerfettoTraceProcessorApi public static androidx.benchmark.perfetto.Row rowOf(kotlin.Pair<java.lang.String,?>... pairs);
- }
-
-}
-
diff --git a/benchmark/benchmark-macro/api/restricted_current.txt b/benchmark/benchmark-macro/api/restricted_current.txt
index 3954702..79671be 100644
--- a/benchmark/benchmark-macro/api/restricted_current.txt
+++ b/benchmark/benchmark-macro/api/restricted_current.txt
@@ -1,6 +1,10 @@
// Signature format: 4.0
package androidx.benchmark.macro {
+ @androidx.benchmark.macro.ExperimentalMetricApi public final class AudioUnderrunMetric extends androidx.benchmark.macro.Metric {
+ ctor public AudioUnderrunMetric();
+ }
+
public enum BaselineProfileMode {
method public static androidx.benchmark.macro.BaselineProfileMode valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
method public static androidx.benchmark.macro.BaselineProfileMode[] values();
@@ -26,6 +30,10 @@
ctor public CompilationMode.Full();
}
+ @androidx.benchmark.macro.ExperimentalMacrobenchmarkApi public static final class CompilationMode.Ignore extends androidx.benchmark.macro.CompilationMode {
+ ctor public CompilationMode.Ignore();
+ }
+
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final class CompilationMode.Interpreted extends androidx.benchmark.macro.CompilationMode {
}
@@ -34,9 +42,9 @@
}
@RequiresApi(24) public static final class CompilationMode.Partial extends androidx.benchmark.macro.CompilationMode {
- ctor public CompilationMode.Partial(optional androidx.benchmark.macro.BaselineProfileMode baselineProfileMode, optional @IntRange(from=0L) int warmupIterations);
- ctor public CompilationMode.Partial(optional androidx.benchmark.macro.BaselineProfileMode baselineProfileMode);
ctor public CompilationMode.Partial();
+ ctor public CompilationMode.Partial(optional androidx.benchmark.macro.BaselineProfileMode baselineProfileMode);
+ ctor public CompilationMode.Partial(optional androidx.benchmark.macro.BaselineProfileMode baselineProfileMode, optional @IntRange(from=0L) int warmupIterations);
method public androidx.benchmark.macro.BaselineProfileMode getBaselineProfileMode();
method public int getWarmupIterations();
property public final androidx.benchmark.macro.BaselineProfileMode baselineProfileMode;
@@ -47,6 +55,15 @@
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static boolean isSupportedWithVmSettings(androidx.benchmark.macro.CompilationMode);
}
+ @kotlin.RequiresOptIn(message="This Macrobenchmark API is experimental.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalMacrobenchmarkApi {
+ }
+
+ @kotlin.RequiresOptIn(message="This Metric API is experimental.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalMetricApi {
+ }
+
+ @kotlin.RequiresOptIn(message="The stable Baseline profile generation API is experimental.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalStableBaselineProfilesApi {
+ }
+
public final class FrameTimingMetric extends androidx.benchmark.macro.Metric {
ctor public FrameTimingMetric();
}
@@ -58,21 +75,136 @@
method public androidx.test.uiautomator.UiDevice getDevice();
method public Integer? getIteration();
method public String getPackageName();
- method public void killProcess(optional boolean useKillAll);
method public void killProcess();
- method public void pressHome(optional long delayDurationMs);
+ method public void killProcess(optional boolean useKillAll);
method public void pressHome();
- method public void startActivityAndWait(optional kotlin.jvm.functions.Function1<? super android.content.Intent,kotlin.Unit> block);
+ method public void pressHome(optional long delayDurationMs);
method public void startActivityAndWait();
method public void startActivityAndWait(android.content.Intent intent);
+ method public void startActivityAndWait(optional kotlin.jvm.functions.Function1<? super android.content.Intent,kotlin.Unit> block);
property public final androidx.test.uiautomator.UiDevice device;
property public final Integer? iteration;
property public final String packageName;
}
+ @androidx.benchmark.macro.ExperimentalMetricApi public final class MemoryCountersMetric extends androidx.benchmark.macro.TraceMetric {
+ ctor public MemoryCountersMetric();
+ method public java.util.List<androidx.benchmark.macro.Metric.Measurement> getResult(androidx.benchmark.macro.Metric.CaptureInfo captureInfo, androidx.benchmark.perfetto.PerfettoTraceProcessor.Session traceSession);
+ }
+
+ @androidx.benchmark.macro.ExperimentalMetricApi public final class MemoryUsageMetric extends androidx.benchmark.macro.TraceMetric {
+ ctor public MemoryUsageMetric(androidx.benchmark.macro.MemoryUsageMetric.Mode mode, optional java.util.List<? extends androidx.benchmark.macro.MemoryUsageMetric.SubMetric> subMetrics);
+ method public java.util.List<androidx.benchmark.macro.Metric.Measurement> getResult(androidx.benchmark.macro.Metric.CaptureInfo captureInfo, androidx.benchmark.perfetto.PerfettoTraceProcessor.Session traceSession);
+ }
+
+ public enum MemoryUsageMetric.Mode {
+ method public static androidx.benchmark.macro.MemoryUsageMetric.Mode valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+ method public static androidx.benchmark.macro.MemoryUsageMetric.Mode[] values();
+ enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.Mode Last;
+ enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.Mode Max;
+ }
+
+ public enum MemoryUsageMetric.SubMetric {
+ method public static androidx.benchmark.macro.MemoryUsageMetric.SubMetric valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+ method public static androidx.benchmark.macro.MemoryUsageMetric.SubMetric[] values();
+ enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.SubMetric Gpu;
+ enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.SubMetric HeapSize;
+ enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.SubMetric RssAnon;
+ enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.SubMetric RssFile;
+ enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.SubMetric RssShmem;
+ }
+
public abstract sealed class Metric {
}
+ @androidx.benchmark.macro.ExperimentalMetricApi public static final class Metric.CaptureInfo {
+ ctor public Metric.CaptureInfo(int apiLevel, String targetPackageName, String testPackageName, androidx.benchmark.macro.StartupMode? startupMode);
+ method public int component1();
+ method public String component2();
+ method public String component3();
+ method public androidx.benchmark.macro.StartupMode? component4();
+ method public androidx.benchmark.macro.Metric.CaptureInfo copy(int apiLevel, String targetPackageName, String testPackageName, androidx.benchmark.macro.StartupMode? startupMode);
+ method public int getApiLevel();
+ method public androidx.benchmark.macro.StartupMode? getStartupMode();
+ method public String getTargetPackageName();
+ method public String getTestPackageName();
+ property public final int apiLevel;
+ property public final androidx.benchmark.macro.StartupMode? startupMode;
+ property public final String targetPackageName;
+ property public final String testPackageName;
+ }
+
+ @androidx.benchmark.macro.ExperimentalMetricApi public static final class Metric.Measurement {
+ ctor public Metric.Measurement(String name, double data);
+ ctor public Metric.Measurement(String name, java.util.List<java.lang.Double> dataSamples);
+ method public String component1();
+ method public java.util.List<java.lang.Double> component2();
+ method public boolean component3();
+ method public androidx.benchmark.macro.Metric.Measurement copy(String name, java.util.List<java.lang.Double> data, boolean requireSingleValue);
+ method public java.util.List<java.lang.Double> getData();
+ method public String getName();
+ method public boolean getRequireSingleValue();
+ property public final java.util.List<java.lang.Double> data;
+ property public final String name;
+ property public final boolean requireSingleValue;
+ }
+
+ public final class MetricResultExtensionsKt {
+ method @androidx.benchmark.macro.ExperimentalMetricApi public static void assertEqualMeasurements(java.util.List<androidx.benchmark.macro.Metric.Measurement> expected, java.util.List<androidx.benchmark.macro.Metric.Measurement> observed, double threshold);
+ }
+
+ @androidx.benchmark.macro.ExperimentalMetricApi public enum PowerCategory {
+ method public static androidx.benchmark.macro.PowerCategory valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+ method public static androidx.benchmark.macro.PowerCategory[] values();
+ enum_constant public static final androidx.benchmark.macro.PowerCategory CPU;
+ enum_constant public static final androidx.benchmark.macro.PowerCategory DISPLAY;
+ enum_constant public static final androidx.benchmark.macro.PowerCategory GPS;
+ enum_constant public static final androidx.benchmark.macro.PowerCategory GPU;
+ enum_constant public static final androidx.benchmark.macro.PowerCategory MACHINE_LEARNING;
+ enum_constant public static final androidx.benchmark.macro.PowerCategory MEMORY;
+ enum_constant public static final androidx.benchmark.macro.PowerCategory NETWORK;
+ enum_constant public static final androidx.benchmark.macro.PowerCategory UNCATEGORIZED;
+ }
+
+ @androidx.benchmark.macro.ExperimentalMetricApi public enum PowerCategoryDisplayLevel {
+ method public static androidx.benchmark.macro.PowerCategoryDisplayLevel valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+ method public static androidx.benchmark.macro.PowerCategoryDisplayLevel[] values();
+ enum_constant public static final androidx.benchmark.macro.PowerCategoryDisplayLevel BREAKDOWN;
+ enum_constant public static final androidx.benchmark.macro.PowerCategoryDisplayLevel TOTAL;
+ }
+
+ @RequiresApi(29) @androidx.benchmark.macro.ExperimentalMetricApi public final class PowerMetric extends androidx.benchmark.macro.Metric {
+ ctor public PowerMetric(androidx.benchmark.macro.PowerMetric.Type type);
+ method public static androidx.benchmark.macro.PowerMetric.Type.Battery Battery();
+ method public static androidx.benchmark.macro.PowerMetric.Type.Energy Energy(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> categories);
+ method public static androidx.benchmark.macro.PowerMetric.Type.Power Power(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> categories);
+ field public static final androidx.benchmark.macro.PowerMetric.Companion Companion;
+ }
+
+ public static final class PowerMetric.Companion {
+ method public androidx.benchmark.macro.PowerMetric.Type.Battery Battery();
+ method public androidx.benchmark.macro.PowerMetric.Type.Energy Energy(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> categories);
+ method public androidx.benchmark.macro.PowerMetric.Type.Power Power(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> categories);
+ }
+
+ public abstract static sealed class PowerMetric.Type {
+ method public final java.util.Map<androidx.benchmark.macro.PowerCategory,androidx.benchmark.macro.PowerCategoryDisplayLevel> getCategories();
+ method public final void setCategories(java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel>);
+ property public final java.util.Map<androidx.benchmark.macro.PowerCategory,androidx.benchmark.macro.PowerCategoryDisplayLevel> categories;
+ }
+
+ public static final class PowerMetric.Type.Battery extends androidx.benchmark.macro.PowerMetric.Type {
+ ctor public PowerMetric.Type.Battery();
+ }
+
+ public static final class PowerMetric.Type.Energy extends androidx.benchmark.macro.PowerMetric.Type {
+ ctor public PowerMetric.Type.Energy(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> energyCategories);
+ }
+
+ public static final class PowerMetric.Type.Power extends androidx.benchmark.macro.PowerMetric.Type {
+ ctor public PowerMetric.Type.Power(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> powerCategories);
+ }
+
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class PowerRail {
method public boolean hasMetrics(optional boolean throwOnMissingMetrics);
field public static final androidx.benchmark.macro.PowerRail INSTANCE;
@@ -94,5 +226,60 @@
ctor public StartupTimingMetric();
}
+ @androidx.benchmark.macro.ExperimentalMetricApi public abstract class TraceMetric extends androidx.benchmark.macro.Metric {
+ ctor public TraceMetric();
+ method public abstract java.util.List<androidx.benchmark.macro.Metric.Measurement> getResult(androidx.benchmark.macro.Metric.CaptureInfo captureInfo, androidx.benchmark.perfetto.PerfettoTraceProcessor.Session traceSession);
+ }
+
+ @androidx.benchmark.macro.ExperimentalMetricApi public final class TraceSectionMetric extends androidx.benchmark.macro.Metric {
+ ctor public TraceSectionMetric(String sectionName, optional androidx.benchmark.macro.TraceSectionMetric.Mode mode);
+ }
+
+ public enum TraceSectionMetric.Mode {
+ method public static androidx.benchmark.macro.TraceSectionMetric.Mode valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+ method public static androidx.benchmark.macro.TraceSectionMetric.Mode[] values();
+ enum_constant public static final androidx.benchmark.macro.TraceSectionMetric.Mode First;
+ enum_constant public static final androidx.benchmark.macro.TraceSectionMetric.Mode Sum;
+ }
+
+}
+
+package androidx.benchmark.perfetto {
+
+ @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalPerfettoTraceProcessorApi {
+ }
+
+ @androidx.benchmark.perfetto.ExperimentalPerfettoTraceProcessorApi public final class PerfettoTraceProcessor {
+ ctor public PerfettoTraceProcessor();
+ method public <T> T loadTrace(androidx.benchmark.perfetto.PerfettoTrace trace, kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTraceProcessor.Session,? extends T> block);
+ method public static <T> T runServer(kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTraceProcessor,? extends T> block);
+ field public static final androidx.benchmark.perfetto.PerfettoTraceProcessor.Companion Companion;
+ }
+
+ public static final class PerfettoTraceProcessor.Companion {
+ method public <T> T runServer(kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTraceProcessor,? extends T> block);
+ }
+
+ public static final class PerfettoTraceProcessor.Session {
+ method public kotlin.sequences.Sequence<androidx.benchmark.perfetto.Row> query(@org.intellij.lang.annotations.Language("sql") String query);
+ method public byte[] rawQuery(@org.intellij.lang.annotations.Language("sql") String query);
+ }
+
+ @androidx.benchmark.perfetto.ExperimentalPerfettoTraceProcessorApi public final class Row implements kotlin.jvm.internal.markers.KMappedMarker java.util.Map<java.lang.String,java.lang.Object> {
+ ctor public Row(java.util.Map<java.lang.String,?> map);
+ method public byte[] bytes(String columnName);
+ method public double double(String columnName);
+ method public long long(String columnName);
+ method public byte[]? nullableBytes(String columnName);
+ method public Double? nullableDouble(String columnName);
+ method public Long? nullableLong(String columnName);
+ method public String? nullableString(String columnName);
+ method public String string(String columnName);
+ }
+
+ public final class RowKt {
+ method @androidx.benchmark.perfetto.ExperimentalPerfettoTraceProcessorApi public static androidx.benchmark.perfetto.Row rowOf(kotlin.Pair<java.lang.String,?>... pairs);
+ }
+
}
diff --git a/benchmark/benchmark-macro/build.gradle b/benchmark/benchmark-macro/build.gradle
index 538d68d..bc6c8e3 100644
--- a/benchmark/benchmark-macro/build.gradle
+++ b/benchmark/benchmark-macro/build.gradle
@@ -80,7 +80,7 @@
}
androidx {
- name = "Android Benchmark - Macrobenchmark"
+ name = "Benchmark - Macrobenchmark"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2020"
description = "Android Benchmark - Macrobenchmark"
diff --git a/benchmark/benchmark-macro/lint-baseline.xml b/benchmark/benchmark-macro/lint-baseline.xml
index fb8dd8f..9433540 100644
--- a/benchmark/benchmark-macro/lint-baseline.xml
+++ b/benchmark/benchmark-macro/lint-baseline.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.1.0-alpha11" type="baseline" client="gradle" dependencies="false" name="AGP (8.1.0-alpha11)" variant="all" version="8.1.0-alpha11">
+<issues format="6" by="lint 8.1.0-beta01" type="baseline" client="gradle" dependencies="false" name="AGP (8.1.0-beta01)" variant="all" version="8.1.0-beta01">
<issue
id="BanThreadSleep"
@@ -22,15 +22,6 @@
<issue
id="BanThreadSleep"
message="Uses Thread.sleep()"
- errorLine1=" Thread.sleep(Arguments.killProcessDelayMillis)"
- errorLine2=" ~~~~~">
- <location
- file="src/main/java/androidx/benchmark/macro/BaselineProfiles.kt"/>
- </issue>
-
- <issue
- id="BanThreadSleep"
- message="Uses Thread.sleep()"
errorLine1=" Thread.sleep(5000)"
errorLine2=" ~~~~~">
<location
@@ -118,4 +109,13 @@
file="src/main/java/androidx/benchmark/macro/ProfileInstallBroadcast.kt"/>
</issue>
+ <issue
+ id="PrereleaseSdkCoreDependency"
+ message="Prelease SDK check isAtLeastU cannot be called as this project has a versioned dependency on androidx.core:core"
+ errorLine1=" if (BuildCompat.isAtLeastU() || Shell.isSessionRooted()) {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/main/java/androidx/benchmark/macro/CompilationMode.kt"/>
+ </issue>
+
</issues>
diff --git a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/FileLinkingRule.kt b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/FileLinkingRule.kt
index 8ce14941..e3560f6 100644
--- a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/FileLinkingRule.kt
+++ b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/FileLinkingRule.kt
@@ -21,11 +21,11 @@
import androidx.benchmark.Outputs
import androidx.benchmark.perfetto.UiState
import androidx.benchmark.perfetto.appendUiState
+import java.io.File
import org.junit.rules.RuleChain
import org.junit.rules.TestRule
import org.junit.runner.Description
import org.junit.runners.model.Statement
-import java.io.File
/**
* Rule to enable linking files and traces to Studio UI for macrobench correctness tests.
diff --git a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/IdeSummaryStringTest.kt b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/IdeSummaryStringTest.kt
index a150eee..1a07546 100644
--- a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/IdeSummaryStringTest.kt
+++ b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/IdeSummaryStringTest.kt
@@ -21,11 +21,11 @@
import androidx.benchmark.Outputs
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
+import java.io.File
+import kotlin.test.assertFailsWith
import org.junit.Assert.assertEquals
import org.junit.Test
import org.junit.runner.RunWith
-import java.io.File
-import kotlin.test.assertFailsWith
@RunWith(AndroidJUnit4::class)
@SmallTest
diff --git a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/MacrobenchmarkTest.kt b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/MacrobenchmarkTest.kt
index de94880..337128e 100644
--- a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/MacrobenchmarkTest.kt
+++ b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/MacrobenchmarkTest.kt
@@ -24,14 +24,14 @@
import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
import androidx.tracing.trace
-import org.junit.Assume.assumeTrue
-import org.junit.Test
-import org.junit.runner.RunWith
import kotlin.test.assertEquals
import kotlin.test.assertFailsWith
import kotlin.test.assertTrue
import org.junit.Assume.assumeFalse
+import org.junit.Assume.assumeTrue
import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
@SmallTest
diff --git a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/PowerRailTest.kt b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/PowerRailTest.kt
index 5cf3d0a..0d729e3 100644
--- a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/PowerRailTest.kt
+++ b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/PowerRailTest.kt
@@ -23,7 +23,6 @@
import kotlin.test.assertFalse
import kotlin.test.assertTrue
import org.junit.Assume.assumeTrue
-
import org.junit.Test
import org.junit.runner.RunWith
diff --git a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/StartupTimingMetricTest.kt b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/StartupTimingMetricTest.kt
index cf8d947..8a0a043 100644
--- a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/StartupTimingMetricTest.kt
+++ b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/StartupTimingMetricTest.kt
@@ -302,7 +302,7 @@
} else {
listOf(packageName)
},
-
+ useStackSamplingConfig = false
),
userspaceTracingPackage = packageName,
block = measureBlock
diff --git a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/AndroidxTracingTraceTest.kt b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/AndroidxTracingTraceTest.kt
index ec0e17c..93b9fb4 100644
--- a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/AndroidxTracingTraceTest.kt
+++ b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/AndroidxTracingTraceTest.kt
@@ -67,7 +67,12 @@
verifyTraceEnable(false)
- perfettoCapture.start(PerfettoConfig.Benchmark(listOf(Packages.TEST)))
+ perfettoCapture.start(
+ PerfettoConfig.Benchmark(
+ appTagPackages = listOf(Packages.TEST),
+ useStackSamplingConfig = false
+ )
+ )
assertTrue(
Trace.isEnabled(),
diff --git a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/MemoryCountersQueryTest.kt b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/MemoryCountersQueryTest.kt
index df8c879..3c56731 100644
--- a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/MemoryCountersQueryTest.kt
+++ b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/MemoryCountersQueryTest.kt
@@ -30,7 +30,7 @@
class MemoryCountersQueryTest {
@Test
@MediumTest
- fun fixedTrace33() {
+ fun fixedTrace31() {
assumeTrue(PerfettoHelper.isAbiSupported())
val traceFile = createTempFileFromAsset("api31_startup_cold", ".perfetto-trace")
val metrics = PerfettoTraceProcessor.runSingleSessionServer(
diff --git a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/MemoryUsageQueryTest.kt b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/MemoryUsageQueryTest.kt
new file mode 100644
index 0000000..ca2857d
--- /dev/null
+++ b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/MemoryUsageQueryTest.kt
@@ -0,0 +1,129 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.benchmark.macro.perfetto
+
+import androidx.benchmark.macro.MemoryUsageMetric
+import androidx.benchmark.macro.MemoryUsageMetric.SubMetric
+import androidx.benchmark.macro.createTempFileFromAsset
+import androidx.benchmark.perfetto.PerfettoHelper
+import androidx.benchmark.perfetto.PerfettoTraceProcessor
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
+import kotlin.test.assertEquals
+import org.junit.Assume.assumeTrue
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+class MemoryUsageQueryTest {
+ @Test
+ @MediumTest
+ fun fixedTrace31() {
+ assumeTrue(PerfettoHelper.isAbiSupported())
+ val traceFile = createTempFileFromAsset("api31_startup_cold", ".perfetto-trace")
+ PerfettoTraceProcessor.runSingleSessionServer(
+ traceFile.absolutePath
+ ) {
+ // Note: this particular trace has same values for last and max
+ val expected = mapOf(
+ SubMetric.HeapSize to 3067,
+ SubMetric.RssAnon to 47260,
+ SubMetric.RssFile to 67668,
+ SubMetric.RssShmem to 1160
+ )
+ assertEquals(
+ expected,
+ MemoryUsageQuery.getMemoryUsageKb(
+ this,
+ "androidx.benchmark.integration.macrobenchmark.target",
+ mode = MemoryUsageMetric.Mode.Last
+ )
+ )
+ assertEquals(
+ expected,
+ MemoryUsageQuery.getMemoryUsageKb(
+ this,
+ "androidx.benchmark.integration.macrobenchmark.target",
+ mode = MemoryUsageMetric.Mode.Max
+ )
+ )
+ }
+ }
+
+ @Test
+ @MediumTest
+ fun fixedTrace33() {
+ assumeTrue(PerfettoHelper.isAbiSupported())
+ val traceFile =
+ createTempFileFromAsset("api33_motionlayout_messagejson", ".perfetto-trace")
+ PerfettoTraceProcessor.runSingleSessionServer(
+ traceFile.absolutePath
+ ) {
+ assertEquals(
+ mapOf(
+ SubMetric.HeapSize to 25019,
+ SubMetric.RssAnon to 78516,
+ SubMetric.RssFile to 88036,
+ SubMetric.RssShmem to 1540,
+ ),
+ MemoryUsageQuery.getMemoryUsageKb(
+ this,
+ "androidx.constraintlayout.compose.integration.macrobenchmark.target",
+ mode = MemoryUsageMetric.Mode.Last
+ )
+ )
+ assertEquals(
+ mapOf(
+ SubMetric.HeapSize to 25019,
+ SubMetric.RssAnon to 78516,
+ SubMetric.RssFile to 88168,
+ SubMetric.RssShmem to 1540,
+ ),
+ MemoryUsageQuery.getMemoryUsageKb(
+ this,
+ "androidx.constraintlayout.compose.integration.macrobenchmark.target",
+ mode = MemoryUsageMetric.Mode.Max
+ )
+ )
+ }
+ }
+
+ @Test
+ @MediumTest
+ fun fixedGpuTrace34() {
+ assumeTrue(PerfettoHelper.isAbiSupported())
+ val traceFile = createTempFileFromAsset("api34_startup_cold", ".perfetto-trace")
+ PerfettoTraceProcessor.runSingleSessionServer(
+ traceFile.absolutePath
+ ) {
+ assertEquals(
+ mapOf(
+ SubMetric.Gpu to 30840,
+ SubMetric.HeapSize to 3385,
+ SubMetric.RssAnon to 47152,
+ SubMetric.RssFile to 96868,
+ SubMetric.RssShmem to 16336,
+ ),
+ MemoryUsageQuery.getMemoryUsageKb(
+ this,
+ "com.android.systemui.people",
+ mode = MemoryUsageMetric.Mode.Last
+ )
+ )
+ }
+ }
+}
diff --git a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoCaptureSweepTest.kt b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoCaptureSweepTest.kt
index a8fb5bf..1f95b755 100644
--- a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoCaptureSweepTest.kt
+++ b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoCaptureSweepTest.kt
@@ -96,7 +96,12 @@
verifyTraceEnable(false)
- perfettoCapture.start(PerfettoConfig.Benchmark(listOf(Packages.TEST)))
+ perfettoCapture.start(
+ PerfettoConfig.Benchmark(
+ appTagPackages = listOf(Packages.TEST),
+ useStackSamplingConfig = false
+ )
+ )
if (!Trace.isEnabled()) {
// Should be available immediately, but let's wait a while to see if it works slowly.
diff --git a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoCaptureTest.kt b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoCaptureTest.kt
index c9c8608..e56cb23 100644
--- a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoCaptureTest.kt
+++ b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoCaptureTest.kt
@@ -22,10 +22,10 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
+import kotlin.test.assertFailsWith
import org.junit.Assume.assumeTrue
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.test.assertFailsWith
/**
* Tests for PerfettoCapture
diff --git a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoSdkHandshakeTest.kt b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoSdkHandshakeTest.kt
index ac15ffe..5251a9c 100644
--- a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoSdkHandshakeTest.kt
+++ b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoSdkHandshakeTest.kt
@@ -31,10 +31,10 @@
import androidx.tracing.perfetto.PerfettoHandshake
import androidx.tracing.perfetto.PerfettoHandshake.ExternalLibraryProvider
import androidx.tracing.perfetto.PerfettoHandshake.ResponseExitCodes.RESULT_CODE_ALREADY_ENABLED
-import androidx.tracing.perfetto.PerfettoHandshake.ResponseExitCodes.RESULT_CODE_ERROR_BINARY_MISSING
-import androidx.tracing.perfetto.PerfettoHandshake.ResponseExitCodes.RESULT_CODE_SUCCESS
import androidx.tracing.perfetto.PerfettoHandshake.ResponseExitCodes.RESULT_CODE_CANCELLED
+import androidx.tracing.perfetto.PerfettoHandshake.ResponseExitCodes.RESULT_CODE_ERROR_BINARY_MISSING
import androidx.tracing.perfetto.PerfettoHandshake.ResponseExitCodes.RESULT_CODE_ERROR_OTHER
+import androidx.tracing.perfetto.PerfettoHandshake.ResponseExitCodes.RESULT_CODE_SUCCESS
import com.google.common.truth.Truth.assertThat
import java.io.File
import java.io.StringReader
diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt
index 2a4020b..f1321d2 100644
--- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt
+++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt
@@ -26,6 +26,7 @@
import androidx.benchmark.BenchmarkResult
import androidx.benchmark.ConfigurationError
import androidx.benchmark.DeviceInfo
+import androidx.benchmark.Errors
import androidx.benchmark.InstrumentationResults
import androidx.benchmark.ResultWriter
import androidx.benchmark.Shell
@@ -42,6 +43,7 @@
import androidx.test.platform.app.InstrumentationRegistry
import androidx.tracing.trace
import java.io.File
+import java.lang.StringBuilder
/**
* Get package ApplicationInfo, throw if not found
@@ -168,8 +170,7 @@
}
val suppressionState = checkErrors(packageName)
- var warningMessage = suppressionState?.warningMessage ?: ""
-
+ var warningMessage = buildWarningMessage(suppressionState)
// skip benchmark if not supported by vm settings
compilationMode.assumeSupportedWithVmSettings()
@@ -231,6 +232,7 @@
} else {
listOf(packageName)
},
+ useStackSamplingConfig = true
),
userspaceTracingPackage = userspaceTracingPackage
) {
@@ -414,3 +416,15 @@
measureBlock = measureBlock
)
}
+
+private fun buildWarningMessage(suppressionState: ConfigurationError.SuppressionState?): String {
+ val warnings = Errors.acquireWarningStringForLogging()
+ val builder = StringBuilder()
+ if (suppressionState != null) {
+ builder.append(suppressionState)
+ }
+ if (warnings != null) {
+ builder.append("\n").append(warnings)
+ }
+ return builder.toString()
+}
diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Metric.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Metric.kt
index 36241de..58b51f2 100644
--- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Metric.kt
+++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Metric.kt
@@ -30,6 +30,7 @@
import androidx.benchmark.macro.perfetto.FrameTimingQuery.SubMetric
import androidx.benchmark.macro.perfetto.FrameTimingQuery.getFrameSubMetrics
import androidx.benchmark.macro.perfetto.MemoryCountersQuery
+import androidx.benchmark.macro.perfetto.MemoryUsageQuery
import androidx.benchmark.macro.perfetto.PowerQuery
import androidx.benchmark.macro.perfetto.StartupTimingQuery
import androidx.benchmark.macro.perfetto.camelCase
@@ -512,13 +513,11 @@
companion object {
internal const val MEASURE_BLOCK_SECTION_NAME = "measureBlock"
- @Suppress("FunctionName")
@JvmStatic
fun Battery(): Type.Battery {
return Type.Battery()
}
- @Suppress("FunctionName")
@JvmStatic
fun Energy(
categories: Map<PowerCategory, PowerCategoryDisplayLevel> = emptyMap()
@@ -526,7 +525,6 @@
return Type.Energy(categories)
}
- @Suppress("FunctionName")
@JvmStatic
fun Power(
categories: Map<PowerCategory, PowerCategoryDisplayLevel> = emptyMap()
@@ -678,6 +676,84 @@
}
/**
+ * Metric for tracking the memory usage of the target application.
+ *
+ * There are two modes for measurement - `Last`, which represents the last observed value
+ * during an iteration, and `Max`, which represents the largest sample observed per measurement.
+ *
+ * By default, reports:
+ * * `memoryRssAnonKb` - Anonymous resident/allocated memory owned by the process, not including
+ * memory mapped files or shared memory.
+ * * `memoryRssAnonFileKb` - Memory allocated by the process to map files.
+ * * `memoryHeapSizeKb` - Heap memory allocations from the Android Runtime, sampled after each GC.
+ * * `memoryGpuKb` - GPU Memory allocated for the process.
+ *
+ * By passing a custom `subMetrics` list, you can enable other [SubMetric]s.
+ */
+@ExperimentalMetricApi
+class MemoryUsageMetric(
+ private val mode: Mode,
+ private val subMetrics: List<SubMetric> = listOf(
+ SubMetric.HeapSize,
+ SubMetric.RssAnon,
+ SubMetric.RssFile,
+ SubMetric.Gpu,
+ )
+) : TraceMetric() {
+ enum class Mode {
+ /**
+ * Select the last available sample for each value. Useful for inspecting the final state of
+ * e.g. Heap Size.
+ */
+ Last,
+
+ /**
+ * Select the maximum value observed.
+ *
+ * Useful for inspecting the worst case state, e.g. finding worst heap size during a given
+ * scenario.
+ */
+ Max
+ }
+ enum class SubMetric(
+ /**
+ * Name of counter in trace.
+ */
+ internal val counterName: String,
+ /**
+ * False if the metric is represented in the trace in bytes,
+ * and must be divided by 1024 to be converted to KB.
+ */
+ internal val alreadyInKb: Boolean
+ ) {
+ HeapSize("Heap size (KB)", alreadyInKb = true),
+ RssAnon("mem.rss.anon", alreadyInKb = false),
+ RssFile("mem.rss.file", alreadyInKb = false),
+ RssShmem("mem.rss.shmem", alreadyInKb = false),
+ Gpu("GPU Memory", alreadyInKb = false)
+ }
+
+ override fun getResult(
+ captureInfo: CaptureInfo,
+ traceSession: PerfettoTraceProcessor.Session
+ ): List<Measurement> {
+
+ val suffix = mode.toString()
+ return MemoryUsageQuery.getMemoryUsageKb(
+ session = traceSession,
+ targetPackageName = captureInfo.targetPackageName,
+ mode = mode
+ )?.mapNotNull {
+ if (it.key in subMetrics) {
+ Measurement("memory${it.key}${suffix}Kb", it.value.toDouble())
+ } else {
+ null
+ }
+ } ?: listOf()
+ }
+}
+
+/**
* Captures the number of page faults over time for a target package name.
*/
@ExperimentalMetricApi
diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/perfetto/MemoryCountersQuery.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/perfetto/MemoryCountersQuery.kt
index 1d9a6aa..43fd2be 100644
--- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/perfetto/MemoryCountersQuery.kt
+++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/perfetto/MemoryCountersQuery.kt
@@ -16,8 +16,6 @@
package androidx.benchmark.macro.perfetto
-import android.util.Log
-import androidx.benchmark.macro.TAG
import androidx.benchmark.perfetto.PerfettoTraceProcessor
import androidx.benchmark.perfetto.processNameLikePkg
import org.intellij.lang.annotations.Language
@@ -25,18 +23,17 @@
internal object MemoryCountersQuery {
// https://perfetto.dev/docs/data-sources/memory-counters
@Language("sql")
- internal fun getFullQuery(targetPackageName: String) = """
+ internal fun getQuery(targetPackageName: String) = """
SELECT
track.name as counter_name,
- process.name as process_name,
- ts,
- value
+ SUM(value)
FROM counter
LEFT JOIN process_counter_track as track on counter.track_id = track.id
LEFT JOIN process using (upid)
WHERE
${processNameLikePkg(targetPackageName)} AND
track.name LIKE 'mem.%.count'
+ GROUP BY counter_name
""".trimIndent()
private const val MINOR_PAGE_FAULTS_COUNT = "mem.mm.min_flt.count"
@@ -66,58 +63,24 @@
targetPackageName: String
): SubMetrics? {
val queryResultIterator = session.query(
- query = getFullQuery(targetPackageName = targetPackageName)
+ query = getQuery(targetPackageName = targetPackageName)
)
- var minorPageFaults = 0.0
- var majorPageFaults = 0.0
- var faultsBackedBySwapCache = 0.0
- var faultsBackedByReadIO = 0.0
- var memoryCompactionEvents = 0.0
- var memoryReclaimEvents = 0.0
-
val rows = queryResultIterator.toList()
- if (rows.isEmpty()) {
- return null
+ return if (rows.isEmpty()) {
+ null
} else {
- rows.forEach { row ->
- when (row.string("counter_name")) {
-
- MINOR_PAGE_FAULTS_COUNT -> {
- minorPageFaults += row.double("value")
- }
-
- MAJOR_PAGE_FAULTS_COUNT -> {
- majorPageFaults += row.double("value")
- }
-
- PAGE_FAULTS_BACKED_BY_SWAP_CACHE_COUNT -> {
- faultsBackedBySwapCache += row.double("value")
- }
-
- PAGE_FAULTS_BACKED_BY_READ_IO_COUNT -> {
- faultsBackedByReadIO += row.double("value")
- }
-
- MEMORY_COMPACTION_EVENTS_COUNT -> {
- memoryCompactionEvents += row.double("value")
- }
-
- MEMORY_RECLAIM_EVENTS_COUNT -> {
- memoryReclaimEvents += row.double("value")
- }
-
- else -> Log.d(TAG, "Unknown counter: $row")
- }
+ val summations: Map<String, Double> = rows.associate {
+ it.string("counter_name") to it.double("SUM(value)")
}
-
- return SubMetrics(
- minorPageFaults = minorPageFaults,
- majorPageFaults = majorPageFaults,
- pageFaultsBackedBySwapCache = faultsBackedBySwapCache,
- pageFaultsBackedByReadIO = faultsBackedByReadIO,
- memoryCompactionEvents = memoryCompactionEvents,
- memoryReclaimEvents = memoryReclaimEvents
+ SubMetrics(
+ minorPageFaults = summations[MINOR_PAGE_FAULTS_COUNT] ?: 0.0,
+ majorPageFaults = summations[MAJOR_PAGE_FAULTS_COUNT] ?: 0.0,
+ pageFaultsBackedBySwapCache = summations[PAGE_FAULTS_BACKED_BY_SWAP_CACHE_COUNT]
+ ?: 0.0,
+ pageFaultsBackedByReadIO = summations[PAGE_FAULTS_BACKED_BY_READ_IO_COUNT] ?: 0.0,
+ memoryCompactionEvents = summations[MEMORY_COMPACTION_EVENTS_COUNT] ?: 0.0,
+ memoryReclaimEvents = summations[MEMORY_RECLAIM_EVENTS_COUNT] ?: 0.0
)
}
}
diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/perfetto/MemoryUsageQuery.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/perfetto/MemoryUsageQuery.kt
new file mode 100644
index 0000000..ff6bad9
--- /dev/null
+++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/perfetto/MemoryUsageQuery.kt
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.benchmark.macro.perfetto
+
+import androidx.benchmark.macro.MemoryUsageMetric
+import androidx.benchmark.macro.MemoryUsageMetric.Mode
+import androidx.benchmark.perfetto.PerfettoTraceProcessor
+import androidx.benchmark.perfetto.processNameLikePkg
+import org.intellij.lang.annotations.Language
+
+internal object MemoryUsageQuery {
+ // https://perfetto.dev/docs/data-sources/memory-counters
+ @Language("sql")
+ internal fun getQuery(targetPackageName: String, mode: Mode) =
+ when (mode) {
+ Mode.Last -> "SELECT track.name as counter_name, MAX(ts), value "
+ Mode.Max -> "SELECT track.name as counter_name, MAX(value) as value "
+ } + """
+ FROM counter
+ LEFT JOIN process_counter_track as track on counter.track_id = track.id
+ LEFT JOIN process using (upid)
+ WHERE
+ ${processNameLikePkg(targetPackageName)} AND
+ (
+ track.name LIKE 'mem.rss%' OR
+ track.name LIKE 'Heap size (KB)' OR
+ track.name LIKE 'GPU Memory'
+ )
+ GROUP BY counter_name
+ """.trimIndent()
+
+ fun getMemoryUsageKb(
+ session: PerfettoTraceProcessor.Session,
+ targetPackageName: String,
+ mode: Mode
+ ): Map<MemoryUsageMetric.SubMetric, Int>? {
+ val queryResultIterator = session.query(
+ query = getQuery(targetPackageName = targetPackageName, mode)
+ )
+
+ val rows = queryResultIterator.toList()
+ return if (rows.isEmpty()) {
+ null
+ } else {
+ rows.mapNotNull { row ->
+ val counterName = row.string("counter_name")
+ val metric = MemoryUsageMetric.SubMetric.values().firstOrNull {
+ it.counterName == counterName
+ }
+ if (metric == null) {
+ null
+ } else {
+ val measurement = row.double("value")
+ metric to if (metric.alreadyInKb) {
+ measurement.toInt()
+ } else {
+ measurement.toInt() / 1024
+ }
+ }
+ }.toMap()
+ }
+ }
+}
diff --git a/benchmark/benchmark/src/androidTest/java/androidx/benchmark/benchmark/SynchronizedBenchmark.kt b/benchmark/benchmark/src/androidTest/java/androidx/benchmark/benchmark/SynchronizedBenchmark.kt
index a890b12..0a84a30 100644
--- a/benchmark/benchmark/src/androidTest/java/androidx/benchmark/benchmark/SynchronizedBenchmark.kt
+++ b/benchmark/benchmark/src/androidTest/java/androidx/benchmark/benchmark/SynchronizedBenchmark.kt
@@ -20,10 +20,10 @@
import androidx.benchmark.junit4.measureRepeated
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
+import java.util.concurrent.atomic.AtomicInteger
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.atomic.AtomicInteger
@LargeTest
@RunWith(AndroidJUnit4::class)
diff --git a/benchmark/gradle-plugin/build.gradle b/benchmark/gradle-plugin/build.gradle
index fdf95af..11bf133 100644
--- a/benchmark/gradle-plugin/build.gradle
+++ b/benchmark/gradle-plugin/build.gradle
@@ -58,7 +58,7 @@
}
androidx {
- name = "Android Benchmark Gradle Plugin"
+ name = "Benchmark Gradle Plugin"
type = LibraryType.GRADLE_PLUGIN
inceptionYear = "2019"
description = "Android Benchmark Gradle Plugin"
diff --git a/benchmark/gradle-plugin/src/main/kotlin/androidx/benchmark/gradle/Adb.kt b/benchmark/gradle-plugin/src/main/kotlin/androidx/benchmark/gradle/Adb.kt
index 2c25293..e78a7a0 100644
--- a/benchmark/gradle-plugin/src/main/kotlin/androidx/benchmark/gradle/Adb.kt
+++ b/benchmark/gradle-plugin/src/main/kotlin/androidx/benchmark/gradle/Adb.kt
@@ -16,10 +16,10 @@
package androidx.benchmark.gradle
+import java.util.concurrent.TimeUnit
import org.gradle.api.GradleException
import org.gradle.api.logging.LogLevel
import org.gradle.api.logging.Logger
-import java.util.concurrent.TimeUnit
/**
* Helper class wrapping the adb cli tool.
diff --git a/benchmark/gradle-plugin/src/main/kotlin/androidx/benchmark/gradle/LockClocksTask.kt b/benchmark/gradle-plugin/src/main/kotlin/androidx/benchmark/gradle/LockClocksTask.kt
index 5c02ad4..89f09cb 100644
--- a/benchmark/gradle-plugin/src/main/kotlin/androidx/benchmark/gradle/LockClocksTask.kt
+++ b/benchmark/gradle-plugin/src/main/kotlin/androidx/benchmark/gradle/LockClocksTask.kt
@@ -16,6 +16,9 @@
package androidx.benchmark.gradle
+import java.nio.file.Files
+import java.nio.file.Paths
+import java.nio.file.StandardCopyOption
import org.gradle.api.DefaultTask
import org.gradle.api.GradleException
import org.gradle.api.provider.Property
@@ -23,9 +26,6 @@
import org.gradle.api.tasks.TaskAction
import org.gradle.kotlin.dsl.property
import org.gradle.work.DisableCachingByDefault
-import java.nio.file.Files
-import java.nio.file.Paths
-import java.nio.file.StandardCopyOption
@Suppress("UnstableApiUsage")
@DisableCachingByDefault(
diff --git a/benchmark/gradle-plugin/src/test/kotlin/androidx/benchmark/gradle/BenchmarkPluginTest.kt b/benchmark/gradle-plugin/src/test/kotlin/androidx/benchmark/gradle/BenchmarkPluginTest.kt
index 4decc0a..01f9af5 100644
--- a/benchmark/gradle-plugin/src/test/kotlin/androidx/benchmark/gradle/BenchmarkPluginTest.kt
+++ b/benchmark/gradle-plugin/src/test/kotlin/androidx/benchmark/gradle/BenchmarkPluginTest.kt
@@ -17,6 +17,10 @@
package androidx.benchmark.gradle
import androidx.testutils.gradle.ProjectSetupRule
+import java.io.File
+import kotlin.test.assertFailsWith
+import kotlin.test.assertFalse
+import kotlin.test.assertTrue
import org.gradle.testkit.runner.GradleRunner
import org.gradle.testkit.runner.UnexpectedBuildFailure
import org.junit.Before
@@ -24,10 +28,6 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import java.io.File
-import kotlin.test.assertFailsWith
-import kotlin.test.assertFalse
-import kotlin.test.assertTrue
private val PLUGINS_HEADER = """
plugins {
diff --git a/benchmark/integration-tests/macrobenchmark-target/src/main/AndroidManifest.xml b/benchmark/integration-tests/macrobenchmark-target/src/main/AndroidManifest.xml
index 058d0f6..35b79ff 100644
--- a/benchmark/integration-tests/macrobenchmark-target/src/main/AndroidManifest.xml
+++ b/benchmark/integration-tests/macrobenchmark-target/src/main/AndroidManifest.xml
@@ -29,9 +29,13 @@
<!--
Activities need to be exported so the macrobenchmark can discover them.
+
+ Feel free to add the launcher intent filter to enable easier profiling,
+ just be sure to add a consistent label.
-->
<activity
android:name=".TrivialStartupActivity"
+ android:label="B Trivial"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@@ -63,8 +67,13 @@
<activity
android:name=".RecyclerViewActivity"
+ android:label="B RecyclerView"
android:exported="true">
<intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ <intent-filter>
<action android:name="androidx.benchmark.integration.macrobenchmark.target.RECYCLER_VIEW" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
diff --git a/benchmark/integration-tests/macrobenchmark-target/src/main/java/androidx/benchmark/integration/macrobenchmark/target/BackgroundWorkActivity.kt b/benchmark/integration-tests/macrobenchmark-target/src/main/java/androidx/benchmark/integration/macrobenchmark/target/BackgroundWorkActivity.kt
index 9ccde18..64abbf4 100644
--- a/benchmark/integration-tests/macrobenchmark-target/src/main/java/androidx/benchmark/integration/macrobenchmark/target/BackgroundWorkActivity.kt
+++ b/benchmark/integration-tests/macrobenchmark-target/src/main/java/androidx/benchmark/integration/macrobenchmark/target/BackgroundWorkActivity.kt
@@ -23,12 +23,12 @@
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.tracing.trace
-import kotlin.concurrent.thread
import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.OutOfQuotaPolicy
import androidx.work.WorkInfo
import androidx.work.WorkManager
import java.util.concurrent.CountDownLatch
+import kotlin.concurrent.thread
class BackgroundWorkActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
diff --git a/benchmark/integration-tests/macrobenchmark/src/main/java/androidx/benchmark/integration/macrobenchmark/SingleColorPowerBenchmark.kt b/benchmark/integration-tests/macrobenchmark/src/main/java/androidx/benchmark/integration/macrobenchmark/SingleColorPowerBenchmark.kt
index 70de30b..daff320 100644
--- a/benchmark/integration-tests/macrobenchmark/src/main/java/androidx/benchmark/integration/macrobenchmark/SingleColorPowerBenchmark.kt
+++ b/benchmark/integration-tests/macrobenchmark/src/main/java/androidx/benchmark/integration/macrobenchmark/SingleColorPowerBenchmark.kt
@@ -16,9 +16,9 @@
package androidx.benchmark.integration.macrobenchmark
-import android.os.Bundle
import android.content.Intent
import android.graphics.Color
+import android.os.Bundle
import androidx.benchmark.macro.BatteryCharge
import androidx.benchmark.macro.CompilationMode
import androidx.benchmark.macro.ExperimentalMetricApi
diff --git a/benchmark/integration-tests/macrobenchmark/src/main/java/androidx/benchmark/integration/macrobenchmark/TrivialPowerBenchmark.kt b/benchmark/integration-tests/macrobenchmark/src/main/java/androidx/benchmark/integration/macrobenchmark/TrivialPowerBenchmark.kt
index 8917e0e..abd49e50 100644
--- a/benchmark/integration-tests/macrobenchmark/src/main/java/androidx/benchmark/integration/macrobenchmark/TrivialPowerBenchmark.kt
+++ b/benchmark/integration-tests/macrobenchmark/src/main/java/androidx/benchmark/integration/macrobenchmark/TrivialPowerBenchmark.kt
@@ -18,10 +18,10 @@
import android.content.Intent
import androidx.benchmark.macro.BatteryCharge
-import androidx.benchmark.macro.PowerCategory
-import androidx.benchmark.macro.PowerCategoryDisplayLevel
import androidx.benchmark.macro.CompilationMode
import androidx.benchmark.macro.ExperimentalMetricApi
+import androidx.benchmark.macro.PowerCategory
+import androidx.benchmark.macro.PowerCategoryDisplayLevel
import androidx.benchmark.macro.PowerMetric
import androidx.benchmark.macro.PowerRail
import androidx.benchmark.macro.StartupMode
diff --git a/biometric/biometric-ktx/api/current.txt b/biometric/biometric-ktx/api/current.txt
index 4b44a85..d24d498 100644
--- a/biometric/biometric-ktx/api/current.txt
+++ b/biometric/biometric-ktx/api/current.txt
@@ -15,42 +15,42 @@
public final class Class2BiometricAuthExtensionsKt {
method public static suspend Object? authenticate(androidx.biometric.auth.Class2BiometricAuthPrompt, androidx.biometric.auth.AuthPromptHost host, kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method public static suspend Object? authenticateWithClass2Biometrics(androidx.fragment.app.FragmentActivity, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
method public static suspend Object? authenticateWithClass2Biometrics(androidx.fragment.app.Fragment, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method public static androidx.biometric.auth.AuthPrompt startClass2BiometricAuthentication(androidx.fragment.app.FragmentActivity, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
+ method public static suspend Object? authenticateWithClass2Biometrics(androidx.fragment.app.FragmentActivity, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
method public static androidx.biometric.auth.AuthPrompt startClass2BiometricAuthentication(androidx.fragment.app.Fragment, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
+ method public static androidx.biometric.auth.AuthPrompt startClass2BiometricAuthentication(androidx.fragment.app.FragmentActivity, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
}
public final class Class2BiometricOrCredentialAuthExtensionsKt {
method public static suspend Object? authenticate(androidx.biometric.auth.Class2BiometricOrCredentialAuthPrompt, androidx.biometric.auth.AuthPromptHost host, kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method public static suspend Object? authenticateWithClass2BiometricsOrCredentials(androidx.fragment.app.FragmentActivity, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
method public static suspend Object? authenticateWithClass2BiometricsOrCredentials(androidx.fragment.app.Fragment, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method public static androidx.biometric.auth.AuthPrompt startClass2BiometricOrCredentialAuthentication(androidx.fragment.app.FragmentActivity, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
+ method public static suspend Object? authenticateWithClass2BiometricsOrCredentials(androidx.fragment.app.FragmentActivity, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
method public static androidx.biometric.auth.AuthPrompt startClass2BiometricOrCredentialAuthentication(androidx.fragment.app.Fragment, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
+ method public static androidx.biometric.auth.AuthPrompt startClass2BiometricOrCredentialAuthentication(androidx.fragment.app.FragmentActivity, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
}
public final class Class3BiometricAuthExtensionsKt {
method public static suspend Object? authenticate(androidx.biometric.auth.Class3BiometricAuthPrompt, androidx.biometric.auth.AuthPromptHost host, androidx.biometric.BiometricPrompt.CryptoObject? crypto, kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method public static androidx.biometric.auth.AuthPrompt authenticateWithClass3Biometrics(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
- method public static suspend Object? authenticateWithClass3Biometrics(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
method public static androidx.biometric.auth.AuthPrompt authenticateWithClass3Biometrics(androidx.fragment.app.Fragment, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
method public static suspend Object? authenticateWithClass3Biometrics(androidx.fragment.app.Fragment, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
+ method public static androidx.biometric.auth.AuthPrompt authenticateWithClass3Biometrics(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
+ method public static suspend Object? authenticateWithClass3Biometrics(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
}
public final class Class3BiometricOrCredentialAuthExtensionsKt {
method @RequiresApi(android.os.Build.VERSION_CODES.R) public static suspend Object? authenticate(androidx.biometric.auth.Class3BiometricOrCredentialAuthPrompt, androidx.biometric.auth.AuthPromptHost host, androidx.biometric.BiometricPrompt.CryptoObject? crypto, kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method @RequiresApi(android.os.Build.VERSION_CODES.R) public static suspend Object? authenticateWithClass3BiometricsOrCredentials(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
method @RequiresApi(android.os.Build.VERSION_CODES.R) public static suspend Object? authenticateWithClass3BiometricsOrCredentials(androidx.fragment.app.Fragment, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method @RequiresApi(android.os.Build.VERSION_CODES.R) public static androidx.biometric.auth.AuthPrompt startClass3BiometricOrCredentialAuthentication(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
+ method @RequiresApi(android.os.Build.VERSION_CODES.R) public static suspend Object? authenticateWithClass3BiometricsOrCredentials(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
method @RequiresApi(android.os.Build.VERSION_CODES.R) public static androidx.biometric.auth.AuthPrompt startClass3BiometricOrCredentialAuthentication(androidx.fragment.app.Fragment, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
+ method @RequiresApi(android.os.Build.VERSION_CODES.R) public static androidx.biometric.auth.AuthPrompt startClass3BiometricOrCredentialAuthentication(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
}
public final class CredentialAuthExtensionsKt {
method @RequiresApi(android.os.Build.VERSION_CODES.R) public static suspend Object? authenticate(androidx.biometric.auth.CredentialAuthPrompt, androidx.biometric.auth.AuthPromptHost host, androidx.biometric.BiometricPrompt.CryptoObject? crypto, kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method @RequiresApi(android.os.Build.VERSION_CODES.R) public static suspend Object? authenticateWithCredentials(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? description, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
method @RequiresApi(android.os.Build.VERSION_CODES.R) public static suspend Object? authenticateWithCredentials(androidx.fragment.app.Fragment, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? description, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method @RequiresApi(android.os.Build.VERSION_CODES.R) public static androidx.biometric.auth.AuthPrompt startCredentialAuthentication(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? description, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
+ method @RequiresApi(android.os.Build.VERSION_CODES.R) public static suspend Object? authenticateWithCredentials(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? description, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
method @RequiresApi(android.os.Build.VERSION_CODES.R) public static androidx.biometric.auth.AuthPrompt startCredentialAuthentication(androidx.fragment.app.Fragment, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? description, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
+ method @RequiresApi(android.os.Build.VERSION_CODES.R) public static androidx.biometric.auth.AuthPrompt startCredentialAuthentication(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? description, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
}
}
diff --git a/biometric/biometric-ktx/api/public_plus_experimental_current.txt b/biometric/biometric-ktx/api/public_plus_experimental_current.txt
deleted file mode 100644
index 4b44a85..0000000
--- a/biometric/biometric-ktx/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-// Signature format: 4.0
-package androidx.biometric.auth {
-
- public final class AuthPromptErrorException extends java.lang.Exception {
- ctor public AuthPromptErrorException(int errorCode, CharSequence errorMessage);
- method public int getErrorCode();
- method public CharSequence getErrorMessage();
- property public final int errorCode;
- property public final CharSequence errorMessage;
- }
-
- public final class AuthPromptFailureException extends java.lang.Exception {
- ctor public AuthPromptFailureException();
- }
-
- public final class Class2BiometricAuthExtensionsKt {
- method public static suspend Object? authenticate(androidx.biometric.auth.Class2BiometricAuthPrompt, androidx.biometric.auth.AuthPromptHost host, kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method public static suspend Object? authenticateWithClass2Biometrics(androidx.fragment.app.FragmentActivity, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method public static suspend Object? authenticateWithClass2Biometrics(androidx.fragment.app.Fragment, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method public static androidx.biometric.auth.AuthPrompt startClass2BiometricAuthentication(androidx.fragment.app.FragmentActivity, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
- method public static androidx.biometric.auth.AuthPrompt startClass2BiometricAuthentication(androidx.fragment.app.Fragment, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
- }
-
- public final class Class2BiometricOrCredentialAuthExtensionsKt {
- method public static suspend Object? authenticate(androidx.biometric.auth.Class2BiometricOrCredentialAuthPrompt, androidx.biometric.auth.AuthPromptHost host, kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method public static suspend Object? authenticateWithClass2BiometricsOrCredentials(androidx.fragment.app.FragmentActivity, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method public static suspend Object? authenticateWithClass2BiometricsOrCredentials(androidx.fragment.app.Fragment, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method public static androidx.biometric.auth.AuthPrompt startClass2BiometricOrCredentialAuthentication(androidx.fragment.app.FragmentActivity, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
- method public static androidx.biometric.auth.AuthPrompt startClass2BiometricOrCredentialAuthentication(androidx.fragment.app.Fragment, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
- }
-
- public final class Class3BiometricAuthExtensionsKt {
- method public static suspend Object? authenticate(androidx.biometric.auth.Class3BiometricAuthPrompt, androidx.biometric.auth.AuthPromptHost host, androidx.biometric.BiometricPrompt.CryptoObject? crypto, kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method public static androidx.biometric.auth.AuthPrompt authenticateWithClass3Biometrics(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
- method public static suspend Object? authenticateWithClass3Biometrics(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method public static androidx.biometric.auth.AuthPrompt authenticateWithClass3Biometrics(androidx.fragment.app.Fragment, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
- method public static suspend Object? authenticateWithClass3Biometrics(androidx.fragment.app.Fragment, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- }
-
- public final class Class3BiometricOrCredentialAuthExtensionsKt {
- method @RequiresApi(android.os.Build.VERSION_CODES.R) public static suspend Object? authenticate(androidx.biometric.auth.Class3BiometricOrCredentialAuthPrompt, androidx.biometric.auth.AuthPromptHost host, androidx.biometric.BiometricPrompt.CryptoObject? crypto, kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method @RequiresApi(android.os.Build.VERSION_CODES.R) public static suspend Object? authenticateWithClass3BiometricsOrCredentials(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method @RequiresApi(android.os.Build.VERSION_CODES.R) public static suspend Object? authenticateWithClass3BiometricsOrCredentials(androidx.fragment.app.Fragment, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method @RequiresApi(android.os.Build.VERSION_CODES.R) public static androidx.biometric.auth.AuthPrompt startClass3BiometricOrCredentialAuthentication(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
- method @RequiresApi(android.os.Build.VERSION_CODES.R) public static androidx.biometric.auth.AuthPrompt startClass3BiometricOrCredentialAuthentication(androidx.fragment.app.Fragment, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
- }
-
- public final class CredentialAuthExtensionsKt {
- method @RequiresApi(android.os.Build.VERSION_CODES.R) public static suspend Object? authenticate(androidx.biometric.auth.CredentialAuthPrompt, androidx.biometric.auth.AuthPromptHost host, androidx.biometric.BiometricPrompt.CryptoObject? crypto, kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method @RequiresApi(android.os.Build.VERSION_CODES.R) public static suspend Object? authenticateWithCredentials(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? description, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method @RequiresApi(android.os.Build.VERSION_CODES.R) public static suspend Object? authenticateWithCredentials(androidx.fragment.app.Fragment, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? description, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method @RequiresApi(android.os.Build.VERSION_CODES.R) public static androidx.biometric.auth.AuthPrompt startCredentialAuthentication(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? description, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
- method @RequiresApi(android.os.Build.VERSION_CODES.R) public static androidx.biometric.auth.AuthPrompt startCredentialAuthentication(androidx.fragment.app.Fragment, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? description, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
- }
-
-}
-
diff --git a/biometric/biometric-ktx/api/restricted_current.txt b/biometric/biometric-ktx/api/restricted_current.txt
index 4b44a85..d24d498 100644
--- a/biometric/biometric-ktx/api/restricted_current.txt
+++ b/biometric/biometric-ktx/api/restricted_current.txt
@@ -15,42 +15,42 @@
public final class Class2BiometricAuthExtensionsKt {
method public static suspend Object? authenticate(androidx.biometric.auth.Class2BiometricAuthPrompt, androidx.biometric.auth.AuthPromptHost host, kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method public static suspend Object? authenticateWithClass2Biometrics(androidx.fragment.app.FragmentActivity, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
method public static suspend Object? authenticateWithClass2Biometrics(androidx.fragment.app.Fragment, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method public static androidx.biometric.auth.AuthPrompt startClass2BiometricAuthentication(androidx.fragment.app.FragmentActivity, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
+ method public static suspend Object? authenticateWithClass2Biometrics(androidx.fragment.app.FragmentActivity, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
method public static androidx.biometric.auth.AuthPrompt startClass2BiometricAuthentication(androidx.fragment.app.Fragment, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
+ method public static androidx.biometric.auth.AuthPrompt startClass2BiometricAuthentication(androidx.fragment.app.FragmentActivity, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
}
public final class Class2BiometricOrCredentialAuthExtensionsKt {
method public static suspend Object? authenticate(androidx.biometric.auth.Class2BiometricOrCredentialAuthPrompt, androidx.biometric.auth.AuthPromptHost host, kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method public static suspend Object? authenticateWithClass2BiometricsOrCredentials(androidx.fragment.app.FragmentActivity, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
method public static suspend Object? authenticateWithClass2BiometricsOrCredentials(androidx.fragment.app.Fragment, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method public static androidx.biometric.auth.AuthPrompt startClass2BiometricOrCredentialAuthentication(androidx.fragment.app.FragmentActivity, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
+ method public static suspend Object? authenticateWithClass2BiometricsOrCredentials(androidx.fragment.app.FragmentActivity, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
method public static androidx.biometric.auth.AuthPrompt startClass2BiometricOrCredentialAuthentication(androidx.fragment.app.Fragment, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
+ method public static androidx.biometric.auth.AuthPrompt startClass2BiometricOrCredentialAuthentication(androidx.fragment.app.FragmentActivity, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
}
public final class Class3BiometricAuthExtensionsKt {
method public static suspend Object? authenticate(androidx.biometric.auth.Class3BiometricAuthPrompt, androidx.biometric.auth.AuthPromptHost host, androidx.biometric.BiometricPrompt.CryptoObject? crypto, kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method public static androidx.biometric.auth.AuthPrompt authenticateWithClass3Biometrics(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
- method public static suspend Object? authenticateWithClass3Biometrics(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
method public static androidx.biometric.auth.AuthPrompt authenticateWithClass3Biometrics(androidx.fragment.app.Fragment, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
method public static suspend Object? authenticateWithClass3Biometrics(androidx.fragment.app.Fragment, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
+ method public static androidx.biometric.auth.AuthPrompt authenticateWithClass3Biometrics(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
+ method public static suspend Object? authenticateWithClass3Biometrics(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, CharSequence negativeButtonText, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
}
public final class Class3BiometricOrCredentialAuthExtensionsKt {
method @RequiresApi(android.os.Build.VERSION_CODES.R) public static suspend Object? authenticate(androidx.biometric.auth.Class3BiometricOrCredentialAuthPrompt, androidx.biometric.auth.AuthPromptHost host, androidx.biometric.BiometricPrompt.CryptoObject? crypto, kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method @RequiresApi(android.os.Build.VERSION_CODES.R) public static suspend Object? authenticateWithClass3BiometricsOrCredentials(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
method @RequiresApi(android.os.Build.VERSION_CODES.R) public static suspend Object? authenticateWithClass3BiometricsOrCredentials(androidx.fragment.app.Fragment, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method @RequiresApi(android.os.Build.VERSION_CODES.R) public static androidx.biometric.auth.AuthPrompt startClass3BiometricOrCredentialAuthentication(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
+ method @RequiresApi(android.os.Build.VERSION_CODES.R) public static suspend Object? authenticateWithClass3BiometricsOrCredentials(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
method @RequiresApi(android.os.Build.VERSION_CODES.R) public static androidx.biometric.auth.AuthPrompt startClass3BiometricOrCredentialAuthentication(androidx.fragment.app.Fragment, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
+ method @RequiresApi(android.os.Build.VERSION_CODES.R) public static androidx.biometric.auth.AuthPrompt startClass3BiometricOrCredentialAuthentication(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? subtitle, optional CharSequence? description, optional boolean confirmationRequired, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
}
public final class CredentialAuthExtensionsKt {
method @RequiresApi(android.os.Build.VERSION_CODES.R) public static suspend Object? authenticate(androidx.biometric.auth.CredentialAuthPrompt, androidx.biometric.auth.AuthPromptHost host, androidx.biometric.BiometricPrompt.CryptoObject? crypto, kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method @RequiresApi(android.os.Build.VERSION_CODES.R) public static suspend Object? authenticateWithCredentials(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? description, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
method @RequiresApi(android.os.Build.VERSION_CODES.R) public static suspend Object? authenticateWithCredentials(androidx.fragment.app.Fragment, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? description, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
- method @RequiresApi(android.os.Build.VERSION_CODES.R) public static androidx.biometric.auth.AuthPrompt startCredentialAuthentication(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? description, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
+ method @RequiresApi(android.os.Build.VERSION_CODES.R) public static suspend Object? authenticateWithCredentials(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? description, optional kotlin.coroutines.Continuation<? super androidx.biometric.BiometricPrompt.AuthenticationResult>);
method @RequiresApi(android.os.Build.VERSION_CODES.R) public static androidx.biometric.auth.AuthPrompt startCredentialAuthentication(androidx.fragment.app.Fragment, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? description, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
+ method @RequiresApi(android.os.Build.VERSION_CODES.R) public static androidx.biometric.auth.AuthPrompt startCredentialAuthentication(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.CryptoObject? crypto, CharSequence title, optional CharSequence? description, optional java.util.concurrent.Executor? executor, androidx.biometric.auth.AuthPromptCallback callback);
}
}
diff --git a/biometric/biometric-ktx/samples/build.gradle b/biometric/biometric-ktx/samples/build.gradle
index 0f995ee..5d20e55 100644
--- a/biometric/biometric-ktx/samples/build.gradle
+++ b/biometric/biometric-ktx/samples/build.gradle
@@ -28,7 +28,7 @@
}
androidx {
- name = "AndroidX Biometric Samples"
+ name = "Biometric Samples"
type = LibraryType.SAMPLES
inceptionYear = "2021"
description = "Contains the sample code for the AndroidX Biometric library"
diff --git a/biometric/biometric-ktx/src/main/java/androidx/biometric/auth/Class2BiometricAuthExtensions.kt b/biometric/biometric-ktx/src/main/java/androidx/biometric/auth/Class2BiometricAuthExtensions.kt
index a940f035..df6709e 100755
--- a/biometric/biometric-ktx/src/main/java/androidx/biometric/auth/Class2BiometricAuthExtensions.kt
+++ b/biometric/biometric-ktx/src/main/java/androidx/biometric/auth/Class2BiometricAuthExtensions.kt
@@ -18,8 +18,8 @@
import androidx.biometric.BiometricPrompt.AuthenticationResult
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
-import kotlinx.coroutines.suspendCancellableCoroutine
import java.util.concurrent.Executor
+import kotlinx.coroutines.suspendCancellableCoroutine
/**
* Shows an authentication prompt to the user.
diff --git a/biometric/biometric-ktx/src/main/java/androidx/biometric/auth/Class2BiometricOrCredentialAuthExtensions.kt b/biometric/biometric-ktx/src/main/java/androidx/biometric/auth/Class2BiometricOrCredentialAuthExtensions.kt
index a41bf5d..39a9372 100755
--- a/biometric/biometric-ktx/src/main/java/androidx/biometric/auth/Class2BiometricOrCredentialAuthExtensions.kt
+++ b/biometric/biometric-ktx/src/main/java/androidx/biometric/auth/Class2BiometricOrCredentialAuthExtensions.kt
@@ -18,8 +18,8 @@
import androidx.biometric.BiometricPrompt.AuthenticationResult
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
-import kotlinx.coroutines.suspendCancellableCoroutine
import java.util.concurrent.Executor
+import kotlinx.coroutines.suspendCancellableCoroutine
/**
* Shows an authentication prompt to the user.
diff --git a/biometric/biometric-ktx/src/main/java/androidx/biometric/auth/Class3BiometricAuthExtensions.kt b/biometric/biometric-ktx/src/main/java/androidx/biometric/auth/Class3BiometricAuthExtensions.kt
index f5d0ee3..5808509 100755
--- a/biometric/biometric-ktx/src/main/java/androidx/biometric/auth/Class3BiometricAuthExtensions.kt
+++ b/biometric/biometric-ktx/src/main/java/androidx/biometric/auth/Class3BiometricAuthExtensions.kt
@@ -19,8 +19,8 @@
import androidx.biometric.BiometricPrompt.CryptoObject
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
-import kotlinx.coroutines.suspendCancellableCoroutine
import java.util.concurrent.Executor
+import kotlinx.coroutines.suspendCancellableCoroutine
/**
* Shows an authentication prompt to the user.
diff --git a/biometric/biometric-ktx/src/main/java/androidx/biometric/auth/Class3BiometricOrCredentialAuthExtensions.kt b/biometric/biometric-ktx/src/main/java/androidx/biometric/auth/Class3BiometricOrCredentialAuthExtensions.kt
index e26acf4..3da017d 100755
--- a/biometric/biometric-ktx/src/main/java/androidx/biometric/auth/Class3BiometricOrCredentialAuthExtensions.kt
+++ b/biometric/biometric-ktx/src/main/java/androidx/biometric/auth/Class3BiometricOrCredentialAuthExtensions.kt
@@ -21,8 +21,8 @@
import androidx.biometric.BiometricPrompt.CryptoObject
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
-import kotlinx.coroutines.suspendCancellableCoroutine
import java.util.concurrent.Executor
+import kotlinx.coroutines.suspendCancellableCoroutine
/**
* Shows an authentication prompt to the user.
diff --git a/biometric/biometric-ktx/src/main/java/androidx/biometric/auth/CoroutineAuthPromptCallback.kt b/biometric/biometric-ktx/src/main/java/androidx/biometric/auth/CoroutineAuthPromptCallback.kt
index fb6de45..f07c3ef 100644
--- a/biometric/biometric-ktx/src/main/java/androidx/biometric/auth/CoroutineAuthPromptCallback.kt
+++ b/biometric/biometric-ktx/src/main/java/androidx/biometric/auth/CoroutineAuthPromptCallback.kt
@@ -18,8 +18,8 @@
import androidx.biometric.BiometricPrompt.AuthenticationResult
import androidx.fragment.app.FragmentActivity
-import kotlinx.coroutines.CancellableContinuation
import kotlin.coroutines.resumeWithException
+import kotlinx.coroutines.CancellableContinuation
/**
* Implementation of [AuthPromptCallback] used to transform callback results for coroutine APIs.
diff --git a/biometric/biometric-ktx/src/main/java/androidx/biometric/auth/CredentialAuthExtensions.kt b/biometric/biometric-ktx/src/main/java/androidx/biometric/auth/CredentialAuthExtensions.kt
index fe98720..d37eb21 100755
--- a/biometric/biometric-ktx/src/main/java/androidx/biometric/auth/CredentialAuthExtensions.kt
+++ b/biometric/biometric-ktx/src/main/java/androidx/biometric/auth/CredentialAuthExtensions.kt
@@ -21,8 +21,8 @@
import androidx.biometric.BiometricPrompt.AuthenticationResult
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
-import kotlinx.coroutines.suspendCancellableCoroutine
import java.util.concurrent.Executor
+import kotlinx.coroutines.suspendCancellableCoroutine
/**
* Shows an authentication prompt to the user.
diff --git a/biometric/biometric/api/current.txt b/biometric/biometric/api/current.txt
index 7e279b8..6a60ed1 100644
--- a/biometric/biometric/api/current.txt
+++ b/biometric/biometric/api/current.txt
@@ -28,12 +28,12 @@
}
public class BiometricPrompt {
- ctor public BiometricPrompt(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.AuthenticationCallback);
ctor public BiometricPrompt(androidx.fragment.app.Fragment, androidx.biometric.BiometricPrompt.AuthenticationCallback);
- ctor public BiometricPrompt(androidx.fragment.app.FragmentActivity, java.util.concurrent.Executor, androidx.biometric.BiometricPrompt.AuthenticationCallback);
ctor public BiometricPrompt(androidx.fragment.app.Fragment, java.util.concurrent.Executor, androidx.biometric.BiometricPrompt.AuthenticationCallback);
- method public void authenticate(androidx.biometric.BiometricPrompt.PromptInfo, androidx.biometric.BiometricPrompt.CryptoObject);
+ ctor public BiometricPrompt(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.AuthenticationCallback);
+ ctor public BiometricPrompt(androidx.fragment.app.FragmentActivity, java.util.concurrent.Executor, androidx.biometric.BiometricPrompt.AuthenticationCallback);
method public void authenticate(androidx.biometric.BiometricPrompt.PromptInfo);
+ method public void authenticate(androidx.biometric.BiometricPrompt.PromptInfo, androidx.biometric.BiometricPrompt.CryptoObject);
method public void cancelAuthentication();
field public static final int AUTHENTICATION_RESULT_TYPE_BIOMETRIC = 2; // 0x2
field public static final int AUTHENTICATION_RESULT_TYPE_DEVICE_CREDENTIAL = 1; // 0x1
@@ -67,11 +67,11 @@
}
public static class BiometricPrompt.CryptoObject {
+ ctor @RequiresApi(android.os.Build.VERSION_CODES.R) public BiometricPrompt.CryptoObject(android.security.identity.IdentityCredential);
+ ctor @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public BiometricPrompt.CryptoObject(android.security.identity.PresentationSession);
ctor public BiometricPrompt.CryptoObject(java.security.Signature);
ctor public BiometricPrompt.CryptoObject(javax.crypto.Cipher);
ctor public BiometricPrompt.CryptoObject(javax.crypto.Mac);
- ctor @RequiresApi(android.os.Build.VERSION_CODES.R) public BiometricPrompt.CryptoObject(android.security.identity.IdentityCredential);
- ctor @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public BiometricPrompt.CryptoObject(android.security.identity.PresentationSession);
method public javax.crypto.Cipher? getCipher();
method @RequiresApi(android.os.Build.VERSION_CODES.R) public android.security.identity.IdentityCredential? getIdentityCredential();
method public javax.crypto.Mac? getMac();
@@ -117,8 +117,8 @@
}
public class AuthPromptHost {
- ctor public AuthPromptHost(androidx.fragment.app.FragmentActivity);
ctor public AuthPromptHost(androidx.fragment.app.Fragment);
+ ctor public AuthPromptHost(androidx.fragment.app.FragmentActivity);
method public androidx.fragment.app.FragmentActivity? getActivity();
method public androidx.fragment.app.Fragment? getFragment();
}
diff --git a/biometric/biometric/api/public_plus_experimental_current.txt b/biometric/biometric/api/public_plus_experimental_current.txt
deleted file mode 100644
index 7e279b8..0000000
--- a/biometric/biometric/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,210 +0,0 @@
-// Signature format: 4.0
-package androidx.biometric {
-
- public class BiometricManager {
- method @Deprecated public int canAuthenticate();
- method public int canAuthenticate(int);
- method public static androidx.biometric.BiometricManager from(android.content.Context);
- method @RequiresPermission(android.Manifest.permission.USE_BIOMETRIC) public androidx.biometric.BiometricManager.Strings? getStrings(int);
- field public static final int BIOMETRIC_ERROR_HW_UNAVAILABLE = 1; // 0x1
- field public static final int BIOMETRIC_ERROR_NONE_ENROLLED = 11; // 0xb
- field public static final int BIOMETRIC_ERROR_NO_HARDWARE = 12; // 0xc
- field public static final int BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED = 15; // 0xf
- field public static final int BIOMETRIC_ERROR_UNSUPPORTED = -2; // 0xfffffffe
- field public static final int BIOMETRIC_STATUS_UNKNOWN = -1; // 0xffffffff
- field public static final int BIOMETRIC_SUCCESS = 0; // 0x0
- }
-
- public static interface BiometricManager.Authenticators {
- field public static final int BIOMETRIC_STRONG = 15; // 0xf
- field public static final int BIOMETRIC_WEAK = 255; // 0xff
- field public static final int DEVICE_CREDENTIAL = 32768; // 0x8000
- }
-
- public static class BiometricManager.Strings {
- method @RequiresPermission(android.Manifest.permission.USE_BIOMETRIC) public CharSequence? getButtonLabel();
- method @RequiresPermission(android.Manifest.permission.USE_BIOMETRIC) public CharSequence? getPromptMessage();
- method @RequiresPermission(android.Manifest.permission.USE_BIOMETRIC) public CharSequence? getSettingName();
- }
-
- public class BiometricPrompt {
- ctor public BiometricPrompt(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.AuthenticationCallback);
- ctor public BiometricPrompt(androidx.fragment.app.Fragment, androidx.biometric.BiometricPrompt.AuthenticationCallback);
- ctor public BiometricPrompt(androidx.fragment.app.FragmentActivity, java.util.concurrent.Executor, androidx.biometric.BiometricPrompt.AuthenticationCallback);
- ctor public BiometricPrompt(androidx.fragment.app.Fragment, java.util.concurrent.Executor, androidx.biometric.BiometricPrompt.AuthenticationCallback);
- method public void authenticate(androidx.biometric.BiometricPrompt.PromptInfo, androidx.biometric.BiometricPrompt.CryptoObject);
- method public void authenticate(androidx.biometric.BiometricPrompt.PromptInfo);
- method public void cancelAuthentication();
- field public static final int AUTHENTICATION_RESULT_TYPE_BIOMETRIC = 2; // 0x2
- field public static final int AUTHENTICATION_RESULT_TYPE_DEVICE_CREDENTIAL = 1; // 0x1
- field public static final int AUTHENTICATION_RESULT_TYPE_UNKNOWN = -1; // 0xffffffff
- field public static final int ERROR_CANCELED = 5; // 0x5
- field public static final int ERROR_HW_NOT_PRESENT = 12; // 0xc
- field public static final int ERROR_HW_UNAVAILABLE = 1; // 0x1
- field public static final int ERROR_LOCKOUT = 7; // 0x7
- field public static final int ERROR_LOCKOUT_PERMANENT = 9; // 0x9
- field public static final int ERROR_NEGATIVE_BUTTON = 13; // 0xd
- field public static final int ERROR_NO_BIOMETRICS = 11; // 0xb
- field public static final int ERROR_NO_DEVICE_CREDENTIAL = 14; // 0xe
- field public static final int ERROR_NO_SPACE = 4; // 0x4
- field public static final int ERROR_SECURITY_UPDATE_REQUIRED = 15; // 0xf
- field public static final int ERROR_TIMEOUT = 3; // 0x3
- field public static final int ERROR_UNABLE_TO_PROCESS = 2; // 0x2
- field public static final int ERROR_USER_CANCELED = 10; // 0xa
- field public static final int ERROR_VENDOR = 8; // 0x8
- }
-
- public abstract static class BiometricPrompt.AuthenticationCallback {
- ctor public BiometricPrompt.AuthenticationCallback();
- method public void onAuthenticationError(int, CharSequence);
- method public void onAuthenticationFailed();
- method public void onAuthenticationSucceeded(androidx.biometric.BiometricPrompt.AuthenticationResult);
- }
-
- public static class BiometricPrompt.AuthenticationResult {
- method public int getAuthenticationType();
- method public androidx.biometric.BiometricPrompt.CryptoObject? getCryptoObject();
- }
-
- public static class BiometricPrompt.CryptoObject {
- ctor public BiometricPrompt.CryptoObject(java.security.Signature);
- ctor public BiometricPrompt.CryptoObject(javax.crypto.Cipher);
- ctor public BiometricPrompt.CryptoObject(javax.crypto.Mac);
- ctor @RequiresApi(android.os.Build.VERSION_CODES.R) public BiometricPrompt.CryptoObject(android.security.identity.IdentityCredential);
- ctor @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public BiometricPrompt.CryptoObject(android.security.identity.PresentationSession);
- method public javax.crypto.Cipher? getCipher();
- method @RequiresApi(android.os.Build.VERSION_CODES.R) public android.security.identity.IdentityCredential? getIdentityCredential();
- method public javax.crypto.Mac? getMac();
- method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public android.security.identity.PresentationSession? getPresentationSession();
- method public java.security.Signature? getSignature();
- }
-
- public static class BiometricPrompt.PromptInfo {
- method public int getAllowedAuthenticators();
- method public CharSequence? getDescription();
- method public CharSequence getNegativeButtonText();
- method public CharSequence? getSubtitle();
- method public CharSequence getTitle();
- method public boolean isConfirmationRequired();
- method @Deprecated public boolean isDeviceCredentialAllowed();
- }
-
- public static class BiometricPrompt.PromptInfo.Builder {
- ctor public BiometricPrompt.PromptInfo.Builder();
- method public androidx.biometric.BiometricPrompt.PromptInfo build();
- method public androidx.biometric.BiometricPrompt.PromptInfo.Builder setAllowedAuthenticators(int);
- method public androidx.biometric.BiometricPrompt.PromptInfo.Builder setConfirmationRequired(boolean);
- method public androidx.biometric.BiometricPrompt.PromptInfo.Builder setDescription(CharSequence?);
- method @Deprecated public androidx.biometric.BiometricPrompt.PromptInfo.Builder setDeviceCredentialAllowed(boolean);
- method public androidx.biometric.BiometricPrompt.PromptInfo.Builder setNegativeButtonText(CharSequence);
- method public androidx.biometric.BiometricPrompt.PromptInfo.Builder setSubtitle(CharSequence?);
- method public androidx.biometric.BiometricPrompt.PromptInfo.Builder setTitle(CharSequence);
- }
-
-}
-
-package androidx.biometric.auth {
-
- public interface AuthPrompt {
- method public void cancelAuthentication();
- }
-
- public abstract class AuthPromptCallback {
- ctor public AuthPromptCallback();
- method public void onAuthenticationError(androidx.fragment.app.FragmentActivity?, int, CharSequence);
- method public void onAuthenticationFailed(androidx.fragment.app.FragmentActivity?);
- method public void onAuthenticationSucceeded(androidx.fragment.app.FragmentActivity?, androidx.biometric.BiometricPrompt.AuthenticationResult);
- }
-
- public class AuthPromptHost {
- ctor public AuthPromptHost(androidx.fragment.app.FragmentActivity);
- ctor public AuthPromptHost(androidx.fragment.app.Fragment);
- method public androidx.fragment.app.FragmentActivity? getActivity();
- method public androidx.fragment.app.Fragment? getFragment();
- }
-
- public class Class2BiometricAuthPrompt {
- method public CharSequence? getDescription();
- method public CharSequence getNegativeButtonText();
- method public CharSequence? getSubtitle();
- method public CharSequence getTitle();
- method public boolean isConfirmationRequired();
- method public androidx.biometric.auth.AuthPrompt startAuthentication(androidx.biometric.auth.AuthPromptHost, androidx.biometric.auth.AuthPromptCallback);
- method public androidx.biometric.auth.AuthPrompt startAuthentication(androidx.biometric.auth.AuthPromptHost, java.util.concurrent.Executor, androidx.biometric.auth.AuthPromptCallback);
- }
-
- public static final class Class2BiometricAuthPrompt.Builder {
- ctor public Class2BiometricAuthPrompt.Builder(CharSequence, CharSequence);
- method public androidx.biometric.auth.Class2BiometricAuthPrompt build();
- method public androidx.biometric.auth.Class2BiometricAuthPrompt.Builder setConfirmationRequired(boolean);
- method public androidx.biometric.auth.Class2BiometricAuthPrompt.Builder setDescription(CharSequence);
- method public androidx.biometric.auth.Class2BiometricAuthPrompt.Builder setSubtitle(CharSequence);
- }
-
- public class Class2BiometricOrCredentialAuthPrompt {
- method public CharSequence? getDescription();
- method public CharSequence? getSubtitle();
- method public CharSequence getTitle();
- method public boolean isConfirmationRequired();
- method public androidx.biometric.auth.AuthPrompt startAuthentication(androidx.biometric.auth.AuthPromptHost, androidx.biometric.auth.AuthPromptCallback);
- method public androidx.biometric.auth.AuthPrompt startAuthentication(androidx.biometric.auth.AuthPromptHost, java.util.concurrent.Executor, androidx.biometric.auth.AuthPromptCallback);
- }
-
- public static final class Class2BiometricOrCredentialAuthPrompt.Builder {
- ctor public Class2BiometricOrCredentialAuthPrompt.Builder(CharSequence);
- method public androidx.biometric.auth.Class2BiometricOrCredentialAuthPrompt build();
- method public androidx.biometric.auth.Class2BiometricOrCredentialAuthPrompt.Builder setConfirmationRequired(boolean);
- method public androidx.biometric.auth.Class2BiometricOrCredentialAuthPrompt.Builder setDescription(CharSequence);
- method public androidx.biometric.auth.Class2BiometricOrCredentialAuthPrompt.Builder setSubtitle(CharSequence);
- }
-
- public class Class3BiometricAuthPrompt {
- method public CharSequence? getDescription();
- method public CharSequence getNegativeButtonText();
- method public CharSequence? getSubtitle();
- method public CharSequence getTitle();
- method public boolean isConfirmationRequired();
- method public androidx.biometric.auth.AuthPrompt startAuthentication(androidx.biometric.auth.AuthPromptHost, androidx.biometric.BiometricPrompt.CryptoObject?, androidx.biometric.auth.AuthPromptCallback);
- method public androidx.biometric.auth.AuthPrompt startAuthentication(androidx.biometric.auth.AuthPromptHost, androidx.biometric.BiometricPrompt.CryptoObject?, java.util.concurrent.Executor, androidx.biometric.auth.AuthPromptCallback);
- }
-
- public static final class Class3BiometricAuthPrompt.Builder {
- ctor public Class3BiometricAuthPrompt.Builder(CharSequence, CharSequence);
- method public androidx.biometric.auth.Class3BiometricAuthPrompt build();
- method public androidx.biometric.auth.Class3BiometricAuthPrompt.Builder setConfirmationRequired(boolean);
- method public androidx.biometric.auth.Class3BiometricAuthPrompt.Builder setDescription(CharSequence);
- method public androidx.biometric.auth.Class3BiometricAuthPrompt.Builder setSubtitle(CharSequence);
- }
-
- @RequiresApi(android.os.Build.VERSION_CODES.R) public class Class3BiometricOrCredentialAuthPrompt {
- method public CharSequence? getDescription();
- method public CharSequence? getSubtitle();
- method public CharSequence getTitle();
- method public boolean isConfirmationRequired();
- method public androidx.biometric.auth.AuthPrompt startAuthentication(androidx.biometric.auth.AuthPromptHost, androidx.biometric.BiometricPrompt.CryptoObject?, androidx.biometric.auth.AuthPromptCallback);
- method public androidx.biometric.auth.AuthPrompt startAuthentication(androidx.biometric.auth.AuthPromptHost, androidx.biometric.BiometricPrompt.CryptoObject?, java.util.concurrent.Executor, androidx.biometric.auth.AuthPromptCallback);
- }
-
- public static final class Class3BiometricOrCredentialAuthPrompt.Builder {
- ctor public Class3BiometricOrCredentialAuthPrompt.Builder(CharSequence);
- method public androidx.biometric.auth.Class3BiometricOrCredentialAuthPrompt build();
- method public androidx.biometric.auth.Class3BiometricOrCredentialAuthPrompt.Builder setConfirmationRequired(boolean);
- method public androidx.biometric.auth.Class3BiometricOrCredentialAuthPrompt.Builder setDescription(CharSequence);
- method public androidx.biometric.auth.Class3BiometricOrCredentialAuthPrompt.Builder setSubtitle(CharSequence);
- }
-
- @RequiresApi(android.os.Build.VERSION_CODES.R) public class CredentialAuthPrompt {
- method public CharSequence? getDescription();
- method public CharSequence getTitle();
- method public androidx.biometric.auth.AuthPrompt startAuthentication(androidx.biometric.auth.AuthPromptHost, androidx.biometric.BiometricPrompt.CryptoObject?, androidx.biometric.auth.AuthPromptCallback);
- method public androidx.biometric.auth.AuthPrompt startAuthentication(androidx.biometric.auth.AuthPromptHost, androidx.biometric.BiometricPrompt.CryptoObject?, java.util.concurrent.Executor, androidx.biometric.auth.AuthPromptCallback);
- }
-
- public static final class CredentialAuthPrompt.Builder {
- ctor public CredentialAuthPrompt.Builder(CharSequence);
- method public androidx.biometric.auth.CredentialAuthPrompt build();
- method public androidx.biometric.auth.CredentialAuthPrompt.Builder setDescription(CharSequence);
- }
-
-}
-
diff --git a/biometric/biometric/api/restricted_current.txt b/biometric/biometric/api/restricted_current.txt
index 7e279b8..6a60ed1 100644
--- a/biometric/biometric/api/restricted_current.txt
+++ b/biometric/biometric/api/restricted_current.txt
@@ -28,12 +28,12 @@
}
public class BiometricPrompt {
- ctor public BiometricPrompt(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.AuthenticationCallback);
ctor public BiometricPrompt(androidx.fragment.app.Fragment, androidx.biometric.BiometricPrompt.AuthenticationCallback);
- ctor public BiometricPrompt(androidx.fragment.app.FragmentActivity, java.util.concurrent.Executor, androidx.biometric.BiometricPrompt.AuthenticationCallback);
ctor public BiometricPrompt(androidx.fragment.app.Fragment, java.util.concurrent.Executor, androidx.biometric.BiometricPrompt.AuthenticationCallback);
- method public void authenticate(androidx.biometric.BiometricPrompt.PromptInfo, androidx.biometric.BiometricPrompt.CryptoObject);
+ ctor public BiometricPrompt(androidx.fragment.app.FragmentActivity, androidx.biometric.BiometricPrompt.AuthenticationCallback);
+ ctor public BiometricPrompt(androidx.fragment.app.FragmentActivity, java.util.concurrent.Executor, androidx.biometric.BiometricPrompt.AuthenticationCallback);
method public void authenticate(androidx.biometric.BiometricPrompt.PromptInfo);
+ method public void authenticate(androidx.biometric.BiometricPrompt.PromptInfo, androidx.biometric.BiometricPrompt.CryptoObject);
method public void cancelAuthentication();
field public static final int AUTHENTICATION_RESULT_TYPE_BIOMETRIC = 2; // 0x2
field public static final int AUTHENTICATION_RESULT_TYPE_DEVICE_CREDENTIAL = 1; // 0x1
@@ -67,11 +67,11 @@
}
public static class BiometricPrompt.CryptoObject {
+ ctor @RequiresApi(android.os.Build.VERSION_CODES.R) public BiometricPrompt.CryptoObject(android.security.identity.IdentityCredential);
+ ctor @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public BiometricPrompt.CryptoObject(android.security.identity.PresentationSession);
ctor public BiometricPrompt.CryptoObject(java.security.Signature);
ctor public BiometricPrompt.CryptoObject(javax.crypto.Cipher);
ctor public BiometricPrompt.CryptoObject(javax.crypto.Mac);
- ctor @RequiresApi(android.os.Build.VERSION_CODES.R) public BiometricPrompt.CryptoObject(android.security.identity.IdentityCredential);
- ctor @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public BiometricPrompt.CryptoObject(android.security.identity.PresentationSession);
method public javax.crypto.Cipher? getCipher();
method @RequiresApi(android.os.Build.VERSION_CODES.R) public android.security.identity.IdentityCredential? getIdentityCredential();
method public javax.crypto.Mac? getMac();
@@ -117,8 +117,8 @@
}
public class AuthPromptHost {
- ctor public AuthPromptHost(androidx.fragment.app.FragmentActivity);
ctor public AuthPromptHost(androidx.fragment.app.Fragment);
+ ctor public AuthPromptHost(androidx.fragment.app.FragmentActivity);
method public androidx.fragment.app.FragmentActivity? getActivity();
method public androidx.fragment.app.Fragment? getFragment();
}
diff --git a/biometric/integration-tests/testapp/src/main/java/androidx/biometric/integration/testapp/AuthPromptTestActivity.kt b/biometric/integration-tests/testapp/src/main/java/androidx/biometric/integration/testapp/AuthPromptTestActivity.kt
index 0e92e2a..ef20273 100755
--- a/biometric/integration-tests/testapp/src/main/java/androidx/biometric/integration/testapp/AuthPromptTestActivity.kt
+++ b/biometric/integration-tests/testapp/src/main/java/androidx/biometric/integration/testapp/AuthPromptTestActivity.kt
@@ -24,9 +24,9 @@
import androidx.biometric.BiometricPrompt
import androidx.biometric.auth.AuthPrompt
import androidx.biometric.auth.AuthPromptCallback
+import androidx.biometric.auth.authenticateWithClass3Biometrics
import androidx.biometric.auth.startClass2BiometricAuthentication
import androidx.biometric.auth.startClass2BiometricOrCredentialAuthentication
-import androidx.biometric.auth.authenticateWithClass3Biometrics
import androidx.biometric.auth.startClass3BiometricOrCredentialAuthentication
import androidx.biometric.auth.startCredentialAuthentication
import androidx.biometric.integration.testapp.R.string.biometric_prompt_description
diff --git a/bluetooth/bluetooth-testing/api/public_plus_experimental_current.txt b/bluetooth/bluetooth-testing/api/public_plus_experimental_current.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/bluetooth/bluetooth-testing/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/bluetooth/bluetooth-testing/build.gradle b/bluetooth/bluetooth-testing/build.gradle
index a9ac8a5..e0f587c 100644
--- a/bluetooth/bluetooth-testing/build.gradle
+++ b/bluetooth/bluetooth-testing/build.gradle
@@ -27,7 +27,7 @@
}
androidx {
- name = "AndroidX Bluetooth Testing"
+ name = "Bluetooth Testing"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2022"
description = "Test utilities for AndroidX Bluetooth"
diff --git a/bluetooth/bluetooth/api/public_plus_experimental_current.txt b/bluetooth/bluetooth/api/public_plus_experimental_current.txt
deleted file mode 100644
index d682668..0000000
--- a/bluetooth/bluetooth/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,75 +0,0 @@
-// Signature format: 4.0
-package androidx.bluetooth {
-
- public final class AdvertiseParams {
- ctor public AdvertiseParams(optional boolean shouldIncludeDeviceAddress, optional boolean shouldIncludeDeviceName, optional boolean isConnectable, optional boolean isDiscoverable, optional int timeoutMillis, optional java.util.Map<java.lang.Integer,byte[]> manufacturerData, optional java.util.Map<java.util.UUID,byte[]> serviceData, optional java.util.List<java.util.UUID> serviceUuids);
- method public java.util.Map<java.lang.Integer,byte[]> getManufacturerData();
- method public java.util.Map<java.util.UUID,byte[]> getServiceData();
- method public java.util.List<java.util.UUID> getServiceUuids();
- method public boolean getShouldIncludeDeviceAddress();
- method public boolean getShouldIncludeDeviceName();
- method public int getTimeoutMillis();
- method public boolean isConnectable();
- method public boolean isDiscoverable();
- property public final boolean isConnectable;
- property public final boolean isDiscoverable;
- property public final java.util.Map<java.lang.Integer,byte[]> manufacturerData;
- property public final java.util.Map<java.util.UUID,byte[]> serviceData;
- property public final java.util.List<java.util.UUID> serviceUuids;
- property public final boolean shouldIncludeDeviceAddress;
- property public final boolean shouldIncludeDeviceName;
- property public final int timeoutMillis;
- }
-
- public final class BluetoothAddress {
- ctor public BluetoothAddress(String address, int addressType);
- method public String getAddress();
- method public int getAddressType();
- method public void setAddressType(int);
- property public final String address;
- property public final int addressType;
- }
-
- public final class BluetoothDevice {
- method @RequiresPermission(anyOf={"android.permission.BLUETOOTH", "android.permission.BLUETOOTH_CONNECT"}) public int getBondState();
- method public java.util.UUID getId();
- method @RequiresPermission(anyOf={"android.permission.BLUETOOTH", "android.permission.BLUETOOTH_CONNECT"}) public String? getName();
- property @RequiresPermission(anyOf={"android.permission.BLUETOOTH", "android.permission.BLUETOOTH_CONNECT"}) public final int bondState;
- property public final java.util.UUID id;
- property @RequiresPermission(anyOf={"android.permission.BLUETOOTH", "android.permission.BLUETOOTH_CONNECT"}) public final String? name;
- }
-
- public final class BluetoothLe {
- ctor public BluetoothLe(android.content.Context context);
- method @RequiresPermission("android.permission.BLUETOOTH_ADVERTISE") public kotlinx.coroutines.flow.Flow<java.lang.Integer> advertise(androidx.bluetooth.AdvertiseParams advertiseParams);
- }
-
- public final class ScanFilter {
- ctor public ScanFilter(optional androidx.bluetooth.BluetoothAddress? deviceAddress, optional int manufacturerId, optional byte[]? manufacturerData, optional byte[]? manufacturerDataMask, optional java.util.UUID? serviceDataUuid, optional byte[]? serviceData, optional byte[]? serviceDataMask, optional java.util.UUID? serviceUuid, optional java.util.UUID? serviceUuidMask);
- method public androidx.bluetooth.BluetoothAddress? getDeviceAddress();
- method public byte[]? getManufacturerData();
- method public byte[]? getManufacturerDataMask();
- method public int getManufacturerId();
- method public byte[]? getServiceData();
- method public byte[]? getServiceDataMask();
- method public java.util.UUID? getServiceDataUuid();
- method public java.util.UUID? getServiceUuid();
- method public java.util.UUID? getServiceUuidMask();
- property public final androidx.bluetooth.BluetoothAddress? deviceAddress;
- property public final byte[]? manufacturerData;
- property public final byte[]? manufacturerDataMask;
- property public final int manufacturerId;
- property public final byte[]? serviceData;
- property public final byte[]? serviceDataMask;
- property public final java.util.UUID? serviceDataUuid;
- property public final java.util.UUID? serviceUuid;
- property public final java.util.UUID? serviceUuidMask;
- field public static final androidx.bluetooth.ScanFilter.Companion Companion;
- field public static final int MANUFACTURER_FILTER_NONE = -1; // 0xffffffff
- }
-
- public static final class ScanFilter.Companion {
- }
-
-}
-
diff --git a/bluetooth/bluetooth/build.gradle b/bluetooth/bluetooth/build.gradle
index c455f0b..8e7f695 100644
--- a/bluetooth/bluetooth/build.gradle
+++ b/bluetooth/bluetooth/build.gradle
@@ -40,7 +40,7 @@
}
androidx {
- name = "AndroidX Bluetooth"
+ name = "Bluetooth"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2022"
description = "AndroidX Bluetooth Library"
diff --git a/bluetooth/bluetooth/lint-baseline.xml b/bluetooth/bluetooth/lint-baseline.xml
deleted file mode 100644
index 4b81e83..0000000
--- a/bluetooth/bluetooth/lint-baseline.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.1.0-alpha07" type="baseline" client="gradle" dependencies="false" name="AGP (8.0.0-beta03)" variant="all" version="8.1.0-alpha07">
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="public annotation class AdvertiseResult {"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/bluetooth/AdvertiseResult.kt"/>
- </issue>
-
-</issues>
diff --git a/bluetooth/bluetooth/src/androidTest/java/androidx/bluetooth/BluetoothGattServiceTest.kt b/bluetooth/bluetooth/src/androidTest/java/androidx/bluetooth/BluetoothGattServiceTest.kt
index 0ac236b..eb01e73 100644
--- a/bluetooth/bluetooth/src/androidTest/java/androidx/bluetooth/BluetoothGattServiceTest.kt
+++ b/bluetooth/bluetooth/src/androidTest/java/androidx/bluetooth/BluetoothGattServiceTest.kt
@@ -16,8 +16,8 @@
package androidx.bluetooth
-import android.bluetooth.BluetoothGattService as FwkBluetoothGattService
import android.bluetooth.BluetoothGattCharacteristic as FwkBluetoothGattCharacteristic
+import android.bluetooth.BluetoothGattService as FwkBluetoothGattService
import android.bluetooth.BluetoothGattService.SERVICE_TYPE_PRIMARY
import java.util.UUID
import org.junit.Assert.assertEquals
diff --git a/bluetooth/bluetooth/src/main/java/androidx/bluetooth/AdvertiseResult.kt b/bluetooth/bluetooth/src/main/java/androidx/bluetooth/AdvertiseResult.kt
index b664773..c987dda 100644
--- a/bluetooth/bluetooth/src/main/java/androidx/bluetooth/AdvertiseResult.kt
+++ b/bluetooth/bluetooth/src/main/java/androidx/bluetooth/AdvertiseResult.kt
@@ -17,14 +17,14 @@
package androidx.bluetooth
import androidx.annotation.IntDef
+import androidx.annotation.RestrictTo
import kotlin.annotation.Retention
/**
* An advertise result indicates the result of a request to start advertising, whether success
* or failure.
- *
- * @hide
*/
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@Retention(AnnotationRetention.SOURCE)
@IntDef(
AdvertiseResult.ADVERTISE_STARTED,
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/experimental/GattClientImpl.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/experimental/GattClientImpl.kt
index b305e73..25b43d8 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/experimental/GattClientImpl.kt
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/experimental/GattClientImpl.kt
@@ -43,7 +43,8 @@
import kotlinx.coroutines.launch
internal class GattClientImpl {
- companion object {
+
+ private companion object {
private const val TAG = "GattClientImpl"
private const val GATT_MAX_MTU = 517
private val CCCD_UID = UUID.fromString("00002902-0000-1000-8000-00805f9b34fb")
@@ -91,6 +92,11 @@
val callback = object : BluetoothGattCallback() {
override fun onConnectionStateChange(gatt: BluetoothGatt?, status: Int, newState: Int) {
+ Log.d(
+ TAG,
+ "onConnectionStateChange() called with: gatt = $gatt, status = $status, " +
+ "newState = $newState"
+ )
if (newState == BluetoothGatt.STATE_CONNECTED) {
gatt?.requestMtu(GATT_MAX_MTU)
} else {
@@ -101,6 +107,7 @@
}
override fun onMtuChanged(gatt: BluetoothGatt?, mtu: Int, status: Int) {
+ Log.d(TAG, "onMtuChanged() called with: gatt = $gatt, mtu = $mtu, status = $status")
if (status == GATT_SUCCESS) {
gatt?.discoverServices()
} else {
@@ -303,4 +310,4 @@
}
}
}
-}
\ No newline at end of file
+}
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserFragment.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserFragment.kt
index e5f71ad..193adf1 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserFragment.kt
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserFragment.kt
@@ -16,49 +16,62 @@
package androidx.bluetooth.integration.testapp.ui.advertiser
+// TODO(ofy) Migrate to androidx.bluetooth.BluetoothLe once Gatt Server API is in place
+import android.Manifest
import android.annotation.SuppressLint
+import android.bluetooth.BluetoothManager
+import android.content.Context
+import android.content.pm.PackageManager
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.EditText
-
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.widget.PopupMenu
import androidx.bluetooth.AdvertiseResult
import androidx.bluetooth.BluetoothLe
import androidx.bluetooth.integration.testapp.R
import androidx.bluetooth.integration.testapp.databinding.FragmentAdvertiserBinding
+import androidx.bluetooth.integration.testapp.experimental.BluetoothLe as BluetoothLeExperimental
import androidx.bluetooth.integration.testapp.ui.common.getColor
import androidx.bluetooth.integration.testapp.ui.common.setViewEditText
import androidx.bluetooth.integration.testapp.ui.common.toast
+import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
-
+import com.google.android.material.tabs.TabLayout
+import java.util.UUID
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
-import java.util.UUID
-
class AdvertiserFragment : Fragment() {
private companion object {
private const val TAG = "AdvertiserFragment"
+
+ private const val TAB_ADVERTISER_POSITION = 0
}
private lateinit var advertiserViewModel: AdvertiserViewModel
private lateinit var bluetoothLe: BluetoothLe
+ // TODO(ofy) Migrate to androidx.bluetooth.BluetoothLe once scan API is in place
+ private lateinit var bluetoothLeExperimental: BluetoothLeExperimental
+
private var advertiseDataAdapter: AdvertiseDataAdapter? = null
private val advertiseScope = CoroutineScope(Dispatchers.Main + Job())
private var advertiseJob: Job? = null
+ private val gattServerScope = CoroutineScope(Dispatchers.Main + Job())
+ private var gattServerJob: Job? = null
+
private var isAdvertising: Boolean = false
set(value) {
field = value
@@ -71,7 +84,6 @@
advertiseJob?.cancel()
advertiseJob = null
}
- _binding?.textInputEditTextDisplayName?.isEnabled = !value
_binding?.checkBoxIncludeDeviceName?.isEnabled = !value
_binding?.checkBoxConnectable?.isEnabled = !value
_binding?.checkBoxDiscoverable?.isEnabled = !value
@@ -79,6 +91,39 @@
_binding?.viewRecyclerViewOverlay?.isVisible = value
}
+ private var isGattServerOpen: Boolean = false
+ set(value) {
+ field = value
+ if (value) {
+ _binding?.buttonGattServer?.text = getString(R.string.stop_gatt_server)
+ _binding?.buttonGattServer?.backgroundTintList = getColor(R.color.red_500)
+ } else {
+ _binding?.buttonGattServer?.text = getString(R.string.open_gatt_server)
+ _binding?.buttonGattServer?.backgroundTintList = getColor(R.color.indigo_500)
+ gattServerJob?.cancel()
+ gattServerJob = null
+ }
+ }
+
+ private var showingAdvertiser: Boolean = false
+ set(value) {
+ field = value
+ _binding?.layoutAdvertiser?.isVisible = value
+ _binding?.layoutGattServer?.isVisible = !value
+ }
+
+ private val onTabSelectedListener = object : TabLayout.OnTabSelectedListener {
+ override fun onTabSelected(tab: TabLayout.Tab) {
+ showingAdvertiser = tab.position == TAB_ADVERTISER_POSITION
+ }
+
+ override fun onTabUnselected(tab: TabLayout.Tab) {
+ }
+
+ override fun onTabReselected(tab: TabLayout.Tab) {
+ }
+ }
+
private var _binding: FragmentAdvertiserBinding? = null
// This property is only valid between onCreateView and onDestroyView.
@@ -93,9 +138,11 @@
bluetoothLe = BluetoothLe(requireContext())
+ bluetoothLeExperimental = BluetoothLeExperimental(requireContext())
+
_binding = FragmentAdvertiserBinding.inflate(inflater, container, false)
- initData()
+ binding.tabLayout.addOnTabSelectedListener(onTabSelectedListener)
binding.checkBoxIncludeDeviceName.setOnCheckedChangeListener { _, isChecked ->
advertiserViewModel.includeDeviceName = isChecked
@@ -137,6 +184,16 @@
}
}
+ binding.buttonGattServer.setOnClickListener {
+ if (gattServerJob?.isActive == true) {
+ isGattServerOpen = false
+ } else {
+ openGattServer()
+ }
+ }
+
+ initData()
+
return binding.root
}
@@ -147,6 +204,17 @@
}
private fun initData() {
+ if (ContextCompat.checkSelfPermission(
+ requireContext(),
+ Manifest.permission.BLUETOOTH_CONNECT
+ )
+ == PackageManager.PERMISSION_GRANTED
+ ) {
+ binding.textInputEditTextDisplayName.setText(
+ (requireContext().getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager)
+ .adapter.name
+ )
+ }
binding.checkBoxIncludeDeviceName.isChecked = advertiserViewModel.includeDeviceName
binding.checkBoxConnectable.isChecked = advertiserViewModel.connectable
binding.checkBoxDiscoverable.isChecked = advertiserViewModel.discoverable
@@ -273,4 +341,16 @@
}
}
}
+
+ private fun openGattServer() {
+ Log.d(TAG, "openGattServer() called")
+
+ gattServerJob = gattServerScope.launch {
+ isGattServerOpen = true
+
+ bluetoothLeExperimental.gattServer().collect { gattServerCallback ->
+ Log.d(TAG, "openGattServer() called with: gattServerCallback = $gattServerCallback")
+ }
+ }
+ }
}
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ScanResultAdapter.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ScanResultAdapter.kt
index ed937a5..0762fa9 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ScanResultAdapter.kt
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/common/ScanResultAdapter.kt
@@ -21,7 +21,6 @@
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
-
import androidx.bluetooth.integration.testapp.R
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerAdapter.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerAdapter.kt
index 7641f8a..9cf5027 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerAdapter.kt
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerAdapter.kt
@@ -23,7 +23,6 @@
import android.view.ViewGroup
import android.widget.Button
import android.widget.TextView
-
import androidx.bluetooth.integration.testapp.R
import androidx.core.view.isVisible
import androidx.recyclerview.widget.DiffUtil
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerFragment.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerFragment.kt
index ca0309d..ad5e5da 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerFragment.kt
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerFragment.kt
@@ -16,6 +16,8 @@
package androidx.bluetooth.integration.testapp.ui.scanner
+// TODO(ofy) Migrate to androidx.bluetooth.BluetoothLe once scan API is in place
+import android.annotation.SuppressLint
import android.bluetooth.le.ScanResult
import android.bluetooth.le.ScanSettings
import android.os.Bundle
@@ -24,11 +26,8 @@
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
-
import androidx.bluetooth.integration.testapp.R
import androidx.bluetooth.integration.testapp.databinding.FragmentScannerBinding
-import android.annotation.SuppressLint
-// TODO(ofy) Migrate to androidx.bluetooth.BluetoothLe once scan API is in place
import androidx.bluetooth.integration.testapp.experimental.BluetoothLe
import androidx.bluetooth.integration.testapp.ui.common.getColor
import androidx.core.view.isVisible
@@ -36,15 +35,13 @@
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
-
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayout.Tab
-
+import java.lang.Exception
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
-import java.lang.Exception
class ScannerFragment : Fragment() {
@@ -86,8 +83,8 @@
private var showingScanResults: Boolean = false
set(value) {
field = value
- _binding?.relativeLayoutScanResults?.isVisible = value
- _binding?.linearLayoutDevice?.isVisible = !value
+ _binding?.layoutScanResults?.isVisible = value
+ _binding?.layoutDevice?.isVisible = !value
}
private val onTabSelectedListener = object : TabLayout.OnTabSelectedListener {
@@ -143,6 +140,10 @@
}
}
+ binding.buttonReconnect.setOnClickListener {
+ connectTo(scannerViewModel.deviceConnection(binding.tabLayout.selectedTabPosition))
+ }
+
initData()
return binding.root
@@ -253,6 +254,7 @@
@SuppressLint("NotifyDataSetChanged")
private fun updateDeviceUI(deviceConnection: DeviceConnection) {
binding.progressIndicatorDeviceConnection.isVisible = false
+ binding.buttonReconnect.isVisible = false
when (deviceConnection.status) {
Status.NOT_CONNECTED -> {
@@ -271,6 +273,7 @@
Status.CONNECTION_FAILED -> {
binding.textViewDeviceConnectionStatus.text = getString(R.string.connection_failed)
binding.textViewDeviceConnectionStatus.setTextColor(getColor(R.color.red_500))
+ binding.buttonReconnect.isVisible = true
}
}
deviceServicesAdapter?.services = deviceConnection.services
diff --git a/bluetooth/integration-tests/testapp/src/main/res/layout/fragment_advertiser.xml b/bluetooth/integration-tests/testapp/src/main/res/layout/fragment_advertiser.xml
index 014dc75..024d732 100644
--- a/bluetooth/integration-tests/testapp/src/main/res/layout/fragment_advertiser.xml
+++ b/bluetooth/integration-tests/testapp/src/main/res/layout/fragment_advertiser.xml
@@ -21,108 +21,158 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
- <TextView
- android:id="@+id/text_view_configure_advertising_packet"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:padding="16dp"
- android:text="@string/configure_advertising_packet"
- android:textColor="@color/black"
- android:textSize="21sp"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent" />
-
- <com.google.android.material.textfield.TextInputLayout
- android:id="@+id/text_input_layout_display_name"
+ <com.google.android.material.tabs.TabLayout
+ android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:hint="@string/display_name"
- app:layout_constraintTop_toBottomOf="@+id/text_view_configure_advertising_packet">
+ app:layout_constraintTop_toTopOf="parent"
+ app:tabMode="fixed">
- <com.google.android.material.textfield.TextInputEditText
- android:id="@+id/text_input_edit_text_display_name"
+ <com.google.android.material.tabs.TabItem
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/title_advertiser" />
+
+ <com.google.android.material.tabs.TabItem
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/gatt_server" />
+
+ </com.google.android.material.tabs.TabLayout>
+
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:id="@+id/layout_advertiser"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/tab_layout"
+ tools:visibility="gone">
+
+ <TextView
+ android:id="@+id/text_view_configure_advertising_packet"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:padding="16dp"
+ android:text="@string/configure_advertising_packet"
+ android:textColor="@color/black"
+ android:textSize="21sp"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <com.google.android.material.textfield.TextInputLayout
+ android:id="@+id/text_input_layout_display_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:inputType="text"
- android:maxLines="1" />
+ android:hint="@string/display_name"
+ app:layout_constraintTop_toBottomOf="@+id/text_view_configure_advertising_packet">
- </com.google.android.material.textfield.TextInputLayout>
+ <com.google.android.material.textfield.TextInputEditText
+ android:id="@+id/text_input_edit_text_display_name"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:enabled="false"
+ android:inputType="text"
+ android:maxLines="1" />
- <CheckBox
- android:id="@+id/check_box_include_device_name"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginStart="16dp"
- android:layout_marginTop="8dp"
- android:text="@string/include_device_name"
- app:layout_constraintTop_toBottomOf="@+id/text_input_layout_display_name" />
+ </com.google.android.material.textfield.TextInputLayout>
- <CheckBox
- android:id="@+id/check_box_connectable"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginStart="16dp"
- android:text="@string/connectable"
- app:layout_constraintTop_toBottomOf="@+id/check_box_include_device_name" />
+ <CheckBox
+ android:id="@+id/check_box_include_device_name"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="16dp"
+ android:layout_marginTop="8dp"
+ android:text="@string/include_device_name"
+ app:layout_constraintTop_toBottomOf="@+id/text_input_layout_display_name" />
- <CheckBox
- android:id="@+id/check_box_discoverable"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginStart="16dp"
- android:text="@string/discoverable"
- app:layout_constraintTop_toBottomOf="@+id/check_box_connectable" />
+ <CheckBox
+ android:id="@+id/check_box_connectable"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="16dp"
+ android:text="@string/connectable"
+ app:layout_constraintTop_toBottomOf="@+id/check_box_include_device_name" />
- <TextView
- android:id="@+id/text_view_advertising_data"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="8dp"
- android:layout_marginEnd="8dp"
- android:padding="8dp"
- android:text="@string/advertising_data"
- android:textColor="@color/black"
- android:textSize="21sp"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/check_box_discoverable" />
+ <CheckBox
+ android:id="@+id/check_box_discoverable"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="16dp"
+ android:text="@string/discoverable"
+ app:layout_constraintTop_toBottomOf="@+id/check_box_connectable" />
- <Button
- android:id="@+id/button_add_data"
- style="@style/Widget.MaterialComponents.Button.Icon"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="8dp"
- android:text="@string/add_data"
- app:icon="@drawable/baseline_add_24"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/text_view_advertising_data" />
+ <TextView
+ android:id="@+id/text_view_advertising_data"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="8dp"
+ android:layout_marginEnd="8dp"
+ android:padding="8dp"
+ android:text="@string/advertising_data"
+ android:textColor="@color/black"
+ android:textSize="21sp"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/check_box_discoverable" />
- <androidx.recyclerview.widget.RecyclerView
- android:id="@+id/recycler_view_advertise_data"
+ <Button
+ android:id="@+id/button_add_data"
+ style="@style/Widget.MaterialComponents.Button.Icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="8dp"
+ android:text="@string/add_data"
+ app:icon="@drawable/baseline_add_24"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/text_view_advertising_data" />
+
+ <androidx.recyclerview.widget.RecyclerView
+ android:id="@+id/recycler_view_advertise_data"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ app:layoutManager="LinearLayoutManager"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/button_add_data"
+ tools:itemCount="3"
+ tools:listitem="@layout/item_advertiser_data" />
+
+ <View
+ android:id="@+id/view_recycler_view_overlay"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:clickable="true"
+ android:visibility="gone"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/button_add_data" />
+
+ <Button
+ android:id="@+id/button_advertise"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_margin="16dp"
+ android:text="@string/start_advertising"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent" />
+
+ </androidx.constraintlayout.widget.ConstraintLayout>
+
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:id="@+id/layout_gatt_server"
android:layout_width="match_parent"
android:layout_height="0dp"
- app:layoutManager="LinearLayoutManager"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/button_add_data"
- tools:itemCount="3"
- tools:listitem="@layout/item_advertiser_data" />
-
- <View
- android:id="@+id/view_recycler_view_overlay"
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:clickable="true"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/button_add_data" />
+ app:layout_constraintTop_toBottomOf="@+id/tab_layout"
+ tools:visibility="visible">
- <Button
- android:id="@+id/button_advertise"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_margin="16dp"
- android:text="@string/start_advertising"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintEnd_toEndOf="parent" />
+ <Button
+ android:id="@+id/button_gatt_server"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_margin="16dp"
+ android:text="@string/open_gatt_server"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent" />
+
+ </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/bluetooth/integration-tests/testapp/src/main/res/layout/fragment_scanner.xml b/bluetooth/integration-tests/testapp/src/main/res/layout/fragment_scanner.xml
index 9cf7c3484..dc4f3a1 100644
--- a/bluetooth/integration-tests/testapp/src/main/res/layout/fragment_scanner.xml
+++ b/bluetooth/integration-tests/testapp/src/main/res/layout/fragment_scanner.xml
@@ -37,7 +37,7 @@
</com.google.android.material.tabs.TabLayout>
<RelativeLayout
- android:id="@+id/relative_layout_scan_results"
+ android:id="@+id/layout_scan_results"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
@@ -64,7 +64,7 @@
</RelativeLayout>
<LinearLayout
- android:id="@+id/linear_layout_device"
+ android:id="@+id/layout_device"
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="vertical"
@@ -97,6 +97,18 @@
android:visibility="gone"
app:indicatorSize="24dp" />
+ <View
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_weight="1" />
+
+ <Button
+ android:id="@+id/button_reconnect"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/reconnect"
+ android:visibility="gone" />
+
</LinearLayout>
<View
diff --git a/bluetooth/integration-tests/testapp/src/main/res/values/donottranslate-strings.xml b/bluetooth/integration-tests/testapp/src/main/res/values/donottranslate-strings.xml
index b6a131a..cab9c9f 100644
--- a/bluetooth/integration-tests/testapp/src/main/res/values/donottranslate-strings.xml
+++ b/bluetooth/integration-tests/testapp/src/main/res/values/donottranslate-strings.xml
@@ -26,6 +26,7 @@
<string name="stop_scanning">Stop scanning</string>
<string name="scan_result_icon">Scan Result Icon</string>
<string name="connect">Connect</string>
+ <string name="reconnect">Reconnect</string>
<string name="scan_results">Scan Results</string>
<string name="not_connected">Not Connected</string>
<string name="connecting">Connecting…</string>
@@ -54,6 +55,11 @@
<string name="cancel">Cancel</string>
<string name="clear_data">Clear Data</string>
+ <!-- GATT Server -->
+ <string name="gatt_server">Gatt Server</string>
+ <string name="open_gatt_server">Open Gatt Server</string>
+ <string name="stop_gatt_server">Stop Gatt Server</string>
+
<string name="scan_using_androidx_bluetooth">Scan using AndroidX Bluetooth APIs</string>
<string name="scan_start_message">Scan started. Results are in Logcat</string>
diff --git a/browser/browser/api/current.txt b/browser/browser/api/current.txt
index 42d5a3b..5b284c8 100644
--- a/browser/browser/api/current.txt
+++ b/browser/browser/api/current.txt
@@ -2,8 +2,8 @@
package androidx.browser.browseractions {
@Deprecated public class BrowserActionItem {
- ctor @Deprecated public BrowserActionItem(String, android.app.PendingIntent, @DrawableRes int);
ctor @Deprecated public BrowserActionItem(String, android.app.PendingIntent);
+ ctor @Deprecated public BrowserActionItem(String, android.app.PendingIntent, @DrawableRes int);
method @Deprecated public android.app.PendingIntent getAction();
method @Deprecated public int getIconId();
method @Deprecated public String getTitle();
@@ -43,8 +43,8 @@
@Deprecated public static final class BrowserActionsIntent.Builder {
ctor @Deprecated public BrowserActionsIntent.Builder(android.content.Context, android.net.Uri);
method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent build();
- method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setCustomItems(java.util.ArrayList<androidx.browser.browseractions.BrowserActionItem!>);
method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setCustomItems(androidx.browser.browseractions.BrowserActionItem!...);
+ method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setCustomItems(java.util.ArrayList<androidx.browser.browseractions.BrowserActionItem!>);
method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setOnItemSelectedAction(android.app.PendingIntent);
method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setUrlType(int);
}
@@ -166,8 +166,8 @@
method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder addToolbarItem(int, android.graphics.Bitmap, String, android.app.PendingIntent) throws java.lang.IllegalStateException;
method public androidx.browser.customtabs.CustomTabsIntent build();
method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder enableUrlBarHiding();
- method public androidx.browser.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, String, android.app.PendingIntent, boolean);
method public androidx.browser.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, String, android.app.PendingIntent);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, String, android.app.PendingIntent, boolean);
method public androidx.browser.customtabs.CustomTabsIntent.Builder setCloseButtonIcon(android.graphics.Bitmap);
method public androidx.browser.customtabs.CustomTabsIntent.Builder setCloseButtonPosition(int);
method public androidx.browser.customtabs.CustomTabsIntent.Builder setColorScheme(int);
@@ -175,8 +175,8 @@
method public androidx.browser.customtabs.CustomTabsIntent.Builder setDefaultColorSchemeParams(androidx.browser.customtabs.CustomTabColorSchemeParams);
method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setDefaultShareMenuItemEnabled(boolean);
method public androidx.browser.customtabs.CustomTabsIntent.Builder setExitAnimations(android.content.Context, @AnimRes int, @AnimRes int);
- method public androidx.browser.customtabs.CustomTabsIntent.Builder setInitialActivityHeightPx(@Dimension(unit=androidx.annotation.Dimension.PX) int, int);
method public androidx.browser.customtabs.CustomTabsIntent.Builder setInitialActivityHeightPx(@Dimension(unit=androidx.annotation.Dimension.PX) int);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setInitialActivityHeightPx(@Dimension(unit=androidx.annotation.Dimension.PX) int, int);
method public androidx.browser.customtabs.CustomTabsIntent.Builder setInstantAppsEnabled(boolean);
method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setNavigationBarColor(@ColorInt int);
method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setNavigationBarDividerColor(@ColorInt int);
diff --git a/browser/browser/api/public_plus_experimental_current.txt b/browser/browser/api/public_plus_experimental_current.txt
deleted file mode 100644
index 42d5a3b..0000000
--- a/browser/browser/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,482 +0,0 @@
-// Signature format: 4.0
-package androidx.browser.browseractions {
-
- @Deprecated public class BrowserActionItem {
- ctor @Deprecated public BrowserActionItem(String, android.app.PendingIntent, @DrawableRes int);
- ctor @Deprecated public BrowserActionItem(String, android.app.PendingIntent);
- method @Deprecated public android.app.PendingIntent getAction();
- method @Deprecated public int getIconId();
- method @Deprecated public String getTitle();
- }
-
- @Deprecated public class BrowserActionsIntent {
- method @Deprecated public static String? getCreatorPackageName(android.content.Intent);
- method @Deprecated public android.content.Intent getIntent();
- method @Deprecated public static String? getUntrustedCreatorPackageName(android.content.Intent);
- method @Deprecated public static void launchIntent(android.content.Context, android.content.Intent);
- method @Deprecated public static void openBrowserAction(android.content.Context, android.net.Uri);
- method @Deprecated public static void openBrowserAction(android.content.Context, android.net.Uri, int, java.util.ArrayList<androidx.browser.browseractions.BrowserActionItem!>, android.app.PendingIntent);
- method @Deprecated public static java.util.List<androidx.browser.browseractions.BrowserActionItem!> parseBrowserActionItems(java.util.ArrayList<android.os.Bundle!>);
- field @Deprecated public static final String ACTION_BROWSER_ACTIONS_OPEN = "androidx.browser.browseractions.browser_action_open";
- field @Deprecated public static final String EXTRA_APP_ID = "androidx.browser.browseractions.APP_ID";
- field @Deprecated public static final String EXTRA_MENU_ITEMS = "androidx.browser.browseractions.extra.MENU_ITEMS";
- field @Deprecated public static final String EXTRA_SELECTED_ACTION_PENDING_INTENT = "androidx.browser.browseractions.extra.SELECTED_ACTION_PENDING_INTENT";
- field @Deprecated public static final String EXTRA_TYPE = "androidx.browser.browseractions.extra.TYPE";
- field @Deprecated public static final int ITEM_COPY = 3; // 0x3
- field @Deprecated public static final int ITEM_DOWNLOAD = 2; // 0x2
- field @Deprecated public static final int ITEM_INVALID_ITEM = -1; // 0xffffffff
- field @Deprecated public static final int ITEM_OPEN_IN_INCOGNITO = 1; // 0x1
- field @Deprecated public static final int ITEM_OPEN_IN_NEW_TAB = 0; // 0x0
- field @Deprecated public static final int ITEM_SHARE = 4; // 0x4
- field @Deprecated public static final String KEY_ACTION = "androidx.browser.browseractions.ACTION";
- field @Deprecated public static final String KEY_ICON_ID = "androidx.browser.browseractions.ICON_ID";
- field @Deprecated public static final String KEY_TITLE = "androidx.browser.browseractions.TITLE";
- field @Deprecated public static final int MAX_CUSTOM_ITEMS = 5; // 0x5
- field @Deprecated public static final int URL_TYPE_AUDIO = 3; // 0x3
- field @Deprecated public static final int URL_TYPE_FILE = 4; // 0x4
- field @Deprecated public static final int URL_TYPE_IMAGE = 1; // 0x1
- field @Deprecated public static final int URL_TYPE_NONE = 0; // 0x0
- field @Deprecated public static final int URL_TYPE_PLUGIN = 5; // 0x5
- field @Deprecated public static final int URL_TYPE_VIDEO = 2; // 0x2
- }
-
- @Deprecated public static final class BrowserActionsIntent.Builder {
- ctor @Deprecated public BrowserActionsIntent.Builder(android.content.Context, android.net.Uri);
- method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent build();
- method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setCustomItems(java.util.ArrayList<androidx.browser.browseractions.BrowserActionItem!>);
- method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setCustomItems(androidx.browser.browseractions.BrowserActionItem!...);
- method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setOnItemSelectedAction(android.app.PendingIntent);
- method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setUrlType(int);
- }
-
-}
-
-package androidx.browser.customtabs {
-
- public final class CustomTabColorSchemeParams {
- field @ColorInt public final Integer? navigationBarColor;
- field @ColorInt public final Integer? navigationBarDividerColor;
- field @ColorInt public final Integer? secondaryToolbarColor;
- field @ColorInt public final Integer? toolbarColor;
- }
-
- public static final class CustomTabColorSchemeParams.Builder {
- ctor public CustomTabColorSchemeParams.Builder();
- method public androidx.browser.customtabs.CustomTabColorSchemeParams build();
- method public androidx.browser.customtabs.CustomTabColorSchemeParams.Builder setNavigationBarColor(@ColorInt int);
- method public androidx.browser.customtabs.CustomTabColorSchemeParams.Builder setNavigationBarDividerColor(@ColorInt int);
- method public androidx.browser.customtabs.CustomTabColorSchemeParams.Builder setSecondaryToolbarColor(@ColorInt int);
- method public androidx.browser.customtabs.CustomTabColorSchemeParams.Builder setToolbarColor(@ColorInt int);
- }
-
- public class CustomTabsCallback {
- ctor public CustomTabsCallback();
- method public void extraCallback(String, android.os.Bundle?);
- method public android.os.Bundle? extraCallbackWithResult(String, android.os.Bundle?);
- method public void onActivityResized(@Dimension(unit=androidx.annotation.Dimension.PX) int, @Dimension(unit=androidx.annotation.Dimension.PX) int, android.os.Bundle);
- method public void onMessageChannelReady(android.os.Bundle?);
- method public void onNavigationEvent(int, android.os.Bundle?);
- method public void onPostMessage(String, android.os.Bundle?);
- method public void onRelationshipValidationResult(@androidx.browser.customtabs.CustomTabsService.Relation int, android.net.Uri, boolean, android.os.Bundle?);
- field public static final int NAVIGATION_ABORTED = 4; // 0x4
- field public static final int NAVIGATION_FAILED = 3; // 0x3
- field public static final int NAVIGATION_FINISHED = 2; // 0x2
- field public static final int NAVIGATION_STARTED = 1; // 0x1
- field public static final int TAB_HIDDEN = 6; // 0x6
- field public static final int TAB_SHOWN = 5; // 0x5
- }
-
- public class CustomTabsClient {
- method public static boolean bindCustomTabsService(android.content.Context, String?, androidx.browser.customtabs.CustomTabsServiceConnection);
- method public static boolean bindCustomTabsServicePreservePriority(android.content.Context, String?, androidx.browser.customtabs.CustomTabsServiceConnection);
- method public static boolean connectAndInitialize(android.content.Context, String);
- method public android.os.Bundle? extraCommand(String, android.os.Bundle?);
- method public static String? getPackageName(android.content.Context, java.util.List<java.lang.String!>?);
- method public static String? getPackageName(android.content.Context, java.util.List<java.lang.String!>?, boolean);
- method public androidx.browser.customtabs.CustomTabsSession? newSession(androidx.browser.customtabs.CustomTabsCallback?);
- method public androidx.browser.customtabs.CustomTabsSession? newSession(androidx.browser.customtabs.CustomTabsCallback?, int);
- method public boolean warmup(long);
- }
-
- public final class CustomTabsIntent {
- method public static int getActivityResizeBehavior(android.content.Intent);
- method public static int getCloseButtonPosition(android.content.Intent);
- method public static androidx.browser.customtabs.CustomTabColorSchemeParams getColorSchemeParams(android.content.Intent, int);
- method @Dimension(unit=androidx.annotation.Dimension.PX) public static int getInitialActivityHeightPx(android.content.Intent);
- method public static int getMaxToolbarItems();
- method @Dimension(unit=androidx.annotation.Dimension.DP) public static int getToolbarCornerRadiusDp(android.content.Intent);
- method public void launchUrl(android.content.Context, android.net.Uri);
- method public static android.content.Intent setAlwaysUseBrowserUI(android.content.Intent?);
- method public static boolean shouldAlwaysUseBrowserUI(android.content.Intent);
- field public static final int ACTIVITY_HEIGHT_ADJUSTABLE = 1; // 0x1
- field public static final int ACTIVITY_HEIGHT_DEFAULT = 0; // 0x0
- field public static final int ACTIVITY_HEIGHT_FIXED = 2; // 0x2
- field public static final int CLOSE_BUTTON_POSITION_DEFAULT = 0; // 0x0
- field public static final int CLOSE_BUTTON_POSITION_END = 2; // 0x2
- field public static final int CLOSE_BUTTON_POSITION_START = 1; // 0x1
- field public static final int COLOR_SCHEME_DARK = 2; // 0x2
- field public static final int COLOR_SCHEME_LIGHT = 1; // 0x1
- field public static final int COLOR_SCHEME_SYSTEM = 0; // 0x0
- field public static final String EXTRA_ACTION_BUTTON_BUNDLE = "android.support.customtabs.extra.ACTION_BUTTON_BUNDLE";
- field public static final String EXTRA_ACTIVITY_HEIGHT_RESIZE_BEHAVIOR = "androidx.browser.customtabs.extra.ACTIVITY_HEIGHT_RESIZE_BEHAVIOR";
- field public static final String EXTRA_CLOSE_BUTTON_ICON = "android.support.customtabs.extra.CLOSE_BUTTON_ICON";
- field public static final String EXTRA_CLOSE_BUTTON_POSITION = "androidx.browser.customtabs.extra.CLOSE_BUTTON_POSITION";
- field public static final String EXTRA_COLOR_SCHEME = "androidx.browser.customtabs.extra.COLOR_SCHEME";
- field public static final String EXTRA_COLOR_SCHEME_PARAMS = "androidx.browser.customtabs.extra.COLOR_SCHEME_PARAMS";
- field @Deprecated public static final String EXTRA_DEFAULT_SHARE_MENU_ITEM = "android.support.customtabs.extra.SHARE_MENU_ITEM";
- field public static final String EXTRA_ENABLE_INSTANT_APPS = "android.support.customtabs.extra.EXTRA_ENABLE_INSTANT_APPS";
- field public static final String EXTRA_ENABLE_URLBAR_HIDING = "android.support.customtabs.extra.ENABLE_URLBAR_HIDING";
- field public static final String EXTRA_EXIT_ANIMATION_BUNDLE = "android.support.customtabs.extra.EXIT_ANIMATION_BUNDLE";
- field public static final String EXTRA_INITIAL_ACTIVITY_HEIGHT_PX = "androidx.browser.customtabs.extra.INITIAL_ACTIVITY_HEIGHT_PX";
- field public static final String EXTRA_MENU_ITEMS = "android.support.customtabs.extra.MENU_ITEMS";
- field public static final String EXTRA_NAVIGATION_BAR_COLOR = "androidx.browser.customtabs.extra.NAVIGATION_BAR_COLOR";
- field public static final String EXTRA_NAVIGATION_BAR_DIVIDER_COLOR = "androidx.browser.customtabs.extra.NAVIGATION_BAR_DIVIDER_COLOR";
- field public static final String EXTRA_REMOTEVIEWS = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS";
- field public static final String EXTRA_REMOTEVIEWS_CLICKED_ID = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_CLICKED_ID";
- field public static final String EXTRA_REMOTEVIEWS_PENDINGINTENT = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_PENDINGINTENT";
- field public static final String EXTRA_REMOTEVIEWS_VIEW_IDS = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_VIEW_IDS";
- field public static final String EXTRA_SECONDARY_TOOLBAR_COLOR = "android.support.customtabs.extra.SECONDARY_TOOLBAR_COLOR";
- field public static final String EXTRA_SESSION = "android.support.customtabs.extra.SESSION";
- field public static final String EXTRA_SHARE_STATE = "androidx.browser.customtabs.extra.SHARE_STATE";
- field public static final String EXTRA_TINT_ACTION_BUTTON = "android.support.customtabs.extra.TINT_ACTION_BUTTON";
- field public static final String EXTRA_TITLE_VISIBILITY_STATE = "android.support.customtabs.extra.TITLE_VISIBILITY";
- field public static final String EXTRA_TOOLBAR_COLOR = "android.support.customtabs.extra.TOOLBAR_COLOR";
- field public static final String EXTRA_TOOLBAR_CORNER_RADIUS_DP = "androidx.browser.customtabs.extra.TOOLBAR_CORNER_RADIUS_DP";
- field public static final String EXTRA_TOOLBAR_ITEMS = "android.support.customtabs.extra.TOOLBAR_ITEMS";
- field public static final String KEY_DESCRIPTION = "android.support.customtabs.customaction.DESCRIPTION";
- field public static final String KEY_ICON = "android.support.customtabs.customaction.ICON";
- field public static final String KEY_ID = "android.support.customtabs.customaction.ID";
- field public static final String KEY_MENU_ITEM_TITLE = "android.support.customtabs.customaction.MENU_ITEM_TITLE";
- field public static final String KEY_PENDING_INTENT = "android.support.customtabs.customaction.PENDING_INTENT";
- field public static final int NO_TITLE = 0; // 0x0
- field public static final int SHARE_STATE_DEFAULT = 0; // 0x0
- field public static final int SHARE_STATE_OFF = 2; // 0x2
- field public static final int SHARE_STATE_ON = 1; // 0x1
- field public static final int SHOW_PAGE_TITLE = 1; // 0x1
- field public static final int TOOLBAR_ACTION_BUTTON_ID = 0; // 0x0
- field public final android.content.Intent intent;
- field public final android.os.Bundle? startAnimationBundle;
- }
-
- public static final class CustomTabsIntent.Builder {
- ctor public CustomTabsIntent.Builder();
- ctor public CustomTabsIntent.Builder(androidx.browser.customtabs.CustomTabsSession?);
- method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder addDefaultShareMenuItem();
- method public androidx.browser.customtabs.CustomTabsIntent.Builder addMenuItem(String, android.app.PendingIntent);
- method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder addToolbarItem(int, android.graphics.Bitmap, String, android.app.PendingIntent) throws java.lang.IllegalStateException;
- method public androidx.browser.customtabs.CustomTabsIntent build();
- method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder enableUrlBarHiding();
- method public androidx.browser.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, String, android.app.PendingIntent, boolean);
- method public androidx.browser.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, String, android.app.PendingIntent);
- method public androidx.browser.customtabs.CustomTabsIntent.Builder setCloseButtonIcon(android.graphics.Bitmap);
- method public androidx.browser.customtabs.CustomTabsIntent.Builder setCloseButtonPosition(int);
- method public androidx.browser.customtabs.CustomTabsIntent.Builder setColorScheme(int);
- method public androidx.browser.customtabs.CustomTabsIntent.Builder setColorSchemeParams(int, androidx.browser.customtabs.CustomTabColorSchemeParams);
- method public androidx.browser.customtabs.CustomTabsIntent.Builder setDefaultColorSchemeParams(androidx.browser.customtabs.CustomTabColorSchemeParams);
- method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setDefaultShareMenuItemEnabled(boolean);
- method public androidx.browser.customtabs.CustomTabsIntent.Builder setExitAnimations(android.content.Context, @AnimRes int, @AnimRes int);
- method public androidx.browser.customtabs.CustomTabsIntent.Builder setInitialActivityHeightPx(@Dimension(unit=androidx.annotation.Dimension.PX) int, int);
- method public androidx.browser.customtabs.CustomTabsIntent.Builder setInitialActivityHeightPx(@Dimension(unit=androidx.annotation.Dimension.PX) int);
- method public androidx.browser.customtabs.CustomTabsIntent.Builder setInstantAppsEnabled(boolean);
- method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setNavigationBarColor(@ColorInt int);
- method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setNavigationBarDividerColor(@ColorInt int);
- method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setSecondaryToolbarColor(@ColorInt int);
- method public androidx.browser.customtabs.CustomTabsIntent.Builder setSecondaryToolbarViews(android.widget.RemoteViews, int[]?, android.app.PendingIntent?);
- method public androidx.browser.customtabs.CustomTabsIntent.Builder setSession(androidx.browser.customtabs.CustomTabsSession);
- method public androidx.browser.customtabs.CustomTabsIntent.Builder setShareState(int);
- method public androidx.browser.customtabs.CustomTabsIntent.Builder setShowTitle(boolean);
- method public androidx.browser.customtabs.CustomTabsIntent.Builder setStartAnimations(android.content.Context, @AnimRes int, @AnimRes int);
- method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setToolbarColor(@ColorInt int);
- method public androidx.browser.customtabs.CustomTabsIntent.Builder setToolbarCornerRadiusDp(@Dimension(unit=androidx.annotation.Dimension.DP) int);
- method public androidx.browser.customtabs.CustomTabsIntent.Builder setUrlBarHidingEnabled(boolean);
- }
-
- public abstract class CustomTabsService extends android.app.Service {
- ctor public CustomTabsService();
- method protected boolean cleanUpSession(androidx.browser.customtabs.CustomTabsSessionToken);
- method protected abstract android.os.Bundle? extraCommand(String, android.os.Bundle?);
- method @IntRange(from=0, to=100) protected int getGreatestScrollPercentage(androidx.browser.customtabs.CustomTabsSessionToken, android.os.Bundle);
- method protected boolean isEngagementSignalsApiAvailable(androidx.browser.customtabs.CustomTabsSessionToken, android.os.Bundle);
- method protected abstract boolean mayLaunchUrl(androidx.browser.customtabs.CustomTabsSessionToken, android.net.Uri?, android.os.Bundle?, java.util.List<android.os.Bundle!>?);
- method protected abstract boolean newSession(androidx.browser.customtabs.CustomTabsSessionToken);
- method public android.os.IBinder onBind(android.content.Intent?);
- method @androidx.browser.customtabs.CustomTabsService.Result protected abstract int postMessage(androidx.browser.customtabs.CustomTabsSessionToken, String, android.os.Bundle?);
- method protected abstract boolean receiveFile(androidx.browser.customtabs.CustomTabsSessionToken, android.net.Uri, int, android.os.Bundle?);
- method protected abstract boolean requestPostMessageChannel(androidx.browser.customtabs.CustomTabsSessionToken, android.net.Uri);
- method protected boolean setEngagementSignalsCallback(androidx.browser.customtabs.CustomTabsSessionToken, androidx.browser.customtabs.EngagementSignalsCallback, android.os.Bundle);
- method protected abstract boolean updateVisuals(androidx.browser.customtabs.CustomTabsSessionToken, android.os.Bundle?);
- method protected abstract boolean validateRelationship(androidx.browser.customtabs.CustomTabsSessionToken, @androidx.browser.customtabs.CustomTabsService.Relation int, android.net.Uri, android.os.Bundle?);
- method protected abstract boolean warmup(long);
- field public static final String ACTION_CUSTOM_TABS_CONNECTION = "android.support.customtabs.action.CustomTabsService";
- field public static final String CATEGORY_COLOR_SCHEME_CUSTOMIZATION = "androidx.browser.customtabs.category.ColorSchemeCustomization";
- field public static final String CATEGORY_NAVBAR_COLOR_CUSTOMIZATION = "androidx.browser.customtabs.category.NavBarColorCustomization";
- field public static final String CATEGORY_TRUSTED_WEB_ACTIVITY_IMMERSIVE_MODE = "androidx.browser.trusted.category.ImmersiveMode";
- field public static final String CATEGORY_WEB_SHARE_TARGET_V2 = "androidx.browser.trusted.category.WebShareTargetV2";
- field public static final int FILE_PURPOSE_TRUSTED_WEB_ACTIVITY_SPLASH_IMAGE = 1; // 0x1
- field public static final String KEY_SUCCESS = "androidx.browser.customtabs.SUCCESS";
- field public static final String KEY_URL = "android.support.customtabs.otherurls.URL";
- field public static final int RELATION_HANDLE_ALL_URLS = 2; // 0x2
- field public static final int RELATION_USE_AS_ORIGIN = 1; // 0x1
- field public static final int RESULT_FAILURE_DISALLOWED = -1; // 0xffffffff
- field public static final int RESULT_FAILURE_MESSAGING_ERROR = -3; // 0xfffffffd
- field public static final int RESULT_FAILURE_REMOTE_ERROR = -2; // 0xfffffffe
- field public static final int RESULT_SUCCESS = 0; // 0x0
- field public static final String TRUSTED_WEB_ACTIVITY_CATEGORY = "androidx.browser.trusted.category.TrustedWebActivities";
- }
-
- @IntDef({androidx.browser.customtabs.CustomTabsService.RELATION_USE_AS_ORIGIN, androidx.browser.customtabs.CustomTabsService.RELATION_HANDLE_ALL_URLS}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface CustomTabsService.Relation {
- }
-
- @IntDef({androidx.browser.customtabs.CustomTabsService.RESULT_SUCCESS, androidx.browser.customtabs.CustomTabsService.RESULT_FAILURE_DISALLOWED, androidx.browser.customtabs.CustomTabsService.RESULT_FAILURE_REMOTE_ERROR, androidx.browser.customtabs.CustomTabsService.RESULT_FAILURE_MESSAGING_ERROR}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface CustomTabsService.Result {
- }
-
- public abstract class CustomTabsServiceConnection implements android.content.ServiceConnection {
- ctor public CustomTabsServiceConnection();
- method public abstract void onCustomTabsServiceConnected(android.content.ComponentName, androidx.browser.customtabs.CustomTabsClient);
- method public final void onServiceConnected(android.content.ComponentName, android.os.IBinder);
- }
-
- public final class CustomTabsSession {
- method @VisibleForTesting public static androidx.browser.customtabs.CustomTabsSession createMockSessionForTesting(android.content.ComponentName);
- method @IntRange(from=0, to=100) @RequiresFeature(name=androidx.browser.customtabs.CustomTabsFeatures.ENGAGEMENT_SIGNALS, enforcement="androidx.browser.customtabs.CustomTabsSession#isEngagementSignalsApiAvailable") public int getGreatestScrollPercentage(android.os.Bundle) throws android.os.RemoteException;
- method public boolean isEngagementSignalsApiAvailable(android.os.Bundle) throws android.os.RemoteException;
- method public boolean mayLaunchUrl(android.net.Uri?, android.os.Bundle?, java.util.List<android.os.Bundle!>?);
- method @androidx.browser.customtabs.CustomTabsService.Result public int postMessage(String, android.os.Bundle?);
- method public boolean receiveFile(android.net.Uri, int, android.os.Bundle?);
- method public boolean requestPostMessageChannel(android.net.Uri);
- method public boolean setActionButton(android.graphics.Bitmap, String);
- method @RequiresFeature(name=androidx.browser.customtabs.CustomTabsFeatures.ENGAGEMENT_SIGNALS, enforcement="androidx.browser.customtabs.CustomTabsSession#isEngagementSignalsApiAvailable") public boolean setEngagementSignalsCallback(androidx.browser.customtabs.EngagementSignalsCallback, android.os.Bundle) throws android.os.RemoteException;
- method @RequiresFeature(name=androidx.browser.customtabs.CustomTabsFeatures.ENGAGEMENT_SIGNALS, enforcement="androidx.browser.customtabs.CustomTabsSession#isEngagementSignalsApiAvailable") public boolean setEngagementSignalsCallback(java.util.concurrent.Executor, androidx.browser.customtabs.EngagementSignalsCallback, android.os.Bundle) throws android.os.RemoteException;
- method public boolean setSecondaryToolbarViews(android.widget.RemoteViews?, int[]?, android.app.PendingIntent?);
- method @Deprecated public boolean setToolbarItem(int, android.graphics.Bitmap, String);
- method public boolean validateRelationship(@androidx.browser.customtabs.CustomTabsService.Relation int, android.net.Uri, android.os.Bundle?);
- }
-
- public class CustomTabsSessionToken {
- method public static androidx.browser.customtabs.CustomTabsSessionToken createMockSessionTokenForTesting();
- method public androidx.browser.customtabs.CustomTabsCallback? getCallback();
- method public static androidx.browser.customtabs.CustomTabsSessionToken? getSessionTokenFromIntent(android.content.Intent);
- method public boolean isAssociatedWith(androidx.browser.customtabs.CustomTabsSession);
- }
-
- public interface EngagementSignalsCallback {
- method public default void onGreatestScrollPercentageIncreased(@IntRange(from=1, to=100) int, android.os.Bundle);
- method public default void onSessionEnded(boolean, android.os.Bundle);
- method public default void onVerticalScrollEvent(boolean, android.os.Bundle);
- }
-
- public class PostMessageService extends android.app.Service {
- ctor public PostMessageService();
- method public android.os.IBinder onBind(android.content.Intent?);
- }
-
- public abstract class PostMessageServiceConnection implements android.content.ServiceConnection {
- ctor public PostMessageServiceConnection(androidx.browser.customtabs.CustomTabsSessionToken);
- method public boolean bindSessionToPostMessageService(android.content.Context, String);
- method public final boolean notifyMessageChannelReady(android.os.Bundle?);
- method public void onPostMessageServiceConnected();
- method public void onPostMessageServiceDisconnected();
- method public final void onServiceConnected(android.content.ComponentName, android.os.IBinder);
- method public final void onServiceDisconnected(android.content.ComponentName);
- method public final boolean postMessage(String, android.os.Bundle?);
- method public void unbindFromContext(android.content.Context);
- }
-
- public class TrustedWebUtils {
- method public static boolean areSplashScreensSupported(android.content.Context, String, String);
- method @Deprecated public static void launchAsTrustedWebActivity(android.content.Context, androidx.browser.customtabs.CustomTabsIntent, android.net.Uri);
- method @WorkerThread public static boolean transferSplashImage(android.content.Context, java.io.File, String, String, androidx.browser.customtabs.CustomTabsSession);
- field public static final String EXTRA_LAUNCH_AS_TRUSTED_WEB_ACTIVITY = "android.support.customtabs.extra.LAUNCH_AS_TRUSTED_WEB_ACTIVITY";
- }
-
-}
-
-package androidx.browser.trusted {
-
- public final class ScreenOrientation {
- field public static final int ANY = 5; // 0x5
- field public static final int DEFAULT = 0; // 0x0
- field public static final int LANDSCAPE = 6; // 0x6
- field public static final int LANDSCAPE_PRIMARY = 3; // 0x3
- field public static final int LANDSCAPE_SECONDARY = 4; // 0x4
- field public static final int NATURAL = 8; // 0x8
- field public static final int PORTRAIT = 7; // 0x7
- field public static final int PORTRAIT_PRIMARY = 1; // 0x1
- field public static final int PORTRAIT_SECONDARY = 2; // 0x2
- }
-
- public final class Token {
- method public static androidx.browser.trusted.Token? create(String, android.content.pm.PackageManager);
- method public static androidx.browser.trusted.Token deserialize(byte[]);
- method public boolean matches(String, android.content.pm.PackageManager);
- method public byte[] serialize();
- }
-
- public interface TokenStore {
- method @BinderThread public androidx.browser.trusted.Token? load();
- method @WorkerThread public void store(androidx.browser.trusted.Token?);
- }
-
- public abstract class TrustedWebActivityCallback {
- ctor public TrustedWebActivityCallback();
- method public abstract void onExtraCallback(String, android.os.Bundle?);
- }
-
- public class TrustedWebActivityCallbackRemote {
- method public void runExtraCallback(String, android.os.Bundle) throws android.os.RemoteException;
- }
-
- public interface TrustedWebActivityDisplayMode {
- method public static androidx.browser.trusted.TrustedWebActivityDisplayMode fromBundle(android.os.Bundle);
- method public android.os.Bundle toBundle();
- field public static final String KEY_ID = "androidx.browser.trusted.displaymode.KEY_ID";
- }
-
- public static class TrustedWebActivityDisplayMode.DefaultMode implements androidx.browser.trusted.TrustedWebActivityDisplayMode {
- ctor public TrustedWebActivityDisplayMode.DefaultMode();
- method public android.os.Bundle toBundle();
- }
-
- public static class TrustedWebActivityDisplayMode.ImmersiveMode implements androidx.browser.trusted.TrustedWebActivityDisplayMode {
- ctor public TrustedWebActivityDisplayMode.ImmersiveMode(boolean, int);
- method public boolean isSticky();
- method public int layoutInDisplayCutoutMode();
- method public android.os.Bundle toBundle();
- field public static final String KEY_CUTOUT_MODE = "androidx.browser.trusted.displaymode.KEY_CUTOUT_MODE";
- field public static final String KEY_STICKY = "androidx.browser.trusted.displaymode.KEY_STICKY";
- }
-
- public final class TrustedWebActivityIntent {
- method public android.content.Intent getIntent();
- method public void launchTrustedWebActivity(android.content.Context);
- }
-
- public class TrustedWebActivityIntentBuilder {
- ctor public TrustedWebActivityIntentBuilder(android.net.Uri);
- method public androidx.browser.trusted.TrustedWebActivityIntent build(androidx.browser.customtabs.CustomTabsSession);
- method public androidx.browser.customtabs.CustomTabsIntent buildCustomTabsIntent();
- method public androidx.browser.trusted.TrustedWebActivityDisplayMode getDisplayMode();
- method public android.net.Uri getUri();
- method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setAdditionalTrustedOrigins(java.util.List<java.lang.String!>);
- method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setColorScheme(int);
- method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setColorSchemeParams(int, androidx.browser.customtabs.CustomTabColorSchemeParams);
- method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setDefaultColorSchemeParams(androidx.browser.customtabs.CustomTabColorSchemeParams);
- method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setDisplayMode(androidx.browser.trusted.TrustedWebActivityDisplayMode);
- method @Deprecated public androidx.browser.trusted.TrustedWebActivityIntentBuilder setNavigationBarColor(@ColorInt int);
- method @Deprecated public androidx.browser.trusted.TrustedWebActivityIntentBuilder setNavigationBarDividerColor(@ColorInt int);
- method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setScreenOrientation(int);
- method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setShareParams(androidx.browser.trusted.sharing.ShareTarget, androidx.browser.trusted.sharing.ShareData);
- method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setSplashScreenParams(android.os.Bundle);
- method @Deprecated public androidx.browser.trusted.TrustedWebActivityIntentBuilder setToolbarColor(@ColorInt int);
- field public static final String EXTRA_ADDITIONAL_TRUSTED_ORIGINS = "android.support.customtabs.extra.ADDITIONAL_TRUSTED_ORIGINS";
- field public static final String EXTRA_DISPLAY_MODE = "androidx.browser.trusted.extra.DISPLAY_MODE";
- field public static final String EXTRA_SCREEN_ORIENTATION = "androidx.browser.trusted.extra.SCREEN_ORIENTATION";
- field public static final String EXTRA_SHARE_DATA = "androidx.browser.trusted.extra.SHARE_DATA";
- field public static final String EXTRA_SHARE_TARGET = "androidx.browser.trusted.extra.SHARE_TARGET";
- field public static final String EXTRA_SPLASH_SCREEN_PARAMS = "androidx.browser.trusted.EXTRA_SPLASH_SCREEN_PARAMS";
- }
-
- public abstract class TrustedWebActivityService extends android.app.Service {
- ctor public TrustedWebActivityService();
- method @BinderThread public abstract androidx.browser.trusted.TokenStore getTokenStore();
- method @BinderThread public boolean onAreNotificationsEnabled(String);
- method @MainThread public final android.os.IBinder? onBind(android.content.Intent?);
- method @BinderThread public void onCancelNotification(String, int);
- method @BinderThread public android.os.Bundle? onExtraCommand(String, android.os.Bundle, androidx.browser.trusted.TrustedWebActivityCallbackRemote?);
- method @BinderThread public android.os.Bundle onGetSmallIconBitmap();
- method @BinderThread public int onGetSmallIconId();
- method @BinderThread @RequiresPermission(android.Manifest.permission.POST_NOTIFICATIONS) public boolean onNotifyNotificationWithChannel(String, int, android.app.Notification, String);
- method @MainThread public final boolean onUnbind(android.content.Intent?);
- field public static final String ACTION_TRUSTED_WEB_ACTIVITY_SERVICE = "android.support.customtabs.trusted.TRUSTED_WEB_ACTIVITY_SERVICE";
- field public static final String KEY_SMALL_ICON_BITMAP = "android.support.customtabs.trusted.SMALL_ICON_BITMAP";
- field public static final String KEY_SUCCESS = "androidx.browser.trusted.SUCCESS";
- field public static final String META_DATA_NAME_SMALL_ICON = "android.support.customtabs.trusted.SMALL_ICON";
- field public static final int SMALL_ICON_NOT_SET = -1; // 0xffffffff
- }
-
- public final class TrustedWebActivityServiceConnection {
- method public boolean areNotificationsEnabled(String) throws android.os.RemoteException;
- method public void cancel(String, int) throws android.os.RemoteException;
- method public android.content.ComponentName getComponentName();
- method public android.graphics.Bitmap? getSmallIconBitmap() throws android.os.RemoteException;
- method public int getSmallIconId() throws android.os.RemoteException;
- method public boolean notify(String, int, android.app.Notification, String) throws android.os.RemoteException;
- method public android.os.Bundle? sendExtraCommand(String, android.os.Bundle, androidx.browser.trusted.TrustedWebActivityCallback?) throws android.os.RemoteException;
- }
-
- public final class TrustedWebActivityServiceConnectionPool {
- method @MainThread public com.google.common.util.concurrent.ListenableFuture<androidx.browser.trusted.TrustedWebActivityServiceConnection!> connect(android.net.Uri, java.util.Set<androidx.browser.trusted.Token!>, java.util.concurrent.Executor);
- method public static androidx.browser.trusted.TrustedWebActivityServiceConnectionPool create(android.content.Context);
- method @MainThread public boolean serviceExistsForScope(android.net.Uri, java.util.Set<androidx.browser.trusted.Token!>);
- }
-
-}
-
-package androidx.browser.trusted.sharing {
-
- public final class ShareData {
- ctor public ShareData(String?, String?, java.util.List<android.net.Uri!>?);
- method public static androidx.browser.trusted.sharing.ShareData fromBundle(android.os.Bundle);
- method public android.os.Bundle toBundle();
- field public static final String KEY_TEXT = "androidx.browser.trusted.sharing.KEY_TEXT";
- field public static final String KEY_TITLE = "androidx.browser.trusted.sharing.KEY_TITLE";
- field public static final String KEY_URIS = "androidx.browser.trusted.sharing.KEY_URIS";
- field public final String? text;
- field public final String? title;
- field public final java.util.List<android.net.Uri!>? uris;
- }
-
- public final class ShareTarget {
- ctor public ShareTarget(String, String?, String?, androidx.browser.trusted.sharing.ShareTarget.Params);
- method public static androidx.browser.trusted.sharing.ShareTarget? fromBundle(android.os.Bundle);
- method public android.os.Bundle toBundle();
- field public static final String ENCODING_TYPE_MULTIPART = "multipart/form-data";
- field public static final String ENCODING_TYPE_URL_ENCODED = "application/x-www-form-urlencoded";
- field public static final String KEY_ACTION = "androidx.browser.trusted.sharing.KEY_ACTION";
- field public static final String KEY_ENCTYPE = "androidx.browser.trusted.sharing.KEY_ENCTYPE";
- field public static final String KEY_METHOD = "androidx.browser.trusted.sharing.KEY_METHOD";
- field public static final String KEY_PARAMS = "androidx.browser.trusted.sharing.KEY_PARAMS";
- field public static final String METHOD_GET = "GET";
- field public static final String METHOD_POST = "POST";
- field public final String action;
- field public final String? encodingType;
- field public final String? method;
- field public final androidx.browser.trusted.sharing.ShareTarget.Params params;
- }
-
- public static final class ShareTarget.FileFormField {
- ctor public ShareTarget.FileFormField(String, java.util.List<java.lang.String!>);
- field public static final String KEY_ACCEPTED_TYPES = "androidx.browser.trusted.sharing.KEY_ACCEPTED_TYPES";
- field public static final String KEY_NAME = "androidx.browser.trusted.sharing.KEY_FILE_NAME";
- field public final java.util.List<java.lang.String!> acceptedTypes;
- field public final String name;
- }
-
- public static class ShareTarget.Params {
- ctor public ShareTarget.Params(String?, String?, java.util.List<androidx.browser.trusted.sharing.ShareTarget.FileFormField!>?);
- field public static final String KEY_FILES = "androidx.browser.trusted.sharing.KEY_FILES";
- field public static final String KEY_TEXT = "androidx.browser.trusted.sharing.KEY_TEXT";
- field public static final String KEY_TITLE = "androidx.browser.trusted.sharing.KEY_TITLE";
- field public final java.util.List<androidx.browser.trusted.sharing.ShareTarget.FileFormField!>? files;
- field public final String? text;
- field public final String? title;
- }
-
-}
-
-package androidx.browser.trusted.splashscreens {
-
- public final class SplashScreenParamKey {
- field public static final String KEY_BACKGROUND_COLOR = "androidx.browser.trusted.trusted.KEY_SPLASH_SCREEN_BACKGROUND_COLOR";
- field public static final String KEY_FADE_OUT_DURATION_MS = "androidx.browser.trusted.KEY_SPLASH_SCREEN_FADE_OUT_DURATION";
- field public static final String KEY_IMAGE_TRANSFORMATION_MATRIX = "androidx.browser.trusted.KEY_SPLASH_SCREEN_TRANSFORMATION_MATRIX";
- field public static final String KEY_SCALE_TYPE = "androidx.browser.trusted.KEY_SPLASH_SCREEN_SCALE_TYPE";
- field public static final String KEY_VERSION = "androidx.browser.trusted.KEY_SPLASH_SCREEN_VERSION";
- }
-
- public final class SplashScreenVersion {
- field public static final String V1 = "androidx.browser.trusted.category.TrustedWebActivitySplashScreensV1";
- }
-
-}
-
diff --git a/browser/browser/api/restricted_current.txt b/browser/browser/api/restricted_current.txt
index 19a1da2..3862b78 100644
--- a/browser/browser/api/restricted_current.txt
+++ b/browser/browser/api/restricted_current.txt
@@ -2,9 +2,9 @@
package androidx.browser.browseractions {
@Deprecated public class BrowserActionItem {
- ctor @Deprecated public BrowserActionItem(String, android.app.PendingIntent, @DrawableRes int);
- ctor @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public BrowserActionItem(String, android.app.PendingIntent, android.net.Uri);
ctor @Deprecated public BrowserActionItem(String, android.app.PendingIntent);
+ ctor @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public BrowserActionItem(String, android.app.PendingIntent, android.net.Uri);
+ ctor @Deprecated public BrowserActionItem(String, android.app.PendingIntent, @DrawableRes int);
method @Deprecated public android.app.PendingIntent getAction();
method @Deprecated public int getIconId();
method @Deprecated public String getTitle();
@@ -54,8 +54,8 @@
@Deprecated public static final class BrowserActionsIntent.Builder {
ctor @Deprecated public BrowserActionsIntent.Builder(android.content.Context, android.net.Uri);
method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent build();
- method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setCustomItems(java.util.ArrayList<androidx.browser.browseractions.BrowserActionItem!>);
method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setCustomItems(androidx.browser.browseractions.BrowserActionItem!...);
+ method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setCustomItems(java.util.ArrayList<androidx.browser.browseractions.BrowserActionItem!>);
method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setOnItemSelectedAction(android.app.PendingIntent);
method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setUrlType(@androidx.browser.browseractions.BrowserActionsIntent.BrowserActionsUrlType int);
}
@@ -177,8 +177,8 @@
method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder addToolbarItem(int, android.graphics.Bitmap, String, android.app.PendingIntent) throws java.lang.IllegalStateException;
method public androidx.browser.customtabs.CustomTabsIntent build();
method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder enableUrlBarHiding();
- method public androidx.browser.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, String, android.app.PendingIntent, boolean);
method public androidx.browser.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, String, android.app.PendingIntent);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, String, android.app.PendingIntent, boolean);
method public androidx.browser.customtabs.CustomTabsIntent.Builder setCloseButtonIcon(android.graphics.Bitmap);
method public androidx.browser.customtabs.CustomTabsIntent.Builder setCloseButtonPosition(int);
method public androidx.browser.customtabs.CustomTabsIntent.Builder setColorScheme(int);
@@ -186,8 +186,8 @@
method public androidx.browser.customtabs.CustomTabsIntent.Builder setDefaultColorSchemeParams(androidx.browser.customtabs.CustomTabColorSchemeParams);
method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setDefaultShareMenuItemEnabled(boolean);
method public androidx.browser.customtabs.CustomTabsIntent.Builder setExitAnimations(android.content.Context, @AnimRes int, @AnimRes int);
- method public androidx.browser.customtabs.CustomTabsIntent.Builder setInitialActivityHeightPx(@Dimension(unit=androidx.annotation.Dimension.PX) int, int);
method public androidx.browser.customtabs.CustomTabsIntent.Builder setInitialActivityHeightPx(@Dimension(unit=androidx.annotation.Dimension.PX) int);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setInitialActivityHeightPx(@Dimension(unit=androidx.annotation.Dimension.PX) int, int);
method public androidx.browser.customtabs.CustomTabsIntent.Builder setInstantAppsEnabled(boolean);
method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setNavigationBarColor(@ColorInt int);
method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setNavigationBarDividerColor(@ColorInt int);
diff --git a/browser/browser/build.gradle b/browser/browser/build.gradle
index de7fa00..195ec5c 100644
--- a/browser/browser/build.gradle
+++ b/browser/browser/build.gradle
@@ -51,8 +51,8 @@
}
androidx {
- name = "Android Support Custom Tabs"
+ name = "Browser"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2015"
- description = "Android Support Custom Tabs"
+ description = "Provides support for embedding Custom Tabs in an app."
}
diff --git a/buildSrc-tests/max-dep-versions/buildSrc-tests-max-dep-versions-dep/build.gradle b/buildSrc-tests/max-dep-versions/buildSrc-tests-max-dep-versions-dep/build.gradle
index 06e9e6e..eae2213 100644
--- a/buildSrc-tests/max-dep-versions/buildSrc-tests-max-dep-versions-dep/build.gradle
+++ b/buildSrc-tests/max-dep-versions/buildSrc-tests-max-dep-versions-dep/build.gradle
@@ -11,7 +11,7 @@
}
androidx {
- name = "Sample Library"
+ name = "Sample"
publish = Publish.SNAPSHOT_AND_RELEASE
type = LibraryType.SAMPLES
inceptionYear = "2020"
diff --git a/buildSrc/OWNERS b/buildSrc/OWNERS
index e866ad4..ec63c9a 100644
--- a/buildSrc/OWNERS
+++ b/buildSrc/OWNERS
@@ -6,3 +6,4 @@
per-file *AndroidXPlaygroundRootPlugin.kt = [email protected], [email protected], [email protected]
per-file *LintConfiguration.kt = [email protected], [email protected]
+per-file *AndroidXComposeLintIssues.kt = [email protected], [email protected]
diff --git a/buildSrc/plugins/src/main/kotlin/androidx/build/AndroidXComposePlugin.kt b/buildSrc/plugins/src/main/kotlin/androidx/build/AndroidXComposePlugin.kt
index b71fcb9..3a6f4b3 100644
--- a/buildSrc/plugins/src/main/kotlin/androidx/build/AndroidXComposePlugin.kt
+++ b/buildSrc/plugins/src/main/kotlin/androidx/build/AndroidXComposePlugin.kt
@@ -16,8 +16,6 @@
package androidx.build
-import androidx.build.Multiplatform.Companion.isMultiplatformEnabled
-import kotlin.reflect.KFunction
import org.gradle.api.Plugin
import org.gradle.api.Project
@@ -33,23 +31,4 @@
)
)
}
-
- companion object {
- @JvmStatic
- fun isMultiplatformEnabled(project: Project): Boolean {
- return project.isMultiplatformEnabled()
- }
-
- @JvmOverloads
- @JvmStatic
- fun applyAndConfigureKotlinPlugin(
- project: Project,
- isMultiplatformEnabled: Boolean = project.isMultiplatformEnabled()
- ) {
- @Suppress("UNCHECKED_CAST")
- val companion: KFunction<Unit> =
- project.extensions.getByName("applyAndConfigureKotlinPlugin") as KFunction<Unit>
- companion.call(project, isMultiplatformEnabled)
- }
- }
}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeImplPlugin.kt
index c596da5..6576681 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeImplPlugin.kt
@@ -28,7 +28,6 @@
import com.android.build.gradle.internal.lint.LintModelWriterTask
import com.android.build.gradle.internal.lint.VariantInputs
import java.io.File
-import kotlin.reflect.KFunction
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.artifacts.type.ArtifactTypeDefinition
@@ -36,7 +35,6 @@
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.plugins.ExtraPropertiesExtension
import org.gradle.api.tasks.ClasspathNormalizer
-import org.gradle.kotlin.dsl.apply
import org.gradle.kotlin.dsl.create
import org.gradle.kotlin.dsl.findByType
import org.gradle.kotlin.dsl.withType
@@ -61,8 +59,6 @@
*/
class AndroidXComposeImplPlugin : Plugin<Project> {
override fun apply(project: Project) {
- val f: KFunction<Unit> = Companion::applyAndConfigureKotlinPlugin
- project.extensions.add("applyAndConfigureKotlinPlugin", f)
val extension = project.extensions.create<AndroidXComposeExtension>(
"androidxCompose",
project
@@ -93,40 +89,6 @@
}
companion object {
-
- /**
- * @param isMultiplatformEnabled whether this module has a corresponding
- * multiplatform configuration, or whether it is Android only
- */
- fun applyAndConfigureKotlinPlugin(
- project: Project,
- isMultiplatformEnabled: Boolean
- ) {
- if (isMultiplatformEnabled) {
- project.apply(plugin = "kotlin-multiplatform")
-
- project.extensions.create(
- AndroidXComposeMultiplatformExtension::class.java,
- "androidXComposeMultiplatform",
- AndroidXComposeMultiplatformExtensionImpl::class.java
- )
- } else {
- project.apply(plugin = "org.jetbrains.kotlin.android")
- }
-
- project.configureManifests()
- if (isMultiplatformEnabled) {
- project.configureForMultiplatform()
- } else {
- project.configureForKotlinMultiplatformSourceStructure()
- }
-
- project.tasks.withType(KotlinCompile::class.java).configureEach { compile ->
- // Needed to enable `expect` and `actual` keywords
- compile.kotlinOptions.freeCompilerArgs += "-Xmulti-platform"
- }
- }
-
private fun Project.androidxExtension(): AndroidXExtension? {
return extensions.findByType(AndroidXExtension::class.java)
}
@@ -134,7 +96,6 @@
private fun Project.configureAndroidCommonOptions(testedExtension: TestedExtension) {
testedExtension.defaultConfig.minSdk = 21
- @Suppress("UnstableApiUsage")
extensions.findByType(AndroidComponentsExtension::class.java)!!.finalizeDsl {
val isPublished = androidxExtension()?.shouldPublish() ?: false
@@ -148,26 +109,7 @@
// Lint tries to apply this rule to modules that do not have this lint check, so
// we disable that check too
disable.add("UnknownIssueId")
- error.add("ComposableNaming")
- error.add("ComposableLambdaParameterNaming")
- error.add("ComposableLambdaParameterPosition")
- error.add("CompositionLocalNaming")
- error.add("ComposableModifierFactory")
- error.add("AutoboxingStateCreation")
- error.add("AutoboxingStateValueProperty")
- error.add("InvalidColorHexValue")
- error.add("MissingColorAlphaChannel")
- error.add("ModifierFactoryReturnType")
- error.add("ModifierFactoryExtensionFunction")
- error.add("ModifierNodeInspectableProperties")
- error.add("ModifierParameter")
- error.add("MutableCollectionMutableState")
- error.add("OpaqueUnitKey")
- error.add("UnnecessaryComposedModifier")
- error.add("FrequentlyChangedStateReadInComposition")
- error.add("ReturnFromAwaitPointerEventScope")
- error.add("UseOfNonLambdaOffsetOverload")
- error.add("MultipleAwaitPointerEventScopes")
+ error.addAll(ComposeLintWarningIdsToTreatAsErrors)
// Paths we want to enable ListIterator checks for - for higher level
// libraries it won't have a noticeable performance impact, and we don't want
@@ -214,65 +156,6 @@
}
}
- private fun Project.configureManifests() {
- val libraryExtension = project.extensions.findByType<LibraryExtension>() ?: return
- libraryExtension.apply {
- sourceSets.findByName("main")!!.manifest
- .srcFile("src/androidMain/AndroidManifest.xml")
- sourceSets.findByName("androidTest")!!.manifest
- .srcFile("src/androidAndroidTest/AndroidManifest.xml")
- }
- }
-
- /**
- * General configuration for MPP projects. In the future, these workarounds should either be
- * generified and added to AndroidXPlugin, or removed as/when the underlying issues have been
- * resolved.
- */
- private fun Project.configureForKotlinMultiplatformSourceStructure() {
- val libraryExtension = project.extensions.findByType<LibraryExtension>() ?: return
-
- // TODO: b/148416113: AGP doesn't know about Kotlin-MPP's sourcesets yet, so add
- // them to its source directories (this fixes lint, and code completion in
- // Android Studio on versions >= 4.0canary8)
- libraryExtension.apply {
- sourceSets.findByName("main")?.apply {
- java.srcDirs(
- "src/commonMain/kotlin", "src/jvmMain/kotlin",
- "src/androidMain/kotlin"
- )
- res.srcDirs(
- "src/commonMain/resources",
- "src/androidMain/res"
- )
- assets.srcDirs("src/androidMain/assets")
-
- // Keep Kotlin files in java source sets so the source set is not empty when
- // running unit tests which would prevent the tests from running in CI.
- java.includes.add("**/*.kt")
- }
- sourceSets.findByName("test")?.apply {
- java.srcDirs(
- "src/commonTest/kotlin", "src/jvmTest/kotlin"
- )
- res.srcDirs("src/commonTest/res", "src/jvmTest/res")
-
- // Keep Kotlin files in java source sets so the source set is not empty when
- // running unit tests which would prevent the tests from running in CI.
- java.includes.add("**/*.kt")
- }
- sourceSets.findByName("androidTest")?.apply {
- java.srcDirs("src/androidAndroidTest/kotlin")
- res.srcDirs("src/androidAndroidTest/res")
- assets.srcDirs("src/androidAndroidTest/assets")
-
- // Keep Kotlin files in java source sets so the source set is not empty when
- // running unit tests which would prevent the tests from running in CI.
- java.includes.add("**/*.kt")
- }
- }
- }
-
/**
* General configuration for MPP projects. In the future, these workarounds should either be
* generified and added to AndroidXPlugin, or removed as/when the underlying issues have been
@@ -477,36 +360,3 @@
block()
disallowChanges.set(this, true)
}
-
-/**
- * General purpose implementation of a transitive closure
- * - Recursion free
- * - Predictable amount of allocations
- * - Handles loops and self references gracefully
- * @param edges: Producer function from one node to all its children. This implementation can handle loops and self references gracefully.
- * @return Note: No guarantees given about the order ot this [Set]
- */
-public inline fun <reified T> transitiveClosure(seed: T, edges: T.() -> Iterable<T>): Set<T> {
- // Fast path when initial edges are empty
- val initialEdges = seed.edges()
- if (initialEdges is Collection && initialEdges.isEmpty()) return emptySet()
-
- val queue = deque<T>(initialEdges.count() * 2)
- val results = mutableSetOf<T>()
- queue.addAll(initialEdges)
- while (queue.isNotEmpty()) {
- // ArrayDeque implementation will optimize this call to 'removeFirst'
- val resolved = queue.removeAt(0)
- if (resolved != seed && results.add(resolved)) {
- queue.addAll(resolved.edges())
- }
- }
-
- return results.toSet()
-}
-
-@PublishedApi
-internal inline fun <reified T> deque(initialSize: Int): MutableList<T> {
- return if (KotlinVersion.CURRENT.isAtLeast(1, 4)) ArrayDeque(initialSize)
- else ArrayList(initialSize)
-}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeLintIssues.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeLintIssues.kt
new file mode 100644
index 0000000..4f039ec
--- /dev/null
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeLintIssues.kt
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.build
+
+/**
+ * These lint checks are normally a warning (or lower), but in AndroidX we ignore warnings in Lint.
+ * We want these errors to be reported, so they'll be promoted from a warning to an error in
+ * modules that use the [AndroidXComposeImplPlugin].
+ */
+internal val ComposeLintWarningIdsToTreatAsErrors = listOf(
+ "ComposableNaming",
+ "ComposableLambdaParameterNaming",
+ "ComposableLambdaParameterPosition",
+ "CompositionLocalNaming",
+ "ComposableModifierFactory",
+ "AutoboxingStateCreation",
+ "AutoboxingStateValueProperty",
+ "InvalidColorHexValue",
+ "MissingColorAlphaChannel",
+ "ModifierFactoryReturnType",
+ "ModifierFactoryExtensionFunction",
+ "ModifierNodeInspectableProperties",
+ "ModifierParameter",
+ "MutableCollectionMutableState",
+ "OpaqueUnitKey",
+ "UnnecessaryComposedModifier",
+ "FrequentlyChangedStateReadInComposition",
+ "ReturnFromAwaitPointerEventScope",
+ "UseOfNonLambdaOffsetOverload",
+ "MultipleAwaitPointerEventScopes",
+)
\ No newline at end of file
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeMultiplatformExtensionImpl.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeMultiplatformExtensionImpl.kt
index 54ccdca..c628d7f 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeMultiplatformExtensionImpl.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeMultiplatformExtensionImpl.kt
@@ -16,11 +16,11 @@
package androidx.build
+import javax.inject.Inject
+import org.gradle.api.Project
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
import org.jetbrains.kotlin.gradle.plugin.KotlinJsCompilerType
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
-import org.gradle.api.Project
-import javax.inject.Inject
open class AndroidXComposeMultiplatformExtensionImpl @Inject constructor(
project: Project
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXGradleProperties.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXGradleProperties.kt
index 1640305..b60e69f 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXGradleProperties.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXGradleProperties.kt
@@ -151,6 +151,18 @@
*/
const val UPDATE_SIGNATURES = "androidx.update.signatures"
+/**
+ * Comma-delimited list of project path prefixes which have been opted-out of the Suppress
+ * Compatibility migration.
+ */
+const val SUPPRESS_COMPATIBILITY_OPT_OUT = "androidx.suppress.compatibility.optout"
+
+/**
+ * Comma-delimited list of project path prefixes which have been opted-in to the Suppress
+ * Compatibility migration.
+ */
+const val SUPPRESS_COMPATIBILITY_OPT_IN = "androidx.suppress.compatibility.optin"
+
val ALL_ANDROIDX_PROPERTIES = setOf(
ADD_GROUP_CONSTRAINTS,
ALTERNATIVE_PROJECT_URL,
@@ -178,7 +190,11 @@
ALLOW_MISSING_LINT_CHECKS_PROJECT,
XCODEGEN_DOWNLOAD_URI,
ALLOW_CUSTOM_COMPILE_SDK,
- UPDATE_SIGNATURES
+ UPDATE_SIGNATURES,
+ SUPPRESS_COMPATIBILITY_OPT_OUT,
+ SUPPRESS_COMPATIBILITY_OPT_IN,
+ FilteredAnchorTask.PROP_TASK_NAME,
+ FilteredAnchorTask.PROP_PATH_PREFIX,
)
/**
@@ -285,3 +301,15 @@
s.toBoolean()
}.orElse(false)
}
+
+/**
+ * List of project path prefixes which have been opted-in to the Suppress Compatibility migration.
+ */
+fun Project.getSuppressCompatibilityOptInPathPrefixes(): List<String> =
+ (findProperty(SUPPRESS_COMPATIBILITY_OPT_IN) as? String)?.split(",") ?: emptyList()
+
+/**
+ * List of project path prefixes which have been opted out of the Suppress Compatibility migration.
+ */
+fun Project.getSuppressCompatibilityOptOutPathPrefixes(): List<String> =
+ (findProperty(SUPPRESS_COMPATIBILITY_OPT_OUT) as? String)?.split(",") ?: emptyList()
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
index b8b224c..bb7940d 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
@@ -35,6 +35,8 @@
import androidx.build.resources.configurePublicResourcesStub
import androidx.build.sbom.validateAllArchiveInputsRecognized
import androidx.build.studio.StudioTask
+import androidx.build.testConfiguration.ModuleInfoGenerator
+import androidx.build.testConfiguration.TestModule
import androidx.build.testConfiguration.addAppApkToTestConfigGeneration
import androidx.build.testConfiguration.configureTestConfigGeneration
import com.android.build.api.artifact.SingleArtifact
@@ -227,7 +229,19 @@
task.inputs.property("ignoreFailures", ignoreFailures)
val xmlReportDestDir = project.getHostTestResultDirectory()
- val archiveName = "${project.path}:${task.name}.zip"
+ val testName = "${project.path}:${task.name}"
+ project.rootProject.tasks.named("createModuleInfo").configure {
+ it as ModuleInfoGenerator
+ it.testModules.add(
+ TestModule(
+ name = testName,
+ path = listOf(
+ project.projectDir.toRelativeString(project.getSupportRootFolder())
+ )
+ )
+ )
+ }
+ val archiveName = "$testName.zip"
if (project.isDisplayTestOutput()) {
// Enable tracing to see results in command line
task.testLogging.apply {
@@ -572,6 +586,7 @@
extension.type == LibraryType.UNSET
if (mavenGroup != null && isProbablyPublished && extension.shouldPublish()) {
validateProjectStructure(mavenGroup.group)
+ validateProjectMavenName(extension.name.get(), mavenGroup.group)
}
}
}
@@ -1121,46 +1136,6 @@
return false
}
-private const val GROUP_PREFIX = "androidx."
-
-/**
- * Validates the project structure against Jetpack guidelines.
- */
-fun Project.validateProjectStructure(groupId: String) {
- if (!project.isValidateProjectStructureEnabled()) {
- return
- }
-
- val shortGroupId = if (groupId.startsWith(GROUP_PREFIX)) {
- groupId.substring(GROUP_PREFIX.length)
- } else {
- groupId
- }
-
- // Fully-qualified Gradle project name should match the Maven coordinate.
- val expectName = ":${shortGroupId.replace(".",":")}:${project.name}"
- val actualName = project.path
- if (expectName != actualName) {
- throw GradleException(
- "Invalid project structure! Expected $expectName as project name, found $actualName"
- )
- }
-
- // Project directory should match the Maven coordinate.
- val expectDir = shortGroupId.replace(".", File.separator) +
- "${File.separator}${project.name}"
- // Canonical projectDir is needed because sometimes, at least in tests, on OSX, supportRoot
- // starts with /var, and projectDir starts with /private/var (which are the same thing)
- val canonicalProjectDir = project.projectDir.canonicalFile
- val actualDir =
- canonicalProjectDir.toRelativeString(project.getSupportRootFolder().canonicalFile)
- if (expectDir != actualDir) {
- throw GradleException(
- "Invalid project structure! Expected $expectDir as project directory, found $actualDir"
- )
- }
-}
-
fun Project.validateMultiplatformPluginHasNotBeenApplied() {
if (plugins.hasPlugin(KotlinMultiplatformPluginWrapper::class.java)) {
throw GradleException(
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXMultiplatformExtension.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXMultiplatformExtension.kt
index f6c6252..db8882a 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXMultiplatformExtension.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXMultiplatformExtension.kt
@@ -24,8 +24,8 @@
import org.jetbrains.kotlin.gradle.plugin.KotlinMultiplatformPluginWrapper
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
-import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetPreset
+import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTargetWithHostTests
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsTargetDsl
@@ -90,7 +90,7 @@
fun desktop(
block: Action<KotlinJvmTarget>? = null
): KotlinJvmTarget? {
- return if (project.enableJvm()) {
+ return if (project.enableDesktop()) {
kotlinExtension.jvm("desktop") {
block?.execute(this)
}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXPlaygroundRootImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXPlaygroundRootImplPlugin.kt
index 96d19f7..c2c4d54 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXPlaygroundRootImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXPlaygroundRootImplPlugin.kt
@@ -18,12 +18,12 @@
import androidx.build.gradle.isRoot
import groovy.xml.DOMBuilder
+import java.net.URI
+import java.net.URL
import org.gradle.api.GradleException
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.artifacts.dsl.RepositoryHandler
-import java.net.URI
-import java.net.URL
/**
* This plugin is used in Playground projects and adds functionality like resolving to snapshot
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXRootImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXRootImplPlugin.kt
index 7a4f3c0..1a36ae6 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXRootImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXRootImplPlugin.kt
@@ -69,6 +69,8 @@
configureKtlintCheckFile()
tasks.register(CheckExternalDependencyLicensesTask.TASK_NAME)
+ maybeRegisterFilterableTask()
+
// If we're running inside Studio, validate the Android Gradle Plugin version.
val expectedAgpVersion = System.getenv("EXPECTED_AGP_VERSION")
if (properties.containsKey("android.injected.invoked.from.ide")) {
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/BuildOnServerTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/BuildOnServerTask.kt
index 006a4fc..5af1390 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/BuildOnServerTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/BuildOnServerTask.kt
@@ -16,15 +16,15 @@
package androidx.build
+import java.io.File
+import java.io.FileNotFoundException
import org.gradle.api.DefaultTask
+import org.gradle.api.tasks.CacheableTask
import org.gradle.api.tasks.InputFiles
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.PathSensitive
import org.gradle.api.tasks.PathSensitivity
import org.gradle.api.tasks.TaskAction
-import java.io.File
-import java.io.FileNotFoundException
-import org.gradle.api.tasks.CacheableTask
/**
* Task for building all of Androidx libraries and documentation
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/FilteredAnchorTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/FilteredAnchorTask.kt
new file mode 100644
index 0000000..d4fa963
--- /dev/null
+++ b/buildSrc/private/src/main/kotlin/androidx/build/FilteredAnchorTask.kt
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.build
+
+import androidx.build.FilteredAnchorTask.Companion.GLOBAL_TASK_NAME
+import androidx.build.FilteredAnchorTask.Companion.PROP_PATH_PREFIX
+import androidx.build.FilteredAnchorTask.Companion.PROP_TASK_NAME
+import org.gradle.api.DefaultTask
+import org.gradle.api.GradleException
+import org.gradle.api.Project
+import org.gradle.api.tasks.Input
+import org.gradle.api.tasks.TaskAction
+import org.gradle.api.tasks.TaskProvider
+import org.gradle.work.DisableCachingByDefault
+
+@DisableCachingByDefault(because = "This is an anchor task that does no work.")
+abstract class FilteredAnchorTask : DefaultTask() {
+ init {
+ group = "Help"
+ description = "Runs tasks with a name specified by -P$PROP_TASK_NAME= for projects with " +
+ "a path prefix specified by -P$PROP_PATH_PREFIX="
+ }
+
+ @get:Input
+ abstract var pathPrefix: String
+
+ @get:Input
+ abstract var taskName: String
+
+ @TaskAction
+ fun exec() {
+ if (dependsOn.isEmpty()) {
+ throw GradleException("Failed to find any filterable tasks with name \"$taskName\" " +
+ "and path prefixed with \"$pathPrefix\"")
+ }
+ }
+
+ companion object {
+ const val GLOBAL_TASK_NAME = "filterTasks"
+ const val PROP_PATH_PREFIX = "androidx.pathPrefix"
+ const val PROP_TASK_NAME = "androidx.taskName"
+ }
+}
+
+/**
+ * Offers the specified [taskProviders] to the global [FilteredAnchorTask], adding them if they match
+ * the requested path prefix and task name.
+ */
+internal fun Project.addFilterableTasks(vararg taskProviders: TaskProvider<*>?) {
+ if (hasProperty(PROP_PATH_PREFIX) && hasProperty(PROP_TASK_NAME)) {
+ val pathPrefixes = (properties[PROP_PATH_PREFIX] as String).split(",")
+ if (pathPrefixes.any { pathPrefix -> relativePathForFiltering().startsWith(pathPrefix) }) {
+ val taskName = properties[PROP_TASK_NAME] as String
+ taskProviders.find { taskProvider ->
+ taskName == taskProvider?.name
+ }?.let { taskProvider ->
+ rootProject.tasks.named(GLOBAL_TASK_NAME).configure { task ->
+ task.dependsOn(taskProvider)
+ }
+ }
+ }
+ }
+}
+
+/**
+ * Registers the global [FilteredAnchorTask] if the required command-line properties are set.
+ *
+ * For example, to run `checkApi` for all projects under `core/core/`:
+ * ./gradlew filterTasks -Pandroidx.taskName=checkApi -Pandroidx.pathPrefix=core/core/
+ */
+internal fun Project.maybeRegisterFilterableTask() {
+ if (hasProperty(PROP_TASK_NAME) && hasProperty(PROP_PATH_PREFIX)) {
+ tasks.register(GLOBAL_TASK_NAME, FilteredAnchorTask::class.java) { task ->
+ task.pathPrefix = properties[PROP_PATH_PREFIX] as String
+ task.taskName = properties[PROP_TASK_NAME] as String
+ }
+ }
+}
+
+/**
+ * Returns an AndroidX-relative path for the [Project], inserting the root project directory when
+ * run in a Playground context such that paths are consistent with the AndroidX context.
+ */
+internal fun Project.relativePathForFiltering(): String =
+ if (ProjectLayoutType.isPlayground(project)) {
+ "${rootProject.projectDir.name}/"
+ } else {
+ ""
+ } + "${projectDir.relativeTo(rootDir)}/"
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/FtlRunner.kt b/buildSrc/private/src/main/kotlin/androidx/build/FtlRunner.kt
index 5c45e4e..8c5ef8b 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/FtlRunner.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/FtlRunner.kt
@@ -96,6 +96,10 @@
@TaskAction
fun execThings() {
+ if (!System.getenv().containsKey("GOOGLE_APPLICATION_CREDENTIALS")) {
+ throw Exception("Running tests in FTL requires credentials, you have not set up " +
+ "GOOGLE_APPLICATION_CREDENTIALS, follow go/androidx-dev#remote-build-cache")
+ }
val testApk = testLoader.get().load(testFolder.get())
?: throw RuntimeException("Cannot load required APK for task: $name")
val testApkPath = testApk.elements.single().outputFile
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/InspectionRelease.kt b/buildSrc/private/src/main/kotlin/androidx/build/InspectionRelease.kt
index dc38caa..0db92e6 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/InspectionRelease.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/InspectionRelease.kt
@@ -19,10 +19,10 @@
import androidx.inspection.gradle.InspectionPlugin
import androidx.inspection.gradle.createConsumeInspectionConfiguration
import androidx.inspection.gradle.createConsumeNonDexedInspectionConfiguration
+import java.io.File
import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration
import org.gradle.api.tasks.Sync
-import java.io.File
/**
* Copies artifacts prepared by InspectionPlugin into $destDir/inspection
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/Ktlint.kt b/buildSrc/private/src/main/kotlin/androidx/build/Ktlint.kt
index 7ce68bb..d1319ad 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/Ktlint.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/Ktlint.kt
@@ -79,8 +79,6 @@
}
private val DisabledRules = listOf(
- // does not match IJ default ordering
- "import-ordering",
// not useful for our projects
"final-newline",
// TODO: reenable when https://github.com/pinterest/ktlint/issues/1221 is resolved
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/MavenUploadHelper.kt b/buildSrc/private/src/main/kotlin/androidx/build/MavenUploadHelper.kt
index e2d0e2a..6d9ff9c 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/MavenUploadHelper.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/MavenUploadHelper.kt
@@ -21,7 +21,6 @@
import com.google.gson.GsonBuilder
import com.google.gson.JsonObject
import com.google.gson.stream.JsonWriter
-import org.gradle.api.artifacts.Configuration
import groovy.util.Node
import java.io.File
import java.io.StringReader
@@ -37,6 +36,7 @@
import org.gradle.api.GradleException
import org.gradle.api.Project
import org.gradle.api.XmlProvider
+import org.gradle.api.artifacts.Configuration
import org.gradle.api.component.ComponentWithVariants
import org.gradle.api.component.SoftwareComponent
import org.gradle.api.component.SoftwareComponentFactory
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/ProjectConfigValidators.kt b/buildSrc/private/src/main/kotlin/androidx/build/ProjectConfigValidators.kt
new file mode 100644
index 0000000..bbe7f2a
--- /dev/null
+++ b/buildSrc/private/src/main/kotlin/androidx/build/ProjectConfigValidators.kt
@@ -0,0 +1,111 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.build
+
+import java.io.File
+import org.gradle.api.GradleException
+import org.gradle.api.Project
+
+// Translate common phrases and marketing names into Maven name component equivalents.
+private val mavenNameMap = mapOf(
+ "android for cars" to "car",
+ "android wear" to "wear",
+ "internationalization" to "i18n",
+ "kotlin extensions" to "ktx",
+ "lint checks" to "lint",
+ "material components" to "material",
+ "material3 components" to "material3",
+ "workmanager" to "work",
+ "windowmanager" to "window",
+)
+
+// Allow a small set of common Maven name components that don't need to appear in the project name.
+private val mavenNameAllowlist = setOf(
+ "extension",
+ "extensions",
+ "for",
+ "integration",
+ "with",
+)
+
+/**
+ * Validates the project's Maven name against Jetpack guidelines.
+ */
+fun Project.validateProjectMavenName(mavenName: String?, groupId: String) {
+ if (mavenName == null) return
+
+ // Tokenize the Maven name into components. This is *very* permissive regarding separators, and
+ // we may want to revisit that policy in the future.
+ val nameComponents = mavenName.lowercase().let { name ->
+ mavenNameMap.entries.fold(name) { newName, entry ->
+ newName.replace(entry.key, entry.value)
+ }
+ }.split(" ", ",", ":", "-").toMutableList() - mavenNameAllowlist
+
+ // Remaining components *must* appear in the Maven coordinate. Shortening long (>10 char) words
+ // to five letters or more is allowed, as is changing the pluralization of words.
+ nameComponents.find { nameComponent ->
+ !name.contains(nameComponent) && !groupId.contains(nameComponent) &&
+ !(nameComponent.length > 10 && name.contains(nameComponent.substring(0, 5))) &&
+ !(nameComponent.endsWith("s") && name.contains(nameComponent.dropLast(1)))
+ }?.let { missingComponent ->
+ throw GradleException(
+ "Invalid Maven name! Found \"$missingComponent\" in Maven name for $displayName, but " +
+ "not project name.\n\nConsider removing \"$missingComponent\" from \"$mavenName\"."
+ )
+ }
+}
+
+private const val GROUP_PREFIX = "androidx."
+
+/**
+ * Validates the project structure against Jetpack guidelines.
+ */
+fun Project.validateProjectStructure(groupId: String) {
+ if (!project.isValidateProjectStructureEnabled()) {
+ return
+ }
+
+ val shortGroupId = if (groupId.startsWith(GROUP_PREFIX)) {
+ groupId.substring(GROUP_PREFIX.length)
+ } else {
+ groupId
+ }
+
+ // Fully-qualified Gradle project name should match the Maven coordinate.
+ val expectName = ":${shortGroupId.replace(".",":")}:${project.name}"
+ val actualName = project.path
+ if (expectName != actualName) {
+ throw GradleException(
+ "Invalid project structure! Expected $expectName as project name, found $actualName"
+ )
+ }
+
+ // Project directory should match the Maven coordinate.
+ val expectDir = shortGroupId.replace(".", File.separator) +
+ "${File.separator}${project.name}"
+ // Canonical projectDir is needed because sometimes, at least in tests, on OSX, supportRoot
+ // starts with /var, and projectDir starts with /private/var (which are the same thing)
+ val canonicalProjectDir = project.projectDir.canonicalFile
+ val actualDir =
+ canonicalProjectDir.toRelativeString(project.getSupportRootFolder().canonicalFile)
+ if (expectDir != actualDir) {
+ throw GradleException(
+ "Invalid project structure! Expected $expectDir as project directory, found $actualDir"
+ )
+ }
+}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/ProjectExt.kt b/buildSrc/private/src/main/kotlin/androidx/build/ProjectExt.kt
index 8dcfd8d..5c6a88c 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/ProjectExt.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/ProjectExt.kt
@@ -15,12 +15,12 @@
*/
package androidx.build
-import org.gradle.api.Project
-import org.gradle.api.Task
-import org.gradle.api.tasks.TaskProvider
import java.util.Collections
import java.util.concurrent.locks.ReentrantLock
import kotlin.concurrent.withLock
+import org.gradle.api.Project
+import org.gradle.api.Task
+import org.gradle.api.tasks.TaskProvider
/**
* Holder class used for lazily registering tasks using the new Lazy task execution API.
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/ProjectParser.kt b/buildSrc/private/src/main/kotlin/androidx/build/ProjectParser.kt
index f12cbd1..9bf82ea 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/ProjectParser.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/ProjectParser.kt
@@ -16,13 +16,12 @@
package androidx.build
+import java.io.File
import java.util.concurrent.ConcurrentHashMap
import org.gradle.api.Project
import org.gradle.api.services.BuildService
import org.gradle.api.services.BuildServiceParameters
-import java.io.File
-
abstract class ProjectParser : BuildService<BuildServiceParameters.None> {
@Transient
val cache: MutableMap<File, ParsedProject> = ConcurrentHashMap()
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/Release.kt b/buildSrc/private/src/main/kotlin/androidx/build/Release.kt
index ea56dcb..d6e9baf 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/Release.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/Release.kt
@@ -17,6 +17,9 @@
import androidx.build.uptodatedness.cacheEvenIfNoOutputs
import com.android.build.gradle.LibraryExtension
+import java.io.File
+import java.io.FileNotFoundException
+import java.util.Locale
import org.gradle.api.Action
import org.gradle.api.DefaultTask
import org.gradle.api.GradleException
@@ -30,9 +33,6 @@
import org.gradle.api.tasks.bundling.Zip
import org.gradle.plugin.devel.GradlePluginDevelopmentExtension
import org.gradle.work.DisableCachingByDefault
-import java.io.File
-import java.io.FileNotFoundException
-import java.util.Locale
/**
* Simple description for an artifact that is released from this project.
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/SourceJarTaskHelper.kt b/buildSrc/private/src/main/kotlin/androidx/build/SourceJarTaskHelper.kt
index 35ea471..45894a5 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/SourceJarTaskHelper.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/SourceJarTaskHelper.kt
@@ -17,9 +17,13 @@
package androidx.build
import androidx.build.dokka.kmpDocs.DokkaAnalysisPlatform
+import androidx.build.dokka.kmpDocs.docsPlatform
import com.android.build.gradle.LibraryExtension
import com.google.gson.GsonBuilder
import java.io.File
+import java.util.Locale
+import org.gradle.api.DefaultTask
+import org.gradle.api.GradleException
import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration
import org.gradle.api.attributes.Bundling
@@ -29,22 +33,18 @@
import org.gradle.api.component.AdhocComponentWithVariants
import org.gradle.api.file.DuplicatesStrategy
import org.gradle.api.plugins.JavaPluginExtension
+import org.gradle.api.tasks.CacheableTask
+import org.gradle.api.tasks.Input
+import org.gradle.api.tasks.OutputFile
+import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.bundling.Jar
import org.gradle.kotlin.dsl.extra
import org.gradle.kotlin.dsl.named
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension
-import java.util.Locale
-import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.MAIN_COMPILATION_NAME
-import androidx.build.dokka.kmpDocs.docsPlatform
-import org.gradle.api.DefaultTask
-import org.gradle.api.GradleException
-import org.gradle.api.tasks.CacheableTask
-import org.gradle.api.tasks.Input
-import org.gradle.api.tasks.OutputFile
-import org.gradle.api.tasks.TaskAction
+import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
/**
* Sets up a source jar task for an Android library project.
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/VerifyDependencyVersionsTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/VerifyDependencyVersionsTask.kt
index 3cb172a..fcbd5cb 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/VerifyDependencyVersionsTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/VerifyDependencyVersionsTask.kt
@@ -24,11 +24,11 @@
import org.gradle.api.artifacts.Dependency
import org.gradle.api.provider.Property
import org.gradle.api.provider.SetProperty
+import org.gradle.api.tasks.CacheableTask
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.TaskProvider
import org.gradle.kotlin.dsl.setProperty
-import org.gradle.api.tasks.CacheableTask
/**
* Task for verifying the androidx dependency-stability-suffix rule
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/VerifyVersionFilesTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/VerifyVersionFilesTask.kt
index 14eacb9..da12c90 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/VerifyVersionFilesTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/VerifyVersionFilesTask.kt
@@ -16,16 +16,16 @@
package androidx.build
-import org.gradle.api.DefaultTask
-import org.gradle.api.tasks.InputDirectory
-import org.gradle.api.tasks.PathSensitive
-import org.gradle.api.tasks.PathSensitivity
-import org.gradle.api.tasks.TaskAction
import java.io.File
import java.io.FileInputStream
import java.util.zip.ZipEntry
import java.util.zip.ZipInputStream
+import org.gradle.api.DefaultTask
import org.gradle.api.tasks.CacheableTask
+import org.gradle.api.tasks.InputDirectory
+import org.gradle.api.tasks.PathSensitive
+import org.gradle.api.tasks.PathSensitivity
+import org.gradle.api.tasks.TaskAction
/**
* Task for verifying version files in Androidx artifacts
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/VersionFileWriterTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/VersionFileWriterTask.kt
index 328350a..ba29911 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/VersionFileWriterTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/VersionFileWriterTask.kt
@@ -17,6 +17,8 @@
package androidx.build
import com.android.build.gradle.LibraryExtension
+import java.io.File
+import java.io.PrintWriter
import org.gradle.api.DefaultTask
import org.gradle.api.Project
import org.gradle.api.file.DirectoryProperty
@@ -25,8 +27,6 @@
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.TaskAction
import org.gradle.work.DisableCachingByDefault
-import java.io.File
-import java.io.PrintWriter
/**
* Task that allows to write a version to a given output file.
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/buildInfo/CreateLibraryBuildInfoFileTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/buildInfo/CreateLibraryBuildInfoFileTask.kt
index d7c4c07..54597b4 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/buildInfo/CreateLibraryBuildInfoFileTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/buildInfo/CreateLibraryBuildInfoFileTask.kt
@@ -258,12 +258,7 @@
* of the build that is released. Thus, we use frameworks/support to get the sha
*/
fun Project.getFrameworksSupportCommitShaAtHead(): String {
- val gitClient = GitClient.create(
- project.getSupportRootFolder(),
- logger,
- GitClient.getChangeInfoPath(project).get(),
- GitClient.getManifestPath(project).get()
- )
+ val gitClient = GitClient.forProject(project)
return gitClient.getHeadSha(getSupportRootFolder())
}
}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/checkapi/ApiLocation.kt b/buildSrc/private/src/main/kotlin/androidx/build/checkapi/ApiLocation.kt
index 0f22c64..535e820 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/checkapi/ApiLocation.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/checkapi/ApiLocation.kt
@@ -16,12 +16,11 @@
package androidx.build.checkapi
-import java.io.File
-
import androidx.build.Version
import androidx.build.version
-import org.gradle.api.Project
+import java.io.File
import java.io.Serializable
+import org.gradle.api.Project
/**
* Contains information about the files used to record a library's API surfaces. This class may
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/checkapi/CheckApi.kt b/buildSrc/private/src/main/kotlin/androidx/build/checkapi/CheckApi.kt
index 9fec2fd..fdec904 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/checkapi/CheckApi.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/checkapi/CheckApi.kt
@@ -19,12 +19,12 @@
import androidx.build.Version
import androidx.build.checkapi.ApiLocation.Companion.isResourceApiFilename
import androidx.build.version
-import org.gradle.api.GradleException
-import org.gradle.api.Project
import java.io.File
import java.nio.file.Files
import java.nio.file.Path
import kotlin.io.path.name
+import org.gradle.api.GradleException
+import org.gradle.api.Project
enum class ApiType {
CLASSAPI,
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt b/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt
index feb0a6f..756da81 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt
@@ -278,7 +278,7 @@
logger.info("using base commit override $baseCommitOverride")
}
val gitClient = GitClient.create(
- rootProjectDir = parameters.rootDir,
+ projectDir = parameters.rootDir,
logger = logger.toLogger(),
changeInfoPath = parameters.changeInfoPath.get(),
manifestPath = parameters.manifestPath.get()
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/BuildPropParser.kt b/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/BuildPropParser.kt
index 5bd14ff1..f851099 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/BuildPropParser.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/BuildPropParser.kt
@@ -16,8 +16,8 @@
package androidx.build.dependencyTracker
-import org.gradle.api.logging.Logger
import java.io.File
+import org.gradle.api.logging.Logger
/**
* Utility class that can parse build.prop files and extract the sha's for frameworks/support.
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/FileLogger.kt b/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/FileLogger.kt
index 6bc5a7c..6bd3a1c 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/FileLogger.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/FileLogger.kt
@@ -16,14 +16,13 @@
package androidx.build.dependencyTracker
+import java.io.File
+import java.io.Serializable
import org.gradle.api.logging.LogLevel
import org.gradle.internal.logging.slf4j.OutputEventListenerBackedLogger
import org.gradle.internal.logging.slf4j.OutputEventListenerBackedLoggerContext
import org.gradle.internal.time.Clock
-import java.io.File
-import java.io.Serializable
-
/**
* Gradle logger that logs to a file
*/
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/ProjectGraph.kt b/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/ProjectGraph.kt
index bdb408c..8472eeb 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/ProjectGraph.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/ProjectGraph.kt
@@ -17,10 +17,9 @@
package androidx.build.dependencyTracker
import androidx.build.getSupportRootFolder
-import org.gradle.api.Project
import java.io.File
-
import java.io.Serializable
+import org.gradle.api.Project
import org.gradle.api.logging.Logger
/**
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/docs/AndroidXDocsImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/docs/AndroidXDocsImplPlugin.kt
index 25452de..21b7fdd 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/docs/AndroidXDocsImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/docs/AndroidXDocsImplPlugin.kt
@@ -18,7 +18,6 @@
import androidx.build.PROJECT_STRUCTURE_METADATA_FILENAME
import androidx.build.SupportConfig
-import androidx.build.multiplatformUsage
import androidx.build.dackka.DackkaTask
import androidx.build.dackka.GenerateMetadataTask
import androidx.build.dependencies.KOTLIN_VERSION
@@ -29,6 +28,7 @@
import androidx.build.getDistributionDirectory
import androidx.build.getKeystore
import androidx.build.getLibraryByName
+import androidx.build.multiplatformUsage
import com.android.build.api.attributes.BuildTypeAttr
import com.android.build.gradle.LibraryExtension
import com.android.build.gradle.LibraryPlugin
@@ -61,10 +61,10 @@
import org.gradle.api.provider.Provider
import org.gradle.api.tasks.CacheableTask
import org.gradle.api.tasks.Classpath
-import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.InputFiles
-import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.Internal
+import org.gradle.api.tasks.OutputDirectory
+import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.PathSensitive
import org.gradle.api.tasks.PathSensitivity
import org.gradle.api.tasks.Sync
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/dokka/kmpDocs/DokkaCombinedDocsTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/dokka/kmpDocs/DokkaCombinedDocsTask.kt
index 471f537..bfec803 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/dokka/kmpDocs/DokkaCombinedDocsTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/dokka/kmpDocs/DokkaCombinedDocsTask.kt
@@ -204,12 +204,7 @@
it.additionalDocumentation.set(
project.files("homepage.md")
)
- val gitClient = GitClient.create(
- project.getSupportRootFolder(),
- project.logger,
- GitClient.getChangeInfoPath(project).get(),
- GitClient.getManifestPath(project).get()
- )
+ val gitClient = GitClient.forProject(project)
it.replacementUrl.set(
DokkaUtils.createCsAndroidUrl(
gitClient.getHeadSha(project.getSupportRootFolder())
@@ -253,4 +248,4 @@
}
}
}
-}
\ No newline at end of file
+}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/gitclient/GitClient.kt b/buildSrc/private/src/main/kotlin/androidx/build/gitclient/GitClient.kt
index 4cdaa21..25c6a81 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/gitclient/GitClient.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/gitclient/GitClient.kt
@@ -19,10 +19,11 @@
import androidx.build.releasenotes.getBuganizerLink
import androidx.build.releasenotes.getChangeIdAOSPLink
import java.io.File
+import java.util.concurrent.ConcurrentHashMap
import org.gradle.api.GradleException
import org.gradle.api.Project
-import org.gradle.api.provider.Provider
import org.gradle.api.logging.Logger
+import org.gradle.api.provider.Provider
interface GitClient {
fun findChangedFilesSince(
@@ -83,8 +84,16 @@
fun getManifestPath(project: Project): Provider<String> {
return project.providers.environmentVariable("MANIFEST").orElse("")
}
+ fun forProject(project: Project): GitClient {
+ return create(
+ project.projectDir,
+ project.logger,
+ GitClient.getChangeInfoPath(project).get(),
+ GitClient.getManifestPath(project).get()
+ )
+ }
fun create(
- rootProjectDir: File,
+ projectDir: File,
logger: Logger,
changeInfoPath: String,
manifestPath: String
@@ -107,8 +116,41 @@
"manifest $manifestPath")
return ChangeInfoGitClient(changeInfoText, manifestText)
}
+ val gitRoot = findGitDirInParentFilepath(projectDir)
+ check(gitRoot != null) {
+ "Could not find .git dir for $projectDir"
+ }
logger.info("UsingGitRunnerGitClient")
- return GitRunnerGitClient(rootProjectDir, logger)
+ return GitRunnerGitClient(gitRoot, logger)
+ }
+ }
+}
+
+data class MultiGitClient(
+ val logger: Logger,
+ val changeInfoPath: String,
+ val manifestPath: String
+) {
+ // Map from the root of the git repository to a GitClient for that repository
+ // In AndroidX this directory could be frameworks/support, external/noto-fonts, or others
+ @Transient // We don't want Gradle to persist GitClient in the configuration cache
+ val cache: MutableMap<File, GitClient> = ConcurrentHashMap()
+
+ fun getGitClient(projectDir: File): GitClient {
+ return cache.getOrPut(
+ key = projectDir
+ ) {
+ GitClient.create(projectDir, logger, changeInfoPath, manifestPath)
+ }
+ }
+
+ companion object {
+ fun create(project: Project): MultiGitClient {
+ return MultiGitClient(
+ project.logger,
+ GitClient.getChangeInfoPath(project).get(),
+ GitClient.getManifestPath(project).get()
+ )
}
}
}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/gitclient/GitRunnerGitClient.kt b/buildSrc/private/src/main/kotlin/androidx/build/gitclient/GitRunnerGitClient.kt
index 2be38e2..342d2e5 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/gitclient/GitRunnerGitClient.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/gitclient/GitRunnerGitClient.kt
@@ -16,9 +16,9 @@
package androidx.build.gitclient
-import org.gradle.api.logging.Logger
import java.io.File
import java.util.concurrent.TimeUnit
+import org.gradle.api.logging.Logger
/**
* A simple git client that uses system process commands to communicate with the git setup in the
@@ -66,17 +66,6 @@
?.firstOrNull()
}
- private fun findGitDirInParentFilepath(filepath: File): File? {
- var curDirectory: File = filepath
- while (curDirectory.path != "/") {
- if (File("$curDirectory/.git").exists()) {
- return curDirectory
- }
- curDirectory = curDirectory.parentFile
- }
- return null
- }
-
private fun parseCommitLogString(
commitLogString: String,
commitStartDelimiter: String,
@@ -214,3 +203,17 @@
const val GIT_LOG_CMD_PREFIX = "git log --name-only"
}
}
+
+/**
+ * Finds the git directory containing the given File by checking parent directories
+ */
+internal fun findGitDirInParentFilepath(filepath: File): File? {
+ var curDirectory: File = filepath
+ while (curDirectory.path != "/") {
+ if (File("$curDirectory/.git").exists()) {
+ return curDirectory
+ }
+ curDirectory = curDirectory.parentFile
+ }
+ return null
+}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/libabigail/CheckNativeApiCompatibilityTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/libabigail/CheckNativeApiCompatibilityTask.kt
index c176f11..15b77b7 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/libabigail/CheckNativeApiCompatibilityTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/libabigail/CheckNativeApiCompatibilityTask.kt
@@ -18,6 +18,9 @@
import androidx.build.OperatingSystem
import androidx.build.getOperatingSystem
+import java.io.ByteArrayOutputStream
+import java.io.File
+import javax.inject.Inject
import org.gradle.api.DefaultTask
import org.gradle.api.provider.ListProperty
import org.gradle.api.provider.Property
@@ -34,9 +37,6 @@
import org.gradle.workers.WorkParameters
import org.gradle.workers.WorkerExecutionException
import org.gradle.workers.WorkerExecutor
-import java.io.ByteArrayOutputStream
-import java.io.File
-import javax.inject.Inject
/**
* Task which depends on [GenerateNativeApiTask] and compares the current native API from the build
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/libabigail/CheckNativeApiEquivalenceTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/libabigail/CheckNativeApiEquivalenceTask.kt
index 6ca2b8d..d6e5964 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/libabigail/CheckNativeApiEquivalenceTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/libabigail/CheckNativeApiEquivalenceTask.kt
@@ -17,6 +17,7 @@
package androidx.build.libabigail
import androidx.build.metalava.checkEqual
+import java.io.File
import org.gradle.api.DefaultTask
import org.gradle.api.provider.ListProperty
import org.gradle.api.provider.Property
@@ -27,7 +28,6 @@
import org.gradle.api.tasks.PathSensitivity
import org.gradle.api.tasks.TaskAction
import org.gradle.work.DisableCachingByDefault
-import java.io.File
/**
* Checks that the native API files in the build folder are exactly the same as the checked in
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/libabigail/GenerateNativeApiTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/libabigail/GenerateNativeApiTask.kt
index 41194e3..ad4c23f 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/libabigail/GenerateNativeApiTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/libabigail/GenerateNativeApiTask.kt
@@ -18,6 +18,8 @@
import androidx.build.OperatingSystem
import androidx.build.getOperatingSystem
+import java.io.File
+import javax.inject.Inject
import org.gradle.api.DefaultTask
import org.gradle.api.GradleException
import org.gradle.api.provider.ListProperty
@@ -33,8 +35,6 @@
import org.gradle.workers.WorkAction
import org.gradle.workers.WorkParameters
import org.gradle.workers.WorkerExecutor
-import java.io.File
-import javax.inject.Inject
private const val ARCH_PREFIX = "android."
internal val architectures = listOf("arm64-v8a", "armeabi-v7a", "x86", "x86_64")
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/libabigail/NativeApiTasks.kt b/buildSrc/private/src/main/kotlin/androidx/build/libabigail/NativeApiTasks.kt
index 43f03ba..9101dc7 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/libabigail/NativeApiTasks.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/libabigail/NativeApiTasks.kt
@@ -21,8 +21,8 @@
import androidx.build.checkapi.getRequiredCompatibilityApiLocation
import androidx.build.uptodatedness.cacheEvenIfNoOutputs
import com.android.build.gradle.LibraryExtension
-import org.gradle.api.Project
import java.io.File
+import org.gradle.api.Project
/**
* Adds native API generation / updating / checking tasks to a project.
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/libabigail/UpdateNativeApi.kt b/buildSrc/private/src/main/kotlin/androidx/build/libabigail/UpdateNativeApi.kt
index 4e46a2d..b430e48 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/libabigail/UpdateNativeApi.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/libabigail/UpdateNativeApi.kt
@@ -18,6 +18,7 @@
import androidx.build.OperatingSystem
import androidx.build.getOperatingSystem
+import java.io.File
import org.gradle.api.DefaultTask
import org.gradle.api.provider.ListProperty
import org.gradle.api.provider.Property
@@ -28,7 +29,6 @@
import org.gradle.api.tasks.PathSensitivity
import org.gradle.api.tasks.TaskAction
import org.gradle.work.DisableCachingByDefault
-import java.io.File
/**
* Task which depends on `[GenerateNativeApiTask] and takes the generated native API files from the
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/metalava/CheckApiCompatibilityTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/metalava/CheckApiCompatibilityTask.kt
index c376ead..0b4c852 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/metalava/CheckApiCompatibilityTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/metalava/CheckApiCompatibilityTask.kt
@@ -20,6 +20,8 @@
import androidx.build.checkapi.ApiLocation
import androidx.build.logging.TERMINAL_RED
import androidx.build.logging.TERMINAL_RESET
+import java.io.File
+import javax.inject.Inject
import org.gradle.api.provider.Property
import org.gradle.api.tasks.CacheableTask
import org.gradle.api.tasks.InputFiles
@@ -28,8 +30,6 @@
import org.gradle.api.tasks.PathSensitivity
import org.gradle.api.tasks.TaskAction
import org.gradle.workers.WorkerExecutor
-import java.io.File
-import javax.inject.Inject
/**
* This task validates that the API described in one signature txt file is compatible with the API
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/metalava/CheckApiEquivalenceTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/metalava/CheckApiEquivalenceTask.kt
index d827a8d..b6e287d 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/metalava/CheckApiEquivalenceTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/metalava/CheckApiEquivalenceTask.kt
@@ -17,6 +17,8 @@
package androidx.build.metalava
import androidx.build.checkapi.ApiLocation
+import java.io.File
+import java.util.concurrent.TimeUnit
import org.apache.commons.io.FileUtils
import org.gradle.api.DefaultTask
import org.gradle.api.GradleException
@@ -28,8 +30,6 @@
import org.gradle.api.tasks.PathSensitivity
import org.gradle.api.tasks.TaskAction
import org.gradle.work.DisableCachingByDefault
-import java.io.File
-import java.util.concurrent.TimeUnit
/** Compares two API txt files against each other. */
@DisableCachingByDefault(because = "Doesn't benefit from caching")
@@ -46,6 +46,9 @@
@get:Input
abstract val checkedInApis: ListProperty<ApiLocation>
+ @get:Input
+ abstract val optedInToSuppressCompatibilityMigration: Property<Boolean>
+
@InputFiles @PathSensitive(PathSensitivity.RELATIVE)
fun getTaskInputs(): List<File> {
val checkedInApiLocations = checkedInApis.get()
@@ -75,7 +78,9 @@
for (checkedInApi in checkedInApis.get()) {
checkEqual(checkedInApi.publicApiFile, builtApiLocation.publicApiFile)
checkEqual(checkedInApi.removedApiFile, builtApiLocation.removedApiFile)
- checkEqual(checkedInApi.experimentalApiFile, builtApiLocation.experimentalApiFile)
+ if (!optedInToSuppressCompatibilityMigration.get()) {
+ checkEqual(checkedInApi.experimentalApiFile, builtApiLocation.experimentalApiFile)
+ }
checkEqual(checkedInApi.restrictedApiFile, builtApiLocation.restrictedApiFile)
}
}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/metalava/GenerateApiStubClassesTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/metalava/GenerateApiStubClassesTask.kt
index 659d191..0c68fc91 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/metalava/GenerateApiStubClassesTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/metalava/GenerateApiStubClassesTask.kt
@@ -16,13 +16,13 @@
package androidx.build.metalava
+import java.io.File
+import javax.inject.Inject
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.tasks.CacheableTask
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.TaskAction
import org.gradle.workers.WorkerExecutor
-import java.io.File
-import javax.inject.Inject
@CacheableTask
abstract class GenerateApiStubClassesTask @Inject constructor(
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/metalava/GenerateApiTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/metalava/GenerateApiTask.kt
index f087b00..031cd49 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/metalava/GenerateApiTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/metalava/GenerateApiTask.kt
@@ -19,6 +19,8 @@
import androidx.build.checkapi.ApiBaselinesLocation
import androidx.build.checkapi.ApiLocation
import androidx.build.java.JavaCompileInputs
+import java.io.File
+import javax.inject.Inject
import org.gradle.api.provider.Property
import org.gradle.api.tasks.CacheableTask
import org.gradle.api.tasks.Input
@@ -30,8 +32,6 @@
import org.gradle.api.tasks.PathSensitivity
import org.gradle.api.tasks.TaskAction
import org.gradle.workers.WorkerExecutor
-import java.io.File
-import javax.inject.Inject
/** Generate an API signature text file from a set of source files. */
@CacheableTask
@@ -62,7 +62,7 @@
@OutputFiles
fun getTaskOutputs(): List<File> {
val prop = apiLocation.get()
- return listOfNotNull(
+ return listOf(
prop.publicApiFile,
prop.removedApiFile,
prop.experimentalApiFile,
@@ -88,6 +88,7 @@
generateRestrictToLibraryGroupAPIs,
k2UastEnabled.get(),
workerExecutor,
+ optedInToSuppressCompatibilityMigration.get(),
manifestPath.orNull?.asFile?.absolutePath
)
}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/metalava/MetalavaRunner.kt b/buildSrc/private/src/main/kotlin/androidx/build/metalava/MetalavaRunner.kt
index 8832acb..b36edcc 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/metalava/MetalavaRunner.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/metalava/MetalavaRunner.kt
@@ -40,9 +40,10 @@
metalavaClasspath: FileCollection,
args: List<String>,
k2UastEnabled: Boolean,
- workerExecutor: WorkerExecutor
+ workerExecutor: WorkerExecutor,
+ isOptedInToSuppressCompatibilityMigration: Boolean,
) {
- val allArgs = listOf(
+ val allArgs = mutableListOf(
"--no-banner",
"--hide",
"HiddenSuperclass", // We allow having a hidden parent class
@@ -51,7 +52,11 @@
"UnresolvedImport",
"--delete-empty-removed-signatures"
- ) + args
+ )
+ allArgs += args
+ if (isOptedInToSuppressCompatibilityMigration) {
+ allArgs += SUPPRESS_COMPATIBILITY_ARGS
+ }
val workQueue = workerExecutor.processIsolation()
workQueue.submit(MetalavaWorkAction::class.java) { parameters ->
parameters.args.set(allArgs)
@@ -120,6 +125,12 @@
"--hide-meta-annotation", "kotlin.RequiresOptIn",
)
+// Metalava arguments to suppress compatibility checks for experimental API surfaces.
+val SUPPRESS_COMPATIBILITY_ARGS: List<String> = listOf(
+ "--suppress-compatibility-meta-annotation", "androidx.annotation.RequiresOptIn",
+ "--suppress-compatibility-meta-annotation", "kotlin.RequiresOptIn",
+)
+
fun getApiLintArgs(targetsJavaConsumers: Boolean): List<String> {
val args = mutableListOf(
"--api-lint",
@@ -208,30 +219,48 @@
includeRestrictToLibraryGroupApis: Boolean,
k2UastEnabled: Boolean,
workerExecutor: WorkerExecutor,
- pathToManifest: String? = null
+ isOptedInToSuppressCompatibilityMigration: Boolean,
+ pathToManifest: String? = null,
) {
- // API lint runs on the experimental pass, which also includes public API. This means API lint
- // can safely be skipped on the public pass.
- generateApi(
- metalavaClasspath, files.bootClasspath, files.dependencyClasspath, files.sourcePaths.files,
- apiLocation, GenerateApiMode.PublicApi, ApiLintMode.Skip, k2UastEnabled, workerExecutor,
- pathToManifest
- )
- generateApi(
- metalavaClasspath, files.bootClasspath, files.dependencyClasspath, files.sourcePaths.files,
- apiLocation, GenerateApiMode.ExperimentalApi, apiLintMode, k2UastEnabled, workerExecutor,
- pathToManifest
- )
+ val generateApiConfigs: MutableList<Pair<GenerateApiMode, ApiLintMode>> = mutableListOf()
- val restrictedAPIMode = if (includeRestrictToLibraryGroupApis) {
- GenerateApiMode.AllRestrictedApis
+ if (isOptedInToSuppressCompatibilityMigration) {
+ generateApiConfigs += GenerateApiMode.PublicApi to apiLintMode
+
+ // This is a bit of a hack, but the easiest way to clear out legacy experimental files is
+ // to delete them here. Once the migration is over, we can remove all of the references.
+ if (apiLocation.experimentalApiFile.exists()) {
+ apiLocation.experimentalApiFile.delete()
+ }
} else {
- GenerateApiMode.RestrictToLibraryGroupPrefixApis
+ // API lint runs on the experimental pass, which also includes public API. This means API
+ // lint can safely be skipped on the public pass.
+ generateApiConfigs += GenerateApiMode.PublicApi to ApiLintMode.Skip
+ generateApiConfigs += GenerateApiMode.ExperimentalApi to apiLintMode
}
- generateApi(
- metalavaClasspath, files.bootClasspath, files.dependencyClasspath, files.sourcePaths.files,
- apiLocation, restrictedAPIMode, ApiLintMode.Skip, k2UastEnabled, workerExecutor
- )
+
+ @Suppress("LiftReturnOrAssignment")
+ if (includeRestrictToLibraryGroupApis) {
+ generateApiConfigs += GenerateApiMode.AllRestrictedApis to ApiLintMode.Skip
+ } else {
+ generateApiConfigs += GenerateApiMode.RestrictToLibraryGroupPrefixApis to ApiLintMode.Skip
+ }
+
+ generateApiConfigs.forEach { (generateApiMode, apiLintMode) ->
+ generateApi(
+ metalavaClasspath,
+ files.bootClasspath,
+ files.dependencyClasspath,
+ files.sourcePaths.files,
+ apiLocation,
+ generateApiMode,
+ apiLintMode,
+ k2UastEnabled,
+ workerExecutor,
+ isOptedInToSuppressCompatibilityMigration,
+ pathToManifest
+ )
+ }
}
// Gets arguments for generating the specified api file
@@ -245,13 +274,15 @@
apiLintMode: ApiLintMode,
k2UastEnabled: Boolean,
workerExecutor: WorkerExecutor,
+ isOptedInToSuppressCompatibilityMigration: Boolean,
pathToManifest: String? = null
) {
val args = getGenerateApiArgs(
- bootClasspath, dependencyClasspath, sourcePaths, outputLocation,
- generateApiMode, apiLintMode, pathToManifest
+ bootClasspath, dependencyClasspath, sourcePaths, outputLocation, generateApiMode,
+ apiLintMode, isOptedInToSuppressCompatibilityMigration, pathToManifest
)
- runMetalavaWithArgs(metalavaClasspath, args, k2UastEnabled, workerExecutor)
+ runMetalavaWithArgs(metalavaClasspath, args, k2UastEnabled, workerExecutor,
+ isOptedInToSuppressCompatibilityMigration)
}
// Generates the specified api file
@@ -262,6 +293,7 @@
outputLocation: ApiLocation?,
generateApiMode: GenerateApiMode,
apiLintMode: ApiLintMode,
+ isOptedInToSuppressCompatibilityMigration: Boolean,
pathToManifest: String? = null
): List<String> {
// generate public API txt
@@ -299,7 +331,9 @@
when (generateApiMode) {
is GenerateApiMode.PublicApi -> {
- args += HIDE_EXPERIMENTAL_ARGS
+ if (!isOptedInToSuppressCompatibilityMigration) {
+ args += HIDE_EXPERIMENTAL_ARGS
+ }
args += listOf(
"--hide-annotation", "androidx.annotation.RestrictTo"
)
@@ -335,7 +369,9 @@
"LIBRARY_GROUP)"
)
}
- args += HIDE_EXPERIMENTAL_ARGS
+ if (!isOptedInToSuppressCompatibilityMigration) {
+ args += HIDE_EXPERIMENTAL_ARGS
+ }
}
is GenerateApiMode.ExperimentalApi -> {
args += listOf(
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/metalava/MetalavaTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/metalava/MetalavaTask.kt
index 3b87d7e..a4b1af1 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/metalava/MetalavaTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/metalava/MetalavaTask.kt
@@ -16,12 +16,15 @@
package androidx.build.metalava
+import javax.inject.Inject
import org.gradle.api.DefaultTask
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.FileCollection
import org.gradle.api.file.RegularFileProperty
+import org.gradle.api.provider.Property
import org.gradle.api.tasks.CacheableTask
import org.gradle.api.tasks.Classpath
+import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputFile
import org.gradle.api.tasks.InputFiles
import org.gradle.api.tasks.Internal
@@ -29,9 +32,6 @@
import org.gradle.api.tasks.PathSensitive
import org.gradle.api.tasks.PathSensitivity
import org.gradle.workers.WorkerExecutor
-import javax.inject.Inject
-import org.gradle.api.provider.Property
-import org.gradle.api.tasks.Input
/** Base class for invoking Metalava. */
@CacheableTask
@@ -61,7 +61,11 @@
@get:Input
abstract val k2UastEnabled: Property<Boolean>
+ @get:Input
+ abstract val optedInToSuppressCompatibilityMigration: Property<Boolean>
+
fun runWithArgs(args: List<String>) {
- runMetalavaWithArgs(metalavaClasspath, args, k2UastEnabled.get(), workerExecutor)
+ runMetalavaWithArgs(metalavaClasspath, args, k2UastEnabled.get(), workerExecutor,
+ optedInToSuppressCompatibilityMigration.get())
}
}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/metalava/MetalavaTasks.kt b/buildSrc/private/src/main/kotlin/androidx/build/metalava/MetalavaTasks.kt
index c9a77af..63e1edb 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/metalava/MetalavaTasks.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/metalava/MetalavaTasks.kt
@@ -17,12 +17,16 @@
package androidx.build.metalava
import androidx.build.AndroidXExtension
+import androidx.build.addFilterableTasks
import androidx.build.addToBuildOnServer
import androidx.build.addToCheckTask
import androidx.build.checkapi.ApiBaselinesLocation
import androidx.build.checkapi.ApiLocation
import androidx.build.checkapi.getRequiredCompatibilityApiLocation
+import androidx.build.getSuppressCompatibilityOptInPathPrefixes
+import androidx.build.getSuppressCompatibilityOptOutPathPrefixes
import androidx.build.java.JavaCompileInputs
+import androidx.build.relativePathForFiltering
import androidx.build.uptodatedness.cacheEvenIfNoOutputs
import com.android.build.gradle.tasks.ProcessLibraryManifest
import org.gradle.api.Project
@@ -56,6 +60,9 @@
task.baselines.set(baselinesApiLocation)
task.targetsJavaConsumers = extension.targetsJavaConsumers
task.k2UastEnabled.set(extension.metalavaK2UastEnabled)
+ task.optedInToSuppressCompatibilityMigration.set(
+ project.isOptedInToSuppressCompatibilityMigration()
+ )
processManifest?.let {
task.manifestPath.set(processManifest.manifestOutputFile)
}
@@ -82,6 +89,9 @@
task.dependencyClasspath = javaCompileInputs.dependencyClasspath
task.bootClasspath = javaCompileInputs.bootClasspath
task.k2UastEnabled.set(extension.metalavaK2UastEnabled)
+ task.optedInToSuppressCompatibilityMigration.set(
+ project.isOptedInToSuppressCompatibilityMigration()
+ )
task.cacheEvenIfNoOutputs()
task.dependsOn(generateApi)
}
@@ -97,11 +107,14 @@
task.dependencyClasspath = javaCompileInputs.dependencyClasspath
task.bootClasspath = javaCompileInputs.bootClasspath
task.k2UastEnabled.set(extension.metalavaK2UastEnabled)
+ task.optedInToSuppressCompatibilityMigration.set(
+ project.isOptedInToSuppressCompatibilityMigration()
+ )
task.dependsOn(generateApi)
}
}
- project.tasks.register(
+ val updateApiLintBaseline = project.tasks.register(
"updateApiLintBaseline",
UpdateApiLintBaselineTask::class.java
) { task ->
@@ -109,6 +122,9 @@
task.baselines.set(baselinesApiLocation)
task.targetsJavaConsumers.set(extension.targetsJavaConsumers)
task.k2UastEnabled.set(extension.metalavaK2UastEnabled)
+ task.optedInToSuppressCompatibilityMigration.set(
+ project.isOptedInToSuppressCompatibilityMigration()
+ )
processManifest?.let {
task.manifestPath.set(processManifest.manifestOutputFile)
}
@@ -126,6 +142,9 @@
task.builtApi.set(generateApi.flatMap { it.apiLocation })
task.cacheEvenIfNoOutputs()
task.checkedInApis.set(outputApiLocations)
+ task.optedInToSuppressCompatibilityMigration.set(
+ project.isOptedInToSuppressCompatibilityMigration()
+ )
task.dependsOn(generateApi)
checkApiRelease?.let {
task.dependsOn(checkApiRelease)
@@ -140,6 +159,9 @@
task.description = "Regenerates historic API .txt files using the " +
"corresponding prebuilt and the latest Metalava"
task.generateRestrictToLibraryGroupAPIs = generateRestrictToLibraryGroupAPIs
+ task.optedInToSuppressCompatibilityMigration.set(
+ project.isOptedInToSuppressCompatibilityMigration()
+ )
}
// ignoreApiChanges depends on the output of this task for the "last released" API
@@ -168,7 +190,7 @@
// Make sure it always runs *after* the updateApi task.
ignoreApiChanges?.configure { it.mustRunAfter(updateApi) }
- project.tasks.register("regenerateApis") { task ->
+ val regenerateApis = project.tasks.register("regenerateApis") { task ->
task.group = "API"
task.description = "Regenerates current and historic API .txt files using the " +
"corresponding prebuilt and the latest Metalava, then updates API ignore files"
@@ -179,6 +201,14 @@
project.addToCheckTask(checkApi)
project.addToBuildOnServer(checkApi)
+ project.addFilterableTasks(
+ ignoreApiChanges,
+ updateApiLintBaseline,
+ checkApi,
+ regenerateOldApis,
+ updateApi,
+ regenerateApis,
+ )
}
private fun applyInputs(inputs: JavaCompileInputs, task: MetalavaTask) {
@@ -188,3 +218,15 @@
task.bootClasspath = inputs.bootClasspath
}
}
+
+/**
+ * Returns whether the project has been opted-in to the Suppress Compatibility migration.
+ */
+internal fun Project.isOptedInToSuppressCompatibilityMigration(): Boolean {
+ val dir = relativePathForFiltering()
+ return getSuppressCompatibilityOptOutPathPrefixes().none { pathPrefix ->
+ dir.startsWith(pathPrefix)
+ } && getSuppressCompatibilityOptInPathPrefixes().any { pathPrefix ->
+ dir.startsWith(pathPrefix)
+ }
+}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/metalava/RegenerateOldApisTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/metalava/RegenerateOldApisTask.kt
index 139541e..07ee0ec 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/metalava/RegenerateOldApisTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/metalava/RegenerateOldApisTask.kt
@@ -23,17 +23,18 @@
import androidx.build.getAndroidJar
import androidx.build.getCheckoutRoot
import androidx.build.java.JavaCompileInputs
+import java.io.File
+import javax.inject.Inject
import org.gradle.api.DefaultTask
import org.gradle.api.Project
import org.gradle.api.file.FileCollection
import org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration
+import org.gradle.api.provider.Property
import org.gradle.api.tasks.CacheableTask
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.util.PatternFilterable
import org.gradle.workers.WorkerExecutor
-import java.io.File
-import javax.inject.Inject
/** Generate API signature text files using previously built .jar/.aar artifacts. */
@CacheableTask
@@ -44,6 +45,9 @@
@Input
var generateRestrictToLibraryGroupAPIs = true
+ @get:Input
+ abstract val optedInToSuppressCompatibilityMigration: Property<Boolean>
+
@TaskAction
fun exec() {
val groupId = project.group.toString()
@@ -60,7 +64,8 @@
// If two artifacts correspond to the same API file, don't regenerate the
// same api file again
if (apiFileVersion != prevApiFileVersion) {
- regenerate(project.rootProject, groupId, artifactId, artifactVersion)
+ regenerate(project.rootProject, groupId, artifactId, artifactVersion,
+ optedInToSuppressCompatibilityMigration.get())
prevApiFileVersion = apiFileVersion
}
}
@@ -80,7 +85,8 @@
runnerProject: Project,
groupId: String,
artifactId: String,
- version: Version
+ version: Version,
+ isOptedInToSuppressCompatibilityMigration: Boolean,
) {
val mavenId = "$groupId:$artifactId:$version"
val inputs: JavaCompileInputs?
@@ -96,7 +102,8 @@
project.logger.lifecycle("Regenerating $mavenId")
generateApi(
project.getMetalavaClasspath(), inputs, outputApiLocation, ApiLintMode.Skip,
- generateRestrictToLibraryGroupAPIs, false, workerExecutor
+ generateRestrictToLibraryGroupAPIs, false, workerExecutor,
+ isOptedInToSuppressCompatibilityMigration
)
}
}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/metalava/UpdateBaselineTasks.kt b/buildSrc/private/src/main/kotlin/androidx/build/metalava/UpdateBaselineTasks.kt
index 43dbc6e..d0766e1 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/metalava/UpdateBaselineTasks.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/metalava/UpdateBaselineTasks.kt
@@ -18,6 +18,8 @@
import androidx.build.checkapi.ApiBaselinesLocation
import androidx.build.checkapi.ApiLocation
+import java.io.File
+import javax.inject.Inject
import org.gradle.api.file.FileCollection
import org.gradle.api.provider.Property
import org.gradle.api.tasks.CacheableTask
@@ -29,8 +31,6 @@
import org.gradle.api.tasks.PathSensitivity
import org.gradle.api.tasks.TaskAction
import org.gradle.workers.WorkerExecutor
-import java.io.File
-import javax.inject.Inject
@CacheableTask
abstract class UpdateApiLintBaselineTask @Inject constructor(
@@ -58,10 +58,17 @@
fun updateBaseline() {
check(bootClasspath.files.isNotEmpty()) { "Android boot classpath not set." }
val baselineFile = baselines.get().apiLintFile
+ val generateApiMode = if (optedInToSuppressCompatibilityMigration.get()) {
+ GenerateApiMode.PublicApi
+ } else {
+ GenerateApiMode.ExperimentalApi
+ }
val checkArgs = getGenerateApiArgs(
bootClasspath, dependencyClasspath,
- sourcePaths.files.filter { it.exists() }, null, GenerateApiMode.ExperimentalApi,
+ sourcePaths.files.filter { it.exists() }, null,
+ generateApiMode,
ApiLintMode.CheckBaseline(baselineFile, targetsJavaConsumers.get()),
+ optedInToSuppressCompatibilityMigration.get(),
manifestPath.orNull?.asFile?.absolutePath
)
val args = checkArgs + getCommonBaselineUpdateArgs(baselineFile)
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/paparazzi/AndroidXPaparazziImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/paparazzi/AndroidXPaparazziImplPlugin.kt
index 8137fdd..892e691 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/paparazzi/AndroidXPaparazziImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/paparazzi/AndroidXPaparazziImplPlugin.kt
@@ -35,8 +35,8 @@
import org.gradle.api.tasks.PathSensitivity
import org.gradle.api.tasks.testing.Test
import org.gradle.kotlin.dsl.get
-import org.gradle.kotlin.dsl.the
import org.gradle.kotlin.dsl.register
+import org.gradle.kotlin.dsl.the
import org.gradle.kotlin.dsl.withType
import org.gradle.process.JavaForkOptions
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/resources/CheckResourceApiReleaseTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/resources/CheckResourceApiReleaseTask.kt
index 8091f1a..df32518 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/resources/CheckResourceApiReleaseTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/resources/CheckResourceApiReleaseTask.kt
@@ -17,6 +17,7 @@
package androidx.build.resources
import androidx.build.checkapi.ApiLocation
+import java.io.File
import org.gradle.api.DefaultTask
import org.gradle.api.GradleException
import org.gradle.api.provider.Property
@@ -27,7 +28,6 @@
import org.gradle.api.tasks.PathSensitive
import org.gradle.api.tasks.PathSensitivity
import org.gradle.api.tasks.TaskAction
-import java.io.File
/**
* Task for verifying changes in the public Android resource surface, e.g. `public.xml`.
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/resources/CheckResourceApiTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/resources/CheckResourceApiTask.kt
index 7320d3b..2b2a1b0 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/resources/CheckResourceApiTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/resources/CheckResourceApiTask.kt
@@ -17,6 +17,7 @@
package androidx.build.resources
import androidx.build.checkapi.ApiLocation
+import java.io.File
import org.gradle.api.DefaultTask
import org.gradle.api.provider.ListProperty
import org.gradle.api.provider.Property
@@ -24,10 +25,9 @@
import org.gradle.api.tasks.InputFile
import org.gradle.api.tasks.InputFiles
import org.gradle.api.tasks.Internal
-import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.PathSensitive
import org.gradle.api.tasks.PathSensitivity
-import java.io.File
+import org.gradle.api.tasks.TaskAction
/**
* Task for detecting changes in the public Android resource surface, e.g. `public.xml`.
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/resources/GenerateResourceApiTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/resources/GenerateResourceApiTask.kt
index dffa723..a94bc4c 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/resources/GenerateResourceApiTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/resources/GenerateResourceApiTask.kt
@@ -17,6 +17,7 @@
package androidx.build.resources
import androidx.build.checkapi.ApiLocation
+import java.io.File
import org.gradle.api.DefaultTask
import org.gradle.api.GradleException
import org.gradle.api.file.RegularFileProperty
@@ -28,7 +29,6 @@
import org.gradle.api.tasks.PathSensitive
import org.gradle.api.tasks.PathSensitivity
import org.gradle.api.tasks.TaskAction
-import java.io.File
/**
* Generates a resource API file for consumption by other API tasks.
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/resources/PublicResourcesStubHelper.kt b/buildSrc/private/src/main/kotlin/androidx/build/resources/PublicResourcesStubHelper.kt
index 528c6bb..baae1c5 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/resources/PublicResourcesStubHelper.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/resources/PublicResourcesStubHelper.kt
@@ -18,9 +18,9 @@
import androidx.build.getSupportRootFolder
import com.android.build.gradle.LibraryExtension
+import java.io.File
import org.gradle.api.Project
import org.gradle.api.tasks.Copy
-import java.io.File
fun Project.configurePublicResourcesStub(extension: LibraryExtension) {
val targetResFolder = File(project.buildDir, "generated/res/public-stub")
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/resources/ResourceTasks.kt b/buildSrc/private/src/main/kotlin/androidx/build/resources/ResourceTasks.kt
index 3e7187d..e889831 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/resources/ResourceTasks.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/resources/ResourceTasks.kt
@@ -23,8 +23,8 @@
import androidx.build.checkapi.getRequiredCompatibilityApiLocation
import androidx.build.metalava.UpdateApiTask
import androidx.build.uptodatedness.cacheEvenIfNoOutputs
-import org.gradle.api.Project
import java.util.Locale
+import org.gradle.api.Project
object ResourceTasks {
private const val GENERATE_RESOURCE_API_TASK = "generateResourceApi"
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/resources/UpdateResourceApiTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/resources/UpdateResourceApiTask.kt
index fa66eef..bec59cc0 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/resources/UpdateResourceApiTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/resources/UpdateResourceApiTask.kt
@@ -17,6 +17,7 @@
package androidx.build.resources
import androidx.build.checkapi.ApiLocation
+import java.io.File
import org.gradle.api.DefaultTask
import org.gradle.api.provider.ListProperty
import org.gradle.api.provider.Property
@@ -28,7 +29,6 @@
import org.gradle.api.tasks.PathSensitive
import org.gradle.api.tasks.PathSensitivity
import org.gradle.api.tasks.TaskAction
-import java.io.File
/**
* Task for updating the public Android resource surface, e.g. `public.xml`.
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/sbom/Sbom.kt b/buildSrc/private/src/main/kotlin/androidx/build/sbom/Sbom.kt
index 6849ca4..8889212 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/sbom/Sbom.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/sbom/Sbom.kt
@@ -37,7 +37,11 @@
return when (configurationName) {
BundleInsideHelper.CONFIGURATION_NAME -> true
"shadowed" -> true
- "compileClasspath" -> appliesShadowPlugin()
+ // compileClasspath is included by the Shadow plugin by default but projects that
+ // declare a "shadowed" configuration exclude the "compileClasspath" configuration from
+ // the shadowJar task
+ "compileClasspath" ->
+ appliesShadowPlugin() && project.configurations.findByName("shadowed") == null
EXPORT_INSPECTOR_DEPENDENCIES -> true
IMPORT_INSPECTOR_DEPENDENCIES -> true
else -> false
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/studio/StudioPlatformUtilities.kt b/buildSrc/private/src/main/kotlin/androidx/build/studio/StudioPlatformUtilities.kt
index 61b3bf7..587f0a9 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/studio/StudioPlatformUtilities.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/studio/StudioPlatformUtilities.kt
@@ -16,9 +16,9 @@
package androidx.build.studio
-import org.gradle.process.ExecSpec
import java.io.File
import java.util.Locale
+import org.gradle.process.ExecSpec
/**
* Utility class containing helper functions and values that change between Linux and OSX
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/OwnersService.kt b/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/OwnersService.kt
index e75e8a9..d49701d 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/OwnersService.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/OwnersService.kt
@@ -18,6 +18,7 @@
import androidx.build.getDistributionDirectory
import com.google.gson.GsonBuilder
+import java.io.File
import org.gradle.api.DefaultTask
import org.gradle.api.Project
import org.gradle.api.file.RegularFileProperty
@@ -27,7 +28,6 @@
import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.bundling.Zip
-import java.io.File
@CacheableTask
abstract class ModuleInfoGenerator : DefaultTask() {
@@ -52,7 +52,7 @@
}
/**
- * Register two tasks need to generate information for Android test owners service.
+ * Register two tasks needed to generate information for Android test owners service.
* One task zips all the OWNERS files in frameworks/support, and second task creates a
* module-info.json that links test modules to paths.
*/
@@ -62,6 +62,7 @@
task.destinationDirectory.set(getDistributionDirectory())
task.from(layout.projectDirectory)
task.include("**/OWNERS")
+ task.exclude("buildSrc/.gradle/**")
task.includeEmptyDirs = false
}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/TestSuiteConfiguration.kt b/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/TestSuiteConfiguration.kt
index 152b49a..3d4d026 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/TestSuiteConfiguration.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/TestSuiteConfiguration.kt
@@ -39,12 +39,12 @@
import com.android.build.api.variant.TestAndroidComponentsExtension
import com.android.build.api.variant.Variant
import com.android.build.gradle.BaseExtension
-import java.io.File
-import org.gradle.api.Project
import com.android.build.gradle.TestExtension
import com.android.build.gradle.internal.attributes.VariantAttr
import com.android.build.gradle.internal.publishing.AndroidArtifacts
import com.android.build.gradle.internal.publishing.AndroidArtifacts.ArtifactType
+import java.io.File
+import org.gradle.api.Project
import org.gradle.api.attributes.Usage
import org.gradle.api.tasks.TaskProvider
import org.gradle.kotlin.dsl.getByType
diff --git a/buildSrc/public/src/main/kotlin/androidx/build/BundleInsideHelper.kt b/buildSrc/public/src/main/kotlin/androidx/build/BundleInsideHelper.kt
index d67eaca..502f2b5 100644
--- a/buildSrc/public/src/main/kotlin/androidx/build/BundleInsideHelper.kt
+++ b/buildSrc/public/src/main/kotlin/androidx/build/BundleInsideHelper.kt
@@ -17,12 +17,12 @@
package androidx.build
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
+import java.io.File
import org.gradle.api.Project
+import org.gradle.api.Task
import org.gradle.api.artifacts.Configuration
import org.gradle.api.tasks.TaskProvider
import org.gradle.jvm.tasks.Jar
-import java.io.File
-import org.gradle.api.Task
import org.gradle.kotlin.dsl.findByType
import org.gradle.kotlin.dsl.get
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
diff --git a/buildSrc/public/src/main/kotlin/androidx/build/LibraryType.kt b/buildSrc/public/src/main/kotlin/androidx/build/LibraryType.kt
index b6c5c29..51a2301 100644
--- a/buildSrc/public/src/main/kotlin/androidx/build/LibraryType.kt
+++ b/buildSrc/public/src/main/kotlin/androidx/build/LibraryType.kt
@@ -36,17 +36,33 @@
*
* The possible values of LibraryType are as follows:
* PUBLISHED_LIBRARY: a conventional library, published, sourced, documented, and versioned.
- * SAMPLES: a library of samples, published as additional properties to a conventional library,
- * including published source. Documented in a special way, not API tracked.
+ * PUBLISHED_TEST_LIBRARY: PUBLISHED_LIBRARY, but allows calling @VisibleForTesting API. Used for
+ * libraries that allow developers to test code that uses your library. Often provides test fakes.
+ * PUBLISHED_NATIVE_LIBRARY: PUBLISHED_LIBRARY, but uses native API tracking instead of Java
+ * INTERNAL_TEST_LIBRARY: unpublished, untracked, undocumented. Used in internal tests. Usually
+ * contains integration tests, but is _not_ an app. Runs device tests.
+ * INTERNAL_HOST_TEST_LIBRARY: as INTERNAL_TEST_LIBRARY, but runs host tests instead. Avoid mixing
+ * host tests and device tests in the same library, for performance / test-result-caching reasons.
+ * SAMPLES: a library containing sample code referenced in your library's documentation with
+ * @sampled, published as a documentation-related supplement to a conventional library.
* LINT: a library of lint rules for using a conventional library. Published through lintPublish as
- * part of an AAR, not published standalone.
- * COMPILER_PLUGIN: a tool that modifies the kotlin or java compiler. Used only while compiling.
+ * part of an AAR, not published standalone.
+ * COMPILER_DAEMON: a tool that modifies the kotlin or java compiler. Used only while compiling. Has
+ * no API and does not publish source jars, but does release to maven.
+ * COMPILER_DAEMON_TEST: a compiler plugin that is not published at all, for internal-only use.
+ * COMPILER_PLUGIN: as COMPILER_DAEMON, but is compatible with JDK 11.
* GRADLE_PLUGIN: a library that is a gradle plugin.
* ANNOTATION_PROCESSOR: a library consisting of an annotation processor. Used only while compiling.
+ * ANNOTATION_PROCESSOR_UTILS: contains reference code for understanding an annotation processor.
+ * Publishes source jars, but does not track API.
* OTHER_CODE_PROCESSOR: a library that algorithmically generates and/or alters code
* but not through hooking into custom annotations or the kotlin compiler.
* For example, navigation:safe-args-generator or Jetifier.
+ * IDE_PLUGIN: a library that should only ever be downloaded by studio. Unfortunately, we don't
+ * yet have a good way to track API for these. b/281843422
* UNSET: a library that has not yet been migrated to using LibraryType. Should never be used.
+ * APP: an app, such as an example app or integration testsapp. Should never be used; apps should
+ * not apply the AndroidX plugin or have an androidx block in their build.gradle files.
*
* TODO: potential future LibraryTypes:
* KOTLIN_ONLY_LIBRARY: like PUBLISHED_LIBRARY, but not intended for use from java. ktx and compose.
@@ -82,7 +98,10 @@
val OTHER_CODE_PROCESSOR = OtherCodeProcessor()
val IDE_PLUGIN = IdePlugin()
val UNSET = Unset()
+ @Deprecated("Do not use an androidx block for apps/testapps, only for libraries")
+ val APP = UNSET
+ @Suppress("DEPRECATION")
private val allTypes = mapOf(
"PUBLISHED_LIBRARY" to PUBLISHED_LIBRARY,
"PUBLISHED_TEST_LIBRARY" to PUBLISHED_TEST_LIBRARY,
@@ -99,7 +118,8 @@
"ANNOTATION_PROCESSOR_UTILS" to ANNOTATION_PROCESSOR_UTILS,
"OTHER_CODE_PROCESSOR" to OTHER_CODE_PROCESSOR,
"IDE_PLUGIN" to IDE_PLUGIN,
- "UNSET" to UNSET
+ "UNSET" to UNSET,
+ "APP" to APP
)
fun valueOf(name: String): LibraryType {
val result = allTypes[name]
diff --git a/buildSrc/public/src/main/kotlin/androidx/build/OperatingSystem.kt b/buildSrc/public/src/main/kotlin/androidx/build/OperatingSystem.kt
index 867ade5..c73ff70 100644
--- a/buildSrc/public/src/main/kotlin/androidx/build/OperatingSystem.kt
+++ b/buildSrc/public/src/main/kotlin/androidx/build/OperatingSystem.kt
@@ -16,8 +16,8 @@
package androidx.build
-import org.gradle.api.GradleException
import java.util.Locale
+import org.gradle.api.GradleException
enum class OperatingSystem {
LINUX,
diff --git a/buildSrc/public/src/main/kotlin/androidx/build/SingleFileCopy.kt b/buildSrc/public/src/main/kotlin/androidx/build/SingleFileCopy.kt
index 74d81b7..6064dd2 100644
--- a/buildSrc/public/src/main/kotlin/androidx/build/SingleFileCopy.kt
+++ b/buildSrc/public/src/main/kotlin/androidx/build/SingleFileCopy.kt
@@ -17,16 +17,15 @@
package androidx.build
import com.google.common.io.Files
+import java.io.File
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.InputFile
import org.gradle.api.tasks.OutputFile
-import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.PathSensitive
import org.gradle.api.tasks.PathSensitivity
+import org.gradle.api.tasks.TaskAction
import org.gradle.work.DisableCachingByDefault
-import java.io.File
-
@DisableCachingByDefault(because = "Doesn't benefit from cache")
open class SingleFileCopy : DefaultTask() {
@InputFile @PathSensitive(PathSensitivity.ABSOLUTE)
diff --git a/buildSrc/public/src/main/kotlin/androidx/build/SupportConfig.kt b/buildSrc/public/src/main/kotlin/androidx/build/SupportConfig.kt
index e0087b3..47d27e4 100644
--- a/buildSrc/public/src/main/kotlin/androidx/build/SupportConfig.kt
+++ b/buildSrc/public/src/main/kotlin/androidx/build/SupportConfig.kt
@@ -17,15 +17,15 @@
package androidx.build
import androidx.build.SupportConfig.COMPILE_SDK_VERSION
+import java.io.File
import org.gradle.api.Project
import org.gradle.api.file.FileCollection
-import java.io.File
object SupportConfig {
const val DEFAULT_MIN_SDK_VERSION = 14
const val INSTRUMENTATION_RUNNER = "androidx.test.runner.AndroidJUnitRunner"
private const val INTERNAL_BUILD_TOOLS_VERSION = "34.0.0-rc3"
- private const val PUBLIC_BUILD_TOOLS_VERSION = "34.0.0-rc3"
+ private const val PUBLIC_BUILD_TOOLS_VERSION = "34.0.0-rc4"
const val NDK_VERSION = "23.1.7779620"
/**
diff --git a/buildSrc/public/src/main/kotlin/androidx/build/Version.kt b/buildSrc/public/src/main/kotlin/androidx/build/Version.kt
index d385d9b..fbee578 100644
--- a/buildSrc/public/src/main/kotlin/androidx/build/Version.kt
+++ b/buildSrc/public/src/main/kotlin/androidx/build/Version.kt
@@ -16,11 +16,11 @@
package androidx.build
-import org.gradle.api.Project
import java.io.File
import java.util.Locale
import java.util.regex.Matcher
import java.util.regex.Pattern
+import org.gradle.api.Project
/**
* Utility class which represents a version
diff --git a/buildSrc/shared-dependencies.gradle b/buildSrc/shared-dependencies.gradle
index 0625be3..1b67981 100644
--- a/buildSrc/shared-dependencies.gradle
+++ b/buildSrc/shared-dependencies.gradle
@@ -6,8 +6,6 @@
// Gradle APIs
implementation(gradleApi())
compileOnly(findGradleKotlinDsl())
- //noinspection UseTomlInstead,GradleDependency
- implementation("com.android.tools:r8:8.1.41") // Temporary workaround for b/279807477
// Android Gradle Plugin APIs used by Stable AIDL
implementation(libs.androidGradlePluginApi)
diff --git a/busytown/androidx.sh b/busytown/androidx.sh
index ef344d5..cbecee6 100755
--- a/busytown/androidx.sh
+++ b/busytown/androidx.sh
@@ -18,11 +18,11 @@
EXIT_VALUE=1
else
# Run Gradle
+ # If/when we enable desktop, enable VerifyDependencyVersionsTask.kt/shouldVerifyConfiguration
if ! impl/build.sh buildOnServer createAllArchives checkExternalLicenses listTaskOutputs \
-Pandroidx.enableComposeCompilerMetrics=true \
-Pandroidx.enableComposeCompilerReports=true \
-Pandroidx.constraints=true \
- # If/when we enable desktop, enable VerifyDependencyVersionsTask.kt/shouldVerifyConfiguration
-Pandroidx.enabled.kmp.target.platforms=-desktop \
--no-daemon \
--profile "$@"; then
diff --git a/busytown/androidx_host_tests.sh b/busytown/androidx_host_tests.sh
index bba9e74..3555073 100755
--- a/busytown/androidx_host_tests.sh
+++ b/busytown/androidx_host_tests.sh
@@ -5,7 +5,7 @@
cd "$(dirname $0)"
-impl/build.sh test \
+impl/build.sh test zipOwnersFiles createModuleInfo \
-Pandroidx.ignoreTestFailures \
-Pandroidx.displayTestOutput=false \
"$@"
diff --git a/busytown/androidx_host_tests_max_dep_versions.sh b/busytown/androidx_host_tests_max_dep_versions.sh
index ef49669..5dbf2ee 100755
--- a/busytown/androidx_host_tests_max_dep_versions.sh
+++ b/busytown/androidx_host_tests_max_dep_versions.sh
@@ -5,7 +5,7 @@
cd "$(dirname $0)"
-impl/build.sh test \
+impl/build.sh test zipOwnersFiles createModuleInfo \
-Pandroidx.useMaxDepVersions \
-Pandroidx.displayTestOutput=false \
-Pandroidx.ignoreTestFailures "$@"
diff --git a/busytown/impl/build.sh b/busytown/impl/build.sh
index 75d19f3..0e45231 100755
--- a/busytown/impl/build.sh
+++ b/busytown/impl/build.sh
@@ -97,22 +97,21 @@
if run ./gradlew --ci "$@"; then
echo build passed
else
- if [ "$DIAGNOSE" == "true" ]; then
- # see if diagnose-build-failure.sh can identify the root cauase
- echo "running diagnose-build-failure.sh, see build.log" >&2
- # Specify a short timeout in case we're running on a remote server, so we don't take too long.
- # We probably won't have enough time to fully diagnose the problem given this timeout, but
- # we might be able to determine whether this problem is reproducible enough for a developer to
- # more easily investigate further
- ./development/diagnose-build-failure/diagnose-build-failure.sh --timeout 600 "--ci $*"
- fi
- if grep "/prefab" "$DIST_DIR/logs/gradle.log" >/dev/null 2>/dev/null; then
- # error looks like it might have involved prefab, copy the prefab dir to DIST where we can find it
- if [ -e "$OUT_DIR/androidx/external/libyuv/build" ]; then
- cd "$OUT_DIR/androidx/external/libyuv/build"
- echo "Zipping $PWD into $DIST_DIR/libyuv-build.zip"
- zip -qr "$DIST_DIR/libyuv-build.zip" .
- cd -
+ if grep "has several compatible actual declarations in modules" "$DIST_DIR/logs/gradle.log" >/dev/null 2>/dev/null; then
+ # try to copy the OUT_DIR into DIST where we can find it
+ cd "$OUT_DIR"
+ echo "zipping out into $DIST_DIR/out.zip"
+ zip --exclude out.zip -qr "$DIST_DIR/out.zip" .
+ cd -
+ else
+ if [ "$DIAGNOSE" == "true" ]; then
+ # see if diagnose-build-failure.sh can identify the root cauase
+ echo "running diagnose-build-failure.sh, see build.log" >&2
+ # Specify a short timeout in case we're running on a remote server, so we don't take too long.
+ # We probably won't have enough time to fully diagnose the problem given this timeout, but
+ # we might be able to determine whether this problem is reproducible enough for a developer to
+ # more easily investigate further
+ ./development/diagnose-build-failure/diagnose-build-failure.sh --timeout 600 "--ci $*"
fi
fi
BUILD_STATUS=1 # failure
diff --git a/camera/camera-camera2-pipe-integration/api/current.txt b/camera/camera-camera2-pipe-integration/api/current.txt
index 54b5db2..9d11137 100644
--- a/camera/camera-camera2-pipe-integration/api/current.txt
+++ b/camera/camera-camera2-pipe-integration/api/current.txt
@@ -7,3 +7,48 @@
}
+package androidx.camera.camera2.pipe.integration.interop {
+
+ @RequiresApi(21) @androidx.camera.camera2.pipe.integration.interop.ExperimentalCamera2Interop public final class Camera2CameraControl {
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> addCaptureRequestOptions(androidx.camera.camera2.pipe.integration.interop.CaptureRequestOptions bundle);
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> clearCaptureRequestOptions();
+ method public static androidx.camera.camera2.pipe.integration.interop.Camera2CameraControl from(androidx.camera.core.CameraControl cameraControl);
+ method public androidx.camera.camera2.pipe.integration.interop.CaptureRequestOptions getCaptureRequestOptions();
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> setCaptureRequestOptions(androidx.camera.camera2.pipe.integration.interop.CaptureRequestOptions bundle);
+ }
+
+ @RequiresApi(21) @androidx.camera.camera2.pipe.integration.interop.ExperimentalCamera2Interop public final class Camera2CameraInfo {
+ method public static androidx.camera.camera2.pipe.integration.interop.Camera2CameraInfo from(androidx.camera.core.CameraInfo cameraInfo);
+ method public <T> T? getCameraCharacteristic(android.hardware.camera2.CameraCharacteristics.Key<T> key);
+ method public String getCameraId();
+ }
+
+ @RequiresApi(21) @androidx.camera.camera2.pipe.integration.interop.ExperimentalCamera2Interop public final class Camera2Interop {
+ }
+
+ @RequiresApi(21) public static final class Camera2Interop.Extender<T> {
+ ctor public Camera2Interop.Extender(androidx.camera.core.ExtendableBuilder<T> baseBuilder);
+ method public <ValueT> androidx.camera.camera2.pipe.integration.interop.Camera2Interop.Extender<T> setCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT> key, ValueT value);
+ method public androidx.camera.camera2.pipe.integration.interop.Camera2Interop.Extender<T> setDeviceStateCallback(android.hardware.camera2.CameraDevice.StateCallback stateCallback);
+ method @RequiresApi(28) public androidx.camera.camera2.pipe.integration.interop.Camera2Interop.Extender<T> setPhysicalCameraId(String cameraId);
+ method public androidx.camera.camera2.pipe.integration.interop.Camera2Interop.Extender<T> setSessionCaptureCallback(android.hardware.camera2.CameraCaptureSession.CaptureCallback captureCallback);
+ method public androidx.camera.camera2.pipe.integration.interop.Camera2Interop.Extender<T> setSessionStateCallback(android.hardware.camera2.CameraCaptureSession.StateCallback stateCallback);
+ method @RequiresApi(33) public androidx.camera.camera2.pipe.integration.interop.Camera2Interop.Extender<T> setStreamUseCase(long streamUseCase);
+ }
+
+ @RequiresApi(21) @androidx.camera.camera2.pipe.integration.interop.ExperimentalCamera2Interop public class CaptureRequestOptions {
+ method public <ValueT> ValueT? getCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT> key);
+ }
+
+ @RequiresApi(21) public static final class CaptureRequestOptions.Builder implements androidx.camera.core.ExtendableBuilder<androidx.camera.camera2.pipe.integration.interop.CaptureRequestOptions> {
+ ctor public CaptureRequestOptions.Builder();
+ method public androidx.camera.camera2.pipe.integration.interop.CaptureRequestOptions build();
+ method public <ValueT> androidx.camera.camera2.pipe.integration.interop.CaptureRequestOptions.Builder clearCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT> key);
+ method public <ValueT> androidx.camera.camera2.pipe.integration.interop.CaptureRequestOptions.Builder setCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT> key, ValueT value);
+ }
+
+ @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalCamera2Interop {
+ }
+
+}
+
diff --git a/camera/camera-camera2-pipe-integration/api/public_plus_experimental_current.txt b/camera/camera-camera2-pipe-integration/api/public_plus_experimental_current.txt
deleted file mode 100644
index 9d11137..0000000
--- a/camera/camera-camera2-pipe-integration/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,54 +0,0 @@
-// Signature format: 4.0
-package androidx.camera.camera2.pipe.integration {
-
- @RequiresApi(21) public final class CameraPipeConfig {
- method public static androidx.camera.core.CameraXConfig defaultConfig();
- }
-
-}
-
-package androidx.camera.camera2.pipe.integration.interop {
-
- @RequiresApi(21) @androidx.camera.camera2.pipe.integration.interop.ExperimentalCamera2Interop public final class Camera2CameraControl {
- method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> addCaptureRequestOptions(androidx.camera.camera2.pipe.integration.interop.CaptureRequestOptions bundle);
- method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> clearCaptureRequestOptions();
- method public static androidx.camera.camera2.pipe.integration.interop.Camera2CameraControl from(androidx.camera.core.CameraControl cameraControl);
- method public androidx.camera.camera2.pipe.integration.interop.CaptureRequestOptions getCaptureRequestOptions();
- method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> setCaptureRequestOptions(androidx.camera.camera2.pipe.integration.interop.CaptureRequestOptions bundle);
- }
-
- @RequiresApi(21) @androidx.camera.camera2.pipe.integration.interop.ExperimentalCamera2Interop public final class Camera2CameraInfo {
- method public static androidx.camera.camera2.pipe.integration.interop.Camera2CameraInfo from(androidx.camera.core.CameraInfo cameraInfo);
- method public <T> T? getCameraCharacteristic(android.hardware.camera2.CameraCharacteristics.Key<T> key);
- method public String getCameraId();
- }
-
- @RequiresApi(21) @androidx.camera.camera2.pipe.integration.interop.ExperimentalCamera2Interop public final class Camera2Interop {
- }
-
- @RequiresApi(21) public static final class Camera2Interop.Extender<T> {
- ctor public Camera2Interop.Extender(androidx.camera.core.ExtendableBuilder<T> baseBuilder);
- method public <ValueT> androidx.camera.camera2.pipe.integration.interop.Camera2Interop.Extender<T> setCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT> key, ValueT value);
- method public androidx.camera.camera2.pipe.integration.interop.Camera2Interop.Extender<T> setDeviceStateCallback(android.hardware.camera2.CameraDevice.StateCallback stateCallback);
- method @RequiresApi(28) public androidx.camera.camera2.pipe.integration.interop.Camera2Interop.Extender<T> setPhysicalCameraId(String cameraId);
- method public androidx.camera.camera2.pipe.integration.interop.Camera2Interop.Extender<T> setSessionCaptureCallback(android.hardware.camera2.CameraCaptureSession.CaptureCallback captureCallback);
- method public androidx.camera.camera2.pipe.integration.interop.Camera2Interop.Extender<T> setSessionStateCallback(android.hardware.camera2.CameraCaptureSession.StateCallback stateCallback);
- method @RequiresApi(33) public androidx.camera.camera2.pipe.integration.interop.Camera2Interop.Extender<T> setStreamUseCase(long streamUseCase);
- }
-
- @RequiresApi(21) @androidx.camera.camera2.pipe.integration.interop.ExperimentalCamera2Interop public class CaptureRequestOptions {
- method public <ValueT> ValueT? getCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT> key);
- }
-
- @RequiresApi(21) public static final class CaptureRequestOptions.Builder implements androidx.camera.core.ExtendableBuilder<androidx.camera.camera2.pipe.integration.interop.CaptureRequestOptions> {
- ctor public CaptureRequestOptions.Builder();
- method public androidx.camera.camera2.pipe.integration.interop.CaptureRequestOptions build();
- method public <ValueT> androidx.camera.camera2.pipe.integration.interop.CaptureRequestOptions.Builder clearCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT> key);
- method public <ValueT> androidx.camera.camera2.pipe.integration.interop.CaptureRequestOptions.Builder setCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT> key, ValueT value);
- }
-
- @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalCamera2Interop {
- }
-
-}
-
diff --git a/camera/camera-camera2-pipe-integration/api/restricted_current.txt b/camera/camera-camera2-pipe-integration/api/restricted_current.txt
index 54b5db2..9d11137 100644
--- a/camera/camera-camera2-pipe-integration/api/restricted_current.txt
+++ b/camera/camera-camera2-pipe-integration/api/restricted_current.txt
@@ -7,3 +7,48 @@
}
+package androidx.camera.camera2.pipe.integration.interop {
+
+ @RequiresApi(21) @androidx.camera.camera2.pipe.integration.interop.ExperimentalCamera2Interop public final class Camera2CameraControl {
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> addCaptureRequestOptions(androidx.camera.camera2.pipe.integration.interop.CaptureRequestOptions bundle);
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> clearCaptureRequestOptions();
+ method public static androidx.camera.camera2.pipe.integration.interop.Camera2CameraControl from(androidx.camera.core.CameraControl cameraControl);
+ method public androidx.camera.camera2.pipe.integration.interop.CaptureRequestOptions getCaptureRequestOptions();
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> setCaptureRequestOptions(androidx.camera.camera2.pipe.integration.interop.CaptureRequestOptions bundle);
+ }
+
+ @RequiresApi(21) @androidx.camera.camera2.pipe.integration.interop.ExperimentalCamera2Interop public final class Camera2CameraInfo {
+ method public static androidx.camera.camera2.pipe.integration.interop.Camera2CameraInfo from(androidx.camera.core.CameraInfo cameraInfo);
+ method public <T> T? getCameraCharacteristic(android.hardware.camera2.CameraCharacteristics.Key<T> key);
+ method public String getCameraId();
+ }
+
+ @RequiresApi(21) @androidx.camera.camera2.pipe.integration.interop.ExperimentalCamera2Interop public final class Camera2Interop {
+ }
+
+ @RequiresApi(21) public static final class Camera2Interop.Extender<T> {
+ ctor public Camera2Interop.Extender(androidx.camera.core.ExtendableBuilder<T> baseBuilder);
+ method public <ValueT> androidx.camera.camera2.pipe.integration.interop.Camera2Interop.Extender<T> setCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT> key, ValueT value);
+ method public androidx.camera.camera2.pipe.integration.interop.Camera2Interop.Extender<T> setDeviceStateCallback(android.hardware.camera2.CameraDevice.StateCallback stateCallback);
+ method @RequiresApi(28) public androidx.camera.camera2.pipe.integration.interop.Camera2Interop.Extender<T> setPhysicalCameraId(String cameraId);
+ method public androidx.camera.camera2.pipe.integration.interop.Camera2Interop.Extender<T> setSessionCaptureCallback(android.hardware.camera2.CameraCaptureSession.CaptureCallback captureCallback);
+ method public androidx.camera.camera2.pipe.integration.interop.Camera2Interop.Extender<T> setSessionStateCallback(android.hardware.camera2.CameraCaptureSession.StateCallback stateCallback);
+ method @RequiresApi(33) public androidx.camera.camera2.pipe.integration.interop.Camera2Interop.Extender<T> setStreamUseCase(long streamUseCase);
+ }
+
+ @RequiresApi(21) @androidx.camera.camera2.pipe.integration.interop.ExperimentalCamera2Interop public class CaptureRequestOptions {
+ method public <ValueT> ValueT? getCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT> key);
+ }
+
+ @RequiresApi(21) public static final class CaptureRequestOptions.Builder implements androidx.camera.core.ExtendableBuilder<androidx.camera.camera2.pipe.integration.interop.CaptureRequestOptions> {
+ ctor public CaptureRequestOptions.Builder();
+ method public androidx.camera.camera2.pipe.integration.interop.CaptureRequestOptions build();
+ method public <ValueT> androidx.camera.camera2.pipe.integration.interop.CaptureRequestOptions.Builder clearCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT> key);
+ method public <ValueT> androidx.camera.camera2.pipe.integration.interop.CaptureRequestOptions.Builder setCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT> key, ValueT value);
+ }
+
+ @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalCamera2Interop {
+ }
+
+}
+
diff --git a/camera/camera-camera2-pipe-integration/build.gradle b/camera/camera-camera2-pipe-integration/build.gradle
index 5ba8cb5..3a1f95e 100644
--- a/camera/camera-camera2-pipe-integration/build.gradle
+++ b/camera/camera-camera2-pipe-integration/build.gradle
@@ -115,11 +115,11 @@
}
androidx {
- name = "Jetpack Camera Camera Pipe Integration Library"
+ name = "Camera2 Pipe Integration"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.CAMERA_PIPE
inceptionYear = "2020"
- description = "A CameraPipe implementation of CameraX, a library providing a consistent and " +
- "reliable camera foundation that enables great camera driven experiences across all " +
- "of Android."
+ description = "A Camera2 Pipe implementation of CameraX, a library providing a consistent " +
+ "and reliable camera foundation that enables great camera driven experiences across " +
+ "all of Android."
}
diff --git a/camera/camera-camera2-pipe-integration/src/androidTest/java/androidx/camera/camera2/pipe/testing/VerifyResultListener.kt b/camera/camera-camera2-pipe-integration/src/androidTest/java/androidx/camera/camera2/pipe/testing/VerifyResultListener.kt
index 1c65179..f88ee43 100644
--- a/camera/camera-camera2-pipe-integration/src/androidTest/java/androidx/camera/camera2/pipe/testing/VerifyResultListener.kt
+++ b/camera/camera-camera2-pipe-integration/src/androidTest/java/androidx/camera/camera2/pipe/testing/VerifyResultListener.kt
@@ -22,11 +22,11 @@
import androidx.camera.camera2.pipe.FrameNumber
import androidx.camera.camera2.pipe.Request
import androidx.camera.camera2.pipe.RequestMetadata
+import java.util.concurrent.TimeUnit
+import java.util.concurrent.TimeoutException
import kotlinx.atomicfu.atomic
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.withTimeout
-import java.util.concurrent.TimeUnit
-import java.util.concurrent.TimeoutException
@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
class VerifyResultListener(capturesCount: Int) : Request.Listener {
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraInfoAdapter.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraInfoAdapter.kt
index a1a2d28..9fb1916 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraInfoAdapter.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraInfoAdapter.kt
@@ -43,12 +43,12 @@
import androidx.camera.core.CameraSelector
import androidx.camera.core.CameraState
import androidx.camera.core.DynamicRange
-import androidx.camera.core.DynamicRange.BIT_DEPTH_10_BIT
-import androidx.camera.core.DynamicRange.BIT_DEPTH_8_BIT
-import androidx.camera.core.DynamicRange.FORMAT_DOLBY_VISION
-import androidx.camera.core.DynamicRange.FORMAT_HDR10
-import androidx.camera.core.DynamicRange.FORMAT_HDR10_PLUS
-import androidx.camera.core.DynamicRange.FORMAT_HLG
+import androidx.camera.core.DynamicRange.DOLBY_VISION_10_BIT
+import androidx.camera.core.DynamicRange.DOLBY_VISION_8_BIT
+import androidx.camera.core.DynamicRange.HDR10_10_BIT
+import androidx.camera.core.DynamicRange.HDR10_PLUS_10_BIT
+import androidx.camera.core.DynamicRange.HLG_10_BIT
+import androidx.camera.core.DynamicRange.SDR
import androidx.camera.core.ExposureState
import androidx.camera.core.FocusMeteringAction
import androidx.camera.core.ZoomState
@@ -198,7 +198,7 @@
return profileSetToDynamicRangeSet(availableProfiles.supportedProfiles)
}
}
- return setOf(DynamicRange.SDR)
+ return setOf(SDR)
}
private fun profileSetToDynamicRangeSet(profileSet: Set<Long>): Set<DynamicRange> {
@@ -212,24 +212,19 @@
}
companion object {
- private val DR_HLG10 = DynamicRange(FORMAT_HLG, BIT_DEPTH_10_BIT)
- private val DR_HDR10 = DynamicRange(FORMAT_HDR10, BIT_DEPTH_10_BIT)
- private val DR_HDR10_PLUS = DynamicRange(FORMAT_HDR10_PLUS, BIT_DEPTH_10_BIT)
- private val DR_DOLBY_VISION_10_BIT = DynamicRange(FORMAT_DOLBY_VISION, BIT_DEPTH_10_BIT)
- private val DR_DOLBY_VISION_8_BIT = DynamicRange(FORMAT_DOLBY_VISION, BIT_DEPTH_8_BIT)
private val PROFILE_TO_DR_MAP: Map<Long, DynamicRange> = mapOf(
- DynamicRangeProfiles.STANDARD to DynamicRange.SDR,
- DynamicRangeProfiles.HLG10 to DR_HLG10,
- DynamicRangeProfiles.HDR10 to DR_HDR10,
- DynamicRangeProfiles.HDR10_PLUS to DR_HDR10_PLUS,
- DynamicRangeProfiles.DOLBY_VISION_10B_HDR_OEM to DR_DOLBY_VISION_10_BIT,
- DynamicRangeProfiles.DOLBY_VISION_10B_HDR_OEM_PO to DR_DOLBY_VISION_10_BIT,
- DynamicRangeProfiles.DOLBY_VISION_10B_HDR_REF to DR_DOLBY_VISION_10_BIT,
- DynamicRangeProfiles.DOLBY_VISION_10B_HDR_REF_PO to DR_DOLBY_VISION_10_BIT,
- DynamicRangeProfiles.DOLBY_VISION_8B_HDR_OEM to DR_DOLBY_VISION_8_BIT,
- DynamicRangeProfiles.DOLBY_VISION_8B_HDR_OEM_PO to DR_DOLBY_VISION_8_BIT,
- DynamicRangeProfiles.DOLBY_VISION_8B_HDR_REF to DR_DOLBY_VISION_8_BIT,
- DynamicRangeProfiles.DOLBY_VISION_8B_HDR_REF_PO to DR_DOLBY_VISION_8_BIT,
+ DynamicRangeProfiles.STANDARD to SDR,
+ DynamicRangeProfiles.HLG10 to HLG_10_BIT,
+ DynamicRangeProfiles.HDR10 to HDR10_10_BIT,
+ DynamicRangeProfiles.HDR10_PLUS to HDR10_PLUS_10_BIT,
+ DynamicRangeProfiles.DOLBY_VISION_10B_HDR_OEM to DOLBY_VISION_10_BIT,
+ DynamicRangeProfiles.DOLBY_VISION_10B_HDR_OEM_PO to DOLBY_VISION_10_BIT,
+ DynamicRangeProfiles.DOLBY_VISION_10B_HDR_REF to DOLBY_VISION_10_BIT,
+ DynamicRangeProfiles.DOLBY_VISION_10B_HDR_REF_PO to DOLBY_VISION_10_BIT,
+ DynamicRangeProfiles.DOLBY_VISION_8B_HDR_OEM to DOLBY_VISION_8_BIT,
+ DynamicRangeProfiles.DOLBY_VISION_8B_HDR_OEM_PO to DOLBY_VISION_8_BIT,
+ DynamicRangeProfiles.DOLBY_VISION_8B_HDR_REF to DOLBY_VISION_8_BIT,
+ DynamicRangeProfiles.DOLBY_VISION_8B_HDR_REF_PO to DOLBY_VISION_8_BIT,
)
}
}
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/SupportedSurfaceCombination.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/SupportedSurfaceCombination.kt
index 516f8a5..a84d164 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/SupportedSurfaceCombination.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/SupportedSurfaceCombination.kt
@@ -28,8 +28,8 @@
import android.media.CamcorderProfile
import android.media.MediaRecorder
import android.os.Build
-import android.util.Rational
import android.util.Pair
+import android.util.Rational
import android.util.Size
import android.view.Display
import androidx.annotation.RequiresApi
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/Camera2CameraControlCompat.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/Camera2CameraControlCompat.kt
index 33adefc..4143198 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/Camera2CameraControlCompat.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/Camera2CameraControlCompat.kt
@@ -38,10 +38,10 @@
import androidx.camera.core.impl.annotation.ExecutedBy
import dagger.Binds
import dagger.Module
+import javax.inject.Inject
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.Deferred
import kotlinx.coroutines.launch
-import javax.inject.Inject
private const val TAG_KEY = "Camera2CameraControl.tag"
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/ConfigureSurfaceToSecondarySessionFailQuirk.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/ConfigureSurfaceToSecondarySessionFailQuirk.kt
index 98507ce..969985f 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/ConfigureSurfaceToSecondarySessionFailQuirk.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/ConfigureSurfaceToSecondarySessionFailQuirk.kt
@@ -16,12 +16,12 @@
package androidx.camera.camera2.pipe.integration.compat.quirk
import android.annotation.SuppressLint
+import android.hardware.camera2.CameraCaptureSession
import android.hardware.camera2.CameraCharacteristics
import android.hardware.camera2.CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY
import androidx.annotation.RequiresApi
import androidx.camera.camera2.pipe.CameraMetadata
import androidx.camera.core.impl.Quirk
-import android.hardware.camera2.CameraCaptureSession
/**
* A quirk to denote the surface can only be used to configure to only one
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/CapturePipeline.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/CapturePipeline.kt
index 9da5b32..d854d2b 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/CapturePipeline.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/CapturePipeline.kt
@@ -47,9 +47,9 @@
import androidx.camera.camera2.pipe.RequestMetadata
import androidx.camera.camera2.pipe.Result3A
import androidx.camera.camera2.pipe.core.Log
+import androidx.camera.camera2.pipe.integration.compat.workaround.UseTorchAsFlash
import androidx.camera.camera2.pipe.integration.compat.workaround.isFlashAvailable
import androidx.camera.camera2.pipe.integration.compat.workaround.shouldStopRepeatingBeforeCapture
-import androidx.camera.camera2.pipe.integration.compat.workaround.UseTorchAsFlash
import androidx.camera.camera2.pipe.integration.config.UseCaseCameraScope
import androidx.camera.camera2.pipe.integration.config.UseCaseGraphConfig
import androidx.camera.core.ImageCapture.CAPTURE_MODE_MAXIMIZE_QUALITY
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/EvCompControl.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/EvCompControl.kt
index 2bba010..f53608f 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/EvCompControl.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/EvCompControl.kt
@@ -26,9 +26,9 @@
import dagger.Binds
import dagger.Module
import dagger.multibindings.IntoSet
+import javax.inject.Inject
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.Deferred
-import javax.inject.Inject
private const val DEFAULT_EXPOSURE_COMPENSATION = 0
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseThreads.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseThreads.kt
index 3233279..e2c7c5f 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseThreads.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseThreads.kt
@@ -18,11 +18,11 @@
import androidx.annotation.RequiresApi
import androidx.camera.core.impl.utils.executor.CameraXExecutors
+import java.util.concurrent.Executor
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.asCoroutineDispatcher
-import java.util.concurrent.Executor
/**
* Collection of threads and scope(s) that have been configured and tuned.
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/StreamConfigurationMapCompatTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/StreamConfigurationMapCompatTest.kt
index ef595571..446c142 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/StreamConfigurationMapCompatTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/StreamConfigurationMapCompatTest.kt
@@ -16,13 +16,15 @@
package androidx.camera.camera2.pipe.integration.compat
+import android.graphics.ImageFormat
import android.graphics.SurfaceTexture
import android.os.Build
import android.util.Size
import androidx.camera.camera2.pipe.integration.compat.workaround.OutputSizesCorrector
import androidx.camera.camera2.pipe.testing.FakeCameraMetadata
import androidx.camera.core.impl.ImageFormatConstants
-import com.google.common.truth.Truth
+import com.google.common.truth.Truth.assertThat
+import org.junit.Assume.assumeTrue
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@@ -66,15 +68,39 @@
@Test
fun getOutputSizes_withFormat_callGetOutputSizes() {
- Truth.assertThat(
+ assertThat(
streamConfigurationMapCompat.getOutputSizes(FORMAT_PRIVATE)?.toList()
).containsExactlyElementsIn(privateFormatOutputSizes)
}
@Test
fun getOutputSizes_withClass_callGetOutputSizes() {
- Truth.assertThat(
+ assertThat(
streamConfigurationMapCompat.getOutputSizes(SurfaceTexture::class.java)?.toList()
).containsExactlyElementsIn(privateFormatOutputSizes)
}
+
+ @Test
+ fun getOutputSizesByFormatTwice_whenReturnedArrayIsNull() {
+ assumeTrue(streamConfigurationMapCompat.getOutputSizes(ImageFormat.RGB_565) == null)
+ assertThat(streamConfigurationMapCompat.getOutputSizes(ImageFormat.RGB_565)).isNull()
+ }
+
+ @Test
+ fun getOutputSizesByClassTwice_whenReturnedArrayIsNull() {
+ assumeTrue(streamConfigurationMapCompat.getOutputSizes(ImageFormat::class.java) == null)
+ assertThat(streamConfigurationMapCompat.getOutputSizes(ImageFormat::class.java)).isNull()
+ }
+
+ @Test
+ @Config(minSdk = 23)
+ fun getHighResolutionOutputSizesTwice_whenReturnedArrayIsNull() {
+ assumeTrue(
+ streamConfigurationMapCompat.getHighResolutionOutputSizes(
+ ImageFormat.JPEG
+ ) == null
+ )
+ assertThat(streamConfigurationMapCompat.getHighResolutionOutputSizes(ImageFormat.JPEG))
+ .isNull()
+ }
}
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/CapturePipelineTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/CapturePipelineTest.kt
index 28e3c559..236bd7d 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/CapturePipelineTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/CapturePipelineTest.kt
@@ -37,14 +37,14 @@
import androidx.camera.camera2.pipe.integration.adapter.CameraStateAdapter
import androidx.camera.camera2.pipe.integration.adapter.RobolectricCameraPipeTestRunner
import androidx.camera.camera2.pipe.integration.adapter.asListenableFuture
-import androidx.camera.camera2.pipe.integration.compat.workaround.CapturePipelineTorchCorrection
import androidx.camera.camera2.pipe.integration.compat.StreamConfigurationMapCompat
import androidx.camera.camera2.pipe.integration.compat.quirk.CameraQuirks
import androidx.camera.camera2.pipe.integration.compat.workaround.AeFpsRange
+import androidx.camera.camera2.pipe.integration.compat.workaround.CapturePipelineTorchCorrection
import androidx.camera.camera2.pipe.integration.compat.workaround.NoOpAutoFlashAEModeDisabler
import androidx.camera.camera2.pipe.integration.compat.workaround.NotUseTorchAsFlash
-import androidx.camera.camera2.pipe.integration.compat.workaround.UseTorchAsFlashImpl
import androidx.camera.camera2.pipe.integration.compat.workaround.OutputSizesCorrector
+import androidx.camera.camera2.pipe.integration.compat.workaround.UseTorchAsFlashImpl
import androidx.camera.camera2.pipe.integration.config.UseCaseGraphConfig
import androidx.camera.camera2.pipe.integration.testing.FakeCameraGraph
import androidx.camera.camera2.pipe.integration.testing.FakeCameraGraphSession
diff --git a/camera/camera-camera2-pipe-testing/build.gradle b/camera/camera-camera2-pipe-testing/build.gradle
index fcf6f79..1d31206 100644
--- a/camera/camera-camera2-pipe-testing/build.gradle
+++ b/camera/camera-camera2-pipe-testing/build.gradle
@@ -60,12 +60,12 @@
}
androidx {
- name = "Jetpack Camera Camera Pipe Testing Library"
+ name = "Camera2 Pipe Testing"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.CAMERA_PIPE
runApiTasks = new RunApiTasks.No("CameraPipe is an implementation detail of other libraries.")
inceptionYear = "2020"
- description = "Testing components for the Jetpack CameraPipe Library, a library providing a " +
+ description = "Testing components for the Camera2 Pipe Library, a library providing a " +
"consistent and reliable camera foundation that enables great camera driven " +
"experiences across all of Android."
}
diff --git a/camera/camera-camera2-pipe/build.gradle b/camera/camera-camera2-pipe/build.gradle
index f339499..e2a6054 100644
--- a/camera/camera-camera2-pipe/build.gradle
+++ b/camera/camera-camera2-pipe/build.gradle
@@ -71,7 +71,7 @@
}
androidx {
- name = "Jetpack Camera Pipe"
+ name = "Camera2 Pipe"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.CAMERA_PIPE
runApiTasks = new RunApiTasks.No("CameraPipe is an implementation detail of other libraries.")
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraControls.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraControls.kt
index 9e94da7..bfc9850 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraControls.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraControls.kt
@@ -139,10 +139,14 @@
* enforced frame or time limit was reached, submitting the desired request to camera failed
* etc.
*/
- enum class Status {
- OK,
- FRAME_LIMIT_REACHED,
- TIME_LIMIT_REACHED,
- SUBMIT_FAILED
+ @JvmInline
+ value class Status private constructor(val value: Int) {
+ companion object {
+ val OK = Status(0)
+ val FRAME_LIMIT_REACHED = Status(1)
+ val TIME_LIMIT_REACHED = Status(2)
+ val SUBMIT_CANCELLED = Status(3)
+ val SUBMIT_FAILED = Status(4)
+ }
}
}
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraMetadata.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraMetadata.kt
index 318a90b..ec0be0e9 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraMetadata.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraMetadata.kt
@@ -48,6 +48,7 @@
@GuardedBy("values")
private val values = ArrayMap<CameraCharacteristics.Key<*>, Any?>()
+ // TODO: b/275575818 - this here may need a switch statement on the key
@Suppress("UNCHECKED_CAST")
override fun <T> get(key: Metadata.Key<T>): T? = metadata[key] as T?
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2MetadataCache.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2MetadataCache.kt
index 28b0805..e7187fe 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2MetadataCache.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2MetadataCache.kt
@@ -115,7 +115,12 @@
val cameraMetadata =
Camera2CameraMetadata(
- cameraId, redacted, characteristics, this, emptyMap(), cacheBlocklist
+ cameraId,
+ redacted,
+ characteristics,
+ this,
+ emptyMap(),
+ cacheBlocklist
)
Log.info {
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CameraPipeKeys.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CameraPipeKeys.kt
new file mode 100644
index 0000000..8d2008a
--- /dev/null
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CameraPipeKeys.kt
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+@file:RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
+
+package androidx.camera.camera2.pipe.compat
+
+import android.hardware.camera2.CameraExtensionCharacteristics
+import androidx.annotation.RequiresApi
+import androidx.camera.camera2.pipe.Metadata
+
+object CameraPipeKeys {
+
+ /**
+ * Keys for sessionParameters when creating Extension sessions.
+ */
+ val camera2ExtensionMode = Metadata.Key.create<Int>(
+ "androidx.camera.camera2.pipe.ExtensionMode"
+ )
+
+ /**
+ * [CAMERA2_EXTENSION_MODE_AUTOMATIC]: Automatic selection of particular extensions such
+ * as HDR or NIGHT depending on the current lighting and environment conditions. See
+ * [CameraExtensionCharacteristics.EXTENSION_AUTOMATIC]
+ */
+ const val CAMERA2_EXTENSION_MODE_AUTOMATIC = 0
+
+ /**
+ * [CAMERA2_EXTENSION_MODE_FACE_RETOUCH]: Smooth skin and apply other cosmetic effects to
+ * faces. See [CameraExtensionCharacteristics.EXTENSION_FACE_RETOUCH]
+ */
+ const val CAMERA2_EXTENSION_MODE_FACE_RETOUCH = 1
+
+ /**
+ * [CAMERA2_EXTENSION_MODE_BOKEH]: Blur certain regions of the final image thereby
+ * "enhancing" focus for all remaining non-blurred parts. See
+ * [CameraExtensionCharacteristics.EXTENSION_BOKEH]
+ */
+ const val CAMERA2_EXTENSION_MODE_BOKEH = 2
+
+ /**
+ * [CAMERA2_EXTENSION_MODE_HDR]: Enhance the dynamic range of the final image.
+ * See [CameraExtensionCharacteristics.EXTENSION_HDR]
+ */
+ const val CAMERA2_EXTENSION_MODE_HDR = 3
+
+ /**
+ * [CAMERA2_EXTENSION_MODE_NIGHT]: Suppress noise and improve the overall image
+ * quality under low light conditions. See [CameraExtensionCharacteristics.EXTENSION_NIGHT]
+ */
+ const val CAMERA2_EXTENSION_MODE_NIGHT = 4
+}
\ No newline at end of file
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CaptureSessionFactory.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CaptureSessionFactory.kt
index be00cd3..360d596 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CaptureSessionFactory.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CaptureSessionFactory.kt
@@ -257,7 +257,8 @@
CameraGraph.OperatingMode.NORMAL -> SessionConfigData.SESSION_TYPE_REGULAR
CameraGraph.OperatingMode.HIGH_SPEED -> SessionConfigData.SESSION_TYPE_HIGH_SPEED
else -> throw IllegalArgumentException(
- "Unsupported session mode: ${graphConfig.sessionMode}")
+ "Unsupported session mode: ${graphConfig.sessionMode}"
+ )
}
val outputs = buildOutputConfigurations(
@@ -417,7 +418,8 @@
when (graphConfig.sessionMode) {
CameraGraph.OperatingMode.EXTENSION -> SessionConfigData.SESSION_TYPE_EXTENSION
else -> throw IllegalArgumentException(
- "Unsupported session mode: ${graphConfig.sessionMode}")
+ "Unsupported session mode: ${graphConfig.sessionMode} for Extension CameraGraph"
+ )
}
val outputs = buildOutputConfigurations(
@@ -434,7 +436,18 @@
check(graphConfig.input == null) { "Reprocessing is not supported for Extensions" }
- // TODO(b/276971147): get extensionMode from metadata and create extensionCaptureCallback
+ val extensionMode = checkNotNull(
+ graphConfig.sessionParameters
+ [CameraPipeKeys.camera2ExtensionMode] as? Int
+ ) {
+ "The CameraPipeKeys.camera2ExtensionMode must be set in the sessionParameters of the " +
+ "CameraGraph.Config when creating an Extension CameraGraph."
+ }
+
+ // TODO: b/275575818 - check camera supports extension mode from metadata
+
+ val extensionSessionState = ExtensionSessionState(captureSessionState)
+
val sessionConfig =
SessionConfigData(
operatingMode,
@@ -443,7 +456,9 @@
threads.camera2Executor,
captureSessionState,
graphConfig.sessionTemplate.value,
- graphConfig.sessionParameters
+ graphConfig.sessionParameters,
+ extensionMode,
+ extensionSessionState
)
if (!cameraDevice.createExtensionSession(sessionConfig)) {
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/ExtensionSessionState.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/ExtensionSessionState.kt
new file mode 100644
index 0000000..c603507
--- /dev/null
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/ExtensionSessionState.kt
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2021 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
+ *
+ * http://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.
+ */
+
+@file:RequiresApi(31) // TODO(b/200306659): Remove and replace with annotation on package-info.java
+
+package androidx.camera.camera2.pipe.compat
+
+import android.hardware.camera2.CameraCaptureSession
+import android.hardware.camera2.CameraExtensionSession
+import androidx.annotation.RequiresApi
+
+/**
+ * This class acts as a state callback wrapper for a Camera2 [CameraCaptureSession].
+ * It is responsible for managing the lifecycle of the session and delegates the callback
+ * methods to an instance of [CaptureSessionState].
+ *
+ * The purpose of this class is to handle the configuration, finalization, and closure events of
+ * the [CameraExtensionSession]. It receives callbacks from the [CameraExtensionSessionWrapper]
+ * and delegates them to the corresponding methods in the provided [CaptureSessionState] instance.
+ *
+ * @param captureSessionState The [CaptureSessionState] instance to delegate the
+ * callback methods to.
+ */
+internal class ExtensionSessionState(private val captureSessionState: CaptureSessionState) :
+ CameraExtensionSessionWrapper.StateCallback {
+ override fun onConfigured(session: CameraExtensionSessionWrapper) {
+ captureSessionState.onConfigured(session as CameraCaptureSessionWrapper)
+ }
+
+ override fun onSessionFinalized() {
+ captureSessionState.onSessionFinalized()
+ }
+
+ override fun onConfigureFailed(session: CameraExtensionSessionWrapper) {
+ captureSessionState.onConfigureFailed(session as CameraCaptureSessionWrapper)
+ }
+
+ override fun onClosed(session: CameraExtensionSessionWrapper) {
+ captureSessionState.onClosed(session as CameraCaptureSessionWrapper)
+ }
+}
\ No newline at end of file
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/CameraGraphSessionImpl.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/CameraGraphSessionImpl.kt
index 22556f7..e39343f 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/CameraGraphSessionImpl.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/CameraGraphSessionImpl.kt
@@ -66,6 +66,7 @@
override fun stopRepeating() {
check(!closed.value) { "Cannot call stopRepeating on $this after close." }
graphProcessor.stopRepeating()
+ controller3A.onStopRepeating()
}
override fun close() {
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/Controller3A.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/Controller3A.kt
index f1360d3..9d3c45c 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/Controller3A.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/Controller3A.kt
@@ -104,7 +104,8 @@
CONTROL_AE_PRECAPTURE_TRIGGER to CONTROL_AE_PRECAPTURE_TRIGGER_START
)
- private val result3ASubmitFailed = Result3A(Status.SUBMIT_FAILED)
+ private val deferredResult3ASubmitFailed =
+ CompletableDeferred(Result3A(Status.SUBMIT_FAILED))
private val aeUnlockedStateList =
listOf(
@@ -145,6 +146,21 @@
afRegions: List<MeteringRectangle>? = null,
awbRegions: List<MeteringRectangle>? = null
): Deferred<Result3A> {
+ // If the GraphProcessor does not have a repeating request we should update the current
+ // parameters, but should not invalidate or trigger set a new listener.
+ if (!graphProcessor.hasRepeatingRequest()) {
+ graphState3A.update(
+ aeMode,
+ afMode,
+ awbMode,
+ flashMode,
+ aeRegions,
+ afRegions,
+ awbRegions
+ )
+ return deferredResult3ASubmitFailed
+ }
+
// Add the listener to a global pool of 3A listeners to monitor the state change to the
// desired one.
val listener = createListenerFor3AParams(aeMode, afMode, awbMode, flashMode)
@@ -154,6 +170,7 @@
// the next request it will apply the 3A parameters corresponding to the updated 3A state
// to the request.
graphState3A.update(aeMode, afMode, awbMode, flashMode, aeRegions, afRegions, awbRegions)
+
// Try submitting a new repeating request with the 3A parameters corresponding to the new
// 3A state and corresponding listeners.
graphProcessor.invalidate()
@@ -174,6 +191,10 @@
afRegions: List<MeteringRectangle>? = null,
awbRegions: List<MeteringRectangle>? = null
): Deferred<Result3A> {
+ // If the GraphProcessor does not have a repeating request, we should fail immediately.
+ if (!graphProcessor.hasRepeatingRequest()) {
+ return deferredResult3ASubmitFailed
+ }
// Add the listener to a global pool of 3A listeners to monitor the state change to the
// desired one.
val listener = createListenerFor3AParams(aeMode, afMode, awbMode)
@@ -189,7 +210,7 @@
if (!graphProcessor.trySubmit(extra3AParams)) {
graphListener3A.removeListener(listener)
- return CompletableDeferred(result3ASubmitFailed)
+ return deferredResult3ASubmitFailed
}
return listener.result
}
@@ -236,17 +257,24 @@
if (aeLockBehavior == null && afLockBehaviorSanitized == null && awbLockBehavior == null) {
return CompletableDeferred(Result3A(Status.OK, /* frameMetadata= */ null))
}
+
// Update the 3A state of camera graph with the given metering regions. If metering regions
// are given as null then they are ignored and the current metering regions continue to be
// applied in subsequent requests to the camera device.
graphState3A.update(aeRegions = aeRegions, afRegions = afRegions, awbRegions = awbRegions)
+ // If the GraphProcessor does not have a repeating request we should update the current
+ // parameters, but should not invalidate or trigger set a new listener.
+ if (!graphProcessor.hasRepeatingRequest()) {
+ return deferredResult3ASubmitFailed
+ }
+
// If we explicitly need to unlock af first before proceeding to lock it, we need to send
// a single request with TRIGGER = TRIGGER_CANCEL so that af can start a fresh scan.
if (afLockBehaviorSanitized.shouldUnlockAf()) {
debug { "lock3A - sending a request to unlock af first." }
if (!graphProcessor.trySubmit(parameterForAfTriggerCancel)) {
- return CompletableDeferred(result3ASubmitFailed)
+ return deferredResult3ASubmitFailed
}
}
@@ -329,13 +357,17 @@
if (!(ae == true || afSanitized == true || awb == true)) {
return CompletableDeferred(Result3A(Status.OK, /* frameMetadata= */ null))
}
+ // If the GraphProcessor does not have a repeating request, we should fail immediately.
+ if (!graphProcessor.hasRepeatingRequest()) {
+ return deferredResult3ASubmitFailed
+ }
// If we explicitly need to unlock af first before proceeding to lock it, we need to send
// a single request with TRIGGER = TRIGGER_CANCEL so that af can start a fresh scan.
if (afSanitized == true) {
debug { "unlock3A - sending a request to unlock af first." }
if (!graphProcessor.trySubmit(parameterForAfTriggerCancel)) {
debug { "unlock3A - request to unlock af failed, returning early." }
- return CompletableDeferred(result3ASubmitFailed)
+ return deferredResult3ASubmitFailed
}
}
@@ -361,6 +393,10 @@
frameLimit: Int = DEFAULT_FRAME_LIMIT,
timeLimitNs: Long = DEFAULT_TIME_LIMIT_NS
): Deferred<Result3A> {
+ // If the GraphProcessor does not have a repeating request, we should fail immediately.
+ if (!graphProcessor.hasRepeatingRequest()) {
+ return deferredResult3ASubmitFailed
+ }
val listener =
Result3AStateListenerImpl(
mapOf<CaptureResult.Key<*>, List<Any>>(
@@ -379,7 +415,7 @@
"returning early."
}
graphListener3A.removeListener(listener)
- return CompletableDeferred(result3ASubmitFailed)
+ return deferredResult3ASubmitFailed
}
graphProcessor.invalidate()
@@ -387,6 +423,10 @@
}
suspend fun unlock3APostCapture(): Deferred<Result3A> {
+ // If the GraphProcessor does not have a repeating request, we should fail immediately.
+ if (!graphProcessor.hasRepeatingRequest()) {
+ return deferredResult3ASubmitFailed
+ }
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
return unlock3APostCaptureAndroidMAndAbove()
}
@@ -406,7 +446,7 @@
)
) {
debug { "unlock3AForCapture - request to cancel af and lock ae as failed." }
- return CompletableDeferred(result3ASubmitFailed)
+ return deferredResult3ASubmitFailed
}
// Listener to monitor when we receive the capture result corresponding to the request
@@ -421,7 +461,7 @@
) {
debug { "unlock3AForCapture - request to unlock ae failed." }
graphListener3A.removeListener(listener)
- return CompletableDeferred(result3ASubmitFailed)
+ return deferredResult3ASubmitFailed
}
return listener.result
@@ -446,7 +486,7 @@
"unlock3APostCapture - request to reset af and ae precapture metering failed, " +
"returning early."
}
- return CompletableDeferred(result3ASubmitFailed)
+ return deferredResult3ASubmitFailed
}
// Sending a request with ae precapture trigger = cancel does not have any specific affect
@@ -474,6 +514,10 @@
return update3A(aeMode = desiredAeMode, flashMode = flashMode)
}
+ internal fun onStopRepeating() {
+ graphListener3A.onStopRepeating()
+ }
+
private suspend fun lock3ANow(
aeLockBehavior: Lock3ABehavior?,
afLockBehavior: Lock3ABehavior?,
@@ -529,7 +573,7 @@
// that one of the request in sequence of requests failed and the caller should
// unlock 3A to bring the 3A system to an initial state and then try again if they
// want to. The other option is to reset or restore the 3A state here.
- return CompletableDeferred(result3ASubmitFailed)
+ return deferredResult3ASubmitFailed
}
return resultForLocked!!
}
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/GraphProcessor.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/GraphProcessor.kt
index e195621..d368299 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/GraphProcessor.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/GraphProcessor.kt
@@ -62,8 +62,9 @@
* from 3A methods. It does this by setting the given parameters onto the current repeating
* request on a best-effort basis.
*
- * If the CameraGraph hasn't been started yet, or we haven't yet submitted a repeating request,
- * the method will suspend until we've met the criteria and only then submits the parameters.
+ * If the CameraGraph hasn't been started yet, but we do have a pending repeating request
+ * queued, the method will suspend until we have a submitted repeating request and only then
+ * submits the parameters.
*
* This behavior is required if users call 3A methods immediately after start. For example:
*
@@ -76,9 +77,11 @@
* ```
*
* Under this scenario, developers should reasonably expect things to work, and therefore
- * the implementation handles this on a best-effort basis for the developer.
+ * the implementation handles this on a best-effort basis for the developer. Please read
+ * b/263211462 for more context.
*
- * Please read b/263211462 for more context.
+ * However, if the CameraGraph does NOT have a current repeating request or any repeating
+ * requests queued up, the method will return false.
*/
suspend fun trySubmit(parameters: Map<*, Any?>): Boolean
@@ -86,6 +89,13 @@
fun stopRepeating()
/**
+ * Checks whether we have a repeating request in progress. Returns true when we have a repeating
+ * request already submitted or is being submitted. This is used to check whether we can try
+ * to submit parameters (used by 3A methods).
+ */
+ fun hasRepeatingRequest(): Boolean
+
+ /**
* Indicates that internal parameters may have changed, and that the repeating request should be
* updated as soon as possible.
*/
@@ -278,7 +288,12 @@
graphScope.launch(threads.lightweightDispatcher) { submitLoop() }
}
- /** Submit a request to the camera using only the current repeating request. */
+ /**
+ * Submit a request to the camera using only the current repeating request. If we don't have the
+ * current repeating request, and there are no repeating requests queued, this will return
+ * false. Otherwise, the method tries to submit the provided [parameters] and suspends until
+ * it finishes.
+ */
override suspend fun trySubmit(parameters: Map<*, Any?>): Boolean =
withContext(threads.lightweightDispatcher) {
val processor: GraphRequestProcessor?
@@ -291,6 +306,13 @@
processor = _requestProcessor
request = currentRepeatingRequest
+ // If there is no current repeating request and no repeating requests are in the
+ // queue (i.e., startRepeating wasn't called before the 3A methods), we should just
+ // fail immediately.
+ if (request == null && repeatingQueue.isEmpty()) {
+ return@withContext false
+ }
+
requiredParameters.putAllMetadata(parameters.toMutableMap())
graphState3A.writeTo(requiredParameters)
requiredParameters.putAllMetadata(cameraGraphConfig.requiredParameters)
@@ -319,6 +341,10 @@
}
}
+ override fun hasRepeatingRequest() = synchronized(lock) {
+ currentRepeatingRequest != null || repeatingQueue.isNotEmpty()
+ }
+
override fun invalidate() {
// Invalidate is only used for updates to internal state (listeners, parameters, etc) and
// should not (currently) attempt to resubmit the normal request queue.
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/Listener3A.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/Listener3A.kt
index c145ab2..de265be 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/Listener3A.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/Listener3A.kt
@@ -68,6 +68,12 @@
listeners.remove(listener)
}
+ internal fun onStopRepeating() {
+ for (listener in listeners) {
+ listener.onRequestSequenceStopped()
+ }
+ }
+
private fun updateListeners(requestNumber: RequestNumber, metadata: FrameMetadata) {
for (listener in listeners) {
if (listener.update(requestNumber, metadata)) {
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/Result3AStateListener.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/Result3AStateListener.kt
index 31888e5..06dc9ee 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/Result3AStateListener.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/Result3AStateListener.kt
@@ -44,6 +44,7 @@
internal interface Result3AStateListener {
fun onRequestSequenceCreated(requestNumber: RequestNumber)
fun update(requestNumber: RequestNumber, frameMetadata: FrameMetadata): Boolean
+ fun onRequestSequenceStopped()
}
internal class Result3AStateListenerImpl(
@@ -127,6 +128,10 @@
return true
}
+ override fun onRequestSequenceStopped() {
+ _result.complete(Result3A(Result3A.Status.SUBMIT_CANCELLED))
+ }
+
fun getDeferredResult(): Deferred<Result3A> {
return _result
}
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/CameraGraphSessionImplTest.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/CameraGraphSessionImplTest.kt
index f2c065e..6a79e09 100644
--- a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/CameraGraphSessionImplTest.kt
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/CameraGraphSessionImplTest.kt
@@ -16,19 +16,37 @@
package androidx.camera.camera2.pipe.graph
+import android.graphics.SurfaceTexture
+import android.hardware.camera2.CameraCharacteristics
+import android.hardware.camera2.CameraMetadata.CONTROL_AE_STATE_LOCKED
+import android.hardware.camera2.CaptureResult
import android.os.Build
+import android.view.Surface
+import androidx.camera.camera2.pipe.FrameNumber
+import androidx.camera.camera2.pipe.Lock3ABehavior
import androidx.camera.camera2.pipe.Request
+import androidx.camera.camera2.pipe.RequestNumber
+import androidx.camera.camera2.pipe.Result3A
+import androidx.camera.camera2.pipe.StreamId
import androidx.camera.camera2.pipe.core.TokenLockImpl
import androidx.camera.camera2.pipe.testing.FakeCameraMetadata
+import androidx.camera.camera2.pipe.testing.FakeCaptureSequenceProcessor
+import androidx.camera.camera2.pipe.testing.FakeFrameInfo
+import androidx.camera.camera2.pipe.testing.FakeFrameMetadata
import androidx.camera.camera2.pipe.testing.FakeGraphProcessor
+import androidx.camera.camera2.pipe.testing.FakeRequestMetadata
import androidx.camera.camera2.pipe.testing.RobolectricCameraPipeTestRunner
import androidx.testutils.assertThrows
import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.test.advanceUntilIdle
+import kotlinx.coroutines.test.runTest
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.annotation.Config
import org.robolectric.annotation.internal.DoNotInstrument
+@OptIn(ExperimentalCoroutinesApi::class)
@RunWith(RobolectricCameraPipeTestRunner::class)
@DoNotInstrument
@Config(minSdk = Build.VERSION_CODES.LOLLIPOP)
@@ -36,10 +54,21 @@
private val tokenLock = TokenLockImpl(1)
private val graphState3A = GraphState3A()
- private val graphProcessor = FakeGraphProcessor(graphState3A = graphState3A)
private val listener3A = Listener3A()
+ private val graphProcessor =
+ FakeGraphProcessor(graphState3A = graphState3A, defaultListeners = listOf(listener3A))
+ private val fakeCaptureSequenceProcessor = FakeCaptureSequenceProcessor()
+ private val fakeGraphRequestProcessor = GraphRequestProcessor.from(fakeCaptureSequenceProcessor)
private val controller3A =
- Controller3A(graphProcessor, FakeCameraMetadata(), graphState3A, listener3A)
+ Controller3A(
+ graphProcessor,
+ // Make sure our characteristics shows that it supports AF trigger.
+ FakeCameraMetadata(
+ characteristics = mapOf(
+ CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE to 1.0f
+ )
+ ), graphState3A, listener3A
+ )
private val session =
CameraGraphSessionImpl(tokenLock.acquireOrNull(1, 1)!!, graphProcessor, controller3A)
@@ -56,4 +85,106 @@
val result = assertThrows<IllegalStateException> { session.submit(Request(listOf())) }
result.hasMessageThat().contains("submit")
}
+
+ @Test
+ fun stopRepeatingShouldCancel3ARequests() = runTest {
+ val streamId = StreamId(1)
+ val surfaceTexture = SurfaceTexture(0).also { it.setDefaultBufferSize(640, 480) }
+ val surface = Surface(surfaceTexture)
+ graphProcessor.onGraphStarted(fakeGraphRequestProcessor)
+ fakeCaptureSequenceProcessor.surfaceMap = mapOf(streamId to surface)
+
+ session.startRepeating(Request(streams = listOf(StreamId(1))))
+ graphProcessor.invalidate()
+
+ val result = session.lock3A(aeLockBehavior = Lock3ABehavior.IMMEDIATE)
+
+ // Don't return any results to simulate that the 3A conditions haven't been met, but the
+ // app calls stopRepeating(). In which case, we should fail here with SUBMIT_CANCELLED.
+ session.stopRepeating()
+ assertThat(result.await().status).isEqualTo(Result3A.Status.SUBMIT_CANCELLED)
+ }
+
+ @Test
+ fun initiate3ARequestsShouldThrowWhenSessionIsClosed() = runTest {
+ graphProcessor.onGraphStarted(fakeGraphRequestProcessor)
+ session.startRepeating(Request(streams = listOf(StreamId(1))))
+ graphProcessor.invalidate()
+ advanceUntilIdle()
+
+ // Now close the session
+ session.close()
+ assertThrows<IllegalStateException> {
+ session.lock3A(aeLockBehavior = Lock3ABehavior.IMMEDIATE)
+ }
+ }
+
+ @Test
+ fun Lock3AShouldFailWhenInvokedBeforeStartRepeating() = runTest {
+ graphProcessor.onGraphStarted(fakeGraphRequestProcessor)
+
+ val afResult = session.lock3A(afLockBehavior = Lock3ABehavior.IMMEDIATE).await()
+ assertThat(afResult.status).isEqualTo(Result3A.Status.SUBMIT_FAILED)
+
+ val aeResult = session.lock3A(aeLockBehavior = Lock3ABehavior.IMMEDIATE).await()
+ assertThat(aeResult.status).isEqualTo(Result3A.Status.SUBMIT_FAILED)
+ }
+
+ @Test
+ fun Lock3AShouldSucceedWhenInvokedAfterStartRepeatingAndConverged() = runTest {
+ val streamId = StreamId(1)
+ val surfaceTexture = SurfaceTexture(0).also { it.setDefaultBufferSize(640, 480) }
+ val surface = Surface(surfaceTexture)
+ val requestMetadata = FakeRequestMetadata(requestNumber = RequestNumber(10))
+
+ graphProcessor.onGraphStarted(fakeGraphRequestProcessor)
+ fakeCaptureSequenceProcessor.surfaceMap = mapOf(streamId to surface)
+
+ session.startRepeating(Request(streams = listOf(streamId)))
+ graphProcessor.invalidate()
+ advanceUntilIdle()
+
+ val result = session.lock3A(aeLockBehavior = Lock3ABehavior.IMMEDIATE)
+ advanceUntilIdle()
+
+ listener3A.onTotalCaptureResult(
+ requestMetadata,
+ FrameNumber(10),
+ FakeFrameInfo(
+ metadata = FakeFrameMetadata(
+ resultMetadata =
+ mapOf(CaptureResult.CONTROL_AE_STATE to CONTROL_AE_STATE_LOCKED)
+ ),
+ requestMetadata = requestMetadata
+ )
+ )
+
+ assertThat(result.await().status).isEqualTo(Result3A.Status.OK)
+ surface.release()
+ surfaceTexture.release()
+ }
+
+ @Test
+ fun Lock3AShouldFailWhenInvokedAfterStartAndStopRepeating() = runTest {
+ val streamId = StreamId(1)
+ val surfaceTexture = SurfaceTexture(0).also { it.setDefaultBufferSize(640, 480) }
+ val surface = Surface(surfaceTexture)
+
+ graphProcessor.onGraphStarted(fakeGraphRequestProcessor)
+ fakeCaptureSequenceProcessor.surfaceMap = mapOf(streamId to surface)
+
+ session.startRepeating(Request(streams = listOf(streamId)))
+ graphProcessor.invalidate()
+ advanceUntilIdle()
+
+ // Stop repeating
+ session.stopRepeating()
+
+ // Now lock3A should fail immediately with SUBMIT_FAILED.
+ val result = session.lock3A(afLockBehavior = Lock3ABehavior.IMMEDIATE).await()
+ assertThat(result.status).isEqualTo(Result3A.Status.SUBMIT_FAILED)
+
+ surface.release()
+ surfaceTexture.release()
+ }
}
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/Controller3AForCaptureTest.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/Controller3AForCaptureTest.kt
index 2aa755f..1dd731f 100644
--- a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/Controller3AForCaptureTest.kt
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/Controller3AForCaptureTest.kt
@@ -26,6 +26,7 @@
import androidx.camera.camera2.pipe.Result3A
import androidx.camera.camera2.pipe.testing.FakeCameraMetadata
import androidx.camera.camera2.pipe.testing.FakeFrameMetadata
+import androidx.camera.camera2.pipe.testing.FakeGraphProcessor
import androidx.camera.camera2.pipe.testing.FakeRequestMetadata
import androidx.camera.camera2.pipe.testing.RobolectricCameraPipeTestRunner
import com.google.common.truth.Truth.assertThat
@@ -56,6 +57,20 @@
}
@Test
+ fun testLock3AForCaptureFailsImmediatelyWithoutRepeatingRequest() = runTest {
+ val graphProcessor2 = FakeGraphProcessor()
+ val controller3A =
+ Controller3A(
+ graphProcessor2,
+ FakeCameraMetadata(),
+ graphProcessor2.graphState3A,
+ listener3A
+ )
+ val result = controller3A.lock3AForCapture()
+ assertThat(result.await().status).isEqualTo(Result3A.Status.SUBMIT_FAILED)
+ }
+
+ @Test
fun testLock3AForCapture() = runTest {
val result = controller3A.lock3AForCapture()
assertThat(result.isCompleted).isFalse()
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/Controller3ALock3ATest.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/Controller3ALock3ATest.kt
index 8594455..4b049be 100644
--- a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/Controller3ALock3ATest.kt
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/Controller3ALock3ATest.kt
@@ -27,6 +27,7 @@
import androidx.camera.camera2.pipe.Result3A
import androidx.camera.camera2.pipe.testing.FakeCameraMetadata
import androidx.camera.camera2.pipe.testing.FakeFrameMetadata
+import androidx.camera.camera2.pipe.testing.FakeGraphProcessor
import androidx.camera.camera2.pipe.testing.FakeRequestMetadata
import androidx.camera.camera2.pipe.testing.RobolectricCameraPipeTestRunner
import com.google.common.truth.Truth.assertThat
@@ -68,6 +69,28 @@
}
@Test
+ fun testLock3AFailsImmediatelyWithoutRepeatingRequest() = runTest {
+ val graphProcessor2 = FakeGraphProcessor()
+ val controller3A =
+ Controller3A(graphProcessor2, fakeMetadata, graphProcessor2.graphState3A, listener3A)
+ val result = controller3A.lock3A(
+ afLockBehavior = Lock3ABehavior.IMMEDIATE,
+ aeRegions = listOf(MeteringRectangle(0, 0, 100, 200, 10))
+ )
+ assertThat(result.await().status).isEqualTo(Result3A.Status.SUBMIT_FAILED)
+ assertThat(graphProcessor2.graphState3A.aeRegions).isNotNull()
+ assertThat(graphProcessor2.graphState3A.aeRegions).containsExactly(
+ MeteringRectangle(
+ 0,
+ 0,
+ 100,
+ 200,
+ 10
+ )
+ )
+ }
+
+ @Test
fun testAfImmediateAeImmediate() = runTest {
val result =
controller3A.lock3A(
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/Controller3ASetTorchTest.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/Controller3ASetTorchTest.kt
index b5edf4f..c02c5a8 100644
--- a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/Controller3ASetTorchTest.kt
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/Controller3ASetTorchTest.kt
@@ -20,12 +20,14 @@
import android.hardware.camera2.CaptureResult
import android.os.Build
import androidx.camera.camera2.pipe.AeMode
+import androidx.camera.camera2.pipe.FlashMode
import androidx.camera.camera2.pipe.FrameNumber
import androidx.camera.camera2.pipe.RequestNumber
import androidx.camera.camera2.pipe.Result3A
import androidx.camera.camera2.pipe.TorchState
import androidx.camera.camera2.pipe.testing.FakeCameraMetadata
import androidx.camera.camera2.pipe.testing.FakeFrameMetadata
+import androidx.camera.camera2.pipe.testing.FakeGraphProcessor
import androidx.camera.camera2.pipe.testing.FakeRequestMetadata
import androidx.camera.camera2.pipe.testing.RobolectricCameraPipeTestRunner
import com.google.common.truth.Truth.assertThat
@@ -54,6 +56,21 @@
}
@Test
+ fun testSetTorchFailsImmediatelyWithoutRepeatingRequest() = runTest {
+ val graphProcessor2 = FakeGraphProcessor()
+ val controller3A =
+ Controller3A(
+ graphProcessor2,
+ FakeCameraMetadata(),
+ graphProcessor2.graphState3A,
+ listener3A
+ )
+ val result = controller3A.setTorch(TorchState.ON)
+ assertThat(result.await().status).isEqualTo(Result3A.Status.SUBMIT_FAILED)
+ assertThat(graphProcessor2.graphState3A.flashMode).isEqualTo(FlashMode.TORCH)
+ }
+
+ @Test
fun testSetTorchOn() = runTest {
val result = controller3A.setTorch(TorchState.ON)
assertThat(graphState3A.aeMode!!.value).isEqualTo(CaptureRequest.CONTROL_AE_MODE_ON)
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/Controller3ASubmit3ATest.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/Controller3ASubmit3ATest.kt
index 924c289..a2ed480 100644
--- a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/Controller3ASubmit3ATest.kt
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/Controller3ASubmit3ATest.kt
@@ -28,6 +28,7 @@
import androidx.camera.camera2.pipe.Result3A
import androidx.camera.camera2.pipe.testing.FakeCameraMetadata
import androidx.camera.camera2.pipe.testing.FakeFrameMetadata
+import androidx.camera.camera2.pipe.testing.FakeGraphProcessor
import androidx.camera.camera2.pipe.testing.FakeRequestMetadata
import androidx.camera.camera2.pipe.testing.RobolectricCameraPipeTestRunner
import com.google.common.truth.Truth.assertThat
@@ -56,6 +57,20 @@
}
@Test
+ fun testSubmit3AFailsImmediatelyWithoutRepeatingRequest() = runTest {
+ val graphProcessor2 = FakeGraphProcessor()
+ val controller3A =
+ Controller3A(
+ graphProcessor2,
+ FakeCameraMetadata(),
+ graphProcessor2.graphState3A,
+ listener3A
+ )
+ val result = controller3A.submit3A(afMode = AfMode.OFF)
+ assertThat(result.await().status).isEqualTo(Result3A.Status.SUBMIT_FAILED)
+ }
+
+ @Test
fun testSubmit3ADoesNotUpdateState3A() = runTest {
val result = controller3A.submit3A(afMode = AfMode.OFF)
assertThat(graphState3A.afMode?.value).isNotEqualTo(CaptureRequest.CONTROL_AF_MODE_OFF)
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/Controller3AUnlock3ATest.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/Controller3AUnlock3ATest.kt
index 77153c1..69dafc1 100644
--- a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/Controller3AUnlock3ATest.kt
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/Controller3AUnlock3ATest.kt
@@ -25,6 +25,7 @@
import androidx.camera.camera2.pipe.Result3A
import androidx.camera.camera2.pipe.testing.FakeCameraMetadata
import androidx.camera.camera2.pipe.testing.FakeFrameMetadata
+import androidx.camera.camera2.pipe.testing.FakeGraphProcessor
import androidx.camera.camera2.pipe.testing.FakeRequestMetadata
import androidx.camera.camera2.pipe.testing.RobolectricCameraPipeTestRunner
import com.google.common.truth.Truth.assertThat
@@ -63,6 +64,15 @@
}
@Test
+ fun testUnlock3AFailsImmediatelyWithoutRepeatingRequest() = runTest {
+ val graphProcessor2 = FakeGraphProcessor()
+ val controller3A =
+ Controller3A(graphProcessor2, fakeMetadata, graphProcessor2.graphState3A, listener3A)
+ val result = controller3A.unlock3A(ae = true)
+ assertThat(result.await().status).isEqualTo(Result3A.Status.SUBMIT_FAILED)
+ }
+
+ @Test
fun testUnlockAe() = runTest {
val unLock3AAsyncTask = async { controller3A.unlock3A(ae = true) }
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/Controller3AUpdate3ATest.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/Controller3AUpdate3ATest.kt
index 75e21ef..d9c4b67 100644
--- a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/Controller3AUpdate3ATest.kt
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/Controller3AUpdate3ATest.kt
@@ -56,6 +56,21 @@
Controller3A(graphProcessor, FakeCameraMetadata(), graphState3A, listener3A)
@Test
+ fun testUpdate3AFailsImmediatelyWithoutRepeatingRequest() = runTest {
+ val graphProcessor2 = FakeGraphProcessor()
+ val controller3A =
+ Controller3A(
+ graphProcessor2,
+ FakeCameraMetadata(),
+ graphProcessor2.graphState3A,
+ listener3A
+ )
+ val result = controller3A.update3A(afMode = AfMode.OFF)
+ assertThat(result.await().status).isEqualTo(Result3A.Status.SUBMIT_FAILED)
+ assertThat(graphProcessor2.graphState3A.afMode).isEqualTo(AfMode.OFF)
+ }
+
+ @Test
fun testUpdate3AUpdatesState3A() {
initGraphProcessor()
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/GraphProcessorTest.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/GraphProcessorTest.kt
index d95bfd2..21931e0 100644
--- a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/GraphProcessorTest.kt
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/GraphProcessorTest.kt
@@ -442,13 +442,16 @@
arrayListOf(globalListener)
)
+ // Submit a repeating request first to make sure we have one in progress.
+ graphProcessor.startRepeating(request1)
+ advanceUntilIdle()
+
val result = async {
graphProcessor.trySubmit(mapOf<CaptureRequest.Key<*>, Any>(CONTROL_AE_LOCK to false))
}
advanceUntilIdle()
graphProcessor.onGraphStarted(graphRequestProcessor1)
- graphProcessor.startRepeating(request1)
advanceUntilIdle()
assertThat(result.await()).isTrue()
@@ -465,6 +468,10 @@
arrayListOf(globalListener)
)
+ // Submit a repeating request first to make sure we have one in progress.
+ graphProcessor.startRepeating(request1)
+ advanceUntilIdle()
+
val result1 = async {
graphProcessor.trySubmit(mapOf<CaptureRequest.Key<*>, Any>(CONTROL_AE_LOCK to false))
}
@@ -477,9 +484,6 @@
graphProcessor.onGraphStarted(graphRequestProcessor1)
advanceUntilIdle()
- graphProcessor.startRepeating(request1)
- advanceUntilIdle()
-
val event1 = fakeProcessor1.nextEvent()
assertThat(event1.requestSequence?.repeating).isTrue()
val event2 = fakeProcessor1.nextEvent()
@@ -493,6 +497,25 @@
}
@Test
+ fun trySubmitShouldReturnFalseWhenNoRepeatingRequestIsQueued() = runTest {
+ val graphProcessor =
+ GraphProcessorImpl(
+ FakeThreads.fromTestScope(this),
+ FakeGraphConfigs.graphConfig,
+ graphState3A,
+ this,
+ arrayListOf(globalListener)
+ )
+
+ graphProcessor.onGraphStarted(graphRequestProcessor1)
+ advanceUntilIdle()
+
+ val result =
+ graphProcessor.trySubmit(mapOf<CaptureRequest.Key<*>, Any>(CONTROL_AE_LOCK to true))
+ assertThat(result).isFalse()
+ }
+
+ @Test
fun graphProcessorChangesGraphStateOnError() = runTest {
val graphProcessor =
GraphProcessorImpl(
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeGraphProcessor.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeGraphProcessor.kt
index 6f450b9..0541e1d 100644
--- a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeGraphProcessor.kt
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeGraphProcessor.kt
@@ -63,6 +63,8 @@
repeatingRequest = null
}
+ override fun hasRepeatingRequest() = repeatingRequest != null
+
override fun submit(request: Request) {
submit(listOf(request))
}
@@ -75,6 +77,8 @@
if (closed) {
return false
}
+ if (repeatingRequest == null) return false
+
val currProcessor = processor
val currRepeatingRequest = repeatingRequest
val requiredParameters = mutableMapOf<Any, Any?>()
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/UpdateCounting3AStateListener.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/UpdateCounting3AStateListener.kt
index 06ecbf1..eb81f6b 100644
--- a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/UpdateCounting3AStateListener.kt
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/UpdateCounting3AStateListener.kt
@@ -35,4 +35,6 @@
updateCount++
return listener.update(requestNumber, frameMetadata)
}
+
+ override fun onRequestSequenceStopped() {}
}
diff --git a/camera/camera-camera2/api/current.txt b/camera/camera-camera2/api/current.txt
index 1459b2c..ea5cacc 100644
--- a/camera/camera-camera2/api/current.txt
+++ b/camera/camera-camera2/api/current.txt
@@ -7,3 +7,48 @@
}
+package androidx.camera.camera2.interop {
+
+ @RequiresApi(21) @androidx.camera.camera2.interop.ExperimentalCamera2Interop public final class Camera2CameraControl {
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> addCaptureRequestOptions(androidx.camera.camera2.interop.CaptureRequestOptions);
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> clearCaptureRequestOptions();
+ method public static androidx.camera.camera2.interop.Camera2CameraControl from(androidx.camera.core.CameraControl);
+ method public androidx.camera.camera2.interop.CaptureRequestOptions getCaptureRequestOptions();
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setCaptureRequestOptions(androidx.camera.camera2.interop.CaptureRequestOptions);
+ }
+
+ @RequiresApi(21) @androidx.camera.camera2.interop.ExperimentalCamera2Interop public final class Camera2CameraInfo {
+ method public static androidx.camera.camera2.interop.Camera2CameraInfo from(androidx.camera.core.CameraInfo);
+ method public <T> T? getCameraCharacteristic(android.hardware.camera2.CameraCharacteristics.Key<T!>);
+ method public String getCameraId();
+ }
+
+ @RequiresApi(21) @androidx.camera.camera2.interop.ExperimentalCamera2Interop public final class Camera2Interop {
+ }
+
+ @RequiresApi(21) public static final class Camera2Interop.Extender<T> {
+ ctor public Camera2Interop.Extender(androidx.camera.core.ExtendableBuilder<T!>);
+ method public <ValueT> androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT!>, ValueT);
+ method public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setDeviceStateCallback(android.hardware.camera2.CameraDevice.StateCallback);
+ method @RequiresApi(28) public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setPhysicalCameraId(String);
+ method public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setSessionCaptureCallback(android.hardware.camera2.CameraCaptureSession.CaptureCallback);
+ method public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setSessionStateCallback(android.hardware.camera2.CameraCaptureSession.StateCallback);
+ method @RequiresApi(33) public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setStreamUseCase(long);
+ }
+
+ @RequiresApi(21) @androidx.camera.camera2.interop.ExperimentalCamera2Interop public class CaptureRequestOptions {
+ method public <ValueT> ValueT? getCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT!>);
+ }
+
+ @RequiresApi(21) public static final class CaptureRequestOptions.Builder implements androidx.camera.core.ExtendableBuilder<androidx.camera.camera2.interop.CaptureRequestOptions> {
+ ctor public CaptureRequestOptions.Builder();
+ method public androidx.camera.camera2.interop.CaptureRequestOptions build();
+ method public <ValueT> androidx.camera.camera2.interop.CaptureRequestOptions.Builder clearCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT!>);
+ method public <ValueT> androidx.camera.camera2.interop.CaptureRequestOptions.Builder setCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT!>, ValueT);
+ }
+
+ @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalCamera2Interop {
+ }
+
+}
+
diff --git a/camera/camera-camera2/api/public_plus_experimental_current.txt b/camera/camera-camera2/api/public_plus_experimental_current.txt
deleted file mode 100644
index ea5cacc..0000000
--- a/camera/camera-camera2/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,54 +0,0 @@
-// Signature format: 4.0
-package androidx.camera.camera2 {
-
- @RequiresApi(21) public final class Camera2Config {
- method public static androidx.camera.core.CameraXConfig defaultConfig();
- }
-
-}
-
-package androidx.camera.camera2.interop {
-
- @RequiresApi(21) @androidx.camera.camera2.interop.ExperimentalCamera2Interop public final class Camera2CameraControl {
- method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> addCaptureRequestOptions(androidx.camera.camera2.interop.CaptureRequestOptions);
- method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> clearCaptureRequestOptions();
- method public static androidx.camera.camera2.interop.Camera2CameraControl from(androidx.camera.core.CameraControl);
- method public androidx.camera.camera2.interop.CaptureRequestOptions getCaptureRequestOptions();
- method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setCaptureRequestOptions(androidx.camera.camera2.interop.CaptureRequestOptions);
- }
-
- @RequiresApi(21) @androidx.camera.camera2.interop.ExperimentalCamera2Interop public final class Camera2CameraInfo {
- method public static androidx.camera.camera2.interop.Camera2CameraInfo from(androidx.camera.core.CameraInfo);
- method public <T> T? getCameraCharacteristic(android.hardware.camera2.CameraCharacteristics.Key<T!>);
- method public String getCameraId();
- }
-
- @RequiresApi(21) @androidx.camera.camera2.interop.ExperimentalCamera2Interop public final class Camera2Interop {
- }
-
- @RequiresApi(21) public static final class Camera2Interop.Extender<T> {
- ctor public Camera2Interop.Extender(androidx.camera.core.ExtendableBuilder<T!>);
- method public <ValueT> androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT!>, ValueT);
- method public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setDeviceStateCallback(android.hardware.camera2.CameraDevice.StateCallback);
- method @RequiresApi(28) public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setPhysicalCameraId(String);
- method public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setSessionCaptureCallback(android.hardware.camera2.CameraCaptureSession.CaptureCallback);
- method public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setSessionStateCallback(android.hardware.camera2.CameraCaptureSession.StateCallback);
- method @RequiresApi(33) public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setStreamUseCase(long);
- }
-
- @RequiresApi(21) @androidx.camera.camera2.interop.ExperimentalCamera2Interop public class CaptureRequestOptions {
- method public <ValueT> ValueT? getCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT!>);
- }
-
- @RequiresApi(21) public static final class CaptureRequestOptions.Builder implements androidx.camera.core.ExtendableBuilder<androidx.camera.camera2.interop.CaptureRequestOptions> {
- ctor public CaptureRequestOptions.Builder();
- method public androidx.camera.camera2.interop.CaptureRequestOptions build();
- method public <ValueT> androidx.camera.camera2.interop.CaptureRequestOptions.Builder clearCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT!>);
- method public <ValueT> androidx.camera.camera2.interop.CaptureRequestOptions.Builder setCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT!>, ValueT);
- }
-
- @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalCamera2Interop {
- }
-
-}
-
diff --git a/camera/camera-camera2/api/restricted_current.txt b/camera/camera-camera2/api/restricted_current.txt
index 1459b2c..ea5cacc 100644
--- a/camera/camera-camera2/api/restricted_current.txt
+++ b/camera/camera-camera2/api/restricted_current.txt
@@ -7,3 +7,48 @@
}
+package androidx.camera.camera2.interop {
+
+ @RequiresApi(21) @androidx.camera.camera2.interop.ExperimentalCamera2Interop public final class Camera2CameraControl {
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> addCaptureRequestOptions(androidx.camera.camera2.interop.CaptureRequestOptions);
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> clearCaptureRequestOptions();
+ method public static androidx.camera.camera2.interop.Camera2CameraControl from(androidx.camera.core.CameraControl);
+ method public androidx.camera.camera2.interop.CaptureRequestOptions getCaptureRequestOptions();
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setCaptureRequestOptions(androidx.camera.camera2.interop.CaptureRequestOptions);
+ }
+
+ @RequiresApi(21) @androidx.camera.camera2.interop.ExperimentalCamera2Interop public final class Camera2CameraInfo {
+ method public static androidx.camera.camera2.interop.Camera2CameraInfo from(androidx.camera.core.CameraInfo);
+ method public <T> T? getCameraCharacteristic(android.hardware.camera2.CameraCharacteristics.Key<T!>);
+ method public String getCameraId();
+ }
+
+ @RequiresApi(21) @androidx.camera.camera2.interop.ExperimentalCamera2Interop public final class Camera2Interop {
+ }
+
+ @RequiresApi(21) public static final class Camera2Interop.Extender<T> {
+ ctor public Camera2Interop.Extender(androidx.camera.core.ExtendableBuilder<T!>);
+ method public <ValueT> androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT!>, ValueT);
+ method public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setDeviceStateCallback(android.hardware.camera2.CameraDevice.StateCallback);
+ method @RequiresApi(28) public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setPhysicalCameraId(String);
+ method public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setSessionCaptureCallback(android.hardware.camera2.CameraCaptureSession.CaptureCallback);
+ method public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setSessionStateCallback(android.hardware.camera2.CameraCaptureSession.StateCallback);
+ method @RequiresApi(33) public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setStreamUseCase(long);
+ }
+
+ @RequiresApi(21) @androidx.camera.camera2.interop.ExperimentalCamera2Interop public class CaptureRequestOptions {
+ method public <ValueT> ValueT? getCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT!>);
+ }
+
+ @RequiresApi(21) public static final class CaptureRequestOptions.Builder implements androidx.camera.core.ExtendableBuilder<androidx.camera.camera2.interop.CaptureRequestOptions> {
+ ctor public CaptureRequestOptions.Builder();
+ method public androidx.camera.camera2.interop.CaptureRequestOptions build();
+ method public <ValueT> androidx.camera.camera2.interop.CaptureRequestOptions.Builder clearCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT!>);
+ method public <ValueT> androidx.camera.camera2.interop.CaptureRequestOptions.Builder setCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT!>, ValueT);
+ }
+
+ @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalCamera2Interop {
+ }
+
+}
+
diff --git a/camera/camera-camera2/build.gradle b/camera/camera-camera2/build.gradle
index 8c0100e..b4ad3b0 100644
--- a/camera/camera-camera2/build.gradle
+++ b/camera/camera-camera2/build.gradle
@@ -88,7 +88,7 @@
}
androidx {
- name = "Jetpack Camera Library Camera2 Implementation/Extensions"
+ name = "Camera2"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2019"
description = "Camera2 implementation and extensions for the Jetpack Camera Library, a " +
diff --git a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/CaptureSessionTest.java b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/CaptureSessionTest.java
index 505da1e..2648c23 100644
--- a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/CaptureSessionTest.java
+++ b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/CaptureSessionTest.java
@@ -26,6 +26,8 @@
import static android.hardware.DataSpace.TRANSFER_UNSPECIFIED;
import static android.os.Build.VERSION.SDK_INT;
+import static androidx.camera.core.DynamicRange.HLG_10_BIT;
+
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
@@ -152,8 +154,6 @@
@SdkSuppress(minSdkVersion = 21)
@RequiresApi(21)
public final class CaptureSessionTest {
- private static final DynamicRange DYNAMIC_RANGE_HLG10 =
- new DynamicRange(DynamicRange.FORMAT_HLG, DynamicRange.BIT_DEPTH_10_BIT);
// Enumerate possible SDR transfer functions. This may need to be updated if more transfer
// functions are added to the DataSpace class.
@@ -385,7 +385,7 @@
public void openCaptureSessionWithHlgDynamicRange()
throws ExecutionException, InterruptedException, TimeoutException {
openCaptureSessionAndVerifyDynamicRangeApplied(
- DYNAMIC_RANGE_HLG10,
+ HLG_10_BIT,
Collections.singleton(STANDARD_BT2020),
Collections.singleton(TRANSFER_HLG));
}
diff --git a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/ProcessingCaptureSessionTest.kt b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/ProcessingCaptureSessionTest.kt
index 0a26bfb..201f1c5 100644
--- a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/ProcessingCaptureSessionTest.kt
+++ b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/ProcessingCaptureSessionTest.kt
@@ -281,6 +281,29 @@
).isTrue()
}
+ @Test
+ fun setSessionConfigWithoutSurface_stopPreviewFrame(): Unit = runBlocking(Dispatchers.Main) {
+ // Arrange
+ val cameraDevice = cameraDeviceHolder.get()!!
+ val captureSession = createProcessingCaptureSession()
+ captureSession.sessionConfig =
+ sessionConfigParameters.getActiveSessionConfigForRepeating()
+ captureSession.open(
+ sessionConfigParameters.getSessionConfigForOpen(), cameraDevice,
+ captureSessionOpenerBuilder.build()
+ ).awaitWithTimeout(3000)
+ sessionConfigParameters.assertPreviewImageReceived()
+
+ // Act. set SessionConfig without the surface.
+ captureSession.sessionConfig =
+ sessionConfigParameters.getActiveSessionConfigForRepeating(
+ includePreviewSurface = false
+ )
+
+ // Assert: ensure stopRepeating is invoked.
+ sessionProcessor.assertStopRepeatingInvoked()
+ }
+
private fun areParametersConfigIdentical(config1: Config, config2: Config): Boolean {
val options1 = CaptureRequestOptions.Builder.from(config1).build()
val options2 = CaptureRequestOptions.Builder.from(config2).build()
@@ -824,8 +847,13 @@
return sessionBuilder.build()
}
- fun getActiveSessionConfigForRepeating(): SessionConfig {
+ fun getActiveSessionConfigForRepeating(
+ includePreviewSurface: Boolean = true
+ ): SessionConfig {
return SessionConfig.Builder().apply {
+ if (includePreviewSurface) {
+ addSurface(previewOutputDeferrableSurface)
+ }
setImplementationOptions(
CaptureRequestOptions.Builder()
.setCaptureRequestOption(
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2CameraImpl.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2CameraImpl.java
index 1612a15..e820f5c7 100644
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2CameraImpl.java
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/Camera2CameraImpl.java
@@ -652,9 +652,16 @@
@Override
public void onUseCaseReset(@NonNull UseCase useCase) {
Preconditions.checkNotNull(useCase);
- String useCaseId = getUseCaseId(useCase);
SessionConfig sessionConfig = useCase.getSessionConfig();
UseCaseConfig<?> useCaseConfig = useCase.getCurrentConfig();
+ resetUseCase(getUseCaseId(useCase), sessionConfig, useCaseConfig);
+ }
+
+ private void resetUseCase(
+ @NonNull String useCaseId,
+ @NonNull SessionConfig sessionConfig,
+ @NonNull UseCaseConfig<?> useCaseConfig
+ ) {
mExecutor.execute(() -> {
debugLog("Use case " + useCaseId + " RESET");
mUseCaseAttachState.updateUseCase(useCaseId, sessionConfig, useCaseConfig);
@@ -976,7 +983,20 @@
if (mMeteringRepeatingSession == null) {
mMeteringRepeatingSession = new MeteringRepeatingSession(
mCameraInfoInternal.getCameraCharacteristicsCompat(),
- mDisplayInfoManager);
+ mDisplayInfoManager,
+ () -> {
+ if (!isMeteringRepeatingAttached()) {
+ return;
+ }
+
+ SessionConfig sessionConfigMeteringRepeating =
+ mMeteringRepeatingSession.getSessionConfig();
+ UseCaseConfig<?> useCaseConfig =
+ mMeteringRepeatingSession.getUseCaseConfig();
+
+ resetUseCase(getMeteringRepeatingId(mMeteringRepeatingSession),
+ sessionConfigMeteringRepeating, useCaseConfig);
+ });
}
addMeteringRepeating();
} else {
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/DynamicRangeResolver.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/DynamicRangeResolver.java
index dc6a497..cb3d0cf 100644
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/DynamicRangeResolver.java
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/DynamicRangeResolver.java
@@ -19,9 +19,9 @@
import static android.hardware.camera2.CameraCharacteristics.REQUEST_RECOMMENDED_TEN_BIT_DYNAMIC_RANGE_PROFILE;
import static androidx.camera.core.DynamicRange.BIT_DEPTH_UNSPECIFIED;
-import static androidx.camera.core.DynamicRange.FORMAT_HDR_UNSPECIFIED;
-import static androidx.camera.core.DynamicRange.FORMAT_SDR;
-import static androidx.camera.core.DynamicRange.FORMAT_UNSPECIFIED;
+import static androidx.camera.core.DynamicRange.ENCODING_HDR_UNSPECIFIED;
+import static androidx.camera.core.DynamicRange.ENCODING_SDR;
+import static androidx.camera.core.DynamicRange.ENCODING_UNSPECIFIED;
import android.hardware.camera2.CameraCharacteristics;
import android.os.Build;
@@ -56,8 +56,6 @@
@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
final class DynamicRangeResolver {
private static final String TAG = "DynamicRangeResolver";
- private static final DynamicRange DYNAMIC_RANGE_HLG10 =
- new DynamicRange(DynamicRange.FORMAT_HLG, DynamicRange.BIT_DEPTH_10_BIT);
private final CameraCharacteristicsCompat mCharacteristics;
private final DynamicRangesCompat mDynamicRangesInfo;
private final boolean mIs10BitSupported;
@@ -120,7 +118,7 @@
// We want to resolve and validate dynamic ranges in the following order:
// 1. First validate fully defined dynamic ranges. No resolving is required here.
// 2. Resolve and validate partially defined dynamic ranges, such as HDR_UNSPECIFIED or
- // dynamic ranges with concrete formats but BIT_DEPTH_UNSPECIFIED. We can now potentially
+ // dynamic ranges with concrete encodings but BIT_DEPTH_UNSPECIFIED. We can now potentially
// infer a dynamic range based on constraints of the fully defined dynamic ranges or
// the list of supported HDR dynamic ranges.
// 3. Finally, resolve and validate UNSPECIFIED dynamic ranges. These will resolve
@@ -207,7 +205,7 @@
* <p>This uses existing fully-specified dynamic ranges, new fully-specified dynamic ranges,
* dynamic range constraints and the list of supported dynamic ranges to exhaustively search
* for a dynamic range if the requested dynamic range is not fully specified, i.e., it has an
- * UNSPECIFIED format or UNSPECIFIED bitrate.
+ * UNSPECIFIED encoding or UNSPECIFIED bitrate.
*
* <p>Any dynamic range returned will be validated to work according to the constraints and
* supported dynamic ranges provided.
@@ -234,9 +232,9 @@
// Explicitly handle the case of SDR with unspecified bit depth.
// SDR is only supported as 8-bit.
- int requestedFormat = requestedDynamicRange.getFormat();
+ int requestedEncoding = requestedDynamicRange.getEncoding();
int requestedBitDepth = requestedDynamicRange.getBitDepth();
- if (requestedFormat == FORMAT_SDR && requestedBitDepth == BIT_DEPTH_UNSPECIFIED) {
+ if (requestedEncoding == ENCODING_SDR && requestedBitDepth == BIT_DEPTH_UNSPECIFIED) {
if (combinedConstraints.contains(DynamicRange.SDR)) {
return DynamicRange.SDR;
}
@@ -279,9 +277,9 @@
return DynamicRange.SDR;
}
- // For unspecified HDR formats (10-bit or unspecified bit depth), we have a
- // couple options: the device recommended 10-bit format or the mandated HLG format.
- if (requestedFormat == FORMAT_HDR_UNSPECIFIED && (
+ // For unspecified HDR encodings (10-bit or unspecified bit depth), we have a
+ // couple options: the device recommended 10-bit encoding or the mandated HLG encoding.
+ if (requestedEncoding == ENCODING_HDR_UNSPECIFIED && (
requestedBitDepth == DynamicRange.BIT_DEPTH_10_BIT
|| requestedBitDepth == BIT_DEPTH_UNSPECIFIED)) {
Set<DynamicRange> hdrDefaultRanges = new LinkedHashSet<>();
@@ -296,7 +294,7 @@
}
// Attempt to fall back to HLG since it is a mandated required 10-bit
// dynamic range.
- hdrDefaultRanges.add(DYNAMIC_RANGE_HLG10);
+ hdrDefaultRanges.add(DynamicRange.HLG_10_BIT);
resolvedDynamicRange = findSupportedHdrMatch(requestedDynamicRange,
hdrDefaultRanges, combinedConstraints);
if (resolvedDynamicRange != null) {
@@ -384,18 +382,18 @@
@NonNull Collection<DynamicRange> fullySpecifiedCandidateRanges,
@NonNull Set<DynamicRange> constraints) {
// SDR can never match with HDR
- if (rangeToMatch.getFormat() == FORMAT_SDR) {
+ if (rangeToMatch.getEncoding() == ENCODING_SDR) {
return null;
}
for (DynamicRange candidateRange : fullySpecifiedCandidateRanges) {
Preconditions.checkNotNull(candidateRange,
"Fully specified DynamicRange cannot be null.");
- int candidateFormat = candidateRange.getFormat();
+ int candidateEncoding = candidateRange.getEncoding();
Preconditions.checkState(isFullySpecified(candidateRange),
- "Fully specified DynamicRange must have fully defined format.");
- if (candidateFormat == FORMAT_SDR) {
- // Only consider HDR formats
+ "Fully specified DynamicRange must have fully defined encoding.");
+ if (candidateEncoding == ENCODING_SDR) {
+ // Only consider HDR encodings
continue;
}
@@ -426,30 +424,30 @@
}
/**
- * Returns {@code true} if the dynamic range is FORMAT_UNSPECIFIED and BIT_DEPTH_UNSPECIFIED.
+ * Returns {@code true} if the dynamic range is ENCODING_UNSPECIFIED and BIT_DEPTH_UNSPECIFIED.
*/
private static boolean isFullyUnspecified(@NonNull DynamicRange dynamicRange) {
return Objects.equals(dynamicRange, DynamicRange.UNSPECIFIED);
}
/**
- * Returns {@code true} if both the format and bit depth are not unspecified types.
+ * Returns {@code true} if both the encoding and bit depth are not unspecified types.
*/
private static boolean isFullySpecified(@NonNull DynamicRange dynamicRange) {
- return dynamicRange.getFormat() != FORMAT_UNSPECIFIED
- && dynamicRange.getFormat() != FORMAT_HDR_UNSPECIFIED
+ return dynamicRange.getEncoding() != ENCODING_UNSPECIFIED
+ && dynamicRange.getEncoding() != ENCODING_HDR_UNSPECIFIED
&& dynamicRange.getBitDepth() != BIT_DEPTH_UNSPECIFIED;
}
/**
- * Returns {@code true} if the dynamic range has an unspecified HDR format, a concrete
- * format with unspecified bit depth, or a concrete bit depth.
+ * Returns {@code true} if the dynamic range has an unspecified HDR encoding, a concrete
+ * encoding with unspecified bit depth, or a concrete bit depth.
*/
private static boolean isPartiallySpecified(@NonNull DynamicRange dynamicRange) {
- return dynamicRange.getFormat() == FORMAT_HDR_UNSPECIFIED || (
- dynamicRange.getFormat() != FORMAT_UNSPECIFIED
+ return dynamicRange.getEncoding() == ENCODING_HDR_UNSPECIFIED || (
+ dynamicRange.getEncoding() != ENCODING_UNSPECIFIED
&& dynamicRange.getBitDepth() == BIT_DEPTH_UNSPECIFIED) || (
- dynamicRange.getFormat() == FORMAT_UNSPECIFIED
+ dynamicRange.getEncoding() == ENCODING_UNSPECIFIED
&& dynamicRange.getBitDepth() != BIT_DEPTH_UNSPECIFIED);
}
@@ -489,14 +487,14 @@
@NonNull DynamicRange fullySpecifiedRange) {
Preconditions.checkState(isFullySpecified(fullySpecifiedRange), "Fully specified range is"
+ " not actually fully specified.");
- if (testRange.getFormat() == FORMAT_HDR_UNSPECIFIED
- && fullySpecifiedRange.getFormat() == FORMAT_SDR) {
+ if (testRange.getEncoding() == ENCODING_HDR_UNSPECIFIED
+ && fullySpecifiedRange.getEncoding() == ENCODING_SDR) {
return false;
}
- if (testRange.getFormat() != FORMAT_HDR_UNSPECIFIED
- && testRange.getFormat() != FORMAT_UNSPECIFIED
- && testRange.getFormat() != fullySpecifiedRange.getFormat()) {
+ if (testRange.getEncoding() != ENCODING_HDR_UNSPECIFIED
+ && testRange.getEncoding() != ENCODING_UNSPECIFIED
+ && testRange.getEncoding() != fullySpecifiedRange.getEncoding()) {
return false;
}
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/MeteringRepeatingSession.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/MeteringRepeatingSession.java
index 86f8333..11782c2 100644
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/MeteringRepeatingSession.java
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/MeteringRepeatingSession.java
@@ -57,31 +57,50 @@
private DeferrableSurface mDeferrableSurface;
@NonNull
- private final SessionConfig mSessionConfig;
+ private SessionConfig mSessionConfig;
@NonNull
private final MeteringRepeatingConfig mConfigWithDefaults;
@NonNull
+ private final Size mMeteringRepeatingSize;
+
+ @NonNull
private final SupportedRepeatingSurfaceSize mSupportedRepeatingSurfaceSize =
new SupportedRepeatingSurfaceSize();
+ interface SurfaceResetCallback {
+ void onSurfaceReset();
+ }
+
+ @Nullable
+ private final SurfaceResetCallback mSurfaceResetCallback;
+
/** Creates a new instance of a {@link MeteringRepeatingSession}. */
MeteringRepeatingSession(@NonNull CameraCharacteristicsCompat cameraCharacteristicsCompat,
- @NonNull DisplayInfoManager displayInfoManager) {
+ @NonNull DisplayInfoManager displayInfoManager,
+ @Nullable SurfaceResetCallback surfaceResetCallback) {
mConfigWithDefaults = new MeteringRepeatingConfig();
+ mSurfaceResetCallback = surfaceResetCallback;
+ mMeteringRepeatingSize = getProperPreviewSize(
+ cameraCharacteristicsCompat, displayInfoManager);
+ Logger.d(TAG, "MeteringSession SurfaceTexture size: " + mMeteringRepeatingSize);
+
+ mSessionConfig = createSessionConfig();
+ }
+
+ @NonNull
+ SessionConfig createSessionConfig() {
// Create the metering DeferrableSurface
SurfaceTexture surfaceTexture = new SurfaceTexture(0);
- Size meteringSurfaceSize = getProperPreviewSize(
- cameraCharacteristicsCompat, displayInfoManager);
- Logger.d(TAG, "MeteringSession SurfaceTexture size: " + meteringSurfaceSize);
- surfaceTexture.setDefaultBufferSize(meteringSurfaceSize.getWidth(),
- meteringSurfaceSize.getHeight());
+
+ surfaceTexture.setDefaultBufferSize(mMeteringRepeatingSize.getWidth(),
+ mMeteringRepeatingSize.getHeight());
Surface surface = new Surface(surfaceTexture);
SessionConfig.Builder builder = SessionConfig.Builder.createFrom(mConfigWithDefaults,
- meteringSurfaceSize);
+ mMeteringRepeatingSize);
builder.setTemplateType(CameraDevice.TEMPLATE_PREVIEW);
mDeferrableSurface = new ImmediateSurface(surface);
@@ -102,7 +121,14 @@
builder.addSurface(mDeferrableSurface);
- mSessionConfig = builder.build();
+ builder.addErrorListener((sessionConfig, error) -> {
+ mSessionConfig = createSessionConfig();
+ if (mSurfaceResetCallback != null) {
+ mSurfaceResetCallback.onSurfaceReset();
+ }
+ });
+
+ return builder.build();
}
@NonNull
@@ -200,5 +226,3 @@
}
}
-
-
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/ProcessingCaptureSession.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/ProcessingCaptureSession.java
index da5e717..5c9eb4b 100644
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/ProcessingCaptureSession.java
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/ProcessingCaptureSession.java
@@ -173,12 +173,6 @@
"Surface closed", deferrableSurface));
}
- try {
- DeferrableSurfaces.incrementAll(mOutputSurfaces);
- } catch (DeferrableSurface.SurfaceClosedException e) {
- return Futures.immediateFailedFuture(e);
- }
-
OutputSurface previewOutputSurface = null;
OutputSurface captureOutputSurface = null;
OutputSurface analysisOutputSurface = null;
@@ -210,13 +204,24 @@
}
mProcessorState = ProcessorState.SESSION_INITIALIZED;
+ try {
+ DeferrableSurfaces.incrementAll(mOutputSurfaces);
+ } catch (DeferrableSurface.SurfaceClosedException e) {
+ return Futures.immediateFailedFuture(e);
+ }
Logger.w(TAG, "== initSession (id=" + mInstanceId + ")");
- mProcessorSessionConfig = mSessionProcessor.initSession(
- mCamera2CameraInfoImpl,
- previewOutputSurface,
- captureOutputSurface,
- analysisOutputSurface
- );
+ try {
+ mProcessorSessionConfig = mSessionProcessor.initSession(
+ mCamera2CameraInfoImpl,
+ previewOutputSurface,
+ captureOutputSurface,
+ analysisOutputSurface
+ );
+ } catch (Throwable e) {
+ // Ensure we decrement the output surfaces if initSession failed.
+ DeferrableSurfaces.decrementAll(mOutputSurfaces);
+ throw e;
+ }
// DecrementAll the output surfaces when ProcessorSurface
// terminates.
@@ -571,10 +576,28 @@
CaptureRequestOptions.Builder.from(sessionConfig.getImplementationOptions())
.build();
updateParameters(mSessionOptions, mStillCaptureOptions);
- mSessionProcessor.startRepeating(mSessionProcessorCaptureCallback);
+
+ // We can't disable only preview stream but enable ImageAnalysis in Extensions.
+ // The best we can do is, if the preview stream is not in repeating request,
+ // stop the repeating request totally. This is needed to stop the preview when
+ // Preview surfaceProvider is set to null.
+ if (!hasPreviewSurface(sessionConfig.getRepeatingCaptureConfig())) {
+ mSessionProcessor.stopRepeating();
+ } else {
+ mSessionProcessor.startRepeating(mSessionProcessorCaptureCallback);
+ }
}
}
+ private boolean hasPreviewSurface(CaptureConfig captureConfig) {
+ for (DeferrableSurface surface : captureConfig.getSurfaces()) {
+ if (Objects.equals(surface.getContainerClass(), Preview.class)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
@Override
public void setStreamUseCaseMap(@NonNull Map<DeferrableSurface, Long> streamUseCaseMap) {
// No-op
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/StreamConfigurationMapCompat.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/StreamConfigurationMapCompat.java
index 9004597..3dddea7 100644
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/StreamConfigurationMapCompat.java
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/StreamConfigurationMapCompat.java
@@ -85,7 +85,8 @@
@Nullable
public Size[] getOutputSizes(int format) {
if (mCachedFormatOutputSizes.containsKey(format)) {
- return mCachedFormatOutputSizes.get(format).clone();
+ Size[] cachedOutputSizes = mCachedFormatOutputSizes.get(format);
+ return cachedOutputSizes == null ? null : mCachedFormatOutputSizes.get(format).clone();
}
Size[] outputSizes = mImpl.getOutputSizes(format);
@@ -113,7 +114,8 @@
@Nullable
public <T> Size[] getOutputSizes(@NonNull Class<T> klass) {
if (mCachedClassOutputSizes.containsKey(klass)) {
- return mCachedClassOutputSizes.get(klass).clone();
+ Size[] cachedOutputSizes = mCachedClassOutputSizes.get(klass);
+ return cachedOutputSizes == null ? null : mCachedClassOutputSizes.get(klass).clone();
}
Size[] outputSizes = mImpl.getOutputSizes(klass);
@@ -140,7 +142,9 @@
@Nullable
public Size[] getHighResolutionOutputSizes(int format) {
if (mCachedFormatHighResolutionOutputSizes.containsKey(format)) {
- return mCachedFormatHighResolutionOutputSizes.get(format).clone();
+ Size[] cachedOutputSizes = mCachedFormatHighResolutionOutputSizes.get(format);
+ return cachedOutputSizes == null ? null : mCachedFormatHighResolutionOutputSizes.get(
+ format).clone();
}
Size[] outputSizes = mImpl.getHighResolutionOutputSizes(format);
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/params/DynamicRangeConversions.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/params/DynamicRangeConversions.java
index 0d2982b..91bee96 100644
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/params/DynamicRangeConversions.java
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/params/DynamicRangeConversions.java
@@ -59,45 +59,37 @@
DR_TO_PROFILE_MAP.put(DynamicRange.SDR, Collections.singletonList(STANDARD));
// HLG
- PROFILE_TO_DR_MAP.put(HLG10,
- new DynamicRange(DynamicRange.FORMAT_HLG, DynamicRange.BIT_DEPTH_10_BIT));
+ PROFILE_TO_DR_MAP.put(HLG10, DynamicRange.HLG_10_BIT);
DR_TO_PROFILE_MAP.put(PROFILE_TO_DR_MAP.get(HLG10), Collections.singletonList(HLG10));
// HDR10
- DynamicRange hdr10 = new DynamicRange(DynamicRange.FORMAT_HDR10,
- DynamicRange.BIT_DEPTH_10_BIT);
- PROFILE_TO_DR_MAP.put(HDR10, hdr10);
- DR_TO_PROFILE_MAP.put(hdr10, Collections.singletonList(HDR10));
+ PROFILE_TO_DR_MAP.put(HDR10, DynamicRange.HDR10_10_BIT);
+ DR_TO_PROFILE_MAP.put(DynamicRange.HDR10_10_BIT, Collections.singletonList(HDR10));
// HDR10+
- DynamicRange hdr10Plus = new DynamicRange(DynamicRange.FORMAT_HDR10_PLUS,
- DynamicRange.BIT_DEPTH_10_BIT);
- PROFILE_TO_DR_MAP.put(HDR10_PLUS, hdr10Plus);
- DR_TO_PROFILE_MAP.put(hdr10Plus, Collections.singletonList(HDR10_PLUS));
+ PROFILE_TO_DR_MAP.put(HDR10_PLUS, DynamicRange.HDR10_PLUS_10_BIT);
+ DR_TO_PROFILE_MAP.put(DynamicRange.HDR10_PLUS_10_BIT,
+ Collections.singletonList(HDR10_PLUS));
// Dolby Vision 10-bit
- DynamicRange dolbyVision10Bit = new DynamicRange(DynamicRange.FORMAT_DOLBY_VISION,
- DynamicRange.BIT_DEPTH_10_BIT);
// A list of the Camera2 10-bit dolby vision profiles ordered by priority. Any API that
- // takes a DynamicRange with dolby vision format will attempt to convert to these
+ // takes a DynamicRange with dolby vision encoding will attempt to convert to these
// profiles in order, using the first one that is supported. We will need to add a
// mechanism for choosing between these
List<Long> dolbyVision10BitProfilesOrdered = Arrays.asList(DOLBY_VISION_10B_HDR_OEM,
DOLBY_VISION_10B_HDR_OEM_PO, DOLBY_VISION_10B_HDR_REF, DOLBY_VISION_10B_HDR_REF_PO);
for (Long profile : dolbyVision10BitProfilesOrdered) {
- PROFILE_TO_DR_MAP.put(profile, dolbyVision10Bit);
+ PROFILE_TO_DR_MAP.put(profile, DynamicRange.DOLBY_VISION_10_BIT);
}
- DR_TO_PROFILE_MAP.put(dolbyVision10Bit, dolbyVision10BitProfilesOrdered);
+ DR_TO_PROFILE_MAP.put(DynamicRange.DOLBY_VISION_10_BIT, dolbyVision10BitProfilesOrdered);
// Dolby vision 8-bit
- DynamicRange dolbyVision8Bit = new DynamicRange(DynamicRange.FORMAT_DOLBY_VISION,
- DynamicRange.BIT_DEPTH_8_BIT);
List<Long> dolbyVision8BitProfilesOrdered = Arrays.asList(DOLBY_VISION_8B_HDR_OEM,
DOLBY_VISION_8B_HDR_OEM_PO, DOLBY_VISION_8B_HDR_REF, DOLBY_VISION_8B_HDR_REF_PO);
for (Long profile : dolbyVision8BitProfilesOrdered) {
- PROFILE_TO_DR_MAP.put(profile, dolbyVision8Bit);
+ PROFILE_TO_DR_MAP.put(profile, DynamicRange.DOLBY_VISION_8_BIT);
}
- DR_TO_PROFILE_MAP.put(dolbyVision8Bit, dolbyVision8BitProfilesOrdered);
+ DR_TO_PROFILE_MAP.put(DynamicRange.DOLBY_VISION_8_BIT, dolbyVision8BitProfilesOrdered);
}
/**
@@ -117,8 +109,8 @@
* returned. The order in which profiles are checked for support is internally defined.
*
* <p>This will only return profiles for fully defined dynamic ranges. For instance, if the
- * format returned by {@link DynamicRange#getFormat()} is
- * {@link DynamicRange#FORMAT_HDR_UNSPECIFIED}, this will return {@code null}.
+ * format returned by {@link DynamicRange#getEncoding()} is
+ * {@link DynamicRange#ENCODING_HDR_UNSPECIFIED}, this will return {@code null}.
*/
@DoNotInline
@Nullable
diff --git a/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/Camera2CameraInfoImplTest.java b/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/Camera2CameraInfoImplTest.java
index 3f2f6ea..2707bd14 100644
--- a/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/Camera2CameraInfoImplTest.java
+++ b/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/Camera2CameraInfoImplTest.java
@@ -18,6 +18,7 @@
import static android.hardware.camera2.CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES;
+import static androidx.camera.core.DynamicRange.HLG_10_BIT;
import static androidx.camera.core.DynamicRange.SDR;
import static com.google.common.truth.Truth.assertThat;
@@ -143,9 +144,6 @@
new Range<>(12, 30),
new Range<>(30, 30),
};
- private static final DynamicRange HLG10 = new DynamicRange(DynamicRange.FORMAT_HLG,
- DynamicRange.BIT_DEPTH_10_BIT);
-
private CameraCharacteristicsCompat mCameraCharacteristics0;
private CameraManagerCompat mCameraManagerCompat;
private ZoomControl mMockZoomControl;
@@ -701,7 +699,7 @@
CAMERA0_ID, mCameraManagerCompat);
Set<DynamicRange> supportedDynamicRanges = cameraInfo.getSupportedDynamicRanges();
- assertThat(supportedDynamicRanges).containsExactly(SDR, HLG10);
+ assertThat(supportedDynamicRanges).containsExactly(SDR, HLG_10_BIT);
}
@Config(maxSdk = 32)
diff --git a/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/SupportedSurfaceCombinationTest.kt b/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/SupportedSurfaceCombinationTest.kt
index f847397..b0437c12 100644
--- a/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/SupportedSurfaceCombinationTest.kt
+++ b/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/SupportedSurfaceCombinationTest.kt
@@ -53,13 +53,11 @@
import androidx.camera.core.DynamicRange.BIT_DEPTH_10_BIT
import androidx.camera.core.DynamicRange.BIT_DEPTH_8_BIT
import androidx.camera.core.DynamicRange.BIT_DEPTH_UNSPECIFIED
-import androidx.camera.core.DynamicRange.FORMAT_DOLBY_VISION
-import androidx.camera.core.DynamicRange.FORMAT_HDR10
-import androidx.camera.core.DynamicRange.FORMAT_HDR10_PLUS
-import androidx.camera.core.DynamicRange.FORMAT_HDR_UNSPECIFIED
-import androidx.camera.core.DynamicRange.FORMAT_HLG
-import androidx.camera.core.DynamicRange.FORMAT_SDR
-import androidx.camera.core.DynamicRange.FORMAT_UNSPECIFIED
+import androidx.camera.core.DynamicRange.ENCODING_DOLBY_VISION
+import androidx.camera.core.DynamicRange.ENCODING_HDR_UNSPECIFIED
+import androidx.camera.core.DynamicRange.ENCODING_SDR
+import androidx.camera.core.DynamicRange.ENCODING_UNSPECIFIED
+import androidx.camera.core.DynamicRange.HLG_10_BIT
import androidx.camera.core.DynamicRange.SDR
import androidx.camera.core.UseCase
import androidx.camera.core.impl.AttachedSurfaceInfo
@@ -1776,7 +1774,7 @@
useCase to MAXIMUM_SIZE
)
val useCaseExpectedDynamicRangeMap = mapOf(
- useCase to DynamicRange(FORMAT_HLG, BIT_DEPTH_10_BIT)
+ useCase to HLG_10_BIT
)
getSuggestedSpecsAndVerify(
@@ -1798,7 +1796,7 @@
useCase to MAXIMUM_SIZE
)
val useCaseExpectedDynamicRangeMap = mapOf(
- useCase to DynamicRange(FORMAT_HDR10, BIT_DEPTH_10_BIT)
+ useCase to DynamicRange.HDR10_10_BIT
)
getSuggestedSpecsAndVerify(
@@ -1815,13 +1813,13 @@
fun dynamicRangeResolver_returnsDolbyVision8_dueToSupportedDynamicRanges() {
val useCase = createUseCase(
CaptureType.PREVIEW,
- dynamicRange = DynamicRange(FORMAT_HDR_UNSPECIFIED, BIT_DEPTH_8_BIT)
+ dynamicRange = DynamicRange(ENCODING_HDR_UNSPECIFIED, BIT_DEPTH_8_BIT)
)
val useCaseExpectedSizeMap = mapOf(
useCase to MAXIMUM_SIZE
)
val useCaseExpectedDynamicRangeMap = mapOf(
- useCase to DynamicRange(FORMAT_DOLBY_VISION, BIT_DEPTH_8_BIT)
+ useCase to DynamicRange.DOLBY_VISION_8_BIT
)
getSuggestedSpecsAndVerify(
@@ -1836,13 +1834,13 @@
fun dynamicRangeResolver_returnsDolbyVision8_fromUnspecifiedBitDepth() {
val useCase = createUseCase(
CaptureType.PREVIEW,
- dynamicRange = DynamicRange(FORMAT_DOLBY_VISION, BIT_DEPTH_UNSPECIFIED)
+ dynamicRange = DynamicRange(ENCODING_DOLBY_VISION, BIT_DEPTH_UNSPECIFIED)
)
val useCaseExpectedSizeMap = mapOf(
useCase to MAXIMUM_SIZE
)
val useCaseExpectedDynamicRangeMap = mapOf(
- useCase to DynamicRange(FORMAT_DOLBY_VISION, BIT_DEPTH_8_BIT)
+ useCase to DynamicRange.DOLBY_VISION_8_BIT
)
getSuggestedSpecsAndVerify(
@@ -1857,13 +1855,13 @@
fun dynamicRangeResolver_returnsDolbyVision10_fromUnspecifiedBitDepth() {
val useCase = createUseCase(
CaptureType.PREVIEW,
- dynamicRange = DynamicRange(FORMAT_DOLBY_VISION, BIT_DEPTH_UNSPECIFIED)
+ dynamicRange = DynamicRange(ENCODING_DOLBY_VISION, BIT_DEPTH_UNSPECIFIED)
)
val useCaseExpectedSizeMap = mapOf(
useCase to MAXIMUM_SIZE
)
val useCaseExpectedDynamicRangeMap = mapOf(
- useCase to DynamicRange(FORMAT_DOLBY_VISION, BIT_DEPTH_10_BIT)
+ useCase to DynamicRange.DOLBY_VISION_10_BIT
)
getSuggestedSpecsAndVerify(
@@ -1879,13 +1877,13 @@
fun dynamicRangeResolver_returnsDolbyVision8_fromUnspecifiedHdrWithUnspecifiedBitDepth() {
val useCase = createUseCase(
CaptureType.PREVIEW,
- dynamicRange = DynamicRange(FORMAT_HDR_UNSPECIFIED, BIT_DEPTH_UNSPECIFIED)
+ dynamicRange = DynamicRange(ENCODING_HDR_UNSPECIFIED, BIT_DEPTH_UNSPECIFIED)
)
val useCaseExpectedSizeMap = mapOf(
useCase to MAXIMUM_SIZE
)
val useCaseExpectedDynamicRangeMap = mapOf(
- useCase to DynamicRange(FORMAT_DOLBY_VISION, BIT_DEPTH_8_BIT)
+ useCase to DynamicRange.DOLBY_VISION_8_BIT
)
getSuggestedSpecsAndVerify(
@@ -1900,13 +1898,13 @@
fun dynamicRangeResolver_returnsDolbyVision10_fromUnspecifiedHdrWithUnspecifiedBitDepth() {
val useCase = createUseCase(
CaptureType.PREVIEW,
- dynamicRange = DynamicRange(FORMAT_HDR_UNSPECIFIED, BIT_DEPTH_UNSPECIFIED)
+ dynamicRange = DynamicRange(ENCODING_HDR_UNSPECIFIED, BIT_DEPTH_UNSPECIFIED)
)
val useCaseExpectedSizeMap = mapOf(
useCase to MAXIMUM_SIZE
)
val useCaseExpectedDynamicRangeMap = mapOf(
- useCase to DynamicRange(FORMAT_DOLBY_VISION, BIT_DEPTH_10_BIT)
+ useCase to DynamicRange.DOLBY_VISION_10_BIT
)
getSuggestedSpecsAndVerify(
@@ -1923,19 +1921,19 @@
fun dynamicRangeResolver_returnsDolbyVision8_withUndefinedBitDepth_andFullyDefinedHlg10() {
val videoUseCase = createUseCase(
CaptureType.VIDEO_CAPTURE,
- dynamicRange = DynamicRange(FORMAT_HLG, BIT_DEPTH_10_BIT)
+ dynamicRange = HLG_10_BIT
)
val previewUseCase = createUseCase(
CaptureType.PREVIEW,
- dynamicRange = DynamicRange(FORMAT_DOLBY_VISION, BIT_DEPTH_UNSPECIFIED)
+ dynamicRange = DynamicRange(ENCODING_DOLBY_VISION, BIT_DEPTH_UNSPECIFIED)
)
val useCaseExpectedSizeMap = mutableMapOf(
videoUseCase to RECORD_SIZE,
previewUseCase to PREVIEW_SIZE
)
val useCaseExpectedDynamicRangeMap = mapOf(
- videoUseCase to DynamicRange(FORMAT_HLG, BIT_DEPTH_10_BIT),
- previewUseCase to DynamicRange(FORMAT_DOLBY_VISION, BIT_DEPTH_8_BIT)
+ videoUseCase to HLG_10_BIT,
+ previewUseCase to DynamicRange.DOLBY_VISION_8_BIT
)
getSuggestedSpecsAndVerify(
@@ -1952,12 +1950,12 @@
// VideoCapture partially defined dynamic range
val videoUseCase = createUseCase(
CaptureType.VIDEO_CAPTURE,
- dynamicRange = DynamicRange(FORMAT_HDR_UNSPECIFIED, BIT_DEPTH_10_BIT)
+ dynamicRange = DynamicRange.HDR_UNSPECIFIED_10_BIT
)
// Preview fully defined dynamic range
val previewUseCase = createUseCase(
CaptureType.PREVIEW,
- dynamicRange = DynamicRange(FORMAT_DOLBY_VISION, BIT_DEPTH_8_BIT),
+ dynamicRange = DynamicRange.DOLBY_VISION_8_BIT,
)
val useCaseExpectedSizeMap = mutableMapOf(
@@ -1965,8 +1963,8 @@
previewUseCase to PREVIEW_SIZE
)
val useCaseExpectedDynamicRangeMap = mapOf(
- videoUseCase to DynamicRange(FORMAT_DOLBY_VISION, BIT_DEPTH_10_BIT),
- previewUseCase to DynamicRange(FORMAT_DOLBY_VISION, BIT_DEPTH_8_BIT)
+ videoUseCase to DynamicRange.DOLBY_VISION_10_BIT,
+ previewUseCase to DynamicRange.DOLBY_VISION_8_BIT
)
getSuggestedSpecsAndVerify(
@@ -1993,8 +1991,8 @@
previewUseCase to PREVIEW_SIZE
)
val useCaseExpectedDynamicRangeMap = mapOf(
- previewUseCase to DynamicRange(FORMAT_HLG, BIT_DEPTH_10_BIT),
- videoUseCase to DynamicRange(FORMAT_HLG, BIT_DEPTH_10_BIT)
+ previewUseCase to HLG_10_BIT,
+ videoUseCase to HLG_10_BIT
)
getSuggestedSpecsAndVerify(
@@ -2048,7 +2046,7 @@
fun dynamicRangeResolver_resolvesToSdr8Bit_whenSdrWithUnspecifiedBitDepthProvided() {
// Preview unspecified dynamic range
val useCase = createUseCase(CaptureType.PREVIEW,
- dynamicRange = DynamicRange(FORMAT_SDR, BIT_DEPTH_UNSPECIFIED)
+ dynamicRange = DynamicRange(ENCODING_SDR, BIT_DEPTH_UNSPECIFIED)
)
val useCaseExpectedSizeMap = mutableMapOf(
@@ -2070,12 +2068,12 @@
// VideoCapture has 10-bit HDR range with constraint for 8-bit non-SDR range
val videoUseCase = createUseCase(
CaptureType.VIDEO_CAPTURE,
- dynamicRange = DynamicRange(FORMAT_DOLBY_VISION, BIT_DEPTH_10_BIT)
+ dynamicRange = DynamicRange.DOLBY_VISION_10_BIT
)
- // Preview unspecified format but 8-bit bit depth
+ // Preview unspecified encoding but 8-bit bit depth
val previewUseCase = createUseCase(
CaptureType.PREVIEW,
- dynamicRange = DynamicRange(FORMAT_UNSPECIFIED, BIT_DEPTH_8_BIT)
+ dynamicRange = DynamicRange(ENCODING_UNSPECIFIED, BIT_DEPTH_8_BIT)
)
val useCaseExpectedSizeMap = mutableMapOf(
@@ -2084,8 +2082,8 @@
)
val useCaseExpectedDynamicRangeMap = mapOf(
- videoUseCase to DynamicRange(FORMAT_DOLBY_VISION, BIT_DEPTH_10_BIT),
- previewUseCase to DynamicRange(FORMAT_DOLBY_VISION, BIT_DEPTH_8_BIT)
+ videoUseCase to DynamicRange.DOLBY_VISION_10_BIT,
+ previewUseCase to DynamicRange.DOLBY_VISION_8_BIT
)
getSuggestedSpecsAndVerify(
@@ -2101,7 +2099,7 @@
fun dynamicRangeResolver_resolvesToSdr_forUnspecified8Bit_whenNoOtherDynamicRangesPresent() {
val useCase = createUseCase(
CaptureType.PREVIEW,
- dynamicRange = DynamicRange(FORMAT_UNSPECIFIED, BIT_DEPTH_8_BIT)
+ dynamicRange = DynamicRange(ENCODING_UNSPECIFIED, BIT_DEPTH_8_BIT)
)
val useCaseExpectedSizeMap = mutableMapOf(
@@ -2125,12 +2123,12 @@
// VideoCapture fully resolved Dolby Vision 8-bit
val videoUseCase = createUseCase(
CaptureType.VIDEO_CAPTURE,
- dynamicRange = DynamicRange(FORMAT_DOLBY_VISION, BIT_DEPTH_8_BIT)
+ dynamicRange = DynamicRange.DOLBY_VISION_8_BIT
)
- // Preview unspecified format / 8-bit
+ // Preview unspecified encoding / 8-bit
val previewUseCase = createUseCase(
CaptureType.PREVIEW,
- dynamicRange = DynamicRange(FORMAT_UNSPECIFIED, BIT_DEPTH_UNSPECIFIED)
+ dynamicRange = DynamicRange.UNSPECIFIED
)
// Since there are no 10-bit dynamic ranges, the 10-bit resolution table isn't used.
@@ -2142,8 +2140,8 @@
)
val useCaseExpectedDynamicRangeMap = mapOf(
- videoUseCase to DynamicRange(FORMAT_DOLBY_VISION, BIT_DEPTH_8_BIT),
- previewUseCase to DynamicRange(FORMAT_DOLBY_VISION, BIT_DEPTH_8_BIT)
+ videoUseCase to DynamicRange.DOLBY_VISION_8_BIT,
+ previewUseCase to DynamicRange.DOLBY_VISION_8_BIT
)
getSuggestedSpecsAndVerify(
@@ -2159,7 +2157,7 @@
// JPEG use case can't be attached with an existing PRIV + YUV in the 10-bit tables
val useCase = createUseCase(
CaptureType.IMAGE_CAPTURE,
- dynamicRange = DynamicRange(FORMAT_HLG, BIT_DEPTH_10_BIT)
+ dynamicRange = HLG_10_BIT
)
val useCaseExpectedSizeMap = mapOf(
// Size would be valid for LIMITED table
@@ -2208,7 +2206,7 @@
fun dynamicRangeConstraints_causeAutoResolutionToThrow() {
val useCase = createUseCase(
CaptureType.IMAGE_CAPTURE,
- dynamicRange = DynamicRange(FORMAT_HLG, BIT_DEPTH_10_BIT)
+ dynamicRange = HLG_10_BIT
)
val useCaseExpectedSizeMap = mapOf(
// Size would be valid for 10-bit table within constraints
@@ -2222,7 +2220,7 @@
),
ImageFormat.PRIVATE,
PREVIEW_SIZE,
- DynamicRange(FORMAT_HDR10, BIT_DEPTH_10_BIT),
+ DynamicRange.HDR10_10_BIT,
listOf(CaptureType.PREVIEW),
useCase.currentConfig,
/*targetFrameRate=*/null
@@ -2234,7 +2232,7 @@
),
ImageFormat.YUV_420_888,
RECORD_SIZE,
- DynamicRange(FORMAT_HDR10_PLUS, BIT_DEPTH_10_BIT),
+ DynamicRange.HDR10_PLUS_10_BIT,
listOf(CaptureType.VIDEO_CAPTURE),
useCase.currentConfig,
/*targetFrameRate=*/null
@@ -2266,7 +2264,7 @@
// JPEG use case can be attached with an existing PRIV + PRIV in the 10-bit tables
val useCase = createUseCase(
CaptureType.IMAGE_CAPTURE,
- dynamicRange = DynamicRange(FORMAT_HLG, BIT_DEPTH_10_BIT)
+ dynamicRange = HLG_10_BIT
)
val useCaseExpectedSizeMap = mapOf(
// Size is valid for 10-bit table within constraints
@@ -2312,7 +2310,7 @@
// VideoCapture HLG dynamic range
val videoUseCase = createUseCase(
CaptureType.VIDEO_CAPTURE,
- dynamicRange = DynamicRange(FORMAT_HLG, BIT_DEPTH_10_BIT)
+ dynamicRange = HLG_10_BIT
)
// Preview SDR dynamic range
val previewUseCase = createUseCase(
@@ -2341,7 +2339,7 @@
// VideoCapture HLG dynamic range
val videoUseCase = createUseCase(
CaptureType.VIDEO_CAPTURE,
- dynamicRange = DynamicRange(FORMAT_HLG, BIT_DEPTH_10_BIT)
+ dynamicRange = HLG_10_BIT
)
// Preview SDR dynamic range
val previewUseCase = createUseCase(
@@ -2368,12 +2366,12 @@
// VideoCapture HDR10 dynamic range
val videoUseCase = createUseCase(
CaptureType.VIDEO_CAPTURE,
- dynamicRange = DynamicRange(FORMAT_HDR10, BIT_DEPTH_10_BIT)
+ dynamicRange = DynamicRange.HDR10_10_BIT
)
// Preview HDR10_PLUS dynamic range
val previewUseCase = createUseCase(
CaptureType.PREVIEW,
- dynamicRange = DynamicRange(FORMAT_HDR10_PLUS, BIT_DEPTH_10_BIT)
+ dynamicRange = DynamicRange.HDR10_PLUS_10_BIT
)
val useCaseExpectedSizeMap = mutableMapOf(
diff --git a/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/compat/StreamConfigurationMapCompatTest.kt b/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/compat/StreamConfigurationMapCompatTest.kt
index 19163c0..e58c4f5 100644
--- a/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/compat/StreamConfigurationMapCompatTest.kt
+++ b/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/compat/StreamConfigurationMapCompatTest.kt
@@ -16,12 +16,14 @@
package androidx.camera.camera2.internal.compat
+import android.graphics.ImageFormat
import android.graphics.SurfaceTexture
import android.os.Build
import android.util.Size
import androidx.camera.camera2.internal.compat.workaround.OutputSizesCorrector
import androidx.camera.core.impl.ImageFormatConstants
import com.google.common.truth.Truth.assertThat
+import org.junit.Assume.assumeTrue
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@@ -79,4 +81,25 @@
streamConfigurationMapCompat.getOutputSizes(SurfaceTexture::class.java)!!.toList()
).containsExactlyElementsIn(privateFormatOutputSizes)
}
+
+ @Test
+ fun getOutputSizesByFormatTwice_whenReturnedArrayIsNull() {
+ assumeTrue(streamConfigurationMapCompat.getOutputSizes(ImageFormat.RGB_565) == null)
+ assertThat(streamConfigurationMapCompat.getOutputSizes(ImageFormat.RGB_565)).isNull()
+ }
+
+ @Test
+ fun getOutputSizesByClassTwice_whenReturnedArrayIsNull() {
+ assumeTrue(streamConfigurationMapCompat.getOutputSizes(ImageFormat::class.java) == null)
+ assertThat(streamConfigurationMapCompat.getOutputSizes(ImageFormat::class.java)).isNull()
+ }
+
+ @Test
+ @Config(minSdk = 23)
+ fun getHighResolutionOutputSizesTwice_whenReturnedArrayIsNull() {
+ assumeTrue(streamConfigurationMapCompat.getHighResolutionOutputSizes(
+ ImageFormat.JPEG) == null)
+ assertThat(streamConfigurationMapCompat.getHighResolutionOutputSizes(ImageFormat.JPEG))
+ .isNull()
+ }
}
diff --git a/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/compat/params/DynamicRangesCompatTest.kt b/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/compat/params/DynamicRangesCompatTest.kt
index 56d280e..f6d0ab7 100644
--- a/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/compat/params/DynamicRangesCompatTest.kt
+++ b/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/compat/params/DynamicRangesCompatTest.kt
@@ -30,13 +30,11 @@
import androidx.camera.camera2.internal.HLG10_SDR_CONSTRAINED
import androidx.camera.camera2.internal.HLG10_UNCONSTRAINED
import androidx.camera.camera2.internal.compat.CameraCharacteristicsCompat
-import androidx.camera.core.DynamicRange
-import androidx.camera.core.DynamicRange.BIT_DEPTH_10_BIT
-import androidx.camera.core.DynamicRange.BIT_DEPTH_8_BIT
-import androidx.camera.core.DynamicRange.FORMAT_DOLBY_VISION
-import androidx.camera.core.DynamicRange.FORMAT_HDR10
-import androidx.camera.core.DynamicRange.FORMAT_HDR10_PLUS
-import androidx.camera.core.DynamicRange.FORMAT_HLG
+import androidx.camera.core.DynamicRange.DOLBY_VISION_10_BIT
+import androidx.camera.core.DynamicRange.DOLBY_VISION_8_BIT
+import androidx.camera.core.DynamicRange.HDR10_10_BIT
+import androidx.camera.core.DynamicRange.HDR10_PLUS_10_BIT
+import androidx.camera.core.DynamicRange.HLG_10_BIT
import androidx.camera.core.DynamicRange.SDR
import com.google.common.truth.Truth.assertThat
import org.junit.Assert.assertThrows
@@ -52,15 +50,6 @@
@DoNotInstrument
@Config(minSdk = Build.VERSION_CODES.LOLLIPOP)
class DynamicRangesCompatTest {
-
- companion object {
- val DYNAMIC_RANGE_HLG10 = DynamicRange(FORMAT_HLG, BIT_DEPTH_10_BIT)
- val DYNAMIC_RANGE_HDR10 = DynamicRange(FORMAT_HDR10, BIT_DEPTH_10_BIT)
- val DYNAMIC_RANGE_HDR10_PLUS = DynamicRange(FORMAT_HDR10_PLUS, BIT_DEPTH_10_BIT)
- val DYNAMIC_RANGE_DOLBY_VISION_10B = DynamicRange(FORMAT_DOLBY_VISION, BIT_DEPTH_10_BIT)
- val DYNAMIC_RANGE_DOLBY_VISION_8B = DynamicRange(FORMAT_DOLBY_VISION, BIT_DEPTH_8_BIT)
- }
-
@Config(minSdk = Build.VERSION_CODES.TIRAMISU)
@Test
fun canWrapAndUnwrapDynamicRangeProfiles() {
@@ -74,14 +63,14 @@
@Test
fun canSupportDynamicRangeFromHlg10Profile() {
val dynamicRangesCompat = DynamicRangesCompat.toDynamicRangesCompat(HLG10_UNCONSTRAINED)
- assertThat(dynamicRangesCompat?.supportedDynamicRanges).contains(DYNAMIC_RANGE_HLG10)
+ assertThat(dynamicRangesCompat?.supportedDynamicRanges).contains(HLG_10_BIT)
}
@Config(minSdk = Build.VERSION_CODES.TIRAMISU)
@Test
fun canSupportDynamicRangeFromHdr10Profile() {
val dynamicRangesCompat = DynamicRangesCompat.toDynamicRangesCompat(HDR10_UNCONSTRAINED)
- assertThat(dynamicRangesCompat?.supportedDynamicRanges).contains(DYNAMIC_RANGE_HDR10)
+ assertThat(dynamicRangesCompat?.supportedDynamicRanges).contains(HDR10_10_BIT)
}
@Config(minSdk = Build.VERSION_CODES.TIRAMISU)
@@ -89,7 +78,7 @@
fun canSupportDynamicRangeFromHdr10PlusProfile() {
val dynamicRangesCompat =
DynamicRangesCompat.toDynamicRangesCompat(HDR10_PLUS_UNCONSTRAINED)
- assertThat(dynamicRangesCompat?.supportedDynamicRanges).contains(DYNAMIC_RANGE_HDR10_PLUS)
+ assertThat(dynamicRangesCompat?.supportedDynamicRanges).contains(HDR10_PLUS_10_BIT)
}
@Config(minSdk = Build.VERSION_CODES.TIRAMISU)
@@ -97,9 +86,7 @@
fun canSupportDynamicRangeFromDolbyVision10bProfile() {
val dynamicRangesCompat =
DynamicRangesCompat.toDynamicRangesCompat(DOLBY_VISION_10B_UNCONSTRAINED)
- assertThat(dynamicRangesCompat?.supportedDynamicRanges).contains(
- DYNAMIC_RANGE_DOLBY_VISION_10B
- )
+ assertThat(dynamicRangesCompat?.supportedDynamicRanges).contains(DOLBY_VISION_10_BIT)
}
@Config(minSdk = Build.VERSION_CODES.TIRAMISU)
@@ -107,9 +94,7 @@
fun canSupportDynamicRangeFromDolbyVision8bProfile() {
val dynamicRangesCompat =
DynamicRangesCompat.toDynamicRangesCompat(DOLBY_VISION_8B_UNCONSTRAINED)
- assertThat(dynamicRangesCompat?.supportedDynamicRanges).contains(
- DYNAMIC_RANGE_DOLBY_VISION_8B
- )
+ assertThat(dynamicRangesCompat?.supportedDynamicRanges).contains(DOLBY_VISION_8_BIT)
}
@Config(minSdk = Build.VERSION_CODES.TIRAMISU)
@@ -121,20 +106,20 @@
).containsExactly(SDR)
assertThat(
hlg10ConstrainedWrapped?.getDynamicRangeCaptureRequestConstraints(
- DYNAMIC_RANGE_HLG10
+ HLG_10_BIT
)
- ).containsExactly(DYNAMIC_RANGE_HLG10)
+ ).containsExactly(HLG_10_BIT)
val hlg10SdrConstrainedWrapped =
DynamicRangesCompat.toDynamicRangesCompat(HLG10_SDR_CONSTRAINED)
assertThat(
hlg10SdrConstrainedWrapped?.getDynamicRangeCaptureRequestConstraints(SDR)
- ).containsExactly(SDR, DYNAMIC_RANGE_HLG10)
+ ).containsExactly(SDR, HLG_10_BIT)
assertThat(
hlg10SdrConstrainedWrapped?.getDynamicRangeCaptureRequestConstraints(
- DYNAMIC_RANGE_HLG10
+ HLG_10_BIT
)
- ).containsExactly(DYNAMIC_RANGE_HLG10, SDR)
+ ).containsExactly(HLG_10_BIT, SDR)
val hlg10Hdr10ConstrainedWrapped =
DynamicRangesCompat.toDynamicRangesCompat(HLG10_HDR10_CONSTRAINED)
@@ -143,14 +128,12 @@
).containsExactly(SDR)
assertThat(
hlg10Hdr10ConstrainedWrapped?.getDynamicRangeCaptureRequestConstraints(
- DYNAMIC_RANGE_HLG10
+ HLG_10_BIT
)
- ).containsExactly(DYNAMIC_RANGE_HLG10, DYNAMIC_RANGE_HDR10)
+ ).containsExactly(HLG_10_BIT, HDR10_10_BIT)
assertThat(
- hlg10Hdr10ConstrainedWrapped?.getDynamicRangeCaptureRequestConstraints(
- DYNAMIC_RANGE_HDR10
- )
- ).containsExactly(DYNAMIC_RANGE_HDR10, DYNAMIC_RANGE_HLG10)
+ hlg10Hdr10ConstrainedWrapped?.getDynamicRangeCaptureRequestConstraints(HDR10_10_BIT)
+ ).containsExactly(HDR10_10_BIT, HLG_10_BIT)
}
@Config(minSdk = Build.VERSION_CODES.TIRAMISU)
@@ -160,9 +143,7 @@
DynamicRangesCompat.toDynamicRangesCompat(DOLBY_VISION_10B_UNCONSTRAINED_SLOW)
assertThat(dynamicRangesCompat?.isExtraLatencyPresent(SDR)).isFalse()
assertThat(
- dynamicRangesCompat?.isExtraLatencyPresent(
- DYNAMIC_RANGE_DOLBY_VISION_10B
- )
+ dynamicRangesCompat?.isExtraLatencyPresent(DOLBY_VISION_10_BIT)
).isTrue()
}
@@ -171,7 +152,7 @@
fun canProduceDynamicRangeWithoutConstraints() {
val dynamicRangesCompat = DynamicRangesCompat.toDynamicRangesCompat(HLG10_UNCONSTRAINED)
assertThat(
- dynamicRangesCompat?.getDynamicRangeCaptureRequestConstraints(DYNAMIC_RANGE_HLG10)
+ dynamicRangesCompat?.getDynamicRangeCaptureRequestConstraints(HLG_10_BIT)
).isEmpty()
}
@@ -226,20 +207,16 @@
assertThat(dynamicRangesCompat.supportedDynamicRanges).containsExactly(SDR)
} else {
assertThat(dynamicRangesCompat.supportedDynamicRanges).containsExactly(
- SDR, DYNAMIC_RANGE_DOLBY_VISION_8B
+ SDR, DOLBY_VISION_8_BIT
)
}
assertThrows(IllegalArgumentException::class.java) {
- dynamicRangesCompat.getDynamicRangeCaptureRequestConstraints(
- DYNAMIC_RANGE_DOLBY_VISION_10B
- )
+ dynamicRangesCompat.getDynamicRangeCaptureRequestConstraints(DOLBY_VISION_10_BIT)
}
assertThrows(IllegalArgumentException::class.java) {
- dynamicRangesCompat.isExtraLatencyPresent(
- DYNAMIC_RANGE_DOLBY_VISION_10B
- )
+ dynamicRangesCompat.isExtraLatencyPresent(DOLBY_VISION_10_BIT)
}
}
diff --git a/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/compat/quirk/CamcorderProfileResolutionQuirkTest.kt b/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/compat/quirk/CamcorderProfileResolutionQuirkTest.kt
index 5779b96..83defcab 100644
--- a/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/compat/quirk/CamcorderProfileResolutionQuirkTest.kt
+++ b/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/compat/quirk/CamcorderProfileResolutionQuirkTest.kt
@@ -29,8 +29,8 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentMatchers
-import org.mockito.Mockito.`when`
import org.mockito.Mockito.mock
+import org.mockito.Mockito.`when`
import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config
import org.robolectric.annotation.internal.DoNotInstrument
diff --git a/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/concurrent/Camera2CameraCoordinatorTest.kt b/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/concurrent/Camera2CameraCoordinatorTest.kt
index c526cd1..5354bb1 100644
--- a/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/concurrent/Camera2CameraCoordinatorTest.kt
+++ b/camera/camera-camera2/src/test/java/androidx/camera/camera2/internal/concurrent/Camera2CameraCoordinatorTest.kt
@@ -46,7 +46,6 @@
import org.robolectric.annotation.Config
import org.robolectric.annotation.internal.DoNotInstrument
import org.robolectric.shadow.api.Shadow
-
import org.robolectric.shadows.ShadowCameraCharacteristics
import org.robolectric.shadows.ShadowCameraManager
diff --git a/camera/camera-core/api/current.txt b/camera/camera-core/api/current.txt
index 2b46a21..f235ce6 100644
--- a/camera/camera-core/api/current.txt
+++ b/camera/camera-core/api/current.txt
@@ -53,6 +53,7 @@
method public androidx.lifecycle.LiveData<androidx.camera.core.ZoomState!> getZoomState();
method public boolean hasFlashUnit();
method public default boolean isFocusMeteringSupported(androidx.camera.core.FocusMeteringAction);
+ method @androidx.camera.core.ExperimentalZeroShutterLag public default boolean isZslSupported();
}
@RequiresApi(21) public final class CameraInfoUnavailableException extends java.lang.Exception {
@@ -68,6 +69,7 @@
field public static final androidx.camera.core.CameraSelector DEFAULT_BACK_CAMERA;
field public static final androidx.camera.core.CameraSelector DEFAULT_FRONT_CAMERA;
field public static final int LENS_FACING_BACK = 1; // 0x1
+ field @androidx.camera.core.ExperimentalLensFacing public static final int LENS_FACING_EXTERNAL = 2; // 0x2
field public static final int LENS_FACING_FRONT = 0; // 0x0
field public static final int LENS_FACING_UNKNOWN = -1; // 0xffffffff
}
@@ -167,6 +169,18 @@
ctor public DisplayOrientedMeteringPointFactory(android.view.Display, androidx.camera.core.CameraInfo, float, float);
}
+ @RequiresApi(21) @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalGetImage {
+ }
+
+ @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalLensFacing {
+ }
+
+ @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalUseCaseApi {
+ }
+
+ @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalZeroShutterLag {
+ }
+
@RequiresApi(21) public interface ExposureState {
method public int getExposureCompensationIndex();
method public android.util.Range<java.lang.Integer!> getExposureCompensationRange();
@@ -205,6 +219,7 @@
@RequiresApi(21) public final class ImageAnalysis extends androidx.camera.core.UseCase {
method public void clearAnalyzer();
+ method @androidx.camera.core.ExperimentalUseCaseApi public java.util.concurrent.Executor? getBackgroundExecutor();
method public int getBackpressureStrategy();
method public int getImageQueueDepth();
method public int getOutputImageFormat();
@@ -255,10 +270,11 @@
method public void setFlashMode(int);
method public void setTargetRotation(int);
method @Deprecated public void setTargetRotationDegrees(int);
- method public void takePicture(java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageCapturedCallback);
method public void takePicture(androidx.camera.core.ImageCapture.OutputFileOptions, java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageSavedCallback);
+ method public void takePicture(java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageCapturedCallback);
field public static final int CAPTURE_MODE_MAXIMIZE_QUALITY = 0; // 0x0
field public static final int CAPTURE_MODE_MINIMIZE_LATENCY = 1; // 0x1
+ field @androidx.camera.core.ExperimentalZeroShutterLag public static final int CAPTURE_MODE_ZERO_SHUTTER_LAG = 2; // 0x2
field public static final int ERROR_CAMERA_CLOSED = 3; // 0x3
field public static final int ERROR_CAPTURE_FAILED = 2; // 0x2
field public static final int ERROR_FILE_IO = 1; // 0x1
@@ -308,8 +324,8 @@
}
public static final class ImageCapture.OutputFileOptions.Builder {
- ctor public ImageCapture.OutputFileOptions.Builder(java.io.File);
ctor public ImageCapture.OutputFileOptions.Builder(android.content.ContentResolver, android.net.Uri, android.content.ContentValues);
+ ctor public ImageCapture.OutputFileOptions.Builder(java.io.File);
ctor public ImageCapture.OutputFileOptions.Builder(java.io.OutputStream);
method public androidx.camera.core.ImageCapture.OutputFileOptions build();
method public androidx.camera.core.ImageCapture.OutputFileOptions.Builder setMetadata(androidx.camera.core.ImageCapture.Metadata);
@@ -348,6 +364,7 @@
method public android.graphics.Rect getCropRect();
method public int getFormat();
method public int getHeight();
+ method @androidx.camera.core.ExperimentalGetImage public android.media.Image? getImage();
method public androidx.camera.core.ImageInfo getImageInfo();
method public androidx.camera.core.ImageProxy.PlaneProxy![] getPlanes();
method public int getWidth();
@@ -388,8 +405,8 @@
method public androidx.camera.core.resolutionselector.ResolutionSelector? getResolutionSelector();
method public android.util.Range<java.lang.Integer!> getTargetFrameRate();
method public int getTargetRotation();
- method @UiThread public void setSurfaceProvider(java.util.concurrent.Executor, androidx.camera.core.Preview.SurfaceProvider?);
method @UiThread public void setSurfaceProvider(androidx.camera.core.Preview.SurfaceProvider?);
+ method @UiThread public void setSurfaceProvider(java.util.concurrent.Executor, androidx.camera.core.Preview.SurfaceProvider?);
method public void setTargetRotation(int);
}
diff --git a/camera/camera-core/api/public_plus_experimental_current.txt b/camera/camera-core/api/public_plus_experimental_current.txt
deleted file mode 100644
index d7ab729..0000000
--- a/camera/camera-core/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,589 +0,0 @@
-// Signature format: 4.0
-package androidx.camera.core {
-
- @RequiresApi(21) public class AspectRatio {
- field public static final int RATIO_16_9 = 1; // 0x1
- field public static final int RATIO_4_3 = 0; // 0x0
- field public static final int RATIO_DEFAULT = -1; // 0xffffffff
- }
-
- @RequiresApi(21) public interface Camera {
- method public androidx.camera.core.CameraControl getCameraControl();
- method public androidx.camera.core.CameraInfo getCameraInfo();
- }
-
- @RequiresApi(21) public interface CameraControl {
- method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> cancelFocusAndMetering();
- method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> enableTorch(boolean);
- method public com.google.common.util.concurrent.ListenableFuture<java.lang.Integer!> setExposureCompensationIndex(int);
- method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setLinearZoom(@FloatRange(from=0.0f, to=1.0f) float);
- method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setZoomRatio(float);
- method public com.google.common.util.concurrent.ListenableFuture<androidx.camera.core.FocusMeteringResult!> startFocusAndMetering(androidx.camera.core.FocusMeteringAction);
- }
-
- public static final class CameraControl.OperationCanceledException extends java.lang.Exception {
- }
-
- @RequiresApi(21) public abstract class CameraEffect {
- ctor protected CameraEffect(int, java.util.concurrent.Executor, androidx.camera.core.ImageProcessor, androidx.core.util.Consumer<java.lang.Throwable!>);
- ctor protected CameraEffect(int, java.util.concurrent.Executor, androidx.camera.core.SurfaceProcessor, androidx.core.util.Consumer<java.lang.Throwable!>);
- method public androidx.core.util.Consumer<java.lang.Throwable!> getErrorListener();
- method public java.util.concurrent.Executor getExecutor();
- method public androidx.camera.core.SurfaceProcessor? getSurfaceProcessor();
- method public int getTargets();
- field public static final int IMAGE_CAPTURE = 4; // 0x4
- field public static final int PREVIEW = 1; // 0x1
- field public static final int VIDEO_CAPTURE = 2; // 0x2
- }
-
- @RequiresApi(21) public interface CameraFilter {
- method public java.util.List<androidx.camera.core.CameraInfo!> filter(java.util.List<androidx.camera.core.CameraInfo!>);
- }
-
- @RequiresApi(21) public interface CameraInfo {
- method public androidx.camera.core.CameraSelector getCameraSelector();
- method public androidx.lifecycle.LiveData<androidx.camera.core.CameraState!> getCameraState();
- method public androidx.camera.core.ExposureState getExposureState();
- method @FloatRange(from=0, fromInclusive=false) public default float getIntrinsicZoomRatio();
- method public default int getLensFacing();
- method public int getSensorRotationDegrees();
- method public int getSensorRotationDegrees(int);
- method public default java.util.Set<android.util.Range<java.lang.Integer!>!> getSupportedFrameRateRanges();
- method public androidx.lifecycle.LiveData<java.lang.Integer!> getTorchState();
- method public androidx.lifecycle.LiveData<androidx.camera.core.ZoomState!> getZoomState();
- method public boolean hasFlashUnit();
- method public default boolean isFocusMeteringSupported(androidx.camera.core.FocusMeteringAction);
- method @androidx.camera.core.ExperimentalZeroShutterLag public default boolean isZslSupported();
- }
-
- @RequiresApi(21) public final class CameraInfoUnavailableException extends java.lang.Exception {
- }
-
- @RequiresApi(21) public interface CameraProvider {
- method public java.util.List<androidx.camera.core.CameraInfo!> getAvailableCameraInfos();
- method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException;
- }
-
- @RequiresApi(21) public final class CameraSelector {
- method public java.util.List<androidx.camera.core.CameraInfo!> filter(java.util.List<androidx.camera.core.CameraInfo!>);
- field public static final androidx.camera.core.CameraSelector DEFAULT_BACK_CAMERA;
- field public static final androidx.camera.core.CameraSelector DEFAULT_FRONT_CAMERA;
- field public static final int LENS_FACING_BACK = 1; // 0x1
- field @androidx.camera.core.ExperimentalLensFacing public static final int LENS_FACING_EXTERNAL = 2; // 0x2
- field public static final int LENS_FACING_FRONT = 0; // 0x0
- field public static final int LENS_FACING_UNKNOWN = -1; // 0xffffffff
- }
-
- public static final class CameraSelector.Builder {
- ctor public CameraSelector.Builder();
- method public androidx.camera.core.CameraSelector.Builder addCameraFilter(androidx.camera.core.CameraFilter);
- method public androidx.camera.core.CameraSelector build();
- method public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
- }
-
- @RequiresApi(21) @com.google.auto.value.AutoValue public abstract class CameraState {
- ctor public CameraState();
- method public static androidx.camera.core.CameraState create(androidx.camera.core.CameraState.Type);
- method public static androidx.camera.core.CameraState create(androidx.camera.core.CameraState.Type, androidx.camera.core.CameraState.StateError?);
- method public abstract androidx.camera.core.CameraState.StateError? getError();
- method public abstract androidx.camera.core.CameraState.Type getType();
- field public static final int ERROR_CAMERA_DISABLED = 5; // 0x5
- field public static final int ERROR_CAMERA_FATAL_ERROR = 6; // 0x6
- field public static final int ERROR_CAMERA_IN_USE = 2; // 0x2
- field public static final int ERROR_DO_NOT_DISTURB_MODE_ENABLED = 7; // 0x7
- field public static final int ERROR_MAX_CAMERAS_IN_USE = 1; // 0x1
- field public static final int ERROR_OTHER_RECOVERABLE_ERROR = 3; // 0x3
- field public static final int ERROR_STREAM_CONFIG = 4; // 0x4
- }
-
- public enum CameraState.ErrorType {
- enum_constant public static final androidx.camera.core.CameraState.ErrorType CRITICAL;
- enum_constant public static final androidx.camera.core.CameraState.ErrorType RECOVERABLE;
- }
-
- @com.google.auto.value.AutoValue public abstract static class CameraState.StateError {
- ctor public CameraState.StateError();
- method public static androidx.camera.core.CameraState.StateError create(int);
- method public static androidx.camera.core.CameraState.StateError create(int, Throwable?);
- method public abstract Throwable? getCause();
- method public abstract int getCode();
- method public androidx.camera.core.CameraState.ErrorType getType();
- }
-
- public enum CameraState.Type {
- enum_constant public static final androidx.camera.core.CameraState.Type CLOSED;
- enum_constant public static final androidx.camera.core.CameraState.Type CLOSING;
- enum_constant public static final androidx.camera.core.CameraState.Type OPEN;
- enum_constant public static final androidx.camera.core.CameraState.Type OPENING;
- enum_constant public static final androidx.camera.core.CameraState.Type PENDING_OPEN;
- }
-
- @RequiresApi(21) public class CameraUnavailableException extends java.lang.Exception {
- ctor public CameraUnavailableException(int);
- ctor public CameraUnavailableException(int, String?);
- ctor public CameraUnavailableException(int, String?, Throwable?);
- ctor public CameraUnavailableException(int, Throwable?);
- method public int getReason();
- field public static final int CAMERA_DISABLED = 1; // 0x1
- field public static final int CAMERA_DISCONNECTED = 2; // 0x2
- field public static final int CAMERA_ERROR = 3; // 0x3
- field public static final int CAMERA_IN_USE = 4; // 0x4
- field public static final int CAMERA_MAX_IN_USE = 5; // 0x5
- field public static final int CAMERA_UNAVAILABLE_DO_NOT_DISTURB = 6; // 0x6
- field public static final int CAMERA_UNKNOWN_ERROR = 0; // 0x0
- }
-
- @RequiresApi(21) public final class CameraXConfig {
- method public androidx.camera.core.CameraSelector? getAvailableCamerasLimiter(androidx.camera.core.CameraSelector?);
- method public java.util.concurrent.Executor? getCameraExecutor(java.util.concurrent.Executor?);
- method public int getMinimumLoggingLevel();
- method public android.os.Handler? getSchedulerHandler(android.os.Handler?);
- }
-
- public static final class CameraXConfig.Builder {
- method public androidx.camera.core.CameraXConfig build();
- method public static androidx.camera.core.CameraXConfig.Builder fromConfig(androidx.camera.core.CameraXConfig);
- method public androidx.camera.core.CameraXConfig.Builder setAvailableCamerasLimiter(androidx.camera.core.CameraSelector);
- method public androidx.camera.core.CameraXConfig.Builder setCameraExecutor(java.util.concurrent.Executor);
- method public androidx.camera.core.CameraXConfig.Builder setMinimumLoggingLevel(@IntRange(from=android.util.Log.DEBUG, to=android.util.Log.ERROR) int);
- method public androidx.camera.core.CameraXConfig.Builder setSchedulerHandler(android.os.Handler);
- }
-
- public static interface CameraXConfig.Provider {
- method public androidx.camera.core.CameraXConfig getCameraXConfig();
- }
-
- @RequiresApi(21) public class ConcurrentCamera {
- ctor public ConcurrentCamera(java.util.List<androidx.camera.core.Camera!>);
- method public java.util.List<androidx.camera.core.Camera!> getCameras();
- }
-
- public static final class ConcurrentCamera.SingleCameraConfig {
- ctor public ConcurrentCamera.SingleCameraConfig(androidx.camera.core.CameraSelector, androidx.camera.core.UseCaseGroup, androidx.lifecycle.LifecycleOwner);
- method public androidx.camera.core.CameraSelector getCameraSelector();
- method public androidx.lifecycle.LifecycleOwner getLifecycleOwner();
- method public androidx.camera.core.UseCaseGroup getUseCaseGroup();
- }
-
- @RequiresApi(21) public final class DisplayOrientedMeteringPointFactory extends androidx.camera.core.MeteringPointFactory {
- ctor public DisplayOrientedMeteringPointFactory(android.view.Display, androidx.camera.core.CameraInfo, float, float);
- }
-
- @RequiresApi(21) @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalGetImage {
- }
-
- @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalLensFacing {
- }
-
- @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalUseCaseApi {
- }
-
- @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalZeroShutterLag {
- }
-
- @RequiresApi(21) public interface ExposureState {
- method public int getExposureCompensationIndex();
- method public android.util.Range<java.lang.Integer!> getExposureCompensationRange();
- method public android.util.Rational getExposureCompensationStep();
- method public boolean isExposureCompensationSupported();
- }
-
- @RequiresApi(21) public interface ExtendableBuilder<T> {
- method public T build();
- }
-
- @RequiresApi(21) public final class FocusMeteringAction {
- method public long getAutoCancelDurationInMillis();
- method public java.util.List<androidx.camera.core.MeteringPoint!> getMeteringPointsAe();
- method public java.util.List<androidx.camera.core.MeteringPoint!> getMeteringPointsAf();
- method public java.util.List<androidx.camera.core.MeteringPoint!> getMeteringPointsAwb();
- method public boolean isAutoCancelEnabled();
- field public static final int FLAG_AE = 2; // 0x2
- field public static final int FLAG_AF = 1; // 0x1
- field public static final int FLAG_AWB = 4; // 0x4
- }
-
- public static class FocusMeteringAction.Builder {
- ctor public FocusMeteringAction.Builder(androidx.camera.core.MeteringPoint);
- ctor public FocusMeteringAction.Builder(androidx.camera.core.MeteringPoint, int);
- method public androidx.camera.core.FocusMeteringAction.Builder addPoint(androidx.camera.core.MeteringPoint);
- method public androidx.camera.core.FocusMeteringAction.Builder addPoint(androidx.camera.core.MeteringPoint, int);
- method public androidx.camera.core.FocusMeteringAction build();
- method public androidx.camera.core.FocusMeteringAction.Builder disableAutoCancel();
- method public androidx.camera.core.FocusMeteringAction.Builder setAutoCancelDuration(@IntRange(from=1) long, java.util.concurrent.TimeUnit);
- }
-
- @RequiresApi(21) public final class FocusMeteringResult {
- method public boolean isFocusSuccessful();
- }
-
- @RequiresApi(21) public final class ImageAnalysis extends androidx.camera.core.UseCase {
- method public void clearAnalyzer();
- method @androidx.camera.core.ExperimentalUseCaseApi public java.util.concurrent.Executor? getBackgroundExecutor();
- method public int getBackpressureStrategy();
- method public int getImageQueueDepth();
- method public int getOutputImageFormat();
- method public androidx.camera.core.ResolutionInfo? getResolutionInfo();
- method public androidx.camera.core.resolutionselector.ResolutionSelector? getResolutionSelector();
- method public int getTargetRotation();
- method public boolean isOutputImageRotationEnabled();
- method public void setAnalyzer(java.util.concurrent.Executor, androidx.camera.core.ImageAnalysis.Analyzer);
- method public void setTargetRotation(int);
- method @Deprecated public void setTargetRotationDegrees(int);
- field public static final int COORDINATE_SYSTEM_ORIGINAL = 0; // 0x0
- field public static final int OUTPUT_IMAGE_FORMAT_RGBA_8888 = 2; // 0x2
- field public static final int OUTPUT_IMAGE_FORMAT_YUV_420_888 = 1; // 0x1
- field public static final int STRATEGY_BLOCK_PRODUCER = 1; // 0x1
- field public static final int STRATEGY_KEEP_ONLY_LATEST = 0; // 0x0
- }
-
- public static interface ImageAnalysis.Analyzer {
- method public void analyze(androidx.camera.core.ImageProxy);
- method public default android.util.Size? getDefaultTargetResolution();
- method public default int getTargetCoordinateSystem();
- method public default void updateTransform(android.graphics.Matrix?);
- }
-
- public static final class ImageAnalysis.Builder implements androidx.camera.core.ExtendableBuilder<androidx.camera.core.ImageAnalysis> {
- ctor public ImageAnalysis.Builder();
- method public androidx.camera.core.ImageAnalysis build();
- method public androidx.camera.core.ImageAnalysis.Builder setBackgroundExecutor(java.util.concurrent.Executor);
- method public androidx.camera.core.ImageAnalysis.Builder setBackpressureStrategy(int);
- method public androidx.camera.core.ImageAnalysis.Builder setImageQueueDepth(int);
- method public androidx.camera.core.ImageAnalysis.Builder setOutputImageFormat(int);
- method @RequiresApi(23) public androidx.camera.core.ImageAnalysis.Builder setOutputImageRotationEnabled(boolean);
- method public androidx.camera.core.ImageAnalysis.Builder setResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector);
- method @Deprecated public androidx.camera.core.ImageAnalysis.Builder setTargetAspectRatio(int);
- method public androidx.camera.core.ImageAnalysis.Builder setTargetName(String);
- method @Deprecated public androidx.camera.core.ImageAnalysis.Builder setTargetResolution(android.util.Size);
- method public androidx.camera.core.ImageAnalysis.Builder setTargetRotation(int);
- }
-
- @RequiresApi(21) public final class ImageCapture extends androidx.camera.core.UseCase {
- method public int getCaptureMode();
- method public int getFlashMode();
- method @IntRange(from=1, to=100) public int getJpegQuality();
- method public androidx.camera.core.ResolutionInfo? getResolutionInfo();
- method public androidx.camera.core.resolutionselector.ResolutionSelector? getResolutionSelector();
- method public int getTargetRotation();
- method public void setCropAspectRatio(android.util.Rational);
- method public void setFlashMode(int);
- method public void setTargetRotation(int);
- method @Deprecated public void setTargetRotationDegrees(int);
- method public void takePicture(java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageCapturedCallback);
- method public void takePicture(androidx.camera.core.ImageCapture.OutputFileOptions, java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageSavedCallback);
- field public static final int CAPTURE_MODE_MAXIMIZE_QUALITY = 0; // 0x0
- field public static final int CAPTURE_MODE_MINIMIZE_LATENCY = 1; // 0x1
- field @androidx.camera.core.ExperimentalZeroShutterLag public static final int CAPTURE_MODE_ZERO_SHUTTER_LAG = 2; // 0x2
- field public static final int ERROR_CAMERA_CLOSED = 3; // 0x3
- field public static final int ERROR_CAPTURE_FAILED = 2; // 0x2
- field public static final int ERROR_FILE_IO = 1; // 0x1
- field public static final int ERROR_INVALID_CAMERA = 4; // 0x4
- field public static final int ERROR_UNKNOWN = 0; // 0x0
- field public static final int FLASH_MODE_AUTO = 0; // 0x0
- field public static final int FLASH_MODE_OFF = 2; // 0x2
- field public static final int FLASH_MODE_ON = 1; // 0x1
- }
-
- public static final class ImageCapture.Builder implements androidx.camera.core.ExtendableBuilder<androidx.camera.core.ImageCapture> {
- ctor public ImageCapture.Builder();
- method public androidx.camera.core.ImageCapture build();
- method public androidx.camera.core.ImageCapture.Builder setCaptureMode(int);
- method public androidx.camera.core.ImageCapture.Builder setFlashMode(int);
- method public androidx.camera.core.ImageCapture.Builder setIoExecutor(java.util.concurrent.Executor);
- method public androidx.camera.core.ImageCapture.Builder setJpegQuality(@IntRange(from=1, to=100) int);
- method public androidx.camera.core.ImageCapture.Builder setResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector);
- method @Deprecated public androidx.camera.core.ImageCapture.Builder setTargetAspectRatio(int);
- method public androidx.camera.core.ImageCapture.Builder setTargetName(String);
- method @Deprecated public androidx.camera.core.ImageCapture.Builder setTargetResolution(android.util.Size);
- method public androidx.camera.core.ImageCapture.Builder setTargetRotation(int);
- }
-
- public static final class ImageCapture.Metadata {
- ctor public ImageCapture.Metadata();
- method public android.location.Location? getLocation();
- method public boolean isReversedHorizontal();
- method public boolean isReversedVertical();
- method public void setLocation(android.location.Location?);
- method public void setReversedHorizontal(boolean);
- method public void setReversedVertical(boolean);
- }
-
- public abstract static class ImageCapture.OnImageCapturedCallback {
- ctor public ImageCapture.OnImageCapturedCallback();
- method public void onCaptureSuccess(androidx.camera.core.ImageProxy);
- method public void onError(androidx.camera.core.ImageCaptureException);
- }
-
- public static interface ImageCapture.OnImageSavedCallback {
- method public void onError(androidx.camera.core.ImageCaptureException);
- method public void onImageSaved(androidx.camera.core.ImageCapture.OutputFileResults);
- }
-
- public static final class ImageCapture.OutputFileOptions {
- }
-
- public static final class ImageCapture.OutputFileOptions.Builder {
- ctor public ImageCapture.OutputFileOptions.Builder(java.io.File);
- ctor public ImageCapture.OutputFileOptions.Builder(android.content.ContentResolver, android.net.Uri, android.content.ContentValues);
- ctor public ImageCapture.OutputFileOptions.Builder(java.io.OutputStream);
- method public androidx.camera.core.ImageCapture.OutputFileOptions build();
- method public androidx.camera.core.ImageCapture.OutputFileOptions.Builder setMetadata(androidx.camera.core.ImageCapture.Metadata);
- }
-
- public static class ImageCapture.OutputFileResults {
- method public android.net.Uri? getSavedUri();
- }
-
- @RequiresApi(21) public class ImageCaptureException extends java.lang.Exception {
- ctor public ImageCaptureException(int, String, Throwable?);
- method public int getImageCaptureError();
- }
-
- @RequiresApi(21) public interface ImageInfo {
- method public int getRotationDegrees();
- method public default android.graphics.Matrix getSensorToBufferTransformMatrix();
- method public long getTimestamp();
- }
-
- public interface ImageProcessor {
- method public androidx.camera.core.ImageProcessor.Response process(androidx.camera.core.ImageProcessor.Request) throws androidx.camera.core.ProcessingException;
- }
-
- public static interface ImageProcessor.Request {
- method public androidx.camera.core.ImageProxy getInputImage();
- method public int getOutputFormat();
- }
-
- public static interface ImageProcessor.Response {
- method public androidx.camera.core.ImageProxy getOutputImage();
- }
-
- @RequiresApi(21) public interface ImageProxy extends java.lang.AutoCloseable {
- method public void close();
- method public android.graphics.Rect getCropRect();
- method public int getFormat();
- method public int getHeight();
- method @androidx.camera.core.ExperimentalGetImage public android.media.Image? getImage();
- method public androidx.camera.core.ImageInfo getImageInfo();
- method public androidx.camera.core.ImageProxy.PlaneProxy![] getPlanes();
- method public int getWidth();
- method public void setCropRect(android.graphics.Rect?);
- method public default android.graphics.Bitmap toBitmap();
- }
-
- public static interface ImageProxy.PlaneProxy {
- method public java.nio.ByteBuffer getBuffer();
- method public int getPixelStride();
- method public int getRowStride();
- }
-
- @RequiresApi(21) public class InitializationException extends java.lang.Exception {
- ctor public InitializationException(String?);
- ctor public InitializationException(String?, Throwable?);
- ctor public InitializationException(Throwable?);
- }
-
- @RequiresApi(21) public class MeteringPoint {
- method public float getSize();
- }
-
- @RequiresApi(21) public abstract class MeteringPointFactory {
- method public final androidx.camera.core.MeteringPoint createPoint(float, float);
- method public final androidx.camera.core.MeteringPoint createPoint(float, float, float);
- method public static float getDefaultPointSize();
- }
-
- @RequiresApi(21) public class MirrorMode {
- field public static final int MIRROR_MODE_OFF = 0; // 0x0
- field public static final int MIRROR_MODE_ON = 1; // 0x1
- field public static final int MIRROR_MODE_ON_FRONT_ONLY = 2; // 0x2
- }
-
- @RequiresApi(21) public final class Preview extends androidx.camera.core.UseCase {
- method public androidx.camera.core.ResolutionInfo? getResolutionInfo();
- method public androidx.camera.core.resolutionselector.ResolutionSelector? getResolutionSelector();
- method public android.util.Range<java.lang.Integer!> getTargetFrameRate();
- method public int getTargetRotation();
- method @UiThread public void setSurfaceProvider(java.util.concurrent.Executor, androidx.camera.core.Preview.SurfaceProvider?);
- method @UiThread public void setSurfaceProvider(androidx.camera.core.Preview.SurfaceProvider?);
- method public void setTargetRotation(int);
- }
-
- public static final class Preview.Builder implements androidx.camera.core.ExtendableBuilder<androidx.camera.core.Preview> {
- ctor public Preview.Builder();
- method public androidx.camera.core.Preview build();
- method public androidx.camera.core.Preview.Builder setResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector);
- method @Deprecated public androidx.camera.core.Preview.Builder setTargetAspectRatio(int);
- method public androidx.camera.core.Preview.Builder setTargetFrameRate(android.util.Range<java.lang.Integer!>);
- method public androidx.camera.core.Preview.Builder setTargetName(String);
- method @Deprecated public androidx.camera.core.Preview.Builder setTargetResolution(android.util.Size);
- method public androidx.camera.core.Preview.Builder setTargetRotation(int);
- }
-
- public static interface Preview.SurfaceProvider {
- method public void onSurfaceRequested(androidx.camera.core.SurfaceRequest);
- }
-
- public class ProcessingException extends java.lang.Exception {
- ctor public ProcessingException();
- }
-
- @RequiresApi(21) public class ResolutionInfo {
- ctor public ResolutionInfo(android.util.Size, android.graphics.Rect, int);
- method public android.graphics.Rect getCropRect();
- method public android.util.Size getResolution();
- method public int getRotationDegrees();
- }
-
- @RequiresApi(21) public class SurfaceOrientedMeteringPointFactory extends androidx.camera.core.MeteringPointFactory {
- ctor public SurfaceOrientedMeteringPointFactory(float, float);
- ctor public SurfaceOrientedMeteringPointFactory(float, float, androidx.camera.core.UseCase);
- }
-
- public interface SurfaceOutput extends java.io.Closeable {
- method public void close();
- method public android.util.Size getSize();
- method public android.view.Surface getSurface(java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.core.SurfaceOutput.Event!>);
- method public int getTargets();
- method public void updateTransformMatrix(float[], float[]);
- }
-
- @com.google.auto.value.AutoValue public abstract static class SurfaceOutput.Event {
- method public abstract int getEventCode();
- method public abstract androidx.camera.core.SurfaceOutput getSurfaceOutput();
- field public static final int EVENT_REQUEST_CLOSE = 0; // 0x0
- }
-
- public interface SurfaceProcessor {
- method public void onInputSurface(androidx.camera.core.SurfaceRequest) throws androidx.camera.core.ProcessingException;
- method public void onOutputSurface(androidx.camera.core.SurfaceOutput) throws androidx.camera.core.ProcessingException;
- }
-
- @RequiresApi(21) public final class SurfaceRequest {
- method public void addRequestCancellationListener(java.util.concurrent.Executor, Runnable);
- method public void clearTransformationInfoListener();
- method public android.util.Size getResolution();
- method public boolean invalidate();
- method public void provideSurface(android.view.Surface, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.core.SurfaceRequest.Result!>);
- method public void setTransformationInfoListener(java.util.concurrent.Executor, androidx.camera.core.SurfaceRequest.TransformationInfoListener);
- method public boolean willNotProvideSurface();
- }
-
- @com.google.auto.value.AutoValue public abstract static class SurfaceRequest.Result {
- method public abstract int getResultCode();
- method public abstract android.view.Surface getSurface();
- field public static final int RESULT_INVALID_SURFACE = 2; // 0x2
- field public static final int RESULT_REQUEST_CANCELLED = 1; // 0x1
- field public static final int RESULT_SURFACE_ALREADY_PROVIDED = 3; // 0x3
- field public static final int RESULT_SURFACE_USED_SUCCESSFULLY = 0; // 0x0
- field public static final int RESULT_WILL_NOT_PROVIDE_SURFACE = 4; // 0x4
- }
-
- @com.google.auto.value.AutoValue public abstract static class SurfaceRequest.TransformationInfo {
- method public abstract android.graphics.Rect getCropRect();
- method public abstract int getRotationDegrees();
- }
-
- public static interface SurfaceRequest.TransformationInfoListener {
- method public void onTransformationInfoUpdate(androidx.camera.core.SurfaceRequest.TransformationInfo);
- }
-
- @RequiresApi(21) public class TorchState {
- field public static final int OFF = 0; // 0x0
- field public static final int ON = 1; // 0x1
- }
-
- @RequiresApi(21) public abstract class UseCase {
- method public static int snapToSurfaceRotation(@IntRange(from=0, to=359) int);
- }
-
- @RequiresApi(21) public final class UseCaseGroup {
- method public java.util.List<androidx.camera.core.CameraEffect!> getEffects();
- method public java.util.List<androidx.camera.core.UseCase!> getUseCases();
- method public androidx.camera.core.ViewPort? getViewPort();
- }
-
- public static final class UseCaseGroup.Builder {
- ctor public UseCaseGroup.Builder();
- method public androidx.camera.core.UseCaseGroup.Builder addEffect(androidx.camera.core.CameraEffect);
- method public androidx.camera.core.UseCaseGroup.Builder addUseCase(androidx.camera.core.UseCase);
- method public androidx.camera.core.UseCaseGroup build();
- method public androidx.camera.core.UseCaseGroup.Builder setViewPort(androidx.camera.core.ViewPort);
- }
-
- @RequiresApi(21) public final class ViewPort {
- method public android.util.Rational getAspectRatio();
- method public int getLayoutDirection();
- method public int getRotation();
- method public int getScaleType();
- field public static final int FILL_CENTER = 1; // 0x1
- field public static final int FILL_END = 2; // 0x2
- field public static final int FILL_START = 0; // 0x0
- field public static final int FIT = 3; // 0x3
- }
-
- public static final class ViewPort.Builder {
- ctor public ViewPort.Builder(android.util.Rational, int);
- method public androidx.camera.core.ViewPort build();
- method public androidx.camera.core.ViewPort.Builder setLayoutDirection(int);
- method public androidx.camera.core.ViewPort.Builder setScaleType(int);
- }
-
- @RequiresApi(21) public interface ZoomState {
- method public float getLinearZoom();
- method public float getMaxZoomRatio();
- method public float getMinZoomRatio();
- method public float getZoomRatio();
- }
-
-}
-
-package androidx.camera.core.resolutionselector {
-
- @RequiresApi(21) public final class AspectRatioStrategy {
- ctor public AspectRatioStrategy(int, int);
- method public int getFallbackRule();
- method public int getPreferredAspectRatio();
- field public static final int FALLBACK_RULE_AUTO = 1; // 0x1
- field public static final int FALLBACK_RULE_NONE = 0; // 0x0
- field public static final androidx.camera.core.resolutionselector.AspectRatioStrategy RATIO_16_9_FALLBACK_AUTO_STRATEGY;
- field public static final androidx.camera.core.resolutionselector.AspectRatioStrategy RATIO_4_3_FALLBACK_AUTO_STRATEGY;
- }
-
- @RequiresApi(21) public interface ResolutionFilter {
- method public java.util.List<android.util.Size!> filter(java.util.List<android.util.Size!>, int);
- }
-
- @RequiresApi(21) public final class ResolutionSelector {
- method public int getAllowedResolutionMode();
- method public androidx.camera.core.resolutionselector.AspectRatioStrategy getAspectRatioStrategy();
- method public androidx.camera.core.resolutionselector.ResolutionFilter? getResolutionFilter();
- method public androidx.camera.core.resolutionselector.ResolutionStrategy? getResolutionStrategy();
- field public static final int ALLOWED_RESOLUTIONS_NORMAL = 0; // 0x0
- field public static final int ALLOWED_RESOLUTIONS_SLOW = 1; // 0x1
- }
-
- public static final class ResolutionSelector.Builder {
- ctor public ResolutionSelector.Builder();
- method public androidx.camera.core.resolutionselector.ResolutionSelector build();
- method public androidx.camera.core.resolutionselector.ResolutionSelector.Builder setAllowedResolutionMode(int);
- method public androidx.camera.core.resolutionselector.ResolutionSelector.Builder setAspectRatioStrategy(androidx.camera.core.resolutionselector.AspectRatioStrategy);
- method public androidx.camera.core.resolutionselector.ResolutionSelector.Builder setResolutionFilter(androidx.camera.core.resolutionselector.ResolutionFilter);
- method public androidx.camera.core.resolutionselector.ResolutionSelector.Builder setResolutionStrategy(androidx.camera.core.resolutionselector.ResolutionStrategy);
- }
-
- @RequiresApi(21) public final class ResolutionStrategy {
- ctor public ResolutionStrategy(android.util.Size, int);
- method public android.util.Size? getBoundSize();
- method public int getFallbackRule();
- field public static final int FALLBACK_RULE_CLOSEST_HIGHER = 2; // 0x2
- field public static final int FALLBACK_RULE_CLOSEST_HIGHER_THEN_LOWER = 1; // 0x1
- field public static final int FALLBACK_RULE_CLOSEST_LOWER = 4; // 0x4
- field public static final int FALLBACK_RULE_CLOSEST_LOWER_THEN_HIGHER = 3; // 0x3
- field public static final int FALLBACK_RULE_NONE = 0; // 0x0
- field public static final androidx.camera.core.resolutionselector.ResolutionStrategy HIGHEST_AVAILABLE_STRATEGY;
- }
-
-}
-
diff --git a/camera/camera-core/api/restricted_current.txt b/camera/camera-core/api/restricted_current.txt
index 2b46a21..f235ce6 100644
--- a/camera/camera-core/api/restricted_current.txt
+++ b/camera/camera-core/api/restricted_current.txt
@@ -53,6 +53,7 @@
method public androidx.lifecycle.LiveData<androidx.camera.core.ZoomState!> getZoomState();
method public boolean hasFlashUnit();
method public default boolean isFocusMeteringSupported(androidx.camera.core.FocusMeteringAction);
+ method @androidx.camera.core.ExperimentalZeroShutterLag public default boolean isZslSupported();
}
@RequiresApi(21) public final class CameraInfoUnavailableException extends java.lang.Exception {
@@ -68,6 +69,7 @@
field public static final androidx.camera.core.CameraSelector DEFAULT_BACK_CAMERA;
field public static final androidx.camera.core.CameraSelector DEFAULT_FRONT_CAMERA;
field public static final int LENS_FACING_BACK = 1; // 0x1
+ field @androidx.camera.core.ExperimentalLensFacing public static final int LENS_FACING_EXTERNAL = 2; // 0x2
field public static final int LENS_FACING_FRONT = 0; // 0x0
field public static final int LENS_FACING_UNKNOWN = -1; // 0xffffffff
}
@@ -167,6 +169,18 @@
ctor public DisplayOrientedMeteringPointFactory(android.view.Display, androidx.camera.core.CameraInfo, float, float);
}
+ @RequiresApi(21) @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalGetImage {
+ }
+
+ @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalLensFacing {
+ }
+
+ @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalUseCaseApi {
+ }
+
+ @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalZeroShutterLag {
+ }
+
@RequiresApi(21) public interface ExposureState {
method public int getExposureCompensationIndex();
method public android.util.Range<java.lang.Integer!> getExposureCompensationRange();
@@ -205,6 +219,7 @@
@RequiresApi(21) public final class ImageAnalysis extends androidx.camera.core.UseCase {
method public void clearAnalyzer();
+ method @androidx.camera.core.ExperimentalUseCaseApi public java.util.concurrent.Executor? getBackgroundExecutor();
method public int getBackpressureStrategy();
method public int getImageQueueDepth();
method public int getOutputImageFormat();
@@ -255,10 +270,11 @@
method public void setFlashMode(int);
method public void setTargetRotation(int);
method @Deprecated public void setTargetRotationDegrees(int);
- method public void takePicture(java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageCapturedCallback);
method public void takePicture(androidx.camera.core.ImageCapture.OutputFileOptions, java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageSavedCallback);
+ method public void takePicture(java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageCapturedCallback);
field public static final int CAPTURE_MODE_MAXIMIZE_QUALITY = 0; // 0x0
field public static final int CAPTURE_MODE_MINIMIZE_LATENCY = 1; // 0x1
+ field @androidx.camera.core.ExperimentalZeroShutterLag public static final int CAPTURE_MODE_ZERO_SHUTTER_LAG = 2; // 0x2
field public static final int ERROR_CAMERA_CLOSED = 3; // 0x3
field public static final int ERROR_CAPTURE_FAILED = 2; // 0x2
field public static final int ERROR_FILE_IO = 1; // 0x1
@@ -308,8 +324,8 @@
}
public static final class ImageCapture.OutputFileOptions.Builder {
- ctor public ImageCapture.OutputFileOptions.Builder(java.io.File);
ctor public ImageCapture.OutputFileOptions.Builder(android.content.ContentResolver, android.net.Uri, android.content.ContentValues);
+ ctor public ImageCapture.OutputFileOptions.Builder(java.io.File);
ctor public ImageCapture.OutputFileOptions.Builder(java.io.OutputStream);
method public androidx.camera.core.ImageCapture.OutputFileOptions build();
method public androidx.camera.core.ImageCapture.OutputFileOptions.Builder setMetadata(androidx.camera.core.ImageCapture.Metadata);
@@ -348,6 +364,7 @@
method public android.graphics.Rect getCropRect();
method public int getFormat();
method public int getHeight();
+ method @androidx.camera.core.ExperimentalGetImage public android.media.Image? getImage();
method public androidx.camera.core.ImageInfo getImageInfo();
method public androidx.camera.core.ImageProxy.PlaneProxy![] getPlanes();
method public int getWidth();
@@ -388,8 +405,8 @@
method public androidx.camera.core.resolutionselector.ResolutionSelector? getResolutionSelector();
method public android.util.Range<java.lang.Integer!> getTargetFrameRate();
method public int getTargetRotation();
- method @UiThread public void setSurfaceProvider(java.util.concurrent.Executor, androidx.camera.core.Preview.SurfaceProvider?);
method @UiThread public void setSurfaceProvider(androidx.camera.core.Preview.SurfaceProvider?);
+ method @UiThread public void setSurfaceProvider(java.util.concurrent.Executor, androidx.camera.core.Preview.SurfaceProvider?);
method public void setTargetRotation(int);
}
diff --git a/camera/camera-core/build.gradle b/camera/camera-core/build.gradle
index c789d6d..90360e1 100644
--- a/camera/camera-core/build.gradle
+++ b/camera/camera-core/build.gradle
@@ -111,7 +111,7 @@
}
androidx {
- name = "Jetpack Camera Core Library"
+ name = "Camera Core"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2019"
description = "Core components for the Jetpack Camera Library, a library providing a " +
diff --git a/camera/camera-core/src/androidTest/java/androidx/camera/core/AndroidImageProxyTest.kt b/camera/camera-core/src/androidTest/java/androidx/camera/core/AndroidImageProxyTest.kt
index a8dc00c..eafedc5 100644
--- a/camera/camera-core/src/androidTest/java/androidx/camera/core/AndroidImageProxyTest.kt
+++ b/camera/camera-core/src/androidTest/java/androidx/camera/core/AndroidImageProxyTest.kt
@@ -22,15 +22,14 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
+import com.google.common.truth.Truth.assertThat
+import java.nio.ByteBuffer
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import org.mockito.Mockito.`when`
import org.mockito.Mockito.mock
import org.mockito.Mockito.verify
-import java.nio.ByteBuffer
-
-import com.google.common.truth.Truth.assertThat
+import org.mockito.Mockito.`when`
/**
* Unit tests for {@link AndroidImageProxy}.
diff --git a/camera/camera-core/src/androidTest/java/androidx/camera/core/imagecapture/JpegBytes2DiskDeviceTest.kt b/camera/camera-core/src/androidTest/java/androidx/camera/core/imagecapture/JpegBytes2DiskDeviceTest.kt
index d414a20..1a60fa7 100644
--- a/camera/camera-core/src/androidTest/java/androidx/camera/core/imagecapture/JpegBytes2DiskDeviceTest.kt
+++ b/camera/camera-core/src/androidTest/java/androidx/camera/core/imagecapture/JpegBytes2DiskDeviceTest.kt
@@ -19,22 +19,20 @@
import android.graphics.BitmapFactory
import android.graphics.ImageFormat
import android.graphics.Matrix
-import androidx.camera.core.imagecapture.Utils.CAMERA_CAPTURE_RESULT
-import androidx.camera.core.imagecapture.Utils.HEIGHT
-import androidx.camera.core.imagecapture.Utils.ROTATION_DEGREES
-import androidx.camera.core.imagecapture.Utils.WIDTH
-import androidx.camera.core.imagecapture.Utils.TEMP_FILE
-
import android.graphics.Rect
import android.util.Size
import androidx.camera.core.ImageCapture
+import androidx.camera.core.imagecapture.Utils.CAMERA_CAPTURE_RESULT
+import androidx.camera.core.imagecapture.Utils.HEIGHT
+import androidx.camera.core.imagecapture.Utils.ROTATION_DEGREES
+import androidx.camera.core.imagecapture.Utils.TEMP_FILE
+import androidx.camera.core.imagecapture.Utils.WIDTH
import androidx.camera.core.impl.utils.Exif
import androidx.camera.core.processing.Packet
import androidx.camera.testing.ExifUtil
+import androidx.camera.testing.TestImageUtil.createBitmap
import androidx.camera.testing.TestImageUtil.createJpegBytes
import androidx.camera.testing.TestImageUtil.getAverageDiff
-import androidx.camera.testing.TestImageUtil.createBitmap
-
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
diff --git a/camera/camera-core/src/androidTest/java/androidx/camera/core/impl/utils/ExifOutputStreamTest.kt b/camera/camera-core/src/androidTest/java/androidx/camera/core/impl/utils/ExifOutputStreamTest.kt
index c6386b0..5945f0a 100644
--- a/camera/camera-core/src/androidTest/java/androidx/camera/core/impl/utils/ExifOutputStreamTest.kt
+++ b/camera/camera-core/src/androidTest/java/androidx/camera/core/impl/utils/ExifOutputStreamTest.kt
@@ -23,8 +23,8 @@
import androidx.test.filters.LargeTest
import androidx.test.filters.SdkSuppress
import com.google.common.truth.Truth.assertThat
-import org.junit.Test
import java.io.File
+import org.junit.Test
@LargeTest
@SdkSuppress(minSdkVersion = 21)
diff --git a/camera/camera-core/src/androidTest/java/androidx/camera/core/internal/utils/ZslRingBufferTest.kt b/camera/camera-core/src/androidTest/java/androidx/camera/core/internal/utils/ZslRingBufferTest.kt
index 76d4471..63fcf61 100644
--- a/camera/camera-core/src/androidTest/java/androidx/camera/core/internal/utils/ZslRingBufferTest.kt
+++ b/camera/camera-core/src/androidTest/java/androidx/camera/core/internal/utils/ZslRingBufferTest.kt
@@ -31,11 +31,11 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import org.mockito.Mockito.`when`
import org.mockito.Mockito.any
import org.mockito.Mockito.mock
import org.mockito.Mockito.times
import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when`
@RunWith(JUnit4::class)
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/DynamicRange.java b/camera/camera-core/src/main/java/androidx/camera/core/DynamicRange.java
index e1e221a..df198ab 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/DynamicRange.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/DynamicRange.java
@@ -24,35 +24,56 @@
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
-/** A representation of the dynamic range of an image. */
+/**
+ * A representation of the dynamic range of an image.
+ *
+ * <p>The dynamic range specifies an encoding for how pixels will be displayed on screen along
+ * with the number of bits used to encode each pixel. In general, the encoding represents a set
+ * of operations applied to each pixel to expand the range of light and dark pixels on a
+ * specific screen. The bit depth represents the discrete number of steps those pixels can assume
+ * between the lightest and darkest pixels.
+ *
+ * <p>A category of dynamic ranges called high-dynamic range (HDR) are able to encode brighter
+ * highlights, darker shadows, and richer color. This class contains constants for specific HDR
+ * dynamic ranges, such as {@link DynamicRange#HLG_10_BIT}, but also unspecified HDR dynamic
+ * ranges, such as {@link DynamicRange#HDR_UNSPECIFIED_10_BIT}. When used with a camera API, such
+ * as {@link androidx.camera.video.VideoCapture.Builder#setDynamicRange(DynamicRange)}, these
+ * unspecified dynamic ranges will use device defaults as the HDR encoding.
+ *
+ * <p>The legacy behavior of most devices is to capture in standard dynamic range (SDR), which is
+ * represented by {@link DynamicRange#SDR}. This will be the default dynamic range encoding for
+ * most APIs taking dynamic range unless otherwise specified.
+ *
+ * @see androidx.camera.video.VideoCapture.Builder#setDynamicRange(DynamicRange)
+ */
@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public final class DynamicRange {
/**
- * An unspecified dynamic range format which allows the device to determine the underlying
- * dynamic range format.
+ * An unspecified dynamic range encoding which allows the device to determine the underlying
+ * dynamic range encoding.
*/
- public static final int FORMAT_UNSPECIFIED = 0;
+ public static final int ENCODING_UNSPECIFIED = 0;
- /** Standard Dynamic Range (SDR) format. */
- public static final int FORMAT_SDR = 1;
+ /** Standard Dynamic Range (SDR) encoding. */
+ public static final int ENCODING_SDR = 1;
//------------------------------------------------------------------------------//
- // HDR Formats //
+ // HDR Encodings //
//------------------------------------------------------------------------------//
/**
- * An unspecified dynamic range format which allows the device to determine the
- * underlying dynamic range format, limited to High Dynamic Range (HDR) encodings.
+ * An unspecified dynamic range encoding which allows the device to determine the
+ * underlying dynamic range encoding, limited to High Dynamic Range (HDR) encodings.
*/
- public static final int FORMAT_HDR_UNSPECIFIED = 2;
- /** Hybrid Log Gamma (HLG) dynamic range format. */
- public static final int FORMAT_HLG = FORMAT_HDR_UNSPECIFIED + 1;
- /** HDR10 dynamic range format. */
- public static final int FORMAT_HDR10 = FORMAT_HDR_UNSPECIFIED + 2;
- /** HDR10+ dynamic range format. */
- public static final int FORMAT_HDR10_PLUS = FORMAT_HDR_UNSPECIFIED + 3;
- /** Dolby Vision dynamic range format. */
- public static final int FORMAT_DOLBY_VISION = FORMAT_HDR_UNSPECIFIED + 4;
+ public static final int ENCODING_HDR_UNSPECIFIED = 2;
+ /** Hybrid Log Gamma (HLG) dynamic range encoding. */
+ public static final int ENCODING_HLG = ENCODING_HDR_UNSPECIFIED + 1;
+ /** HDR10 dynamic range encoding. */
+ public static final int ENCODING_HDR10 = ENCODING_HDR_UNSPECIFIED + 2;
+ /** HDR10+ dynamic range encoding. */
+ public static final int ENCODING_HDR10_PLUS = ENCODING_HDR_UNSPECIFIED + 3;
+ /** Dolby Vision dynamic range encoding. */
+ public static final int ENCODING_DOLBY_VISION = ENCODING_HDR_UNSPECIFIED + 4;
//------------------------------------------------------------------------------//
/** Bit depth is unspecified and may be determined automatically by the device. */
@@ -63,10 +84,11 @@
public static final int BIT_DEPTH_10_BIT = 10;
@RestrictTo(RestrictTo.Scope.LIBRARY)
- @IntDef({FORMAT_UNSPECIFIED, FORMAT_SDR, FORMAT_HDR_UNSPECIFIED, FORMAT_HLG, FORMAT_HDR10,
- FORMAT_HDR10_PLUS, FORMAT_DOLBY_VISION})
+ @IntDef({ENCODING_UNSPECIFIED, ENCODING_SDR, ENCODING_HDR_UNSPECIFIED, ENCODING_HLG,
+ ENCODING_HDR10,
+ ENCODING_HDR10_PLUS, ENCODING_DOLBY_VISION})
@Retention(RetentionPolicy.SOURCE)
- public @interface DynamicRangeFormat {
+ public @interface DynamicRangeEncoding {
}
@RestrictTo(RestrictTo.Scope.LIBRARY)
@@ -75,67 +97,155 @@
public @interface BitDepth {
}
+ //------------------------------------------------------------------------------//
+ // Pre-defined DynamicRanges //
+ //------------------------------------------------------------------------------//
/**
- * A dynamic range with unspecified format and bit depth
+ * A dynamic range with unspecified encoding and bit depth.
*
* <p>The dynamic range is unspecified and may defer to device defaults when used to select a
* dynamic range.
+ *
+ * <p>This dynamic range is composed of:
+ * <pre>
+ * Encoding: ENCODING_UNSPECIFIED
+ * Bit Depth: BIT_DEPTH_UNSPECIFIED
+ * </pre>
*/
@NonNull
- public static final DynamicRange UNSPECIFIED = new DynamicRange(FORMAT_UNSPECIFIED,
+ public static final DynamicRange UNSPECIFIED = new DynamicRange(ENCODING_UNSPECIFIED,
BIT_DEPTH_UNSPECIFIED);
- /** A dynamic range representing 8-bit standard dynamic range (SDR). */
+ /**
+ * A dynamic range representing 8-bit standard dynamic range (SDR).
+ *
+ * <p>This dynamic range is composed of:
+ * <pre>
+ * Encoding: ENCODING_SDR
+ * Bit Depth: BIT_DEPTH_8_BIT
+ * </pre>
+ */
@NonNull
- public static final DynamicRange SDR = new DynamicRange(FORMAT_SDR, BIT_DEPTH_8_BIT);
+ public static final DynamicRange SDR = new DynamicRange(ENCODING_SDR, BIT_DEPTH_8_BIT);
/**
- * A dynamic range representing 10-bit high dynamic range (HDR) with unspecified format.
+ * A dynamic range representing 10-bit high dynamic range (HDR) with unspecified encoding.
*
- * <p>The HDR format is unspecified, and may defer to device defaults
+ * <p>The HDR encoding is unspecified, and may defer to device defaults
* when used to select a dynamic range. In this case, the dynamic range will be limited to
* 10-bit high dynamic ranges.
+ *
+ * <p>This dynamic range is composed of:
+ * <pre>
+ * Encoding: ENCODING_HDR_UNSPECIFIED
+ * Bit Depth: BIT_DEPTH_10_BIT
+ * </pre>
*/
@NonNull
public static final DynamicRange HDR_UNSPECIFIED_10_BIT =
- new DynamicRange(FORMAT_HDR_UNSPECIFIED, BIT_DEPTH_10_BIT);
+ new DynamicRange(ENCODING_HDR_UNSPECIFIED, BIT_DEPTH_10_BIT);
- private final @DynamicRangeFormat int mFormat;
+ /**
+ * A 10-bit high-dynamic range with HLG encoding.
+ *
+ * <p>This dynamic range is composed of:
+ * <pre>
+ * Encoding: ENCODING_HLG
+ * Bit Depth: BIT_DEPTH_10_BIT
+ * </pre>
+ */
+ @NonNull
+ public static final DynamicRange HLG_10_BIT = new DynamicRange(ENCODING_HLG, BIT_DEPTH_10_BIT);
+
+ /**
+ * A 10-bit high-dynamic range with HDR10 encoding.
+ *
+ * <p>This dynamic range is composed of:
+ * <pre>
+ * Encoding: ENCODING_HDR10
+ * Bit Depth: BIT_DEPTH_10_BIT
+ * </pre>
+ */
+ @NonNull
+ public static final DynamicRange HDR10_10_BIT = new DynamicRange(ENCODING_HDR10,
+ BIT_DEPTH_10_BIT);
+
+ /**
+ * A 10-bit high-dynamic range with HDR10+ encoding.
+ *
+ * <p>This dynamic range is composed of:
+ * <pre>
+ * Encoding: ENCODING_HDR10_PLUS
+ * Bit Depth: BIT_DEPTH_10_BIT
+ * </pre>
+ */
+ @NonNull
+ public static final DynamicRange HDR10_PLUS_10_BIT = new DynamicRange(ENCODING_HDR10_PLUS,
+ BIT_DEPTH_10_BIT);
+
+ /**
+ * A 10-bit high-dynamic range with Dolby Vision encoding.
+ *
+ * <p>This dynamic range is composed of:
+ * <pre>
+ * Encoding: ENCODING_DOLBY_VISION
+ * Bit Depth: BIT_DEPTH_10_BIT
+ * </pre>
+ */
+ @NonNull
+ public static final DynamicRange DOLBY_VISION_10_BIT = new DynamicRange(ENCODING_DOLBY_VISION,
+ BIT_DEPTH_10_BIT);
+
+ /**
+ * An 8-bit high-dynamic range with Dolby Vision encoding.
+ *
+ * <p>This dynamic range is composed of:
+ * <pre>
+ * Encoding: ENCODING_DOLBY_VISION
+ * Bit Depth: BIT_DEPTH_8_BIT
+ * </pre>
+ */
+ @NonNull
+ public static final DynamicRange DOLBY_VISION_8_BIT = new DynamicRange(ENCODING_DOLBY_VISION,
+ BIT_DEPTH_8_BIT);
+ //------------------------------------------------------------------------------//
+
+ private final @DynamicRangeEncoding int mEncoding;
private final @BitDepth int mBitDepth;
/**
- * Creates a dynamic range representation from a format and bit depth.
+ * Creates a dynamic range representation from a encoding and bit depth.
*
* <p>This constructor is left public for testing purposes. It does not do any verification that
- * the provided arguments are a valid combination of format and bit depth.
+ * the provided arguments are a valid combination of encoding and bit depth.
*
- * @param format The dynamic range format.
+ * @param encoding The dynamic range encoding.
* @param bitDepth The bit depth.
*/
public DynamicRange(
- @DynamicRangeFormat int format,
+ @DynamicRangeEncoding int encoding,
@BitDepth int bitDepth) {
- mFormat = format;
+ mEncoding = encoding;
mBitDepth = bitDepth;
}
/**
- * Returns the dynamic range format.
+ * Returns the dynamic range encoding.
*
- * @return The dynamic range format. Possible values are {@link #FORMAT_SDR},
- * {@link #FORMAT_HLG}, {@link #FORMAT_HDR10}, {@link #FORMAT_HDR10_PLUS}, or
- * {@link #FORMAT_DOLBY_VISION}.
+ * @return The dynamic range encoding. Possible values are {@link #ENCODING_SDR},
+ * {@link #ENCODING_HLG}, {@link #ENCODING_HDR10}, {@link #ENCODING_HDR10_PLUS}, or
+ * {@link #ENCODING_DOLBY_VISION}.
*/
- @DynamicRangeFormat
- public int getFormat() {
- return mFormat;
+ @DynamicRangeEncoding
+ public int getEncoding() {
+ return mEncoding;
}
/**
* Returns the bit depth used by this dynamic range configuration.
*
- * <p>Common values are {@link #BIT_DEPTH_8_BIT}, such as for {@link #FORMAT_SDR} or
- * {@link #BIT_DEPTH_10_BIT}, such as for {@link #FORMAT_HDR10}.
+ * <p>Common values are {@link #BIT_DEPTH_8_BIT}, such as for {@link #ENCODING_SDR} or
+ * {@link #BIT_DEPTH_10_BIT}, such as for {@link #ENCODING_HDR10}.
*
* @return The bit depth. Possible values are {@link #BIT_DEPTH_8_BIT},
* {@link #BIT_DEPTH_10_BIT}, or {@link #BIT_DEPTH_UNSPECIFIED}.
@@ -149,7 +259,7 @@
@Override
public String toString() {
return "DynamicRange@" + Integer.toHexString(System.identityHashCode(this)) + "{"
- + "format=" + getFormatLabel(mFormat) + ", "
+ + "encoding=" + getEncodingLabel(mEncoding) + ", "
+ "bitDepth=" + mBitDepth
+ "}";
}
@@ -161,7 +271,7 @@
}
if (o instanceof DynamicRange) {
DynamicRange that = (DynamicRange) o;
- return this.mFormat == that.getFormat()
+ return this.mEncoding == that.getEncoding()
&& this.mBitDepth == that.getBitDepth();
}
return false;
@@ -171,22 +281,22 @@
public int hashCode() {
int hashCode = 1;
hashCode *= 1000003;
- hashCode ^= mFormat;
+ hashCode ^= mEncoding;
hashCode *= 1000003;
hashCode ^= mBitDepth;
return hashCode;
}
@NonNull
- private static String getFormatLabel(@DynamicRangeFormat int format) {
- switch (format) {
- case FORMAT_UNSPECIFIED: return "FORMAT_UNSPECIFIED";
- case FORMAT_SDR: return "FORMAT_SDR";
- case FORMAT_HDR_UNSPECIFIED: return "FORMAT_HDR_UNSPECIFIED";
- case FORMAT_HLG: return "FORMAT_HLG";
- case FORMAT_HDR10: return "FORMAT_HDR10";
- case FORMAT_HDR10_PLUS: return "FORMAT_HDR10_PLUS";
- case FORMAT_DOLBY_VISION: return "FORMAT_DOLBY_VISION";
+ private static String getEncodingLabel(@DynamicRangeEncoding int encoding) {
+ switch (encoding) {
+ case ENCODING_UNSPECIFIED: return "UNSPECIFIED";
+ case ENCODING_SDR: return "SDR";
+ case ENCODING_HDR_UNSPECIFIED: return "HDR_UNSPECIFIED";
+ case ENCODING_HLG: return "HLG";
+ case ENCODING_HDR10: return "HDR10";
+ case ENCODING_HDR10_PLUS: return "HDR10_PLUS";
+ case ENCODING_DOLBY_VISION: return "DOLBY_VISION";
}
return "<Unknown>";
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/ImageCapture.java b/camera/camera-core/src/main/java/androidx/camera/core/ImageCapture.java
index 3152b85..ef78ae5a 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/ImageCapture.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/ImageCapture.java
@@ -87,25 +87,21 @@
import androidx.annotation.RestrictTo.Scope;
import androidx.annotation.UiThread;
import androidx.annotation.VisibleForTesting;
-import androidx.camera.core.ForwardingImageProxy.OnImageCloseListener;
import androidx.camera.core.imagecapture.ImageCaptureControl;
import androidx.camera.core.imagecapture.ImagePipeline;
import androidx.camera.core.imagecapture.TakePictureManager;
import androidx.camera.core.imagecapture.TakePictureRequest;
-import androidx.camera.core.impl.CameraCaptureCallback;
import androidx.camera.core.impl.CameraConfig;
import androidx.camera.core.impl.CameraInfoInternal;
import androidx.camera.core.impl.CameraInternal;
import androidx.camera.core.impl.CaptureConfig;
import androidx.camera.core.impl.Config;
import androidx.camera.core.impl.ConfigProvider;
-import androidx.camera.core.impl.DeferrableSurface;
import androidx.camera.core.impl.ImageCaptureConfig;
import androidx.camera.core.impl.ImageInputConfig;
import androidx.camera.core.impl.ImageOutputConfig;
import androidx.camera.core.impl.ImageOutputConfig.RotationValue;
import androidx.camera.core.impl.ImageReaderProxy;
-import androidx.camera.core.impl.ImmediateSurface;
import androidx.camera.core.impl.MutableConfig;
import androidx.camera.core.impl.MutableOptionsBundle;
import androidx.camera.core.impl.OptionsBundle;
@@ -116,7 +112,6 @@
import androidx.camera.core.impl.utils.CameraOrientationUtil;
import androidx.camera.core.impl.utils.Exif;
import androidx.camera.core.impl.utils.executor.CameraXExecutors;
-import androidx.camera.core.impl.utils.futures.FutureCallback;
import androidx.camera.core.impl.utils.futures.Futures;
import androidx.camera.core.internal.IoConfig;
import androidx.camera.core.internal.TargetConfig;
@@ -126,7 +121,6 @@
import androidx.camera.core.resolutionselector.AspectRatioStrategy;
import androidx.camera.core.resolutionselector.ResolutionSelector;
import androidx.camera.core.resolutionselector.ResolutionStrategy;
-import androidx.concurrent.futures.CallbackToFutureAdapter;
import androidx.core.util.Preconditions;
import androidx.lifecycle.LifecycleOwner;
@@ -139,18 +133,11 @@
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.nio.ByteBuffer;
-import java.util.ArrayDeque;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Deque;
import java.util.HashSet;
import java.util.List;
-import java.util.Locale;
import java.util.Objects;
import java.util.Set;
import java.util.UUID;
-import java.util.concurrent.CancellationException;
import java.util.concurrent.Executor;
import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -277,8 +264,6 @@
@FlashMode
private static final int DEFAULT_FLASH_MODE = FLASH_MODE_OFF;
- boolean mUseProcessingPipeline = true;
-
@SuppressWarnings("WeakerAccess") /* synthetic accessor */
static final ExifRotationAvailability EXIF_ROTATION_AVAILABILITY =
new ExifRotationAvailability();
@@ -291,9 +276,6 @@
}
};
- @NonNull
- @SuppressWarnings("WeakerAccess") /* synthetic accessor */
- final Executor mIoExecutor;
@CaptureMode
private final int mCaptureMode;
@@ -315,35 +297,16 @@
private Rational mCropAspectRatio = null;
////////////////////////////////////////////////////////////////////////////////////////////
- // [UseCase attached constant] - Is only valid when the UseCase is attached to a camera.
- ////////////////////////////////////////////////////////////////////////////////////////////
- private CaptureConfig mCaptureConfig;
-
- /**
- * Whether the software JPEG pipeline will be used.
- */
- private boolean mUseSoftwareJpeg = false;
-
- ////////////////////////////////////////////////////////////////////////////////////////////
// [UseCase attached dynamic] - Can change but is only available when the UseCase is attached.
////////////////////////////////////////////////////////////////////////////////////////////
@SuppressWarnings("WeakerAccess") /* synthetic accessor */
SessionConfig.Builder mSessionConfigBuilder;
- /** synthetic accessor */
- @SuppressWarnings("WeakerAccess")
- SafeCloseImageReaderProxy mImageReader;
-
- /** Callback used to match the {@link ImageProxy} with the {@link ImageInfo}. */
- private CameraCaptureCallback mMetadataMatchingCaptureCallback;
-
- private DeferrableSurface mDeferrableSurface;
-
- private ImageCaptureRequestProcessor mImageCaptureRequestProcessor;
- // Synthetic access
- @SuppressWarnings("WeakerAccess")
- final Executor mSequentialIoExecutor;
+ @Nullable
+ private ImagePipeline mImagePipeline;
+ @Nullable
+ private TakePictureManager mTakePictureManager;
/**
* Creates a new image capture use case from the given configuration.
@@ -363,119 +326,6 @@
}
mFlashType = useCaseConfig.getFlashType(FLASH_TYPE_ONE_SHOT_FLASH);
-
- mIoExecutor = checkNotNull(
- useCaseConfig.getIoExecutor(CameraXExecutors.ioExecutor()));
- mSequentialIoExecutor = CameraXExecutors.newSequentialExecutor(mIoExecutor);
-
- }
-
- @UiThread
- @SuppressWarnings("WeakerAccess") /* synthetic accessor */
- SessionConfig.Builder createPipeline(@NonNull String cameraId,
- @NonNull ImageCaptureConfig config, @NonNull StreamSpec streamSpec) {
- checkMainThread();
- if (isNodeEnabled()) {
- return createPipelineWithNode(cameraId, config, streamSpec);
- }
- SessionConfig.Builder sessionConfigBuilder = SessionConfig.Builder.createFrom(config,
- streamSpec.getResolution());
-
- if (Build.VERSION.SDK_INT >= 23 && getCaptureMode() == CAPTURE_MODE_ZERO_SHUTTER_LAG) {
- getCameraControl().addZslConfig(sessionConfigBuilder);
- }
-
- if (streamSpec.getImplementationOptions() != null) {
- sessionConfigBuilder.addImplementationOptions(streamSpec.getImplementationOptions());
- }
-
- // Setup the ImageReader to do processing
- Size resolution = streamSpec.getResolution();
- if (config.getImageReaderProxyProvider() != null) {
- mImageReader =
- new SafeCloseImageReaderProxy(
- config.getImageReaderProxyProvider().newInstance(resolution.getWidth(),
- resolution.getHeight(), getImageFormat(), MAX_IMAGES, 0));
- mMetadataMatchingCaptureCallback = new CameraCaptureCallback() {
- };
- } else if (isSessionProcessorEnabledInCurrentCamera()) {
- // TODO: remove this section and the rest of the code where it needs the
- // isSessionProcessorEnabledInCurrentCamera check.
- ImageReaderProxy imageReader;
- // SessionProcessor only outputs JPEG format.
- if (getImageFormat() == ImageFormat.JPEG) {
- // SessionProcessor can't guarantee that image and capture result have the same
- // time stamp. Thus we can't use MetadataImageReader
- imageReader = ImageReaderProxys.createIsolatedReader(resolution.getWidth(),
- resolution.getHeight(), ImageFormat.JPEG, MAX_IMAGES);
- mMetadataMatchingCaptureCallback = new CameraCaptureCallback() {
- };
- } else {
- throw new IllegalArgumentException("Unsupported image format:" + getImageFormat());
- }
- mImageReader = new SafeCloseImageReaderProxy(imageReader);
- } else {
- MetadataImageReader metadataImageReader = new MetadataImageReader(resolution.getWidth(),
- resolution.getHeight(), getImageFormat(), MAX_IMAGES);
- mMetadataMatchingCaptureCallback = metadataImageReader.getCameraCaptureCallback();
- mImageReader = new SafeCloseImageReaderProxy(metadataImageReader);
- }
-
- if (mImageCaptureRequestProcessor != null) {
- mImageCaptureRequestProcessor.cancelRequests(
- new CancellationException("Request is canceled."));
- }
-
- mImageCaptureRequestProcessor = new ImageCaptureRequestProcessor(MAX_IMAGES,
- this::takePictureInternal);
-
- // By default close images that come from the listener.
- mImageReader.setOnImageAvailableListener(mClosingListener,
- CameraXExecutors.mainThreadExecutor());
-
- if (mDeferrableSurface != null) {
- mDeferrableSurface.close();
- }
-
- mDeferrableSurface = new ImmediateSurface(
- requireNonNull(mImageReader.getSurface()),
- new Size(mImageReader.getWidth(),
- mImageReader.getHeight()),
- /* get the surface image format using getImageFormat */
- getImageFormat());
-
- mDeferrableSurface.getTerminationFuture().addListener(mImageReader::safeClose,
- CameraXExecutors.mainThreadExecutor());
-
- sessionConfigBuilder.addNonRepeatingSurface(mDeferrableSurface);
-
- sessionConfigBuilder.addErrorListener((sessionConfig, error) -> {
- // Get the unfinished requests before re-create the pipeline
- List<ImageCaptureRequest> pendingRequests = (mImageCaptureRequestProcessor != null)
- ? mImageCaptureRequestProcessor.pullOutUnfinishedRequests()
- : Collections.emptyList();
-
- clearPipeline();
- // Ensure the attached camera has not changed before resetting.
- // TODO(b/143915543): Ensure this never gets called by a camera that is not attached
- // to this use case so we don't need to do this check.
- if (isCurrentCamera(cameraId)) {
- // Only reset the pipeline when the bound camera is the same.
- mSessionConfigBuilder = createPipeline(cameraId, config, streamSpec);
-
- if (mImageCaptureRequestProcessor != null) {
- // Restore the unfinished requests to the created pipeline
- for (ImageCaptureRequest request : pendingRequests) {
- mImageCaptureRequestProcessor.sendRequest(request);
- }
- }
-
- updateSessionConfig(mSessionConfigBuilder.build());
- notifyReset();
- }
- });
-
- return sessionConfigBuilder;
}
private boolean isSessionProcessorEnabledInCurrentCamera() {
@@ -488,31 +338,6 @@
}
/**
- * Clear the internal pipeline so that the pipeline can be set up again.
- */
- @UiThread
- @SuppressWarnings("WeakerAccess")
- void clearPipeline() {
- checkMainThread();
- if (isNodeEnabled()) {
- clearPipelineWithNode();
- return;
- }
- if (mImageCaptureRequestProcessor != null) {
- mImageCaptureRequestProcessor.cancelRequests(
- new CancellationException("Request is canceled."));
- mImageCaptureRequestProcessor = null;
- }
- DeferrableSurface deferrableSurface = mDeferrableSurface;
- mDeferrableSurface = null;
- mImageReader = null;
-
- if (deferrableSurface != null) {
- deferrableSurface.close();
- }
- }
-
- /**
* {@inheritDoc}
*/
@RestrictTo(Scope.LIBRARY_GROUP)
@@ -967,13 +792,8 @@
return;
}
- if (isNodeEnabled()) {
- takePictureWithNode(executor, callback, /*onDiskCallback=*/null,
- /*outputFileOptions=*/null);
- return;
- }
-
- sendImageCaptureRequest(executor, callback, /*saveImage=*/false);
+ takePictureInternal(executor, callback, /*onDiskCallback=*/null,
+ /*outputFileOptions=*/null);
}
/**
@@ -999,83 +819,8 @@
() -> takePicture(outputFileOptions, executor, imageSavedCallback));
return;
}
- if (isNodeEnabled()) {
- takePictureWithNode(executor, /*inMemoryCallback=*/null, imageSavedCallback,
- outputFileOptions);
- return;
- }
-
- /*
- * We need to chain the following callbacks to save the image to disk:
- *
- * +-----------------------+
- * | |
- * |ImageCapture. |
- * |OnImageCapturedCallback|
- * | |
- * +-----------+-----------+
- * |
- * |
- * +-----------v-----------+ +----------------------+
- * | | | |
- * | ImageSaver. | | ImageCapture. |
- * | OnImageSavedCallback +------> OnImageSavedCallback |
- * | | | |
- * +-----------------------+ +----------------------+
- */
-
- // Convert the ImageSaver.OnImageSavedCallback to ImageCapture.OnImageSavedCallback
- final ImageSaver.OnImageSavedCallback imageSavedCallbackWrapper =
- new ImageSaver.OnImageSavedCallback() {
- @Override
- public void onImageSaved(@NonNull OutputFileResults outputFileResults) {
- imageSavedCallback.onImageSaved(outputFileResults);
- }
-
- @Override
- public void onError(@NonNull ImageSaver.SaveError error,
- @NonNull String message,
- @Nullable Throwable cause) {
- @ImageCaptureError int imageCaptureError = ERROR_UNKNOWN;
- // Keep the imageCaptureError as UNKNOWN_ERROR
- if (error == ImageSaver.SaveError.FILE_IO_FAILED) {
- imageCaptureError = ERROR_FILE_IO;
- }
-
- imageSavedCallback.onError(
- new ImageCaptureException(imageCaptureError, message, cause));
- }
- };
-
- int outputJpegQuality = getJpegQualityInternal();
-
- // Wrap the ImageCapture.OnImageSavedCallback with an OnImageCapturedCallback so it can
- // be put into the capture request queue
- OnImageCapturedCallback imageCaptureCallbackWrapper =
- new OnImageCapturedCallback() {
- @Override
- public void onCaptureSuccess(@NonNull ImageProxy image) {
- mIoExecutor.execute(
- new ImageSaver(
- image,
- outputFileOptions,
- image.getImageInfo().getRotationDegrees(),
- outputJpegQuality,
- executor,
- mSequentialIoExecutor,
- imageSavedCallbackWrapper));
- }
-
- @Override
- public void onError(@NonNull final ImageCaptureException exception) {
- imageSavedCallback.onError(exception);
- }
- };
-
- // Always use the mainThreadExecutor for the initial callback so we don't need to double
- // post to another thread
- sendImageCaptureRequest(CameraXExecutors.mainThreadExecutor(),
- imageCaptureCallbackWrapper, /*saveImage=*/true);
+ takePictureInternal(executor, /*inMemoryCallback=*/null, imageSavedCallback,
+ outputFileOptions);
}
@NonNull
@@ -1116,87 +861,9 @@
private void abortImageCaptureRequests() {
if (mTakePictureManager != null) {
mTakePictureManager.abortRequests();
- } else if (mImageCaptureRequestProcessor != null) {
- Throwable throwable = new CameraClosedException("Camera is closed.");
- mImageCaptureRequestProcessor.cancelRequests(throwable);
}
}
- @UiThread
- private void sendImageCaptureRequest(@NonNull Executor callbackExecutor,
- @NonNull OnImageCapturedCallback callback, boolean saveImage) {
-
- // TODO(b/143734846): From here on, the image capture request should be
- // self-contained and use this camera for everything. Currently the pre-capture
- // sequence does not follow this approach and could fail if this use case is unbound
- // or reattached to a different camera in the middle of pre-capture.
- CameraInternal attachedCamera = getCamera();
- if (attachedCamera == null) {
- // Not bound. Notify callback.
- callbackExecutor.execute(
- () -> callback.onError(new ImageCaptureException(ERROR_INVALID_CAMERA,
- "Not bound to a valid Camera [" + ImageCapture.this + "]", null)));
- return;
- }
-
- if (mImageCaptureRequestProcessor == null) {
- callbackExecutor.execute(
- () -> callback.onError(
- new ImageCaptureException(ERROR_UNKNOWN, "Request is canceled", null)));
- return;
- }
-
- mImageCaptureRequestProcessor.sendRequest(new ImageCaptureRequest(
- getRelativeRotation(attachedCamera),
- getJpegQualityForImageCaptureRequest(attachedCamera, saveImage),
- mCropAspectRatio,
- getViewPortCropRect(),
- getSensorToBufferTransformMatrix(),
- callbackExecutor,
- callback));
- }
-
- @UiThread
- private int getJpegQualityForImageCaptureRequest(@NonNull CameraInternal cameraInternal,
- boolean saveImage) {
- int jpegQuality;
- if (saveImage) {
- int rotationDegrees = getRelativeRotation(cameraInternal);
- Size dispatchResolution = requireNonNull(getAttachedSurfaceResolution());
- // At this point, we can't know whether HAL will rotate the captured image or not. No
- // matter HAL will rotate the image byte array or not, it won't affect whether the final
- // image needs cropping or not. Therefore, we can still use the attached surface
- // resolution and its relative rotation degrees against to the target rotation
- // setting to calculate the possible crop rectangle and then use it to determine
- // whether the final image will need cropping or not.
- Rect cropRect = computeDispatchCropRect(getViewPortCropRect(), mCropAspectRatio,
- rotationDegrees, dispatchResolution, rotationDegrees);
- boolean shouldCropImage = ImageUtil.shouldCropImage(dispatchResolution.getWidth(),
- dispatchResolution.getHeight(), cropRect.width(), cropRect.height());
- if (shouldCropImage) {
- // When cropping is required, jpeg compression will occur twice:
- // 1. Jpeg quality set to camera HAL by camera capture request.
- // 2. Bitmap compression during cropping process in ImageSaver.
- // Here we need to define the first compression value and be careful to lose too
- // much quality due to double compression.
- // Setting 100 for the first compression can minimize quality loss, but will result
- // in poor performance during cropping than setting 95 (see b/206348741 for more
- // detail). As a trade-off, max quality mode is set to 100, and the others are set
- // to 95.
- jpegQuality = mCaptureMode == CAPTURE_MODE_MAXIMIZE_QUALITY ? 100 : 95;
- } else {
- jpegQuality = getJpegQualityInternal();
- }
- } else {
- // The captured image will be directly provided to the app via the
- // OnImageCapturedCallback callback. It won't be uncompressed and compressed again
- // after the image is captured. The JPEG quality setting will be directly provided to
- // the HAL to compress the output JPEG image.
- jpegQuality = getJpegQualityInternal();
- }
- return jpegQuality;
- }
-
void lockFlashMode() {
synchronized (mLockedFlashMode) {
if (mLockedFlashMode.get() != null) {
@@ -1257,267 +924,6 @@
}
}
- /**
- * The take picture flow.
- *
- * <p>There are three steps to take a picture.
- *
- * <p>(1) Pre-take picture, which will trigger af/ae scan or open torch if necessary. Then check
- * 3A converged if necessary.
- *
- * <p>(2) Issue take picture single request.
- *
- * <p>(3) Post-take picture, which will cancel af/ae scan or close torch if necessary.
- */
- @NonNull
- private ListenableFuture<ImageProxy> takePictureInternal(
- @NonNull ImageCaptureRequest imageCaptureRequest) {
- return CallbackToFutureAdapter.getFuture(
- completer -> {
- mImageReader.setOnImageAvailableListener(
- (imageReader) -> {
- try {
- ImageProxy image = imageReader.acquireLatestImage();
- if (image != null) {
- if (!completer.set(image)) {
- // If the future is already complete (probably be
- // cancelled), then close the image.
- image.close();
- }
- } else {
- completer.setException(new IllegalStateException(
- "Unable to acquire image"));
- }
- } catch (IllegalStateException e) {
- completer.setException(e);
- }
- },
- CameraXExecutors.mainThreadExecutor());
-
- lockFlashMode();
- ListenableFuture<Void> future = issueTakePicture(imageCaptureRequest);
-
- Futures.addCallback(future,
- new FutureCallback<Void>() {
- @Override
- public void onSuccess(Void result) {
- unlockFlashMode();
- }
-
- @Override
- public void onFailure(@NonNull Throwable throwable) {
- unlockFlashMode();
-
- completer.setException(throwable);
- }
- },
- CameraXExecutors.mainThreadExecutor());
-
- completer.addCancellationListener(() -> future.cancel(true),
- CameraXExecutors.directExecutor());
- return "takePictureInternal";
- });
- }
-
- /**
- * A processor that manages and issues the pending {@link ImageCaptureRequest}s.
- *
- * <p>It ensures that only one single {@link ImageCaptureRequest} is in progress at a time
- * and is able to process next request only when there is not over the maximum number of
- * dispatched image.
- */
- @VisibleForTesting
- static class ImageCaptureRequestProcessor implements OnImageCloseListener {
- @GuardedBy("mLock")
- private final Deque<ImageCaptureRequest> mPendingRequests = new ArrayDeque<>();
-
- @SuppressWarnings("WeakerAccess") /* synthetic accessor */
- @GuardedBy("mLock")
- ImageCaptureRequest mCurrentRequest = null;
-
- @SuppressWarnings("WeakerAccess") /* synthetic accessor */
- @GuardedBy("mLock")
- ListenableFuture<ImageProxy> mCurrentRequestFuture = null;
-
- @SuppressWarnings("WeakerAccess") /* synthetic accessor */
- @GuardedBy("mLock")
- int mOutstandingImages = 0;
-
- @GuardedBy("mLock")
- private final ImageCaptor mImageCaptor;
- private final int mMaxImages;
- @SuppressWarnings("WeakerAccess") /* synthetic accessor */
- final Object mLock = new Object();
-
- ImageCaptureRequestProcessor(int maxImages, @NonNull ImageCaptor imageCaptor) {
- mMaxImages = maxImages;
- mImageCaptor = imageCaptor;
- }
-
- /**
- * Sends an {@link ImageCaptureRequest} to queue.
- *
- * @param imageCaptureRequest the image request
- */
- public void sendRequest(@NonNull ImageCaptureRequest imageCaptureRequest) {
- synchronized (mLock) {
- mPendingRequests.offer(imageCaptureRequest);
- Logger.d(TAG, String.format(Locale.US,
- "Send image capture request [current, pending] = [%d, %d]",
- mCurrentRequest != null ? 1 : 0, mPendingRequests.size()));
- processNextRequest();
- }
- }
-
- /** Cancels current processing and pending requests. */
- public void cancelRequests(@NonNull Throwable throwable) {
- ImageCaptureRequest currentRequest;
- ListenableFuture<ImageProxy> currentRequestFuture;
- List<ImageCaptureRequest> pendingRequests;
- synchronized (mLock) {
- currentRequest = mCurrentRequest;
- mCurrentRequest = null;
- currentRequestFuture = mCurrentRequestFuture;
- mCurrentRequestFuture = null;
- pendingRequests = new ArrayList<>(mPendingRequests);
- mPendingRequests.clear();
- }
- if (currentRequest != null && currentRequestFuture != null) {
- currentRequest.notifyCallbackError(getError(throwable), throwable.getMessage(),
- throwable);
- currentRequestFuture.cancel(true);
- }
- for (ImageCaptureRequest request : pendingRequests) {
- request.notifyCallbackError(getError(throwable), throwable.getMessage(), throwable);
- }
- }
-
- /**
- * Removes and returns all unfinished requests.
- *
- * <p>The unfinished requests include:
- * <ul>
- * <li>Current running request if it is not complete yet.</li>
- * <li>All pending requests.</li>
- * </ul>
- *
- * @return list of the remaining requests
- */
- @NonNull
- public List<ImageCaptureRequest> pullOutUnfinishedRequests() {
- List<ImageCaptureRequest> remainingRequests;
- synchronized (mLock) {
- remainingRequests = new ArrayList<>(mPendingRequests);
- // Clear the pending requests before canceling the mCurrentRequestFuture.
- mPendingRequests.clear();
-
- ImageCaptureRequest currentRequest = mCurrentRequest;
- mCurrentRequest = null;
- if (currentRequest != null && mCurrentRequestFuture != null
- && mCurrentRequestFuture.cancel(true)) {
- remainingRequests.add(0, currentRequest);
- }
- }
-
- return remainingRequests;
- }
-
- @Override
- public void onImageClose(@NonNull ImageProxy image) {
- synchronized (mLock) {
- // TODO: mLock can be removed if all methods and callbacks in
- // ImageCaptureRequestProcessor are used in the main thread.
- // Side note: TakePictureManager already handles the requests in the main thread.
- mOutstandingImages--;
- CameraXExecutors.mainThreadExecutor().execute(this::processNextRequest);
- }
- }
-
- @SuppressWarnings("WeakerAccess") /* synthetic accessor */
- void processNextRequest() {
- synchronized (mLock) {
- // Unable to issue request if there is currently a request in flight
- if (mCurrentRequest != null) {
- return;
- }
-
- // Unable to issue request if the ImageReader has no available image buffer left.
- if (mOutstandingImages >= mMaxImages) {
- Logger.w(TAG,
- "Too many acquire images. Close image to be able to process next.");
- return;
- }
-
- ImageCaptureRequest imageCaptureRequest = mPendingRequests.poll();
- if (imageCaptureRequest == null) {
- return;
- }
-
- mCurrentRequest = imageCaptureRequest;
- mCurrentRequestFuture = mImageCaptor.capture(imageCaptureRequest);
- Futures.addCallback(mCurrentRequestFuture, new FutureCallback<ImageProxy>() {
- @Override
- public void onSuccess(@Nullable ImageProxy image) {
- synchronized (mLock) {
- checkNotNull(image);
- SingleCloseImageProxy wrappedImage = new SingleCloseImageProxy(image);
- wrappedImage.addOnImageCloseListener(ImageCaptureRequestProcessor.this);
- mOutstandingImages++;
- imageCaptureRequest.dispatchImage(wrappedImage);
-
- mCurrentRequest = null;
- mCurrentRequestFuture = null;
- processNextRequest();
- }
- }
-
- @Override
- public void onFailure(@NonNull Throwable t) {
- synchronized (mLock) {
- //noinspection StatementWithEmptyBody
- if (t instanceof CancellationException) {
- // Do not trigger callback which should be done in cancelRequests()
- // with a given throwable.
- } else {
- imageCaptureRequest.notifyCallbackError(getError(t),
- t != null ? t.getMessage() : "Unknown error", t);
- }
-
- mCurrentRequest = null;
- mCurrentRequestFuture = null;
- processNextRequest();
- }
- }
- }, CameraXExecutors.mainThreadExecutor());
- }
- }
-
- /** An interface of an {@link ImageProxy} captor. */
- interface ImageCaptor {
- /**
- * Captures an {@link ImageProxy} by giving a {@link ImageCaptureRequest}.
- *
- * @param imageCaptureRequest an {@link ImageCaptureRequest} contains required
- * parameters for this capture.
- * @return a {@link ListenableFuture represents the capture result. Cancellation to
- * the future should cancel the capture task.
- */
- @NonNull
- ListenableFuture<ImageProxy> capture(@NonNull ImageCaptureRequest imageCaptureRequest);
- }
-
- /**
- * An interface to provide callbacks when processing each capture request.
- */
- interface RequestProcessCallback {
- /**
- * This will be called before starting to process the
- * ImageCaptureRequest.
- */
- void onPreProcessRequest(@NonNull ImageCaptureRequest imageCaptureRequest);
- }
- }
-
@NonNull
@Override
public String toString() {
@@ -1543,7 +949,6 @@
* @return {@code true} if software JPEG will be used after applying constraints.
*/
boolean enforceSoftwareJpegConstraints(@NonNull MutableConfig mutableConfig) {
- // Software encoder currently only supports API 26+.
if (Boolean.TRUE.equals(
mutableConfig.retrieveOption(OPTION_USE_SOFTWARE_JPEG_ENCODER, false))) {
boolean supported = true;
@@ -1576,7 +981,6 @@
public void onUnbind() {
abortImageCaptureRequests();
clearPipeline();
- mUseSoftwareJpeg = false;
}
/**
@@ -1585,15 +989,6 @@
@Override
@RestrictTo(Scope.LIBRARY_GROUP)
public void onBind() {
- ImageCaptureConfig useCaseConfig = (ImageCaptureConfig) getCurrentConfig();
-
- CaptureConfig.Builder captureBuilder = CaptureConfig.Builder.createFrom(useCaseConfig);
- mCaptureConfig = captureBuilder.build();
-
- // This will only be set to true if software JPEG was requested and
- // enforceSoftwareJpegConstraints() hasn't removed the request.
- mUseSoftwareJpeg = useCaseConfig.isSoftwareJpegEncoderRequested();
-
CameraInternal camera = getCamera();
checkNotNull(camera, "Attached camera cannot be null");
}
@@ -1629,59 +1024,6 @@
}
/**
- * Initiates a set of captures that will be used to create the output of
- * {@link #takePicture(OutputFileOptions, Executor, OnImageSavedCallback)} and its variants.
- *
- * <p> This returns a {@link ListenableFuture} whose completion indicates that the
- * captures are finished. Before the future is complete, any modification to the camera state
- * such as 3A could affect the result of the captures. After the future is complete, then it
- * is safe to reset or modify the 3A state.
- */
- ListenableFuture<Void> issueTakePicture(@NonNull ImageCaptureRequest imageCaptureRequest) {
- Logger.d(TAG, "issueTakePicture");
-
- final CaptureConfig.Builder builder = new CaptureConfig.Builder();
- builder.setTemplateType(mCaptureConfig.getTemplateType());
-
- // Add the default implementation options of ImageCapture
- builder.addImplementationOptions(mCaptureConfig.getImplementationOptions());
- builder.addAllCameraCaptureCallbacks(
- mSessionConfigBuilder.getSingleCameraCaptureCallbacks());
-
- builder.addSurface(mDeferrableSurface);
-
- // Only sets the JPEG rotation and quality capture request options when capturing
- // images in JPEG format. Some devices do not handle these CaptureRequest key values
- // when capturing a non-JPEG image. Setting these capture requests and checking the
- // returned capture results for specific purpose might cause problems. See b/204375890.
- if (getImageFormat() == ImageFormat.JPEG) {
- // Add the dynamic implementation options of ImageCapture
- if (EXIF_ROTATION_AVAILABILITY.isRotationOptionSupported()) {
- builder.addImplementationOption(CaptureConfig.OPTION_ROTATION,
- imageCaptureRequest.mRotationDegrees);
- }
- builder.addImplementationOption(CaptureConfig.OPTION_JPEG_QUALITY,
- imageCaptureRequest.mJpegQuality);
- }
-
- builder.addCameraCaptureCallback(mMetadataMatchingCaptureCallback);
-
- return submitStillCaptureRequest(Arrays.asList(builder.build()));
- }
-
- /**
- * ===== New architecture start =====
- *
- * TODO(b/229629844): unit test the interactions between {@link ImageCapture} and
- * {@link ImagePipeline}/{@link TakePictureManager}.
- */
-
- @Nullable
- private ImagePipeline mImagePipeline;
- @Nullable
- private TakePictureManager mTakePictureManager;
-
- /**
* An {@link ImageCaptureControl} implementation to control this {@link ImageCapture} instance.
*/
private final ImageCaptureControl mImageCaptureControl = new ImageCaptureControl() {
@@ -1708,31 +1050,14 @@
};
/**
- * Checks if the node is enabled given the current configuration.
- *
- * <p>This method checks if the new architecture can be enabled based on the current
- * configuration.
- *
- * <p>DO NOT turn on the new architecture until the 1.3 alpha branch is cut. We don't want
- * the quality of 1.2 beta to be affected by the refactoring.
- */
- @MainThread
- private boolean isNodeEnabled() {
- checkMainThread();
- return mUseProcessingPipeline;
- }
-
- /**
* Creates the pipeline for both capture request configuration and image post-processing.
- *
- * <p> This is the new {@link #createPipeline}.
*/
@OptIn(markerClass = ExperimentalZeroShutterLag.class)
@MainThread
- private SessionConfig.Builder createPipelineWithNode(@NonNull String cameraId,
+ private SessionConfig.Builder createPipeline(@NonNull String cameraId,
@NonNull ImageCaptureConfig config, @NonNull StreamSpec streamSpec) {
checkMainThread();
- Log.d(TAG, String.format("createPipelineWithNode(cameraId: %s, streamSpec: %s)",
+ Log.d(TAG, String.format("createPipeline(cameraId: %s, streamSpec: %s)",
cameraId, streamSpec));
Size resolution = streamSpec.getResolution();
@@ -1760,13 +1085,13 @@
// to this use case so we don't need to do this check.
if (isCurrentCamera(cameraId)) {
mTakePictureManager.pause();
- clearPipelineWithNode(/*keepTakePictureManager=*/ true);
+ clearPipeline(/*keepTakePictureManager=*/ true);
mSessionConfigBuilder = createPipeline(cameraId, config, streamSpec);
updateSessionConfig(mSessionConfigBuilder.build());
notifyReset();
mTakePictureManager.resume();
} else {
- clearPipelineWithNode();
+ clearPipeline();
}
});
@@ -1777,18 +1102,18 @@
* Takes a picture with the new architecture.
*/
@MainThread
- private void takePictureWithNode(@NonNull Executor executor,
+ private void takePictureInternal(@NonNull Executor executor,
@Nullable OnImageCapturedCallback inMemoryCallback,
@Nullable ImageCapture.OnImageSavedCallback onDiskCallback,
@Nullable OutputFileOptions outputFileOptions) {
checkMainThread();
- Log.d(TAG, "takePictureWithNode");
+ Log.d(TAG, "takePictureInternal");
CameraInternal camera = getCamera();
if (camera == null) {
sendInvalidCameraError(executor, inMemoryCallback, onDiskCallback);
return;
}
- mTakePictureManager.offerRequest(TakePictureRequest.of(
+ requireNonNull(mTakePictureManager).offerRequest(TakePictureRequest.of(
executor,
inMemoryCallback,
onDiskCallback,
@@ -1841,19 +1166,16 @@
* Clears the pipeline without keeping the {@link TakePictureManager}.
*/
@MainThread
- private void clearPipelineWithNode() {
- clearPipelineWithNode(/*keepTakePictureManager=*/false);
+ private void clearPipeline() {
+ clearPipeline(/*keepTakePictureManager=*/false);
}
/**
* Clears the pipeline.
- *
- * <p>Similar to {@link #clearPipeline()}, this cancels unfinished requests and release
- * resources.
*/
@MainThread
- private void clearPipelineWithNode(boolean keepTakePictureManager) {
- Log.d(TAG, "clearPipelineWithNode");
+ private void clearPipeline(boolean keepTakePictureManager) {
+ Log.d(TAG, "clearPipeline");
checkMainThread();
if (mImagePipeline != null) {
mImagePipeline.close();
@@ -1896,8 +1218,6 @@
return requireNonNull(mTakePictureManager);
}
- // ===== New architecture end =====
-
/**
* @inheritDoc
*/
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/SurfaceRequest.java b/camera/camera-core/src/main/java/androidx/camera/core/SurfaceRequest.java
index bc20e6b..b68ceca 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/SurfaceRequest.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/SurfaceRequest.java
@@ -333,8 +333,9 @@
* care should be taken to ensure the provided surface can support the requested dynamic
* range. For example, if the returned dynamic range has {@link DynamicRange#getBitDepth()}
* equal to {@link DynamicRange#BIT_DEPTH_10_BIT}, then the surface provided to
- * {@link #provideSurface(Surface, Executor, Consumer)} should use a format that can support
- * ten bits of dynamic range, such as {@link android.graphics.ImageFormat#PRIVATE} or
+ * {@link #provideSurface(Surface, Executor, Consumer)} should use an
+ * {@link android.graphics.ImageFormat} that can support ten bits of dynamic range, such as
+ * {@link android.graphics.ImageFormat#PRIVATE} or
* {@link android.graphics.ImageFormat#YCBCR_P010}.
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/impl/SessionConfig.java b/camera/camera-core/src/main/java/androidx/camera/core/impl/SessionConfig.java
index 1ba7e29..fdd0390 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/impl/SessionConfig.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/impl/SessionConfig.java
@@ -113,7 +113,7 @@
/**
* Returns the dynamic range for this output configuration.
*
- * <p>The dynamic range will determine the dynamic range format and profile of pixels in
+ * <p>The dynamic range will determine the dynamic range encoding and profile for pixels in
* the surfaces associated with this output configuration.
*
* <p>If not set, this defaults to {@link DynamicRange#SDR}.
@@ -172,8 +172,8 @@
/**
* Returns the dynamic range for this output configuration.
*
- * <p>The dynamic range will determine the dynamic range format and profile of pixels in
- * the surfaces associated with this output configuration.
+ * <p>The dynamic range will determine the dynamic range encoding and profile for
+ * pixels in the surfaces associated with this output configuration.
*/
@NonNull
public abstract Builder setDynamicRange(@NonNull DynamicRange dynamicRange);
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/impl/utils/MatrixExt.java b/camera/camera-core/src/main/java/androidx/camera/core/impl/utils/MatrixExt.java
index 8020337..d9883e5 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/impl/utils/MatrixExt.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/impl/utils/MatrixExt.java
@@ -39,10 +39,10 @@
* <p>The pivot point is the coordinate that should remain unchanged by the specified
* transformation.
*
- * @param matrix the matrix to rotate
+ * @param matrix the matrix to rotate
* @param degrees the rotation degrees
- * @param px px of pivot point at (px, py)
- * @param py py of pivot point at (px, py)
+ * @param px px of pivot point at (px, py)
+ * @param py py of pivot point at (px, py)
*/
public static void setRotate(@NonNull float[] matrix, float degrees, float px, float py) {
Matrix.setIdentityM(matrix, 0);
@@ -55,10 +55,10 @@
* <p>The pivot point is the coordinate that should remain unchanged by the specified
* transformation.
*
- * @param matrix the matrix to rotate
+ * @param matrix the matrix to rotate
* @param degrees the rotation degrees
- * @param px px of pivot point at (px, py)
- * @param py py of pivot point at (px, py)
+ * @param px px of pivot point at (px, py)
+ * @param py py of pivot point at (px, py)
*/
public static void preRotate(@NonNull float[] matrix, float degrees, float px, float py) {
normalize(matrix, px, py);
@@ -72,10 +72,10 @@
* <p>The pivot point is the coordinate that should remain unchanged by the specified
* transformation.
*
- * @param matrix the matrix to rotate
+ * @param matrix the matrix to rotate
* @param degrees the rotation degrees
- * @param px px of pivot point at (px, py)
- * @param py py of pivot point at (px, py)
+ * @param px px of pivot point at (px, py)
+ * @param py py of pivot point at (px, py)
*/
public static void postRotate(@NonNull float[] matrix, float degrees, float px, float py) {
synchronized (sTemp) {
@@ -88,6 +88,18 @@
}
/**
+ * Preconcats the matrix with a vertical flip operation.
+ *
+ * @param matrix the matrix to flip
+ * @param y the horizontal line to flip along
+ */
+ public static void preVerticalFlip(@NonNull float[] matrix, float y) {
+ normalize(matrix, 0, y);
+ Matrix.scaleM(matrix, 0, 1f, -1f, 1f);
+ denormalize(matrix, 0, y);
+ }
+
+ /**
* Converts to a well-formed matrix for debugging.
*
* <p>Get the first 16 floats from the offset.
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/processing/DefaultSurfaceProcessor.java b/camera/camera-core/src/main/java/androidx/camera/core/processing/DefaultSurfaceProcessor.java
index 1eea449..8413467 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/processing/DefaultSurfaceProcessor.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/processing/DefaultSurfaceProcessor.java
@@ -306,12 +306,11 @@
private Bitmap getBitmap(@NonNull Size size,
@NonNull float[] textureTransform,
int rotationDegrees) {
- // Flip the snapshot. This is for reverting the GL transform added in SurfaceOutputImpl.
float[] snapshotTransform = new float[16];
- // TODO(b/278109696): move GL flipping to MatrixExt.
Matrix.setIdentityM(snapshotTransform, 0);
- Matrix.translateM(snapshotTransform, 0, 0f, 1f, 0f);
- Matrix.scaleM(snapshotTransform, 0, 1f, -1f, 1f);
+
+ // Flip the snapshot. This is for reverting the GL transform added in SurfaceOutputImpl.
+ MatrixExt.preVerticalFlip(snapshotTransform, 0.5f);
// Rotate the output if requested.
MatrixExt.preRotate(snapshotTransform, rotationDegrees, 0.5f, 0.5f);
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/processing/SurfaceOutputImpl.java b/camera/camera-core/src/main/java/androidx/camera/core/processing/SurfaceOutputImpl.java
index d9c51b0..8038235 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/processing/SurfaceOutputImpl.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/processing/SurfaceOutputImpl.java
@@ -40,6 +40,7 @@
import androidx.camera.core.SurfaceOutput;
import androidx.camera.core.SurfaceProcessor;
import androidx.camera.core.impl.CameraInternal;
+import androidx.camera.core.impl.utils.MatrixExt;
import androidx.concurrent.futures.CallbackToFutureAdapter;
import androidx.core.util.Consumer;
@@ -290,9 +291,7 @@
// - Apply the crop rect
// Flipping for GL.
- // TODO(b/278109696): move GL flipping to MatrixExt.
- Matrix.translateM(mAdditionalTransform, 0, 0f, 1f, 0f);
- Matrix.scaleM(mAdditionalTransform, 0, 1f, -1f, 1f);
+ MatrixExt.preVerticalFlip(mAdditionalTransform, 0.5f);
// Rotation
preRotate(mAdditionalTransform, mRotationDegrees, 0.5f, 0.5f);
@@ -342,9 +341,7 @@
// Flip for GL. SurfaceTexture#getTransformMatrix always contains this flipping regardless
// of whether it has the camera transform.
- // TODO(b/278109696): move GL flipping to MatrixExt.
- Matrix.translateM(mInvertedTextureTransform, 0, 0f, 1f, 0f);
- Matrix.scaleM(mInvertedTextureTransform, 0, 1f, -1f, 1f);
+ MatrixExt.preVerticalFlip(mInvertedTextureTransform, 0.5f);
// Applies the camera sensor orientation if the input surface contains camera transform.
if (mCameraInternal != null) {
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/DynamicRangeTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/DynamicRangeTest.kt
index c89e49a..ef41ac7 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/DynamicRangeTest.kt
+++ b/camera/camera-core/src/test/java/androidx/camera/core/DynamicRangeTest.kt
@@ -32,16 +32,16 @@
@Test
fun canCreateUnspecifiedDynamicRange() {
val dynamicRange = DynamicRange(
- DynamicRange.FORMAT_HDR_UNSPECIFIED,
+ DynamicRange.ENCODING_HDR_UNSPECIFIED,
DynamicRange.BIT_DEPTH_UNSPECIFIED
)
- assertThat(dynamicRange.format).isEqualTo(DynamicRange.FORMAT_HDR_UNSPECIFIED)
+ assertThat(dynamicRange.encoding).isEqualTo(DynamicRange.ENCODING_HDR_UNSPECIFIED)
assertThat(dynamicRange.bitDepth).isEqualTo(DynamicRange.BIT_DEPTH_UNSPECIFIED)
}
@Test
fun sdrDynamicRange_is8Bit() {
- assertThat(DynamicRange.SDR.format).isEqualTo(DynamicRange.FORMAT_SDR)
+ assertThat(DynamicRange.SDR.encoding).isEqualTo(DynamicRange.ENCODING_SDR)
assertThat(DynamicRange.SDR.bitDepth).isEqualTo(DynamicRange.BIT_DEPTH_8_BIT)
}
}
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/ImageCaptureTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/ImageCaptureTest.kt
index 0e822e5..2253979 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/ImageCaptureTest.kt
+++ b/camera/camera-core/src/test/java/androidx/camera/core/ImageCaptureTest.kt
@@ -30,9 +30,6 @@
import androidx.camera.core.CameraEffect.IMAGE_CAPTURE
import androidx.camera.core.CameraEffect.PREVIEW
import androidx.camera.core.CameraEffect.VIDEO_CAPTURE
-import androidx.camera.core.ImageCapture.ImageCaptureRequest
-import androidx.camera.core.ImageCapture.ImageCaptureRequestProcessor
-import androidx.camera.core.ImageCapture.ImageCaptureRequestProcessor.ImageCaptor
import androidx.camera.core.MirrorMode.MIRROR_MODE_OFF
import androidx.camera.core.MirrorMode.MIRROR_MODE_ON_FRONT_ONLY
import androidx.camera.core.impl.CameraConfig
@@ -47,7 +44,6 @@
import androidx.camera.core.impl.UseCaseConfig
import androidx.camera.core.impl.utils.executor.CameraXExecutors
import androidx.camera.core.impl.utils.executor.CameraXExecutors.mainThreadExecutor
-import androidx.camera.core.impl.utils.futures.Futures
import androidx.camera.core.internal.CameraUseCaseAdapter
import androidx.camera.core.internal.utils.SizeUtil
import androidx.camera.core.resolutionselector.ResolutionSelector
@@ -58,30 +54,20 @@
import androidx.camera.testing.fakes.FakeCameraControl
import androidx.camera.testing.fakes.FakeCameraFactory
import androidx.camera.testing.fakes.FakeCameraInfoInternal
-import androidx.camera.testing.fakes.FakeImageInfo
-import androidx.camera.testing.fakes.FakeImageProxy
import androidx.camera.testing.fakes.FakeImageReaderProxy
-import androidx.camera.testing.fakes.FakeSessionProcessor
-import androidx.concurrent.futures.ResolvableFuture
import androidx.test.core.app.ApplicationProvider
import com.google.common.truth.Truth.assertThat
import java.io.File
-import java.util.ArrayDeque
import java.util.Collections
import java.util.concurrent.ExecutionException
import java.util.concurrent.Executor
-import java.util.concurrent.atomic.AtomicReference
import org.junit.After
import org.junit.Assert.assertThrows
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import org.mockito.ArgumentCaptor
import org.mockito.ArgumentMatchers.any
-import org.mockito.ArgumentMatchers.anyInt
-import org.mockito.ArgumentMatchers.eq
import org.mockito.Mockito.mock
-import org.mockito.Mockito.never
import org.mockito.Mockito.verify
import org.robolectric.RobolectricTestRunner
import org.robolectric.Shadows.shadowOf
@@ -90,8 +76,6 @@
import org.robolectric.shadow.api.Shadow
import org.robolectric.shadows.ShadowLooper
-private const val MAX_IMAGES = 3
-
/**
* Unit tests for [ImageCapture].
*/
@@ -282,54 +266,11 @@
}
@Test
- fun processingPipelineOn_pipelineEnabled() {
- assertThat(
- bindImageCapture(
- useProcessingPipeline = true,
- bufferFormat = ImageFormat.JPEG,
- ).isProcessingPipelineEnabled
- ).isTrue()
- }
-
- @Test
fun detachWithoutAttach_doesNotCrash() {
ImageCapture.Builder().build().onUnbind()
}
@Test
- fun useImageReaderProvider_pipelineEnabled() {
- assertThat(
- bindImageCapture(
- useProcessingPipeline = true,
- bufferFormat = ImageFormat.JPEG,
- imageReaderProxyProvider = getImageReaderProxyProvider(),
- ).isProcessingPipelineEnabled
- ).isTrue()
- }
-
- @Test
- fun yuvFormat_pipelineEnabled() {
- assertThat(
- bindImageCapture(
- useProcessingPipeline = true,
- bufferFormat = ImageFormat.YUV_420_888,
- ).isProcessingPipelineEnabled
- ).isTrue()
- }
-
- @Config(minSdk = 28)
- @Test
- fun extensionIsOn_pipelineEnabled() {
- val imageCapture = bindImageCapture(
- useProcessingPipeline = true,
- bufferFormat = ImageFormat.JPEG,
- sessionProcessor = FakeSessionProcessor(null, null)
- )
- assertThat(imageCapture.isProcessingPipelineEnabled).isTrue()
- assertThat(imageCapture.imagePipeline!!.expectsMetadata()).isFalse()
- }
-
- @Test
fun captureImageWithViewPort_isSet() {
// Arrange
val imageCapture = bindImageCapture(
@@ -399,185 +340,6 @@
}
@Test
- fun imageCaptureRequestProcessor_canSendRequest() {
- // Arrange.
- val requestProcessor = ImageCaptureRequestProcessor(MAX_IMAGES, createSuccessImageCaptor())
- val request = createImageCaptureRequest()
-
- // Act.
- requestProcessor.sendRequest(request)
-
- // Ensure tasks are posted to the processing executor
- shadowOf(getMainLooper()).idle()
-
- // Assert.
- verify(request).dispatchImage(any())
- }
-
- @Test
- fun imageCaptureRequestProcessor_canSendMultipleRequests() {
- // Arrange.
- val requestProcessor = ImageCaptureRequestProcessor(MAX_IMAGES, createSuccessImageCaptor())
- for (i in 0 until MAX_IMAGES) {
- val request = createImageCaptureRequest()
-
- // Act.
- requestProcessor.sendRequest(request)
-
- // Ensure tasks are posted to the processing executor
- shadowOf(getMainLooper()).idle()
-
- // Assert.
- verify(request).dispatchImage(any())
- }
- }
-
- @Test
- fun imageCaptureRequestProcessor_onlyAllowOneRequestProcessing() {
- // Arrange.
- // Create an ImageCaptor that won't complete the future.
- val captorFutureRef = AtomicReference<ResolvableFuture<ImageProxy>?>()
- val imageCaptor = createHoldImageCaptor(captorFutureRef)
- val requestProcessor = ImageCaptureRequestProcessor(MAX_IMAGES, imageCaptor)
- val request0 = createImageCaptureRequest()
- val request1 = createImageCaptureRequest()
-
- // Act.
- requestProcessor.sendRequest(request0)
- requestProcessor.sendRequest(request1)
-
- // Ensure tasks are posted to the processing executor
- shadowOf(getMainLooper()).idle()
-
- // Assert.
- // Has processing request but not complete.
- assertThat(captorFutureRef.get()).isNotNull()
- verify(request0, never()).dispatchImage(any())
- verify(request1, never()).dispatchImage(any())
-
- // Act.
- // Complete request0.
- captorFutureRef.getAndSet(null)!!.set(mock(ImageProxy::class.java))
-
- // Ensure tasks are posted to the processing executor
- shadowOf(getMainLooper()).idle()
-
- // Assert.
- // request0 is complete and request1 is in processing.
- verify(request0).dispatchImage(any())
- verify(request1, never()).dispatchImage(any())
- assertThat(captorFutureRef.get()).isNotNull()
-
- // Act.
- // Complete request1.
- captorFutureRef.getAndSet(null)!!.set(mock(ImageProxy::class.java))
-
- // Ensure tasks are posted to the processing executor
- shadowOf(getMainLooper()).idle()
-
- // Assert.
- verify(request1).dispatchImage(any())
- }
-
- @Test
- fun imageCaptureRequestProcessor_unableToProcessNextWhenOverMaxImages() {
- // Arrange.
- val requestProcessor = ImageCaptureRequestProcessor(MAX_IMAGES, createSuccessImageCaptor())
-
- // Exhaust outstanding image quota.
- val images = ArrayDeque<ImageProxy>()
- for (i in 0 until MAX_IMAGES) {
- val request = createImageCaptureRequest()
- requestProcessor.sendRequest(request)
-
- // Ensure tasks are posted to the processing executor
- shadowOf(getMainLooper()).idle()
-
- // Save the dispatched images.
- val captor = ArgumentCaptor.forClass(ImageProxy::class.java)
- verify(request).dispatchImage(captor.capture())
- images.offer(captor.value)
- }
- assertThat(images.size).isEqualTo(MAX_IMAGES)
-
- // Act.
- // Send one more request.
- val request = createImageCaptureRequest()
- requestProcessor.sendRequest(request)
-
- // Ensure tasks are posted to the processing executor
- shadowOf(getMainLooper()).idle()
-
- // Assert.
- verify(request, never()).dispatchImage(any())
-
- // Act.
- // Close one image to trigger next processing.
- images.poll()!!.close()
-
- // Ensure tasks are posted to the processing executor
- shadowOf(getMainLooper()).idle()
-
- // Assert.
- // It should trigger next processing.
- verify(request).dispatchImage(any())
- }
-
- @Test
- fun imageCaptureRequestProcessor_canCancelRequests() {
- // Arrange.
- // Create an ImageCaptor that won't complete the future.
- val captorFutureRef = AtomicReference<ResolvableFuture<ImageProxy>?>()
- val imageCaptor = createHoldImageCaptor(captorFutureRef)
- val requestProcessor = ImageCaptureRequestProcessor(MAX_IMAGES, imageCaptor)
-
- // Send multiple requests and save these requests.
- val requestList = ArrayList<ImageCaptureRequest>()
- for (i in 0 until 5) {
- val request = createImageCaptureRequest()
- requestList.add(request)
- requestProcessor.sendRequest(request)
-
- // Ensure tasks are posted to the processing executor
- shadowOf(getMainLooper()).idle()
- }
-
- // Act.
- val errorMsg = "Cancel request."
- val throwable = RuntimeException(errorMsg)
- requestProcessor.cancelRequests(throwable)
-
- // Ensure tasks are posted to the processing executor
- shadowOf(getMainLooper()).idle()
-
- // Assert.
- for (request in requestList) {
- verify(request).notifyCallbackError(anyInt(), eq(errorMsg), eq(throwable))
- }
- // Capture future is cancelled.
- assertThat(captorFutureRef.get()!!.isCancelled).isTrue()
- }
-
- @Test
- fun imageCaptureRequestProcessor_requestFail() {
- // Arrange.
- val errorMsg = "Capture failed."
- val throwable = RuntimeException(errorMsg)
- val requestProcessor =
- ImageCaptureRequestProcessor(MAX_IMAGES, createFailedImageCaptor(throwable))
- val request = createImageCaptureRequest()
-
- // Act.
- requestProcessor.sendRequest(request)
-
- // Ensure tasks are posted to the processing executor
- shadowOf(getMainLooper()).idle()
-
- // Verify.
- verify(request).notifyCallbackError(anyInt(), eq(errorMsg), eq(throwable))
- }
-
- @Test
fun sessionConfigSurfaceFormat_isInputFormat() {
// Act/arrange.
val imageCapture = bindImageCapture(bufferFormat = ImageFormat.YUV_420_888,
@@ -684,7 +446,6 @@
// Set non jpg format so it doesn't trigger the exif code path.
bufferFormat: Int = ImageFormat.YUV_420_888,
imageReaderProxyProvider: ImageReaderProxyProvider? = null,
- useProcessingPipeline: Boolean? = null,
sessionProcessor: SessionProcessor? = null
): ImageCapture {
// Arrange.
@@ -693,9 +454,6 @@
bufferFormat,
imageReaderProxyProvider,
)
- if (useProcessingPipeline != null) {
- imageCapture.mUseProcessingPipeline = useProcessingPipeline
- }
cameraUseCaseAdapter = CameraUtil.createCameraUseCaseAdapter(
ApplicationProvider.getApplicationContext(),
@@ -711,7 +469,7 @@
override fun getSessionProcessor(
valueIfMissing: SessionProcessor?
- ): SessionProcessor? {
+ ): SessionProcessor {
return sessionProcessor
}
@@ -764,30 +522,4 @@
private fun flushHandler(handler: Handler?) {
(Shadow.extract<Any>(handler!!.looper) as ShadowLooper).idle()
}
-
- private fun createImageCaptureRequest(): ImageCaptureRequest {
- return mock(ImageCaptureRequest::class.java)
- }
-
- private fun createSuccessImageCaptor(): ImageCaptor {
- return ImageCaptor {
- Futures.immediateFuture(FakeImageProxy(FakeImageInfo()))
- }
- }
-
- private fun createHoldImageCaptor(
- futureHolder: AtomicReference<ResolvableFuture<ImageProxy>?>
- ): ImageCaptor {
- return ImageCaptor {
- ResolvableFuture.create<ImageProxy>().apply {
- futureHolder.set(this)
- }
- }
- }
-
- private fun createFailedImageCaptor(throwable: Throwable): ImageCaptor {
- return ImageCaptor {
- Futures.immediateFailedFuture(throwable)
- }
- }
}
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/impl/CameraInternalTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/impl/CameraInternalTest.kt
index eb693ac..5299376 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/impl/CameraInternalTest.kt
+++ b/camera/camera-core/src/test/java/androidx/camera/core/impl/CameraInternalTest.kt
@@ -20,12 +20,12 @@
import androidx.camera.core.CameraSelector
import androidx.camera.testing.fakes.FakeCamera
import androidx.camera.testing.fakes.FakeCameraInfoInternal
+import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config
import org.robolectric.annotation.internal.DoNotInstrument
-import com.google.common.truth.Truth.assertThat
/**
* Unit tests for [CameraInternal].
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/impl/StreamSpecTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/impl/StreamSpecTest.kt
index d8674dc..b7b122c 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/impl/StreamSpecTest.kt
+++ b/camera/camera-core/src/test/java/androidx/camera/core/impl/StreamSpecTest.kt
@@ -50,7 +50,7 @@
@Test
fun canRetrieveDynamicRange() {
- val dynamicRange = DynamicRange(DynamicRange.FORMAT_HLG, DynamicRange.BIT_DEPTH_10_BIT)
+ val dynamicRange = DynamicRange.HLG_10_BIT
val streamSpec = StreamSpec.builder(TEST_RESOLUTION).setDynamicRange(dynamicRange).build()
assertThat(streamSpec.dynamicRange).isEqualTo(dynamicRange)
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/impl/utils/MatrixExtTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/impl/utils/MatrixExtTest.kt
index 0c5367d..3e259d6 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/impl/utils/MatrixExtTest.kt
+++ b/camera/camera-core/src/test/java/androidx/camera/core/impl/utils/MatrixExtTest.kt
@@ -33,6 +33,24 @@
class MatrixExtTest {
@Test
+ fun preVerticalFlip() {
+ // Arrange.
+ val flipLine = 0.5f
+ val matrix = FloatArray(16)
+ Matrix.setIdentityM(matrix, 0)
+ val expected = FloatArray(16)
+ Matrix.setIdentityM(expected, 0)
+
+ // Act: flip around the line y = 0.5.
+ MatrixExt.preVerticalFlip(matrix, flipLine)
+
+ // Assert: the matrix should be flipped around the line y = 0.5.
+ Matrix.translateM(expected, 0, 0f, flipLine * 2, 0f)
+ Matrix.scaleM(expected, 0, 1f, -flipLine * 2, 1f)
+ assertThat(matrix).usingTolerance(FLOAT_TOLERANCE).containsExactly(expected).inOrder()
+ }
+
+ @Test
fun setRotate() {
val transform = createIdentityMatrix().also {
// 0.5x scaling on the Y axis
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/processing/SurfaceOutputImplTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/processing/SurfaceOutputImplTest.kt
index bc76e238..21dd66c 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/processing/SurfaceOutputImplTest.kt
+++ b/camera/camera-core/src/test/java/androidx/camera/core/processing/SurfaceOutputImplTest.kt
@@ -23,8 +23,8 @@
import android.util.Size
import android.view.Surface
import androidx.camera.core.CameraEffect
-import androidx.camera.core.impl.ImageFormatConstants.INTERNAL_DEFINED_IMAGE_FORMAT_PRIVATE
import androidx.camera.core.CameraSelector.LENS_FACING_FRONT
+import androidx.camera.core.impl.ImageFormatConstants.INTERNAL_DEFINED_IMAGE_FORMAT_PRIVATE
import androidx.camera.core.impl.utils.TransformUtils.sizeToRect
import androidx.camera.core.impl.utils.executor.CameraXExecutors.mainThreadExecutor
import androidx.camera.testing.fakes.FakeCamera
diff --git a/camera/camera-effects-still-portrait/api/public_plus_experimental_current.txt b/camera/camera-effects-still-portrait/api/public_plus_experimental_current.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/camera/camera-effects-still-portrait/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/camera/camera-effects-still-portrait/build.gradle b/camera/camera-effects-still-portrait/build.gradle
index e6d14aa..647567c 100644
--- a/camera/camera-effects-still-portrait/build.gradle
+++ b/camera/camera-effects-still-portrait/build.gradle
@@ -32,7 +32,7 @@
namespace "androidx.camera.effects.stillportrait"
}
androidx {
- name = "Jetpack Camera Portrait Still Effect Library"
+ name = "Camera Effects: Still Portrait"
publish = Publish.SNAPSHOT_ONLY
inceptionYear = "2022"
runApiTasks = new RunApiTasks.Yes()
diff --git a/camera/camera-effects/api/public_plus_experimental_current.txt b/camera/camera-effects/api/public_plus_experimental_current.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/camera/camera-effects/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/camera/camera-effects/build.gradle b/camera/camera-effects/build.gradle
index d6fc08d..858866e 100644
--- a/camera/camera-effects/build.gradle
+++ b/camera/camera-effects/build.gradle
@@ -32,7 +32,7 @@
namespace "androidx.camera.effects"
}
androidx {
- name = "Jetpack Camera Effects Library"
+ name = "Camera Effects"
publish = Publish.NONE
inceptionYear = "2022"
runApiTasks = new RunApiTasks.Yes()
diff --git a/camera/camera-extensions-stub/build.gradle b/camera/camera-extensions-stub/build.gradle
index de2b943..efca9c0 100644
--- a/camera/camera-extensions-stub/build.gradle
+++ b/camera/camera-extensions-stub/build.gradle
@@ -25,7 +25,7 @@
}
androidx {
- name = "Jetpack Camera Library OEM Extensions Stub"
+ name = "Camera OEM Extensions Stub"
publish = Publish.NONE
inceptionYear = "2019"
diff --git a/camera/camera-extensions/api/public_plus_experimental_current.txt b/camera/camera-extensions/api/public_plus_experimental_current.txt
deleted file mode 100644
index 0db7e93..0000000
--- a/camera/camera-extensions/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-// Signature format: 4.0
-package androidx.camera.extensions {
-
- @RequiresApi(21) public final class ExtensionMode {
- field public static final int AUTO = 5; // 0x5
- field public static final int BOKEH = 1; // 0x1
- field public static final int FACE_RETOUCH = 4; // 0x4
- field public static final int HDR = 2; // 0x2
- field public static final int NIGHT = 3; // 0x3
- field public static final int NONE = 0; // 0x0
- }
-
- @RequiresApi(21) public final class ExtensionsManager {
- method public android.util.Range<java.lang.Long!>? getEstimatedCaptureLatencyRange(androidx.camera.core.CameraSelector, int);
- method public androidx.camera.core.CameraSelector getExtensionEnabledCameraSelector(androidx.camera.core.CameraSelector, int);
- method public static com.google.common.util.concurrent.ListenableFuture<androidx.camera.extensions.ExtensionsManager!> getInstanceAsync(android.content.Context, androidx.camera.core.CameraProvider);
- method public boolean isExtensionAvailable(androidx.camera.core.CameraSelector, int);
- }
-
-}
-
diff --git a/camera/camera-extensions/build.gradle b/camera/camera-extensions/build.gradle
index 1627bec..4cb5a01 100644
--- a/camera/camera-extensions/build.gradle
+++ b/camera/camera-extensions/build.gradle
@@ -81,7 +81,7 @@
}
androidx {
- name = "Jetpack Camera Library OEM Extensions"
+ name = "Camera Extensions"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2019"
diff --git a/camera/camera-extensions/src/androidTest/java/androidx/camera/extensions/ExtensionsManagerTest.kt b/camera/camera-extensions/src/androidTest/java/androidx/camera/extensions/ExtensionsManagerTest.kt
index 6aa7222..94f0466 100644
--- a/camera/camera-extensions/src/androidTest/java/androidx/camera/extensions/ExtensionsManagerTest.kt
+++ b/camera/camera-extensions/src/androidTest/java/androidx/camera/extensions/ExtensionsManagerTest.kt
@@ -41,6 +41,7 @@
import androidx.test.platform.app.InstrumentationRegistry
import androidx.testutils.assertThrows
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.TimeUnit
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withContext
@@ -51,7 +52,6 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import java.util.concurrent.TimeUnit
@SmallTest
@RunWith(Parameterized::class)
diff --git a/camera/camera-lifecycle/api/current.txt b/camera/camera-lifecycle/api/current.txt
index 3f68dbd..606a816 100644
--- a/camera/camera-lifecycle/api/current.txt
+++ b/camera/camera-lifecycle/api/current.txt
@@ -1,10 +1,14 @@
// Signature format: 4.0
package androidx.camera.lifecycle {
+ @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalCameraProviderConfiguration {
+ }
+
@RequiresApi(21) public final class ProcessCameraProvider implements androidx.camera.core.CameraProvider {
method @MainThread public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
method @MainThread public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCaseGroup);
method @MainThread public androidx.camera.core.ConcurrentCamera bindToLifecycle(java.util.List<androidx.camera.core.ConcurrentCamera.SingleCameraConfig!>);
+ method @androidx.camera.lifecycle.ExperimentalCameraProviderConfiguration public static void configureInstance(androidx.camera.core.CameraXConfig);
method public java.util.List<androidx.camera.core.CameraInfo!> getAvailableCameraInfos();
method public java.util.List<java.util.List<androidx.camera.core.CameraInfo!>!> getAvailableConcurrentCameraInfos();
method public static com.google.common.util.concurrent.ListenableFuture<androidx.camera.lifecycle.ProcessCameraProvider!> getInstance(android.content.Context);
diff --git a/camera/camera-lifecycle/api/public_plus_experimental_current.txt b/camera/camera-lifecycle/api/public_plus_experimental_current.txt
deleted file mode 100644
index 606a816..0000000
--- a/camera/camera-lifecycle/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-// Signature format: 4.0
-package androidx.camera.lifecycle {
-
- @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalCameraProviderConfiguration {
- }
-
- @RequiresApi(21) public final class ProcessCameraProvider implements androidx.camera.core.CameraProvider {
- method @MainThread public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
- method @MainThread public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCaseGroup);
- method @MainThread public androidx.camera.core.ConcurrentCamera bindToLifecycle(java.util.List<androidx.camera.core.ConcurrentCamera.SingleCameraConfig!>);
- method @androidx.camera.lifecycle.ExperimentalCameraProviderConfiguration public static void configureInstance(androidx.camera.core.CameraXConfig);
- method public java.util.List<androidx.camera.core.CameraInfo!> getAvailableCameraInfos();
- method public java.util.List<java.util.List<androidx.camera.core.CameraInfo!>!> getAvailableConcurrentCameraInfos();
- method public static com.google.common.util.concurrent.ListenableFuture<androidx.camera.lifecycle.ProcessCameraProvider!> getInstance(android.content.Context);
- method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException;
- method public boolean isBound(androidx.camera.core.UseCase);
- method @MainThread public boolean isConcurrentCameraModeOn();
- method @MainThread public void unbind(androidx.camera.core.UseCase!...);
- method @MainThread public void unbindAll();
- }
-
-}
-
diff --git a/camera/camera-lifecycle/api/restricted_current.txt b/camera/camera-lifecycle/api/restricted_current.txt
index 3f68dbd..606a816 100644
--- a/camera/camera-lifecycle/api/restricted_current.txt
+++ b/camera/camera-lifecycle/api/restricted_current.txt
@@ -1,10 +1,14 @@
// Signature format: 4.0
package androidx.camera.lifecycle {
+ @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalCameraProviderConfiguration {
+ }
+
@RequiresApi(21) public final class ProcessCameraProvider implements androidx.camera.core.CameraProvider {
method @MainThread public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
method @MainThread public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCaseGroup);
method @MainThread public androidx.camera.core.ConcurrentCamera bindToLifecycle(java.util.List<androidx.camera.core.ConcurrentCamera.SingleCameraConfig!>);
+ method @androidx.camera.lifecycle.ExperimentalCameraProviderConfiguration public static void configureInstance(androidx.camera.core.CameraXConfig);
method public java.util.List<androidx.camera.core.CameraInfo!> getAvailableCameraInfos();
method public java.util.List<java.util.List<androidx.camera.core.CameraInfo!>!> getAvailableConcurrentCameraInfos();
method public static com.google.common.util.concurrent.ListenableFuture<androidx.camera.lifecycle.ProcessCameraProvider!> getInstance(android.content.Context);
diff --git a/camera/camera-lifecycle/build.gradle b/camera/camera-lifecycle/build.gradle
index 7d0119c..4f7b607 100644
--- a/camera/camera-lifecycle/build.gradle
+++ b/camera/camera-lifecycle/build.gradle
@@ -61,7 +61,7 @@
}
androidx {
- name = "Jetpack Camera Lifecycle Library"
+ name = "Camera Lifecycle"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2019"
description = "Lifecycle components for the Jetpack Camera Library, a library providing a " +
diff --git a/camera/camera-mlkit-vision/api/public_plus_experimental_current.txt b/camera/camera-mlkit-vision/api/public_plus_experimental_current.txt
deleted file mode 100644
index 0599c25..0000000
--- a/camera/camera-mlkit-vision/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-// Signature format: 4.0
-package androidx.camera.mlkit.vision {
-
- @RequiresApi(21) public class MlKitAnalyzer implements androidx.camera.core.ImageAnalysis.Analyzer {
- ctor public MlKitAnalyzer(java.util.List<com.google.mlkit.vision.interfaces.Detector<?>!>, int, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.mlkit.vision.MlKitAnalyzer.Result!>);
- method public final void analyze(androidx.camera.core.ImageProxy);
- method public final android.util.Size getDefaultTargetResolution();
- method public final int getTargetCoordinateSystem();
- method public final void updateTransform(android.graphics.Matrix?);
- }
-
- public static final class MlKitAnalyzer.Result {
- ctor public MlKitAnalyzer.Result(java.util.Map<com.google.mlkit.vision.interfaces.Detector<?>!,java.lang.Object!>, long, java.util.Map<com.google.mlkit.vision.interfaces.Detector<?>!,java.lang.Throwable!>);
- method public Throwable? getThrowable(com.google.mlkit.vision.interfaces.Detector<?>);
- method public long getTimestamp();
- method public <T> T? getValue(com.google.mlkit.vision.interfaces.Detector<T!>);
- }
-
-}
-
diff --git a/camera/camera-mlkit-vision/build.gradle b/camera/camera-mlkit-vision/build.gradle
index f0f3bad..e569d1f 100644
--- a/camera/camera-mlkit-vision/build.gradle
+++ b/camera/camera-mlkit-vision/build.gradle
@@ -58,7 +58,7 @@
}
androidx {
- name = "Jetpack Camera MLKit Vision Library"
+ name = "Camera MLKit Vision"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2022"
runApiTasks = new RunApiTasks.Yes()
diff --git a/camera/camera-testing/build.gradle b/camera/camera-testing/build.gradle
index 177e3db..3c9f0b7 100644
--- a/camera/camera-testing/build.gradle
+++ b/camera/camera-testing/build.gradle
@@ -91,7 +91,7 @@
}
androidx {
- name = "Jetpack Camera Testing Library"
+ name = "Camera Testing"
publish = Publish.SNAPSHOT_AND_RELEASE
runApiTasks = new RunApiTasks.No("Internal testing library without any release plan yet.")
inceptionYear = "2019"
diff --git a/camera/camera-testing/src/androidTest/java/androidx/camera/testing/TestImageUtilDeviceTest.kt b/camera/camera-testing/src/androidTest/java/androidx/camera/testing/TestImageUtilDeviceTest.kt
index 1045e0b..7b69b03 100644
--- a/camera/camera-testing/src/androidTest/java/androidx/camera/testing/TestImageUtilDeviceTest.kt
+++ b/camera/camera-testing/src/androidTest/java/androidx/camera/testing/TestImageUtilDeviceTest.kt
@@ -24,9 +24,9 @@
import androidx.camera.testing.TestImageUtil.createJpegBytes
import androidx.camera.testing.TestImageUtil.createJpegFakeImageProxy
import androidx.camera.testing.TestImageUtil.getAverageDiff
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
-import androidx.test.ext.junit.runners.AndroidJUnit4
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/ObservableExtensions.kt b/camera/camera-testing/src/main/java/androidx/camera/testing/ObservableExtensions.kt
index aec51e1..79b54b7 100644
--- a/camera/camera-testing/src/main/java/androidx/camera/testing/ObservableExtensions.kt
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/ObservableExtensions.kt
@@ -21,6 +21,7 @@
import androidx.annotation.RequiresApi
import androidx.camera.core.impl.Observable
+import kotlin.coroutines.ContinuationInterceptor
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineStart
import kotlinx.coroutines.asExecutor
@@ -28,7 +29,6 @@
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.launch
-import kotlin.coroutines.ContinuationInterceptor
public fun <T> Observable<T>.asFlow(): Flow<T?> = callbackFlow {
val observer = object : Observable.Observer<T> {
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeSessionProcessor.kt b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeSessionProcessor.kt
index ee51c7d..ba115c1 100644
--- a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeSessionProcessor.kt
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeSessionProcessor.kt
@@ -72,6 +72,7 @@
private val startCaptureCalled = CompletableDeferred<Long>()
private val setParametersCalled = CompletableDeferred<Config>()
private val startTriggerCalled = CompletableDeferred<Config>()
+ private val stopRepeatingCalled = CompletableDeferred<Long>()
private var latestParameters: Config = OptionsBundle.emptyBundle()
private var blockRunAfterInitSession: () -> Unit = {}
@@ -277,6 +278,8 @@
}
override fun stopRepeating() {
+ requestProcessor!!.stopRepeating()
+ stopRepeatingCalled.complete(SystemClock.elapsedRealtimeNanos())
}
override fun startCapture(callback: SessionProcessor.CaptureCallback): Int {
@@ -380,6 +383,10 @@
return startTriggerCalled.awaitWithTimeout(3000)
}
+ suspend fun assertStopRepeatingInvoked(): Long {
+ return stopRepeatingCalled.awaitWithTimeout(3000)
+ }
+
private suspend fun <T> Deferred<T>.awaitWithTimeout(timeMillis: Long): T {
return withTimeout(timeMillis) {
await()
diff --git a/camera/camera-testlib-extensions/build.gradle b/camera/camera-testlib-extensions/build.gradle
index 886b875..849e115 100644
--- a/camera/camera-testlib-extensions/build.gradle
+++ b/camera/camera-testlib-extensions/build.gradle
@@ -39,7 +39,7 @@
}
androidx {
- name = "Jetpack Camera Extensions Example Library"
+ name = "Camera Extensions Example"
publish = Publish.NONE
inceptionYear = "2019"
description = "Example extension implementation for the Jetpack Camera Library, a library providing a " +
diff --git a/camera/camera-video/api/current.txt b/camera/camera-video/api/current.txt
index 0f605d3..5b4653b 100644
--- a/camera/camera-video/api/current.txt
+++ b/camera/camera-video/api/current.txt
@@ -104,8 +104,8 @@
method public androidx.camera.video.QualitySelector getQualitySelector();
method public int getTargetVideoEncodingBitRate();
method public void onSurfaceRequested(androidx.camera.core.SurfaceRequest);
- method public androidx.camera.video.PendingRecording prepareRecording(android.content.Context, androidx.camera.video.FileOutputOptions);
method @RequiresApi(26) public androidx.camera.video.PendingRecording prepareRecording(android.content.Context, androidx.camera.video.FileDescriptorOutputOptions);
+ method public androidx.camera.video.PendingRecording prepareRecording(android.content.Context, androidx.camera.video.FileOutputOptions);
method public androidx.camera.video.PendingRecording prepareRecording(android.content.Context, androidx.camera.video.MediaStoreOutputOptions);
field public static final androidx.camera.video.QualitySelector DEFAULT_QUALITY_SELECTOR;
}
diff --git a/camera/camera-video/api/public_plus_experimental_current.txt b/camera/camera-video/api/public_plus_experimental_current.txt
deleted file mode 100644
index 0f605d3..0000000
--- a/camera/camera-video/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,194 +0,0 @@
-// Signature format: 4.0
-package androidx.camera.video {
-
- @RequiresApi(21) @com.google.auto.value.AutoValue public abstract class AudioStats {
- method public abstract int getAudioState();
- method public abstract Throwable? getErrorCause();
- method public boolean hasAudio();
- method public boolean hasError();
- field public static final int AUDIO_STATE_ACTIVE = 0; // 0x0
- field public static final int AUDIO_STATE_DISABLED = 1; // 0x1
- field public static final int AUDIO_STATE_ENCODER_ERROR = 3; // 0x3
- field public static final int AUDIO_STATE_MUTED = 5; // 0x5
- field public static final int AUDIO_STATE_SOURCE_ERROR = 4; // 0x4
- field public static final int AUDIO_STATE_SOURCE_SILENCED = 2; // 0x2
- }
-
- @RequiresApi(21) public class FallbackStrategy {
- method public static androidx.camera.video.FallbackStrategy higherQualityOrLowerThan(androidx.camera.video.Quality);
- method public static androidx.camera.video.FallbackStrategy higherQualityThan(androidx.camera.video.Quality);
- method public static androidx.camera.video.FallbackStrategy lowerQualityOrHigherThan(androidx.camera.video.Quality);
- method public static androidx.camera.video.FallbackStrategy lowerQualityThan(androidx.camera.video.Quality);
- }
-
- @RequiresApi(21) public final class FileDescriptorOutputOptions extends androidx.camera.video.OutputOptions {
- method public android.os.ParcelFileDescriptor getParcelFileDescriptor();
- }
-
- @RequiresApi(21) public static final class FileDescriptorOutputOptions.Builder {
- ctor public FileDescriptorOutputOptions.Builder(android.os.ParcelFileDescriptor);
- method public androidx.camera.video.FileDescriptorOutputOptions build();
- method public androidx.camera.video.FileDescriptorOutputOptions.Builder setDurationLimitMillis(@IntRange(from=0) long);
- method public androidx.camera.video.FileDescriptorOutputOptions.Builder setFileSizeLimit(@IntRange(from=0) long);
- method public androidx.camera.video.FileDescriptorOutputOptions.Builder setLocation(android.location.Location?);
- }
-
- @RequiresApi(21) public final class FileOutputOptions extends androidx.camera.video.OutputOptions {
- method public java.io.File getFile();
- }
-
- @RequiresApi(21) public static final class FileOutputOptions.Builder {
- ctor public FileOutputOptions.Builder(java.io.File);
- method public androidx.camera.video.FileOutputOptions build();
- method public androidx.camera.video.FileOutputOptions.Builder setDurationLimitMillis(@IntRange(from=0) long);
- method public androidx.camera.video.FileOutputOptions.Builder setFileSizeLimit(@IntRange(from=0) long);
- method public androidx.camera.video.FileOutputOptions.Builder setLocation(android.location.Location?);
- }
-
- @RequiresApi(21) public final class MediaStoreOutputOptions extends androidx.camera.video.OutputOptions {
- method public android.net.Uri getCollectionUri();
- method public android.content.ContentResolver getContentResolver();
- method public android.content.ContentValues getContentValues();
- field public static final android.content.ContentValues EMPTY_CONTENT_VALUES;
- }
-
- public static final class MediaStoreOutputOptions.Builder {
- ctor public MediaStoreOutputOptions.Builder(android.content.ContentResolver, android.net.Uri);
- method public androidx.camera.video.MediaStoreOutputOptions build();
- method public androidx.camera.video.MediaStoreOutputOptions.Builder setContentValues(android.content.ContentValues);
- method public androidx.camera.video.MediaStoreOutputOptions.Builder setDurationLimitMillis(@IntRange(from=0) long);
- method public androidx.camera.video.MediaStoreOutputOptions.Builder setFileSizeLimit(@IntRange(from=0) long);
- method public androidx.camera.video.MediaStoreOutputOptions.Builder setLocation(android.location.Location?);
- }
-
- @RequiresApi(21) public abstract class OutputOptions {
- method @IntRange(from=0) public long getDurationLimitMillis();
- method @IntRange(from=0) public long getFileSizeLimit();
- method public android.location.Location? getLocation();
- field public static final int DURATION_UNLIMITED = 0; // 0x0
- field public static final int FILE_SIZE_UNLIMITED = 0; // 0x0
- }
-
- @RequiresApi(21) @com.google.auto.value.AutoValue public abstract class OutputResults {
- ctor public OutputResults();
- method public abstract android.net.Uri getOutputUri();
- }
-
- @RequiresApi(21) public final class PendingRecording {
- method @CheckResult public androidx.camera.video.Recording start(java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.video.VideoRecordEvent!>);
- method @RequiresPermission(android.Manifest.permission.RECORD_AUDIO) public androidx.camera.video.PendingRecording withAudioEnabled();
- }
-
- @RequiresApi(21) public class Quality {
- field public static final androidx.camera.video.Quality FHD;
- field public static final androidx.camera.video.Quality HD;
- field public static final androidx.camera.video.Quality HIGHEST;
- field public static final androidx.camera.video.Quality LOWEST;
- field public static final androidx.camera.video.Quality SD;
- field public static final androidx.camera.video.Quality UHD;
- }
-
- @RequiresApi(21) public final class QualitySelector {
- method public static androidx.camera.video.QualitySelector from(androidx.camera.video.Quality);
- method public static androidx.camera.video.QualitySelector from(androidx.camera.video.Quality, androidx.camera.video.FallbackStrategy);
- method public static androidx.camera.video.QualitySelector fromOrderedList(java.util.List<androidx.camera.video.Quality!>);
- method public static androidx.camera.video.QualitySelector fromOrderedList(java.util.List<androidx.camera.video.Quality!>, androidx.camera.video.FallbackStrategy);
- method public static android.util.Size? getResolution(androidx.camera.core.CameraInfo, androidx.camera.video.Quality);
- method public static java.util.List<androidx.camera.video.Quality!> getSupportedQualities(androidx.camera.core.CameraInfo);
- method public static boolean isQualitySupported(androidx.camera.core.CameraInfo, androidx.camera.video.Quality);
- }
-
- @RequiresApi(21) public final class Recorder implements androidx.camera.video.VideoOutput {
- method public int getAspectRatio();
- method public java.util.concurrent.Executor? getExecutor();
- method public androidx.camera.video.QualitySelector getQualitySelector();
- method public int getTargetVideoEncodingBitRate();
- method public void onSurfaceRequested(androidx.camera.core.SurfaceRequest);
- method public androidx.camera.video.PendingRecording prepareRecording(android.content.Context, androidx.camera.video.FileOutputOptions);
- method @RequiresApi(26) public androidx.camera.video.PendingRecording prepareRecording(android.content.Context, androidx.camera.video.FileDescriptorOutputOptions);
- method public androidx.camera.video.PendingRecording prepareRecording(android.content.Context, androidx.camera.video.MediaStoreOutputOptions);
- field public static final androidx.camera.video.QualitySelector DEFAULT_QUALITY_SELECTOR;
- }
-
- @RequiresApi(21) public static final class Recorder.Builder {
- ctor public Recorder.Builder();
- method public androidx.camera.video.Recorder build();
- method public androidx.camera.video.Recorder.Builder setAspectRatio(int);
- method public androidx.camera.video.Recorder.Builder setExecutor(java.util.concurrent.Executor);
- method public androidx.camera.video.Recorder.Builder setQualitySelector(androidx.camera.video.QualitySelector);
- method public androidx.camera.video.Recorder.Builder setTargetVideoEncodingBitRate(@IntRange(from=1) int);
- }
-
- @RequiresApi(21) public final class Recording implements java.lang.AutoCloseable {
- method public void close();
- method public void mute(boolean);
- method public void pause();
- method public void resume();
- method public void stop();
- }
-
- @RequiresApi(21) @com.google.auto.value.AutoValue public abstract class RecordingStats {
- method public abstract androidx.camera.video.AudioStats getAudioStats();
- method public abstract long getNumBytesRecorded();
- method public abstract long getRecordedDurationNanos();
- }
-
- @RequiresApi(21) public final class VideoCapture<T extends androidx.camera.video.VideoOutput> extends androidx.camera.core.UseCase {
- method public int getMirrorMode();
- method public T getOutput();
- method public android.util.Range<java.lang.Integer!> getTargetFrameRate();
- method public int getTargetRotation();
- method public void setTargetRotation(int);
- method @Deprecated public void setTargetRotationDegrees(int);
- method public static <T extends androidx.camera.video.VideoOutput> androidx.camera.video.VideoCapture<T!> withOutput(T);
- }
-
- @RequiresApi(21) public static final class VideoCapture.Builder<T extends androidx.camera.video.VideoOutput> implements androidx.camera.core.ExtendableBuilder<androidx.camera.video.VideoCapture> {
- ctor public VideoCapture.Builder(T);
- method public androidx.camera.video.VideoCapture<T!> build();
- method public androidx.camera.video.VideoCapture.Builder<T!> setMirrorMode(int);
- method public androidx.camera.video.VideoCapture.Builder<T!> setTargetFrameRate(android.util.Range<java.lang.Integer!>);
- method public androidx.camera.video.VideoCapture.Builder<T!> setTargetRotation(int);
- }
-
- @RequiresApi(21) public interface VideoOutput {
- method public void onSurfaceRequested(androidx.camera.core.SurfaceRequest);
- }
-
- @RequiresApi(21) public abstract class VideoRecordEvent {
- method public androidx.camera.video.OutputOptions getOutputOptions();
- method public androidx.camera.video.RecordingStats getRecordingStats();
- }
-
- @RequiresApi(21) public static final class VideoRecordEvent.Finalize extends androidx.camera.video.VideoRecordEvent {
- method public Throwable? getCause();
- method public int getError();
- method public androidx.camera.video.OutputResults getOutputResults();
- method public boolean hasError();
- field public static final int ERROR_DURATION_LIMIT_REACHED = 9; // 0x9
- field public static final int ERROR_ENCODING_FAILED = 6; // 0x6
- field public static final int ERROR_FILE_SIZE_LIMIT_REACHED = 2; // 0x2
- field public static final int ERROR_INSUFFICIENT_STORAGE = 3; // 0x3
- field public static final int ERROR_INVALID_OUTPUT_OPTIONS = 5; // 0x5
- field public static final int ERROR_NONE = 0; // 0x0
- field public static final int ERROR_NO_VALID_DATA = 8; // 0x8
- field public static final int ERROR_RECORDER_ERROR = 7; // 0x7
- field public static final int ERROR_RECORDING_GARBAGE_COLLECTED = 10; // 0xa
- field public static final int ERROR_SOURCE_INACTIVE = 4; // 0x4
- field public static final int ERROR_UNKNOWN = 1; // 0x1
- }
-
- @RequiresApi(21) public static final class VideoRecordEvent.Pause extends androidx.camera.video.VideoRecordEvent {
- }
-
- @RequiresApi(21) public static final class VideoRecordEvent.Resume extends androidx.camera.video.VideoRecordEvent {
- }
-
- @RequiresApi(21) public static final class VideoRecordEvent.Start extends androidx.camera.video.VideoRecordEvent {
- }
-
- @RequiresApi(21) public static final class VideoRecordEvent.Status extends androidx.camera.video.VideoRecordEvent {
- }
-
-}
-
diff --git a/camera/camera-video/api/restricted_current.txt b/camera/camera-video/api/restricted_current.txt
index 0f605d3..5b4653b 100644
--- a/camera/camera-video/api/restricted_current.txt
+++ b/camera/camera-video/api/restricted_current.txt
@@ -104,8 +104,8 @@
method public androidx.camera.video.QualitySelector getQualitySelector();
method public int getTargetVideoEncodingBitRate();
method public void onSurfaceRequested(androidx.camera.core.SurfaceRequest);
- method public androidx.camera.video.PendingRecording prepareRecording(android.content.Context, androidx.camera.video.FileOutputOptions);
method @RequiresApi(26) public androidx.camera.video.PendingRecording prepareRecording(android.content.Context, androidx.camera.video.FileDescriptorOutputOptions);
+ method public androidx.camera.video.PendingRecording prepareRecording(android.content.Context, androidx.camera.video.FileOutputOptions);
method public androidx.camera.video.PendingRecording prepareRecording(android.content.Context, androidx.camera.video.MediaStoreOutputOptions);
field public static final androidx.camera.video.QualitySelector DEFAULT_QUALITY_SELECTOR;
}
diff --git a/camera/camera-video/build.gradle b/camera/camera-video/build.gradle
index ff70608..d62ee62 100644
--- a/camera/camera-video/build.gradle
+++ b/camera/camera-video/build.gradle
@@ -87,7 +87,7 @@
}
androidx {
- name = "Jetpack Camera Video Library"
+ name = "Camera Video"
publish = Publish.SNAPSHOT_AND_RELEASE
runApiTasks = new RunApiTasks.Yes("Need to track API surface before moving to publish")
inceptionYear = "2020"
diff --git a/camera/camera-video/src/androidTest/java/androidx/camera/video/RecorderTest.kt b/camera/camera-video/src/androidTest/java/androidx/camera/video/RecorderTest.kt
index 8366234..afb86b0 100644
--- a/camera/camera-video/src/androidTest/java/androidx/camera/video/RecorderTest.kt
+++ b/camera/camera-video/src/androidTest/java/androidx/camera/video/RecorderTest.kt
@@ -16,7 +16,6 @@
package androidx.camera.video
-import androidx.camera.testing.mocks.helpers.ArgumentCaptor as ArgumentCaptorCameraX
import android.Manifest
import android.annotation.SuppressLint
import android.app.AppOpsManager
@@ -56,6 +55,7 @@
import androidx.camera.testing.SurfaceTextureProvider
import androidx.camera.testing.asFlow
import androidx.camera.testing.mocks.MockConsumer
+import androidx.camera.testing.mocks.helpers.ArgumentCaptor as ArgumentCaptorCameraX
import androidx.camera.testing.mocks.helpers.CallTimes
import androidx.camera.testing.mocks.helpers.CallTimesAtLeast
import androidx.camera.video.VideoOutput.SourceState.ACTIVE_NON_STREAMING
diff --git a/camera/camera-video/src/androidTest/java/androidx/camera/video/VideoCaptureDeviceTest.kt b/camera/camera-video/src/androidTest/java/androidx/camera/video/VideoCaptureDeviceTest.kt
index 3f32f37..43507b1 100644
--- a/camera/camera-video/src/androidTest/java/androidx/camera/video/VideoCaptureDeviceTest.kt
+++ b/camera/camera-video/src/androidTest/java/androidx/camera/video/VideoCaptureDeviceTest.kt
@@ -28,8 +28,8 @@
import androidx.camera.core.CameraXConfig
import androidx.camera.core.DynamicRange
import androidx.camera.core.DynamicRange.BIT_DEPTH_10_BIT
-import androidx.camera.core.DynamicRange.FORMAT_HLG
import androidx.camera.core.DynamicRange.HDR_UNSPECIFIED_10_BIT
+import androidx.camera.core.DynamicRange.HLG_10_BIT
import androidx.camera.core.Preview
import androidx.camera.core.SurfaceRequest
import androidx.camera.core.impl.CameraInfoInternal
@@ -116,8 +116,6 @@
arrayOf(Camera2Config::class.simpleName, Camera2Config.defaultConfig()),
arrayOf(CameraPipeConfig::class.simpleName, CameraPipeConfig.defaultConfig())
)
-
- private val DYNAMIC_RANGE_HLG10 = DynamicRange(FORMAT_HLG, BIT_DEPTH_10_BIT)
}
private val context: Context = ApplicationProvider.getApplicationContext()
@@ -395,13 +393,13 @@
fun dynamicRangeHlg_selectsHlg(): Unit = runBlocking {
assumeTrue(
"Device does not support HLG10",
- cameraInfo.supportedDynamicRanges.contains(DYNAMIC_RANGE_HLG10)
+ cameraInfo.supportedDynamicRanges.contains(HLG_10_BIT)
)
testDynamicRangeSelection(
- requestedDynamicRange = DYNAMIC_RANGE_HLG10
+ requestedDynamicRange = HLG_10_BIT
) { selectedDynamicRange ->
- assertThat(selectedDynamicRange).isEqualTo(DYNAMIC_RANGE_HLG10)
+ assertThat(selectedDynamicRange).isEqualTo(HLG_10_BIT)
}
}
@SdkSuppress(minSdkVersion = 33) // HLG10 only supported on API 33+
@@ -412,13 +410,13 @@
assumeTrue(implName != CameraPipeConfig::class.simpleName)
assumeTrue(
"Device does not support HLG10",
- cameraInfo.supportedDynamicRanges.contains(DYNAMIC_RANGE_HLG10)
+ cameraInfo.supportedDynamicRanges.contains(HLG_10_BIT)
)
// Arrange.
val videoOutput = createTestVideoOutput()
val videoCapture = VideoCapture.Builder(videoOutput)
- .setDynamicRange(DYNAMIC_RANGE_HLG10)
+ .setDynamicRange(HLG_10_BIT)
.build()
// Act.
@@ -430,7 +428,7 @@
// Wait for surface request to ensure session config was attached
videoOutput.nextSurfaceRequest(5, TimeUnit.SECONDS)
val outputConfig = videoCapture.sessionConfig.outputConfigs.first()
- assertThat(outputConfig.dynamicRange).isEqualTo(DYNAMIC_RANGE_HLG10)
+ assertThat(outputConfig.dynamicRange).isEqualTo(HLG_10_BIT)
}
@SdkSuppress(minSdkVersion = 33) // 10-bit HDR only supported on API 33+
@@ -459,13 +457,13 @@
assumeTrue(implName != CameraPipeConfig::class.simpleName)
assumeTrue(
"Device does not support HLG10",
- cameraInfo.supportedDynamicRanges.contains(DYNAMIC_RANGE_HLG10)
+ cameraInfo.supportedDynamicRanges.contains(HLG_10_BIT)
)
// Arrange.
val videoOutput = createTestVideoOutput()
val videoCapture = VideoCapture.Builder(videoOutput)
- .setDynamicRange(DYNAMIC_RANGE_HLG10)
+ .setDynamicRange(HLG_10_BIT)
.build()
// Preview will derive dynamic range from VideoCapture since it uses
// DynamicRange.UNSPECIFIED by default.
@@ -487,8 +485,8 @@
deferredSurfaceRequest.await()
} ?: fail("Timed out waiting for Preview SurfaceRequest. Waited $timeout.")
val previewOutputConfig = preview.sessionConfig.outputConfigs.first()
- assertThat(previewSurfaceRequest.dynamicRange).isEqualTo(DYNAMIC_RANGE_HLG10)
- assertThat(previewOutputConfig.dynamicRange).isEqualTo(DYNAMIC_RANGE_HLG10)
+ assertThat(previewSurfaceRequest.dynamicRange).isEqualTo(HLG_10_BIT)
+ assertThat(previewOutputConfig.dynamicRange).isEqualTo(HLG_10_BIT)
}
private suspend fun testDynamicRangeSelection(
diff --git a/camera/camera-video/src/androidTest/java/androidx/camera/video/VideoRecordingTest.kt b/camera/camera-video/src/androidTest/java/androidx/camera/video/VideoRecordingTest.kt
index 39a9ec0..3fe349d 100644
--- a/camera/camera-video/src/androidTest/java/androidx/camera/video/VideoRecordingTest.kt
+++ b/camera/camera-video/src/androidTest/java/androidx/camera/video/VideoRecordingTest.kt
@@ -16,11 +16,6 @@
package androidx.camera.video
-import androidx.camera.camera2.internal.compat.quirk.DeviceQuirks as Camera2DeviceQuirks
-import androidx.camera.camera2.internal.compat.quirk.ExtraCroppingQuirk as Camera2ExtraCroppingQuirk
-import androidx.camera.camera2.pipe.integration.compat.quirk.DeviceQuirks as PipeDeviceQuirks
-import androidx.camera.camera2.pipe.integration.compat.quirk.ExtraCroppingQuirk as PipeExtraCroppingQuirk
-import androidx.camera.testing.mocks.helpers.ArgumentCaptor as ArgumentCaptorCameraX
import android.Manifest
import android.content.Context
import android.graphics.Rect
@@ -34,7 +29,11 @@
import android.view.Surface
import androidx.annotation.RequiresApi
import androidx.camera.camera2.Camera2Config
+import androidx.camera.camera2.internal.compat.quirk.DeviceQuirks as Camera2DeviceQuirks
+import androidx.camera.camera2.internal.compat.quirk.ExtraCroppingQuirk as Camera2ExtraCroppingQuirk
import androidx.camera.camera2.pipe.integration.CameraPipeConfig
+import androidx.camera.camera2.pipe.integration.compat.quirk.DeviceQuirks as PipeDeviceQuirks
+import androidx.camera.camera2.pipe.integration.compat.quirk.ExtraCroppingQuirk as PipeExtraCroppingQuirk
import androidx.camera.core.AspectRatio
import androidx.camera.core.Camera
import androidx.camera.core.CameraInfo
@@ -57,6 +56,7 @@
import androidx.camera.testing.SurfaceTextureProvider
import androidx.camera.testing.fakes.FakeLifecycleOwner
import androidx.camera.testing.mocks.MockConsumer
+import androidx.camera.testing.mocks.helpers.ArgumentCaptor as ArgumentCaptorCameraX
import androidx.camera.testing.mocks.helpers.CallTimesAtLeast
import androidx.camera.video.VideoRecordEvent.Finalize.ERROR_NONE
import androidx.camera.video.VideoRecordEvent.Finalize.ERROR_SOURCE_INACTIVE
@@ -975,6 +975,110 @@
}
}
+ @Test
+ fun canContinueRecordingAfterRebind() {
+ val videoCapture = VideoCapture.withOutput(Recorder.Builder().build())
+
+ instrumentation.runOnMainSync {
+ cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, preview, videoCapture)
+ }
+
+ val file = File.createTempFile("CameraX", ".tmp").apply { deleteOnExit() }
+ val recording =
+ videoCapture.output.prepareRecording(context, FileOutputOptions.Builder(file).build())
+ .withAudioEnabled()
+ .asPersistentRecording()
+ .start(CameraXExecutors.directExecutor(), mockVideoRecordEventConsumer)
+
+ mockVideoRecordEventConsumer.verifyRecordingStartSuccessfully()
+
+ mockVideoRecordEventConsumer.clearAcceptCalls()
+
+ instrumentation.runOnMainSync {
+ cameraProvider.unbindAll()
+ cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, preview, videoCapture)
+ }
+
+ mockVideoRecordEventConsumer.verifyAcceptCall(
+ VideoRecordEvent.Status::class.java,
+ true,
+ STATUS_TIMEOUT,
+ CallTimesAtLeast(5)
+ )
+
+ recording.stop()
+
+ mockVideoRecordEventConsumer.verifyAcceptCall(
+ VideoRecordEvent.Finalize::class.java,
+ true,
+ GENERAL_TIMEOUT
+ )
+
+ verifyRecordingResult(file, true)
+
+ file.delete()
+ }
+
+ @Test
+ fun canContinueRecordingPausedAfterRebind() {
+ val videoCapture = VideoCapture.withOutput(Recorder.Builder().build())
+
+ instrumentation.runOnMainSync {
+ cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, preview, videoCapture)
+ }
+
+ val file = File.createTempFile("CameraX", ".tmp").apply { deleteOnExit() }
+ val recording =
+ videoCapture.output.prepareRecording(context, FileOutputOptions.Builder(file).build())
+ .withAudioEnabled()
+ .asPersistentRecording()
+ .start(CameraXExecutors.directExecutor(), mockVideoRecordEventConsumer)
+
+ mockVideoRecordEventConsumer.verifyRecordingStartSuccessfully()
+
+ recording.pause()
+
+ mockVideoRecordEventConsumer.verifyAcceptCall(
+ VideoRecordEvent.Pause::class.java,
+ true,
+ GENERAL_TIMEOUT
+ )
+
+ mockVideoRecordEventConsumer.clearAcceptCalls()
+
+ instrumentation.runOnMainSync {
+ cameraProvider.unbindAll()
+ cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, preview, videoCapture)
+ }
+
+ recording.resume()
+
+ mockVideoRecordEventConsumer.verifyAcceptCall(
+ VideoRecordEvent.Resume::class.java,
+ true,
+ GENERAL_TIMEOUT
+ )
+
+ mockVideoRecordEventConsumer.verifyAcceptCall(
+ VideoRecordEvent.Status::class.java,
+ true,
+ STATUS_TIMEOUT,
+ CallTimesAtLeast(5)
+ )
+
+ recording.stop()
+
+ mockVideoRecordEventConsumer.verifyAcceptCall(
+ VideoRecordEvent.Finalize::class.java,
+ true,
+ GENERAL_TIMEOUT
+ )
+
+ verifyRecordingResult(file, true)
+
+ file.delete()
+ }
+
private fun startVideoRecording(videoCapture: VideoCapture<Recorder>, file: File):
Recording {
val recording = videoCapture.output
diff --git a/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/BackupHdrProfileEncoderProfilesProviderTest.kt b/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/BackupHdrProfileEncoderProfilesProviderTest.kt
index f887fa8..d5500c4 100644
--- a/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/BackupHdrProfileEncoderProfilesProviderTest.kt
+++ b/camera/camera-video/src/androidTest/java/androidx/camera/video/internal/BackupHdrProfileEncoderProfilesProviderTest.kt
@@ -25,7 +25,7 @@
import androidx.camera.camera2.pipe.integration.adapter.EncoderProfilesProviderAdapter
import androidx.camera.core.CameraSelector
import androidx.camera.core.CameraXConfig
-import androidx.camera.core.DynamicRange
+import androidx.camera.core.DynamicRange.HLG_10_BIT
import androidx.camera.core.DynamicRange.SDR
import androidx.camera.core.impl.CameraInfoInternal
import androidx.camera.core.impl.EncoderProfilesProvider
@@ -71,8 +71,6 @@
val labTest: LabTestRule = LabTestRule()
companion object {
- private val HLG10 = DynamicRange(DynamicRange.FORMAT_HLG, DynamicRange.BIT_DEPTH_10_BIT)
-
@JvmStatic
private val qualities = arrayOf(
CamcorderProfile.QUALITY_LOW,
@@ -169,7 +167,7 @@
@Test
fun providerWithDefaultValidator_provideHdrBackupProfile_whenBaseSdrProfileIsValid() {
// Pre-arrange.
- assumeTrue(cameraInfo.supportedDynamicRanges.containsAll(setOf(SDR, HLG10)))
+ assumeTrue(cameraInfo.supportedDynamicRanges.containsAll(setOf(SDR, HLG_10_BIT)))
// Arrange.
assumeTrue(baseProvider.hasProfile(quality))
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/PendingRecording.java b/camera/camera-video/src/main/java/androidx/camera/video/PendingRecording.java
index a69685a..877c45f 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/PendingRecording.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/PendingRecording.java
@@ -24,6 +24,8 @@
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.RequiresPermission;
+import androidx.annotation.RestrictTo;
+import androidx.annotation.RestrictTo.Scope;
import androidx.camera.core.impl.utils.ContextUtil;
import androidx.core.content.PermissionChecker;
import androidx.core.util.Consumer;
@@ -56,8 +58,8 @@
private final OutputOptions mOutputOptions;
private Consumer<VideoRecordEvent> mEventListener;
private Executor mListenerExecutor;
-
private boolean mAudioEnabled = false;
+ private boolean mIsPersistent = false;
PendingRecording(@NonNull Context context, @NonNull Recorder recorder,
@NonNull OutputOptions options) {
@@ -102,6 +104,10 @@
return mAudioEnabled;
}
+ boolean isPersistent() {
+ return mIsPersistent;
+ }
+
/**
* Enables audio to be recorded for this recording.
*
@@ -138,6 +144,21 @@
}
/**
+ * Configures the recording to be a persistent recording.
+ *
+ * <p>A persistent recording will only be stopped by explicitly calling
+ * {@link Recording#stop()} or {@link Recording#close()} and will ignore events that would
+ * normally cause recording to stop, such as lifecycle events or explicit unbinding of a
+ * {@link VideoCapture} use case that the recording's {@link Recorder} is attached to.
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ public PendingRecording asPersistentRecording() {
+ mIsPersistent = true;
+ return this;
+ }
+
+ /**
* Starts the recording, making it an active recording.
*
* <p>Only a single recording can be active at a time, so if another recording is active,
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/Recorder.java b/camera/camera-video/src/main/java/androidx/camera/video/Recorder.java
index 2d1811f..c1111f4 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/Recorder.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/Recorder.java
@@ -346,7 +346,8 @@
////////////////////////////////////////////////////////////////////////////////////////////////
// Members only accessed on mSequentialExecutor //
////////////////////////////////////////////////////////////////////////////////////////////////
- private RecordingRecord mInProgressRecording = null;
+ @SuppressWarnings("WeakerAccess") /* synthetic accessor */
+ RecordingRecord mInProgressRecording = null;
@SuppressWarnings("WeakerAccess") /* synthetic accessor */
boolean mInProgressRecordingStopping = false;
private SurfaceRequest.TransformationInfo mSurfaceTransformationInfo = null;
@@ -430,7 +431,7 @@
@SuppressWarnings("WeakerAccess") /* synthetic accessor */
ScheduledFuture<?> mSourceNonStreamingTimeout = null;
// The Recorder has to be reset first before being configured again.
- private boolean mNeedsReset = false;
+ private boolean mNeedsResetBeforeNextStart = false;
@NonNull
@SuppressWarnings("WeakerAccess") /* synthetic accessor */
VideoEncoderSession mVideoEncoderSession;
@@ -438,6 +439,7 @@
@SuppressWarnings("WeakerAccess") /* synthetic accessor */
VideoEncoderSession mVideoEncoderSessionToRelease = null;
double mAudioAmplitude = 0;
+ private boolean mShouldSendResumeEvent = false;
//--------------------------------------------------------------------------------------------//
Recorder(@Nullable Executor executor, @NonNull MediaSpec mediaSpec,
@@ -981,14 +983,15 @@
// If we're inactive and have no active surface, we'll reset the encoder directly.
// Otherwise, we'll wait for the active surface's surface request listener to
// reset the encoder.
- requestReset(ERROR_SOURCE_INACTIVE, null);
+ requestReset(ERROR_SOURCE_INACTIVE, null, false);
} else {
// The source becomes inactive, the incoming new surface request has to be cached
// and be serviced after the Recorder is reset when receiving the previous
// surface request complete callback.
- mNeedsReset = true;
- if (mInProgressRecording != null) {
- // Stop any in progress recording with "source inactive" error
+ mNeedsResetBeforeNextStart = true;
+ if (mInProgressRecording != null && !mInProgressRecording.isPersistent()) {
+ // Stop the in progress recording with "source inactive" error if it's not a
+ // persistent recording.
onInProgressRecordingInternalError(mInProgressRecording, ERROR_SOURCE_INACTIVE,
null);
}
@@ -1012,7 +1015,8 @@
* the surface request complete callback first.
*/
@ExecutedBy("mSequentialExecutor")
- void requestReset(@VideoRecordError int errorCode, @Nullable Throwable errorCause) {
+ void requestReset(@VideoRecordError int errorCode, @Nullable Throwable errorCause,
+ boolean videoOnly) {
boolean shouldReset = false;
boolean shouldStop = false;
synchronized (mLock) {
@@ -1034,14 +1038,22 @@
case PAUSED:
// Fall-through
case RECORDING:
+ Preconditions.checkState(mInProgressRecording != null, "In-progress recording"
+ + " shouldn't be null when in state " + mState);
if (mActiveRecordingRecord != mInProgressRecording) {
throw new AssertionError("In-progress recording does not match the active"
+ " recording. Unable to reset encoder.");
}
- // If there's an active recording, stop it first then release the resources
- // at onRecordingFinalized().
- shouldStop = true;
- // Fall-through
+ // If there's an active persistent recording, reset the Recorder directly.
+ // Otherwise, stop the recording first then release the Recorder at
+ // onRecordingFinalized().
+ if (isPersistentRecordingInProgress()) {
+ shouldReset = true;
+ } else {
+ shouldStop = true;
+ setState(State.RESETTING);
+ }
+ break;
case STOPPING:
// Already stopping. Set state to RESETTING so resources will be released once
// onRecordingFinalized() runs.
@@ -1056,14 +1068,17 @@
// These calls must not be posted to the executor to ensure they are executed inline on
// the sequential executor and the state changes above are correctly handled.
if (shouldReset) {
- reset();
+ if (videoOnly) {
+ resetVideo();
+ } else {
+ reset();
+ }
} else if (shouldStop) {
stopInternal(mInProgressRecording, Encoder.NO_TIMESTAMP, errorCode, errorCause);
}
}
@ExecutedBy("mSequentialExecutor")
-
private void configureInternal(@NonNull SurfaceRequest surfaceRequest,
@NonNull Timebase videoSourceTimebase) {
if (surfaceRequest.isServiced()) {
@@ -1096,9 +1111,14 @@
@ExecutedBy("mSequentialExecutor")
private void setupVideo(@NonNull SurfaceRequest request, @NonNull Timebase timebase) {
safeToCloseVideoEncoder().addListener(() -> {
- if (request.isServiced() || mVideoEncoderSession.isConfiguredSurfaceRequest(request)) {
+ if (request.isServiced()
+ || (mVideoEncoderSession.isConfiguredSurfaceRequest(request)
+ && !isPersistentRecordingInProgress())) {
+ // Ignore the surface request if it's already serviced. Or the video encoder
+ // session is already configured, unless there's a persistent recording is running.
Logger.w(TAG, "Ignore the SurfaceRequest " + request + " isServiced: "
- + request.isServiced() + " VideoEncoderSession: " + mVideoEncoderSession);
+ + request.isServiced() + " VideoEncoderSession: " + mVideoEncoderSession
+ + " has been configured with a persistent in-progress recording.");
return;
}
VideoEncoderSession videoEncoderSession =
@@ -1130,6 +1150,12 @@
}, mSequentialExecutor);
}
+ @SuppressWarnings("WeakerAccess") /* synthetic accessor */
+ @ExecutedBy("mSequentialExecutor")
+ boolean isPersistentRecordingInProgress() {
+ return mInProgressRecording != null && mInProgressRecording.isPersistent();
+ }
+
@NonNull
@ExecutedBy("mSequentialExecutor")
private ListenableFuture<Void> safeToCloseVideoEncoder() {
@@ -1165,7 +1191,9 @@
mVideoEncoderSessionToRelease = videoEncoderSession;
setLatestSurface(null);
- requestReset(ERROR_SOURCE_INACTIVE, null);
+ // Only reset video if the in-progress recording is persistent.
+ requestReset(ERROR_SOURCE_INACTIVE, null,
+ isPersistentRecordingInProgress());
}
@Override
@@ -1180,17 +1208,14 @@
void onConfigured() {
RecordingRecord recordingToStart = null;
RecordingRecord pendingRecordingToFinalize = null;
+ boolean continuePersistentRecording = false;
@VideoRecordError int error = ERROR_NONE;
Throwable errorCause = null;
- boolean startRecordingPaused = false;
+ boolean recordingPaused = false;
synchronized (mLock) {
switch (mState) {
case IDLING:
// Fall-through
- case RECORDING:
- // Fall-through
- case PAUSED:
- // Fall-through
case RESETTING:
throw new AssertionError(
"Incorrectly invoke onConfigured() in state " + mState);
@@ -1200,6 +1225,15 @@
+ "STOPPING state when it's not waiting for a new surface.");
}
break;
+ case PAUSED:
+ recordingPaused = true;
+ // Fall-through
+ case RECORDING:
+ Preconditions.checkState(isPersistentRecordingInProgress(),
+ "Unexpectedly invoke onConfigured() when there's a non-persistent "
+ + "in-progress recording");
+ continuePersistentRecording = true;
+ break;
case CONFIGURING:
setState(State.IDLING);
break;
@@ -1208,7 +1242,7 @@
"onConfigured() was invoked when the Recorder had encountered error");
break;
case PENDING_PAUSED:
- startRecordingPaused = true;
+ recordingPaused = true;
// Fall through
case PENDING_RECORDING:
if (mActiveRecordingRecord != null) {
@@ -1229,9 +1263,21 @@
}
}
- if (recordingToStart != null) {
+ if (continuePersistentRecording) {
+ updateEncoderCallbacks(mInProgressRecording, true);
+ mVideoEncoder.start();
+ if (mShouldSendResumeEvent) {
+ mInProgressRecording.updateVideoRecordEvent(VideoRecordEvent.resume(
+ mInProgressRecording.getOutputOptions(),
+ getInProgressRecordingStats()));
+ mShouldSendResumeEvent = false;
+ }
+ if (recordingPaused) {
+ mVideoEncoder.pause();
+ }
+ } else if (recordingToStart != null) {
// Start new active recording inline on sequential executor (but unlocked).
- startRecording(recordingToStart, startRecordingPaused);
+ startRecording(recordingToStart, recordingPaused);
} else if (pendingRecordingToFinalize != null) {
finalizePendingRecording(pendingRecordingToFinalize, error, errorCause);
}
@@ -1527,7 +1573,9 @@
"The Recorder doesn't support recording with audio");
}
try {
- setupAudio(recordingToStart);
+ if (!mInProgressRecording.isPersistent() || mAudioEncoder == null) {
+ setupAudio(recordingToStart);
+ }
setAudioState(AudioState.ENABLED);
} catch (AudioSourceAccessException | InvalidConfigException e) {
Logger.e(TAG, "Unable to create audio resource with error: ", e);
@@ -1544,7 +1592,7 @@
break;
}
- initEncoderAndAudioSourceCallbacks(recordingToStart);
+ updateEncoderCallbacks(recordingToStart, false);
if (isAudioEnabled()) {
mAudioSource.start(recordingToStart.isMuted());
mAudioEncoder.start();
@@ -1557,7 +1605,17 @@
}
@ExecutedBy("mSequentialExecutor")
- private void initEncoderAndAudioSourceCallbacks(@NonNull RecordingRecord recordingToStart) {
+ private void updateEncoderCallbacks(@NonNull RecordingRecord recordingToStart,
+ boolean videoOnly) {
+ // If there are uncompleted futures, cancel them first.
+ if (!mEncodingFutures.isEmpty()) {
+ ListenableFuture<List<Void>> listFuture = Futures.allAsList(mEncodingFutures);
+ if (!listFuture.isDone()) {
+ listFuture.cancel(true);
+ }
+ mEncodingFutures.clear();
+ }
+
mEncodingFutures.add(CallbackToFutureAdapter.getFuture(
completer -> {
mVideoEncoder.setEncoderCallback(new EncoderCallback() {
@@ -1653,7 +1711,7 @@
return "videoEncodingFuture";
}));
- if (isAudioEnabled()) {
+ if (isAudioEnabled() && !videoOnly) {
mEncodingFutures.add(CallbackToFutureAdapter.getFuture(
completer -> {
Consumer<Throwable> audioErrorConsumer = throwable -> {
@@ -1784,12 +1842,16 @@
@Override
public void onFailure(@NonNull Throwable t) {
- Logger.d(TAG, "Encodings end with error: " + t);
- // If the media muxer hasn't been set up, assume the encoding fails
- // because of no valid data has been produced.
- finalizeInProgressRecording(
- mMediaMuxer == null ? ERROR_NO_VALID_DATA : ERROR_ENCODING_FAILED,
- t);
+ Preconditions.checkState(mInProgressRecording != null,
+ "In-progress recording shouldn't be null");
+ // If a persistent recording requires reconfiguring the video encoder,
+ // the previous encoder future has to be canceled without finalizing the
+ // in-progress recording.
+ if (!mInProgressRecording.isPersistent()) {
+ Logger.d(TAG, "Encodings end with error: " + t);
+ finalizeInProgressRecording(mMediaMuxer == null ? ERROR_NO_VALID_DATA
+ : ERROR_ENCODING_FAILED, t);
+ }
}
},
// Can use direct executor since completers are always completed on sequential
@@ -1930,11 +1992,20 @@
if (isAudioEnabled()) {
mAudioEncoder.start();
}
- mVideoEncoder.start();
-
- mInProgressRecording.updateVideoRecordEvent(VideoRecordEvent.resume(
- mInProgressRecording.getOutputOptions(),
- getInProgressRecordingStats()));
+ // If a persistent recording is resumed immediately after the VideoCapture is rebound
+ // to a camera, it's possible that the encoder hasn't been created yet. Then the
+ // encoder will be started once it's initialized. So only start the encoder when it's
+ // not null.
+ if (mVideoEncoder != null) {
+ mVideoEncoder.start();
+ mInProgressRecording.updateVideoRecordEvent(VideoRecordEvent.resume(
+ mInProgressRecording.getOutputOptions(),
+ getInProgressRecordingStats()));
+ } else {
+ // Instead sending here, send the Resume event once the encoder is initialized
+ // and started.
+ mShouldSendResumeEvent = true;
+ }
}
}
@@ -2028,13 +2099,12 @@
mAudioEncoder = null;
mAudioOutputConfig = null;
}
- tryReleaseVideoEncoder();
if (mAudioSource != null) {
releaseCurrentAudioSource();
}
setAudioState(AudioState.INITIALIZING);
- onReset();
+ resetVideo();
}
@SuppressWarnings("FutureReturnValueIgnored")
@@ -2056,7 +2126,8 @@
}
@ExecutedBy("mSequentialExecutor")
- private void onReset() {
+ private void onResetVideo() {
+ boolean shouldConfigure = true;
synchronized (mLock) {
switch (mState) {
case PENDING_PAUSED:
@@ -2069,6 +2140,10 @@
case PAUSED:
// Fall-through
case RECORDING:
+ if (isPersistentRecordingInProgress()) {
+ shouldConfigure = false;
+ break;
+ }
// Fall-through
case IDLING:
// Fall-through
@@ -2083,15 +2158,25 @@
}
}
- mNeedsReset = false;
+ mNeedsResetBeforeNextStart = false;
// If the latest surface request hasn't been serviced, use it to re-configure the Recorder.
- if (mLatestSurfaceRequest != null && !mLatestSurfaceRequest.isServiced()) {
+ if (shouldConfigure && mLatestSurfaceRequest != null
+ && !mLatestSurfaceRequest.isServiced()) {
configureInternal(mLatestSurfaceRequest, mVideoSourceTimebase);
}
}
@ExecutedBy("mSequentialExecutor")
+ private void resetVideo() {
+ if (mVideoEncoder != null) {
+ Logger.d(TAG, "Releasing video encoder.");
+ tryReleaseVideoEncoder();
+ }
+ onResetVideo();
+ }
+
+ @ExecutedBy("mSequentialExecutor")
private int internalAudioStateToAudioStatsState(@NonNull AudioState audioState) {
switch (audioState) {
case DISABLED:
@@ -2377,7 +2462,7 @@
startRecordingPaused = true;
// Fall-through
case PENDING_RECORDING:
- if (mActiveRecordingRecord != null || mNeedsReset) {
+ if (mActiveRecordingRecord != null || mNeedsResetBeforeNextStart) {
// Active recording is still finalizing or the Recorder is expected to be
// reset. Pending recording will be serviced in onRecordingFinalized() or
// in onReset().
@@ -2678,6 +2763,7 @@
pendingRecording.getListenerExecutor(),
pendingRecording.getEventListener(),
pendingRecording.isAudioEnabled(),
+ pendingRecording.isPersistent(),
recordingId
);
}
@@ -2693,6 +2779,8 @@
abstract boolean hasAudioEnabled();
+ abstract boolean isPersistent();
+
abstract long getRecordingId();
/**
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/RecorderVideoCapabilities.java b/camera/camera-video/src/main/java/androidx/camera/video/RecorderVideoCapabilities.java
index ef2fd4c..7b78e91 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/RecorderVideoCapabilities.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/RecorderVideoCapabilities.java
@@ -17,10 +17,10 @@
package androidx.camera.video;
import static androidx.camera.core.DynamicRange.BIT_DEPTH_UNSPECIFIED;
-import static androidx.camera.core.DynamicRange.FORMAT_HDR_UNSPECIFIED;
-import static androidx.camera.core.DynamicRange.FORMAT_HLG;
-import static androidx.camera.core.DynamicRange.FORMAT_SDR;
-import static androidx.camera.core.DynamicRange.FORMAT_UNSPECIFIED;
+import static androidx.camera.core.DynamicRange.ENCODING_HDR_UNSPECIFIED;
+import static androidx.camera.core.DynamicRange.ENCODING_HLG;
+import static androidx.camera.core.DynamicRange.ENCODING_SDR;
+import static androidx.camera.core.DynamicRange.ENCODING_UNSPECIFIED;
import static androidx.camera.video.internal.BackupHdrProfileEncoderProfilesProvider.DEFAULT_VALIDATOR;
import android.util.Size;
@@ -79,8 +79,8 @@
// Mappings of DynamicRange to recording capability information. The mappings are divided
// into two collections based on the key's (DynamicRange) category, one for specified
// DynamicRange and one for others. Specified DynamicRange means that its bit depth and
- // format are specified values, not some wildcards, such as: FORMAT_UNSPECIFIED,
- // FORMAT_HDR_UNSPECIFIED or BIT_DEPTH_UNSPECIFIED.
+ // format are specified values, not some wildcards, such as: ENCODING_UNSPECIFIED,
+ // ENCODING_HDR_UNSPECIFIED or BIT_DEPTH_UNSPECIFIED.
private final Map<DynamicRange, CapabilitiesByQuality>
mCapabilitiesMapForFullySpecifiedDynamicRange = new HashMap<>();
private final Map<DynamicRange, CapabilitiesByQuality>
@@ -213,9 +213,9 @@
@NonNull CameraInfoInternal cameraInfoInternal) {
Set<DynamicRange> dynamicRanges = cameraInfoInternal.getSupportedDynamicRanges();
for (DynamicRange dynamicRange : dynamicRanges) {
- Integer format = dynamicRange.getFormat();
+ Integer encoding = dynamicRange.getEncoding();
int bitDepth = dynamicRange.getBitDepth();
- if (format.equals(FORMAT_HLG) && bitDepth == DynamicRange.BIT_DEPTH_10_BIT) {
+ if (encoding.equals(ENCODING_HLG) && bitDepth == DynamicRange.BIT_DEPTH_10_BIT) {
return true;
}
}
@@ -252,7 +252,7 @@
} else {
for (DynamicRange fullySpecifiedDynamicRange : fullySpecifiedDynamicRanges) {
if (canMatchBitDepth(dynamicRangeToTest, fullySpecifiedDynamicRange)
- && canMatchFormat(dynamicRangeToTest, fullySpecifiedDynamicRange)) {
+ && canMatchEncoding(dynamicRangeToTest, fullySpecifiedDynamicRange)) {
return true;
}
}
@@ -272,26 +272,26 @@
return dynamicRangeToTest.getBitDepth() == fullySpecifiedDynamicRange.getBitDepth();
}
- private static boolean canMatchFormat(@NonNull DynamicRange dynamicRangeToTest,
+ private static boolean canMatchEncoding(@NonNull DynamicRange dynamicRangeToTest,
@NonNull DynamicRange fullySpecifiedDynamicRange) {
Preconditions.checkState(isFullySpecified(fullySpecifiedDynamicRange), "Fully specified "
+ "range is not actually fully specified.");
- int formatToTest = dynamicRangeToTest.getFormat();
- if (formatToTest == FORMAT_UNSPECIFIED) {
+ int encodingToTest = dynamicRangeToTest.getEncoding();
+ if (encodingToTest == ENCODING_UNSPECIFIED) {
return true;
}
- int fullySpecifiedFormat = fullySpecifiedDynamicRange.getFormat();
- if (formatToTest == FORMAT_HDR_UNSPECIFIED && fullySpecifiedFormat != FORMAT_SDR) {
+ int fullySpecifiedEncoding = fullySpecifiedDynamicRange.getEncoding();
+ if (encodingToTest == ENCODING_HDR_UNSPECIFIED && fullySpecifiedEncoding != ENCODING_SDR) {
return true;
}
- return formatToTest == fullySpecifiedFormat;
+ return encodingToTest == fullySpecifiedEncoding;
}
private static boolean isFullySpecified(@NonNull DynamicRange dynamicRange) {
- return dynamicRange.getFormat() != FORMAT_UNSPECIFIED
- && dynamicRange.getFormat() != FORMAT_HDR_UNSPECIFIED
+ return dynamicRange.getEncoding() != ENCODING_UNSPECIFIED
+ && dynamicRange.getEncoding() != ENCODING_HDR_UNSPECIFIED
&& dynamicRange.getBitDepth() != BIT_DEPTH_UNSPECIFIED;
}
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/Recording.java b/camera/camera-video/src/main/java/androidx/camera/video/Recording.java
index 84f9eb2..297935b 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/Recording.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/Recording.java
@@ -54,13 +54,15 @@
private final Recorder mRecorder;
private final long mRecordingId;
private final OutputOptions mOutputOptions;
+ private final boolean mIsPersistent;
private final CloseGuardHelper mCloseGuard = CloseGuardHelper.create();
Recording(@NonNull Recorder recorder, long recordingId, @NonNull OutputOptions options,
- boolean finalizedOnCreation) {
+ boolean isPersistent, boolean finalizedOnCreation) {
mRecorder = recorder;
mRecordingId = recordingId;
mOutputOptions = options;
+ mIsPersistent = isPersistent;
if (finalizedOnCreation) {
mIsClosed.set(true);
@@ -81,6 +83,7 @@
return new Recording(pendingRecording.getRecorder(),
recordingId,
pendingRecording.getOutputOptions(),
+ pendingRecording.isPersistent(),
/*finalizedOnCreation=*/false);
}
@@ -101,6 +104,7 @@
return new Recording(pendingRecording.getRecorder(),
recordingId,
pendingRecording.getOutputOptions(),
+ pendingRecording.isPersistent(),
/*finalizedOnCreation=*/true);
}
@@ -110,6 +114,20 @@
}
/**
+ * Returns whether this recording is a persistent recording.
+ *
+ * <p>A persistent recording will only be stopped by explicitly calling of
+ * {@link Recording#stop()} and will ignore the lifecycle events or source state changes.
+ * Users are responsible of stopping a persistent recording.
+ *
+ * @return {@code true} if the recording is a persistent recording, otherwise {@code false}.
+ */
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ public boolean isPersistent() {
+ return mIsPersistent;
+ }
+
+ /**
* Pauses the current recording if active.
*
* <p>Successful pausing of a recording will generate a {@link VideoRecordEvent.Pause} event
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/VideoCapabilities.java b/camera/camera-video/src/main/java/androidx/camera/video/VideoCapabilities.java
index 5814ce7..0d8521c 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/VideoCapabilities.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/VideoCapabilities.java
@@ -41,7 +41,7 @@
* Gets all dynamic ranges supported by both the camera and video output.
*
* <p>Only {@link DynamicRange}s with specified values both in {@link DynamicRange.BitDepth}
- * and {@link DynamicRange.DynamicRangeFormat} will be present in the returned set.
+ * and {@link DynamicRange.DynamicRangeEncoding} will be present in the returned set.
* {@link DynamicRange}s such as {@link DynamicRange#HDR_UNSPECIFIED_10_BIT} will not be
* included, but they can be used in other methods, such as checking for quality support with
* {@link #isQualitySupported(Quality, DynamicRange)}.
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/VideoEncoderSession.java b/camera/camera-video/src/main/java/androidx/camera/video/VideoEncoderSession.java
index 9b9d46c..2bc65fd 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/VideoEncoderSession.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/VideoEncoderSession.java
@@ -111,6 +111,7 @@
switch (mVideoEncoderState) {
case NOT_INITIALIZED:
mVideoEncoderState = VideoEncoderState.INITIALIZING;
+
mSurfaceRequest = surfaceRequest;
Logger.d(TAG, "Create VideoEncoderSession: " + this);
mReleasedFuture = CallbackToFutureAdapter.getFuture(closeCompleter -> {
@@ -333,6 +334,7 @@
closeInternal();
break;
}
+
mActiveSurface = surface;
Logger.d(TAG, "provide surface: " + surface);
surfaceRequest.provideSurface(surface, mSequentialExecutor,
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/DynamicRangeMatchedEncoderProfilesProvider.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/DynamicRangeMatchedEncoderProfilesProvider.java
index b8c05c1..8567979 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/internal/DynamicRangeMatchedEncoderProfilesProvider.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/DynamicRangeMatchedEncoderProfilesProvider.java
@@ -93,7 +93,7 @@
List<VideoProfileProxy> validVideoProfiles = new ArrayList<>();
for (VideoProfileProxy videoProfile : encoderProfiles.getVideoProfiles()) {
- if (isBitDepthMatched(videoProfile, dynamicRange) && isHdrFormatMatched(videoProfile,
+ if (isBitDepthMatched(videoProfile, dynamicRange) && isHdrEncodingMatched(videoProfile,
dynamicRange)) {
validVideoProfiles.add(videoProfile);
}
@@ -114,10 +114,11 @@
return matchedBitDepths != null && matchedBitDepths.contains(videoProfile.getBitDepth());
}
- private static boolean isHdrFormatMatched(@NonNull VideoProfileProxy videoProfile,
+ private static boolean isHdrEncodingMatched(@NonNull VideoProfileProxy videoProfile,
@NonNull DynamicRange dynamicRange) {
- Set<Integer> matchedHdrFormats = DR_TO_VP_FORMAT_MAP.get(dynamicRange.getFormat());
+ Set<Integer> matchedHdrEncodings = DR_TO_VP_FORMAT_MAP.get(dynamicRange.getEncoding());
- return matchedHdrFormats != null && matchedHdrFormats.contains(videoProfile.getHdrFormat());
+ return matchedHdrEncodings != null
+ && matchedHdrEncodings.contains(videoProfile.getHdrFormat());
}
}
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/utils/DynamicRangeUtil.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/utils/DynamicRangeUtil.java
index e079aba..63e67ae 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/internal/utils/DynamicRangeUtil.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/utils/DynamicRangeUtil.java
@@ -25,13 +25,13 @@
import static androidx.camera.core.DynamicRange.BIT_DEPTH_10_BIT;
import static androidx.camera.core.DynamicRange.BIT_DEPTH_8_BIT;
import static androidx.camera.core.DynamicRange.BIT_DEPTH_UNSPECIFIED;
-import static androidx.camera.core.DynamicRange.FORMAT_DOLBY_VISION;
-import static androidx.camera.core.DynamicRange.FORMAT_HDR10;
-import static androidx.camera.core.DynamicRange.FORMAT_HDR10_PLUS;
-import static androidx.camera.core.DynamicRange.FORMAT_HDR_UNSPECIFIED;
-import static androidx.camera.core.DynamicRange.FORMAT_HLG;
-import static androidx.camera.core.DynamicRange.FORMAT_SDR;
-import static androidx.camera.core.DynamicRange.FORMAT_UNSPECIFIED;
+import static androidx.camera.core.DynamicRange.ENCODING_DOLBY_VISION;
+import static androidx.camera.core.DynamicRange.ENCODING_HDR10;
+import static androidx.camera.core.DynamicRange.ENCODING_HDR10_PLUS;
+import static androidx.camera.core.DynamicRange.ENCODING_HDR_UNSPECIFIED;
+import static androidx.camera.core.DynamicRange.ENCODING_HLG;
+import static androidx.camera.core.DynamicRange.ENCODING_SDR;
+import static androidx.camera.core.DynamicRange.ENCODING_UNSPECIFIED;
import static androidx.camera.core.impl.EncoderProfilesProxy.VideoProfileProxy.BIT_DEPTH_10;
import static androidx.camera.core.impl.EncoderProfilesProxy.VideoProfileProxy.BIT_DEPTH_8;
@@ -65,23 +65,23 @@
DR_TO_VP_BIT_DEPTH_MAP.put(BIT_DEPTH_UNSPECIFIED,
new HashSet<>(asList(BIT_DEPTH_8, BIT_DEPTH_10)));
- // DynamicRange format to VideoProfile HDR format.
- DR_TO_VP_FORMAT_MAP.put(FORMAT_UNSPECIFIED, new HashSet<>(asList(HDR_NONE, HDR_HLG,
+ // DynamicRange encoding to VideoProfile HDR format.
+ DR_TO_VP_FORMAT_MAP.put(ENCODING_UNSPECIFIED, new HashSet<>(asList(HDR_NONE, HDR_HLG,
HDR_HDR10, HDR_HDR10PLUS, HDR_DOLBY_VISION)));
- DR_TO_VP_FORMAT_MAP.put(FORMAT_SDR, new HashSet<>(singletonList(HDR_NONE)));
- DR_TO_VP_FORMAT_MAP.put(FORMAT_HDR_UNSPECIFIED,
+ DR_TO_VP_FORMAT_MAP.put(ENCODING_SDR, new HashSet<>(singletonList(HDR_NONE)));
+ DR_TO_VP_FORMAT_MAP.put(ENCODING_HDR_UNSPECIFIED,
new HashSet<>(asList(HDR_HLG, HDR_HDR10, HDR_HDR10PLUS, HDR_DOLBY_VISION)));
- DR_TO_VP_FORMAT_MAP.put(FORMAT_HLG, new HashSet<>(singletonList(HDR_HLG)));
- DR_TO_VP_FORMAT_MAP.put(FORMAT_HDR10, new HashSet<>(singletonList(HDR_HDR10)));
- DR_TO_VP_FORMAT_MAP.put(FORMAT_HDR10_PLUS, new HashSet<>(singletonList(HDR_HDR10PLUS)));
- DR_TO_VP_FORMAT_MAP.put(FORMAT_DOLBY_VISION,
+ DR_TO_VP_FORMAT_MAP.put(ENCODING_HLG, new HashSet<>(singletonList(HDR_HLG)));
+ DR_TO_VP_FORMAT_MAP.put(ENCODING_HDR10, new HashSet<>(singletonList(HDR_HDR10)));
+ DR_TO_VP_FORMAT_MAP.put(ENCODING_HDR10_PLUS, new HashSet<>(singletonList(HDR_HDR10PLUS)));
+ DR_TO_VP_FORMAT_MAP.put(ENCODING_DOLBY_VISION,
new HashSet<>(singletonList(HDR_DOLBY_VISION)));
- // VideoProfile HDR format to DynamicRange format.
- VP_TO_DR_FORMAT_MAP.put(HDR_NONE, FORMAT_SDR);
- VP_TO_DR_FORMAT_MAP.put(HDR_HLG, FORMAT_HLG);
- VP_TO_DR_FORMAT_MAP.put(HDR_HDR10, FORMAT_HDR10);
- VP_TO_DR_FORMAT_MAP.put(HDR_HDR10PLUS, FORMAT_HDR10_PLUS);
- VP_TO_DR_FORMAT_MAP.put(HDR_DOLBY_VISION, FORMAT_DOLBY_VISION);
+ // VideoProfile HDR format to DynamicRange encoding.
+ VP_TO_DR_FORMAT_MAP.put(HDR_NONE, ENCODING_SDR);
+ VP_TO_DR_FORMAT_MAP.put(HDR_HLG, ENCODING_HLG);
+ VP_TO_DR_FORMAT_MAP.put(HDR_HDR10, ENCODING_HDR10);
+ VP_TO_DR_FORMAT_MAP.put(HDR_HDR10PLUS, ENCODING_HDR10_PLUS);
+ VP_TO_DR_FORMAT_MAP.put(HDR_DOLBY_VISION, ENCODING_DOLBY_VISION);
}
}
diff --git a/camera/camera-video/src/test/java/androidx/camera/video/QualitySelectorTest.kt b/camera/camera-video/src/test/java/androidx/camera/video/QualitySelectorTest.kt
index 83ed028c..d65651c 100644
--- a/camera/camera-video/src/test/java/androidx/camera/video/QualitySelectorTest.kt
+++ b/camera/camera-video/src/test/java/androidx/camera/video/QualitySelectorTest.kt
@@ -22,8 +22,7 @@
import android.media.CamcorderProfile.QUALITY_LOW
import android.os.Build
import androidx.camera.core.DynamicRange
-import androidx.camera.core.DynamicRange.BIT_DEPTH_10_BIT
-import androidx.camera.core.DynamicRange.FORMAT_HLG
+import androidx.camera.core.DynamicRange.HLG_10_BIT
import androidx.camera.core.DynamicRange.SDR
import androidx.camera.testing.EncoderProfilesUtil.PROFILES_2160P
import androidx.camera.testing.EncoderProfilesUtil.PROFILES_720P
@@ -40,7 +39,6 @@
import org.robolectric.annotation.internal.DoNotInstrument
private const val CAMERA_ID_0 = "0"
-private val HLG10 = DynamicRange(FORMAT_HLG, BIT_DEPTH_10_BIT)
@RunWith(RobolectricTestRunner::class)
@DoNotInstrument
@@ -58,7 +56,7 @@
private val videoCapabilities = createFakeVideoCapabilities(
mapOf(
SDR to listOf(Quality.UHD, Quality.HD),
- HLG10 to listOf(Quality.FHD, Quality.SD)
+ HLG_10_BIT to listOf(Quality.FHD, Quality.SD)
)
)
@@ -345,7 +343,7 @@
)
// Act.
- val supportedQualities = videoCapabilities.getSupportedQualities(HLG10)
+ val supportedQualities = videoCapabilities.getSupportedQualities(HLG_10_BIT)
val selectedQualities = qualitySelector.getPrioritizedQualities(supportedQualities)
// Assert.
@@ -362,7 +360,7 @@
)
// Act.
- val supportedQualities = videoCapabilities.getSupportedQualities(HLG10)
+ val supportedQualities = videoCapabilities.getSupportedQualities(HLG_10_BIT)
val selectedQualities = qualitySelector.getPrioritizedQualities(supportedQualities)
// Assert.
@@ -379,7 +377,7 @@
)
// Act.
- val supportedQualities = videoCapabilities.getSupportedQualities(HLG10)
+ val supportedQualities = videoCapabilities.getSupportedQualities(HLG_10_BIT)
val selectedQualities = qualitySelector.getPrioritizedQualities(supportedQualities)
// Assert.
@@ -396,7 +394,7 @@
)
// Act.
- val supportedQualities = videoCapabilities.getSupportedQualities(HLG10)
+ val supportedQualities = videoCapabilities.getSupportedQualities(HLG_10_BIT)
val selectedQualities = qualitySelector.getPrioritizedQualities(supportedQualities)
// Assert.
@@ -413,7 +411,7 @@
)
// Act.
- val supportedQualities = videoCapabilities.getSupportedQualities(HLG10)
+ val supportedQualities = videoCapabilities.getSupportedQualities(HLG_10_BIT)
val selectedQualities = qualitySelector.getPrioritizedQualities(supportedQualities)
// Assert.
diff --git a/camera/camera-video/src/test/java/androidx/camera/video/RecorderVideoCapabilitiesTest.kt b/camera/camera-video/src/test/java/androidx/camera/video/RecorderVideoCapabilitiesTest.kt
index f917aca..2a1c94e 100644
--- a/camera/camera-video/src/test/java/androidx/camera/video/RecorderVideoCapabilitiesTest.kt
+++ b/camera/camera-video/src/test/java/androidx/camera/video/RecorderVideoCapabilitiesTest.kt
@@ -23,12 +23,12 @@
import androidx.camera.core.DynamicRange.BIT_DEPTH_10_BIT
import androidx.camera.core.DynamicRange.BIT_DEPTH_8_BIT
import androidx.camera.core.DynamicRange.BIT_DEPTH_UNSPECIFIED
-import androidx.camera.core.DynamicRange.FORMAT_DOLBY_VISION
-import androidx.camera.core.DynamicRange.FORMAT_HDR10
-import androidx.camera.core.DynamicRange.FORMAT_HDR_UNSPECIFIED
-import androidx.camera.core.DynamicRange.FORMAT_HLG
-import androidx.camera.core.DynamicRange.FORMAT_UNSPECIFIED
+import androidx.camera.core.DynamicRange.ENCODING_DOLBY_VISION
+import androidx.camera.core.DynamicRange.ENCODING_HDR_UNSPECIFIED
+import androidx.camera.core.DynamicRange.ENCODING_UNSPECIFIED
+import androidx.camera.core.DynamicRange.HDR10_10_BIT
import androidx.camera.core.DynamicRange.HDR_UNSPECIFIED_10_BIT
+import androidx.camera.core.DynamicRange.HLG_10_BIT
import androidx.camera.core.DynamicRange.SDR
import androidx.camera.core.DynamicRange.UNSPECIFIED
import androidx.camera.core.impl.EncoderProfilesProxy.VideoProfileProxy
@@ -54,12 +54,10 @@
import org.robolectric.annotation.Config
import org.robolectric.annotation.internal.DoNotInstrument
-private val HLG10 = DynamicRange(FORMAT_HLG, BIT_DEPTH_10_BIT)
-private val HDR10 = DynamicRange(FORMAT_HDR10, BIT_DEPTH_10_BIT)
-private val UNSPECIFIED_8_BIT = DynamicRange(FORMAT_UNSPECIFIED, BIT_DEPTH_8_BIT)
-private val UNSPECIFIED_10_BIT = DynamicRange(FORMAT_UNSPECIFIED, BIT_DEPTH_10_BIT)
-private val HDR_UNSPECIFIED = DynamicRange(FORMAT_HDR_UNSPECIFIED, BIT_DEPTH_UNSPECIFIED)
-private val DOLBY_VISION_UNSPECIFIED = DynamicRange(FORMAT_DOLBY_VISION, BIT_DEPTH_UNSPECIFIED)
+private val UNSPECIFIED_8_BIT = DynamicRange(ENCODING_UNSPECIFIED, BIT_DEPTH_8_BIT)
+private val UNSPECIFIED_10_BIT = DynamicRange(ENCODING_UNSPECIFIED, BIT_DEPTH_10_BIT)
+private val HDR_UNSPECIFIED = DynamicRange(ENCODING_HDR_UNSPECIFIED, BIT_DEPTH_UNSPECIFIED)
+private val DOLBY_VISION_UNSPECIFIED = DynamicRange(ENCODING_DOLBY_VISION, BIT_DEPTH_UNSPECIFIED)
@RunWith(RobolectricTestRunner::class)
@DoNotInstrument
@@ -72,7 +70,7 @@
.add(CamcorderProfile.QUALITY_720P, PROFILES_720P) // HD (720p)
.add(CamcorderProfile.QUALITY_LOW, PROFILES_720P) // HD (720p) per above definition
.build()
- private val defaultDynamicRanges = setOf(SDR, HLG10)
+ private val defaultDynamicRanges = setOf(SDR, HLG_10_BIT)
private val cameraInfo = FakeCameraInfoInternal().apply {
encoderProfilesProvider = defaultProfilesProvider
supportedDynamicRanges = defaultDynamicRanges
@@ -88,7 +86,7 @@
@Test
fun canGetSupportedDynamicRanges() {
- assertThat(videoCapabilities.supportedDynamicRanges).containsExactly(SDR, HLG10)
+ assertThat(videoCapabilities.supportedDynamicRanges).containsExactly(SDR, HLG_10_BIT)
}
@Test
@@ -98,12 +96,12 @@
@Test
fun hasSupportedQualities_hlg10() {
- assertThat(videoCapabilities.getSupportedQualities(HLG10)).containsExactly(HD, UHD)
+ assertThat(videoCapabilities.getSupportedQualities(HLG_10_BIT)).containsExactly(HD, UHD)
}
@Test
fun hasSupportedQualities_hdr10() {
- assertThat(videoCapabilities.getSupportedQualities(HDR10)).isEmpty()
+ assertThat(videoCapabilities.getSupportedQualities(HDR10_10_BIT)).isEmpty()
}
@Test
@@ -162,12 +160,12 @@
@Test
fun isQualitySupported_hlg10WithBackupProfile() {
- assertThat(videoCapabilities.isQualitySupported(HIGHEST, HLG10)).isTrue()
- assertThat(videoCapabilities.isQualitySupported(LOWEST, HLG10)).isTrue()
- assertThat(videoCapabilities.isQualitySupported(UHD, HLG10)).isTrue()
- assertThat(videoCapabilities.isQualitySupported(FHD, HLG10)).isFalse()
- assertThat(videoCapabilities.isQualitySupported(HD, HLG10)).isTrue()
- assertThat(videoCapabilities.isQualitySupported(SD, HLG10)).isFalse()
+ assertThat(videoCapabilities.isQualitySupported(HIGHEST, HLG_10_BIT)).isTrue()
+ assertThat(videoCapabilities.isQualitySupported(LOWEST, HLG_10_BIT)).isTrue()
+ assertThat(videoCapabilities.isQualitySupported(UHD, HLG_10_BIT)).isTrue()
+ assertThat(videoCapabilities.isQualitySupported(FHD, HLG_10_BIT)).isFalse()
+ assertThat(videoCapabilities.isQualitySupported(HD, HLG_10_BIT)).isTrue()
+ assertThat(videoCapabilities.isQualitySupported(SD, HLG_10_BIT)).isFalse()
}
@Test
@@ -202,12 +200,12 @@
@Test
fun canGetNonNullHlg10BackupProfile_whenSdrProfileExisted() {
- assertThat(videoCapabilities.getProfiles(HIGHEST, HLG10)).isNotNull()
- assertThat(videoCapabilities.getProfiles(LOWEST, HLG10)).isNotNull()
- assertThat(videoCapabilities.getProfiles(UHD, HLG10)).isNotNull()
- assertThat(videoCapabilities.getProfiles(FHD, HLG10)).isNull()
- assertThat(videoCapabilities.getProfiles(HD, HLG10)).isNotNull()
- assertThat(videoCapabilities.getProfiles(SD, HLG10)).isNull()
+ assertThat(videoCapabilities.getProfiles(HIGHEST, HLG_10_BIT)).isNotNull()
+ assertThat(videoCapabilities.getProfiles(LOWEST, HLG_10_BIT)).isNotNull()
+ assertThat(videoCapabilities.getProfiles(UHD, HLG_10_BIT)).isNotNull()
+ assertThat(videoCapabilities.getProfiles(FHD, HLG_10_BIT)).isNull()
+ assertThat(videoCapabilities.getProfiles(HD, HLG_10_BIT)).isNotNull()
+ assertThat(videoCapabilities.getProfiles(SD, HLG_10_BIT)).isNull()
}
@Test
diff --git a/camera/camera-video/src/test/java/androidx/camera/video/VideoCaptureTest.kt b/camera/camera-video/src/test/java/androidx/camera/video/VideoCaptureTest.kt
index ccc85b0..b3c282b 100644
--- a/camera/camera-video/src/test/java/androidx/camera/video/VideoCaptureTest.kt
+++ b/camera/camera-video/src/test/java/androidx/camera/video/VideoCaptureTest.kt
@@ -45,8 +45,6 @@
import androidx.camera.core.CameraSelector.LENS_FACING_FRONT
import androidx.camera.core.CameraXConfig
import androidx.camera.core.DynamicRange
-import androidx.camera.core.DynamicRange.BIT_DEPTH_10_BIT
-import androidx.camera.core.DynamicRange.FORMAT_HLG
import androidx.camera.core.MirrorMode.MIRROR_MODE_OFF
import androidx.camera.core.MirrorMode.MIRROR_MODE_ON
import androidx.camera.core.MirrorMode.MIRROR_MODE_ON_FRONT_ONLY
@@ -1046,7 +1044,7 @@
// propagated to the SurfaceRequest. It should come from the StreamSpec.
testSurfaceRequestContainsExpected(
requestedDynamicRange = DynamicRange.HDR_UNSPECIFIED_10_BIT,
- expectedDynamicRange = DynamicRange(FORMAT_HLG, BIT_DEPTH_10_BIT)
+ expectedDynamicRange = DynamicRange.HLG_10_BIT
)
}
diff --git a/camera/camera-video/src/test/java/androidx/camera/video/internal/DynamicRangeMatchedEncoderProfilesProviderTest.kt b/camera/camera-video/src/test/java/androidx/camera/video/internal/DynamicRangeMatchedEncoderProfilesProviderTest.kt
index 7c9a766..d9f0af8 100644
--- a/camera/camera-video/src/test/java/androidx/camera/video/internal/DynamicRangeMatchedEncoderProfilesProviderTest.kt
+++ b/camera/camera-video/src/test/java/androidx/camera/video/internal/DynamicRangeMatchedEncoderProfilesProviderTest.kt
@@ -23,13 +23,11 @@
import android.media.EncoderProfiles.VideoProfile.HDR_HLG
import android.media.EncoderProfiles.VideoProfile.HDR_NONE
import android.os.Build
-import androidx.camera.core.DynamicRange
-import androidx.camera.core.DynamicRange.BIT_DEPTH_10_BIT
-import androidx.camera.core.DynamicRange.FORMAT_DOLBY_VISION
-import androidx.camera.core.DynamicRange.FORMAT_HDR10
-import androidx.camera.core.DynamicRange.FORMAT_HDR10_PLUS
-import androidx.camera.core.DynamicRange.FORMAT_HLG
+import androidx.camera.core.DynamicRange.DOLBY_VISION_10_BIT
+import androidx.camera.core.DynamicRange.HDR10_10_BIT
+import androidx.camera.core.DynamicRange.HDR10_PLUS_10_BIT
import androidx.camera.core.DynamicRange.HDR_UNSPECIFIED_10_BIT
+import androidx.camera.core.DynamicRange.HLG_10_BIT
import androidx.camera.core.DynamicRange.SDR
import androidx.camera.core.impl.EncoderProfilesProvider
import androidx.camera.core.impl.EncoderProfilesProxy
@@ -62,11 +60,12 @@
fun hasNoProfile_canNotGetProfiles() {
val emptyProvider = createFakeEncoderProfilesProvider()
val sdrProvider = DynamicRangeMatchedEncoderProfilesProvider(emptyProvider, SDR)
- val hlgProvider = DynamicRangeMatchedEncoderProfilesProvider(emptyProvider, HLG)
- val hdr10Provider = DynamicRangeMatchedEncoderProfilesProvider(emptyProvider, HDR10)
+ val hlgProvider = DynamicRangeMatchedEncoderProfilesProvider(emptyProvider, HLG_10_BIT)
+ val hdr10Provider = DynamicRangeMatchedEncoderProfilesProvider(emptyProvider, HDR10_10_BIT)
val hdr10PlusProvider =
- DynamicRangeMatchedEncoderProfilesProvider(emptyProvider, HDR10_PLUS)
- val dolbyProvider = DynamicRangeMatchedEncoderProfilesProvider(emptyProvider, DOLBY_VISION)
+ DynamicRangeMatchedEncoderProfilesProvider(emptyProvider, HDR10_PLUS_10_BIT)
+ val dolbyProvider =
+ DynamicRangeMatchedEncoderProfilesProvider(emptyProvider, DOLBY_VISION_10_BIT)
val hdrUnspecifiedProvider =
DynamicRangeMatchedEncoderProfilesProvider(emptyProvider, HDR_UNSPECIFIED_10_BIT)
@@ -97,7 +96,7 @@
@Test
fun hlg_onlyContainsHlgProfile() {
- val provider = DynamicRangeMatchedEncoderProfilesProvider(defaultProvider, HLG)
+ val provider = DynamicRangeMatchedEncoderProfilesProvider(defaultProvider, HLG_10_BIT)
assertThat(provider.hasProfile(QUALITY_1080P)).isTrue()
val videoProfiles = provider.getAll(QUALITY_1080P)!!.videoProfiles
@@ -108,7 +107,7 @@
@Test
fun hdr10_onlyContainsHdr10Profile() {
- val provider = DynamicRangeMatchedEncoderProfilesProvider(defaultProvider, HDR10)
+ val provider = DynamicRangeMatchedEncoderProfilesProvider(defaultProvider, HDR10_10_BIT)
assertThat(provider.hasProfile(QUALITY_1080P)).isTrue()
val videoProfiles = provider.getAll(QUALITY_1080P)!!.videoProfiles
@@ -119,7 +118,8 @@
@Test
fun hdr10Plus_onlyContainsHdr10PlusProfile() {
- val provider = DynamicRangeMatchedEncoderProfilesProvider(defaultProvider, HDR10_PLUS)
+ val provider =
+ DynamicRangeMatchedEncoderProfilesProvider(defaultProvider, HDR10_PLUS_10_BIT)
assertThat(provider.hasProfile(QUALITY_1080P)).isTrue()
val videoProfiles = provider.getAll(QUALITY_1080P)!!.videoProfiles
@@ -130,7 +130,8 @@
@Test
fun dolbyVision_onlyContainsDolbyVisionProfile() {
- val provider = DynamicRangeMatchedEncoderProfilesProvider(defaultProvider, DOLBY_VISION)
+ val provider =
+ DynamicRangeMatchedEncoderProfilesProvider(defaultProvider, DOLBY_VISION_10_BIT)
assertThat(provider.hasProfile(QUALITY_1080P)).isTrue()
val videoProfiles = provider.getAll(QUALITY_1080P)!!.videoProfiles
@@ -168,10 +169,6 @@
}
companion object {
- private val HLG = DynamicRange(FORMAT_HLG, BIT_DEPTH_10_BIT)
- private val HDR10 = DynamicRange(FORMAT_HDR10, BIT_DEPTH_10_BIT)
- private val HDR10_PLUS = DynamicRange(FORMAT_HDR10_PLUS, BIT_DEPTH_10_BIT)
- private val DOLBY_VISION = DynamicRange(FORMAT_DOLBY_VISION, BIT_DEPTH_10_BIT)
private val VIDEO_PROFILES_1080P_SDR =
createFakeVideoProfileProxy(RESOLUTION_1080P.width, RESOLUTION_1080P.height)
private val VIDEO_PROFILES_1080P_HLG =
diff --git a/camera/camera-view/api/current.txt b/camera/camera-view/api/current.txt
index 3bd4fea..440119d 100644
--- a/camera/camera-view/api/current.txt
+++ b/camera/camera-view/api/current.txt
@@ -20,12 +20,15 @@
method @MainThread public androidx.camera.view.CameraController.OutputSize? getPreviewTargetSize();
method @MainThread public androidx.lifecycle.LiveData<java.lang.Integer!> getTapToFocusState();
method @MainThread public androidx.lifecycle.LiveData<java.lang.Integer!> getTorchState();
+ method @MainThread @androidx.camera.view.video.ExperimentalVideo public androidx.camera.video.Quality? getVideoCaptureTargetQuality();
method @MainThread public androidx.lifecycle.LiveData<androidx.camera.core.ZoomState!> getZoomState();
method @MainThread public boolean hasCamera(androidx.camera.core.CameraSelector);
method @MainThread public boolean isImageAnalysisEnabled();
method @MainThread public boolean isImageCaptureEnabled();
method @MainThread public boolean isPinchToZoomEnabled();
+ method @MainThread @androidx.camera.view.video.ExperimentalVideo public boolean isRecording();
method @MainThread public boolean isTapToFocusEnabled();
+ method @MainThread @androidx.camera.view.video.ExperimentalVideo public boolean isVideoCaptureEnabled();
method @MainThread public void setCameraSelector(androidx.camera.core.CameraSelector);
method @MainThread public void setEffects(java.util.Set<androidx.camera.core.CameraEffect!>);
method @MainThread public void setEnabledUseCases(int);
@@ -42,7 +45,11 @@
method @MainThread public void setPinchToZoomEnabled(boolean);
method @MainThread public void setPreviewTargetSize(androidx.camera.view.CameraController.OutputSize?);
method @MainThread public void setTapToFocusEnabled(boolean);
+ method @MainThread @androidx.camera.view.video.ExperimentalVideo public void setVideoCaptureTargetQuality(androidx.camera.video.Quality?);
method @MainThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setZoomRatio(float);
+ method @MainThread @RequiresApi(26) @androidx.camera.view.video.ExperimentalVideo public androidx.camera.video.Recording startRecording(androidx.camera.video.FileDescriptorOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.video.VideoRecordEvent!>);
+ method @MainThread @androidx.camera.view.video.ExperimentalVideo public androidx.camera.video.Recording startRecording(androidx.camera.video.FileOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.video.VideoRecordEvent!>);
+ method @MainThread @androidx.camera.view.video.ExperimentalVideo public androidx.camera.video.Recording startRecording(androidx.camera.video.MediaStoreOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.video.VideoRecordEvent!>);
method @MainThread public void takePicture(androidx.camera.core.ImageCapture.OutputFileOptions, java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageSavedCallback);
method @MainThread public void takePicture(java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageCapturedCallback);
field public static final int COORDINATE_SYSTEM_VIEW_REFERENCED = 1; // 0x1
@@ -53,11 +60,12 @@
field public static final int TAP_TO_FOCUS_NOT_FOCUSED = 3; // 0x3
field public static final int TAP_TO_FOCUS_NOT_STARTED = 0; // 0x0
field public static final int TAP_TO_FOCUS_STARTED = 1; // 0x1
+ field @androidx.camera.view.video.ExperimentalVideo public static final int VIDEO_CAPTURE = 4; // 0x4
}
@RequiresApi(21) public static final class CameraController.OutputSize {
- ctor public CameraController.OutputSize(int);
ctor public CameraController.OutputSize(android.util.Size);
+ ctor public CameraController.OutputSize(int);
method public int getAspectRatio();
method public android.util.Size? getResolution();
field public static final int UNASSIGNED_ASPECT_RATIO = -1; // 0xffffffff
@@ -78,6 +86,7 @@
method @UiThread public androidx.camera.view.CameraController? getController();
method @UiThread public androidx.camera.view.PreviewView.ImplementationMode getImplementationMode();
method @UiThread public androidx.camera.core.MeteringPointFactory getMeteringPointFactory();
+ method public androidx.camera.view.transform.OutputTransform? getOutputTransform();
method public androidx.lifecycle.LiveData<androidx.camera.view.PreviewView.StreamState!> getPreviewStreamState();
method @UiThread public androidx.camera.view.PreviewView.ScaleType getScaleType();
method @UiThread public androidx.camera.core.Preview.SurfaceProvider getSurfaceProvider();
@@ -119,3 +128,49 @@
}
+package androidx.camera.view.transform {
+
+ @RequiresApi(21) public final class CoordinateTransform {
+ ctor public CoordinateTransform(androidx.camera.view.transform.OutputTransform, androidx.camera.view.transform.OutputTransform);
+ method public void mapPoint(android.graphics.PointF);
+ method public void mapPoints(float[]);
+ method public void mapRect(android.graphics.RectF);
+ method public void transform(android.graphics.Matrix);
+ }
+
+ @RequiresApi(21) public final class FileTransformFactory {
+ ctor public FileTransformFactory();
+ method public androidx.camera.view.transform.OutputTransform getOutputTransform(android.content.ContentResolver, android.net.Uri) throws java.io.IOException;
+ method public androidx.camera.view.transform.OutputTransform getOutputTransform(java.io.File) throws java.io.IOException;
+ method public androidx.camera.view.transform.OutputTransform getOutputTransform(java.io.InputStream) throws java.io.IOException;
+ method public boolean isUsingExifOrientation();
+ method public void setUsingExifOrientation(boolean);
+ }
+
+ @RequiresApi(21) public final class ImageProxyTransformFactory {
+ ctor public ImageProxyTransformFactory();
+ method public androidx.camera.view.transform.OutputTransform getOutputTransform(androidx.camera.core.ImageProxy);
+ method public boolean isUsingCropRect();
+ method public boolean isUsingRotationDegrees();
+ method public void setUsingCropRect(boolean);
+ method public void setUsingRotationDegrees(boolean);
+ }
+
+ @RequiresApi(21) public final class OutputTransform {
+ }
+
+}
+
+package androidx.camera.view.video {
+
+ @RequiresApi(21) @androidx.camera.view.video.ExperimentalVideo public class AudioConfig {
+ method @RequiresPermission(android.Manifest.permission.RECORD_AUDIO) public static androidx.camera.view.video.AudioConfig create(boolean);
+ method public boolean getAudioEnabled();
+ field public static final androidx.camera.view.video.AudioConfig AUDIO_DISABLED;
+ }
+
+ @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalVideo {
+ }
+
+}
+
diff --git a/camera/camera-view/api/public_plus_experimental_current.txt b/camera/camera-view/api/public_plus_experimental_current.txt
deleted file mode 100644
index b4027bc..0000000
--- a/camera/camera-view/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,176 +0,0 @@
-// Signature format: 4.0
-package androidx.camera.view {
-
- @RequiresApi(21) public abstract class CameraController {
- method @MainThread public void clearEffects();
- method @MainThread public void clearImageAnalysisAnalyzer();
- method @MainThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> enableTorch(boolean);
- method @MainThread public androidx.camera.core.CameraControl? getCameraControl();
- method @MainThread public androidx.camera.core.CameraInfo? getCameraInfo();
- method @MainThread public androidx.camera.core.CameraSelector getCameraSelector();
- method @MainThread public java.util.concurrent.Executor? getImageAnalysisBackgroundExecutor();
- method @MainThread public int getImageAnalysisBackpressureStrategy();
- method @MainThread public int getImageAnalysisImageQueueDepth();
- method @MainThread public androidx.camera.view.CameraController.OutputSize? getImageAnalysisTargetSize();
- method @MainThread public int getImageCaptureFlashMode();
- method @MainThread public java.util.concurrent.Executor? getImageCaptureIoExecutor();
- method @MainThread public int getImageCaptureMode();
- method @MainThread public androidx.camera.view.CameraController.OutputSize? getImageCaptureTargetSize();
- method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> getInitializationFuture();
- method @MainThread public androidx.camera.view.CameraController.OutputSize? getPreviewTargetSize();
- method @MainThread public androidx.lifecycle.LiveData<java.lang.Integer!> getTapToFocusState();
- method @MainThread public androidx.lifecycle.LiveData<java.lang.Integer!> getTorchState();
- method @MainThread @androidx.camera.view.video.ExperimentalVideo public androidx.camera.video.Quality? getVideoCaptureTargetQuality();
- method @MainThread public androidx.lifecycle.LiveData<androidx.camera.core.ZoomState!> getZoomState();
- method @MainThread public boolean hasCamera(androidx.camera.core.CameraSelector);
- method @MainThread public boolean isImageAnalysisEnabled();
- method @MainThread public boolean isImageCaptureEnabled();
- method @MainThread public boolean isPinchToZoomEnabled();
- method @MainThread @androidx.camera.view.video.ExperimentalVideo public boolean isRecording();
- method @MainThread public boolean isTapToFocusEnabled();
- method @MainThread @androidx.camera.view.video.ExperimentalVideo public boolean isVideoCaptureEnabled();
- method @MainThread public void setCameraSelector(androidx.camera.core.CameraSelector);
- method @MainThread public void setEffects(java.util.Set<androidx.camera.core.CameraEffect!>);
- method @MainThread public void setEnabledUseCases(int);
- method @MainThread public void setImageAnalysisAnalyzer(java.util.concurrent.Executor, androidx.camera.core.ImageAnalysis.Analyzer);
- method @MainThread public void setImageAnalysisBackgroundExecutor(java.util.concurrent.Executor?);
- method @MainThread public void setImageAnalysisBackpressureStrategy(int);
- method @MainThread public void setImageAnalysisImageQueueDepth(int);
- method @MainThread public void setImageAnalysisTargetSize(androidx.camera.view.CameraController.OutputSize?);
- method @MainThread public void setImageCaptureFlashMode(int);
- method @MainThread public void setImageCaptureIoExecutor(java.util.concurrent.Executor?);
- method @MainThread public void setImageCaptureMode(int);
- method @MainThread public void setImageCaptureTargetSize(androidx.camera.view.CameraController.OutputSize?);
- method @MainThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setLinearZoom(@FloatRange(from=0.0f, to=1.0f) float);
- method @MainThread public void setPinchToZoomEnabled(boolean);
- method @MainThread public void setPreviewTargetSize(androidx.camera.view.CameraController.OutputSize?);
- method @MainThread public void setTapToFocusEnabled(boolean);
- method @MainThread @androidx.camera.view.video.ExperimentalVideo public void setVideoCaptureTargetQuality(androidx.camera.video.Quality?);
- method @MainThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setZoomRatio(float);
- method @MainThread @androidx.camera.view.video.ExperimentalVideo public androidx.camera.video.Recording startRecording(androidx.camera.video.FileOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.video.VideoRecordEvent!>);
- method @MainThread @RequiresApi(26) @androidx.camera.view.video.ExperimentalVideo public androidx.camera.video.Recording startRecording(androidx.camera.video.FileDescriptorOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.video.VideoRecordEvent!>);
- method @MainThread @androidx.camera.view.video.ExperimentalVideo public androidx.camera.video.Recording startRecording(androidx.camera.video.MediaStoreOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.video.VideoRecordEvent!>);
- method @MainThread public void takePicture(androidx.camera.core.ImageCapture.OutputFileOptions, java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageSavedCallback);
- method @MainThread public void takePicture(java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageCapturedCallback);
- field public static final int COORDINATE_SYSTEM_VIEW_REFERENCED = 1; // 0x1
- field public static final int IMAGE_ANALYSIS = 2; // 0x2
- field public static final int IMAGE_CAPTURE = 1; // 0x1
- field public static final int TAP_TO_FOCUS_FAILED = 4; // 0x4
- field public static final int TAP_TO_FOCUS_FOCUSED = 2; // 0x2
- field public static final int TAP_TO_FOCUS_NOT_FOCUSED = 3; // 0x3
- field public static final int TAP_TO_FOCUS_NOT_STARTED = 0; // 0x0
- field public static final int TAP_TO_FOCUS_STARTED = 1; // 0x1
- field @androidx.camera.view.video.ExperimentalVideo public static final int VIDEO_CAPTURE = 4; // 0x4
- }
-
- @RequiresApi(21) public static final class CameraController.OutputSize {
- ctor public CameraController.OutputSize(int);
- ctor public CameraController.OutputSize(android.util.Size);
- method public int getAspectRatio();
- method public android.util.Size? getResolution();
- field public static final int UNASSIGNED_ASPECT_RATIO = -1; // 0xffffffff
- }
-
- @RequiresApi(21) public final class LifecycleCameraController extends androidx.camera.view.CameraController {
- ctor public LifecycleCameraController(android.content.Context);
- method @MainThread public void bindToLifecycle(androidx.lifecycle.LifecycleOwner);
- method @MainThread public void unbind();
- }
-
- @RequiresApi(21) public final class PreviewView extends android.widget.FrameLayout {
- ctor @UiThread public PreviewView(android.content.Context);
- ctor @UiThread public PreviewView(android.content.Context, android.util.AttributeSet?);
- ctor @UiThread public PreviewView(android.content.Context, android.util.AttributeSet?, int);
- ctor @UiThread public PreviewView(android.content.Context, android.util.AttributeSet?, int, int);
- method @UiThread public android.graphics.Bitmap? getBitmap();
- method @UiThread public androidx.camera.view.CameraController? getController();
- method @UiThread public androidx.camera.view.PreviewView.ImplementationMode getImplementationMode();
- method @UiThread public androidx.camera.core.MeteringPointFactory getMeteringPointFactory();
- method public androidx.camera.view.transform.OutputTransform? getOutputTransform();
- method public androidx.lifecycle.LiveData<androidx.camera.view.PreviewView.StreamState!> getPreviewStreamState();
- method @UiThread public androidx.camera.view.PreviewView.ScaleType getScaleType();
- method @UiThread public androidx.camera.core.Preview.SurfaceProvider getSurfaceProvider();
- method @UiThread public androidx.camera.core.ViewPort? getViewPort();
- method @UiThread public androidx.camera.core.ViewPort? getViewPort(int);
- method @UiThread public void setController(androidx.camera.view.CameraController?);
- method @UiThread public void setImplementationMode(androidx.camera.view.PreviewView.ImplementationMode);
- method @UiThread public void setScaleType(androidx.camera.view.PreviewView.ScaleType);
- }
-
- @RequiresApi(21) public enum PreviewView.ImplementationMode {
- enum_constant public static final androidx.camera.view.PreviewView.ImplementationMode COMPATIBLE;
- enum_constant public static final androidx.camera.view.PreviewView.ImplementationMode PERFORMANCE;
- }
-
- @RequiresApi(21) public enum PreviewView.ScaleType {
- enum_constant public static final androidx.camera.view.PreviewView.ScaleType FILL_CENTER;
- enum_constant public static final androidx.camera.view.PreviewView.ScaleType FILL_END;
- enum_constant public static final androidx.camera.view.PreviewView.ScaleType FILL_START;
- enum_constant public static final androidx.camera.view.PreviewView.ScaleType FIT_CENTER;
- enum_constant public static final androidx.camera.view.PreviewView.ScaleType FIT_END;
- enum_constant public static final androidx.camera.view.PreviewView.ScaleType FIT_START;
- }
-
- public enum PreviewView.StreamState {
- enum_constant public static final androidx.camera.view.PreviewView.StreamState IDLE;
- enum_constant public static final androidx.camera.view.PreviewView.StreamState STREAMING;
- }
-
- @RequiresApi(21) public final class RotationProvider {
- ctor public RotationProvider(android.content.Context);
- method @CheckResult public boolean addListener(java.util.concurrent.Executor, androidx.camera.view.RotationProvider.Listener);
- method public void removeListener(androidx.camera.view.RotationProvider.Listener);
- }
-
- public static interface RotationProvider.Listener {
- method public void onRotationChanged(int);
- }
-
-}
-
-package androidx.camera.view.transform {
-
- @RequiresApi(21) public final class CoordinateTransform {
- ctor public CoordinateTransform(androidx.camera.view.transform.OutputTransform, androidx.camera.view.transform.OutputTransform);
- method public void mapPoint(android.graphics.PointF);
- method public void mapPoints(float[]);
- method public void mapRect(android.graphics.RectF);
- method public void transform(android.graphics.Matrix);
- }
-
- @RequiresApi(21) public final class FileTransformFactory {
- ctor public FileTransformFactory();
- method public androidx.camera.view.transform.OutputTransform getOutputTransform(android.content.ContentResolver, android.net.Uri) throws java.io.IOException;
- method public androidx.camera.view.transform.OutputTransform getOutputTransform(java.io.File) throws java.io.IOException;
- method public androidx.camera.view.transform.OutputTransform getOutputTransform(java.io.InputStream) throws java.io.IOException;
- method public boolean isUsingExifOrientation();
- method public void setUsingExifOrientation(boolean);
- }
-
- @RequiresApi(21) public final class ImageProxyTransformFactory {
- ctor public ImageProxyTransformFactory();
- method public androidx.camera.view.transform.OutputTransform getOutputTransform(androidx.camera.core.ImageProxy);
- method public boolean isUsingCropRect();
- method public boolean isUsingRotationDegrees();
- method public void setUsingCropRect(boolean);
- method public void setUsingRotationDegrees(boolean);
- }
-
- @RequiresApi(21) public final class OutputTransform {
- }
-
-}
-
-package androidx.camera.view.video {
-
- @RequiresApi(21) @androidx.camera.view.video.ExperimentalVideo public class AudioConfig {
- method @RequiresPermission(android.Manifest.permission.RECORD_AUDIO) public static androidx.camera.view.video.AudioConfig create(boolean);
- method public boolean getAudioEnabled();
- field public static final androidx.camera.view.video.AudioConfig AUDIO_DISABLED;
- }
-
- @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalVideo {
- }
-
-}
-
diff --git a/camera/camera-view/api/restricted_current.txt b/camera/camera-view/api/restricted_current.txt
index 3bd4fea..440119d 100644
--- a/camera/camera-view/api/restricted_current.txt
+++ b/camera/camera-view/api/restricted_current.txt
@@ -20,12 +20,15 @@
method @MainThread public androidx.camera.view.CameraController.OutputSize? getPreviewTargetSize();
method @MainThread public androidx.lifecycle.LiveData<java.lang.Integer!> getTapToFocusState();
method @MainThread public androidx.lifecycle.LiveData<java.lang.Integer!> getTorchState();
+ method @MainThread @androidx.camera.view.video.ExperimentalVideo public androidx.camera.video.Quality? getVideoCaptureTargetQuality();
method @MainThread public androidx.lifecycle.LiveData<androidx.camera.core.ZoomState!> getZoomState();
method @MainThread public boolean hasCamera(androidx.camera.core.CameraSelector);
method @MainThread public boolean isImageAnalysisEnabled();
method @MainThread public boolean isImageCaptureEnabled();
method @MainThread public boolean isPinchToZoomEnabled();
+ method @MainThread @androidx.camera.view.video.ExperimentalVideo public boolean isRecording();
method @MainThread public boolean isTapToFocusEnabled();
+ method @MainThread @androidx.camera.view.video.ExperimentalVideo public boolean isVideoCaptureEnabled();
method @MainThread public void setCameraSelector(androidx.camera.core.CameraSelector);
method @MainThread public void setEffects(java.util.Set<androidx.camera.core.CameraEffect!>);
method @MainThread public void setEnabledUseCases(int);
@@ -42,7 +45,11 @@
method @MainThread public void setPinchToZoomEnabled(boolean);
method @MainThread public void setPreviewTargetSize(androidx.camera.view.CameraController.OutputSize?);
method @MainThread public void setTapToFocusEnabled(boolean);
+ method @MainThread @androidx.camera.view.video.ExperimentalVideo public void setVideoCaptureTargetQuality(androidx.camera.video.Quality?);
method @MainThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setZoomRatio(float);
+ method @MainThread @RequiresApi(26) @androidx.camera.view.video.ExperimentalVideo public androidx.camera.video.Recording startRecording(androidx.camera.video.FileDescriptorOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.video.VideoRecordEvent!>);
+ method @MainThread @androidx.camera.view.video.ExperimentalVideo public androidx.camera.video.Recording startRecording(androidx.camera.video.FileOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.video.VideoRecordEvent!>);
+ method @MainThread @androidx.camera.view.video.ExperimentalVideo public androidx.camera.video.Recording startRecording(androidx.camera.video.MediaStoreOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.video.VideoRecordEvent!>);
method @MainThread public void takePicture(androidx.camera.core.ImageCapture.OutputFileOptions, java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageSavedCallback);
method @MainThread public void takePicture(java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageCapturedCallback);
field public static final int COORDINATE_SYSTEM_VIEW_REFERENCED = 1; // 0x1
@@ -53,11 +60,12 @@
field public static final int TAP_TO_FOCUS_NOT_FOCUSED = 3; // 0x3
field public static final int TAP_TO_FOCUS_NOT_STARTED = 0; // 0x0
field public static final int TAP_TO_FOCUS_STARTED = 1; // 0x1
+ field @androidx.camera.view.video.ExperimentalVideo public static final int VIDEO_CAPTURE = 4; // 0x4
}
@RequiresApi(21) public static final class CameraController.OutputSize {
- ctor public CameraController.OutputSize(int);
ctor public CameraController.OutputSize(android.util.Size);
+ ctor public CameraController.OutputSize(int);
method public int getAspectRatio();
method public android.util.Size? getResolution();
field public static final int UNASSIGNED_ASPECT_RATIO = -1; // 0xffffffff
@@ -78,6 +86,7 @@
method @UiThread public androidx.camera.view.CameraController? getController();
method @UiThread public androidx.camera.view.PreviewView.ImplementationMode getImplementationMode();
method @UiThread public androidx.camera.core.MeteringPointFactory getMeteringPointFactory();
+ method public androidx.camera.view.transform.OutputTransform? getOutputTransform();
method public androidx.lifecycle.LiveData<androidx.camera.view.PreviewView.StreamState!> getPreviewStreamState();
method @UiThread public androidx.camera.view.PreviewView.ScaleType getScaleType();
method @UiThread public androidx.camera.core.Preview.SurfaceProvider getSurfaceProvider();
@@ -119,3 +128,49 @@
}
+package androidx.camera.view.transform {
+
+ @RequiresApi(21) public final class CoordinateTransform {
+ ctor public CoordinateTransform(androidx.camera.view.transform.OutputTransform, androidx.camera.view.transform.OutputTransform);
+ method public void mapPoint(android.graphics.PointF);
+ method public void mapPoints(float[]);
+ method public void mapRect(android.graphics.RectF);
+ method public void transform(android.graphics.Matrix);
+ }
+
+ @RequiresApi(21) public final class FileTransformFactory {
+ ctor public FileTransformFactory();
+ method public androidx.camera.view.transform.OutputTransform getOutputTransform(android.content.ContentResolver, android.net.Uri) throws java.io.IOException;
+ method public androidx.camera.view.transform.OutputTransform getOutputTransform(java.io.File) throws java.io.IOException;
+ method public androidx.camera.view.transform.OutputTransform getOutputTransform(java.io.InputStream) throws java.io.IOException;
+ method public boolean isUsingExifOrientation();
+ method public void setUsingExifOrientation(boolean);
+ }
+
+ @RequiresApi(21) public final class ImageProxyTransformFactory {
+ ctor public ImageProxyTransformFactory();
+ method public androidx.camera.view.transform.OutputTransform getOutputTransform(androidx.camera.core.ImageProxy);
+ method public boolean isUsingCropRect();
+ method public boolean isUsingRotationDegrees();
+ method public void setUsingCropRect(boolean);
+ method public void setUsingRotationDegrees(boolean);
+ }
+
+ @RequiresApi(21) public final class OutputTransform {
+ }
+
+}
+
+package androidx.camera.view.video {
+
+ @RequiresApi(21) @androidx.camera.view.video.ExperimentalVideo public class AudioConfig {
+ method @RequiresPermission(android.Manifest.permission.RECORD_AUDIO) public static androidx.camera.view.video.AudioConfig create(boolean);
+ method public boolean getAudioEnabled();
+ field public static final androidx.camera.view.video.AudioConfig AUDIO_DISABLED;
+ }
+
+ @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalVideo {
+ }
+
+}
+
diff --git a/camera/camera-view/build.gradle b/camera/camera-view/build.gradle
index fe34a08..2476a37 100644
--- a/camera/camera-view/build.gradle
+++ b/camera/camera-view/build.gradle
@@ -80,7 +80,7 @@
namespace "androidx.camera.view"
}
androidx {
- name = "Jetpack Camera View Library"
+ name = "Camera View"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2019"
diff --git a/camera/camera-view/src/androidTest/java/androidx/camera/view/SurfaceViewImplementationTest.kt b/camera/camera-view/src/androidTest/java/androidx/camera/view/SurfaceViewImplementationTest.kt
index a3f1971..f5fdfb6 100644
--- a/camera/camera-view/src/androidTest/java/androidx/camera/view/SurfaceViewImplementationTest.kt
+++ b/camera/camera-view/src/androidTest/java/androidx/camera/view/SurfaceViewImplementationTest.kt
@@ -32,12 +32,12 @@
import androidx.test.filters.SdkSuppress
import androidx.test.platform.app.InstrumentationRegistry
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.After
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/camera/camera-view/src/androidTest/java/androidx/camera/view/TextureViewImplementationTest.kt b/camera/camera-view/src/androidTest/java/androidx/camera/view/TextureViewImplementationTest.kt
index 20d9291..25e1814 100644
--- a/camera/camera-view/src/androidTest/java/androidx/camera/view/TextureViewImplementationTest.kt
+++ b/camera/camera-view/src/androidTest/java/androidx/camera/view/TextureViewImplementationTest.kt
@@ -15,14 +15,14 @@
*/
package androidx.camera.view
-import android.widget.FrameLayout
import android.graphics.SurfaceTexture
import android.os.Build
import android.util.Size
-import androidx.camera.view.PreviewViewImplementation.OnSurfaceNotInUseListener
import android.view.TextureView
+import android.widget.FrameLayout
import androidx.camera.core.SurfaceRequest
import androidx.camera.testing.fakes.FakeCamera
+import androidx.camera.view.PreviewViewImplementation.OnSurfaceNotInUseListener
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import androidx.test.filters.MediumTest
@@ -30,14 +30,14 @@
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
import com.google.common.truth.Truth
-import org.junit.After
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
import java.lang.Exception
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
import java.util.concurrent.TimeoutException
+import org.junit.After
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/camera/camera-viewfinder-compose/api/public_plus_experimental_current.txt b/camera/camera-viewfinder-compose/api/public_plus_experimental_current.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/camera/camera-viewfinder-compose/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/camera/camera-viewfinder-core/api/public_plus_experimental_current.txt b/camera/camera-viewfinder-core/api/public_plus_experimental_current.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/camera/camera-viewfinder-core/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/camera/camera-viewfinder-core/build.gradle b/camera/camera-viewfinder-core/build.gradle
index f2a2a9e..840c124 100644
--- a/camera/camera-viewfinder-core/build.gradle
+++ b/camera/camera-viewfinder-core/build.gradle
@@ -33,9 +33,9 @@
}
androidx {
- name = "androidx.camera:camera-viewfinder-core"
+ name = "Camera ViewFinder Core"
type = LibraryType.PUBLISHED_LIBRARY
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2023"
- description = "core dependencies for viewfinder"
+ description = "Core dependencies for ViewFinder"
}
diff --git a/camera/camera-viewfinder/api/current.txt b/camera/camera-viewfinder/api/current.txt
index 5b16a1a..a7333d7 100644
--- a/camera/camera-viewfinder/api/current.txt
+++ b/camera/camera-viewfinder/api/current.txt
@@ -42,8 +42,8 @@
public static final class ViewfinderSurfaceRequest.Builder {
ctor public ViewfinderSurfaceRequest.Builder(android.util.Size);
- ctor public ViewfinderSurfaceRequest.Builder(androidx.camera.viewfinder.ViewfinderSurfaceRequest.Builder);
ctor public ViewfinderSurfaceRequest.Builder(androidx.camera.viewfinder.ViewfinderSurfaceRequest);
+ ctor public ViewfinderSurfaceRequest.Builder(androidx.camera.viewfinder.ViewfinderSurfaceRequest.Builder);
method public androidx.camera.viewfinder.ViewfinderSurfaceRequest build();
method public androidx.camera.viewfinder.ViewfinderSurfaceRequest.Builder setImplementationMode(androidx.camera.viewfinder.CameraViewfinder.ImplementationMode?);
method public androidx.camera.viewfinder.ViewfinderSurfaceRequest.Builder setLensFacing(int);
diff --git a/camera/camera-viewfinder/api/public_plus_experimental_current.txt b/camera/camera-viewfinder/api/public_plus_experimental_current.txt
deleted file mode 100644
index 5b16a1a..0000000
--- a/camera/camera-viewfinder/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-// Signature format: 4.0
-package androidx.camera.viewfinder {
-
- @RequiresApi(21) public final class CameraViewfinder extends android.widget.FrameLayout {
- ctor @UiThread public CameraViewfinder(android.content.Context);
- ctor @UiThread public CameraViewfinder(android.content.Context, android.util.AttributeSet?);
- ctor @UiThread public CameraViewfinder(android.content.Context, android.util.AttributeSet?, int);
- ctor @UiThread public CameraViewfinder(android.content.Context, android.util.AttributeSet?, int, int);
- method @UiThread public android.graphics.Bitmap? getBitmap();
- method @UiThread public androidx.camera.viewfinder.CameraViewfinder.ImplementationMode getImplementationMode();
- method @UiThread public androidx.camera.viewfinder.CameraViewfinder.ScaleType getScaleType();
- method @UiThread public com.google.common.util.concurrent.ListenableFuture<android.view.Surface!> requestSurfaceAsync(androidx.camera.viewfinder.ViewfinderSurfaceRequest);
- method @UiThread public void setScaleType(androidx.camera.viewfinder.CameraViewfinder.ScaleType);
- }
-
- @RequiresApi(21) public enum CameraViewfinder.ImplementationMode {
- enum_constant public static final androidx.camera.viewfinder.CameraViewfinder.ImplementationMode COMPATIBLE;
- enum_constant public static final androidx.camera.viewfinder.CameraViewfinder.ImplementationMode PERFORMANCE;
- }
-
- @RequiresApi(21) public enum CameraViewfinder.ScaleType {
- enum_constant public static final androidx.camera.viewfinder.CameraViewfinder.ScaleType FILL_CENTER;
- enum_constant public static final androidx.camera.viewfinder.CameraViewfinder.ScaleType FILL_END;
- enum_constant public static final androidx.camera.viewfinder.CameraViewfinder.ScaleType FILL_START;
- enum_constant public static final androidx.camera.viewfinder.CameraViewfinder.ScaleType FIT_CENTER;
- enum_constant public static final androidx.camera.viewfinder.CameraViewfinder.ScaleType FIT_END;
- enum_constant public static final androidx.camera.viewfinder.CameraViewfinder.ScaleType FIT_START;
- }
-
- @RequiresApi(21) public final class CameraViewfinderExt {
- method public suspend Object? requestSurface(androidx.camera.viewfinder.CameraViewfinder, androidx.camera.viewfinder.ViewfinderSurfaceRequest viewfinderSurfaceRequest, kotlin.coroutines.Continuation<? super android.view.Surface>);
- field public static final androidx.camera.viewfinder.CameraViewfinderExt INSTANCE;
- }
-
- @RequiresApi(21) public class ViewfinderSurfaceRequest {
- method public androidx.camera.viewfinder.CameraViewfinder.ImplementationMode? getImplementationMode();
- method public int getLensFacing();
- method public android.util.Size getResolution();
- method public int getSensorOrientation();
- method public void markSurfaceSafeToRelease();
- }
-
- public static final class ViewfinderSurfaceRequest.Builder {
- ctor public ViewfinderSurfaceRequest.Builder(android.util.Size);
- ctor public ViewfinderSurfaceRequest.Builder(androidx.camera.viewfinder.ViewfinderSurfaceRequest.Builder);
- ctor public ViewfinderSurfaceRequest.Builder(androidx.camera.viewfinder.ViewfinderSurfaceRequest);
- method public androidx.camera.viewfinder.ViewfinderSurfaceRequest build();
- method public androidx.camera.viewfinder.ViewfinderSurfaceRequest.Builder setImplementationMode(androidx.camera.viewfinder.CameraViewfinder.ImplementationMode?);
- method public androidx.camera.viewfinder.ViewfinderSurfaceRequest.Builder setLensFacing(int);
- method public androidx.camera.viewfinder.ViewfinderSurfaceRequest.Builder setSensorOrientation(int);
- }
-
- public final class ViewfinderSurfaceRequestUtil {
- method @RequiresApi(21) public static androidx.camera.viewfinder.ViewfinderSurfaceRequest.Builder populateFromCharacteristics(androidx.camera.viewfinder.ViewfinderSurfaceRequest.Builder, android.hardware.camera2.CameraCharacteristics cameraCharacteristics);
- }
-
-}
-
diff --git a/camera/camera-viewfinder/api/restricted_current.txt b/camera/camera-viewfinder/api/restricted_current.txt
index 5b16a1a..a7333d7 100644
--- a/camera/camera-viewfinder/api/restricted_current.txt
+++ b/camera/camera-viewfinder/api/restricted_current.txt
@@ -42,8 +42,8 @@
public static final class ViewfinderSurfaceRequest.Builder {
ctor public ViewfinderSurfaceRequest.Builder(android.util.Size);
- ctor public ViewfinderSurfaceRequest.Builder(androidx.camera.viewfinder.ViewfinderSurfaceRequest.Builder);
ctor public ViewfinderSurfaceRequest.Builder(androidx.camera.viewfinder.ViewfinderSurfaceRequest);
+ ctor public ViewfinderSurfaceRequest.Builder(androidx.camera.viewfinder.ViewfinderSurfaceRequest.Builder);
method public androidx.camera.viewfinder.ViewfinderSurfaceRequest build();
method public androidx.camera.viewfinder.ViewfinderSurfaceRequest.Builder setImplementationMode(androidx.camera.viewfinder.CameraViewfinder.ImplementationMode?);
method public androidx.camera.viewfinder.ViewfinderSurfaceRequest.Builder setLensFacing(int);
diff --git a/camera/camera-viewfinder/build.gradle b/camera/camera-viewfinder/build.gradle
index 39c752c..e77d559 100644
--- a/camera/camera-viewfinder/build.gradle
+++ b/camera/camera-viewfinder/build.gradle
@@ -80,7 +80,7 @@
}
androidx {
- name = "androidx.camera:camera-viewfinder"
+ name = "Camera ViewFinder"
publish = Publish.SNAPSHOT_AND_RELEASE
runApiTasks = new RunApiTasks.Yes("Need to track API surface before moving to publish")
inceptionYear = "2022"
diff --git a/camera/camera-viewfinder/src/test/java/androidx/camera/viewfinder/ViewfinderTransformationTest.kt b/camera/camera-viewfinder/src/test/java/androidx/camera/viewfinder/ViewfinderTransformationTest.kt
index c8e7ac1..f24e5cd 100644
--- a/camera/camera-viewfinder/src/test/java/androidx/camera/viewfinder/ViewfinderTransformationTest.kt
+++ b/camera/camera-viewfinder/src/test/java/androidx/camera/viewfinder/ViewfinderTransformationTest.kt
@@ -23,9 +23,9 @@
import android.view.Surface
import android.view.View
import androidx.camera.viewfinder.CameraViewfinder.ScaleType
-import androidx.camera.viewfinder.internal.utils.TransformUtils.sizeToVertices
import androidx.camera.viewfinder.internal.transform.Rotation.RotationValue
import androidx.camera.viewfinder.internal.transform.TransformationInfo
+import androidx.camera.viewfinder.internal.utils.TransformUtils.sizeToVertices
import androidx.test.core.app.ApplicationProvider
import com.google.common.truth.Truth.assertThat
import kotlin.math.roundToInt
diff --git a/camera/integration-tests/avsynctestapp/src/androidTest/java/androidx/camera/integration/avsync/model/AudioGeneratorDeviceTest.kt b/camera/integration-tests/avsynctestapp/src/androidTest/java/androidx/camera/integration/avsync/model/AudioGeneratorDeviceTest.kt
index e42853e..75e45364 100644
--- a/camera/integration-tests/avsynctestapp/src/androidTest/java/androidx/camera/integration/avsync/model/AudioGeneratorDeviceTest.kt
+++ b/camera/integration-tests/avsynctestapp/src/androidTest/java/androidx/camera/integration/avsync/model/AudioGeneratorDeviceTest.kt
@@ -19,8 +19,8 @@
import android.content.Context
import android.media.AudioTrack
import androidx.test.core.app.ApplicationProvider
-import androidx.test.filters.LargeTest
import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking
diff --git a/camera/integration-tests/avsynctestapp/src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt b/camera/integration-tests/avsynctestapp/src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt
index ab9edeb..76a8be0 100644
--- a/camera/integration-tests/avsynctestapp/src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt
+++ b/camera/integration-tests/avsynctestapp/src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt
@@ -25,10 +25,10 @@
import androidx.camera.core.Logger
import androidx.core.util.Preconditions.checkArgument
import androidx.core.util.Preconditions.checkArgumentNonnegative
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.withContext
import kotlin.math.pow
import kotlin.math.sin
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.withContext
private const val TAG = "AudioGenerator"
private const val DEFAULT_SAMPLE_RATE: Int = 44100
diff --git a/camera/integration-tests/camerapipetestapp/src/test/java/androidx/camera/integration/camera2/pipe/GraphDataHolderValueImplTest.kt b/camera/integration-tests/camerapipetestapp/src/test/java/androidx/camera/integration/camera2/pipe/GraphDataHolderValueImplTest.kt
index 91278a7..9b2b13e 100644
--- a/camera/integration-tests/camerapipetestapp/src/test/java/androidx/camera/integration/camera2/pipe/GraphDataHolderValueImplTest.kt
+++ b/camera/integration-tests/camerapipetestapp/src/test/java/androidx/camera/integration/camera2/pipe/GraphDataHolderValueImplTest.kt
@@ -18,8 +18,8 @@
import androidx.camera.integration.camera2.pipe.dataholders.GraphDataHolderValueImpl
import androidx.camera.integration.camera2.pipe.dataholders.GraphDataSortedRingBuffer
-import org.junit.Test
import com.google.common.truth.Truth.assertThat
+import org.junit.Test
class GraphDataHolderValueImplTest {
@Test(expected = IllegalArgumentException::class)
diff --git a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/Camera2InteropIntegrationTest.kt b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/Camera2InteropIntegrationTest.kt
index 0a60ca7..7a88d02 100644
--- a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/Camera2InteropIntegrationTest.kt
+++ b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/Camera2InteropIntegrationTest.kt
@@ -156,9 +156,10 @@
when (state) {
// Filter out this state from the downstream flow
is SessionState.Unknown -> true
- is SessionState.Configured -> {
+ is SessionState.Configured -> true
+ is SessionState.Ready -> {
withContext(Dispatchers.Main) { processCameraProvider!!.unbindAll() }
- true // Filter out this state from the downstream flow
+ false
}
else -> false // Forward to the downstream flow
@@ -368,19 +369,19 @@
MutableStateFlow<SessionState>(SessionState.Unknown).apply {
val stateCallback = object : CameraCaptureSession.StateCallback() {
override fun onReady(session: CameraCaptureSession) {
- tryEmit(SessionState.Ready)
+ tryEmit(SessionState.Ready)
}
override fun onConfigured(session: CameraCaptureSession) {
- tryEmit(SessionState.Configured)
+ tryEmit(SessionState.Configured)
}
override fun onConfigureFailed(session: CameraCaptureSession) {
- tryEmit(SessionState.ConfigureFailed)
+ tryEmit(SessionState.ConfigureFailed)
}
override fun onClosed(session: CameraCaptureSession) {
- tryEmit(SessionState.Closed)
+ tryEmit(SessionState.Closed)
}
}
CameraPipeUtil.setSessionStateCallback(
diff --git a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/CameraXInitTest.kt b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/CameraXInitTest.kt
index d8b0f40..082a3dd 100644
--- a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/CameraXInitTest.kt
+++ b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/CameraXInitTest.kt
@@ -29,6 +29,7 @@
import androidx.test.filters.LargeTest
import androidx.test.rule.GrantPermissionRule
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.TimeUnit
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withTimeout
import org.junit.After
@@ -38,7 +39,6 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import java.util.concurrent.TimeUnit
@LargeTest
@RunWith(Parameterized::class)
diff --git a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/ImageCaptureTest.kt b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/ImageCaptureTest.kt
index 1208c6a..e65b41d 100644
--- a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/ImageCaptureTest.kt
+++ b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/ImageCaptureTest.kt
@@ -1579,7 +1579,6 @@
@Test
fun unbindVideoCaptureWithoutStartingRecorder_imageCapturingShouldSuccess() = runBlocking {
- assumeTrue("b/280379397", implName != Camera2Config::class.simpleName)
assumeTrue(
"b/280560222: takePicture request is discarded if UseCaseCamera is recreated",
implName != CameraPipeConfig::class.simpleName
diff --git a/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/CameraXActivity.java b/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/CameraXActivity.java
index ac14123..1721b14 100644
--- a/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/CameraXActivity.java
+++ b/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/CameraXActivity.java
@@ -262,6 +262,7 @@
View mViewFinder;
private List<UseCase> mUseCases;
ExecutorService mImageCaptureExecutorService;
+ private Recorder mRecorder;
Camera mCamera;
private CameraSelector mLaunchingCameraIdSelector = null;
@@ -571,6 +572,9 @@
resetVideoSavedIdlingResource();
+ if (isPersistentRecordingEnabled()) {
+ pendingRecording.asPersistentRecording();
+ }
mActiveRecording = pendingRecording
.withAudioEnabled()
.start(ContextCompat.getMainExecutor(CameraXActivity.this),
@@ -1197,7 +1201,8 @@
findViewById(R.id.Video),
findViewById(R.id.video_pause),
findViewById(R.id.video_stats),
- findViewById(R.id.video_quality)
+ findViewById(R.id.video_quality),
+ findViewById(R.id.video_persistent)
);
setUpButtonEvents();
@@ -1384,9 +1389,8 @@
mCamera.getCameraInfo().getZoomState().removeObservers(this);
}
- // Stop video recording if exists.
- if (mRecordUi.getState() == RecordUi.State.RECORDING
- || mRecordUi.getState() == RecordUi.State.PAUSED) {
+ // Stop in-progress video recording if it's not a persistent recording.
+ if (hasRunningRecording() && !isPersistentRecordingEnabled()) {
mActiveRecording.stop();
mActiveRecording = null;
mRecordUi.setState(RecordUi.State.STOPPING);
@@ -1439,6 +1443,15 @@
updateButtonsUi();
}
+ private boolean hasRunningRecording() {
+ RecordUi.State recordState = mRecordUi.getState();
+ return recordState == RecordUi.State.RECORDING || recordState == RecordUi.State.PAUSED;
+ }
+
+ private boolean isPersistentRecordingEnabled() {
+ return mRecordUi.getButtonPersistent().isChecked();
+ }
+
/**
* Checks whether currently checked use cases combination can be supported or not.
*/
@@ -1519,11 +1532,17 @@
}
if (mVideoToggle.isChecked()) {
- Recorder.Builder builder = new Recorder.Builder();
- if (mVideoQuality != QUALITY_AUTO) {
- builder.setQualitySelector(QualitySelector.from(mVideoQuality));
+ // Recreate the Recorder except there's a running persistent recording, existing
+ // Recorder. We may later consider reuse the Recorder everytime if the quality didn't
+ // change.
+ if (mRecorder == null || !(hasRunningRecording() && isPersistentRecordingEnabled())) {
+ Recorder.Builder builder = new Recorder.Builder();
+ if (mVideoQuality != QUALITY_AUTO) {
+ builder.setQualitySelector(QualitySelector.from(mVideoQuality));
+ }
+ mRecorder = builder.build();
}
- VideoCapture<Recorder> videoCapture = new VideoCapture.Builder<>(builder.build())
+ VideoCapture<Recorder> videoCapture = new VideoCapture.Builder<>(mRecorder)
.setMirrorMode(MIRROR_MODE_ON_FRONT_ONLY)
.build();
useCases.add(videoCapture);
@@ -1851,15 +1870,18 @@
private final Button mButtonPause;
private final TextView mTextStats;
private final Button mButtonQuality;
+ private final ToggleButton mButtonPersistent;
private boolean mEnabled = false;
private State mState = State.IDLE;
RecordUi(@NonNull Button buttonRecord, @NonNull Button buttonPause,
- @NonNull TextView textStats, @NonNull Button buttonQuality) {
+ @NonNull TextView textStats, @NonNull Button buttonQuality,
+ @NonNull ToggleButton buttonPersistent) {
mButtonRecord = buttonRecord;
mButtonPause = buttonPause;
mTextStats = textStats;
mButtonQuality = buttonQuality;
+ mButtonPersistent = buttonPersistent;
}
void setEnabled(boolean enabled) {
@@ -1868,6 +1890,7 @@
mTextStats.setText("");
mTextStats.setVisibility(View.VISIBLE);
mButtonQuality.setVisibility(View.VISIBLE);
+ mButtonPersistent.setVisibility(View.VISIBLE);
updateUi();
} else {
mButtonRecord.setText("Record");
@@ -1875,6 +1898,7 @@
mButtonPause.setVisibility(View.INVISIBLE);
mButtonQuality.setVisibility(View.INVISIBLE);
mTextStats.setVisibility(View.GONE);
+ mButtonPersistent.setVisibility(View.INVISIBLE);
}
}
@@ -1892,6 +1916,7 @@
mButtonRecord.setVisibility(View.GONE);
mButtonPause.setVisibility(View.GONE);
mTextStats.setVisibility(View.GONE);
+ mButtonPersistent.setVisibility(View.GONE);
}
private void updateUi() {
@@ -1904,24 +1929,32 @@
mButtonRecord.setEnabled(true);
mButtonPause.setText("Pause");
mButtonPause.setVisibility(View.INVISIBLE);
+ mButtonPersistent.setClickable(true);
+ mButtonQuality.setClickable(true);
break;
case RECORDING:
mButtonRecord.setText("Stop");
mButtonRecord.setEnabled(true);
mButtonPause.setText("Pause");
mButtonPause.setVisibility(View.VISIBLE);
+ mButtonPersistent.setClickable(false);
+ mButtonQuality.setClickable(false);
break;
case STOPPING:
mButtonRecord.setText("Saving");
mButtonRecord.setEnabled(false);
mButtonPause.setText("Pause");
mButtonPause.setVisibility(View.INVISIBLE);
+ mButtonPersistent.setClickable(false);
+ mButtonQuality.setClickable(true);
break;
case PAUSED:
mButtonRecord.setText("Stop");
mButtonRecord.setEnabled(true);
mButtonPause.setText("Resume");
mButtonPause.setVisibility(View.VISIBLE);
+ mButtonPersistent.setClickable(false);
+ mButtonQuality.setClickable(true);
break;
}
}
@@ -1942,6 +1975,10 @@
Button getButtonQuality() {
return mButtonQuality;
}
+
+ ToggleButton getButtonPersistent() {
+ return mButtonPersistent;
+ }
}
Preview getPreview() {
diff --git a/camera/integration-tests/coretestapp/src/main/res/drawable/round_toggle_button.xml b/camera/integration-tests/coretestapp/src/main/res/drawable/round_toggle_button.xml
new file mode 100644
index 0000000..e25beb0
--- /dev/null
+++ b/camera/integration-tests/coretestapp/src/main/res/drawable/round_toggle_button.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_checked="true">
+ <shape android:shape="oval">
+ <solid android:color="#41ABFF"/>
+ </shape>
+ </item>
+ <item android:state_checked="false">
+ <shape android:shape="oval">
+ <solid android:color="#AA2255FF"/>
+ </shape>
+ </item>
+</selector>
\ No newline at end of file
diff --git a/camera/integration-tests/coretestapp/src/main/res/layout/activity_camera_xmain.xml b/camera/integration-tests/coretestapp/src/main/res/layout/activity_camera_xmain.xml
index d9aba13..928d8b2 100644
--- a/camera/integration-tests/coretestapp/src/main/res/layout/activity_camera_xmain.xml
+++ b/camera/integration-tests/coretestapp/src/main/res/layout/activity_camera_xmain.xml
@@ -129,6 +129,23 @@
app:layout_constraintVertical_bias="1.0" />
<ToggleButton
+ android:id="@+id/video_persistent"
+ android:layout_width="46dp"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="1dp"
+ android:layout_marginRight="5dp"
+ android:scaleType="fitXY"
+ android:textColor="#EEEEEE"
+ android:textSize="14dp"
+ android:textOn="@string/toggle_video_persistent_on"
+ android:textOff="@string/toggle_video_persistent_off"
+ android:visibility="invisible"
+ android:checked="false"
+ android:background="@drawable/round_toggle_button"
+ app:layout_constraintTop_toBottomOf="@id/video_quality"
+ app:layout_constraintRight_toRightOf="parent" />
+
+ <ToggleButton
android:id="@+id/VideoToggle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
diff --git a/camera/integration-tests/coretestapp/src/main/res/values/donottranslate-strings.xml b/camera/integration-tests/coretestapp/src/main/res/values/donottranslate-strings.xml
index d89e082..8b2777e 100644
--- a/camera/integration-tests/coretestapp/src/main/res/values/donottranslate-strings.xml
+++ b/camera/integration-tests/coretestapp/src/main/res/values/donottranslate-strings.xml
@@ -33,4 +33,6 @@
<string name="toggle_dec_ev">-EV</string>
<string name="toggle_zoom_in_2x">2X</string>
<string name="toggle_zoom_reset">1X</string>
+ <string name="toggle_video_persistent_on">Pers. On</string>
+ <string name="toggle_video_persistent_off">Pers. Off</string>
</resources>
\ No newline at end of file
diff --git a/camera/integration-tests/diagnosetestapp/src/main/java/androidx/camera/integration/diagnose/ImageCaptureTask.kt b/camera/integration-tests/diagnosetestapp/src/main/java/androidx/camera/integration/diagnose/ImageCaptureTask.kt
index c7f3812..b032578 100644
--- a/camera/integration-tests/diagnosetestapp/src/main/java/androidx/camera/integration/diagnose/ImageCaptureTask.kt
+++ b/camera/integration-tests/diagnosetestapp/src/main/java/androidx/camera/integration/diagnose/ImageCaptureTask.kt
@@ -25,12 +25,12 @@
import androidx.camera.view.CameraController.IMAGE_CAPTURE
import androidx.camera.view.LifecycleCameraController
import androidx.core.content.ContextCompat
-import kotlinx.coroutines.withContext
import java.io.File
import kotlin.coroutines.resume
import kotlin.coroutines.resumeWithException
import kotlinx.coroutines.asCoroutineDispatcher
import kotlinx.coroutines.suspendCancellableCoroutine
+import kotlinx.coroutines.withContext
/**
* Diagnosis task that utilizes ImageCapture use case
diff --git a/camera/integration-tests/diagnosetestapp/src/main/java/androidx/camera/integration/diagnose/MainActivity.kt b/camera/integration-tests/diagnosetestapp/src/main/java/androidx/camera/integration/diagnose/MainActivity.kt
index 6eec96a..4327c6d 100644
--- a/camera/integration-tests/diagnosetestapp/src/main/java/androidx/camera/integration/diagnose/MainActivity.kt
+++ b/camera/integration-tests/diagnosetestapp/src/main/java/androidx/camera/integration/diagnose/MainActivity.kt
@@ -32,10 +32,12 @@
import androidx.appcompat.app.AppCompatActivity
import androidx.camera.core.ImageCapture
import androidx.camera.core.ImageCaptureException
+import androidx.camera.mlkit.vision.MlKitAnalyzer
import androidx.camera.video.MediaStoreOutputOptions
import androidx.camera.video.Recording
import androidx.camera.video.VideoRecordEvent
import androidx.camera.view.CameraController
+import androidx.camera.view.CameraController.IMAGE_ANALYSIS
import androidx.camera.view.CameraController.IMAGE_CAPTURE
import androidx.camera.view.CameraController.VIDEO_CAPTURE
import androidx.camera.view.LifecycleCameraController
@@ -44,18 +46,16 @@
import androidx.camera.view.video.ExperimentalVideo
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
-import java.text.SimpleDateFormat
-import java.util.Locale
-import java.util.concurrent.ExecutorService
-import androidx.camera.mlkit.vision.MlKitAnalyzer
-import androidx.camera.view.CameraController.IMAGE_ANALYSIS
import androidx.core.util.Preconditions
import androidx.lifecycle.lifecycleScope
import com.google.android.material.tabs.TabLayout
import com.google.mlkit.vision.barcode.BarcodeScanner
import com.google.mlkit.vision.barcode.BarcodeScanning
import java.io.IOException
+import java.text.SimpleDateFormat
+import java.util.Locale
import java.util.concurrent.Executor
+import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors
import kotlinx.coroutines.ExecutorCoroutineDispatcher
import kotlinx.coroutines.asCoroutineDispatcher
diff --git a/camera/integration-tests/diagnosetestapp/src/test/java/androidx/camera/integration/diagnose/DataStoreTest.kt b/camera/integration-tests/diagnosetestapp/src/test/java/androidx/camera/integration/diagnose/DataStoreTest.kt
index 870902d..b2ca7af 100644
--- a/camera/integration-tests/diagnosetestapp/src/test/java/androidx/camera/integration/diagnose/DataStoreTest.kt
+++ b/camera/integration-tests/diagnosetestapp/src/test/java/androidx/camera/integration/diagnose/DataStoreTest.kt
@@ -22,6 +22,7 @@
import android.graphics.Color
import android.os.Build
import androidx.test.core.app.ApplicationProvider
+import com.google.common.truth.Truth.assertThat
import java.io.BufferedReader
import java.io.File
import java.io.InputStreamReader
@@ -30,7 +31,6 @@
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config
-import com.google.common.truth.Truth.assertThat
@RunWith(RobolectricTestRunner::class)
@Config(minSdk = Build.VERSION_CODES.M, maxSdk = 32)
diff --git a/camera/integration-tests/diagnosetestapp/src/test/java/androidx/camera/integration/diagnose/DiagnosisTest.kt b/camera/integration-tests/diagnosetestapp/src/test/java/androidx/camera/integration/diagnose/DiagnosisTest.kt
index 81d17de..e6af322 100644
--- a/camera/integration-tests/diagnosetestapp/src/test/java/androidx/camera/integration/diagnose/DiagnosisTest.kt
+++ b/camera/integration-tests/diagnosetestapp/src/test/java/androidx/camera/integration/diagnose/DiagnosisTest.kt
@@ -23,6 +23,7 @@
import androidx.camera.testing.fakes.FakeLifecycleOwner
import androidx.camera.view.LifecycleCameraController
import androidx.test.core.app.ApplicationProvider
+import com.google.common.truth.Truth.assertThat
import java.io.BufferedReader
import java.io.File
import java.io.InputStreamReader
@@ -31,7 +32,6 @@
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import com.google.common.truth.Truth.assertThat
import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config
diff --git a/camera/integration-tests/diagnosetestapp/src/test/java/androidx/camera/integration/diagnose/FakeTextAndImageSavingTask.kt b/camera/integration-tests/diagnosetestapp/src/test/java/androidx/camera/integration/diagnose/FakeTextAndImageSavingTask.kt
index aec614a..f5837dc 100644
--- a/camera/integration-tests/diagnosetestapp/src/test/java/androidx/camera/integration/diagnose/FakeTextAndImageSavingTask.kt
+++ b/camera/integration-tests/diagnosetestapp/src/test/java/androidx/camera/integration/diagnose/FakeTextAndImageSavingTask.kt
@@ -19,7 +19,6 @@
import android.content.Context
import android.graphics.Bitmap
import android.graphics.Color.BLUE
-
import androidx.camera.view.LifecycleCameraController
class FakeTextAndImageSavingTask : DiagnosisTask("FakeTextAndImageSavingTask") {
diff --git a/camera/integration-tests/timingtestapp/src/androidTest/java/androidx/camera/integration/antelope/AntelopeInstrumentedTests.kt b/camera/integration-tests/timingtestapp/src/androidTest/java/androidx/camera/integration/antelope/AntelopeInstrumentedTests.kt
index 72e1b67..0b87c9a 100644
--- a/camera/integration-tests/timingtestapp/src/androidTest/java/androidx/camera/integration/antelope/AntelopeInstrumentedTests.kt
+++ b/camera/integration-tests/timingtestapp/src/androidTest/java/androidx/camera/integration/antelope/AntelopeInstrumentedTests.kt
@@ -23,35 +23,35 @@
import android.hardware.camera2.CameraCharacteristics
import android.hardware.camera2.CameraManager
import android.hardware.camera2.CameraMetadata
-import android.preference.PreferenceManager
-import androidx.test.espresso.Espresso.onView
-import androidx.test.espresso.matcher.ViewMatchers.withId
-import androidx.test.espresso.IdlingRegistry
-import org.junit.Rule
-import androidx.test.rule.ActivityTestRule
-import androidx.test.rule.GrantPermissionRule
-import org.junit.Assert
-import org.junit.Test
-import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
-import org.junit.Before
import android.os.Environment
+import android.preference.PreferenceManager
import androidx.appcompat.app.AppCompatActivity
-import androidx.test.espresso.IdlingPolicies
-import androidx.test.espresso.assertion.ViewAssertions.matches
-import java.io.File
-import androidx.test.espresso.matcher.ViewMatchers.withSubstring
-import androidx.test.filters.MediumTest
-import androidx.test.filters.LargeTest
-import org.junit.Assume.assumeTrue
-import org.junit.FixMethodOrder
-import org.junit.runners.MethodSorters
-import java.util.concurrent.TimeUnit
import androidx.camera.integration.antelope.MainActivity.Companion.antelopeIdlingResource
+import androidx.test.espresso.Espresso.onView
+import androidx.test.espresso.IdlingPolicies
+import androidx.test.espresso.IdlingRegistry
+import androidx.test.espresso.assertion.ViewAssertions.matches
+import androidx.test.espresso.matcher.ViewMatchers.withId
+import androidx.test.espresso.matcher.ViewMatchers.withSubstring
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.FlakyTest
-import org.junit.After
-import org.junit.runner.RunWith
+import androidx.test.filters.LargeTest
+import androidx.test.filters.MediumTest
+import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
+import androidx.test.rule.ActivityTestRule
+import androidx.test.rule.GrantPermissionRule
import com.google.common.truth.Truth.assertThat
+import java.io.File
+import java.util.concurrent.TimeUnit
+import org.junit.After
+import org.junit.Assert
+import org.junit.Assume.assumeTrue
+import org.junit.Before
+import org.junit.FixMethodOrder
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.MethodSorters
const val PREVIEW_BUFFER = "1500"
diff --git a/camera/integration-tests/timingtestapp/src/main/java/androidx/camera/integration/antelope/CustomLifecycle.kt b/camera/integration-tests/timingtestapp/src/main/java/androidx/camera/integration/antelope/CustomLifecycle.kt
index 10efb75..a68e4f2 100644
--- a/camera/integration-tests/timingtestapp/src/main/java/androidx/camera/integration/antelope/CustomLifecycle.kt
+++ b/camera/integration-tests/timingtestapp/src/main/java/androidx/camera/integration/antelope/CustomLifecycle.kt
@@ -18,10 +18,10 @@
import android.os.Handler
import android.os.Looper
+import androidx.camera.integration.antelope.MainActivity.Companion.logd
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.LifecycleRegistry
-import androidx.camera.integration.antelope.MainActivity.Companion.logd
/**
* Camera X normally handles lifecycle events itself. Optimizations in the API make it difficult
diff --git a/camera/integration-tests/timingtestapp/src/main/java/androidx/camera/integration/antelope/TestUtils.kt b/camera/integration-tests/timingtestapp/src/main/java/androidx/camera/integration/antelope/TestUtils.kt
index bc16441..e327e0e 100644
--- a/camera/integration-tests/timingtestapp/src/main/java/androidx/camera/integration/antelope/TestUtils.kt
+++ b/camera/integration-tests/timingtestapp/src/main/java/androidx/camera/integration/antelope/TestUtils.kt
@@ -17,11 +17,11 @@
package androidx.camera.integration.antelope
import androidx.camera.integration.antelope.MainActivity.Companion.antelopeIdlingResource
-import com.google.common.math.Stats
import androidx.camera.integration.antelope.MainActivity.Companion.cameraParams
import androidx.camera.integration.antelope.MainActivity.Companion.isSingleTestRunning
import androidx.camera.integration.antelope.MainActivity.Companion.logd
import androidx.camera.integration.antelope.MainActivity.Companion.testsRemaining
+import com.google.common.math.Stats
import java.text.SimpleDateFormat
import java.util.Calendar
import kotlin.collections.ArrayList
diff --git a/car/app/app-automotive/api/current.txt b/car/app/app-automotive/api/current.txt
index 57edaf4..71b454a 100644
--- a/car/app/app-automotive/api/current.txt
+++ b/car/app/app-automotive/api/current.txt
@@ -5,12 +5,17 @@
ctor public BaseCarAppActivity();
method public void bindToViewModel(androidx.car.app.SessionInfo);
method public android.content.ComponentName? getServiceComponentName();
+ method @androidx.car.app.annotations.ExperimentalCarApi public android.content.ComponentName? retrieveServiceComponentName();
}
public final class CarAppActivity extends androidx.car.app.activity.BaseCarAppActivity implements androidx.lifecycle.LifecycleOwner {
ctor public CarAppActivity();
}
+ @androidx.car.app.annotations.ExperimentalCarApi public final class LauncherActivity extends androidx.fragment.app.FragmentActivity implements androidx.lifecycle.LifecycleOwner {
+ ctor public LauncherActivity();
+ }
+
}
package androidx.car.app.activity.renderer.surface {
@@ -39,3 +44,58 @@
}
+package androidx.car.app.hardware {
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class AutomotiveCarHardwareManager implements androidx.car.app.hardware.CarHardwareManager {
+ ctor public AutomotiveCarHardwareManager(android.content.Context);
+ }
+
+}
+
+package androidx.car.app.hardware.common {
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class CarZoneAreaIdConstants {
+ field public static final int AREA_ID_GLOBAL = 0; // 0x0
+ }
+
+ public static final class CarZoneAreaIdConstants.VehicleAreaSeat {
+ field public static final int COL_ALL = 1911; // 0x777
+ field public static final int COL_CENTER = 546; // 0x222
+ field public static final int COL_LEFT = 273; // 0x111
+ field public static final int COL_RIGHT = 1092; // 0x444
+ field public static final int ROW_1_CENTER = 2; // 0x2
+ field public static final int ROW_1_LEFT = 1; // 0x1
+ field public static final int ROW_1_RIGHT = 4; // 0x4
+ field public static final int ROW_2_CENTER = 32; // 0x20
+ field public static final int ROW_2_LEFT = 16; // 0x10
+ field public static final int ROW_2_RIGHT = 64; // 0x40
+ field public static final int ROW_3_CENTER = 512; // 0x200
+ field public static final int ROW_3_LEFT = 256; // 0x100
+ field public static final int ROW_3_RIGHT = 1024; // 0x400
+ field public static final int ROW_ALL = 1911; // 0x777
+ field public static final int ROW_FIRST = 7; // 0x7
+ field public static final int ROW_SECOND = 112; // 0x70
+ field public static final int ROW_THIRD = 1792; // 0x700
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public interface CarZoneAreaIdConverter {
+ method public com.google.common.collect.ImmutableSet<androidx.car.app.hardware.common.CarZone!> convertAreaIdToCarZones(int);
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class CarZoneUtils {
+ method public static com.google.common.collect.ImmutableSet<androidx.car.app.hardware.common.CarZone!> convertAreaIdToCarZones(int, int);
+ method public static androidx.car.app.hardware.common.CarZoneAreaIdConverter getZoneAreaIdConverter(int);
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public class GlobalCarZoneAreaIdConverter implements androidx.car.app.hardware.common.CarZoneAreaIdConverter {
+ ctor public GlobalCarZoneAreaIdConverter();
+ method public com.google.common.collect.ImmutableSet<androidx.car.app.hardware.common.CarZone!> convertAreaIdToCarZones(int);
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public class SeatCarZoneAreaIdConverter implements androidx.car.app.hardware.common.CarZoneAreaIdConverter {
+ ctor public SeatCarZoneAreaIdConverter();
+ method public com.google.common.collect.ImmutableSet<androidx.car.app.hardware.common.CarZone!> convertAreaIdToCarZones(int);
+ }
+
+}
+
diff --git a/car/app/app-automotive/api/public_plus_experimental_current.txt b/car/app/app-automotive/api/public_plus_experimental_current.txt
deleted file mode 100644
index 71b454a..0000000
--- a/car/app/app-automotive/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,101 +0,0 @@
-// Signature format: 4.0
-package androidx.car.app.activity {
-
- public abstract class BaseCarAppActivity extends androidx.fragment.app.FragmentActivity implements androidx.lifecycle.LifecycleOwner {
- ctor public BaseCarAppActivity();
- method public void bindToViewModel(androidx.car.app.SessionInfo);
- method public android.content.ComponentName? getServiceComponentName();
- method @androidx.car.app.annotations.ExperimentalCarApi public android.content.ComponentName? retrieveServiceComponentName();
- }
-
- public final class CarAppActivity extends androidx.car.app.activity.BaseCarAppActivity implements androidx.lifecycle.LifecycleOwner {
- ctor public CarAppActivity();
- }
-
- @androidx.car.app.annotations.ExperimentalCarApi public final class LauncherActivity extends androidx.fragment.app.FragmentActivity implements androidx.lifecycle.LifecycleOwner {
- ctor public LauncherActivity();
- }
-
-}
-
-package androidx.car.app.activity.renderer.surface {
-
- public final class LegacySurfacePackage {
- ctor public LegacySurfacePackage(androidx.car.app.activity.renderer.surface.SurfaceControlCallback);
- }
-
- public interface SurfaceControlCallback {
- method public default void onError(String, Throwable);
- method public void onKeyEvent(android.view.KeyEvent);
- method public void onTouchEvent(android.view.MotionEvent);
- method public void onWindowFocusChanged(boolean, boolean);
- method public void setSurfaceWrapper(androidx.car.app.activity.renderer.surface.SurfaceWrapper);
- }
-
- public final class SurfaceWrapper {
- ctor public SurfaceWrapper(android.os.IBinder?, @Dimension int, @Dimension int, int, int, android.view.Surface);
- method public int getDensityDpi();
- method public int getDisplayId();
- method @Dimension public int getHeight();
- method public android.os.IBinder? getHostToken();
- method public android.view.Surface getSurface();
- method @Dimension public int getWidth();
- }
-
-}
-
-package androidx.car.app.hardware {
-
- @androidx.car.app.annotations.ExperimentalCarApi public final class AutomotiveCarHardwareManager implements androidx.car.app.hardware.CarHardwareManager {
- ctor public AutomotiveCarHardwareManager(android.content.Context);
- }
-
-}
-
-package androidx.car.app.hardware.common {
-
- @androidx.car.app.annotations.ExperimentalCarApi public final class CarZoneAreaIdConstants {
- field public static final int AREA_ID_GLOBAL = 0; // 0x0
- }
-
- public static final class CarZoneAreaIdConstants.VehicleAreaSeat {
- field public static final int COL_ALL = 1911; // 0x777
- field public static final int COL_CENTER = 546; // 0x222
- field public static final int COL_LEFT = 273; // 0x111
- field public static final int COL_RIGHT = 1092; // 0x444
- field public static final int ROW_1_CENTER = 2; // 0x2
- field public static final int ROW_1_LEFT = 1; // 0x1
- field public static final int ROW_1_RIGHT = 4; // 0x4
- field public static final int ROW_2_CENTER = 32; // 0x20
- field public static final int ROW_2_LEFT = 16; // 0x10
- field public static final int ROW_2_RIGHT = 64; // 0x40
- field public static final int ROW_3_CENTER = 512; // 0x200
- field public static final int ROW_3_LEFT = 256; // 0x100
- field public static final int ROW_3_RIGHT = 1024; // 0x400
- field public static final int ROW_ALL = 1911; // 0x777
- field public static final int ROW_FIRST = 7; // 0x7
- field public static final int ROW_SECOND = 112; // 0x70
- field public static final int ROW_THIRD = 1792; // 0x700
- }
-
- @androidx.car.app.annotations.ExperimentalCarApi public interface CarZoneAreaIdConverter {
- method public com.google.common.collect.ImmutableSet<androidx.car.app.hardware.common.CarZone!> convertAreaIdToCarZones(int);
- }
-
- @androidx.car.app.annotations.ExperimentalCarApi public final class CarZoneUtils {
- method public static com.google.common.collect.ImmutableSet<androidx.car.app.hardware.common.CarZone!> convertAreaIdToCarZones(int, int);
- method public static androidx.car.app.hardware.common.CarZoneAreaIdConverter getZoneAreaIdConverter(int);
- }
-
- @androidx.car.app.annotations.ExperimentalCarApi public class GlobalCarZoneAreaIdConverter implements androidx.car.app.hardware.common.CarZoneAreaIdConverter {
- ctor public GlobalCarZoneAreaIdConverter();
- method public com.google.common.collect.ImmutableSet<androidx.car.app.hardware.common.CarZone!> convertAreaIdToCarZones(int);
- }
-
- @androidx.car.app.annotations.ExperimentalCarApi public class SeatCarZoneAreaIdConverter implements androidx.car.app.hardware.common.CarZoneAreaIdConverter {
- ctor public SeatCarZoneAreaIdConverter();
- method public com.google.common.collect.ImmutableSet<androidx.car.app.hardware.common.CarZone!> convertAreaIdToCarZones(int);
- }
-
-}
-
diff --git a/car/app/app-automotive/api/restricted_current.txt b/car/app/app-automotive/api/restricted_current.txt
index 2ac21e9a..1a6a8f9 100644
--- a/car/app/app-automotive/api/restricted_current.txt
+++ b/car/app/app-automotive/api/restricted_current.txt
@@ -5,12 +5,17 @@
ctor public BaseCarAppActivity();
method public void bindToViewModel(androidx.car.app.SessionInfo);
method public android.content.ComponentName? getServiceComponentName();
+ method @androidx.car.app.annotations.ExperimentalCarApi public android.content.ComponentName? retrieveServiceComponentName();
}
public final class CarAppActivity extends androidx.car.app.activity.BaseCarAppActivity {
ctor public CarAppActivity();
}
+ @androidx.car.app.annotations.ExperimentalCarApi public final class LauncherActivity extends androidx.fragment.app.FragmentActivity {
+ ctor public LauncherActivity();
+ }
+
}
package androidx.car.app.activity.renderer.surface {
@@ -39,3 +44,58 @@
}
+package androidx.car.app.hardware {
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class AutomotiveCarHardwareManager implements androidx.car.app.hardware.CarHardwareManager {
+ ctor public AutomotiveCarHardwareManager(android.content.Context);
+ }
+
+}
+
+package androidx.car.app.hardware.common {
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class CarZoneAreaIdConstants {
+ field public static final int AREA_ID_GLOBAL = 0; // 0x0
+ }
+
+ public static final class CarZoneAreaIdConstants.VehicleAreaSeat {
+ field public static final int COL_ALL = 1911; // 0x777
+ field public static final int COL_CENTER = 546; // 0x222
+ field public static final int COL_LEFT = 273; // 0x111
+ field public static final int COL_RIGHT = 1092; // 0x444
+ field public static final int ROW_1_CENTER = 2; // 0x2
+ field public static final int ROW_1_LEFT = 1; // 0x1
+ field public static final int ROW_1_RIGHT = 4; // 0x4
+ field public static final int ROW_2_CENTER = 32; // 0x20
+ field public static final int ROW_2_LEFT = 16; // 0x10
+ field public static final int ROW_2_RIGHT = 64; // 0x40
+ field public static final int ROW_3_CENTER = 512; // 0x200
+ field public static final int ROW_3_LEFT = 256; // 0x100
+ field public static final int ROW_3_RIGHT = 1024; // 0x400
+ field public static final int ROW_ALL = 1911; // 0x777
+ field public static final int ROW_FIRST = 7; // 0x7
+ field public static final int ROW_SECOND = 112; // 0x70
+ field public static final int ROW_THIRD = 1792; // 0x700
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public interface CarZoneAreaIdConverter {
+ method public com.google.common.collect.ImmutableSet<androidx.car.app.hardware.common.CarZone!> convertAreaIdToCarZones(int);
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class CarZoneUtils {
+ method public static com.google.common.collect.ImmutableSet<androidx.car.app.hardware.common.CarZone!> convertAreaIdToCarZones(int, int);
+ method public static androidx.car.app.hardware.common.CarZoneAreaIdConverter getZoneAreaIdConverter(int);
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public class GlobalCarZoneAreaIdConverter implements androidx.car.app.hardware.common.CarZoneAreaIdConverter {
+ ctor public GlobalCarZoneAreaIdConverter();
+ method public com.google.common.collect.ImmutableSet<androidx.car.app.hardware.common.CarZone!> convertAreaIdToCarZones(int);
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public class SeatCarZoneAreaIdConverter implements androidx.car.app.hardware.common.CarZoneAreaIdConverter {
+ ctor public SeatCarZoneAreaIdConverter();
+ method public com.google.common.collect.ImmutableSet<androidx.car.app.hardware.common.CarZone!> convertAreaIdToCarZones(int);
+ }
+
+}
+
diff --git a/car/app/app-automotive/build.gradle b/car/app/app-automotive/build.gradle
index a496e2d..7361f0e 100644
--- a/car/app/app-automotive/build.gradle
+++ b/car/app/app-automotive/build.gradle
@@ -72,7 +72,7 @@
}
androidx {
- name = "Android for Cars App Library Automotive Extension"
+ name = "Android for Cars App Automotive Extension"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2021"
description = "Automotive OS specific functionality to build navigation, parking, and charging apps for cars"
diff --git a/car/app/app-automotive/src/main/res/values-ky/strings.xml b/car/app/app-automotive/src/main/res/values-ky/strings.xml
index 90f8f6b2..db88152 100644
--- a/car/app/app-automotive/src/main/res/values-ky/strings.xml
+++ b/car/app/app-automotive/src/main/res/values-ky/strings.xml
@@ -21,8 +21,8 @@
<string name="error_action_update_host" msgid="4802951804749609593">"Жаңыртууларды карап көрүү"</string>
<string name="error_action_retry" msgid="985347670495166517">"Кайталоо"</string>
<string name="error_message_client_side_error" msgid="3323186720368387787">"Колдонмодо ката кетти. Бул катаны колдонмонун иштеп чыгуучусуна кабарлаңыз"</string>
- <string name="error_message_host_error" msgid="5484419926049675696">"Тутум катасы"</string>
- <string name="error_message_host_connection_lost" msgid="5723205987837759151">"Тутум убактылуу жеткиликсиз"</string>
+ <string name="error_message_host_error" msgid="5484419926049675696">"Система катасы"</string>
+ <string name="error_message_host_connection_lost" msgid="5723205987837759151">"Система убактылуу жеткиликсиз"</string>
<string name="error_message_host_not_found" msgid="3241065067065670113">"Системаны жаңыртуу керек"</string>
<string name="error_message_host_incompatible" msgid="160406216155183851">"Системаны жаңыртуу керек"</string>
<string name="error_message_multiple_hosts" msgid="2591031904206928207">"Шайкеш келбеген тутум"</string>
diff --git a/car/app/app-projected/api/public_plus_experimental_current.txt b/car/app/app-projected/api/public_plus_experimental_current.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/car/app/app-projected/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/car/app/app-projected/build.gradle b/car/app/app-projected/build.gradle
index 5754a49..454cbec 100644
--- a/car/app/app-projected/build.gradle
+++ b/car/app/app-projected/build.gradle
@@ -60,7 +60,7 @@
}
androidx {
- name = "Android for Cars App Library Projected Extension"
+ name = "Android for Cars App Projected Extension"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2021"
description = "Android Auto Projected specific funationaltiy to build navigation, parking, and charging apps for cars"
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-ky/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-ky/strings.xml
index 2452cc4..e753de6 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-ky/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-ky/strings.xml
@@ -123,7 +123,7 @@
<string name="pop_to_prefix" msgid="4288884615669751608">"Кыска убакытка токтотуу"</string>
<string name="pop_to_title" msgid="3924696281273379455">"Кыска убакытка токтотуу демосу"</string>
<string name="package_not_found_error_msg" msgid="7525619456883627939">"Топтом табылган жок."</string>
- <string name="permissions_granted_msg" msgid="2348556088141992714">"Бардык уруксаттар берилди. Уруксаттарга мүмкүнчүлүктү Жөндөөлөрдөн жабыңыз."</string>
+ <string name="permissions_granted_msg" msgid="2348556088141992714">"Бардык уруксаттар берилди. Уруксаттарга мүмкүнчүлүктү Параметрлерден жабыңыз."</string>
<string name="needs_access_msg_prefix" msgid="2204136858798832382">"Колдонмого төмөнкү уруксаттар керек:\n"</string>
<string name="phone_screen_permission_msg" msgid="3599815596923367256">"Телефондун экранындагы Уруксат берүү"</string>
<string name="enable_location_permission_on_device_msg" msgid="472752487966156897">"Түзмөктө Жайгашкан жер уруксаттарын иштетүү"</string>
diff --git a/car/app/app-testing/api/current.txt b/car/app/app-testing/api/current.txt
index d148064..06cdd5f 100644
--- a/car/app/app-testing/api/current.txt
+++ b/car/app/app-testing/api/current.txt
@@ -3,6 +3,7 @@
public class FakeHost {
method public void performNotificationActionClick(android.app.PendingIntent);
+ method @androidx.car.app.annotations.ExperimentalCarApi public void setMicrophoneInputData(java.io.InputStream);
}
public class ScreenController {
diff --git a/car/app/app-testing/api/public_plus_experimental_current.txt b/car/app/app-testing/api/public_plus_experimental_current.txt
deleted file mode 100644
index 06cdd5f..0000000
--- a/car/app/app-testing/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,66 +0,0 @@
-// Signature format: 4.0
-package androidx.car.app.testing {
-
- public class FakeHost {
- method public void performNotificationActionClick(android.app.PendingIntent);
- method @androidx.car.app.annotations.ExperimentalCarApi public void setMicrophoneInputData(java.io.InputStream);
- }
-
- public class ScreenController {
- ctor public ScreenController(androidx.car.app.Screen);
- method public androidx.car.app.Screen getScreen();
- method public Object? getScreenResult();
- method public java.util.List<androidx.car.app.model.Template!> getTemplatesReturned();
- method public androidx.car.app.testing.ScreenController moveToState(androidx.lifecycle.Lifecycle.State);
- method public void reset();
- }
-
- public class SessionController {
- ctor public SessionController(androidx.car.app.Session, androidx.car.app.testing.TestCarContext, android.content.Intent);
- method public androidx.car.app.Session getSession();
- method public androidx.car.app.testing.SessionController moveToState(androidx.lifecycle.Lifecycle.State);
- }
-
- public class TestAppManager extends androidx.car.app.AppManager {
- method public androidx.car.app.SurfaceCallback? getSurfaceCallback();
- method public java.util.List<android.util.Pair<androidx.car.app.Screen!,androidx.car.app.model.Template!>!> getTemplatesReturned();
- method public java.util.List<java.lang.CharSequence!> getToastsShown();
- method public void reset();
- }
-
- public class TestCarContext extends androidx.car.app.CarContext {
- method public static androidx.car.app.testing.TestCarContext createCarContext(android.content.Context);
- method public androidx.car.app.testing.FakeHost getFakeHost();
- method public androidx.car.app.testing.TestCarContext.PermissionRequestInfo? getLastPermissionRequestInfo();
- method public java.util.List<android.content.Intent!> getStartCarAppIntents();
- method public boolean hasCalledFinishCarApp();
- method public void reset();
- }
-
- public static class TestCarContext.PermissionRequestInfo {
- method public androidx.car.app.OnRequestPermissionsListener getListener();
- method public java.util.List<java.lang.String!> getPermissionsRequested();
- }
-
- public class TestScreenManager extends androidx.car.app.ScreenManager {
- method public java.util.List<androidx.car.app.Screen!> getScreensPushed();
- method public java.util.List<androidx.car.app.Screen!> getScreensRemoved();
- method public boolean hasScreens();
- method public void reset();
- }
-
-}
-
-package androidx.car.app.testing.navigation {
-
- public class TestNavigationManager extends androidx.car.app.navigation.NavigationManager {
- ctor public TestNavigationManager(androidx.car.app.testing.TestCarContext, androidx.car.app.HostDispatcher);
- method public int getNavigationEndedCount();
- method public androidx.car.app.navigation.NavigationManagerCallback? getNavigationManagerCallback();
- method public int getNavigationStartedCount();
- method public java.util.List<androidx.car.app.navigation.model.Trip!> getTripsSent();
- method public void reset();
- }
-
-}
-
diff --git a/car/app/app-testing/api/restricted_current.txt b/car/app/app-testing/api/restricted_current.txt
index d148064..06cdd5f 100644
--- a/car/app/app-testing/api/restricted_current.txt
+++ b/car/app/app-testing/api/restricted_current.txt
@@ -3,6 +3,7 @@
public class FakeHost {
method public void performNotificationActionClick(android.app.PendingIntent);
+ method @androidx.car.app.annotations.ExperimentalCarApi public void setMicrophoneInputData(java.io.InputStream);
}
public class ScreenController {
diff --git a/car/app/app/api/current.txt b/car/app/app/api/current.txt
index ebb7251..b28d7ca 100644
--- a/car/app/app/api/current.txt
+++ b/car/app/app/api/current.txt
@@ -36,11 +36,16 @@
method public androidx.car.app.Session onCreateSession();
method @androidx.car.app.annotations.RequiresCarApi(6) public androidx.car.app.Session onCreateSession(androidx.car.app.SessionInfo);
method public final boolean onUnbind(android.content.Intent);
+ field @androidx.car.app.annotations.ExperimentalCarApi public static final String CATEGORY_CALLING_APP = "androidx.car.app.category.CALLING";
field @Deprecated public static final String CATEGORY_CHARGING_APP = "androidx.car.app.category.CHARGING";
field @androidx.car.app.annotations.RequiresCarApi(6) public static final String CATEGORY_FEATURE_CLUSTER = "androidx.car.app.category.FEATURE_CLUSTER";
+ field @androidx.car.app.annotations.ExperimentalCarApi public static final String CATEGORY_IOT_APP = "androidx.car.app.category.IOT";
+ field @androidx.car.app.annotations.ExperimentalCarApi public static final String CATEGORY_MESSAGING_APP = "androidx.car.app.category.MESSAGING";
field public static final String CATEGORY_NAVIGATION_APP = "androidx.car.app.category.NAVIGATION";
field @Deprecated public static final String CATEGORY_PARKING_APP = "androidx.car.app.category.PARKING";
field public static final String CATEGORY_POI_APP = "androidx.car.app.category.POI";
+ field @androidx.car.app.annotations.ExperimentalCarApi public static final String CATEGORY_SETTINGS_APP = "androidx.car.app.category.SETTINGS";
+ field @androidx.car.app.annotations.ExperimentalCarApi public static final String CATEGORY_WEATHER_APP = "androidx.car.app.category.WEATHER";
field public static final String SERVICE_INTERFACE = "androidx.car.app.CarAppService";
}
@@ -48,8 +53,8 @@
method public void finishCarApp();
method @androidx.car.app.annotations.RequiresCarApi(2) public android.content.ComponentName? getCallingComponent();
method public int getCarAppApiLevel();
- method public Object getCarService(String);
method public <T> T getCarService(Class<T!>);
+ method public Object getCarService(String);
method public String getCarServiceName(Class<?>);
method public androidx.car.app.HostInfo? getHostInfo();
method public androidx.activity.OnBackPressedDispatcher getOnBackPressedDispatcher();
@@ -201,6 +206,9 @@
@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.PARAMETER}) public @interface CarProtocol {
}
+ @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD}) public @interface ExperimentalCarApi {
+ }
+
@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD}) public @interface RequiresCarApi {
method public abstract int value();
}
@@ -238,27 +246,342 @@
package androidx.car.app.hardware {
@MainThread @androidx.car.app.annotations.RequiresCarApi(3) public interface CarHardwareManager extends androidx.car.app.managers.Manager {
+ method @androidx.car.app.annotations.ExperimentalCarApi public default androidx.car.app.hardware.climate.CarClimate getCarClimate();
method public default androidx.car.app.hardware.info.CarInfo getCarInfo();
method public default androidx.car.app.hardware.info.CarSensors getCarSensors();
}
}
+package androidx.car.app.hardware.climate {
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class CabinTemperatureProfile {
+ method public java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Float!,java.lang.Float!>!> getCarZoneSetsToCabinCelsiusTemperatureRanges();
+ method public float getCelsiusSupportedIncrement();
+ method public float getFahrenheitSupportedIncrement();
+ method public android.util.Pair<java.lang.Float!,java.lang.Float!> getSupportedMinMaxCelsiusRange();
+ method public android.util.Pair<java.lang.Float!,java.lang.Float!> getSupportedMinMaxFahrenheitRange();
+ method public boolean hasCarZoneSetsToCabinCelsiusTemperatureRanges();
+ method public boolean hasCelsiusSupportedIncrement();
+ method public boolean hasFahrenheitSupportedIncrement();
+ method public boolean hasSupportedMinMaxCelsiusRange();
+ method public boolean hasSupportedMinMaxFahrenheitRange();
+ }
+
+ public static final class CabinTemperatureProfile.Builder {
+ ctor public CabinTemperatureProfile.Builder();
+ method public androidx.car.app.hardware.climate.CabinTemperatureProfile build();
+ method public androidx.car.app.hardware.climate.CabinTemperatureProfile.Builder setCarZoneSetsToCabinCelsiusTemperatureRanges(java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Float!,java.lang.Float!>!>);
+ method public androidx.car.app.hardware.climate.CabinTemperatureProfile.Builder setCelsiusSupportedIncrement(float);
+ method public androidx.car.app.hardware.climate.CabinTemperatureProfile.Builder setFahrenheitSupportedIncrement(float);
+ method public androidx.car.app.hardware.climate.CabinTemperatureProfile.Builder setSupportedMinMaxCelsiusRange(android.util.Pair<java.lang.Float!,java.lang.Float!>);
+ method public androidx.car.app.hardware.climate.CabinTemperatureProfile.Builder setSupportedMinMaxFahrenheitRange(android.util.Pair<java.lang.Float!,java.lang.Float!>);
+ }
+
+ @MainThread @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public interface CarClimate {
+ method public void fetchClimateProfile(java.util.concurrent.Executor, androidx.car.app.hardware.climate.ClimateProfileRequest, androidx.car.app.hardware.climate.CarClimateProfileCallback);
+ method public void registerClimateStateCallback(java.util.concurrent.Executor, androidx.car.app.hardware.climate.RegisterClimateStateRequest, androidx.car.app.hardware.climate.CarClimateStateCallback);
+ method public <E> void setClimateState(java.util.concurrent.Executor, androidx.car.app.hardware.climate.ClimateStateRequest<E!>, androidx.car.app.hardware.common.CarSetOperationStatusCallback);
+ method public void unregisterClimateStateCallback(androidx.car.app.hardware.climate.CarClimateStateCallback);
+ }
+
+ @MainThread @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public final class CarClimateFeature {
+ method public java.util.List<androidx.car.app.hardware.common.CarZone!> getCarZones();
+ method public int getFeature();
+ }
+
+ public static final class CarClimateFeature.Builder {
+ ctor public CarClimateFeature.Builder(int);
+ method public androidx.car.app.hardware.climate.CarClimateFeature.Builder addCarZones(androidx.car.app.hardware.common.CarZone!...);
+ method public androidx.car.app.hardware.climate.CarClimateFeature build();
+ }
+
+ @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public interface CarClimateProfileCallback {
+ method public default void onCabinTemperatureProfileAvailable(androidx.car.app.hardware.climate.CabinTemperatureProfile);
+ method public default void onCarZoneMappingInfoProfileAvailable(androidx.car.app.hardware.climate.CarZoneMappingInfoProfile);
+ method public default void onDefrosterProfileAvailable(androidx.car.app.hardware.climate.DefrosterProfile);
+ method public default void onElectricDefrosterProfileAvailable(androidx.car.app.hardware.climate.ElectricDefrosterProfile);
+ method public default void onFanDirectionProfileAvailable(androidx.car.app.hardware.climate.FanDirectionProfile);
+ method public default void onFanSpeedLevelProfileAvailable(androidx.car.app.hardware.climate.FanSpeedLevelProfile);
+ method public default void onHvacAcProfileAvailable(androidx.car.app.hardware.climate.HvacAcProfile);
+ method public default void onHvacAutoModeProfileAvailable(androidx.car.app.hardware.climate.HvacAutoModeProfile);
+ method public default void onHvacAutoRecirculationProfileAvailable(androidx.car.app.hardware.climate.HvacAutoRecirculationProfile);
+ method public default void onHvacDualModeProfileAvailable(androidx.car.app.hardware.climate.HvacDualModeProfile);
+ method public default void onHvacMaxAcModeProfileAvailable(androidx.car.app.hardware.climate.HvacMaxAcModeProfile);
+ method public default void onHvacPowerProfileAvailable(androidx.car.app.hardware.climate.HvacPowerProfile);
+ method public default void onHvacRecirculationProfileAvailable(androidx.car.app.hardware.climate.HvacRecirculationProfile);
+ method public default void onMaxDefrosterProfileAvailable(androidx.car.app.hardware.climate.MaxDefrosterProfile);
+ method public default void onSeatTemperatureLevelProfileAvailable(androidx.car.app.hardware.climate.SeatTemperatureProfile);
+ method public default void onSeatVentilationLevelProfileAvailable(androidx.car.app.hardware.climate.SeatVentilationProfile);
+ method public default void onSteeringWheelHeatProfileAvailable(androidx.car.app.hardware.climate.SteeringWheelHeatProfile);
+ }
+
+ @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public interface CarClimateStateCallback {
+ method public default void onCabinTemperatureStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Float!>);
+ method public default void onDefrosterStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+ method public default void onElectricDefrosterStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+ method public default void onFanDirectionStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
+ method public default void onFanSpeedLevelStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
+ method public default void onHvacAcStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+ method public default void onHvacAutoModeStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+ method public default void onHvacAutoRecirculationStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+ method public default void onHvacDualModeStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+ method public default void onHvacMaxAcModeStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+ method public default void onHvacPowerStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+ method public default void onHvacRecirculationStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+ method public default void onMaxDefrosterStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+ method public default void onSeatTemperatureLevelStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
+ method public default void onSeatVentilationLevelStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
+ method public default void onSteeringWheelHeatStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class CarZoneMappingInfoProfile {
+ method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+ }
+
+ public static final class CarZoneMappingInfoProfile.Builder {
+ ctor public CarZoneMappingInfoProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+ method public androidx.car.app.hardware.climate.CarZoneMappingInfoProfile build();
+ }
+
+ @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public final class ClimateProfileRequest {
+ method public java.util.Set<java.lang.Integer!> getAllClimateProfiles();
+ method public java.util.List<androidx.car.app.hardware.climate.CarClimateFeature!> getClimateProfileFeatures();
+ field public static final int FEATURE_CABIN_TEMPERATURE = 4; // 0x4
+ field public static final int FEATURE_CAR_ZONE_MAPPING = 17; // 0x11
+ field public static final int FEATURE_FAN_DIRECTION = 6; // 0x6
+ field public static final int FEATURE_FAN_SPEED = 5; // 0x5
+ field public static final int FEATURE_HVAC_AC = 2; // 0x2
+ field public static final int FEATURE_HVAC_AUTO_MODE = 12; // 0xc
+ field public static final int FEATURE_HVAC_AUTO_RECIRCULATION = 11; // 0xb
+ field public static final int FEATURE_HVAC_DEFROSTER = 14; // 0xe
+ field public static final int FEATURE_HVAC_DUAL_MODE = 13; // 0xd
+ field public static final int FEATURE_HVAC_ELECTRIC_DEFROSTER = 16; // 0x10
+ field public static final int FEATURE_HVAC_MAX_AC = 3; // 0x3
+ field public static final int FEATURE_HVAC_MAX_DEFROSTER = 15; // 0xf
+ field public static final int FEATURE_HVAC_POWER = 1; // 0x1
+ field public static final int FEATURE_HVAC_RECIRCULATION = 10; // 0xa
+ field public static final int FEATURE_SEAT_TEMPERATURE_LEVEL = 7; // 0x7
+ field public static final int FEATURE_SEAT_VENTILATION_LEVEL = 8; // 0x8
+ field public static final int FEATURE_STEERING_WHEEL_HEAT = 9; // 0x9
+ }
+
+ public static final class ClimateProfileRequest.Builder {
+ ctor public ClimateProfileRequest.Builder();
+ method public androidx.car.app.hardware.climate.ClimateProfileRequest.Builder addClimateProfileFeatures(androidx.car.app.hardware.climate.CarClimateFeature!...);
+ method public androidx.car.app.hardware.climate.ClimateProfileRequest build();
+ method public androidx.car.app.hardware.climate.ClimateProfileRequest.Builder setAllClimateProfiles();
+ }
+
+ @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public final class ClimateStateRequest<T> {
+ method public java.util.List<androidx.car.app.hardware.common.CarZone!> getCarZones();
+ method public int getRequestedFeature();
+ method public T getRequestedValue();
+ }
+
+ public static final class ClimateStateRequest.Builder<T> {
+ ctor public ClimateStateRequest.Builder(int, T!);
+ method public androidx.car.app.hardware.climate.ClimateStateRequest.Builder<T!> addCarZones(androidx.car.app.hardware.common.CarZone);
+ method public androidx.car.app.hardware.climate.ClimateStateRequest<T!> build();
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class DefrosterProfile {
+ method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+ }
+
+ public static final class DefrosterProfile.Builder {
+ ctor public DefrosterProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+ method public androidx.car.app.hardware.climate.DefrosterProfile build();
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class ElectricDefrosterProfile {
+ method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+ }
+
+ public static final class ElectricDefrosterProfile.Builder {
+ ctor public ElectricDefrosterProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+ method public androidx.car.app.hardware.climate.ElectricDefrosterProfile build();
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class FanDirectionProfile {
+ method public java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,java.util.Set<java.lang.Integer!>!> getCarZoneSetsToFanDirectionValues();
+ }
+
+ public static final class FanDirectionProfile.Builder {
+ ctor public FanDirectionProfile.Builder(java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,java.util.Set<java.lang.Integer!>!>);
+ method public androidx.car.app.hardware.climate.FanDirectionProfile build();
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class FanSpeedLevelProfile {
+ method public java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!> getCarZoneSetsToFanSpeedLevelRanges();
+ }
+
+ public static final class FanSpeedLevelProfile.Builder {
+ ctor public FanSpeedLevelProfile.Builder(java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!>);
+ method public androidx.car.app.hardware.climate.FanSpeedLevelProfile build();
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class HvacAcProfile {
+ method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+ }
+
+ public static final class HvacAcProfile.Builder {
+ ctor public HvacAcProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+ method public androidx.car.app.hardware.climate.HvacAcProfile build();
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class HvacAutoModeProfile {
+ method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+ }
+
+ public static final class HvacAutoModeProfile.Builder {
+ ctor public HvacAutoModeProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+ method public androidx.car.app.hardware.climate.HvacAutoModeProfile build();
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class HvacAutoRecirculationProfile {
+ method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+ }
+
+ public static final class HvacAutoRecirculationProfile.Builder {
+ ctor public HvacAutoRecirculationProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+ method public androidx.car.app.hardware.climate.HvacAutoRecirculationProfile build();
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class HvacDualModeProfile {
+ method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+ }
+
+ public static final class HvacDualModeProfile.Builder {
+ ctor public HvacDualModeProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+ method public androidx.car.app.hardware.climate.HvacDualModeProfile build();
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class HvacMaxAcModeProfile {
+ method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+ }
+
+ public static final class HvacMaxAcModeProfile.Builder {
+ ctor public HvacMaxAcModeProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+ method public androidx.car.app.hardware.climate.HvacMaxAcModeProfile build();
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class HvacPowerProfile {
+ method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+ }
+
+ public static final class HvacPowerProfile.Builder {
+ ctor public HvacPowerProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+ method public androidx.car.app.hardware.climate.HvacPowerProfile build();
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class HvacRecirculationProfile {
+ method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZones();
+ }
+
+ public static final class HvacRecirculationProfile.Builder {
+ ctor public HvacRecirculationProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+ method public androidx.car.app.hardware.climate.HvacRecirculationProfile build();
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class MaxDefrosterProfile {
+ method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+ }
+
+ public static final class MaxDefrosterProfile.Builder {
+ ctor public MaxDefrosterProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+ method public androidx.car.app.hardware.climate.MaxDefrosterProfile build();
+ }
+
+ @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public final class RegisterClimateStateRequest {
+ method public java.util.List<androidx.car.app.hardware.climate.CarClimateFeature!> getClimateRegisterFeatures();
+ }
+
+ public static final class RegisterClimateStateRequest.Builder {
+ ctor public RegisterClimateStateRequest.Builder(boolean);
+ method public androidx.car.app.hardware.climate.RegisterClimateStateRequest.Builder addClimateRegisterFeatures(androidx.car.app.hardware.climate.CarClimateFeature!...);
+ method public androidx.car.app.hardware.climate.RegisterClimateStateRequest build();
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class SeatTemperatureProfile {
+ method public java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!> getCarZoneSetsToSeatTemperatureValues();
+ }
+
+ public static final class SeatTemperatureProfile.Builder {
+ ctor public SeatTemperatureProfile.Builder(java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!>);
+ method public androidx.car.app.hardware.climate.SeatTemperatureProfile build();
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class SeatVentilationProfile {
+ method public java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!> getCarZoneSetsToSeatVentilationValues();
+ }
+
+ public static final class SeatVentilationProfile.Builder {
+ ctor public SeatVentilationProfile.Builder(java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!>);
+ method public androidx.car.app.hardware.climate.SeatVentilationProfile build();
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class SteeringWheelHeatProfile {
+ method public java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!> getCarZoneSetsToSteeringWheelHeatValues();
+ }
+
+ public static final class SteeringWheelHeatProfile.Builder {
+ ctor public SteeringWheelHeatProfile.Builder(java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!>);
+ method public androidx.car.app.hardware.climate.SteeringWheelHeatProfile build();
+ }
+
+}
+
package androidx.car.app.hardware.common {
+ @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public interface CarSetOperationStatusCallback {
+ method public default void onSetCarClimateStateCabinTemperature(int);
+ method public default void onSetCarClimateStateDefroster(int);
+ method public default void onSetCarClimateStateElectricDefroster(int);
+ method public default void onSetCarClimateStateFanDirection(int);
+ method public default void onSetCarClimateStateFanSpeedLevel(int);
+ method public default void onSetCarClimateStateHvacAc(int);
+ method public default void onSetCarClimateStateHvacAutoMode(int);
+ method public default void onSetCarClimateStateHvacAutoRecirculation(int);
+ method public default void onSetCarClimateStateHvacDualMode(int);
+ method public default void onSetCarClimateStateHvacMaxAcMode(int);
+ method public default void onSetCarClimateStateHvacPower(int);
+ method public default void onSetCarClimateStateHvacRecirculation(int);
+ method public default void onSetCarClimateStateMaxDefroster(int);
+ method public default void onSetCarClimateStateSeatTemperatureLevel(int);
+ method public default void onSetCarClimateStateSeatVentilationLevel(int);
+ method public default void onSetCarClimateStateSteeringWheelHeat(int);
+ method public static String toString(int);
+ field public static final int OPERATION_STATUS_FEATURE_SETTING_NOT_ALLOWED = 4; // 0x4
+ field public static final int OPERATION_STATUS_FEATURE_TEMPORARILY_UNAVAILABLE = 3; // 0x3
+ field public static final int OPERATION_STATUS_FEATURE_UNIMPLEMENTED = 1; // 0x1
+ field public static final int OPERATION_STATUS_FEATURE_UNSUPPORTED = 2; // 0x2
+ field public static final int OPERATION_STATUS_ILLEGAL_CAR_HARDWARE_STATE = 7; // 0x7
+ field public static final int OPERATION_STATUS_INSUFFICIENT_PERMISSION = 6; // 0x6
+ field public static final int OPERATION_STATUS_SUCCESS = 0; // 0x0
+ field public static final int OPERATION_STATUS_UNSUPPORTED_VALUE = 5; // 0x5
+ field public static final int OPERATION_STATUS_UPDATE_TIMEOUT = 8; // 0x8
+ }
+
@androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class CarUnit {
method public static String toString(int);
+ field @androidx.car.app.annotations.ExperimentalCarApi public static final int IMPERIAL_GALLON = 204; // 0xcc
field public static final int KILOMETER = 3; // 0x3
field public static final int KILOMETERS_PER_HOUR = 102; // 0x66
+ field @androidx.car.app.annotations.ExperimentalCarApi public static final int LITER = 202; // 0xca
field public static final int METER = 2; // 0x2
field public static final int METERS_PER_SEC = 101; // 0x65
field public static final int MILE = 4; // 0x4
field public static final int MILES_PER_HOUR = 103; // 0x67
+ field @androidx.car.app.annotations.ExperimentalCarApi public static final int MILLILITER = 201; // 0xc9
field public static final int MILLIMETER = 1; // 0x1
+ field @androidx.car.app.annotations.ExperimentalCarApi public static final int US_GALLON = 203; // 0xcb
}
@androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class CarValue<T> {
ctor public CarValue(T?, long, int);
+ ctor @androidx.car.app.annotations.ExperimentalCarApi public CarValue(T?, long, int, java.util.List<androidx.car.app.hardware.common.CarZone!>);
+ method @androidx.car.app.annotations.ExperimentalCarApi public java.util.List<androidx.car.app.hardware.common.CarZone!> getCarZones();
method public int getStatus();
method public long getTimestampMillis();
method public T? getValue();
@@ -268,6 +591,30 @@
field public static final int STATUS_UNKNOWN = 0; // 0x0
}
+ @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public final class CarZone {
+ method public int getColumn();
+ method public int getRow();
+ field public static final int CAR_ZONE_COLUMN_ALL = 16; // 0x10
+ field public static final int CAR_ZONE_COLUMN_CENTER = 48; // 0x30
+ field public static final int CAR_ZONE_COLUMN_DRIVER = 80; // 0x50
+ field public static final int CAR_ZONE_COLUMN_LEFT = 32; // 0x20
+ field public static final int CAR_ZONE_COLUMN_PASSENGER = 96; // 0x60
+ field public static final int CAR_ZONE_COLUMN_RIGHT = 64; // 0x40
+ field public static final androidx.car.app.hardware.common.CarZone CAR_ZONE_GLOBAL;
+ field public static final int CAR_ZONE_ROW_ALL = 0; // 0x0
+ field public static final int CAR_ZONE_ROW_EXCLUDE_FIRST = 4; // 0x4
+ field public static final int CAR_ZONE_ROW_FIRST = 1; // 0x1
+ field public static final int CAR_ZONE_ROW_SECOND = 2; // 0x2
+ field public static final int CAR_ZONE_ROW_THIRD = 3; // 0x3
+ }
+
+ public static final class CarZone.Builder {
+ ctor public CarZone.Builder();
+ method public androidx.car.app.hardware.common.CarZone build();
+ method public androidx.car.app.hardware.common.CarZone.Builder setColumn(int);
+ method public androidx.car.app.hardware.common.CarZone.Builder setRow(int);
+ }
+
@androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public interface OnCarDataAvailableListener<T> {
method public void onCarDataAvailable(T);
}
@@ -288,12 +635,14 @@
@MainThread @androidx.car.app.annotations.RequiresCarApi(3) public interface CarInfo {
method public void addEnergyLevelListener(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.EnergyLevel!>);
+ method @androidx.car.app.annotations.ExperimentalCarApi public void addEvStatusListener(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.EvStatus!>);
method public void addMileageListener(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Mileage!>);
method public void addSpeedListener(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Speed!>);
method public void addTollListener(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.TollCard!>);
method public void fetchEnergyProfile(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.EnergyProfile!>);
method public void fetchModel(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Model!>);
method public void removeEnergyLevelListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.EnergyLevel!>);
+ method @androidx.car.app.annotations.ExperimentalCarApi public void removeEvStatusListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.EvStatus!>);
method public void removeMileageListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Mileage!>);
method public void removeSpeedListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Speed!>);
method public void removeTollListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.TollCard!>);
@@ -323,6 +672,7 @@
method public androidx.car.app.hardware.common.CarValue<java.lang.Integer!> getDistanceDisplayUnit();
method public androidx.car.app.hardware.common.CarValue<java.lang.Boolean!> getEnergyIsLow();
method public androidx.car.app.hardware.common.CarValue<java.lang.Float!> getFuelPercent();
+ method @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.hardware.common.CarValue<java.lang.Integer!> getFuelVolumeDisplayUnit();
method public androidx.car.app.hardware.common.CarValue<java.lang.Float!> getRangeRemainingMeters();
}
@@ -333,6 +683,7 @@
method public androidx.car.app.hardware.info.EnergyLevel.Builder setDistanceDisplayUnit(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
method public androidx.car.app.hardware.info.EnergyLevel.Builder setEnergyIsLow(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
method public androidx.car.app.hardware.info.EnergyLevel.Builder setFuelPercent(androidx.car.app.hardware.common.CarValue<java.lang.Float!>);
+ method @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.hardware.info.EnergyLevel.Builder setFuelVolumeDisplayUnit(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
method public androidx.car.app.hardware.info.EnergyLevel.Builder setRangeRemainingMeters(androidx.car.app.hardware.common.CarValue<java.lang.Float!>);
}
@@ -374,6 +725,18 @@
method public androidx.car.app.hardware.info.EnergyProfile.Builder setFuelTypes(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Integer!>!>);
}
+ @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi public class EvStatus {
+ method public androidx.car.app.hardware.common.CarValue<java.lang.Boolean!> getEvChargePortConnected();
+ method public androidx.car.app.hardware.common.CarValue<java.lang.Boolean!> getEvChargePortOpen();
+ }
+
+ public static final class EvStatus.Builder {
+ ctor public EvStatus.Builder();
+ method public androidx.car.app.hardware.info.EvStatus build();
+ method public androidx.car.app.hardware.info.EvStatus.Builder setEvChargePortConnected(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+ method public androidx.car.app.hardware.info.EvStatus.Builder setEvChargePortOpen(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+ }
+
@androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class Gyroscope {
ctor public Gyroscope(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float!>!>);
method public androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float!>!> getRotations();
@@ -493,6 +856,66 @@
}
+package androidx.car.app.messaging {
+
+ @androidx.car.app.annotations.ExperimentalCarApi public class MessagingServiceConstants {
+ field public static final String ACTION_HANDLE_CAR_MESSAGING = "androidx.car.app.messaging.action.HANDLE_CAR_MESSAGING";
+ }
+
+}
+
+package androidx.car.app.messaging.model {
+
+ @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public class CarMessage {
+ method public androidx.car.app.model.CarText getBody();
+ method public long getReceivedTimeEpochMillis();
+ method public androidx.core.app.Person? getSender();
+ method public boolean isRead();
+ }
+
+ public static final class CarMessage.Builder {
+ ctor public CarMessage.Builder();
+ method public androidx.car.app.messaging.model.CarMessage build();
+ method public androidx.car.app.messaging.model.CarMessage.Builder setBody(androidx.car.app.model.CarText);
+ method public androidx.car.app.messaging.model.CarMessage.Builder setRead(boolean);
+ method public androidx.car.app.messaging.model.CarMessage.Builder setReceivedTimeEpochMillis(long);
+ method public androidx.car.app.messaging.model.CarMessage.Builder setSender(androidx.core.app.Person?);
+ }
+
+ @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi public interface ConversationCallback {
+ method public void onMarkAsRead();
+ method public void onTextReply(String);
+ }
+
+ @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public interface ConversationCallbackDelegate {
+ method public void sendMarkAsRead(androidx.car.app.OnDoneCallback);
+ method public void sendTextReply(String, androidx.car.app.OnDoneCallback);
+ }
+
+ @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public class ConversationItem implements androidx.car.app.model.Item {
+ method public androidx.car.app.messaging.model.ConversationCallbackDelegate getConversationCallbackDelegate();
+ method public androidx.car.app.model.CarIcon? getIcon();
+ method public String getId();
+ method public java.util.List<androidx.car.app.messaging.model.CarMessage!> getMessages();
+ method public androidx.core.app.Person getSelf();
+ method public androidx.car.app.model.CarText getTitle();
+ method public boolean isGroupConversation();
+ }
+
+ public static final class ConversationItem.Builder {
+ ctor public ConversationItem.Builder();
+ method public androidx.car.app.messaging.model.ConversationItem build();
+ method public androidx.car.app.messaging.model.ConversationItem.Builder setConversationCallback(androidx.car.app.messaging.model.ConversationCallback);
+ method public androidx.car.app.messaging.model.ConversationItem.Builder setGroupConversation(boolean);
+ method public androidx.car.app.messaging.model.ConversationItem.Builder setIcon(androidx.car.app.model.CarIcon);
+ method public androidx.car.app.messaging.model.ConversationItem.Builder setId(String);
+ method public androidx.car.app.messaging.model.ConversationItem.Builder setMessages(java.util.List<androidx.car.app.messaging.model.CarMessage!>);
+ method public androidx.car.app.messaging.model.ConversationItem.Builder setSelf(androidx.core.app.Person);
+ method public androidx.car.app.messaging.model.ConversationItem.Builder setTitle(androidx.car.app.model.CarText);
+ }
+
+}
+
package androidx.car.app.model {
@androidx.car.app.annotations.CarProtocol public final class Action {
@@ -526,8 +949,8 @@
method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.model.Action.Builder setFlags(int);
method public androidx.car.app.model.Action.Builder setIcon(androidx.car.app.model.CarIcon);
method public androidx.car.app.model.Action.Builder setOnClickListener(androidx.car.app.model.OnClickListener);
- method public androidx.car.app.model.Action.Builder setTitle(CharSequence);
method public androidx.car.app.model.Action.Builder setTitle(androidx.car.app.model.CarText);
+ method public androidx.car.app.model.Action.Builder setTitle(CharSequence);
}
@androidx.car.app.annotations.CarProtocol public final class ActionStrip {
@@ -573,6 +996,20 @@
method public void sendDismiss(androidx.car.app.OnDoneCallback);
}
+ @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public class Badge {
+ method public androidx.car.app.model.CarColor? getBackgroundColor();
+ method public androidx.car.app.model.CarIcon? getIcon();
+ method public boolean hasDot();
+ }
+
+ public static final class Badge.Builder {
+ ctor public Badge.Builder();
+ method public androidx.car.app.model.Badge build();
+ method public androidx.car.app.model.Badge.Builder setBackgroundColor(androidx.car.app.model.CarColor);
+ method public androidx.car.app.model.Badge.Builder setHasDot(boolean);
+ method public androidx.car.app.model.Badge.Builder setIcon(androidx.car.app.model.CarIcon);
+ }
+
@androidx.car.app.annotations.CarProtocol public final class CarColor {
method public static androidx.car.app.model.CarColor createCustom(@ColorInt int, @ColorInt int);
method @ColorInt public int getColor();
@@ -613,8 +1050,8 @@
}
public static final class CarIcon.Builder {
- ctor public CarIcon.Builder(androidx.core.graphics.drawable.IconCompat);
ctor public CarIcon.Builder(androidx.car.app.model.CarIcon);
+ ctor public CarIcon.Builder(androidx.core.graphics.drawable.IconCompat);
method public androidx.car.app.model.CarIcon build();
method public androidx.car.app.model.CarIcon.Builder setTint(androidx.car.app.model.CarColor);
}
@@ -630,8 +1067,8 @@
}
@androidx.car.app.annotations.CarProtocol public final class CarLocation {
- method public static androidx.car.app.model.CarLocation create(double, double);
method public static androidx.car.app.model.CarLocation create(android.location.Location);
+ method public static androidx.car.app.model.CarLocation create(double, double);
method public double getLatitude();
method public double getLongitude();
}
@@ -665,9 +1102,9 @@
}
@androidx.car.app.annotations.CarProtocol public final class DateTimeWithZone {
+ method @RequiresApi(26) public static androidx.car.app.model.DateTimeWithZone create(java.time.ZonedDateTime);
method public static androidx.car.app.model.DateTimeWithZone create(long, @IntRange(from=0xffff02e0, to=64800) int, String);
method public static androidx.car.app.model.DateTimeWithZone create(long, java.util.TimeZone);
- method @RequiresApi(26) public static androidx.car.app.model.DateTimeWithZone create(java.time.ZonedDateTime);
method public long getTimeSinceEpochMillis();
method public int getZoneOffsetSeconds();
method public String? getZoneShortName();
@@ -692,8 +1129,8 @@
}
@androidx.car.app.annotations.CarProtocol public final class DurationSpan extends androidx.car.app.model.CarSpan {
- method public static androidx.car.app.model.DurationSpan create(long);
method @RequiresApi(26) public static androidx.car.app.model.DurationSpan create(java.time.Duration);
+ method public static androidx.car.app.model.DurationSpan create(long);
method public long getDurationSeconds();
}
@@ -703,6 +1140,7 @@
}
@androidx.car.app.annotations.CarProtocol public final class GridItem implements androidx.car.app.model.Item {
+ method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public androidx.car.app.model.Badge? getBadge();
method public androidx.car.app.model.CarIcon? getImage();
method public int getImageType();
method public androidx.car.app.model.OnClickDelegate? getOnClickDelegate();
@@ -717,28 +1155,41 @@
ctor public GridItem.Builder();
method public androidx.car.app.model.GridItem build();
method public androidx.car.app.model.GridItem.Builder setImage(androidx.car.app.model.CarIcon);
+ method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public androidx.car.app.model.GridItem.Builder setImage(androidx.car.app.model.CarIcon, androidx.car.app.model.Badge);
method public androidx.car.app.model.GridItem.Builder setImage(androidx.car.app.model.CarIcon, int);
+ method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public androidx.car.app.model.GridItem.Builder setImage(androidx.car.app.model.CarIcon, int, androidx.car.app.model.Badge);
method public androidx.car.app.model.GridItem.Builder setLoading(boolean);
method public androidx.car.app.model.GridItem.Builder setOnClickListener(androidx.car.app.model.OnClickListener);
- method public androidx.car.app.model.GridItem.Builder setText(CharSequence);
method public androidx.car.app.model.GridItem.Builder setText(androidx.car.app.model.CarText);
- method public androidx.car.app.model.GridItem.Builder setTitle(CharSequence);
+ method public androidx.car.app.model.GridItem.Builder setText(CharSequence);
method public androidx.car.app.model.GridItem.Builder setTitle(androidx.car.app.model.CarText);
+ method public androidx.car.app.model.GridItem.Builder setTitle(CharSequence);
}
@androidx.car.app.annotations.CarProtocol public final class GridTemplate implements androidx.car.app.model.Template {
method public androidx.car.app.model.ActionStrip? getActionStrip();
+ method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(6) public java.util.List<androidx.car.app.model.Action!> getActions();
method public androidx.car.app.model.Action? getHeaderAction();
+ method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public int getItemImageShape();
+ method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public int getItemSize();
method public androidx.car.app.model.ItemList? getSingleList();
method public androidx.car.app.model.CarText? getTitle();
method public boolean isLoading();
+ field @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public static final int ITEM_IMAGE_SHAPE_CIRCLE = 2; // 0x2
+ field @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public static final int ITEM_IMAGE_SHAPE_UNSET = 1; // 0x1
+ field @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public static final int ITEM_SIZE_LARGE = 4; // 0x4
+ field @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public static final int ITEM_SIZE_MEDIUM = 2; // 0x2
+ field @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public static final int ITEM_SIZE_SMALL = 1; // 0x1
}
public static final class GridTemplate.Builder {
ctor public GridTemplate.Builder();
+ method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(6) public androidx.car.app.model.GridTemplate.Builder addAction(androidx.car.app.model.Action);
method public androidx.car.app.model.GridTemplate build();
method public androidx.car.app.model.GridTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
method public androidx.car.app.model.GridTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
+ method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public androidx.car.app.model.GridTemplate.Builder setItemImageShape(int);
+ method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public androidx.car.app.model.GridTemplate.Builder setItemSize(int);
method public androidx.car.app.model.GridTemplate.Builder setLoading(boolean);
method public androidx.car.app.model.GridTemplate.Builder setSingleList(androidx.car.app.model.ItemList);
method public androidx.car.app.model.GridTemplate.Builder setTitle(CharSequence);
@@ -755,8 +1206,8 @@
method public androidx.car.app.model.Header.Builder addEndHeaderAction(androidx.car.app.model.Action);
method public androidx.car.app.model.Header build();
method public androidx.car.app.model.Header.Builder setStartHeaderAction(androidx.car.app.model.Action);
- method public androidx.car.app.model.Header.Builder setTitle(CharSequence);
method public androidx.car.app.model.Header.Builder setTitle(androidx.car.app.model.CarText);
+ method public androidx.car.app.model.Header.Builder setTitle(CharSequence);
}
@androidx.car.app.annotations.RequiresCarApi(2) public interface InputCallback {
@@ -778,12 +1229,14 @@
method public androidx.car.app.model.OnItemVisibilityChangedDelegate? getOnItemVisibilityChangedDelegate();
method public androidx.car.app.model.OnSelectedDelegate? getOnSelectedDelegate();
method public int getSelectedIndex();
+ method @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.model.ItemList.Builder toBuilder();
}
public static final class ItemList.Builder {
ctor public ItemList.Builder();
method public androidx.car.app.model.ItemList.Builder addItem(androidx.car.app.model.Item);
method public androidx.car.app.model.ItemList build();
+ method @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.model.ItemList.Builder clearItems();
method public androidx.car.app.model.ItemList.Builder setNoItemsMessage(CharSequence);
method public androidx.car.app.model.ItemList.Builder setOnItemsVisibilityChangedListener(androidx.car.app.model.ItemList.OnItemVisibilityChangedListener);
method public androidx.car.app.model.ItemList.Builder setOnSelectedListener(androidx.car.app.model.ItemList.OnSelectedListener);
@@ -800,17 +1253,21 @@
@androidx.car.app.annotations.CarProtocol public final class ListTemplate implements androidx.car.app.model.Template {
method public androidx.car.app.model.ActionStrip? getActionStrip();
+ method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(6) public java.util.List<androidx.car.app.model.Action!> getActions();
method public androidx.car.app.model.Action? getHeaderAction();
method public java.util.List<androidx.car.app.model.SectionedItemList!> getSectionedLists();
method public androidx.car.app.model.ItemList? getSingleList();
method public androidx.car.app.model.CarText? getTitle();
method public boolean isLoading();
+ method @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.model.ListTemplate.Builder toBuilder();
}
public static final class ListTemplate.Builder {
ctor public ListTemplate.Builder();
+ method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(6) public androidx.car.app.model.ListTemplate.Builder addAction(androidx.car.app.model.Action);
method public androidx.car.app.model.ListTemplate.Builder addSectionedList(androidx.car.app.model.SectionedItemList);
method public androidx.car.app.model.ListTemplate build();
+ method @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.model.ListTemplate.Builder clearSectionedLists();
method public androidx.car.app.model.ListTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
method public androidx.car.app.model.ListTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
method public androidx.car.app.model.ListTemplate.Builder setLoading(boolean);
@@ -847,13 +1304,13 @@
}
public static final class MessageTemplate.Builder {
- ctor public MessageTemplate.Builder(CharSequence);
ctor public MessageTemplate.Builder(androidx.car.app.model.CarText);
+ ctor public MessageTemplate.Builder(CharSequence);
method public androidx.car.app.model.MessageTemplate.Builder addAction(androidx.car.app.model.Action);
method public androidx.car.app.model.MessageTemplate build();
method @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.model.MessageTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
- method public androidx.car.app.model.MessageTemplate.Builder setDebugMessage(Throwable);
method public androidx.car.app.model.MessageTemplate.Builder setDebugMessage(String);
+ method public androidx.car.app.model.MessageTemplate.Builder setDebugMessage(Throwable);
method public androidx.car.app.model.MessageTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
method public androidx.car.app.model.MessageTemplate.Builder setIcon(androidx.car.app.model.CarIcon);
method @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.model.MessageTemplate.Builder setLoading(boolean);
@@ -970,8 +1427,8 @@
method public androidx.car.app.model.PlaceListMapTemplate.Builder setItemList(androidx.car.app.model.ItemList);
method public androidx.car.app.model.PlaceListMapTemplate.Builder setLoading(boolean);
method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.PlaceListMapTemplate.Builder setOnContentRefreshListener(androidx.car.app.model.OnContentRefreshListener);
- method public androidx.car.app.model.PlaceListMapTemplate.Builder setTitle(CharSequence);
method public androidx.car.app.model.PlaceListMapTemplate.Builder setTitle(androidx.car.app.model.CarText);
+ method public androidx.car.app.model.PlaceListMapTemplate.Builder setTitle(CharSequence);
}
@androidx.car.app.annotations.CarProtocol public final class PlaceMarker {
@@ -1014,8 +1471,8 @@
public static final class Row.Builder {
ctor public Row.Builder();
method @androidx.car.app.annotations.RequiresCarApi(6) public androidx.car.app.model.Row.Builder addAction(androidx.car.app.model.Action);
- method public androidx.car.app.model.Row.Builder addText(CharSequence);
method public androidx.car.app.model.Row.Builder addText(androidx.car.app.model.CarText);
+ method public androidx.car.app.model.Row.Builder addText(CharSequence);
method public androidx.car.app.model.Row build();
method public androidx.car.app.model.Row.Builder setBrowsable(boolean);
method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.Row.Builder setEnabled(boolean);
@@ -1024,8 +1481,8 @@
method public androidx.car.app.model.Row.Builder setMetadata(androidx.car.app.model.Metadata);
method @IntRange(from=0) @androidx.car.app.annotations.RequiresCarApi(6) public androidx.car.app.model.Row.Builder setNumericDecoration(int);
method public androidx.car.app.model.Row.Builder setOnClickListener(androidx.car.app.model.OnClickListener);
- method public androidx.car.app.model.Row.Builder setTitle(CharSequence);
method public androidx.car.app.model.Row.Builder setTitle(androidx.car.app.model.CarText);
+ method public androidx.car.app.model.Row.Builder setTitle(CharSequence);
method public androidx.car.app.model.Row.Builder setToggle(androidx.car.app.model.Toggle);
}
@@ -1108,8 +1565,8 @@
}
public static final class TabTemplate.Builder {
- ctor public TabTemplate.Builder(androidx.car.app.model.TabTemplate.TabCallback);
ctor public TabTemplate.Builder(androidx.car.app.model.TabTemplate);
+ ctor public TabTemplate.Builder(androidx.car.app.model.TabTemplate.TabCallback);
method public androidx.car.app.model.TabTemplate.Builder addTab(androidx.car.app.model.Tab);
method public androidx.car.app.model.TabTemplate build();
method public androidx.car.app.model.TabTemplate.Builder setActiveTabContentId(String);
@@ -1398,12 +1855,12 @@
}
public static final class MessageInfo.Builder {
- ctor public MessageInfo.Builder(CharSequence);
ctor public MessageInfo.Builder(androidx.car.app.model.CarText);
+ ctor public MessageInfo.Builder(CharSequence);
method public androidx.car.app.navigation.model.MessageInfo build();
method public androidx.car.app.navigation.model.MessageInfo.Builder setImage(androidx.car.app.model.CarIcon);
- method public androidx.car.app.navigation.model.MessageInfo.Builder setText(CharSequence);
method public androidx.car.app.navigation.model.MessageInfo.Builder setText(androidx.car.app.model.CarText);
+ method public androidx.car.app.navigation.model.MessageInfo.Builder setText(CharSequence);
method public androidx.car.app.navigation.model.MessageInfo.Builder setTitle(CharSequence);
}
@@ -1462,8 +1919,8 @@
method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setMapActionStrip(androidx.car.app.model.ActionStrip);
method public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setOnContentRefreshListener(androidx.car.app.model.OnContentRefreshListener);
method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setPanModeListener(androidx.car.app.navigation.model.PanModeListener);
- method @Deprecated public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setTitle(CharSequence);
method @Deprecated public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setTitle(androidx.car.app.model.CarText);
+ method @Deprecated public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setTitle(CharSequence);
}
@androidx.car.app.annotations.CarProtocol public final class RoutePreviewNavigationTemplate implements androidx.car.app.model.Template {
@@ -1489,8 +1946,8 @@
method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setMapActionStrip(androidx.car.app.model.ActionStrip);
method public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setNavigateAction(androidx.car.app.model.Action);
method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setPanModeListener(androidx.car.app.navigation.model.PanModeListener);
- method @Deprecated public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setTitle(CharSequence);
method @Deprecated public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setTitle(androidx.car.app.model.CarText);
+ method @Deprecated public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setTitle(CharSequence);
}
@androidx.car.app.annotations.CarProtocol public final class RoutingInfo implements androidx.car.app.navigation.model.NavigationTemplate.NavigationInfo {
@@ -1520,8 +1977,8 @@
public static final class Step.Builder {
ctor public Step.Builder();
- ctor public Step.Builder(CharSequence);
ctor public Step.Builder(androidx.car.app.model.CarText);
+ ctor public Step.Builder(CharSequence);
method public androidx.car.app.navigation.model.Step.Builder addLane(androidx.car.app.navigation.model.Lane);
method public androidx.car.app.navigation.model.Step build();
method public androidx.car.app.navigation.model.Step.Builder setCue(CharSequence);
@@ -1647,8 +2104,8 @@
}
public class BundlerException extends java.lang.Exception {
- ctor public BundlerException(String?, Throwable);
ctor public BundlerException(String?);
+ ctor public BundlerException(String?, Throwable);
}
}
diff --git a/car/app/app/api/public_plus_experimental_current.txt b/car/app/app/api/public_plus_experimental_current.txt
deleted file mode 100644
index 0263505..0000000
--- a/car/app/app/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,2176 +0,0 @@
-// Signature format: 4.0
-package androidx.car.app {
-
- @androidx.car.app.annotations.CarProtocol public final class AppInfo {
- ctor @VisibleForTesting public AppInfo(int, int, String);
- method public int getLatestCarAppApiLevel();
- method public String getLibraryDisplayVersion();
- method public int getMinCarAppApiLevel();
- field public static final String MIN_API_LEVEL_METADATA_KEY = "androidx.car.app.minCarApiLevel";
- }
-
- public class AppManager implements androidx.car.app.managers.Manager {
- method @androidx.car.app.annotations.RequiresCarApi(5) public void dismissAlert(int);
- method public void invalidate();
- method public void setSurfaceCallback(androidx.car.app.SurfaceCallback?);
- method @androidx.car.app.annotations.RequiresCarApi(5) public void showAlert(androidx.car.app.model.Alert);
- method public void showToast(CharSequence, int);
- }
-
- public final class CarAppPermission {
- method public static void checkHasLibraryPermission(android.content.Context, String);
- method public static void checkHasPermission(android.content.Context, String);
- field public static final String ACCESS_SURFACE = "androidx.car.app.ACCESS_SURFACE";
- field public static final String MAP_TEMPLATES = "androidx.car.app.MAP_TEMPLATES";
- field public static final String NAVIGATION_TEMPLATES = "androidx.car.app.NAVIGATION_TEMPLATES";
- }
-
- public abstract class CarAppService extends android.app.Service {
- ctor public CarAppService();
- method public abstract androidx.car.app.validation.HostValidator createHostValidator();
- method @CallSuper public final void dump(java.io.FileDescriptor, java.io.PrintWriter, String![]?);
- method @Deprecated public final androidx.car.app.Session? getCurrentSession();
- method public final androidx.car.app.HostInfo? getHostInfo();
- method public final androidx.car.app.Session? getSession(androidx.car.app.SessionInfo);
- method @CallSuper public final android.os.IBinder onBind(android.content.Intent);
- method public androidx.car.app.Session onCreateSession();
- method @androidx.car.app.annotations.RequiresCarApi(6) public androidx.car.app.Session onCreateSession(androidx.car.app.SessionInfo);
- method public final boolean onUnbind(android.content.Intent);
- field @androidx.car.app.annotations.ExperimentalCarApi public static final String CATEGORY_CALLING_APP = "androidx.car.app.category.CALLING";
- field @Deprecated public static final String CATEGORY_CHARGING_APP = "androidx.car.app.category.CHARGING";
- field @androidx.car.app.annotations.RequiresCarApi(6) public static final String CATEGORY_FEATURE_CLUSTER = "androidx.car.app.category.FEATURE_CLUSTER";
- field @androidx.car.app.annotations.ExperimentalCarApi public static final String CATEGORY_IOT_APP = "androidx.car.app.category.IOT";
- field @androidx.car.app.annotations.ExperimentalCarApi public static final String CATEGORY_MESSAGING_APP = "androidx.car.app.category.MESSAGING";
- field public static final String CATEGORY_NAVIGATION_APP = "androidx.car.app.category.NAVIGATION";
- field @Deprecated public static final String CATEGORY_PARKING_APP = "androidx.car.app.category.PARKING";
- field public static final String CATEGORY_POI_APP = "androidx.car.app.category.POI";
- field @androidx.car.app.annotations.ExperimentalCarApi public static final String CATEGORY_SETTINGS_APP = "androidx.car.app.category.SETTINGS";
- field @androidx.car.app.annotations.ExperimentalCarApi public static final String CATEGORY_WEATHER_APP = "androidx.car.app.category.WEATHER";
- field public static final String SERVICE_INTERFACE = "androidx.car.app.CarAppService";
- }
-
- public class CarContext extends android.content.ContextWrapper {
- method public void finishCarApp();
- method @androidx.car.app.annotations.RequiresCarApi(2) public android.content.ComponentName? getCallingComponent();
- method public int getCarAppApiLevel();
- method public Object getCarService(String);
- method public <T> T getCarService(Class<T!>);
- method public String getCarServiceName(Class<?>);
- method public androidx.car.app.HostInfo? getHostInfo();
- method public androidx.activity.OnBackPressedDispatcher getOnBackPressedDispatcher();
- method public boolean isDarkMode();
- method public void requestPermissions(java.util.List<java.lang.String!>, androidx.car.app.OnRequestPermissionsListener);
- method public void requestPermissions(java.util.List<java.lang.String!>, java.util.concurrent.Executor, androidx.car.app.OnRequestPermissionsListener);
- method @androidx.car.app.annotations.RequiresCarApi(2) public void setCarAppResult(int, android.content.Intent?);
- method public void startCarApp(android.content.Intent);
- method @Deprecated public static void startCarApp(android.content.Intent, android.content.Intent);
- field public static final String ACTION_NAVIGATE = "androidx.car.app.action.NAVIGATE";
- field public static final String APP_SERVICE = "app";
- field public static final String CAR_SERVICE = "car";
- field @androidx.car.app.annotations.RequiresCarApi(2) public static final String CONSTRAINT_SERVICE = "constraints";
- field public static final String EXTRA_START_CAR_APP_BINDER_KEY = "androidx.car.app.extra.START_CAR_APP_BINDER_KEY";
- field @androidx.car.app.annotations.RequiresCarApi(3) public static final String HARDWARE_SERVICE = "hardware";
- field public static final String NAVIGATION_SERVICE = "navigation";
- field public static final String SCREEN_SERVICE = "screen";
- field public static final String SUGGESTION_SERVICE = "suggestion";
- }
-
- public final class CarToast {
- method public static androidx.car.app.CarToast makeText(androidx.car.app.CarContext, @StringRes int, int);
- method public static androidx.car.app.CarToast makeText(androidx.car.app.CarContext, CharSequence, int);
- method public void setDuration(int);
- method public void setText(@StringRes int);
- method public void setText(CharSequence);
- method public void show();
- field public static final int LENGTH_LONG = 1; // 0x1
- field public static final int LENGTH_SHORT = 0; // 0x0
- }
-
- @androidx.car.app.annotations.CarProtocol public final class FailureResponse {
- ctor public FailureResponse(Throwable);
- method public int getErrorType();
- method public String getStackTrace();
- field public static final int BUNDLER_EXCEPTION = 1; // 0x1
- field public static final int ILLEGAL_STATE_EXCEPTION = 2; // 0x2
- field public static final int INVALID_PARAMETER_EXCEPTION = 3; // 0x3
- field public static final int REMOTE_EXCEPTION = 6; // 0x6
- field public static final int RUNTIME_EXCEPTION = 5; // 0x5
- field public static final int SECURITY_EXCEPTION = 4; // 0x4
- field public static final int UNKNOWN_ERROR = 0; // 0x0
- }
-
- @androidx.car.app.annotations.CarProtocol public final class HandshakeInfo {
- ctor public HandshakeInfo(String, int);
- method public int getHostCarAppApiLevel();
- method public String getHostPackageName();
- }
-
- public final class HostException extends java.lang.RuntimeException {
- ctor public HostException(String);
- ctor public HostException(String, Throwable);
- ctor public HostException(Throwable);
- }
-
- public final class HostInfo {
- ctor public HostInfo(String, int);
- method public String getPackageName();
- method public int getUid();
- }
-
- @androidx.car.app.annotations.CarProtocol public interface OnDoneCallback {
- method public default void onFailure(androidx.car.app.serialization.Bundleable);
- method public default void onSuccess(androidx.car.app.serialization.Bundleable?);
- }
-
- public interface OnRequestPermissionsListener {
- method public void onRequestPermissionsResult(java.util.List<java.lang.String!>, java.util.List<java.lang.String!>);
- }
-
- public interface OnScreenResultListener {
- method public void onScreenResult(Object?);
- }
-
- public abstract class Screen implements androidx.lifecycle.LifecycleOwner {
- ctor protected Screen(androidx.car.app.CarContext);
- method public final void finish();
- method public final androidx.car.app.CarContext getCarContext();
- method public final androidx.lifecycle.Lifecycle getLifecycle();
- method public String? getMarker();
- method public final androidx.car.app.ScreenManager getScreenManager();
- method public final void invalidate();
- method public abstract androidx.car.app.model.Template onGetTemplate();
- method public void setMarker(String?);
- method public void setResult(Object?);
- }
-
- @MainThread public class ScreenManager implements androidx.car.app.managers.Manager {
- method public java.util.Collection<androidx.car.app.Screen!> getScreenStack();
- method public int getStackSize();
- method public androidx.car.app.Screen getTop();
- method public void pop();
- method public void popTo(String);
- method public void popToRoot();
- method public void push(androidx.car.app.Screen);
- method public void pushForResult(androidx.car.app.Screen, androidx.car.app.OnScreenResultListener);
- method public void remove(androidx.car.app.Screen);
- }
-
- public abstract class Session implements androidx.lifecycle.LifecycleOwner {
- ctor public Session();
- method public final androidx.car.app.CarContext getCarContext();
- method public androidx.lifecycle.Lifecycle getLifecycle();
- method public void onCarConfigurationChanged(android.content.res.Configuration);
- method public abstract androidx.car.app.Screen onCreateScreen(android.content.Intent);
- method public void onNewIntent(android.content.Intent);
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(6) public class SessionInfo {
- ctor public SessionInfo(int, String);
- method public int getDisplayType();
- method public String getSessionId();
- method public java.util.Set<java.lang.Class<? extends androidx.car.app.model.Template>!>? getSupportedTemplates(int);
- field public static final androidx.car.app.SessionInfo DEFAULT_SESSION_INFO;
- field public static final int DISPLAY_TYPE_CLUSTER = 1; // 0x1
- field public static final int DISPLAY_TYPE_MAIN = 0; // 0x0
- }
-
- public class SessionInfoIntentEncoder {
- method public static boolean containsSessionInfo(android.content.Intent);
- method public static androidx.car.app.SessionInfo decode(android.content.Intent);
- method public static void encode(androidx.car.app.SessionInfo, android.content.Intent);
- }
-
- public interface SurfaceCallback {
- method @androidx.car.app.annotations.RequiresCarApi(5) public default void onClick(float, float);
- method @androidx.car.app.annotations.RequiresCarApi(2) public default void onFling(float, float);
- method @androidx.car.app.annotations.RequiresCarApi(2) public default void onScale(float, float, float);
- method @androidx.car.app.annotations.RequiresCarApi(2) public default void onScroll(float, float);
- method public default void onStableAreaChanged(android.graphics.Rect);
- method public default void onSurfaceAvailable(androidx.car.app.SurfaceContainer);
- method public default void onSurfaceDestroyed(androidx.car.app.SurfaceContainer);
- method public default void onVisibleAreaChanged(android.graphics.Rect);
- }
-
- @androidx.car.app.annotations.CarProtocol public final class SurfaceContainer {
- ctor public SurfaceContainer(android.view.Surface?, int, int, int);
- method public int getDpi();
- method public int getHeight();
- method public android.view.Surface? getSurface();
- method public int getWidth();
- }
-
-}
-
-package androidx.car.app.annotations {
-
- @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.PARAMETER}) public @interface CarProtocol {
- }
-
- @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD}) public @interface ExperimentalCarApi {
- }
-
- @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD}) public @interface RequiresCarApi {
- method public abstract int value();
- }
-
-}
-
-package androidx.car.app.connection {
-
- public final class CarConnection {
- ctor @MainThread public CarConnection(android.content.Context);
- method public androidx.lifecycle.LiveData<java.lang.Integer!> getType();
- field public static final String ACTION_CAR_CONNECTION_UPDATED = "androidx.car.app.connection.action.CAR_CONNECTION_UPDATED";
- field public static final String CAR_CONNECTION_STATE = "CarConnectionState";
- field public static final int CONNECTION_TYPE_NATIVE = 1; // 0x1
- field public static final int CONNECTION_TYPE_NOT_CONNECTED = 0; // 0x0
- field public static final int CONNECTION_TYPE_PROJECTION = 2; // 0x2
- }
-
-}
-
-package androidx.car.app.constraints {
-
- @androidx.car.app.annotations.RequiresCarApi(2) public class ConstraintManager implements androidx.car.app.managers.Manager {
- method public int getContentLimit(int);
- method @androidx.car.app.annotations.RequiresCarApi(6) public boolean isAppDrivenRefreshEnabled();
- field public static final int CONTENT_LIMIT_TYPE_GRID = 1; // 0x1
- field public static final int CONTENT_LIMIT_TYPE_LIST = 0; // 0x0
- field public static final int CONTENT_LIMIT_TYPE_PANE = 4; // 0x4
- field public static final int CONTENT_LIMIT_TYPE_PLACE_LIST = 2; // 0x2
- field public static final int CONTENT_LIMIT_TYPE_ROUTE_LIST = 3; // 0x3
- }
-
-}
-
-package androidx.car.app.hardware {
-
- @MainThread @androidx.car.app.annotations.RequiresCarApi(3) public interface CarHardwareManager extends androidx.car.app.managers.Manager {
- method @androidx.car.app.annotations.ExperimentalCarApi public default androidx.car.app.hardware.climate.CarClimate getCarClimate();
- method public default androidx.car.app.hardware.info.CarInfo getCarInfo();
- method public default androidx.car.app.hardware.info.CarSensors getCarSensors();
- }
-
-}
-
-package androidx.car.app.hardware.climate {
-
- @androidx.car.app.annotations.ExperimentalCarApi public final class CabinTemperatureProfile {
- method public java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Float!,java.lang.Float!>!> getCarZoneSetsToCabinCelsiusTemperatureRanges();
- method public float getCelsiusSupportedIncrement();
- method public float getFahrenheitSupportedIncrement();
- method public android.util.Pair<java.lang.Float!,java.lang.Float!> getSupportedMinMaxCelsiusRange();
- method public android.util.Pair<java.lang.Float!,java.lang.Float!> getSupportedMinMaxFahrenheitRange();
- method public boolean hasCarZoneSetsToCabinCelsiusTemperatureRanges();
- method public boolean hasCelsiusSupportedIncrement();
- method public boolean hasFahrenheitSupportedIncrement();
- method public boolean hasSupportedMinMaxCelsiusRange();
- method public boolean hasSupportedMinMaxFahrenheitRange();
- }
-
- public static final class CabinTemperatureProfile.Builder {
- ctor public CabinTemperatureProfile.Builder();
- method public androidx.car.app.hardware.climate.CabinTemperatureProfile build();
- method public androidx.car.app.hardware.climate.CabinTemperatureProfile.Builder setCarZoneSetsToCabinCelsiusTemperatureRanges(java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Float!,java.lang.Float!>!>);
- method public androidx.car.app.hardware.climate.CabinTemperatureProfile.Builder setCelsiusSupportedIncrement(float);
- method public androidx.car.app.hardware.climate.CabinTemperatureProfile.Builder setFahrenheitSupportedIncrement(float);
- method public androidx.car.app.hardware.climate.CabinTemperatureProfile.Builder setSupportedMinMaxCelsiusRange(android.util.Pair<java.lang.Float!,java.lang.Float!>);
- method public androidx.car.app.hardware.climate.CabinTemperatureProfile.Builder setSupportedMinMaxFahrenheitRange(android.util.Pair<java.lang.Float!,java.lang.Float!>);
- }
-
- @MainThread @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public interface CarClimate {
- method public void fetchClimateProfile(java.util.concurrent.Executor, androidx.car.app.hardware.climate.ClimateProfileRequest, androidx.car.app.hardware.climate.CarClimateProfileCallback);
- method public void registerClimateStateCallback(java.util.concurrent.Executor, androidx.car.app.hardware.climate.RegisterClimateStateRequest, androidx.car.app.hardware.climate.CarClimateStateCallback);
- method public <E> void setClimateState(java.util.concurrent.Executor, androidx.car.app.hardware.climate.ClimateStateRequest<E!>, androidx.car.app.hardware.common.CarSetOperationStatusCallback);
- method public void unregisterClimateStateCallback(androidx.car.app.hardware.climate.CarClimateStateCallback);
- }
-
- @MainThread @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public final class CarClimateFeature {
- method public java.util.List<androidx.car.app.hardware.common.CarZone!> getCarZones();
- method public int getFeature();
- }
-
- public static final class CarClimateFeature.Builder {
- ctor public CarClimateFeature.Builder(int);
- method public androidx.car.app.hardware.climate.CarClimateFeature.Builder addCarZones(androidx.car.app.hardware.common.CarZone!...);
- method public androidx.car.app.hardware.climate.CarClimateFeature build();
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public interface CarClimateProfileCallback {
- method public default void onCabinTemperatureProfileAvailable(androidx.car.app.hardware.climate.CabinTemperatureProfile);
- method public default void onCarZoneMappingInfoProfileAvailable(androidx.car.app.hardware.climate.CarZoneMappingInfoProfile);
- method public default void onDefrosterProfileAvailable(androidx.car.app.hardware.climate.DefrosterProfile);
- method public default void onElectricDefrosterProfileAvailable(androidx.car.app.hardware.climate.ElectricDefrosterProfile);
- method public default void onFanDirectionProfileAvailable(androidx.car.app.hardware.climate.FanDirectionProfile);
- method public default void onFanSpeedLevelProfileAvailable(androidx.car.app.hardware.climate.FanSpeedLevelProfile);
- method public default void onHvacAcProfileAvailable(androidx.car.app.hardware.climate.HvacAcProfile);
- method public default void onHvacAutoModeProfileAvailable(androidx.car.app.hardware.climate.HvacAutoModeProfile);
- method public default void onHvacAutoRecirculationProfileAvailable(androidx.car.app.hardware.climate.HvacAutoRecirculationProfile);
- method public default void onHvacDualModeProfileAvailable(androidx.car.app.hardware.climate.HvacDualModeProfile);
- method public default void onHvacMaxAcModeProfileAvailable(androidx.car.app.hardware.climate.HvacMaxAcModeProfile);
- method public default void onHvacPowerProfileAvailable(androidx.car.app.hardware.climate.HvacPowerProfile);
- method public default void onHvacRecirculationProfileAvailable(androidx.car.app.hardware.climate.HvacRecirculationProfile);
- method public default void onMaxDefrosterProfileAvailable(androidx.car.app.hardware.climate.MaxDefrosterProfile);
- method public default void onSeatTemperatureLevelProfileAvailable(androidx.car.app.hardware.climate.SeatTemperatureProfile);
- method public default void onSeatVentilationLevelProfileAvailable(androidx.car.app.hardware.climate.SeatVentilationProfile);
- method public default void onSteeringWheelHeatProfileAvailable(androidx.car.app.hardware.climate.SteeringWheelHeatProfile);
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public interface CarClimateStateCallback {
- method public default void onCabinTemperatureStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Float!>);
- method public default void onDefrosterStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
- method public default void onElectricDefrosterStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
- method public default void onFanDirectionStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
- method public default void onFanSpeedLevelStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
- method public default void onHvacAcStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
- method public default void onHvacAutoModeStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
- method public default void onHvacAutoRecirculationStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
- method public default void onHvacDualModeStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
- method public default void onHvacMaxAcModeStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
- method public default void onHvacPowerStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
- method public default void onHvacRecirculationStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
- method public default void onMaxDefrosterStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
- method public default void onSeatTemperatureLevelStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
- method public default void onSeatVentilationLevelStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
- method public default void onSteeringWheelHeatStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
- }
-
- @androidx.car.app.annotations.ExperimentalCarApi public final class CarZoneMappingInfoProfile {
- method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
- }
-
- public static final class CarZoneMappingInfoProfile.Builder {
- ctor public CarZoneMappingInfoProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
- method public androidx.car.app.hardware.climate.CarZoneMappingInfoProfile build();
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public final class ClimateProfileRequest {
- method public java.util.Set<java.lang.Integer!> getAllClimateProfiles();
- method public java.util.List<androidx.car.app.hardware.climate.CarClimateFeature!> getClimateProfileFeatures();
- field public static final int FEATURE_CABIN_TEMPERATURE = 4; // 0x4
- field public static final int FEATURE_CAR_ZONE_MAPPING = 17; // 0x11
- field public static final int FEATURE_FAN_DIRECTION = 6; // 0x6
- field public static final int FEATURE_FAN_SPEED = 5; // 0x5
- field public static final int FEATURE_HVAC_AC = 2; // 0x2
- field public static final int FEATURE_HVAC_AUTO_MODE = 12; // 0xc
- field public static final int FEATURE_HVAC_AUTO_RECIRCULATION = 11; // 0xb
- field public static final int FEATURE_HVAC_DEFROSTER = 14; // 0xe
- field public static final int FEATURE_HVAC_DUAL_MODE = 13; // 0xd
- field public static final int FEATURE_HVAC_ELECTRIC_DEFROSTER = 16; // 0x10
- field public static final int FEATURE_HVAC_MAX_AC = 3; // 0x3
- field public static final int FEATURE_HVAC_MAX_DEFROSTER = 15; // 0xf
- field public static final int FEATURE_HVAC_POWER = 1; // 0x1
- field public static final int FEATURE_HVAC_RECIRCULATION = 10; // 0xa
- field public static final int FEATURE_SEAT_TEMPERATURE_LEVEL = 7; // 0x7
- field public static final int FEATURE_SEAT_VENTILATION_LEVEL = 8; // 0x8
- field public static final int FEATURE_STEERING_WHEEL_HEAT = 9; // 0x9
- }
-
- public static final class ClimateProfileRequest.Builder {
- ctor public ClimateProfileRequest.Builder();
- method public androidx.car.app.hardware.climate.ClimateProfileRequest.Builder addClimateProfileFeatures(androidx.car.app.hardware.climate.CarClimateFeature!...);
- method public androidx.car.app.hardware.climate.ClimateProfileRequest build();
- method public androidx.car.app.hardware.climate.ClimateProfileRequest.Builder setAllClimateProfiles();
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public final class ClimateStateRequest<T> {
- method public java.util.List<androidx.car.app.hardware.common.CarZone!> getCarZones();
- method public int getRequestedFeature();
- method public T getRequestedValue();
- }
-
- public static final class ClimateStateRequest.Builder<T> {
- ctor public ClimateStateRequest.Builder(int, T!);
- method public androidx.car.app.hardware.climate.ClimateStateRequest.Builder<T!> addCarZones(androidx.car.app.hardware.common.CarZone);
- method public androidx.car.app.hardware.climate.ClimateStateRequest<T!> build();
- }
-
- @androidx.car.app.annotations.ExperimentalCarApi public final class DefrosterProfile {
- method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
- }
-
- public static final class DefrosterProfile.Builder {
- ctor public DefrosterProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
- method public androidx.car.app.hardware.climate.DefrosterProfile build();
- }
-
- @androidx.car.app.annotations.ExperimentalCarApi public final class ElectricDefrosterProfile {
- method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
- }
-
- public static final class ElectricDefrosterProfile.Builder {
- ctor public ElectricDefrosterProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
- method public androidx.car.app.hardware.climate.ElectricDefrosterProfile build();
- }
-
- @androidx.car.app.annotations.ExperimentalCarApi public final class FanDirectionProfile {
- method public java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,java.util.Set<java.lang.Integer!>!> getCarZoneSetsToFanDirectionValues();
- }
-
- public static final class FanDirectionProfile.Builder {
- ctor public FanDirectionProfile.Builder(java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,java.util.Set<java.lang.Integer!>!>);
- method public androidx.car.app.hardware.climate.FanDirectionProfile build();
- }
-
- @androidx.car.app.annotations.ExperimentalCarApi public final class FanSpeedLevelProfile {
- method public java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!> getCarZoneSetsToFanSpeedLevelRanges();
- }
-
- public static final class FanSpeedLevelProfile.Builder {
- ctor public FanSpeedLevelProfile.Builder(java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!>);
- method public androidx.car.app.hardware.climate.FanSpeedLevelProfile build();
- }
-
- @androidx.car.app.annotations.ExperimentalCarApi public final class HvacAcProfile {
- method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
- }
-
- public static final class HvacAcProfile.Builder {
- ctor public HvacAcProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
- method public androidx.car.app.hardware.climate.HvacAcProfile build();
- }
-
- @androidx.car.app.annotations.ExperimentalCarApi public final class HvacAutoModeProfile {
- method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
- }
-
- public static final class HvacAutoModeProfile.Builder {
- ctor public HvacAutoModeProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
- method public androidx.car.app.hardware.climate.HvacAutoModeProfile build();
- }
-
- @androidx.car.app.annotations.ExperimentalCarApi public final class HvacAutoRecirculationProfile {
- method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
- }
-
- public static final class HvacAutoRecirculationProfile.Builder {
- ctor public HvacAutoRecirculationProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
- method public androidx.car.app.hardware.climate.HvacAutoRecirculationProfile build();
- }
-
- @androidx.car.app.annotations.ExperimentalCarApi public final class HvacDualModeProfile {
- method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
- }
-
- public static final class HvacDualModeProfile.Builder {
- ctor public HvacDualModeProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
- method public androidx.car.app.hardware.climate.HvacDualModeProfile build();
- }
-
- @androidx.car.app.annotations.ExperimentalCarApi public final class HvacMaxAcModeProfile {
- method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
- }
-
- public static final class HvacMaxAcModeProfile.Builder {
- ctor public HvacMaxAcModeProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
- method public androidx.car.app.hardware.climate.HvacMaxAcModeProfile build();
- }
-
- @androidx.car.app.annotations.ExperimentalCarApi public final class HvacPowerProfile {
- method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
- }
-
- public static final class HvacPowerProfile.Builder {
- ctor public HvacPowerProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
- method public androidx.car.app.hardware.climate.HvacPowerProfile build();
- }
-
- @androidx.car.app.annotations.ExperimentalCarApi public final class HvacRecirculationProfile {
- method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZones();
- }
-
- public static final class HvacRecirculationProfile.Builder {
- ctor public HvacRecirculationProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
- method public androidx.car.app.hardware.climate.HvacRecirculationProfile build();
- }
-
- @androidx.car.app.annotations.ExperimentalCarApi public final class MaxDefrosterProfile {
- method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
- }
-
- public static final class MaxDefrosterProfile.Builder {
- ctor public MaxDefrosterProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
- method public androidx.car.app.hardware.climate.MaxDefrosterProfile build();
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public final class RegisterClimateStateRequest {
- method public java.util.List<androidx.car.app.hardware.climate.CarClimateFeature!> getClimateRegisterFeatures();
- }
-
- public static final class RegisterClimateStateRequest.Builder {
- ctor public RegisterClimateStateRequest.Builder(boolean);
- method public androidx.car.app.hardware.climate.RegisterClimateStateRequest.Builder addClimateRegisterFeatures(androidx.car.app.hardware.climate.CarClimateFeature!...);
- method public androidx.car.app.hardware.climate.RegisterClimateStateRequest build();
- }
-
- @androidx.car.app.annotations.ExperimentalCarApi public final class SeatTemperatureProfile {
- method public java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!> getCarZoneSetsToSeatTemperatureValues();
- }
-
- public static final class SeatTemperatureProfile.Builder {
- ctor public SeatTemperatureProfile.Builder(java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!>);
- method public androidx.car.app.hardware.climate.SeatTemperatureProfile build();
- }
-
- @androidx.car.app.annotations.ExperimentalCarApi public final class SeatVentilationProfile {
- method public java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!> getCarZoneSetsToSeatVentilationValues();
- }
-
- public static final class SeatVentilationProfile.Builder {
- ctor public SeatVentilationProfile.Builder(java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!>);
- method public androidx.car.app.hardware.climate.SeatVentilationProfile build();
- }
-
- @androidx.car.app.annotations.ExperimentalCarApi public final class SteeringWheelHeatProfile {
- method public java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!> getCarZoneSetsToSteeringWheelHeatValues();
- }
-
- public static final class SteeringWheelHeatProfile.Builder {
- ctor public SteeringWheelHeatProfile.Builder(java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!>);
- method public androidx.car.app.hardware.climate.SteeringWheelHeatProfile build();
- }
-
-}
-
-package androidx.car.app.hardware.common {
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public interface CarSetOperationStatusCallback {
- method public default void onSetCarClimateStateCabinTemperature(int);
- method public default void onSetCarClimateStateDefroster(int);
- method public default void onSetCarClimateStateElectricDefroster(int);
- method public default void onSetCarClimateStateFanDirection(int);
- method public default void onSetCarClimateStateFanSpeedLevel(int);
- method public default void onSetCarClimateStateHvacAc(int);
- method public default void onSetCarClimateStateHvacAutoMode(int);
- method public default void onSetCarClimateStateHvacAutoRecirculation(int);
- method public default void onSetCarClimateStateHvacDualMode(int);
- method public default void onSetCarClimateStateHvacMaxAcMode(int);
- method public default void onSetCarClimateStateHvacPower(int);
- method public default void onSetCarClimateStateHvacRecirculation(int);
- method public default void onSetCarClimateStateMaxDefroster(int);
- method public default void onSetCarClimateStateSeatTemperatureLevel(int);
- method public default void onSetCarClimateStateSeatVentilationLevel(int);
- method public default void onSetCarClimateStateSteeringWheelHeat(int);
- method public static String toString(int);
- field public static final int OPERATION_STATUS_FEATURE_SETTING_NOT_ALLOWED = 4; // 0x4
- field public static final int OPERATION_STATUS_FEATURE_TEMPORARILY_UNAVAILABLE = 3; // 0x3
- field public static final int OPERATION_STATUS_FEATURE_UNIMPLEMENTED = 1; // 0x1
- field public static final int OPERATION_STATUS_FEATURE_UNSUPPORTED = 2; // 0x2
- field public static final int OPERATION_STATUS_ILLEGAL_CAR_HARDWARE_STATE = 7; // 0x7
- field public static final int OPERATION_STATUS_INSUFFICIENT_PERMISSION = 6; // 0x6
- field public static final int OPERATION_STATUS_SUCCESS = 0; // 0x0
- field public static final int OPERATION_STATUS_UNSUPPORTED_VALUE = 5; // 0x5
- field public static final int OPERATION_STATUS_UPDATE_TIMEOUT = 8; // 0x8
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class CarUnit {
- method public static String toString(int);
- field @androidx.car.app.annotations.ExperimentalCarApi public static final int IMPERIAL_GALLON = 204; // 0xcc
- field public static final int KILOMETER = 3; // 0x3
- field public static final int KILOMETERS_PER_HOUR = 102; // 0x66
- field @androidx.car.app.annotations.ExperimentalCarApi public static final int LITER = 202; // 0xca
- field public static final int METER = 2; // 0x2
- field public static final int METERS_PER_SEC = 101; // 0x65
- field public static final int MILE = 4; // 0x4
- field public static final int MILES_PER_HOUR = 103; // 0x67
- field @androidx.car.app.annotations.ExperimentalCarApi public static final int MILLILITER = 201; // 0xc9
- field public static final int MILLIMETER = 1; // 0x1
- field @androidx.car.app.annotations.ExperimentalCarApi public static final int US_GALLON = 203; // 0xcb
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class CarValue<T> {
- ctor public CarValue(T?, long, int);
- ctor @androidx.car.app.annotations.ExperimentalCarApi public CarValue(T?, long, int, java.util.List<androidx.car.app.hardware.common.CarZone!>);
- method @androidx.car.app.annotations.ExperimentalCarApi public java.util.List<androidx.car.app.hardware.common.CarZone!> getCarZones();
- method public int getStatus();
- method public long getTimestampMillis();
- method public T? getValue();
- field public static final int STATUS_SUCCESS = 1; // 0x1
- field public static final int STATUS_UNAVAILABLE = 3; // 0x3
- field public static final int STATUS_UNIMPLEMENTED = 2; // 0x2
- field public static final int STATUS_UNKNOWN = 0; // 0x0
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public final class CarZone {
- method public int getColumn();
- method public int getRow();
- field public static final int CAR_ZONE_COLUMN_ALL = 16; // 0x10
- field public static final int CAR_ZONE_COLUMN_CENTER = 48; // 0x30
- field public static final int CAR_ZONE_COLUMN_DRIVER = 80; // 0x50
- field public static final int CAR_ZONE_COLUMN_LEFT = 32; // 0x20
- field public static final int CAR_ZONE_COLUMN_PASSENGER = 96; // 0x60
- field public static final int CAR_ZONE_COLUMN_RIGHT = 64; // 0x40
- field public static final androidx.car.app.hardware.common.CarZone CAR_ZONE_GLOBAL;
- field public static final int CAR_ZONE_ROW_ALL = 0; // 0x0
- field public static final int CAR_ZONE_ROW_EXCLUDE_FIRST = 4; // 0x4
- field public static final int CAR_ZONE_ROW_FIRST = 1; // 0x1
- field public static final int CAR_ZONE_ROW_SECOND = 2; // 0x2
- field public static final int CAR_ZONE_ROW_THIRD = 3; // 0x3
- }
-
- public static final class CarZone.Builder {
- ctor public CarZone.Builder();
- method public androidx.car.app.hardware.common.CarZone build();
- method public androidx.car.app.hardware.common.CarZone.Builder setColumn(int);
- method public androidx.car.app.hardware.common.CarZone.Builder setRow(int);
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public interface OnCarDataAvailableListener<T> {
- method public void onCarDataAvailable(T);
- }
-
-}
-
-package androidx.car.app.hardware.info {
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class Accelerometer {
- ctor public Accelerometer(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float!>!>);
- method public androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float!>!> getForces();
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class CarHardwareLocation {
- ctor public CarHardwareLocation(androidx.car.app.hardware.common.CarValue<android.location.Location!>);
- method public androidx.car.app.hardware.common.CarValue<android.location.Location!> getLocation();
- }
-
- @MainThread @androidx.car.app.annotations.RequiresCarApi(3) public interface CarInfo {
- method public void addEnergyLevelListener(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.EnergyLevel!>);
- method @androidx.car.app.annotations.ExperimentalCarApi public void addEvStatusListener(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.EvStatus!>);
- method public void addMileageListener(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Mileage!>);
- method public void addSpeedListener(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Speed!>);
- method public void addTollListener(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.TollCard!>);
- method public void fetchEnergyProfile(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.EnergyProfile!>);
- method public void fetchModel(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Model!>);
- method public void removeEnergyLevelListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.EnergyLevel!>);
- method @androidx.car.app.annotations.ExperimentalCarApi public void removeEvStatusListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.EvStatus!>);
- method public void removeMileageListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Mileage!>);
- method public void removeSpeedListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Speed!>);
- method public void removeTollListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.TollCard!>);
- }
-
- @MainThread @androidx.car.app.annotations.RequiresCarApi(3) public interface CarSensors {
- method public void addAccelerometerListener(int, java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Accelerometer!>);
- method public void addCarHardwareLocationListener(int, java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.CarHardwareLocation!>);
- method public void addCompassListener(int, java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Compass!>);
- method public void addGyroscopeListener(int, java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Gyroscope!>);
- method public void removeAccelerometerListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Accelerometer!>);
- method public void removeCarHardwareLocationListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.CarHardwareLocation!>);
- method public void removeCompassListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Compass!>);
- method public void removeGyroscopeListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Gyroscope!>);
- field public static final int UPDATE_RATE_FASTEST = 3; // 0x3
- field public static final int UPDATE_RATE_NORMAL = 1; // 0x1
- field public static final int UPDATE_RATE_UI = 2; // 0x2
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class Compass {
- ctor public Compass(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float!>!>);
- method public androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float!>!> getOrientations();
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class EnergyLevel {
- method public androidx.car.app.hardware.common.CarValue<java.lang.Float!> getBatteryPercent();
- method public androidx.car.app.hardware.common.CarValue<java.lang.Integer!> getDistanceDisplayUnit();
- method public androidx.car.app.hardware.common.CarValue<java.lang.Boolean!> getEnergyIsLow();
- method public androidx.car.app.hardware.common.CarValue<java.lang.Float!> getFuelPercent();
- method @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.hardware.common.CarValue<java.lang.Integer!> getFuelVolumeDisplayUnit();
- method public androidx.car.app.hardware.common.CarValue<java.lang.Float!> getRangeRemainingMeters();
- }
-
- public static final class EnergyLevel.Builder {
- ctor public EnergyLevel.Builder();
- method public androidx.car.app.hardware.info.EnergyLevel build();
- method public androidx.car.app.hardware.info.EnergyLevel.Builder setBatteryPercent(androidx.car.app.hardware.common.CarValue<java.lang.Float!>);
- method public androidx.car.app.hardware.info.EnergyLevel.Builder setDistanceDisplayUnit(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
- method public androidx.car.app.hardware.info.EnergyLevel.Builder setEnergyIsLow(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
- method public androidx.car.app.hardware.info.EnergyLevel.Builder setFuelPercent(androidx.car.app.hardware.common.CarValue<java.lang.Float!>);
- method @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.hardware.info.EnergyLevel.Builder setFuelVolumeDisplayUnit(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
- method public androidx.car.app.hardware.info.EnergyLevel.Builder setRangeRemainingMeters(androidx.car.app.hardware.common.CarValue<java.lang.Float!>);
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class EnergyProfile {
- method public androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Integer!>!> getEvConnectorTypes();
- method public androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Integer!>!> getFuelTypes();
- field public static final int EVCONNECTOR_TYPE_CHADEMO = 3; // 0x3
- field public static final int EVCONNECTOR_TYPE_COMBO_1 = 4; // 0x4
- field public static final int EVCONNECTOR_TYPE_COMBO_2 = 5; // 0x5
- field public static final int EVCONNECTOR_TYPE_GBT = 9; // 0x9
- field public static final int EVCONNECTOR_TYPE_GBT_DC = 10; // 0xa
- field public static final int EVCONNECTOR_TYPE_J1772 = 1; // 0x1
- field public static final int EVCONNECTOR_TYPE_MENNEKES = 2; // 0x2
- field public static final int EVCONNECTOR_TYPE_OTHER = 101; // 0x65
- field public static final int EVCONNECTOR_TYPE_SCAME = 11; // 0xb
- field public static final int EVCONNECTOR_TYPE_TESLA_HPWC = 7; // 0x7
- field public static final int EVCONNECTOR_TYPE_TESLA_ROADSTER = 6; // 0x6
- field public static final int EVCONNECTOR_TYPE_TESLA_SUPERCHARGER = 8; // 0x8
- field public static final int EVCONNECTOR_TYPE_UNKNOWN = 0; // 0x0
- field public static final int FUEL_TYPE_BIODIESEL = 5; // 0x5
- field public static final int FUEL_TYPE_CNG = 8; // 0x8
- field public static final int FUEL_TYPE_DIESEL_1 = 3; // 0x3
- field public static final int FUEL_TYPE_DIESEL_2 = 4; // 0x4
- field public static final int FUEL_TYPE_E85 = 6; // 0x6
- field public static final int FUEL_TYPE_ELECTRIC = 10; // 0xa
- field public static final int FUEL_TYPE_HYDROGEN = 11; // 0xb
- field public static final int FUEL_TYPE_LEADED = 2; // 0x2
- field public static final int FUEL_TYPE_LNG = 9; // 0x9
- field public static final int FUEL_TYPE_LPG = 7; // 0x7
- field public static final int FUEL_TYPE_OTHER = 12; // 0xc
- field public static final int FUEL_TYPE_UNKNOWN = 0; // 0x0
- field public static final int FUEL_TYPE_UNLEADED = 1; // 0x1
- }
-
- public static final class EnergyProfile.Builder {
- ctor public EnergyProfile.Builder();
- method public androidx.car.app.hardware.info.EnergyProfile build();
- method public androidx.car.app.hardware.info.EnergyProfile.Builder setEvConnectorTypes(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Integer!>!>);
- method public androidx.car.app.hardware.info.EnergyProfile.Builder setFuelTypes(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Integer!>!>);
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi public class EvStatus {
- method public androidx.car.app.hardware.common.CarValue<java.lang.Boolean!> getEvChargePortConnected();
- method public androidx.car.app.hardware.common.CarValue<java.lang.Boolean!> getEvChargePortOpen();
- }
-
- public static final class EvStatus.Builder {
- ctor public EvStatus.Builder();
- method public androidx.car.app.hardware.info.EvStatus build();
- method public androidx.car.app.hardware.info.EvStatus.Builder setEvChargePortConnected(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
- method public androidx.car.app.hardware.info.EvStatus.Builder setEvChargePortOpen(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class Gyroscope {
- ctor public Gyroscope(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float!>!>);
- method public androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float!>!> getRotations();
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class Mileage {
- method public androidx.car.app.hardware.common.CarValue<java.lang.Integer!> getDistanceDisplayUnit();
- method public androidx.car.app.hardware.common.CarValue<java.lang.Float!> getOdometerMeters();
- }
-
- public static final class Mileage.Builder {
- ctor public Mileage.Builder();
- method public androidx.car.app.hardware.info.Mileage build();
- method public androidx.car.app.hardware.info.Mileage.Builder setDistanceDisplayUnit(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
- method public androidx.car.app.hardware.info.Mileage.Builder setOdometerMeters(androidx.car.app.hardware.common.CarValue<java.lang.Float!>);
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class Model {
- method public androidx.car.app.hardware.common.CarValue<java.lang.String!> getManufacturer();
- method public androidx.car.app.hardware.common.CarValue<java.lang.String!> getName();
- method public androidx.car.app.hardware.common.CarValue<java.lang.Integer!> getYear();
- }
-
- public static final class Model.Builder {
- ctor public Model.Builder();
- method public androidx.car.app.hardware.info.Model build();
- method public androidx.car.app.hardware.info.Model.Builder setManufacturer(androidx.car.app.hardware.common.CarValue<java.lang.String!>);
- method public androidx.car.app.hardware.info.Model.Builder setName(androidx.car.app.hardware.common.CarValue<java.lang.String!>);
- method public androidx.car.app.hardware.info.Model.Builder setYear(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class Speed {
- method public androidx.car.app.hardware.common.CarValue<java.lang.Float!> getDisplaySpeedMetersPerSecond();
- method public androidx.car.app.hardware.common.CarValue<java.lang.Float!> getRawSpeedMetersPerSecond();
- method public androidx.car.app.hardware.common.CarValue<java.lang.Integer!> getSpeedDisplayUnit();
- }
-
- public static final class Speed.Builder {
- ctor public Speed.Builder();
- method public androidx.car.app.hardware.info.Speed build();
- method public androidx.car.app.hardware.info.Speed.Builder setDisplaySpeedMetersPerSecond(androidx.car.app.hardware.common.CarValue<java.lang.Float!>);
- method public androidx.car.app.hardware.info.Speed.Builder setRawSpeedMetersPerSecond(androidx.car.app.hardware.common.CarValue<java.lang.Float!>);
- method public androidx.car.app.hardware.info.Speed.Builder setSpeedDisplayUnit(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class TollCard {
- method public androidx.car.app.hardware.common.CarValue<java.lang.Integer!> getCardState();
- field public static final int TOLLCARD_STATE_INVALID = 2; // 0x2
- field public static final int TOLLCARD_STATE_NOT_INSERTED = 3; // 0x3
- field public static final int TOLLCARD_STATE_UNKNOWN = 0; // 0x0
- field public static final int TOLLCARD_STATE_VALID = 1; // 0x1
- }
-
- public static final class TollCard.Builder {
- ctor public TollCard.Builder();
- method public androidx.car.app.hardware.info.TollCard build();
- method public androidx.car.app.hardware.info.TollCard.Builder setCardState(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
- }
-
-}
-
-package androidx.car.app.managers {
-
- public interface Manager {
- }
-
-}
-
-package androidx.car.app.media {
-
- @androidx.car.app.annotations.RequiresCarApi(5) public interface CarAudioCallback {
- method public void onStopRecording();
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(5) public class CarAudioCallbackDelegate {
- method public void onStopRecording();
- }
-
- @androidx.car.app.annotations.RequiresCarApi(5) public abstract class CarAudioRecord {
- method @RequiresPermission(android.Manifest.permission.RECORD_AUDIO) public static androidx.car.app.media.CarAudioRecord create(androidx.car.app.CarContext);
- method public int read(byte[], int, int);
- method public void startRecording();
- method public void stopRecording();
- field public static final int AUDIO_CONTENT_BUFFER_SIZE = 512; // 0x200
- field public static final String AUDIO_CONTENT_MIME = "audio/l16";
- field public static final int AUDIO_CONTENT_SAMPLING_RATE = 16000; // 0x3e80
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(5) public final class OpenMicrophoneRequest {
- method public androidx.car.app.media.CarAudioCallbackDelegate getCarAudioCallbackDelegate();
- }
-
- public static final class OpenMicrophoneRequest.Builder {
- ctor public OpenMicrophoneRequest.Builder(androidx.car.app.media.CarAudioCallback);
- method public androidx.car.app.media.OpenMicrophoneRequest build();
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(5) public final class OpenMicrophoneResponse {
- method public androidx.car.app.media.CarAudioCallbackDelegate getCarAudioCallback();
- method public java.io.InputStream getCarMicrophoneInputStream();
- }
-
- public static final class OpenMicrophoneResponse.Builder {
- ctor public OpenMicrophoneResponse.Builder(androidx.car.app.media.CarAudioCallback);
- method public androidx.car.app.media.OpenMicrophoneResponse build();
- method public androidx.car.app.media.OpenMicrophoneResponse.Builder setCarMicrophoneDescriptor(android.os.ParcelFileDescriptor);
- }
-
-}
-
-package androidx.car.app.mediaextensions {
-
- public final class MetadataExtras {
- field public static final String KEY_DESCRIPTION_LINK_MEDIA_ID = "androidx.car.app.mediaextensions.KEY_DESCRIPTION_LINK_MEDIA_ID";
- field public static final String KEY_SUBTITLE_LINK_MEDIA_ID = "androidx.car.app.mediaextensions.KEY_SUBTITLE_LINK_MEDIA_ID";
- }
-
-}
-
-package androidx.car.app.messaging {
-
- @androidx.car.app.annotations.ExperimentalCarApi public class MessagingServiceConstants {
- field public static final String ACTION_HANDLE_CAR_MESSAGING = "androidx.car.app.messaging.action.HANDLE_CAR_MESSAGING";
- }
-
-}
-
-package androidx.car.app.messaging.model {
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public class CarMessage {
- method public androidx.car.app.model.CarText getBody();
- method public long getReceivedTimeEpochMillis();
- method public androidx.core.app.Person? getSender();
- method public boolean isRead();
- }
-
- public static final class CarMessage.Builder {
- ctor public CarMessage.Builder();
- method public androidx.car.app.messaging.model.CarMessage build();
- method public androidx.car.app.messaging.model.CarMessage.Builder setBody(androidx.car.app.model.CarText);
- method public androidx.car.app.messaging.model.CarMessage.Builder setRead(boolean);
- method public androidx.car.app.messaging.model.CarMessage.Builder setReceivedTimeEpochMillis(long);
- method public androidx.car.app.messaging.model.CarMessage.Builder setSender(androidx.core.app.Person?);
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi public interface ConversationCallback {
- method public void onMarkAsRead();
- method public void onTextReply(String);
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public interface ConversationCallbackDelegate {
- method public void sendMarkAsRead(androidx.car.app.OnDoneCallback);
- method public void sendTextReply(String, androidx.car.app.OnDoneCallback);
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public class ConversationItem implements androidx.car.app.model.Item {
- method public androidx.car.app.messaging.model.ConversationCallbackDelegate getConversationCallbackDelegate();
- method public androidx.car.app.model.CarIcon? getIcon();
- method public String getId();
- method public java.util.List<androidx.car.app.messaging.model.CarMessage!> getMessages();
- method public androidx.core.app.Person getSelf();
- method public androidx.car.app.model.CarText getTitle();
- method public boolean isGroupConversation();
- }
-
- public static final class ConversationItem.Builder {
- ctor public ConversationItem.Builder();
- method public androidx.car.app.messaging.model.ConversationItem build();
- method public androidx.car.app.messaging.model.ConversationItem.Builder setConversationCallback(androidx.car.app.messaging.model.ConversationCallback);
- method public androidx.car.app.messaging.model.ConversationItem.Builder setGroupConversation(boolean);
- method public androidx.car.app.messaging.model.ConversationItem.Builder setIcon(androidx.car.app.model.CarIcon);
- method public androidx.car.app.messaging.model.ConversationItem.Builder setId(String);
- method public androidx.car.app.messaging.model.ConversationItem.Builder setMessages(java.util.List<androidx.car.app.messaging.model.CarMessage!>);
- method public androidx.car.app.messaging.model.ConversationItem.Builder setSelf(androidx.core.app.Person);
- method public androidx.car.app.messaging.model.ConversationItem.Builder setTitle(androidx.car.app.model.CarText);
- }
-
-}
-
-package androidx.car.app.model {
-
- @androidx.car.app.annotations.CarProtocol public final class Action {
- method public androidx.car.app.model.CarColor? getBackgroundColor();
- method @androidx.car.app.annotations.RequiresCarApi(4) public int getFlags();
- method public androidx.car.app.model.CarIcon? getIcon();
- method public androidx.car.app.model.OnClickDelegate? getOnClickDelegate();
- method public androidx.car.app.model.CarText? getTitle();
- method public int getType();
- method @androidx.car.app.annotations.RequiresCarApi(5) public boolean isEnabled();
- method public boolean isStandard();
- method public static String typeToString(int);
- field public static final androidx.car.app.model.Action APP_ICON;
- field public static final androidx.car.app.model.Action BACK;
- field @androidx.car.app.annotations.RequiresCarApi(5) public static final int FLAG_DEFAULT = 4; // 0x4
- field @androidx.car.app.annotations.RequiresCarApi(5) public static final int FLAG_IS_PERSISTENT = 2; // 0x2
- field @androidx.car.app.annotations.RequiresCarApi(4) public static final int FLAG_PRIMARY = 1; // 0x1
- field public static final androidx.car.app.model.Action PAN;
- field public static final int TYPE_APP_ICON = 65538; // 0x10002
- field public static final int TYPE_BACK = 65539; // 0x10003
- field public static final int TYPE_CUSTOM = 1; // 0x1
- field public static final int TYPE_PAN = 65540; // 0x10004
- }
-
- public static final class Action.Builder {
- ctor public Action.Builder();
- ctor @androidx.car.app.annotations.RequiresCarApi(2) public Action.Builder(androidx.car.app.model.Action);
- method public androidx.car.app.model.Action build();
- method public androidx.car.app.model.Action.Builder setBackgroundColor(androidx.car.app.model.CarColor);
- method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.Action.Builder setEnabled(boolean);
- method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.model.Action.Builder setFlags(int);
- method public androidx.car.app.model.Action.Builder setIcon(androidx.car.app.model.CarIcon);
- method public androidx.car.app.model.Action.Builder setOnClickListener(androidx.car.app.model.OnClickListener);
- method public androidx.car.app.model.Action.Builder setTitle(CharSequence);
- method public androidx.car.app.model.Action.Builder setTitle(androidx.car.app.model.CarText);
- }
-
- @androidx.car.app.annotations.CarProtocol public final class ActionStrip {
- method public java.util.List<androidx.car.app.model.Action!> getActions();
- method public androidx.car.app.model.Action? getFirstActionOfType(int);
- }
-
- public static final class ActionStrip.Builder {
- ctor public ActionStrip.Builder();
- method public androidx.car.app.model.ActionStrip.Builder addAction(androidx.car.app.model.Action);
- method public androidx.car.app.model.ActionStrip build();
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(5) public final class Alert {
- method public java.util.List<androidx.car.app.model.Action!> getActions();
- method public androidx.car.app.model.AlertCallbackDelegate? getCallbackDelegate();
- method public long getDurationMillis();
- method public androidx.car.app.model.CarIcon? getIcon();
- method public int getId();
- method public androidx.car.app.model.CarText? getSubtitle();
- method public androidx.car.app.model.CarText getTitle();
- }
-
- public static final class Alert.Builder {
- ctor public Alert.Builder(int, androidx.car.app.model.CarText, long);
- method public androidx.car.app.model.Alert.Builder addAction(androidx.car.app.model.Action);
- method public androidx.car.app.model.Alert build();
- method public androidx.car.app.model.Alert.Builder setCallback(androidx.car.app.model.AlertCallback);
- method public androidx.car.app.model.Alert.Builder setIcon(androidx.car.app.model.CarIcon);
- method public androidx.car.app.model.Alert.Builder setSubtitle(androidx.car.app.model.CarText);
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(5) public interface AlertCallback {
- method public void onCancel(int);
- method public void onDismiss();
- field public static final int REASON_NOT_SUPPORTED = 3; // 0x3
- field public static final int REASON_TIMEOUT = 1; // 0x1
- field public static final int REASON_USER_ACTION = 2; // 0x2
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(5) public interface AlertCallbackDelegate {
- method public void sendCancel(int, androidx.car.app.OnDoneCallback);
- method public void sendDismiss(androidx.car.app.OnDoneCallback);
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public class Badge {
- method public androidx.car.app.model.CarColor? getBackgroundColor();
- method public androidx.car.app.model.CarIcon? getIcon();
- method public boolean hasDot();
- }
-
- public static final class Badge.Builder {
- ctor public Badge.Builder();
- method public androidx.car.app.model.Badge build();
- method public androidx.car.app.model.Badge.Builder setBackgroundColor(androidx.car.app.model.CarColor);
- method public androidx.car.app.model.Badge.Builder setHasDot(boolean);
- method public androidx.car.app.model.Badge.Builder setIcon(androidx.car.app.model.CarIcon);
- }
-
- @androidx.car.app.annotations.CarProtocol public final class CarColor {
- method public static androidx.car.app.model.CarColor createCustom(@ColorInt int, @ColorInt int);
- method @ColorInt public int getColor();
- method @ColorInt public int getColorDark();
- method public int getType();
- field public static final androidx.car.app.model.CarColor BLUE;
- field public static final androidx.car.app.model.CarColor DEFAULT;
- field public static final androidx.car.app.model.CarColor GREEN;
- field public static final androidx.car.app.model.CarColor PRIMARY;
- field public static final androidx.car.app.model.CarColor RED;
- field public static final androidx.car.app.model.CarColor SECONDARY;
- field public static final int TYPE_BLUE = 6; // 0x6
- field public static final int TYPE_CUSTOM = 0; // 0x0
- field public static final int TYPE_DEFAULT = 1; // 0x1
- field public static final int TYPE_GREEN = 5; // 0x5
- field public static final int TYPE_PRIMARY = 2; // 0x2
- field public static final int TYPE_RED = 4; // 0x4
- field public static final int TYPE_SECONDARY = 3; // 0x3
- field public static final int TYPE_YELLOW = 7; // 0x7
- field public static final androidx.car.app.model.CarColor YELLOW;
- }
-
- @androidx.car.app.annotations.CarProtocol public final class CarIcon {
- method public androidx.core.graphics.drawable.IconCompat? getIcon();
- method public androidx.car.app.model.CarColor? getTint();
- method public int getType();
- field public static final androidx.car.app.model.CarIcon ALERT;
- field public static final androidx.car.app.model.CarIcon APP_ICON;
- field public static final androidx.car.app.model.CarIcon BACK;
- field public static final androidx.car.app.model.CarIcon ERROR;
- field @androidx.car.app.annotations.RequiresCarApi(2) public static final androidx.car.app.model.CarIcon PAN;
- field public static final int TYPE_ALERT = 4; // 0x4
- field public static final int TYPE_APP_ICON = 5; // 0x5
- field public static final int TYPE_BACK = 3; // 0x3
- field public static final int TYPE_CUSTOM = 1; // 0x1
- field public static final int TYPE_ERROR = 6; // 0x6
- field public static final int TYPE_PAN = 7; // 0x7
- }
-
- public static final class CarIcon.Builder {
- ctor public CarIcon.Builder(androidx.core.graphics.drawable.IconCompat);
- ctor public CarIcon.Builder(androidx.car.app.model.CarIcon);
- method public androidx.car.app.model.CarIcon build();
- method public androidx.car.app.model.CarIcon.Builder setTint(androidx.car.app.model.CarColor);
- }
-
- @androidx.car.app.annotations.CarProtocol public final class CarIconSpan extends androidx.car.app.model.CarSpan {
- method public static androidx.car.app.model.CarIconSpan create(androidx.car.app.model.CarIcon);
- method public static androidx.car.app.model.CarIconSpan create(androidx.car.app.model.CarIcon, int);
- method public int getAlignment();
- method public androidx.car.app.model.CarIcon getIcon();
- field public static final int ALIGN_BASELINE = 1; // 0x1
- field public static final int ALIGN_BOTTOM = 0; // 0x0
- field public static final int ALIGN_CENTER = 2; // 0x2
- }
-
- @androidx.car.app.annotations.CarProtocol public final class CarLocation {
- method public static androidx.car.app.model.CarLocation create(double, double);
- method public static androidx.car.app.model.CarLocation create(android.location.Location);
- method public double getLatitude();
- method public double getLongitude();
- }
-
- @androidx.car.app.annotations.CarProtocol public class CarSpan extends android.text.style.CharacterStyle {
- ctor public CarSpan();
- method public void updateDrawState(android.text.TextPaint);
- }
-
- @androidx.car.app.annotations.CarProtocol public final class CarText {
- method public static androidx.car.app.model.CarText create(CharSequence);
- method public java.util.List<java.lang.CharSequence!> getVariants();
- method public boolean isEmpty();
- method public static boolean isNullOrEmpty(androidx.car.app.model.CarText?);
- method public CharSequence toCharSequence();
- }
-
- public static final class CarText.Builder {
- ctor public CarText.Builder(CharSequence);
- method @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.model.CarText.Builder addVariant(CharSequence);
- method public androidx.car.app.model.CarText build();
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(2) public final class ClickableSpan extends androidx.car.app.model.CarSpan {
- method public static androidx.car.app.model.ClickableSpan create(androidx.car.app.model.OnClickListener);
- method public androidx.car.app.model.OnClickDelegate getOnClickDelegate();
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(6) public interface Content {
- method public String getContentId();
- }
-
- @androidx.car.app.annotations.CarProtocol public final class DateTimeWithZone {
- method public static androidx.car.app.model.DateTimeWithZone create(long, @IntRange(from=0xffff02e0, to=64800) int, String);
- method public static androidx.car.app.model.DateTimeWithZone create(long, java.util.TimeZone);
- method @RequiresApi(26) public static androidx.car.app.model.DateTimeWithZone create(java.time.ZonedDateTime);
- method public long getTimeSinceEpochMillis();
- method public int getZoneOffsetSeconds();
- method public String? getZoneShortName();
- }
-
- @androidx.car.app.annotations.CarProtocol public final class Distance {
- method public static androidx.car.app.model.Distance create(double, int);
- method public double getDisplayDistance();
- method public int getDisplayUnit();
- field public static final int UNIT_FEET = 6; // 0x6
- field public static final int UNIT_KILOMETERS = 2; // 0x2
- field public static final int UNIT_KILOMETERS_P1 = 3; // 0x3
- field public static final int UNIT_METERS = 1; // 0x1
- field public static final int UNIT_MILES = 4; // 0x4
- field public static final int UNIT_MILES_P1 = 5; // 0x5
- field public static final int UNIT_YARDS = 7; // 0x7
- }
-
- @androidx.car.app.annotations.CarProtocol public final class DistanceSpan extends androidx.car.app.model.CarSpan {
- method public static androidx.car.app.model.DistanceSpan create(androidx.car.app.model.Distance);
- method public androidx.car.app.model.Distance getDistance();
- }
-
- @androidx.car.app.annotations.CarProtocol public final class DurationSpan extends androidx.car.app.model.CarSpan {
- method public static androidx.car.app.model.DurationSpan create(long);
- method @RequiresApi(26) public static androidx.car.app.model.DurationSpan create(java.time.Duration);
- method public long getDurationSeconds();
- }
-
- @androidx.car.app.annotations.CarProtocol public final class ForegroundCarColorSpan extends androidx.car.app.model.CarSpan {
- method public static androidx.car.app.model.ForegroundCarColorSpan create(androidx.car.app.model.CarColor);
- method public androidx.car.app.model.CarColor getColor();
- }
-
- @androidx.car.app.annotations.CarProtocol public final class GridItem implements androidx.car.app.model.Item {
- method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public androidx.car.app.model.Badge? getBadge();
- method public androidx.car.app.model.CarIcon? getImage();
- method public int getImageType();
- method public androidx.car.app.model.OnClickDelegate? getOnClickDelegate();
- method public androidx.car.app.model.CarText? getText();
- method public androidx.car.app.model.CarText? getTitle();
- method public boolean isLoading();
- field public static final int IMAGE_TYPE_ICON = 1; // 0x1
- field public static final int IMAGE_TYPE_LARGE = 2; // 0x2
- }
-
- public static final class GridItem.Builder {
- ctor public GridItem.Builder();
- method public androidx.car.app.model.GridItem build();
- method public androidx.car.app.model.GridItem.Builder setImage(androidx.car.app.model.CarIcon);
- method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public androidx.car.app.model.GridItem.Builder setImage(androidx.car.app.model.CarIcon, androidx.car.app.model.Badge);
- method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public androidx.car.app.model.GridItem.Builder setImage(androidx.car.app.model.CarIcon, int, androidx.car.app.model.Badge);
- method public androidx.car.app.model.GridItem.Builder setImage(androidx.car.app.model.CarIcon, int);
- method public androidx.car.app.model.GridItem.Builder setLoading(boolean);
- method public androidx.car.app.model.GridItem.Builder setOnClickListener(androidx.car.app.model.OnClickListener);
- method public androidx.car.app.model.GridItem.Builder setText(CharSequence);
- method public androidx.car.app.model.GridItem.Builder setText(androidx.car.app.model.CarText);
- method public androidx.car.app.model.GridItem.Builder setTitle(CharSequence);
- method public androidx.car.app.model.GridItem.Builder setTitle(androidx.car.app.model.CarText);
- }
-
- @androidx.car.app.annotations.CarProtocol public final class GridTemplate implements androidx.car.app.model.Template {
- method public androidx.car.app.model.ActionStrip? getActionStrip();
- method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(6) public java.util.List<androidx.car.app.model.Action!> getActions();
- method public androidx.car.app.model.Action? getHeaderAction();
- method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public int getItemImageShape();
- method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public int getItemSize();
- method public androidx.car.app.model.ItemList? getSingleList();
- method public androidx.car.app.model.CarText? getTitle();
- method public boolean isLoading();
- field @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public static final int ITEM_IMAGE_SHAPE_CIRCLE = 2; // 0x2
- field @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public static final int ITEM_IMAGE_SHAPE_UNSET = 1; // 0x1
- field @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public static final int ITEM_SIZE_LARGE = 4; // 0x4
- field @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public static final int ITEM_SIZE_MEDIUM = 2; // 0x2
- field @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public static final int ITEM_SIZE_SMALL = 1; // 0x1
- }
-
- public static final class GridTemplate.Builder {
- ctor public GridTemplate.Builder();
- method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(6) public androidx.car.app.model.GridTemplate.Builder addAction(androidx.car.app.model.Action);
- method public androidx.car.app.model.GridTemplate build();
- method public androidx.car.app.model.GridTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
- method public androidx.car.app.model.GridTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
- method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public androidx.car.app.model.GridTemplate.Builder setItemImageShape(int);
- method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public androidx.car.app.model.GridTemplate.Builder setItemSize(int);
- method public androidx.car.app.model.GridTemplate.Builder setLoading(boolean);
- method public androidx.car.app.model.GridTemplate.Builder setSingleList(androidx.car.app.model.ItemList);
- method public androidx.car.app.model.GridTemplate.Builder setTitle(CharSequence);
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(5) public final class Header {
- method public java.util.List<androidx.car.app.model.Action!> getEndHeaderActions();
- method public androidx.car.app.model.Action? getStartHeaderAction();
- method public androidx.car.app.model.CarText? getTitle();
- }
-
- public static final class Header.Builder {
- ctor public Header.Builder();
- method public androidx.car.app.model.Header.Builder addEndHeaderAction(androidx.car.app.model.Action);
- method public androidx.car.app.model.Header build();
- method public androidx.car.app.model.Header.Builder setStartHeaderAction(androidx.car.app.model.Action);
- method public androidx.car.app.model.Header.Builder setTitle(CharSequence);
- method public androidx.car.app.model.Header.Builder setTitle(androidx.car.app.model.CarText);
- }
-
- @androidx.car.app.annotations.RequiresCarApi(2) public interface InputCallback {
- method public default void onInputSubmitted(String);
- method public default void onInputTextChanged(String);
- }
-
- @androidx.car.app.annotations.RequiresCarApi(2) public interface InputCallbackDelegate {
- method public void sendInputSubmitted(String, androidx.car.app.OnDoneCallback);
- method public void sendInputTextChanged(String, androidx.car.app.OnDoneCallback);
- }
-
- @androidx.car.app.annotations.CarProtocol public interface Item {
- }
-
- @androidx.car.app.annotations.CarProtocol public final class ItemList {
- method public java.util.List<androidx.car.app.model.Item!> getItems();
- method public androidx.car.app.model.CarText? getNoItemsMessage();
- method public androidx.car.app.model.OnItemVisibilityChangedDelegate? getOnItemVisibilityChangedDelegate();
- method public androidx.car.app.model.OnSelectedDelegate? getOnSelectedDelegate();
- method public int getSelectedIndex();
- method @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.model.ItemList.Builder toBuilder();
- }
-
- public static final class ItemList.Builder {
- ctor public ItemList.Builder();
- method public androidx.car.app.model.ItemList.Builder addItem(androidx.car.app.model.Item);
- method public androidx.car.app.model.ItemList build();
- method @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.model.ItemList.Builder clearItems();
- method public androidx.car.app.model.ItemList.Builder setNoItemsMessage(CharSequence);
- method public androidx.car.app.model.ItemList.Builder setOnItemsVisibilityChangedListener(androidx.car.app.model.ItemList.OnItemVisibilityChangedListener);
- method public androidx.car.app.model.ItemList.Builder setOnSelectedListener(androidx.car.app.model.ItemList.OnSelectedListener);
- method public androidx.car.app.model.ItemList.Builder setSelectedIndex(@IntRange(from=0) int);
- }
-
- public static interface ItemList.OnItemVisibilityChangedListener {
- method public void onItemVisibilityChanged(int, int);
- }
-
- public static interface ItemList.OnSelectedListener {
- method public void onSelected(int);
- }
-
- @androidx.car.app.annotations.CarProtocol public final class ListTemplate implements androidx.car.app.model.Template {
- method public androidx.car.app.model.ActionStrip? getActionStrip();
- method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(6) public java.util.List<androidx.car.app.model.Action!> getActions();
- method public androidx.car.app.model.Action? getHeaderAction();
- method public java.util.List<androidx.car.app.model.SectionedItemList!> getSectionedLists();
- method public androidx.car.app.model.ItemList? getSingleList();
- method public androidx.car.app.model.CarText? getTitle();
- method public boolean isLoading();
- method @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.model.ListTemplate.Builder toBuilder();
- }
-
- public static final class ListTemplate.Builder {
- ctor public ListTemplate.Builder();
- method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(6) public androidx.car.app.model.ListTemplate.Builder addAction(androidx.car.app.model.Action);
- method public androidx.car.app.model.ListTemplate.Builder addSectionedList(androidx.car.app.model.SectionedItemList);
- method public androidx.car.app.model.ListTemplate build();
- method @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.model.ListTemplate.Builder clearSectionedLists();
- method public androidx.car.app.model.ListTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
- method public androidx.car.app.model.ListTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
- method public androidx.car.app.model.ListTemplate.Builder setLoading(boolean);
- method public androidx.car.app.model.ListTemplate.Builder setSingleList(androidx.car.app.model.ItemList);
- method public androidx.car.app.model.ListTemplate.Builder setTitle(CharSequence);
- }
-
- @androidx.car.app.annotations.RequiresCarApi(2) public final class LongMessageTemplate implements androidx.car.app.model.Template {
- method public androidx.car.app.model.ActionStrip? getActionStrip();
- method public java.util.List<androidx.car.app.model.Action!> getActions();
- method public androidx.car.app.model.Action? getHeaderAction();
- method public androidx.car.app.model.CarText getMessage();
- method public androidx.car.app.model.CarText? getTitle();
- }
-
- @androidx.car.app.annotations.RequiresCarApi(2) public static final class LongMessageTemplate.Builder {
- ctor public LongMessageTemplate.Builder(CharSequence);
- method public androidx.car.app.model.LongMessageTemplate.Builder addAction(androidx.car.app.model.Action);
- method public androidx.car.app.model.LongMessageTemplate build();
- method public androidx.car.app.model.LongMessageTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
- method public androidx.car.app.model.LongMessageTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
- method public androidx.car.app.model.LongMessageTemplate.Builder setTitle(CharSequence);
- }
-
- @androidx.car.app.annotations.CarProtocol public final class MessageTemplate implements androidx.car.app.model.Template {
- method @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.model.ActionStrip? getActionStrip();
- method public java.util.List<androidx.car.app.model.Action!> getActions();
- method public androidx.car.app.model.CarText? getDebugMessage();
- method public androidx.car.app.model.Action? getHeaderAction();
- method public androidx.car.app.model.CarIcon? getIcon();
- method public androidx.car.app.model.CarText getMessage();
- method public androidx.car.app.model.CarText? getTitle();
- method @androidx.car.app.annotations.RequiresCarApi(2) public boolean isLoading();
- }
-
- public static final class MessageTemplate.Builder {
- ctor public MessageTemplate.Builder(CharSequence);
- ctor public MessageTemplate.Builder(androidx.car.app.model.CarText);
- method public androidx.car.app.model.MessageTemplate.Builder addAction(androidx.car.app.model.Action);
- method public androidx.car.app.model.MessageTemplate build();
- method @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.model.MessageTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
- method public androidx.car.app.model.MessageTemplate.Builder setDebugMessage(Throwable);
- method public androidx.car.app.model.MessageTemplate.Builder setDebugMessage(String);
- method public androidx.car.app.model.MessageTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
- method public androidx.car.app.model.MessageTemplate.Builder setIcon(androidx.car.app.model.CarIcon);
- method @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.model.MessageTemplate.Builder setLoading(boolean);
- method public androidx.car.app.model.MessageTemplate.Builder setTitle(CharSequence);
- }
-
- @androidx.car.app.annotations.CarProtocol public final class Metadata {
- method public androidx.car.app.model.Place? getPlace();
- field public static final androidx.car.app.model.Metadata EMPTY_METADATA;
- }
-
- public static final class Metadata.Builder {
- ctor public Metadata.Builder();
- ctor public Metadata.Builder(androidx.car.app.model.Metadata);
- method public androidx.car.app.model.Metadata build();
- method public androidx.car.app.model.Metadata.Builder setPlace(androidx.car.app.model.Place);
- }
-
- @androidx.car.app.annotations.CarProtocol public interface OnCheckedChangeDelegate {
- method public void sendCheckedChange(boolean, androidx.car.app.OnDoneCallback);
- }
-
- @androidx.car.app.annotations.CarProtocol public interface OnClickDelegate {
- method public boolean isParkedOnly();
- method public void sendClick(androidx.car.app.OnDoneCallback);
- }
-
- public interface OnClickListener {
- method public void onClick();
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(5) public interface OnContentRefreshDelegate {
- method public void sendContentRefreshRequested(androidx.car.app.OnDoneCallback);
- }
-
- @androidx.car.app.annotations.RequiresCarApi(5) public interface OnContentRefreshListener {
- method public void onContentRefreshRequested();
- }
-
- @androidx.car.app.annotations.CarProtocol public interface OnItemVisibilityChangedDelegate {
- method public void sendItemVisibilityChanged(int, int, androidx.car.app.OnDoneCallback);
- }
-
- @androidx.car.app.annotations.CarProtocol public interface OnSelectedDelegate {
- method public void sendSelected(int, androidx.car.app.OnDoneCallback);
- }
-
- @androidx.car.app.annotations.CarProtocol public final class Pane {
- method public java.util.List<androidx.car.app.model.Action!> getActions();
- method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.model.CarIcon? getImage();
- method public java.util.List<androidx.car.app.model.Row!> getRows();
- method public boolean isLoading();
- }
-
- public static final class Pane.Builder {
- ctor public Pane.Builder();
- method public androidx.car.app.model.Pane.Builder addAction(androidx.car.app.model.Action);
- method public androidx.car.app.model.Pane.Builder addRow(androidx.car.app.model.Row);
- method public androidx.car.app.model.Pane build();
- method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.model.Pane.Builder setImage(androidx.car.app.model.CarIcon);
- method public androidx.car.app.model.Pane.Builder setLoading(boolean);
- }
-
- @androidx.car.app.annotations.CarProtocol public final class PaneTemplate implements androidx.car.app.model.Template {
- method public androidx.car.app.model.ActionStrip? getActionStrip();
- method public androidx.car.app.model.Action? getHeaderAction();
- method public androidx.car.app.model.Pane getPane();
- method public androidx.car.app.model.CarText? getTitle();
- }
-
- public static final class PaneTemplate.Builder {
- ctor public PaneTemplate.Builder(androidx.car.app.model.Pane);
- method public androidx.car.app.model.PaneTemplate build();
- method public androidx.car.app.model.PaneTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
- method public androidx.car.app.model.PaneTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
- method public androidx.car.app.model.PaneTemplate.Builder setTitle(CharSequence);
- }
-
- @androidx.car.app.annotations.CarProtocol public final class ParkedOnlyOnClickListener implements androidx.car.app.model.OnClickListener {
- method public static androidx.car.app.model.ParkedOnlyOnClickListener create(androidx.car.app.model.OnClickListener);
- method public void onClick();
- }
-
- @androidx.car.app.annotations.CarProtocol public final class Place {
- method public androidx.car.app.model.CarLocation getLocation();
- method public androidx.car.app.model.PlaceMarker? getMarker();
- }
-
- public static final class Place.Builder {
- ctor public Place.Builder(androidx.car.app.model.CarLocation);
- ctor public Place.Builder(androidx.car.app.model.Place);
- method public androidx.car.app.model.Place build();
- method public androidx.car.app.model.Place.Builder setMarker(androidx.car.app.model.PlaceMarker);
- }
-
- @androidx.car.app.annotations.CarProtocol public final class PlaceListMapTemplate implements androidx.car.app.model.Template {
- method public androidx.car.app.model.ActionStrip? getActionStrip();
- method public androidx.car.app.model.Place? getAnchor();
- method public androidx.car.app.model.Action? getHeaderAction();
- method public androidx.car.app.model.ItemList? getItemList();
- method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.OnContentRefreshDelegate? getOnContentRefreshDelegate();
- method public androidx.car.app.model.CarText? getTitle();
- method public boolean isCurrentLocationEnabled();
- method public boolean isLoading();
- }
-
- public static final class PlaceListMapTemplate.Builder {
- ctor public PlaceListMapTemplate.Builder();
- method public androidx.car.app.model.PlaceListMapTemplate build();
- method public androidx.car.app.model.PlaceListMapTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
- method public androidx.car.app.model.PlaceListMapTemplate.Builder setAnchor(androidx.car.app.model.Place);
- method public androidx.car.app.model.PlaceListMapTemplate.Builder setCurrentLocationEnabled(boolean);
- method public androidx.car.app.model.PlaceListMapTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
- method public androidx.car.app.model.PlaceListMapTemplate.Builder setItemList(androidx.car.app.model.ItemList);
- method public androidx.car.app.model.PlaceListMapTemplate.Builder setLoading(boolean);
- method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.PlaceListMapTemplate.Builder setOnContentRefreshListener(androidx.car.app.model.OnContentRefreshListener);
- method public androidx.car.app.model.PlaceListMapTemplate.Builder setTitle(CharSequence);
- method public androidx.car.app.model.PlaceListMapTemplate.Builder setTitle(androidx.car.app.model.CarText);
- }
-
- @androidx.car.app.annotations.CarProtocol public final class PlaceMarker {
- method public androidx.car.app.model.CarColor? getColor();
- method public androidx.car.app.model.CarIcon? getIcon();
- method public int getIconType();
- method public androidx.car.app.model.CarText? getLabel();
- field public static final int TYPE_ICON = 0; // 0x0
- field public static final int TYPE_IMAGE = 1; // 0x1
- }
-
- public static final class PlaceMarker.Builder {
- ctor public PlaceMarker.Builder();
- method public androidx.car.app.model.PlaceMarker build();
- method public androidx.car.app.model.PlaceMarker.Builder setColor(androidx.car.app.model.CarColor);
- method public androidx.car.app.model.PlaceMarker.Builder setIcon(androidx.car.app.model.CarIcon, int);
- method public androidx.car.app.model.PlaceMarker.Builder setLabel(CharSequence);
- }
-
- @androidx.car.app.annotations.CarProtocol public final class Row implements androidx.car.app.model.Item {
- method @androidx.car.app.annotations.RequiresCarApi(6) public java.util.List<androidx.car.app.model.Action!> getActions();
- method public androidx.car.app.model.CarIcon? getImage();
- method public androidx.car.app.model.Metadata? getMetadata();
- method @androidx.car.app.annotations.RequiresCarApi(6) public int getNumericDecoration();
- method public androidx.car.app.model.OnClickDelegate? getOnClickDelegate();
- method public int getRowImageType();
- method public java.util.List<androidx.car.app.model.CarText!> getTexts();
- method public androidx.car.app.model.CarText? getTitle();
- method public androidx.car.app.model.Toggle? getToggle();
- method public boolean isBrowsable();
- method @androidx.car.app.annotations.RequiresCarApi(5) public boolean isEnabled();
- method public androidx.car.app.model.Row row();
- method public CharSequence yourBoat();
- field public static final int IMAGE_TYPE_ICON = 4; // 0x4
- field public static final int IMAGE_TYPE_LARGE = 2; // 0x2
- field public static final int IMAGE_TYPE_SMALL = 1; // 0x1
- field public static final int NO_DECORATION = -1; // 0xffffffff
- }
-
- public static final class Row.Builder {
- ctor public Row.Builder();
- method @androidx.car.app.annotations.RequiresCarApi(6) public androidx.car.app.model.Row.Builder addAction(androidx.car.app.model.Action);
- method public androidx.car.app.model.Row.Builder addText(CharSequence);
- method public androidx.car.app.model.Row.Builder addText(androidx.car.app.model.CarText);
- method public androidx.car.app.model.Row build();
- method public androidx.car.app.model.Row.Builder setBrowsable(boolean);
- method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.Row.Builder setEnabled(boolean);
- method public androidx.car.app.model.Row.Builder setImage(androidx.car.app.model.CarIcon);
- method public androidx.car.app.model.Row.Builder setImage(androidx.car.app.model.CarIcon, int);
- method public androidx.car.app.model.Row.Builder setMetadata(androidx.car.app.model.Metadata);
- method @IntRange(from=0) @androidx.car.app.annotations.RequiresCarApi(6) public androidx.car.app.model.Row.Builder setNumericDecoration(int);
- method public androidx.car.app.model.Row.Builder setOnClickListener(androidx.car.app.model.OnClickListener);
- method public androidx.car.app.model.Row.Builder setTitle(CharSequence);
- method public androidx.car.app.model.Row.Builder setTitle(androidx.car.app.model.CarText);
- method public androidx.car.app.model.Row.Builder setToggle(androidx.car.app.model.Toggle);
- }
-
- @androidx.car.app.annotations.CarProtocol public interface SearchCallbackDelegate {
- method public void sendSearchSubmitted(String, androidx.car.app.OnDoneCallback);
- method public void sendSearchTextChanged(String, androidx.car.app.OnDoneCallback);
- }
-
- @androidx.car.app.annotations.CarProtocol public final class SearchTemplate implements androidx.car.app.model.Template {
- method public androidx.car.app.model.ActionStrip? getActionStrip();
- method public androidx.car.app.model.Action? getHeaderAction();
- method public String? getInitialSearchText();
- method public androidx.car.app.model.ItemList? getItemList();
- method public androidx.car.app.model.SearchCallbackDelegate getSearchCallbackDelegate();
- method public String? getSearchHint();
- method public boolean isLoading();
- method public boolean isShowKeyboardByDefault();
- }
-
- public static final class SearchTemplate.Builder {
- ctor public SearchTemplate.Builder(androidx.car.app.model.SearchTemplate.SearchCallback);
- method public androidx.car.app.model.SearchTemplate build();
- method public androidx.car.app.model.SearchTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
- method public androidx.car.app.model.SearchTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
- method public androidx.car.app.model.SearchTemplate.Builder setInitialSearchText(String);
- method public androidx.car.app.model.SearchTemplate.Builder setItemList(androidx.car.app.model.ItemList);
- method public androidx.car.app.model.SearchTemplate.Builder setLoading(boolean);
- method public androidx.car.app.model.SearchTemplate.Builder setSearchHint(String);
- method public androidx.car.app.model.SearchTemplate.Builder setShowKeyboardByDefault(boolean);
- }
-
- public static interface SearchTemplate.SearchCallback {
- method public default void onSearchSubmitted(String);
- method public default void onSearchTextChanged(String);
- }
-
- @androidx.car.app.annotations.CarProtocol public final class SectionedItemList {
- method public static androidx.car.app.model.SectionedItemList create(androidx.car.app.model.ItemList, CharSequence);
- method public androidx.car.app.model.CarText getHeader();
- method public androidx.car.app.model.ItemList getItemList();
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(6) public final class Tab implements androidx.car.app.model.Content {
- method public String getContentId();
- method public androidx.car.app.model.CarIcon getIcon();
- method public androidx.car.app.model.CarText getTitle();
- }
-
- public static final class Tab.Builder {
- ctor public Tab.Builder();
- ctor public Tab.Builder(androidx.car.app.model.Tab);
- method public androidx.car.app.model.Tab build();
- method public androidx.car.app.model.Tab.Builder setContentId(String);
- method public androidx.car.app.model.Tab.Builder setIcon(androidx.car.app.model.CarIcon);
- method public androidx.car.app.model.Tab.Builder setTitle(CharSequence);
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(6) public interface TabCallbackDelegate {
- method public void sendTabSelected(String, androidx.car.app.OnDoneCallback);
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(6) public class TabContents implements androidx.car.app.model.Content {
- method public String getContentId();
- method public androidx.car.app.model.Template getTemplate();
- field public static final String CONTENT_ID = "TAB_CONTENTS_CONTENT_ID";
- }
-
- public static final class TabContents.Builder {
- ctor public TabContents.Builder(androidx.car.app.model.Template);
- method public androidx.car.app.model.TabContents build();
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(6) public class TabTemplate implements androidx.car.app.model.Template {
- method public String getActiveTabContentId();
- method public androidx.car.app.model.Action getHeaderAction();
- method public androidx.car.app.model.TabCallbackDelegate getTabCallbackDelegate();
- method public androidx.car.app.model.TabContents getTabContents();
- method public java.util.List<androidx.car.app.model.Tab!> getTabs();
- method public boolean isLoading();
- }
-
- public static final class TabTemplate.Builder {
- ctor public TabTemplate.Builder(androidx.car.app.model.TabTemplate.TabCallback);
- ctor public TabTemplate.Builder(androidx.car.app.model.TabTemplate);
- method public androidx.car.app.model.TabTemplate.Builder addTab(androidx.car.app.model.Tab);
- method public androidx.car.app.model.TabTemplate build();
- method public androidx.car.app.model.TabTemplate.Builder setActiveTabContentId(String);
- method public androidx.car.app.model.TabTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
- method public androidx.car.app.model.TabTemplate.Builder setLoading(boolean);
- method public androidx.car.app.model.TabTemplate.Builder setTabContents(androidx.car.app.model.TabContents);
- }
-
- public static interface TabTemplate.TabCallback {
- method public default void onTabSelected(String);
- }
-
- @androidx.car.app.annotations.CarProtocol public interface Template {
- }
-
- @androidx.car.app.annotations.CarProtocol public final class TemplateInfo {
- ctor public TemplateInfo(Class<? extends androidx.car.app.model.Template>, String);
- method public Class<? extends androidx.car.app.model.Template> getTemplateClass();
- method public String getTemplateId();
- }
-
- @androidx.car.app.annotations.CarProtocol public final class TemplateWrapper {
- method public static androidx.car.app.model.TemplateWrapper copyOf(androidx.car.app.model.TemplateWrapper);
- method public int getCurrentTaskStep();
- method public String getId();
- method public androidx.car.app.model.Template getTemplate();
- method public java.util.List<androidx.car.app.model.TemplateInfo!> getTemplateInfosForScreenStack();
- method public boolean isRefresh();
- method public void setCurrentTaskStep(int);
- method public void setId(String);
- method public void setRefresh(boolean);
- method public void setTemplate(androidx.car.app.model.Template);
- method public static androidx.car.app.model.TemplateWrapper wrap(androidx.car.app.model.Template);
- method public static androidx.car.app.model.TemplateWrapper wrap(androidx.car.app.model.Template, String);
- }
-
- @androidx.car.app.annotations.CarProtocol public final class Toggle {
- method public androidx.car.app.model.OnCheckedChangeDelegate getOnCheckedChangeDelegate();
- method public boolean isChecked();
- method @androidx.car.app.annotations.RequiresCarApi(5) public boolean isEnabled();
- }
-
- public static final class Toggle.Builder {
- ctor public Toggle.Builder(androidx.car.app.model.Toggle.OnCheckedChangeListener);
- method public androidx.car.app.model.Toggle build();
- method public androidx.car.app.model.Toggle.Builder setChecked(boolean);
- method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.Toggle.Builder setEnabled(boolean);
- }
-
- public static interface Toggle.OnCheckedChangeListener {
- method public void onCheckedChange(boolean);
- }
-
-}
-
-package androidx.car.app.model.signin {
-
- @androidx.car.app.annotations.RequiresCarApi(2) public final class InputSignInMethod implements androidx.car.app.model.signin.SignInTemplate.SignInMethod {
- method public androidx.car.app.model.CarText? getDefaultValue();
- method public androidx.car.app.model.CarText? getErrorMessage();
- method public androidx.car.app.model.CarText? getHint();
- method public androidx.car.app.model.InputCallbackDelegate getInputCallbackDelegate();
- method public int getInputType();
- method public int getKeyboardType();
- method public boolean isShowKeyboardByDefault();
- field public static final int INPUT_TYPE_DEFAULT = 1; // 0x1
- field public static final int INPUT_TYPE_PASSWORD = 2; // 0x2
- field public static final int KEYBOARD_DEFAULT = 1; // 0x1
- field public static final int KEYBOARD_EMAIL = 2; // 0x2
- field public static final int KEYBOARD_NUMBER = 4; // 0x4
- field public static final int KEYBOARD_PHONE = 3; // 0x3
- }
-
- public static final class InputSignInMethod.Builder {
- ctor public InputSignInMethod.Builder(androidx.car.app.model.InputCallback);
- method public androidx.car.app.model.signin.InputSignInMethod build();
- method public androidx.car.app.model.signin.InputSignInMethod.Builder setDefaultValue(String);
- method public androidx.car.app.model.signin.InputSignInMethod.Builder setErrorMessage(CharSequence);
- method public androidx.car.app.model.signin.InputSignInMethod.Builder setHint(CharSequence);
- method public androidx.car.app.model.signin.InputSignInMethod.Builder setInputType(int);
- method public androidx.car.app.model.signin.InputSignInMethod.Builder setKeyboardType(int);
- method public androidx.car.app.model.signin.InputSignInMethod.Builder setShowKeyboardByDefault(boolean);
- }
-
- @androidx.car.app.annotations.RequiresCarApi(2) public final class PinSignInMethod implements androidx.car.app.model.signin.SignInTemplate.SignInMethod {
- ctor public PinSignInMethod(CharSequence);
- method public androidx.car.app.model.CarText getPinCode();
- }
-
- @androidx.car.app.annotations.RequiresCarApi(2) public final class ProviderSignInMethod implements androidx.car.app.model.signin.SignInTemplate.SignInMethod {
- ctor public ProviderSignInMethod(androidx.car.app.model.Action);
- method public androidx.car.app.model.Action getAction();
- }
-
- @androidx.car.app.annotations.RequiresCarApi(4) public final class QRCodeSignInMethod implements androidx.car.app.model.signin.SignInTemplate.SignInMethod {
- ctor public QRCodeSignInMethod(android.net.Uri);
- method public android.net.Uri getUri();
- }
-
- @androidx.car.app.annotations.RequiresCarApi(2) public final class SignInTemplate implements androidx.car.app.model.Template {
- method public androidx.car.app.model.ActionStrip? getActionStrip();
- method public java.util.List<androidx.car.app.model.Action!> getActions();
- method public androidx.car.app.model.CarText? getAdditionalText();
- method public androidx.car.app.model.Action? getHeaderAction();
- method public androidx.car.app.model.CarText? getInstructions();
- method public androidx.car.app.model.signin.SignInTemplate.SignInMethod getSignInMethod();
- method public androidx.car.app.model.CarText? getTitle();
- method public boolean isLoading();
- }
-
- @androidx.car.app.annotations.RequiresCarApi(2) public static final class SignInTemplate.Builder {
- ctor public SignInTemplate.Builder(androidx.car.app.model.signin.SignInTemplate.SignInMethod);
- method public androidx.car.app.model.signin.SignInTemplate.Builder addAction(androidx.car.app.model.Action);
- method public androidx.car.app.model.signin.SignInTemplate build();
- method public androidx.car.app.model.signin.SignInTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
- method public androidx.car.app.model.signin.SignInTemplate.Builder setAdditionalText(CharSequence);
- method public androidx.car.app.model.signin.SignInTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
- method public androidx.car.app.model.signin.SignInTemplate.Builder setInstructions(CharSequence);
- method public androidx.car.app.model.signin.SignInTemplate.Builder setLoading(boolean);
- method public androidx.car.app.model.signin.SignInTemplate.Builder setTitle(CharSequence);
- }
-
- public static interface SignInTemplate.SignInMethod {
- }
-
-}
-
-package androidx.car.app.navigation {
-
- public class NavigationManager implements androidx.car.app.managers.Manager {
- method @MainThread public void clearNavigationManagerCallback();
- method @MainThread public void navigationEnded();
- method @MainThread public void navigationStarted();
- method @MainThread public void setNavigationManagerCallback(androidx.car.app.navigation.NavigationManagerCallback);
- method @MainThread public void setNavigationManagerCallback(java.util.concurrent.Executor, androidx.car.app.navigation.NavigationManagerCallback);
- method @MainThread public void updateTrip(androidx.car.app.navigation.model.Trip);
- }
-
- public interface NavigationManagerCallback {
- method public default void onAutoDriveEnabled();
- method public default void onStopNavigation();
- }
-
-}
-
-package androidx.car.app.navigation.model {
-
- @androidx.car.app.annotations.CarProtocol public final class Destination {
- method public androidx.car.app.model.CarText? getAddress();
- method public androidx.car.app.model.CarIcon? getImage();
- method public androidx.car.app.model.CarText? getName();
- }
-
- public static final class Destination.Builder {
- ctor public Destination.Builder();
- method public androidx.car.app.navigation.model.Destination build();
- method public androidx.car.app.navigation.model.Destination.Builder setAddress(CharSequence);
- method public androidx.car.app.navigation.model.Destination.Builder setImage(androidx.car.app.model.CarIcon);
- method public androidx.car.app.navigation.model.Destination.Builder setName(CharSequence);
- }
-
- @androidx.car.app.annotations.CarProtocol public final class Lane {
- method public java.util.List<androidx.car.app.navigation.model.LaneDirection!> getDirections();
- }
-
- public static final class Lane.Builder {
- ctor public Lane.Builder();
- method public androidx.car.app.navigation.model.Lane.Builder addDirection(androidx.car.app.navigation.model.LaneDirection);
- method public androidx.car.app.navigation.model.Lane build();
- }
-
- @androidx.car.app.annotations.CarProtocol public final class LaneDirection {
- method public static androidx.car.app.navigation.model.LaneDirection create(int, boolean);
- method public int getShape();
- method public boolean isRecommended();
- field public static final int SHAPE_NORMAL_LEFT = 5; // 0x5
- field public static final int SHAPE_NORMAL_RIGHT = 6; // 0x6
- field public static final int SHAPE_SHARP_LEFT = 7; // 0x7
- field public static final int SHAPE_SHARP_RIGHT = 8; // 0x8
- field public static final int SHAPE_SLIGHT_LEFT = 3; // 0x3
- field public static final int SHAPE_SLIGHT_RIGHT = 4; // 0x4
- field public static final int SHAPE_STRAIGHT = 2; // 0x2
- field public static final int SHAPE_UNKNOWN = 1; // 0x1
- field public static final int SHAPE_U_TURN_LEFT = 9; // 0x9
- field public static final int SHAPE_U_TURN_RIGHT = 10; // 0xa
- }
-
- @androidx.car.app.annotations.CarProtocol public final class Maneuver {
- method public androidx.car.app.model.CarIcon? getIcon();
- method public int getRoundaboutExitAngle();
- method public int getRoundaboutExitNumber();
- method public int getType();
- field public static final int TYPE_DEPART = 1; // 0x1
- field public static final int TYPE_DESTINATION = 39; // 0x27
- field public static final int TYPE_DESTINATION_LEFT = 41; // 0x29
- field public static final int TYPE_DESTINATION_RIGHT = 42; // 0x2a
- field public static final int TYPE_DESTINATION_STRAIGHT = 40; // 0x28
- field public static final int TYPE_FERRY_BOAT = 37; // 0x25
- field public static final int TYPE_FERRY_BOAT_LEFT = 47; // 0x2f
- field public static final int TYPE_FERRY_BOAT_RIGHT = 48; // 0x30
- field public static final int TYPE_FERRY_TRAIN = 38; // 0x26
- field public static final int TYPE_FERRY_TRAIN_LEFT = 49; // 0x31
- field public static final int TYPE_FERRY_TRAIN_RIGHT = 50; // 0x32
- field public static final int TYPE_FORK_LEFT = 25; // 0x19
- field public static final int TYPE_FORK_RIGHT = 26; // 0x1a
- field public static final int TYPE_KEEP_LEFT = 3; // 0x3
- field public static final int TYPE_KEEP_RIGHT = 4; // 0x4
- field public static final int TYPE_MERGE_LEFT = 27; // 0x1b
- field public static final int TYPE_MERGE_RIGHT = 28; // 0x1c
- field public static final int TYPE_MERGE_SIDE_UNSPECIFIED = 29; // 0x1d
- field public static final int TYPE_NAME_CHANGE = 2; // 0x2
- field public static final int TYPE_OFF_RAMP_NORMAL_LEFT = 23; // 0x17
- field public static final int TYPE_OFF_RAMP_NORMAL_RIGHT = 24; // 0x18
- field public static final int TYPE_OFF_RAMP_SLIGHT_LEFT = 21; // 0x15
- field public static final int TYPE_OFF_RAMP_SLIGHT_RIGHT = 22; // 0x16
- field public static final int TYPE_ON_RAMP_NORMAL_LEFT = 15; // 0xf
- field public static final int TYPE_ON_RAMP_NORMAL_RIGHT = 16; // 0x10
- field public static final int TYPE_ON_RAMP_SHARP_LEFT = 17; // 0x11
- field public static final int TYPE_ON_RAMP_SHARP_RIGHT = 18; // 0x12
- field public static final int TYPE_ON_RAMP_SLIGHT_LEFT = 13; // 0xd
- field public static final int TYPE_ON_RAMP_SLIGHT_RIGHT = 14; // 0xe
- field public static final int TYPE_ON_RAMP_U_TURN_LEFT = 19; // 0x13
- field public static final int TYPE_ON_RAMP_U_TURN_RIGHT = 20; // 0x14
- field public static final int TYPE_ROUNDABOUT_ENTER_AND_EXIT_CCW = 34; // 0x22
- field public static final int TYPE_ROUNDABOUT_ENTER_AND_EXIT_CCW_WITH_ANGLE = 35; // 0x23
- field public static final int TYPE_ROUNDABOUT_ENTER_AND_EXIT_CW = 32; // 0x20
- field public static final int TYPE_ROUNDABOUT_ENTER_AND_EXIT_CW_WITH_ANGLE = 33; // 0x21
- field public static final int TYPE_ROUNDABOUT_ENTER_CCW = 45; // 0x2d
- field public static final int TYPE_ROUNDABOUT_ENTER_CW = 43; // 0x2b
- field public static final int TYPE_ROUNDABOUT_EXIT_CCW = 46; // 0x2e
- field public static final int TYPE_ROUNDABOUT_EXIT_CW = 44; // 0x2c
- field public static final int TYPE_STRAIGHT = 36; // 0x24
- field public static final int TYPE_TURN_NORMAL_LEFT = 7; // 0x7
- field public static final int TYPE_TURN_NORMAL_RIGHT = 8; // 0x8
- field public static final int TYPE_TURN_SHARP_LEFT = 9; // 0x9
- field public static final int TYPE_TURN_SHARP_RIGHT = 10; // 0xa
- field public static final int TYPE_TURN_SLIGHT_LEFT = 5; // 0x5
- field public static final int TYPE_TURN_SLIGHT_RIGHT = 6; // 0x6
- field public static final int TYPE_UNKNOWN = 0; // 0x0
- field public static final int TYPE_U_TURN_LEFT = 11; // 0xb
- field public static final int TYPE_U_TURN_RIGHT = 12; // 0xc
- }
-
- public static final class Maneuver.Builder {
- ctor public Maneuver.Builder(int);
- method public androidx.car.app.navigation.model.Maneuver build();
- method public androidx.car.app.navigation.model.Maneuver.Builder setIcon(androidx.car.app.model.CarIcon);
- method public androidx.car.app.navigation.model.Maneuver.Builder setRoundaboutExitAngle(@IntRange(from=1, to=360) int);
- method public androidx.car.app.navigation.model.Maneuver.Builder setRoundaboutExitNumber(@IntRange(from=1) int);
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(5) public final class MapController {
- method public androidx.car.app.model.ActionStrip? getMapActionStrip();
- method public androidx.car.app.navigation.model.PanModeDelegate? getPanModeDelegate();
- }
-
- public static final class MapController.Builder {
- ctor public MapController.Builder();
- method public androidx.car.app.navigation.model.MapController build();
- method public androidx.car.app.navigation.model.MapController.Builder setMapActionStrip(androidx.car.app.model.ActionStrip);
- method public androidx.car.app.navigation.model.MapController.Builder setPanModeListener(androidx.car.app.navigation.model.PanModeListener);
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(5) public final class MapTemplate implements androidx.car.app.model.Template {
- method public androidx.car.app.model.ActionStrip? getActionStrip();
- method public androidx.car.app.model.Header? getHeader();
- method public androidx.car.app.model.ItemList? getItemList();
- method public androidx.car.app.navigation.model.MapController? getMapController();
- method public androidx.car.app.model.Pane? getPane();
- }
-
- public static final class MapTemplate.Builder {
- ctor public MapTemplate.Builder();
- method public androidx.car.app.navigation.model.MapTemplate build();
- method public androidx.car.app.navigation.model.MapTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
- method public androidx.car.app.navigation.model.MapTemplate.Builder setHeader(androidx.car.app.model.Header);
- method public androidx.car.app.navigation.model.MapTemplate.Builder setItemList(androidx.car.app.model.ItemList);
- method public androidx.car.app.navigation.model.MapTemplate.Builder setMapController(androidx.car.app.navigation.model.MapController);
- method public androidx.car.app.navigation.model.MapTemplate.Builder setPane(androidx.car.app.model.Pane);
- }
-
- @androidx.car.app.annotations.CarProtocol public final class MessageInfo implements androidx.car.app.navigation.model.NavigationTemplate.NavigationInfo {
- method public androidx.car.app.model.CarIcon? getImage();
- method public androidx.car.app.model.CarText? getText();
- method public androidx.car.app.model.CarText? getTitle();
- }
-
- public static final class MessageInfo.Builder {
- ctor public MessageInfo.Builder(CharSequence);
- ctor public MessageInfo.Builder(androidx.car.app.model.CarText);
- method public androidx.car.app.navigation.model.MessageInfo build();
- method public androidx.car.app.navigation.model.MessageInfo.Builder setImage(androidx.car.app.model.CarIcon);
- method public androidx.car.app.navigation.model.MessageInfo.Builder setText(CharSequence);
- method public androidx.car.app.navigation.model.MessageInfo.Builder setText(androidx.car.app.model.CarText);
- method public androidx.car.app.navigation.model.MessageInfo.Builder setTitle(CharSequence);
- }
-
- @androidx.car.app.annotations.CarProtocol public final class NavigationTemplate implements androidx.car.app.model.Template {
- method public androidx.car.app.model.ActionStrip? getActionStrip();
- method public androidx.car.app.model.CarColor? getBackgroundColor();
- method public androidx.car.app.navigation.model.TravelEstimate? getDestinationTravelEstimate();
- method @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.model.ActionStrip? getMapActionStrip();
- method public androidx.car.app.navigation.model.NavigationTemplate.NavigationInfo? getNavigationInfo();
- method @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.navigation.model.PanModeDelegate? getPanModeDelegate();
- method @Deprecated @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.model.Toggle? getPanModeToggle();
- }
-
- public static final class NavigationTemplate.Builder {
- ctor public NavigationTemplate.Builder();
- method public androidx.car.app.navigation.model.NavigationTemplate build();
- method public androidx.car.app.navigation.model.NavigationTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
- method public androidx.car.app.navigation.model.NavigationTemplate.Builder setBackgroundColor(androidx.car.app.model.CarColor);
- method public androidx.car.app.navigation.model.NavigationTemplate.Builder setDestinationTravelEstimate(androidx.car.app.navigation.model.TravelEstimate);
- method @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.navigation.model.NavigationTemplate.Builder setMapActionStrip(androidx.car.app.model.ActionStrip);
- method public androidx.car.app.navigation.model.NavigationTemplate.Builder setNavigationInfo(androidx.car.app.navigation.model.NavigationTemplate.NavigationInfo);
- method @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.navigation.model.NavigationTemplate.Builder setPanModeListener(androidx.car.app.navigation.model.PanModeListener);
- }
-
- public static interface NavigationTemplate.NavigationInfo {
- }
-
- @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(2) public interface PanModeDelegate {
- method public void sendPanModeChanged(boolean, androidx.car.app.OnDoneCallback);
- }
-
- public interface PanModeListener {
- method public void onPanModeChanged(boolean);
- }
-
- @androidx.car.app.annotations.CarProtocol public final class PlaceListNavigationTemplate implements androidx.car.app.model.Template {
- method public androidx.car.app.model.ActionStrip? getActionStrip();
- method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.Header? getHeader();
- method @Deprecated public androidx.car.app.model.Action? getHeaderAction();
- method public androidx.car.app.model.ItemList? getItemList();
- method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.model.ActionStrip? getMapActionStrip();
- method public androidx.car.app.model.OnContentRefreshDelegate? getOnContentRefreshDelegate();
- method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.navigation.model.PanModeDelegate? getPanModeDelegate();
- method @Deprecated public androidx.car.app.model.CarText? getTitle();
- method public boolean isLoading();
- }
-
- public static final class PlaceListNavigationTemplate.Builder {
- ctor public PlaceListNavigationTemplate.Builder();
- method public androidx.car.app.navigation.model.PlaceListNavigationTemplate build();
- method public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
- method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setHeader(androidx.car.app.model.Header);
- method @Deprecated public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
- method public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setItemList(androidx.car.app.model.ItemList);
- method public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setLoading(boolean);
- method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setMapActionStrip(androidx.car.app.model.ActionStrip);
- method public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setOnContentRefreshListener(androidx.car.app.model.OnContentRefreshListener);
- method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setPanModeListener(androidx.car.app.navigation.model.PanModeListener);
- method @Deprecated public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setTitle(CharSequence);
- method @Deprecated public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setTitle(androidx.car.app.model.CarText);
- }
-
- @androidx.car.app.annotations.CarProtocol public final class RoutePreviewNavigationTemplate implements androidx.car.app.model.Template {
- method public androidx.car.app.model.ActionStrip? getActionStrip();
- method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.Header? getHeader();
- method @Deprecated public androidx.car.app.model.Action? getHeaderAction();
- method public androidx.car.app.model.ItemList? getItemList();
- method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.model.ActionStrip? getMapActionStrip();
- method public androidx.car.app.model.Action? getNavigateAction();
- method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.navigation.model.PanModeDelegate? getPanModeDelegate();
- method @Deprecated public androidx.car.app.model.CarText? getTitle();
- method public boolean isLoading();
- }
-
- public static final class RoutePreviewNavigationTemplate.Builder {
- ctor public RoutePreviewNavigationTemplate.Builder();
- method public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate build();
- method public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
- method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setHeader(androidx.car.app.model.Header);
- method @Deprecated public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
- method public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setItemList(androidx.car.app.model.ItemList);
- method public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setLoading(boolean);
- method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setMapActionStrip(androidx.car.app.model.ActionStrip);
- method public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setNavigateAction(androidx.car.app.model.Action);
- method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setPanModeListener(androidx.car.app.navigation.model.PanModeListener);
- method @Deprecated public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setTitle(CharSequence);
- method @Deprecated public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setTitle(androidx.car.app.model.CarText);
- }
-
- @androidx.car.app.annotations.CarProtocol public final class RoutingInfo implements androidx.car.app.navigation.model.NavigationTemplate.NavigationInfo {
- method public androidx.car.app.model.Distance? getCurrentDistance();
- method public androidx.car.app.navigation.model.Step? getCurrentStep();
- method public androidx.car.app.model.CarIcon? getJunctionImage();
- method public androidx.car.app.navigation.model.Step? getNextStep();
- method public boolean isLoading();
- }
-
- public static final class RoutingInfo.Builder {
- ctor public RoutingInfo.Builder();
- method public androidx.car.app.navigation.model.RoutingInfo build();
- method public androidx.car.app.navigation.model.RoutingInfo.Builder setCurrentStep(androidx.car.app.navigation.model.Step, androidx.car.app.model.Distance);
- method public androidx.car.app.navigation.model.RoutingInfo.Builder setJunctionImage(androidx.car.app.model.CarIcon);
- method public androidx.car.app.navigation.model.RoutingInfo.Builder setLoading(boolean);
- method public androidx.car.app.navigation.model.RoutingInfo.Builder setNextStep(androidx.car.app.navigation.model.Step);
- }
-
- @androidx.car.app.annotations.CarProtocol public final class Step {
- method public androidx.car.app.model.CarText? getCue();
- method public java.util.List<androidx.car.app.navigation.model.Lane!> getLanes();
- method public androidx.car.app.model.CarIcon? getLanesImage();
- method public androidx.car.app.navigation.model.Maneuver? getManeuver();
- method public androidx.car.app.model.CarText? getRoad();
- }
-
- public static final class Step.Builder {
- ctor public Step.Builder();
- ctor public Step.Builder(CharSequence);
- ctor public Step.Builder(androidx.car.app.model.CarText);
- method public androidx.car.app.navigation.model.Step.Builder addLane(androidx.car.app.navigation.model.Lane);
- method public androidx.car.app.navigation.model.Step build();
- method public androidx.car.app.navigation.model.Step.Builder setCue(CharSequence);
- method public androidx.car.app.navigation.model.Step.Builder setLanesImage(androidx.car.app.model.CarIcon);
- method public androidx.car.app.navigation.model.Step.Builder setManeuver(androidx.car.app.navigation.model.Maneuver);
- method public androidx.car.app.navigation.model.Step.Builder setRoad(CharSequence);
- }
-
- @androidx.car.app.annotations.CarProtocol public final class TravelEstimate {
- method public androidx.car.app.model.DateTimeWithZone? getArrivalTimeAtDestination();
- method public androidx.car.app.model.Distance? getRemainingDistance();
- method public androidx.car.app.model.CarColor? getRemainingDistanceColor();
- method public androidx.car.app.model.CarColor? getRemainingTimeColor();
- method public long getRemainingTimeSeconds();
- method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.CarIcon? getTripIcon();
- method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.CarText? getTripText();
- field public static final long REMAINING_TIME_UNKNOWN = -1L; // 0xffffffffffffffffL
- }
-
- public static final class TravelEstimate.Builder {
- ctor public TravelEstimate.Builder(androidx.car.app.model.Distance, androidx.car.app.model.DateTimeWithZone);
- ctor @RequiresApi(26) public TravelEstimate.Builder(androidx.car.app.model.Distance, java.time.ZonedDateTime);
- method public androidx.car.app.navigation.model.TravelEstimate build();
- method public androidx.car.app.navigation.model.TravelEstimate.Builder setRemainingDistanceColor(androidx.car.app.model.CarColor);
- method @RequiresApi(26) public androidx.car.app.navigation.model.TravelEstimate.Builder setRemainingTime(java.time.Duration);
- method public androidx.car.app.navigation.model.TravelEstimate.Builder setRemainingTimeColor(androidx.car.app.model.CarColor);
- method public androidx.car.app.navigation.model.TravelEstimate.Builder setRemainingTimeSeconds(@IntRange(from=0xffffffff) long);
- method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.navigation.model.TravelEstimate.Builder setTripIcon(androidx.car.app.model.CarIcon);
- method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.navigation.model.TravelEstimate.Builder setTripText(androidx.car.app.model.CarText);
- }
-
- @androidx.car.app.annotations.CarProtocol public final class Trip {
- method public androidx.car.app.model.CarText? getCurrentRoad();
- method public java.util.List<androidx.car.app.navigation.model.TravelEstimate!> getDestinationTravelEstimates();
- method public java.util.List<androidx.car.app.navigation.model.Destination!> getDestinations();
- method public java.util.List<androidx.car.app.navigation.model.TravelEstimate!> getStepTravelEstimates();
- method public java.util.List<androidx.car.app.navigation.model.Step!> getSteps();
- method public boolean isLoading();
- }
-
- public static final class Trip.Builder {
- ctor public Trip.Builder();
- method public androidx.car.app.navigation.model.Trip.Builder addDestination(androidx.car.app.navigation.model.Destination, androidx.car.app.navigation.model.TravelEstimate);
- method public androidx.car.app.navigation.model.Trip.Builder addStep(androidx.car.app.navigation.model.Step, androidx.car.app.navigation.model.TravelEstimate);
- method public androidx.car.app.navigation.model.Trip build();
- method public androidx.car.app.navigation.model.Trip.Builder setCurrentRoad(CharSequence);
- method public androidx.car.app.navigation.model.Trip.Builder setLoading(boolean);
- }
-
-}
-
-package androidx.car.app.notification {
-
- public final class CarAppExtender implements androidx.core.app.NotificationCompat.Extender {
- ctor public CarAppExtender(android.app.Notification);
- method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Builder);
- method public java.util.List<android.app.Notification.Action!> getActions();
- method public String? getChannelId();
- method public androidx.car.app.model.CarColor? getColor();
- method public android.app.PendingIntent? getContentIntent();
- method public CharSequence? getContentText();
- method public CharSequence? getContentTitle();
- method public android.app.PendingIntent? getDeleteIntent();
- method public int getImportance();
- method public android.graphics.Bitmap? getLargeIcon();
- method @DrawableRes public int getSmallIcon();
- method public static boolean isExtended(android.app.Notification);
- }
-
- public static final class CarAppExtender.Builder {
- ctor public CarAppExtender.Builder();
- method public androidx.car.app.notification.CarAppExtender.Builder addAction(@DrawableRes int, CharSequence, android.app.PendingIntent);
- method public androidx.car.app.notification.CarAppExtender build();
- method public androidx.car.app.notification.CarAppExtender.Builder setChannelId(String);
- method public androidx.car.app.notification.CarAppExtender.Builder setColor(androidx.car.app.model.CarColor);
- method public androidx.car.app.notification.CarAppExtender.Builder setContentIntent(android.app.PendingIntent);
- method public androidx.car.app.notification.CarAppExtender.Builder setContentText(CharSequence);
- method public androidx.car.app.notification.CarAppExtender.Builder setContentTitle(CharSequence);
- method public androidx.car.app.notification.CarAppExtender.Builder setDeleteIntent(android.app.PendingIntent);
- method public androidx.car.app.notification.CarAppExtender.Builder setImportance(int);
- method public androidx.car.app.notification.CarAppExtender.Builder setLargeIcon(android.graphics.Bitmap);
- method public androidx.car.app.notification.CarAppExtender.Builder setSmallIcon(int);
- }
-
- public final class CarNotificationManager {
- method public boolean areNotificationsEnabled();
- method public void cancel(int);
- method public void cancel(String?, int);
- method public void cancelAll();
- method public void createNotificationChannel(androidx.core.app.NotificationChannelCompat);
- method public void createNotificationChannelGroup(androidx.core.app.NotificationChannelGroupCompat);
- method public void createNotificationChannelGroups(java.util.List<androidx.core.app.NotificationChannelGroupCompat!>);
- method public void createNotificationChannels(java.util.List<androidx.core.app.NotificationChannelCompat!>);
- method public void deleteNotificationChannel(String);
- method public void deleteNotificationChannelGroup(String);
- method public void deleteUnlistedNotificationChannels(java.util.Collection<java.lang.String!>);
- method public static androidx.car.app.notification.CarNotificationManager from(android.content.Context);
- method public static java.util.Set<java.lang.String!> getEnabledListenerPackages(android.content.Context);
- method public int getImportance();
- method public androidx.core.app.NotificationChannelCompat? getNotificationChannel(String);
- method public androidx.core.app.NotificationChannelCompat? getNotificationChannel(String, String);
- method public androidx.core.app.NotificationChannelGroupCompat? getNotificationChannelGroup(String);
- method public java.util.List<androidx.core.app.NotificationChannelGroupCompat!> getNotificationChannelGroups();
- method public java.util.List<androidx.core.app.NotificationChannelCompat!> getNotificationChannels();
- method public void notify(int, androidx.core.app.NotificationCompat.Builder);
- method public void notify(String?, int, androidx.core.app.NotificationCompat.Builder);
- }
-
- public final class CarPendingIntent {
- method public static android.app.PendingIntent getCarApp(android.content.Context, int, android.content.Intent, int);
- }
-
-}
-
-package androidx.car.app.serialization {
-
- public final class Bundleable implements android.os.Parcelable {
- method public static androidx.car.app.serialization.Bundleable create(Object) throws androidx.car.app.serialization.BundlerException;
- method public int describeContents();
- method public Object get() throws androidx.car.app.serialization.BundlerException;
- method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<androidx.car.app.serialization.Bundleable!> CREATOR;
- }
-
- public class BundlerException extends java.lang.Exception {
- ctor public BundlerException(String?, Throwable);
- ctor public BundlerException(String?);
- }
-
-}
-
-package androidx.car.app.suggestion {
-
- @androidx.car.app.annotations.RequiresCarApi(5) public class SuggestionManager implements androidx.car.app.managers.Manager {
- method @MainThread public void updateSuggestions(java.util.List<androidx.car.app.suggestion.model.Suggestion!>);
- }
-
-}
-
-package androidx.car.app.suggestion.model {
-
- @androidx.car.app.annotations.CarProtocol public final class Suggestion {
- method public android.app.PendingIntent? getAction();
- method public androidx.car.app.model.CarIcon? getIcon();
- method public String getIdentifier();
- method public androidx.car.app.model.CarText? getSubtitle();
- method public androidx.car.app.model.CarText getTitle();
- }
-
- public static final class Suggestion.Builder {
- ctor public Suggestion.Builder();
- method public androidx.car.app.suggestion.model.Suggestion build();
- method public androidx.car.app.suggestion.model.Suggestion.Builder setAction(android.app.PendingIntent);
- method public androidx.car.app.suggestion.model.Suggestion.Builder setIcon(androidx.car.app.model.CarIcon);
- method public androidx.car.app.suggestion.model.Suggestion.Builder setIdentifier(String);
- method public androidx.car.app.suggestion.model.Suggestion.Builder setSubtitle(CharSequence);
- method public androidx.car.app.suggestion.model.Suggestion.Builder setTitle(CharSequence);
- }
-
-}
-
-package androidx.car.app.validation {
-
- public final class HostValidator {
- method public java.util.Map<java.lang.String!,java.util.List<java.lang.String!>!> getAllowedHosts();
- method public boolean isValidHost(androidx.car.app.HostInfo);
- field public static final androidx.car.app.validation.HostValidator ALLOW_ALL_HOSTS_VALIDATOR;
- field public static final String TEMPLATE_RENDERER_PERMISSION = "android.car.permission.TEMPLATE_RENDERER";
- }
-
- public static final class HostValidator.Builder {
- ctor public HostValidator.Builder(android.content.Context);
- method public androidx.car.app.validation.HostValidator.Builder addAllowedHost(String, String);
- method public androidx.car.app.validation.HostValidator.Builder addAllowedHosts(@ArrayRes int);
- method public androidx.car.app.validation.HostValidator build();
- }
-
-}
-
-package androidx.car.app.versioning {
-
- public final class CarAppApiLevels {
- method public static int getLatest();
- method public static int getOldest();
- field public static final int LEVEL_1 = 1; // 0x1
- field public static final int LEVEL_2 = 2; // 0x2
- field public static final int LEVEL_3 = 3; // 0x3
- field public static final int LEVEL_4 = 4; // 0x4
- field public static final int LEVEL_5 = 5; // 0x5
- field public static final int LEVEL_6 = 6; // 0x6
- field public static final int LEVEL_7 = 7; // 0x7
- }
-
-}
-
diff --git a/car/app/app/api/restricted_current.txt b/car/app/app/api/restricted_current.txt
index ebb7251..b28d7ca 100644
--- a/car/app/app/api/restricted_current.txt
+++ b/car/app/app/api/restricted_current.txt
@@ -36,11 +36,16 @@
method public androidx.car.app.Session onCreateSession();
method @androidx.car.app.annotations.RequiresCarApi(6) public androidx.car.app.Session onCreateSession(androidx.car.app.SessionInfo);
method public final boolean onUnbind(android.content.Intent);
+ field @androidx.car.app.annotations.ExperimentalCarApi public static final String CATEGORY_CALLING_APP = "androidx.car.app.category.CALLING";
field @Deprecated public static final String CATEGORY_CHARGING_APP = "androidx.car.app.category.CHARGING";
field @androidx.car.app.annotations.RequiresCarApi(6) public static final String CATEGORY_FEATURE_CLUSTER = "androidx.car.app.category.FEATURE_CLUSTER";
+ field @androidx.car.app.annotations.ExperimentalCarApi public static final String CATEGORY_IOT_APP = "androidx.car.app.category.IOT";
+ field @androidx.car.app.annotations.ExperimentalCarApi public static final String CATEGORY_MESSAGING_APP = "androidx.car.app.category.MESSAGING";
field public static final String CATEGORY_NAVIGATION_APP = "androidx.car.app.category.NAVIGATION";
field @Deprecated public static final String CATEGORY_PARKING_APP = "androidx.car.app.category.PARKING";
field public static final String CATEGORY_POI_APP = "androidx.car.app.category.POI";
+ field @androidx.car.app.annotations.ExperimentalCarApi public static final String CATEGORY_SETTINGS_APP = "androidx.car.app.category.SETTINGS";
+ field @androidx.car.app.annotations.ExperimentalCarApi public static final String CATEGORY_WEATHER_APP = "androidx.car.app.category.WEATHER";
field public static final String SERVICE_INTERFACE = "androidx.car.app.CarAppService";
}
@@ -48,8 +53,8 @@
method public void finishCarApp();
method @androidx.car.app.annotations.RequiresCarApi(2) public android.content.ComponentName? getCallingComponent();
method public int getCarAppApiLevel();
- method public Object getCarService(String);
method public <T> T getCarService(Class<T!>);
+ method public Object getCarService(String);
method public String getCarServiceName(Class<?>);
method public androidx.car.app.HostInfo? getHostInfo();
method public androidx.activity.OnBackPressedDispatcher getOnBackPressedDispatcher();
@@ -201,6 +206,9 @@
@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.PARAMETER}) public @interface CarProtocol {
}
+ @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD}) public @interface ExperimentalCarApi {
+ }
+
@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD}) public @interface RequiresCarApi {
method public abstract int value();
}
@@ -238,27 +246,342 @@
package androidx.car.app.hardware {
@MainThread @androidx.car.app.annotations.RequiresCarApi(3) public interface CarHardwareManager extends androidx.car.app.managers.Manager {
+ method @androidx.car.app.annotations.ExperimentalCarApi public default androidx.car.app.hardware.climate.CarClimate getCarClimate();
method public default androidx.car.app.hardware.info.CarInfo getCarInfo();
method public default androidx.car.app.hardware.info.CarSensors getCarSensors();
}
}
+package androidx.car.app.hardware.climate {
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class CabinTemperatureProfile {
+ method public java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Float!,java.lang.Float!>!> getCarZoneSetsToCabinCelsiusTemperatureRanges();
+ method public float getCelsiusSupportedIncrement();
+ method public float getFahrenheitSupportedIncrement();
+ method public android.util.Pair<java.lang.Float!,java.lang.Float!> getSupportedMinMaxCelsiusRange();
+ method public android.util.Pair<java.lang.Float!,java.lang.Float!> getSupportedMinMaxFahrenheitRange();
+ method public boolean hasCarZoneSetsToCabinCelsiusTemperatureRanges();
+ method public boolean hasCelsiusSupportedIncrement();
+ method public boolean hasFahrenheitSupportedIncrement();
+ method public boolean hasSupportedMinMaxCelsiusRange();
+ method public boolean hasSupportedMinMaxFahrenheitRange();
+ }
+
+ public static final class CabinTemperatureProfile.Builder {
+ ctor public CabinTemperatureProfile.Builder();
+ method public androidx.car.app.hardware.climate.CabinTemperatureProfile build();
+ method public androidx.car.app.hardware.climate.CabinTemperatureProfile.Builder setCarZoneSetsToCabinCelsiusTemperatureRanges(java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Float!,java.lang.Float!>!>);
+ method public androidx.car.app.hardware.climate.CabinTemperatureProfile.Builder setCelsiusSupportedIncrement(float);
+ method public androidx.car.app.hardware.climate.CabinTemperatureProfile.Builder setFahrenheitSupportedIncrement(float);
+ method public androidx.car.app.hardware.climate.CabinTemperatureProfile.Builder setSupportedMinMaxCelsiusRange(android.util.Pair<java.lang.Float!,java.lang.Float!>);
+ method public androidx.car.app.hardware.climate.CabinTemperatureProfile.Builder setSupportedMinMaxFahrenheitRange(android.util.Pair<java.lang.Float!,java.lang.Float!>);
+ }
+
+ @MainThread @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public interface CarClimate {
+ method public void fetchClimateProfile(java.util.concurrent.Executor, androidx.car.app.hardware.climate.ClimateProfileRequest, androidx.car.app.hardware.climate.CarClimateProfileCallback);
+ method public void registerClimateStateCallback(java.util.concurrent.Executor, androidx.car.app.hardware.climate.RegisterClimateStateRequest, androidx.car.app.hardware.climate.CarClimateStateCallback);
+ method public <E> void setClimateState(java.util.concurrent.Executor, androidx.car.app.hardware.climate.ClimateStateRequest<E!>, androidx.car.app.hardware.common.CarSetOperationStatusCallback);
+ method public void unregisterClimateStateCallback(androidx.car.app.hardware.climate.CarClimateStateCallback);
+ }
+
+ @MainThread @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public final class CarClimateFeature {
+ method public java.util.List<androidx.car.app.hardware.common.CarZone!> getCarZones();
+ method public int getFeature();
+ }
+
+ public static final class CarClimateFeature.Builder {
+ ctor public CarClimateFeature.Builder(int);
+ method public androidx.car.app.hardware.climate.CarClimateFeature.Builder addCarZones(androidx.car.app.hardware.common.CarZone!...);
+ method public androidx.car.app.hardware.climate.CarClimateFeature build();
+ }
+
+ @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public interface CarClimateProfileCallback {
+ method public default void onCabinTemperatureProfileAvailable(androidx.car.app.hardware.climate.CabinTemperatureProfile);
+ method public default void onCarZoneMappingInfoProfileAvailable(androidx.car.app.hardware.climate.CarZoneMappingInfoProfile);
+ method public default void onDefrosterProfileAvailable(androidx.car.app.hardware.climate.DefrosterProfile);
+ method public default void onElectricDefrosterProfileAvailable(androidx.car.app.hardware.climate.ElectricDefrosterProfile);
+ method public default void onFanDirectionProfileAvailable(androidx.car.app.hardware.climate.FanDirectionProfile);
+ method public default void onFanSpeedLevelProfileAvailable(androidx.car.app.hardware.climate.FanSpeedLevelProfile);
+ method public default void onHvacAcProfileAvailable(androidx.car.app.hardware.climate.HvacAcProfile);
+ method public default void onHvacAutoModeProfileAvailable(androidx.car.app.hardware.climate.HvacAutoModeProfile);
+ method public default void onHvacAutoRecirculationProfileAvailable(androidx.car.app.hardware.climate.HvacAutoRecirculationProfile);
+ method public default void onHvacDualModeProfileAvailable(androidx.car.app.hardware.climate.HvacDualModeProfile);
+ method public default void onHvacMaxAcModeProfileAvailable(androidx.car.app.hardware.climate.HvacMaxAcModeProfile);
+ method public default void onHvacPowerProfileAvailable(androidx.car.app.hardware.climate.HvacPowerProfile);
+ method public default void onHvacRecirculationProfileAvailable(androidx.car.app.hardware.climate.HvacRecirculationProfile);
+ method public default void onMaxDefrosterProfileAvailable(androidx.car.app.hardware.climate.MaxDefrosterProfile);
+ method public default void onSeatTemperatureLevelProfileAvailable(androidx.car.app.hardware.climate.SeatTemperatureProfile);
+ method public default void onSeatVentilationLevelProfileAvailable(androidx.car.app.hardware.climate.SeatVentilationProfile);
+ method public default void onSteeringWheelHeatProfileAvailable(androidx.car.app.hardware.climate.SteeringWheelHeatProfile);
+ }
+
+ @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public interface CarClimateStateCallback {
+ method public default void onCabinTemperatureStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Float!>);
+ method public default void onDefrosterStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+ method public default void onElectricDefrosterStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+ method public default void onFanDirectionStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
+ method public default void onFanSpeedLevelStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
+ method public default void onHvacAcStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+ method public default void onHvacAutoModeStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+ method public default void onHvacAutoRecirculationStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+ method public default void onHvacDualModeStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+ method public default void onHvacMaxAcModeStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+ method public default void onHvacPowerStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+ method public default void onHvacRecirculationStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+ method public default void onMaxDefrosterStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+ method public default void onSeatTemperatureLevelStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
+ method public default void onSeatVentilationLevelStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
+ method public default void onSteeringWheelHeatStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class CarZoneMappingInfoProfile {
+ method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+ }
+
+ public static final class CarZoneMappingInfoProfile.Builder {
+ ctor public CarZoneMappingInfoProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+ method public androidx.car.app.hardware.climate.CarZoneMappingInfoProfile build();
+ }
+
+ @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public final class ClimateProfileRequest {
+ method public java.util.Set<java.lang.Integer!> getAllClimateProfiles();
+ method public java.util.List<androidx.car.app.hardware.climate.CarClimateFeature!> getClimateProfileFeatures();
+ field public static final int FEATURE_CABIN_TEMPERATURE = 4; // 0x4
+ field public static final int FEATURE_CAR_ZONE_MAPPING = 17; // 0x11
+ field public static final int FEATURE_FAN_DIRECTION = 6; // 0x6
+ field public static final int FEATURE_FAN_SPEED = 5; // 0x5
+ field public static final int FEATURE_HVAC_AC = 2; // 0x2
+ field public static final int FEATURE_HVAC_AUTO_MODE = 12; // 0xc
+ field public static final int FEATURE_HVAC_AUTO_RECIRCULATION = 11; // 0xb
+ field public static final int FEATURE_HVAC_DEFROSTER = 14; // 0xe
+ field public static final int FEATURE_HVAC_DUAL_MODE = 13; // 0xd
+ field public static final int FEATURE_HVAC_ELECTRIC_DEFROSTER = 16; // 0x10
+ field public static final int FEATURE_HVAC_MAX_AC = 3; // 0x3
+ field public static final int FEATURE_HVAC_MAX_DEFROSTER = 15; // 0xf
+ field public static final int FEATURE_HVAC_POWER = 1; // 0x1
+ field public static final int FEATURE_HVAC_RECIRCULATION = 10; // 0xa
+ field public static final int FEATURE_SEAT_TEMPERATURE_LEVEL = 7; // 0x7
+ field public static final int FEATURE_SEAT_VENTILATION_LEVEL = 8; // 0x8
+ field public static final int FEATURE_STEERING_WHEEL_HEAT = 9; // 0x9
+ }
+
+ public static final class ClimateProfileRequest.Builder {
+ ctor public ClimateProfileRequest.Builder();
+ method public androidx.car.app.hardware.climate.ClimateProfileRequest.Builder addClimateProfileFeatures(androidx.car.app.hardware.climate.CarClimateFeature!...);
+ method public androidx.car.app.hardware.climate.ClimateProfileRequest build();
+ method public androidx.car.app.hardware.climate.ClimateProfileRequest.Builder setAllClimateProfiles();
+ }
+
+ @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public final class ClimateStateRequest<T> {
+ method public java.util.List<androidx.car.app.hardware.common.CarZone!> getCarZones();
+ method public int getRequestedFeature();
+ method public T getRequestedValue();
+ }
+
+ public static final class ClimateStateRequest.Builder<T> {
+ ctor public ClimateStateRequest.Builder(int, T!);
+ method public androidx.car.app.hardware.climate.ClimateStateRequest.Builder<T!> addCarZones(androidx.car.app.hardware.common.CarZone);
+ method public androidx.car.app.hardware.climate.ClimateStateRequest<T!> build();
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class DefrosterProfile {
+ method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+ }
+
+ public static final class DefrosterProfile.Builder {
+ ctor public DefrosterProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+ method public androidx.car.app.hardware.climate.DefrosterProfile build();
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class ElectricDefrosterProfile {
+ method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+ }
+
+ public static final class ElectricDefrosterProfile.Builder {
+ ctor public ElectricDefrosterProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+ method public androidx.car.app.hardware.climate.ElectricDefrosterProfile build();
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class FanDirectionProfile {
+ method public java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,java.util.Set<java.lang.Integer!>!> getCarZoneSetsToFanDirectionValues();
+ }
+
+ public static final class FanDirectionProfile.Builder {
+ ctor public FanDirectionProfile.Builder(java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,java.util.Set<java.lang.Integer!>!>);
+ method public androidx.car.app.hardware.climate.FanDirectionProfile build();
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class FanSpeedLevelProfile {
+ method public java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!> getCarZoneSetsToFanSpeedLevelRanges();
+ }
+
+ public static final class FanSpeedLevelProfile.Builder {
+ ctor public FanSpeedLevelProfile.Builder(java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!>);
+ method public androidx.car.app.hardware.climate.FanSpeedLevelProfile build();
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class HvacAcProfile {
+ method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+ }
+
+ public static final class HvacAcProfile.Builder {
+ ctor public HvacAcProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+ method public androidx.car.app.hardware.climate.HvacAcProfile build();
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class HvacAutoModeProfile {
+ method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+ }
+
+ public static final class HvacAutoModeProfile.Builder {
+ ctor public HvacAutoModeProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+ method public androidx.car.app.hardware.climate.HvacAutoModeProfile build();
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class HvacAutoRecirculationProfile {
+ method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+ }
+
+ public static final class HvacAutoRecirculationProfile.Builder {
+ ctor public HvacAutoRecirculationProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+ method public androidx.car.app.hardware.climate.HvacAutoRecirculationProfile build();
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class HvacDualModeProfile {
+ method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+ }
+
+ public static final class HvacDualModeProfile.Builder {
+ ctor public HvacDualModeProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+ method public androidx.car.app.hardware.climate.HvacDualModeProfile build();
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class HvacMaxAcModeProfile {
+ method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+ }
+
+ public static final class HvacMaxAcModeProfile.Builder {
+ ctor public HvacMaxAcModeProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+ method public androidx.car.app.hardware.climate.HvacMaxAcModeProfile build();
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class HvacPowerProfile {
+ method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+ }
+
+ public static final class HvacPowerProfile.Builder {
+ ctor public HvacPowerProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+ method public androidx.car.app.hardware.climate.HvacPowerProfile build();
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class HvacRecirculationProfile {
+ method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZones();
+ }
+
+ public static final class HvacRecirculationProfile.Builder {
+ ctor public HvacRecirculationProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+ method public androidx.car.app.hardware.climate.HvacRecirculationProfile build();
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class MaxDefrosterProfile {
+ method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+ }
+
+ public static final class MaxDefrosterProfile.Builder {
+ ctor public MaxDefrosterProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+ method public androidx.car.app.hardware.climate.MaxDefrosterProfile build();
+ }
+
+ @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public final class RegisterClimateStateRequest {
+ method public java.util.List<androidx.car.app.hardware.climate.CarClimateFeature!> getClimateRegisterFeatures();
+ }
+
+ public static final class RegisterClimateStateRequest.Builder {
+ ctor public RegisterClimateStateRequest.Builder(boolean);
+ method public androidx.car.app.hardware.climate.RegisterClimateStateRequest.Builder addClimateRegisterFeatures(androidx.car.app.hardware.climate.CarClimateFeature!...);
+ method public androidx.car.app.hardware.climate.RegisterClimateStateRequest build();
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class SeatTemperatureProfile {
+ method public java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!> getCarZoneSetsToSeatTemperatureValues();
+ }
+
+ public static final class SeatTemperatureProfile.Builder {
+ ctor public SeatTemperatureProfile.Builder(java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!>);
+ method public androidx.car.app.hardware.climate.SeatTemperatureProfile build();
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class SeatVentilationProfile {
+ method public java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!> getCarZoneSetsToSeatVentilationValues();
+ }
+
+ public static final class SeatVentilationProfile.Builder {
+ ctor public SeatVentilationProfile.Builder(java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!>);
+ method public androidx.car.app.hardware.climate.SeatVentilationProfile build();
+ }
+
+ @androidx.car.app.annotations.ExperimentalCarApi public final class SteeringWheelHeatProfile {
+ method public java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!> getCarZoneSetsToSteeringWheelHeatValues();
+ }
+
+ public static final class SteeringWheelHeatProfile.Builder {
+ ctor public SteeringWheelHeatProfile.Builder(java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!>);
+ method public androidx.car.app.hardware.climate.SteeringWheelHeatProfile build();
+ }
+
+}
+
package androidx.car.app.hardware.common {
+ @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public interface CarSetOperationStatusCallback {
+ method public default void onSetCarClimateStateCabinTemperature(int);
+ method public default void onSetCarClimateStateDefroster(int);
+ method public default void onSetCarClimateStateElectricDefroster(int);
+ method public default void onSetCarClimateStateFanDirection(int);
+ method public default void onSetCarClimateStateFanSpeedLevel(int);
+ method public default void onSetCarClimateStateHvacAc(int);
+ method public default void onSetCarClimateStateHvacAutoMode(int);
+ method public default void onSetCarClimateStateHvacAutoRecirculation(int);
+ method public default void onSetCarClimateStateHvacDualMode(int);
+ method public default void onSetCarClimateStateHvacMaxAcMode(int);
+ method public default void onSetCarClimateStateHvacPower(int);
+ method public default void onSetCarClimateStateHvacRecirculation(int);
+ method public default void onSetCarClimateStateMaxDefroster(int);
+ method public default void onSetCarClimateStateSeatTemperatureLevel(int);
+ method public default void onSetCarClimateStateSeatVentilationLevel(int);
+ method public default void onSetCarClimateStateSteeringWheelHeat(int);
+ method public static String toString(int);
+ field public static final int OPERATION_STATUS_FEATURE_SETTING_NOT_ALLOWED = 4; // 0x4
+ field public static final int OPERATION_STATUS_FEATURE_TEMPORARILY_UNAVAILABLE = 3; // 0x3
+ field public static final int OPERATION_STATUS_FEATURE_UNIMPLEMENTED = 1; // 0x1
+ field public static final int OPERATION_STATUS_FEATURE_UNSUPPORTED = 2; // 0x2
+ field public static final int OPERATION_STATUS_ILLEGAL_CAR_HARDWARE_STATE = 7; // 0x7
+ field public static final int OPERATION_STATUS_INSUFFICIENT_PERMISSION = 6; // 0x6
+ field public static final int OPERATION_STATUS_SUCCESS = 0; // 0x0
+ field public static final int OPERATION_STATUS_UNSUPPORTED_VALUE = 5; // 0x5
+ field public static final int OPERATION_STATUS_UPDATE_TIMEOUT = 8; // 0x8
+ }
+
@androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class CarUnit {
method public static String toString(int);
+ field @androidx.car.app.annotations.ExperimentalCarApi public static final int IMPERIAL_GALLON = 204; // 0xcc
field public static final int KILOMETER = 3; // 0x3
field public static final int KILOMETERS_PER_HOUR = 102; // 0x66
+ field @androidx.car.app.annotations.ExperimentalCarApi public static final int LITER = 202; // 0xca
field public static final int METER = 2; // 0x2
field public static final int METERS_PER_SEC = 101; // 0x65
field public static final int MILE = 4; // 0x4
field public static final int MILES_PER_HOUR = 103; // 0x67
+ field @androidx.car.app.annotations.ExperimentalCarApi public static final int MILLILITER = 201; // 0xc9
field public static final int MILLIMETER = 1; // 0x1
+ field @androidx.car.app.annotations.ExperimentalCarApi public static final int US_GALLON = 203; // 0xcb
}
@androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class CarValue<T> {
ctor public CarValue(T?, long, int);
+ ctor @androidx.car.app.annotations.ExperimentalCarApi public CarValue(T?, long, int, java.util.List<androidx.car.app.hardware.common.CarZone!>);
+ method @androidx.car.app.annotations.ExperimentalCarApi public java.util.List<androidx.car.app.hardware.common.CarZone!> getCarZones();
method public int getStatus();
method public long getTimestampMillis();
method public T? getValue();
@@ -268,6 +591,30 @@
field public static final int STATUS_UNKNOWN = 0; // 0x0
}
+ @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public final class CarZone {
+ method public int getColumn();
+ method public int getRow();
+ field public static final int CAR_ZONE_COLUMN_ALL = 16; // 0x10
+ field public static final int CAR_ZONE_COLUMN_CENTER = 48; // 0x30
+ field public static final int CAR_ZONE_COLUMN_DRIVER = 80; // 0x50
+ field public static final int CAR_ZONE_COLUMN_LEFT = 32; // 0x20
+ field public static final int CAR_ZONE_COLUMN_PASSENGER = 96; // 0x60
+ field public static final int CAR_ZONE_COLUMN_RIGHT = 64; // 0x40
+ field public static final androidx.car.app.hardware.common.CarZone CAR_ZONE_GLOBAL;
+ field public static final int CAR_ZONE_ROW_ALL = 0; // 0x0
+ field public static final int CAR_ZONE_ROW_EXCLUDE_FIRST = 4; // 0x4
+ field public static final int CAR_ZONE_ROW_FIRST = 1; // 0x1
+ field public static final int CAR_ZONE_ROW_SECOND = 2; // 0x2
+ field public static final int CAR_ZONE_ROW_THIRD = 3; // 0x3
+ }
+
+ public static final class CarZone.Builder {
+ ctor public CarZone.Builder();
+ method public androidx.car.app.hardware.common.CarZone build();
+ method public androidx.car.app.hardware.common.CarZone.Builder setColumn(int);
+ method public androidx.car.app.hardware.common.CarZone.Builder setRow(int);
+ }
+
@androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public interface OnCarDataAvailableListener<T> {
method public void onCarDataAvailable(T);
}
@@ -288,12 +635,14 @@
@MainThread @androidx.car.app.annotations.RequiresCarApi(3) public interface CarInfo {
method public void addEnergyLevelListener(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.EnergyLevel!>);
+ method @androidx.car.app.annotations.ExperimentalCarApi public void addEvStatusListener(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.EvStatus!>);
method public void addMileageListener(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Mileage!>);
method public void addSpeedListener(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Speed!>);
method public void addTollListener(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.TollCard!>);
method public void fetchEnergyProfile(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.EnergyProfile!>);
method public void fetchModel(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Model!>);
method public void removeEnergyLevelListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.EnergyLevel!>);
+ method @androidx.car.app.annotations.ExperimentalCarApi public void removeEvStatusListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.EvStatus!>);
method public void removeMileageListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Mileage!>);
method public void removeSpeedListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Speed!>);
method public void removeTollListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.TollCard!>);
@@ -323,6 +672,7 @@
method public androidx.car.app.hardware.common.CarValue<java.lang.Integer!> getDistanceDisplayUnit();
method public androidx.car.app.hardware.common.CarValue<java.lang.Boolean!> getEnergyIsLow();
method public androidx.car.app.hardware.common.CarValue<java.lang.Float!> getFuelPercent();
+ method @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.hardware.common.CarValue<java.lang.Integer!> getFuelVolumeDisplayUnit();
method public androidx.car.app.hardware.common.CarValue<java.lang.Float!> getRangeRemainingMeters();
}
@@ -333,6 +683,7 @@
method public androidx.car.app.hardware.info.EnergyLevel.Builder setDistanceDisplayUnit(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
method public androidx.car.app.hardware.info.EnergyLevel.Builder setEnergyIsLow(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
method public androidx.car.app.hardware.info.EnergyLevel.Builder setFuelPercent(androidx.car.app.hardware.common.CarValue<java.lang.Float!>);
+ method @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.hardware.info.EnergyLevel.Builder setFuelVolumeDisplayUnit(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
method public androidx.car.app.hardware.info.EnergyLevel.Builder setRangeRemainingMeters(androidx.car.app.hardware.common.CarValue<java.lang.Float!>);
}
@@ -374,6 +725,18 @@
method public androidx.car.app.hardware.info.EnergyProfile.Builder setFuelTypes(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Integer!>!>);
}
+ @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi public class EvStatus {
+ method public androidx.car.app.hardware.common.CarValue<java.lang.Boolean!> getEvChargePortConnected();
+ method public androidx.car.app.hardware.common.CarValue<java.lang.Boolean!> getEvChargePortOpen();
+ }
+
+ public static final class EvStatus.Builder {
+ ctor public EvStatus.Builder();
+ method public androidx.car.app.hardware.info.EvStatus build();
+ method public androidx.car.app.hardware.info.EvStatus.Builder setEvChargePortConnected(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+ method public androidx.car.app.hardware.info.EvStatus.Builder setEvChargePortOpen(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+ }
+
@androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class Gyroscope {
ctor public Gyroscope(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float!>!>);
method public androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float!>!> getRotations();
@@ -493,6 +856,66 @@
}
+package androidx.car.app.messaging {
+
+ @androidx.car.app.annotations.ExperimentalCarApi public class MessagingServiceConstants {
+ field public static final String ACTION_HANDLE_CAR_MESSAGING = "androidx.car.app.messaging.action.HANDLE_CAR_MESSAGING";
+ }
+
+}
+
+package androidx.car.app.messaging.model {
+
+ @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public class CarMessage {
+ method public androidx.car.app.model.CarText getBody();
+ method public long getReceivedTimeEpochMillis();
+ method public androidx.core.app.Person? getSender();
+ method public boolean isRead();
+ }
+
+ public static final class CarMessage.Builder {
+ ctor public CarMessage.Builder();
+ method public androidx.car.app.messaging.model.CarMessage build();
+ method public androidx.car.app.messaging.model.CarMessage.Builder setBody(androidx.car.app.model.CarText);
+ method public androidx.car.app.messaging.model.CarMessage.Builder setRead(boolean);
+ method public androidx.car.app.messaging.model.CarMessage.Builder setReceivedTimeEpochMillis(long);
+ method public androidx.car.app.messaging.model.CarMessage.Builder setSender(androidx.core.app.Person?);
+ }
+
+ @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi public interface ConversationCallback {
+ method public void onMarkAsRead();
+ method public void onTextReply(String);
+ }
+
+ @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public interface ConversationCallbackDelegate {
+ method public void sendMarkAsRead(androidx.car.app.OnDoneCallback);
+ method public void sendTextReply(String, androidx.car.app.OnDoneCallback);
+ }
+
+ @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public class ConversationItem implements androidx.car.app.model.Item {
+ method public androidx.car.app.messaging.model.ConversationCallbackDelegate getConversationCallbackDelegate();
+ method public androidx.car.app.model.CarIcon? getIcon();
+ method public String getId();
+ method public java.util.List<androidx.car.app.messaging.model.CarMessage!> getMessages();
+ method public androidx.core.app.Person getSelf();
+ method public androidx.car.app.model.CarText getTitle();
+ method public boolean isGroupConversation();
+ }
+
+ public static final class ConversationItem.Builder {
+ ctor public ConversationItem.Builder();
+ method public androidx.car.app.messaging.model.ConversationItem build();
+ method public androidx.car.app.messaging.model.ConversationItem.Builder setConversationCallback(androidx.car.app.messaging.model.ConversationCallback);
+ method public androidx.car.app.messaging.model.ConversationItem.Builder setGroupConversation(boolean);
+ method public androidx.car.app.messaging.model.ConversationItem.Builder setIcon(androidx.car.app.model.CarIcon);
+ method public androidx.car.app.messaging.model.ConversationItem.Builder setId(String);
+ method public androidx.car.app.messaging.model.ConversationItem.Builder setMessages(java.util.List<androidx.car.app.messaging.model.CarMessage!>);
+ method public androidx.car.app.messaging.model.ConversationItem.Builder setSelf(androidx.core.app.Person);
+ method public androidx.car.app.messaging.model.ConversationItem.Builder setTitle(androidx.car.app.model.CarText);
+ }
+
+}
+
package androidx.car.app.model {
@androidx.car.app.annotations.CarProtocol public final class Action {
@@ -526,8 +949,8 @@
method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.model.Action.Builder setFlags(int);
method public androidx.car.app.model.Action.Builder setIcon(androidx.car.app.model.CarIcon);
method public androidx.car.app.model.Action.Builder setOnClickListener(androidx.car.app.model.OnClickListener);
- method public androidx.car.app.model.Action.Builder setTitle(CharSequence);
method public androidx.car.app.model.Action.Builder setTitle(androidx.car.app.model.CarText);
+ method public androidx.car.app.model.Action.Builder setTitle(CharSequence);
}
@androidx.car.app.annotations.CarProtocol public final class ActionStrip {
@@ -573,6 +996,20 @@
method public void sendDismiss(androidx.car.app.OnDoneCallback);
}
+ @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public class Badge {
+ method public androidx.car.app.model.CarColor? getBackgroundColor();
+ method public androidx.car.app.model.CarIcon? getIcon();
+ method public boolean hasDot();
+ }
+
+ public static final class Badge.Builder {
+ ctor public Badge.Builder();
+ method public androidx.car.app.model.Badge build();
+ method public androidx.car.app.model.Badge.Builder setBackgroundColor(androidx.car.app.model.CarColor);
+ method public androidx.car.app.model.Badge.Builder setHasDot(boolean);
+ method public androidx.car.app.model.Badge.Builder setIcon(androidx.car.app.model.CarIcon);
+ }
+
@androidx.car.app.annotations.CarProtocol public final class CarColor {
method public static androidx.car.app.model.CarColor createCustom(@ColorInt int, @ColorInt int);
method @ColorInt public int getColor();
@@ -613,8 +1050,8 @@
}
public static final class CarIcon.Builder {
- ctor public CarIcon.Builder(androidx.core.graphics.drawable.IconCompat);
ctor public CarIcon.Builder(androidx.car.app.model.CarIcon);
+ ctor public CarIcon.Builder(androidx.core.graphics.drawable.IconCompat);
method public androidx.car.app.model.CarIcon build();
method public androidx.car.app.model.CarIcon.Builder setTint(androidx.car.app.model.CarColor);
}
@@ -630,8 +1067,8 @@
}
@androidx.car.app.annotations.CarProtocol public final class CarLocation {
- method public static androidx.car.app.model.CarLocation create(double, double);
method public static androidx.car.app.model.CarLocation create(android.location.Location);
+ method public static androidx.car.app.model.CarLocation create(double, double);
method public double getLatitude();
method public double getLongitude();
}
@@ -665,9 +1102,9 @@
}
@androidx.car.app.annotations.CarProtocol public final class DateTimeWithZone {
+ method @RequiresApi(26) public static androidx.car.app.model.DateTimeWithZone create(java.time.ZonedDateTime);
method public static androidx.car.app.model.DateTimeWithZone create(long, @IntRange(from=0xffff02e0, to=64800) int, String);
method public static androidx.car.app.model.DateTimeWithZone create(long, java.util.TimeZone);
- method @RequiresApi(26) public static androidx.car.app.model.DateTimeWithZone create(java.time.ZonedDateTime);
method public long getTimeSinceEpochMillis();
method public int getZoneOffsetSeconds();
method public String? getZoneShortName();
@@ -692,8 +1129,8 @@
}
@androidx.car.app.annotations.CarProtocol public final class DurationSpan extends androidx.car.app.model.CarSpan {
- method public static androidx.car.app.model.DurationSpan create(long);
method @RequiresApi(26) public static androidx.car.app.model.DurationSpan create(java.time.Duration);
+ method public static androidx.car.app.model.DurationSpan create(long);
method public long getDurationSeconds();
}
@@ -703,6 +1140,7 @@
}
@androidx.car.app.annotations.CarProtocol public final class GridItem implements androidx.car.app.model.Item {
+ method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public androidx.car.app.model.Badge? getBadge();
method public androidx.car.app.model.CarIcon? getImage();
method public int getImageType();
method public androidx.car.app.model.OnClickDelegate? getOnClickDelegate();
@@ -717,28 +1155,41 @@
ctor public GridItem.Builder();
method public androidx.car.app.model.GridItem build();
method public androidx.car.app.model.GridItem.Builder setImage(androidx.car.app.model.CarIcon);
+ method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public androidx.car.app.model.GridItem.Builder setImage(androidx.car.app.model.CarIcon, androidx.car.app.model.Badge);
method public androidx.car.app.model.GridItem.Builder setImage(androidx.car.app.model.CarIcon, int);
+ method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public androidx.car.app.model.GridItem.Builder setImage(androidx.car.app.model.CarIcon, int, androidx.car.app.model.Badge);
method public androidx.car.app.model.GridItem.Builder setLoading(boolean);
method public androidx.car.app.model.GridItem.Builder setOnClickListener(androidx.car.app.model.OnClickListener);
- method public androidx.car.app.model.GridItem.Builder setText(CharSequence);
method public androidx.car.app.model.GridItem.Builder setText(androidx.car.app.model.CarText);
- method public androidx.car.app.model.GridItem.Builder setTitle(CharSequence);
+ method public androidx.car.app.model.GridItem.Builder setText(CharSequence);
method public androidx.car.app.model.GridItem.Builder setTitle(androidx.car.app.model.CarText);
+ method public androidx.car.app.model.GridItem.Builder setTitle(CharSequence);
}
@androidx.car.app.annotations.CarProtocol public final class GridTemplate implements androidx.car.app.model.Template {
method public androidx.car.app.model.ActionStrip? getActionStrip();
+ method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(6) public java.util.List<androidx.car.app.model.Action!> getActions();
method public androidx.car.app.model.Action? getHeaderAction();
+ method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public int getItemImageShape();
+ method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public int getItemSize();
method public androidx.car.app.model.ItemList? getSingleList();
method public androidx.car.app.model.CarText? getTitle();
method public boolean isLoading();
+ field @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public static final int ITEM_IMAGE_SHAPE_CIRCLE = 2; // 0x2
+ field @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public static final int ITEM_IMAGE_SHAPE_UNSET = 1; // 0x1
+ field @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public static final int ITEM_SIZE_LARGE = 4; // 0x4
+ field @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public static final int ITEM_SIZE_MEDIUM = 2; // 0x2
+ field @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public static final int ITEM_SIZE_SMALL = 1; // 0x1
}
public static final class GridTemplate.Builder {
ctor public GridTemplate.Builder();
+ method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(6) public androidx.car.app.model.GridTemplate.Builder addAction(androidx.car.app.model.Action);
method public androidx.car.app.model.GridTemplate build();
method public androidx.car.app.model.GridTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
method public androidx.car.app.model.GridTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
+ method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public androidx.car.app.model.GridTemplate.Builder setItemImageShape(int);
+ method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public androidx.car.app.model.GridTemplate.Builder setItemSize(int);
method public androidx.car.app.model.GridTemplate.Builder setLoading(boolean);
method public androidx.car.app.model.GridTemplate.Builder setSingleList(androidx.car.app.model.ItemList);
method public androidx.car.app.model.GridTemplate.Builder setTitle(CharSequence);
@@ -755,8 +1206,8 @@
method public androidx.car.app.model.Header.Builder addEndHeaderAction(androidx.car.app.model.Action);
method public androidx.car.app.model.Header build();
method public androidx.car.app.model.Header.Builder setStartHeaderAction(androidx.car.app.model.Action);
- method public androidx.car.app.model.Header.Builder setTitle(CharSequence);
method public androidx.car.app.model.Header.Builder setTitle(androidx.car.app.model.CarText);
+ method public androidx.car.app.model.Header.Builder setTitle(CharSequence);
}
@androidx.car.app.annotations.RequiresCarApi(2) public interface InputCallback {
@@ -778,12 +1229,14 @@
method public androidx.car.app.model.OnItemVisibilityChangedDelegate? getOnItemVisibilityChangedDelegate();
method public androidx.car.app.model.OnSelectedDelegate? getOnSelectedDelegate();
method public int getSelectedIndex();
+ method @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.model.ItemList.Builder toBuilder();
}
public static final class ItemList.Builder {
ctor public ItemList.Builder();
method public androidx.car.app.model.ItemList.Builder addItem(androidx.car.app.model.Item);
method public androidx.car.app.model.ItemList build();
+ method @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.model.ItemList.Builder clearItems();
method public androidx.car.app.model.ItemList.Builder setNoItemsMessage(CharSequence);
method public androidx.car.app.model.ItemList.Builder setOnItemsVisibilityChangedListener(androidx.car.app.model.ItemList.OnItemVisibilityChangedListener);
method public androidx.car.app.model.ItemList.Builder setOnSelectedListener(androidx.car.app.model.ItemList.OnSelectedListener);
@@ -800,17 +1253,21 @@
@androidx.car.app.annotations.CarProtocol public final class ListTemplate implements androidx.car.app.model.Template {
method public androidx.car.app.model.ActionStrip? getActionStrip();
+ method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(6) public java.util.List<androidx.car.app.model.Action!> getActions();
method public androidx.car.app.model.Action? getHeaderAction();
method public java.util.List<androidx.car.app.model.SectionedItemList!> getSectionedLists();
method public androidx.car.app.model.ItemList? getSingleList();
method public androidx.car.app.model.CarText? getTitle();
method public boolean isLoading();
+ method @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.model.ListTemplate.Builder toBuilder();
}
public static final class ListTemplate.Builder {
ctor public ListTemplate.Builder();
+ method @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(6) public androidx.car.app.model.ListTemplate.Builder addAction(androidx.car.app.model.Action);
method public androidx.car.app.model.ListTemplate.Builder addSectionedList(androidx.car.app.model.SectionedItemList);
method public androidx.car.app.model.ListTemplate build();
+ method @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.model.ListTemplate.Builder clearSectionedLists();
method public androidx.car.app.model.ListTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
method public androidx.car.app.model.ListTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
method public androidx.car.app.model.ListTemplate.Builder setLoading(boolean);
@@ -847,13 +1304,13 @@
}
public static final class MessageTemplate.Builder {
- ctor public MessageTemplate.Builder(CharSequence);
ctor public MessageTemplate.Builder(androidx.car.app.model.CarText);
+ ctor public MessageTemplate.Builder(CharSequence);
method public androidx.car.app.model.MessageTemplate.Builder addAction(androidx.car.app.model.Action);
method public androidx.car.app.model.MessageTemplate build();
method @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.model.MessageTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
- method public androidx.car.app.model.MessageTemplate.Builder setDebugMessage(Throwable);
method public androidx.car.app.model.MessageTemplate.Builder setDebugMessage(String);
+ method public androidx.car.app.model.MessageTemplate.Builder setDebugMessage(Throwable);
method public androidx.car.app.model.MessageTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
method public androidx.car.app.model.MessageTemplate.Builder setIcon(androidx.car.app.model.CarIcon);
method @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.model.MessageTemplate.Builder setLoading(boolean);
@@ -970,8 +1427,8 @@
method public androidx.car.app.model.PlaceListMapTemplate.Builder setItemList(androidx.car.app.model.ItemList);
method public androidx.car.app.model.PlaceListMapTemplate.Builder setLoading(boolean);
method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.PlaceListMapTemplate.Builder setOnContentRefreshListener(androidx.car.app.model.OnContentRefreshListener);
- method public androidx.car.app.model.PlaceListMapTemplate.Builder setTitle(CharSequence);
method public androidx.car.app.model.PlaceListMapTemplate.Builder setTitle(androidx.car.app.model.CarText);
+ method public androidx.car.app.model.PlaceListMapTemplate.Builder setTitle(CharSequence);
}
@androidx.car.app.annotations.CarProtocol public final class PlaceMarker {
@@ -1014,8 +1471,8 @@
public static final class Row.Builder {
ctor public Row.Builder();
method @androidx.car.app.annotations.RequiresCarApi(6) public androidx.car.app.model.Row.Builder addAction(androidx.car.app.model.Action);
- method public androidx.car.app.model.Row.Builder addText(CharSequence);
method public androidx.car.app.model.Row.Builder addText(androidx.car.app.model.CarText);
+ method public androidx.car.app.model.Row.Builder addText(CharSequence);
method public androidx.car.app.model.Row build();
method public androidx.car.app.model.Row.Builder setBrowsable(boolean);
method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.Row.Builder setEnabled(boolean);
@@ -1024,8 +1481,8 @@
method public androidx.car.app.model.Row.Builder setMetadata(androidx.car.app.model.Metadata);
method @IntRange(from=0) @androidx.car.app.annotations.RequiresCarApi(6) public androidx.car.app.model.Row.Builder setNumericDecoration(int);
method public androidx.car.app.model.Row.Builder setOnClickListener(androidx.car.app.model.OnClickListener);
- method public androidx.car.app.model.Row.Builder setTitle(CharSequence);
method public androidx.car.app.model.Row.Builder setTitle(androidx.car.app.model.CarText);
+ method public androidx.car.app.model.Row.Builder setTitle(CharSequence);
method public androidx.car.app.model.Row.Builder setToggle(androidx.car.app.model.Toggle);
}
@@ -1108,8 +1565,8 @@
}
public static final class TabTemplate.Builder {
- ctor public TabTemplate.Builder(androidx.car.app.model.TabTemplate.TabCallback);
ctor public TabTemplate.Builder(androidx.car.app.model.TabTemplate);
+ ctor public TabTemplate.Builder(androidx.car.app.model.TabTemplate.TabCallback);
method public androidx.car.app.model.TabTemplate.Builder addTab(androidx.car.app.model.Tab);
method public androidx.car.app.model.TabTemplate build();
method public androidx.car.app.model.TabTemplate.Builder setActiveTabContentId(String);
@@ -1398,12 +1855,12 @@
}
public static final class MessageInfo.Builder {
- ctor public MessageInfo.Builder(CharSequence);
ctor public MessageInfo.Builder(androidx.car.app.model.CarText);
+ ctor public MessageInfo.Builder(CharSequence);
method public androidx.car.app.navigation.model.MessageInfo build();
method public androidx.car.app.navigation.model.MessageInfo.Builder setImage(androidx.car.app.model.CarIcon);
- method public androidx.car.app.navigation.model.MessageInfo.Builder setText(CharSequence);
method public androidx.car.app.navigation.model.MessageInfo.Builder setText(androidx.car.app.model.CarText);
+ method public androidx.car.app.navigation.model.MessageInfo.Builder setText(CharSequence);
method public androidx.car.app.navigation.model.MessageInfo.Builder setTitle(CharSequence);
}
@@ -1462,8 +1919,8 @@
method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setMapActionStrip(androidx.car.app.model.ActionStrip);
method public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setOnContentRefreshListener(androidx.car.app.model.OnContentRefreshListener);
method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setPanModeListener(androidx.car.app.navigation.model.PanModeListener);
- method @Deprecated public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setTitle(CharSequence);
method @Deprecated public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setTitle(androidx.car.app.model.CarText);
+ method @Deprecated public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setTitle(CharSequence);
}
@androidx.car.app.annotations.CarProtocol public final class RoutePreviewNavigationTemplate implements androidx.car.app.model.Template {
@@ -1489,8 +1946,8 @@
method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setMapActionStrip(androidx.car.app.model.ActionStrip);
method public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setNavigateAction(androidx.car.app.model.Action);
method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setPanModeListener(androidx.car.app.navigation.model.PanModeListener);
- method @Deprecated public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setTitle(CharSequence);
method @Deprecated public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setTitle(androidx.car.app.model.CarText);
+ method @Deprecated public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setTitle(CharSequence);
}
@androidx.car.app.annotations.CarProtocol public final class RoutingInfo implements androidx.car.app.navigation.model.NavigationTemplate.NavigationInfo {
@@ -1520,8 +1977,8 @@
public static final class Step.Builder {
ctor public Step.Builder();
- ctor public Step.Builder(CharSequence);
ctor public Step.Builder(androidx.car.app.model.CarText);
+ ctor public Step.Builder(CharSequence);
method public androidx.car.app.navigation.model.Step.Builder addLane(androidx.car.app.navigation.model.Lane);
method public androidx.car.app.navigation.model.Step build();
method public androidx.car.app.navigation.model.Step.Builder setCue(CharSequence);
@@ -1647,8 +2104,8 @@
}
public class BundlerException extends java.lang.Exception {
- ctor public BundlerException(String?, Throwable);
ctor public BundlerException(String?);
+ ctor public BundlerException(String?, Throwable);
}
}
diff --git a/car/app/app/build.gradle b/car/app/app/build.gradle
index 43d2789..a2ac99a 100644
--- a/car/app/app/build.gradle
+++ b/car/app/app/build.gradle
@@ -100,7 +100,7 @@
}
androidx {
- name = "Android for Cars App Library"
+ name = "Android for Cars App"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2020"
description = "Build navigation, parking, and charging apps for Android Auto"
@@ -145,6 +145,7 @@
standardArgs,
false,
workerExecutor,
+ false,
)
}
}
diff --git a/cardview/cardview/api/current.txt b/cardview/cardview/api/current.txt
index a789b87..f5bdf0e 100644
--- a/cardview/cardview/api/current.txt
+++ b/cardview/cardview/api/current.txt
@@ -15,8 +15,8 @@
method public boolean getPreventCornerOverlap();
method public float getRadius();
method public boolean getUseCompatPadding();
- method public void setCardBackgroundColor(@ColorInt int);
method public void setCardBackgroundColor(android.content.res.ColorStateList?);
+ method public void setCardBackgroundColor(@ColorInt int);
method public void setCardElevation(float);
method public void setContentPadding(@Px int, @Px int, @Px int, @Px int);
method public void setMaxCardElevation(float);
diff --git a/cardview/cardview/api/public_plus_experimental_current.txt b/cardview/cardview/api/public_plus_experimental_current.txt
deleted file mode 100644
index a789b87..0000000
--- a/cardview/cardview/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-// Signature format: 4.0
-package androidx.cardview.widget {
-
- public class CardView extends android.widget.FrameLayout {
- ctor public CardView(android.content.Context);
- ctor public CardView(android.content.Context, android.util.AttributeSet?);
- ctor public CardView(android.content.Context, android.util.AttributeSet?, int);
- method public android.content.res.ColorStateList getCardBackgroundColor();
- method public float getCardElevation();
- method @Px public int getContentPaddingBottom();
- method @Px public int getContentPaddingLeft();
- method @Px public int getContentPaddingRight();
- method @Px public int getContentPaddingTop();
- method public float getMaxCardElevation();
- method public boolean getPreventCornerOverlap();
- method public float getRadius();
- method public boolean getUseCompatPadding();
- method public void setCardBackgroundColor(@ColorInt int);
- method public void setCardBackgroundColor(android.content.res.ColorStateList?);
- method public void setCardElevation(float);
- method public void setContentPadding(@Px int, @Px int, @Px int, @Px int);
- method public void setMaxCardElevation(float);
- method public void setPreventCornerOverlap(boolean);
- method public void setRadius(float);
- method public void setUseCompatPadding(boolean);
- }
-
-}
-
diff --git a/cardview/cardview/api/restricted_current.txt b/cardview/cardview/api/restricted_current.txt
index a789b87..f5bdf0e 100644
--- a/cardview/cardview/api/restricted_current.txt
+++ b/cardview/cardview/api/restricted_current.txt
@@ -15,8 +15,8 @@
method public boolean getPreventCornerOverlap();
method public float getRadius();
method public boolean getUseCompatPadding();
- method public void setCardBackgroundColor(@ColorInt int);
method public void setCardBackgroundColor(android.content.res.ColorStateList?);
+ method public void setCardBackgroundColor(@ColorInt int);
method public void setCardElevation(float);
method public void setContentPadding(@Px int, @Px int, @Px int, @Px int);
method public void setMaxCardElevation(float);
diff --git a/cardview/cardview/build.gradle b/cardview/cardview/build.gradle
index 239abf1..13cc235 100644
--- a/cardview/cardview/build.gradle
+++ b/cardview/cardview/build.gradle
@@ -11,7 +11,7 @@
}
androidx {
- name = "Android Support CardView"
+ name = "CardView"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2011"
description = "Android Support CardView"
diff --git a/collection/collection-benchmark/build.gradle b/collection/collection-benchmark/build.gradle
index dc0cf11..931098c 100644
--- a/collection/collection-benchmark/build.gradle
+++ b/collection/collection-benchmark/build.gradle
@@ -105,7 +105,7 @@
}
androidx {
- name = "AndroidX Collections Benchmarks (Android / iOS)"
+ name = "Collections Benchmarks (Android / iOS)"
inceptionYear = "2022"
description = "AndroidX Collections Benchmarks (Android / iOS)"
}
diff --git a/collection/collection-ktx/api/public_plus_experimental_current.txt b/collection/collection-ktx/api/public_plus_experimental_current.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/collection/collection-ktx/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/collection/collection/api/current.txt b/collection/collection/api/current.txt
index a16f02c8..a2fdada 100644
--- a/collection/collection/api/current.txt
+++ b/collection/collection/api/current.txt
@@ -3,8 +3,8 @@
public class ArrayMap<K, V> extends androidx.collection.SimpleArrayMap<K,V> implements java.util.Map<K,V> {
ctor public ArrayMap();
- ctor public ArrayMap(int);
ctor public ArrayMap(androidx.collection.SimpleArrayMap?);
+ ctor public ArrayMap(int);
method public boolean containsAll(java.util.Collection<?>);
method public boolean containsKey(Object?);
method public boolean containsValue(Object?);
@@ -24,11 +24,11 @@
}
public final class ArraySet<E> implements java.util.Collection<E> kotlin.jvm.internal.markers.KMutableCollection kotlin.jvm.internal.markers.KMutableSet java.util.Set<E> {
- ctor public ArraySet(optional int capacity);
ctor public ArraySet();
ctor public ArraySet(androidx.collection.ArraySet<? extends E>? set);
- ctor public ArraySet(java.util.Collection<? extends E>? set);
ctor public ArraySet(E![]? array);
+ ctor public ArraySet(optional int capacity);
+ ctor public ArraySet(java.util.Collection<? extends E>? set);
method public boolean add(E element);
method public void addAll(androidx.collection.ArraySet<? extends E> array);
method public boolean addAll(java.util.Collection<? extends E> elements);
@@ -57,8 +57,8 @@
}
public final class CircularArray<E> {
- ctor public CircularArray(optional int minCapacity);
ctor public CircularArray();
+ ctor public CircularArray(optional int minCapacity);
method public void addFirst(E element);
method public void addLast(E element);
method public void clear();
@@ -76,8 +76,8 @@
}
public final class CircularIntArray {
- ctor public CircularIntArray(optional int minCapacity);
ctor public CircularIntArray();
+ ctor public CircularIntArray(optional int minCapacity);
method public void addFirst(int element);
method public void addLast(int element);
method public void clear();
@@ -95,8 +95,8 @@
}
public class LongSparseArray<E> implements java.lang.Cloneable {
- ctor public LongSparseArray(optional int initialCapacity);
ctor public LongSparseArray();
+ ctor public LongSparseArray(optional int initialCapacity);
method public void append(long key, E value);
method public void clear();
method public androidx.collection.LongSparseArray<E> clone();
@@ -162,9 +162,9 @@
}
public class SimpleArrayMap<K, V> {
- ctor public SimpleArrayMap(optional int capacity);
ctor public SimpleArrayMap();
ctor public SimpleArrayMap(androidx.collection.SimpleArrayMap<? extends K,? extends V>? map);
+ ctor public SimpleArrayMap(optional int capacity);
method public void clear();
method public boolean containsKey(K key);
method public boolean containsValue(V value);
@@ -188,8 +188,8 @@
}
public class SparseArrayCompat<E> implements java.lang.Cloneable {
- ctor public SparseArrayCompat(optional int initialCapacity);
ctor public SparseArrayCompat();
+ ctor public SparseArrayCompat(optional int initialCapacity);
method public void append(int key, E value);
method public void clear();
method public androidx.collection.SparseArrayCompat<E> clone();
diff --git a/collection/collection/api/public_plus_experimental_current.txt b/collection/collection/api/public_plus_experimental_current.txt
deleted file mode 100644
index a16f02c8..0000000
--- a/collection/collection/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,236 +0,0 @@
-// Signature format: 4.0
-package androidx.collection {
-
- public class ArrayMap<K, V> extends androidx.collection.SimpleArrayMap<K,V> implements java.util.Map<K,V> {
- ctor public ArrayMap();
- ctor public ArrayMap(int);
- ctor public ArrayMap(androidx.collection.SimpleArrayMap?);
- method public boolean containsAll(java.util.Collection<?>);
- method public boolean containsKey(Object?);
- method public boolean containsValue(Object?);
- method public java.util.Set<java.util.Map.Entry<K!,V!>!> entrySet();
- method public V! get(Object?);
- method public java.util.Set<K!> keySet();
- method public void putAll(java.util.Map<? extends K,? extends V>);
- method public V! remove(Object?);
- method public boolean removeAll(java.util.Collection<?>);
- method public boolean retainAll(java.util.Collection<?>);
- method public java.util.Collection<V!> values();
- }
-
- public final class ArrayMapKt {
- method public static inline <K, V> androidx.collection.ArrayMap<K,V> arrayMapOf();
- method public static <K, V> androidx.collection.ArrayMap<K,V> arrayMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
- }
-
- public final class ArraySet<E> implements java.util.Collection<E> kotlin.jvm.internal.markers.KMutableCollection kotlin.jvm.internal.markers.KMutableSet java.util.Set<E> {
- ctor public ArraySet(optional int capacity);
- ctor public ArraySet();
- ctor public ArraySet(androidx.collection.ArraySet<? extends E>? set);
- ctor public ArraySet(java.util.Collection<? extends E>? set);
- ctor public ArraySet(E![]? array);
- method public boolean add(E element);
- method public void addAll(androidx.collection.ArraySet<? extends E> array);
- method public boolean addAll(java.util.Collection<? extends E> elements);
- method public void clear();
- method public operator boolean contains(E element);
- method public boolean containsAll(java.util.Collection<E!> elements);
- method public void ensureCapacity(int minimumCapacity);
- method public int getSize();
- method public int indexOf(Object? key);
- method public boolean isEmpty();
- method public java.util.Iterator<E> iterator();
- method public boolean remove(E element);
- method public boolean removeAll(androidx.collection.ArraySet<? extends E> array);
- method public boolean removeAll(java.util.Collection<E!> elements);
- method public E removeAt(int index);
- method public boolean retainAll(java.util.Collection<E!> elements);
- method public Object![] toArray();
- method public <T> T![] toArray(T![] array);
- method public E valueAt(int index);
- property public int size;
- }
-
- public final class ArraySetKt {
- method public static inline <T> androidx.collection.ArraySet<T> arraySetOf();
- method public static <T> androidx.collection.ArraySet<T> arraySetOf(T?... values);
- }
-
- public final class CircularArray<E> {
- ctor public CircularArray(optional int minCapacity);
- ctor public CircularArray();
- method public void addFirst(E element);
- method public void addLast(E element);
- method public void clear();
- method public operator E get(int index);
- method public E getFirst();
- method public E getLast();
- method public boolean isEmpty();
- method public E popFirst();
- method public E popLast();
- method public void removeFromEnd(int count);
- method public void removeFromStart(int count);
- method public int size();
- property public final E first;
- property public final E last;
- }
-
- public final class CircularIntArray {
- ctor public CircularIntArray(optional int minCapacity);
- ctor public CircularIntArray();
- method public void addFirst(int element);
- method public void addLast(int element);
- method public void clear();
- method public operator int get(int index);
- method public int getFirst();
- method public int getLast();
- method public boolean isEmpty();
- method public int popFirst();
- method public int popLast();
- method public void removeFromEnd(int count);
- method public void removeFromStart(int count);
- method public int size();
- property public final int first;
- property public final int last;
- }
-
- public class LongSparseArray<E> implements java.lang.Cloneable {
- ctor public LongSparseArray(optional int initialCapacity);
- ctor public LongSparseArray();
- method public void append(long key, E value);
- method public void clear();
- method public androidx.collection.LongSparseArray<E> clone();
- method public boolean containsKey(long key);
- method public boolean containsValue(E value);
- method @Deprecated public void delete(long key);
- method public operator E? get(long key);
- method public E get(long key, E defaultValue);
- method public int indexOfKey(long key);
- method public int indexOfValue(E value);
- method public boolean isEmpty();
- method public long keyAt(int index);
- method public void put(long key, E value);
- method public void putAll(androidx.collection.LongSparseArray<? extends E> other);
- method public E? putIfAbsent(long key, E value);
- method public void remove(long key);
- method public boolean remove(long key, E value);
- method public void removeAt(int index);
- method public E? replace(long key, E value);
- method public boolean replace(long key, E oldValue, E newValue);
- method public void setValueAt(int index, E value);
- method public int size();
- method public E valueAt(int index);
- }
-
- public final class LongSparseArrayKt {
- method public static inline operator <T> boolean contains(androidx.collection.LongSparseArray<T>, long key);
- method public static inline <T> void forEach(androidx.collection.LongSparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Long,? super T,kotlin.Unit> action);
- method public static inline <T> T getOrDefault(androidx.collection.LongSparseArray<T>, long key, T defaultValue);
- method public static inline <T> T getOrElse(androidx.collection.LongSparseArray<T>, long key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
- method public static inline <T> int getSize(androidx.collection.LongSparseArray<T>);
- method public static inline <T> boolean isNotEmpty(androidx.collection.LongSparseArray<T>);
- method public static <T> kotlin.collections.LongIterator keyIterator(androidx.collection.LongSparseArray<T>);
- method public static operator <T> androidx.collection.LongSparseArray<T> plus(androidx.collection.LongSparseArray<T>, androidx.collection.LongSparseArray<T> other);
- method @Deprecated public static <T> boolean remove(androidx.collection.LongSparseArray<T>, long key, T value);
- method public static inline operator <T> void set(androidx.collection.LongSparseArray<T>, long key, T value);
- method public static <T> java.util.Iterator<T> valueIterator(androidx.collection.LongSparseArray<T>);
- }
-
- public class LruCache<K, V> {
- ctor public LruCache(@IntRange(from=1L, to=kotlin.jvm.internal.LongCompanionObject.MAX_VALUE) int maxSize);
- method protected V? create(K key);
- method public final int createCount();
- method protected void entryRemoved(boolean evicted, K key, V oldValue, V? newValue);
- method public final void evictAll();
- method public final int evictionCount();
- method public final operator V? get(K key);
- method public final int hitCount();
- method public final int maxSize();
- method public final int missCount();
- method public final V? put(K key, V value);
- method public final int putCount();
- method public final V? remove(K key);
- method public void resize(@IntRange(from=1L, to=kotlin.jvm.internal.LongCompanionObject.MAX_VALUE) int maxSize);
- method public final int size();
- method protected int sizeOf(K key, V value);
- method public final java.util.Map<K,V> snapshot();
- method public void trimToSize(int maxSize);
- }
-
- public final class LruCacheKt {
- method public static inline <K, V> androidx.collection.LruCache<K,V> lruCache(int maxSize, optional kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Integer> sizeOf, optional kotlin.jvm.functions.Function1<? super K,? extends V> create, optional kotlin.jvm.functions.Function4<? super java.lang.Boolean,? super K,? super V,? super V,kotlin.Unit> onEntryRemoved);
- }
-
- public class SimpleArrayMap<K, V> {
- ctor public SimpleArrayMap(optional int capacity);
- ctor public SimpleArrayMap();
- ctor public SimpleArrayMap(androidx.collection.SimpleArrayMap<? extends K,? extends V>? map);
- method public void clear();
- method public boolean containsKey(K key);
- method public boolean containsValue(V value);
- method public void ensureCapacity(int minimumCapacity);
- method public operator V? get(K key);
- method public V getOrDefault(Object? key, V defaultValue);
- method public int indexOfKey(K key);
- method public boolean isEmpty();
- method public K keyAt(int index);
- method public V? put(K key, V value);
- method public void putAll(androidx.collection.SimpleArrayMap<? extends K,? extends V> map);
- method public V? putIfAbsent(K key, V value);
- method public V? remove(K key);
- method public boolean remove(K key, V value);
- method public V removeAt(int index);
- method public V? replace(K key, V value);
- method public boolean replace(K key, V oldValue, V newValue);
- method public V setValueAt(int index, V value);
- method public int size();
- method public V valueAt(int index);
- }
-
- public class SparseArrayCompat<E> implements java.lang.Cloneable {
- ctor public SparseArrayCompat(optional int initialCapacity);
- ctor public SparseArrayCompat();
- method public void append(int key, E value);
- method public void clear();
- method public androidx.collection.SparseArrayCompat<E> clone();
- method public boolean containsKey(int key);
- method public boolean containsValue(E value);
- method @Deprecated public void delete(int key);
- method public operator E? get(int key);
- method public E get(int key, E defaultValue);
- method public final boolean getIsEmpty();
- method public int indexOfKey(int key);
- method public int indexOfValue(E value);
- method public boolean isEmpty();
- method public int keyAt(int index);
- method public void put(int key, E value);
- method public void putAll(androidx.collection.SparseArrayCompat<? extends E> other);
- method public E? putIfAbsent(int key, E value);
- method public void remove(int key);
- method public boolean remove(int key, Object? value);
- method public void removeAt(int index);
- method public void removeAtRange(int index, int size);
- method public E? replace(int key, E value);
- method public boolean replace(int key, E oldValue, E newValue);
- method public void setValueAt(int index, E value);
- method public int size();
- method public E valueAt(int index);
- property public final boolean isEmpty;
- }
-
- public final class SparseArrayKt {
- method public static inline operator <T> boolean contains(androidx.collection.SparseArrayCompat<T>, int key);
- method public static inline <T> void forEach(androidx.collection.SparseArrayCompat<T>, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> action);
- method public static inline <T> T getOrDefault(androidx.collection.SparseArrayCompat<T>, int key, T defaultValue);
- method public static inline <T> T getOrElse(androidx.collection.SparseArrayCompat<T>, int key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
- method public static inline <T> int getSize(androidx.collection.SparseArrayCompat<T>);
- method public static inline <T> boolean isNotEmpty(androidx.collection.SparseArrayCompat<T>);
- method public static <T> kotlin.collections.IntIterator keyIterator(androidx.collection.SparseArrayCompat<T>);
- method public static operator <T> androidx.collection.SparseArrayCompat<T> plus(androidx.collection.SparseArrayCompat<T>, androidx.collection.SparseArrayCompat<T> other);
- method @Deprecated public static <T> boolean remove(androidx.collection.SparseArrayCompat<T>, int key, T value);
- method public static inline operator <T> void set(androidx.collection.SparseArrayCompat<T>, int key, T value);
- method public static <T> java.util.Iterator<T> valueIterator(androidx.collection.SparseArrayCompat<T>);
- }
-
-}
-
diff --git a/collection/collection/api/restricted_current.txt b/collection/collection/api/restricted_current.txt
index a16f02c8..a2fdada 100644
--- a/collection/collection/api/restricted_current.txt
+++ b/collection/collection/api/restricted_current.txt
@@ -3,8 +3,8 @@
public class ArrayMap<K, V> extends androidx.collection.SimpleArrayMap<K,V> implements java.util.Map<K,V> {
ctor public ArrayMap();
- ctor public ArrayMap(int);
ctor public ArrayMap(androidx.collection.SimpleArrayMap?);
+ ctor public ArrayMap(int);
method public boolean containsAll(java.util.Collection<?>);
method public boolean containsKey(Object?);
method public boolean containsValue(Object?);
@@ -24,11 +24,11 @@
}
public final class ArraySet<E> implements java.util.Collection<E> kotlin.jvm.internal.markers.KMutableCollection kotlin.jvm.internal.markers.KMutableSet java.util.Set<E> {
- ctor public ArraySet(optional int capacity);
ctor public ArraySet();
ctor public ArraySet(androidx.collection.ArraySet<? extends E>? set);
- ctor public ArraySet(java.util.Collection<? extends E>? set);
ctor public ArraySet(E![]? array);
+ ctor public ArraySet(optional int capacity);
+ ctor public ArraySet(java.util.Collection<? extends E>? set);
method public boolean add(E element);
method public void addAll(androidx.collection.ArraySet<? extends E> array);
method public boolean addAll(java.util.Collection<? extends E> elements);
@@ -57,8 +57,8 @@
}
public final class CircularArray<E> {
- ctor public CircularArray(optional int minCapacity);
ctor public CircularArray();
+ ctor public CircularArray(optional int minCapacity);
method public void addFirst(E element);
method public void addLast(E element);
method public void clear();
@@ -76,8 +76,8 @@
}
public final class CircularIntArray {
- ctor public CircularIntArray(optional int minCapacity);
ctor public CircularIntArray();
+ ctor public CircularIntArray(optional int minCapacity);
method public void addFirst(int element);
method public void addLast(int element);
method public void clear();
@@ -95,8 +95,8 @@
}
public class LongSparseArray<E> implements java.lang.Cloneable {
- ctor public LongSparseArray(optional int initialCapacity);
ctor public LongSparseArray();
+ ctor public LongSparseArray(optional int initialCapacity);
method public void append(long key, E value);
method public void clear();
method public androidx.collection.LongSparseArray<E> clone();
@@ -162,9 +162,9 @@
}
public class SimpleArrayMap<K, V> {
- ctor public SimpleArrayMap(optional int capacity);
ctor public SimpleArrayMap();
ctor public SimpleArrayMap(androidx.collection.SimpleArrayMap<? extends K,? extends V>? map);
+ ctor public SimpleArrayMap(optional int capacity);
method public void clear();
method public boolean containsKey(K key);
method public boolean containsValue(V value);
@@ -188,8 +188,8 @@
}
public class SparseArrayCompat<E> implements java.lang.Cloneable {
- ctor public SparseArrayCompat(optional int initialCapacity);
ctor public SparseArrayCompat();
+ ctor public SparseArrayCompat(optional int initialCapacity);
method public void append(int key, E value);
method public void clear();
method public androidx.collection.SparseArrayCompat<E> clone();
diff --git a/collection/collection/build.gradle b/collection/collection/build.gradle
index 0ac4f14..47b1d5e 100644
--- a/collection/collection/build.gradle
+++ b/collection/collection/build.gradle
@@ -136,7 +136,7 @@
}
androidx {
- name = "Android Support Library collections"
+ name = "collections"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2018"
description = "Standalone efficient collections."
diff --git a/collection/integration-tests/testapp/build.gradle b/collection/integration-tests/testapp/build.gradle
index a8d529f..67a0ce6 100644
--- a/collection/integration-tests/testapp/build.gradle
+++ b/collection/integration-tests/testapp/build.gradle
@@ -28,7 +28,7 @@
}
androidx {
- name = "AndroidX Collection Integration Tests"
+ name = "Collection Integration Tests"
publish = Publish.NONE
inceptionYear = "2021"
description = "AndroidX Collection Integration Tests"
diff --git a/compose/animation/animation-core-lint/src/main/java/androidx/compose/animation/core/lint/TransitionDetector.kt b/compose/animation/animation-core-lint/src/main/java/androidx/compose/animation/core/lint/TransitionDetector.kt
index d15d058..656461a 100644
--- a/compose/animation/animation-core-lint/src/main/java/androidx/compose/animation/core/lint/TransitionDetector.kt
+++ b/compose/animation/animation-core-lint/src/main/java/androidx/compose/animation/core/lint/TransitionDetector.kt
@@ -32,9 +32,9 @@
import com.android.tools.lint.detector.api.SourceCodeScanner
import com.intellij.psi.PsiPrimitiveType
import com.intellij.psi.impl.source.PsiClassReferenceType
+import java.util.EnumSet
import org.jetbrains.uast.UCallExpression
import org.jetbrains.uast.ULambdaExpression
-import java.util.EnumSet
/**
* [Detector] that checks `Transition` usages for correctness.
diff --git a/compose/animation/animation-core-lint/src/main/java/androidx/compose/animation/core/lint/UnrememberedAnimatableDetector.kt b/compose/animation/animation-core-lint/src/main/java/androidx/compose/animation/core/lint/UnrememberedAnimatableDetector.kt
index adcf925..16dfcd4 100644
--- a/compose/animation/animation-core-lint/src/main/java/androidx/compose/animation/core/lint/UnrememberedAnimatableDetector.kt
+++ b/compose/animation/animation-core-lint/src/main/java/androidx/compose/animation/core/lint/UnrememberedAnimatableDetector.kt
@@ -32,9 +32,9 @@
import com.android.tools.lint.detector.api.Severity
import com.android.tools.lint.detector.api.SourceCodeScanner
import com.intellij.psi.impl.source.PsiClassReferenceType
+import java.util.EnumSet
import org.jetbrains.uast.UCallExpression
import org.jetbrains.uast.util.isConstructorCall
-import java.util.EnumSet
/**
* [Detector] that checks `Animatable` calls to make sure that if they are called inside a
diff --git a/compose/animation/animation-core/api/current.txt b/compose/animation/animation-core/api/current.txt
index ae892a1..3f41c59 100644
--- a/compose/animation/animation-core/api/current.txt
+++ b/compose/animation/animation-core/api/current.txt
@@ -2,8 +2,8 @@
package androidx.compose.animation.core {
public final class Animatable<T, V extends androidx.compose.animation.core.AnimationVector> {
- ctor public Animatable(T initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional T? visibilityThreshold, optional String label);
ctor @Deprecated public Animatable(T initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional T? visibilityThreshold);
+ ctor public Animatable(T initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional T? visibilityThreshold, optional String label);
method public suspend Object? animateDecay(T initialVelocity, androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Animatable<T,V>,kotlin.Unit>? block, optional kotlin.coroutines.Continuation<? super androidx.compose.animation.core.AnimationResult<T,V>>);
method public suspend Object? animateTo(T targetValue, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional T initialVelocity, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Animatable<T,V>,kotlin.Unit>? block, optional kotlin.coroutines.Continuation<? super androidx.compose.animation.core.AnimationResult<T,V>>);
method public androidx.compose.runtime.State<T> asState();
@@ -124,11 +124,11 @@
}
public final class AnimationSpecKt {
- method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.InfiniteRepeatableSpec<T> infiniteRepeatable(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
method @Deprecated @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.InfiniteRepeatableSpec<T>! infiniteRepeatable(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.InfiniteRepeatableSpec<T> infiniteRepeatable(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.KeyframesSpec<T> keyframes(kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.KeyframesSpec.KeyframesSpecConfig<T>,kotlin.Unit> init);
- method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.RepeatableSpec<T> repeatable(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
method @Deprecated @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.RepeatableSpec<T>! repeatable(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.RepeatableSpec<T> repeatable(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.SnapSpec<T> snap(optional int delayMillis);
method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.SpringSpec<T> spring(optional float dampingRatio, optional float stiffness, optional T? visibilityThreshold);
method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.TweenSpec<T> tween(optional int durationMillis, optional int delayMillis, optional androidx.compose.animation.core.Easing easing);
@@ -153,10 +153,10 @@
}
public final class AnimationStateKt {
- method public static androidx.compose.animation.core.AnimationState<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> AnimationState(float initialValue, optional float initialVelocity, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
method public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.AnimationState<T,V> AnimationState(androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T initialValue, T initialVelocity, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
- method public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.AnimationState<T,V> copy(androidx.compose.animation.core.AnimationState<T,V>, optional T value, optional V? velocityVector, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
+ method public static androidx.compose.animation.core.AnimationState<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> AnimationState(float initialValue, optional float initialVelocity, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
method public static androidx.compose.animation.core.AnimationState<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> copy(androidx.compose.animation.core.AnimationState<java.lang.Float,androidx.compose.animation.core.AnimationVector1D>, optional float value, optional float velocity, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
+ method public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.AnimationState<T,V> copy(androidx.compose.animation.core.AnimationState<T,V>, optional T value, optional V? velocityVector, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
method public static <T, V extends androidx.compose.animation.core.AnimationVector> V createZeroVectorFrom(androidx.compose.animation.core.TwoWayConverter<T,V>, T value);
method public static boolean isFinished(androidx.compose.animation.core.AnimationState<?,?>);
}
@@ -213,9 +213,9 @@
}
public final class DecayAnimation<T, V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.Animation<T,V> {
- ctor public DecayAnimation(androidx.compose.animation.core.VectorizedDecayAnimationSpec<V> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T initialValue, V initialVelocityVector);
- ctor public DecayAnimation(androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T initialValue, V initialVelocityVector);
ctor public DecayAnimation(androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T initialValue, T initialVelocity);
+ ctor public DecayAnimation(androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T initialValue, V initialVelocityVector);
+ ctor public DecayAnimation(androidx.compose.animation.core.VectorizedDecayAnimationSpec<V> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T initialValue, V initialVelocityVector);
method public long getDurationNanos();
method public T getInitialValue();
method public V getInitialVelocityVector();
@@ -237,8 +237,8 @@
}
public final class DecayAnimationSpecKt {
- method public static <T, V extends androidx.compose.animation.core.AnimationVector> T calculateTargetValue(androidx.compose.animation.core.DecayAnimationSpec<T>, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T initialValue, T initialVelocity);
method public static float calculateTargetValue(androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float>, float initialValue, float initialVelocity);
+ method public static <T, V extends androidx.compose.animation.core.AnimationVector> T calculateTargetValue(androidx.compose.animation.core.DecayAnimationSpec<T>, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T initialValue, T initialVelocity);
method public static <T> androidx.compose.animation.core.DecayAnimationSpec<T> exponentialDecay(optional float frictionMultiplier, optional float absVelocityThreshold);
method public static <T> androidx.compose.animation.core.DecayAnimationSpec<T> generateDecayAnimationSpec(androidx.compose.animation.core.FloatDecayAnimationSpec);
}
@@ -392,8 +392,8 @@
}
public final class InfiniteRepeatableSpec<T> implements androidx.compose.animation.core.AnimationSpec<T> {
- ctor public InfiniteRepeatableSpec(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
ctor @Deprecated public InfiniteRepeatableSpec(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ ctor public InfiniteRepeatableSpec(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
method public androidx.compose.animation.core.DurationBasedAnimationSpec<T> getAnimation();
method public long getInitialStartOffset();
method public androidx.compose.animation.core.RepeatMode getRepeatMode();
@@ -424,12 +424,12 @@
}
public final class InfiniteTransitionKt {
- method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Float> animateFloat(androidx.compose.animation.core.InfiniteTransition, float initialValue, float targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<java.lang.Float> animationSpec, optional String label);
method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends java.lang.Float> animateFloat(androidx.compose.animation.core.InfiniteTransition, float initialValue, float targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<java.lang.Float> animationSpec);
- method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValue(androidx.compose.animation.core.InfiniteTransition, T initialValue, T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.InfiniteRepeatableSpec<T> animationSpec, optional String label);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Float> animateFloat(androidx.compose.animation.core.InfiniteTransition, float initialValue, float targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<java.lang.Float> animationSpec, optional String label);
method @Deprecated @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<? extends T> animateValue(androidx.compose.animation.core.InfiniteTransition, T initialValue, T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.InfiniteRepeatableSpec<T> animationSpec);
- method @androidx.compose.runtime.Composable public static androidx.compose.animation.core.InfiniteTransition rememberInfiniteTransition(optional String label);
+ method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValue(androidx.compose.animation.core.InfiniteTransition, T initialValue, T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.InfiniteRepeatableSpec<T> animationSpec, optional String label);
method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.animation.core.InfiniteTransition rememberInfiniteTransition();
+ method @androidx.compose.runtime.Composable public static androidx.compose.animation.core.InfiniteTransition rememberInfiniteTransition(optional String label);
}
@androidx.compose.runtime.Immutable public final class KeyframesSpec<T> implements androidx.compose.animation.core.DurationBasedAnimationSpec<T> {
@@ -474,8 +474,8 @@
}
@androidx.compose.runtime.Immutable public final class RepeatableSpec<T> implements androidx.compose.animation.core.FiniteAnimationSpec<T> {
- ctor public RepeatableSpec(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
ctor @Deprecated public RepeatableSpec(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ ctor public RepeatableSpec(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
method public androidx.compose.animation.core.DurationBasedAnimationSpec<T> getAnimation();
method public long getInitialStartOffset();
method public int getIterations();
@@ -542,10 +542,10 @@
}
public final class SuspendAnimationKt {
- method public static suspend Object? animate(float initialValue, float targetValue, optional float initialVelocity, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public static suspend <T, V extends androidx.compose.animation.core.AnimationVector> Object? animate(androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T initialValue, T targetValue, optional T? initialVelocity, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, kotlin.jvm.functions.Function2<? super T,? super T,kotlin.Unit> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
- method public static suspend Object? animateDecay(float initialValue, float initialVelocity, androidx.compose.animation.core.FloatDecayAnimationSpec animationSpec, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? animate(float initialValue, float targetValue, optional float initialVelocity, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public static suspend <T, V extends androidx.compose.animation.core.AnimationVector> Object? animateDecay(androidx.compose.animation.core.AnimationState<T,V>, androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, optional boolean sequentialAnimation, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.AnimationScope<T,V>,kotlin.Unit> block, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? animateDecay(float initialValue, float initialVelocity, androidx.compose.animation.core.FloatDecayAnimationSpec animationSpec, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public static suspend <T, V extends androidx.compose.animation.core.AnimationVector> Object? animateTo(androidx.compose.animation.core.AnimationState<T,V>, T targetValue, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional boolean sequentialAnimation, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.AnimationScope<T,V>,kotlin.Unit> block, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
}
@@ -615,8 +615,8 @@
method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.geometry.Rect> animateRect(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.Segment<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.geometry.Rect>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.geometry.Rect> targetValueByState);
method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.geometry.Size> animateSize(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.Segment<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.geometry.Size>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.geometry.Size> targetValueByState);
method @androidx.compose.runtime.Composable public static inline <S, T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValue(androidx.compose.animation.core.Transition<S>, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.Segment<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<T>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,? extends T> targetValueByState);
- method @androidx.compose.runtime.Composable public static <T> androidx.compose.animation.core.Transition<T> updateTransition(T targetState, optional String? label);
method @androidx.compose.runtime.Composable public static <T> androidx.compose.animation.core.Transition<T> updateTransition(androidx.compose.animation.core.MutableTransitionState<T> transitionState, optional String? label);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.animation.core.Transition<T> updateTransition(T targetState, optional String? label);
}
@androidx.compose.runtime.Immutable public final class TweenSpec<T> implements androidx.compose.animation.core.DurationBasedAnimationSpec<T> {
@@ -639,15 +639,15 @@
public final class VectorConvertersKt {
method public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.TwoWayConverter<T,V> TwoWayConverter(kotlin.jvm.functions.Function1<? super T,? extends V> convertToVector, kotlin.jvm.functions.Function1<? super V,? extends T> convertFromVector);
- method public static androidx.compose.animation.core.TwoWayConverter<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> getVectorConverter(kotlin.jvm.internal.FloatCompanionObject);
- method public static androidx.compose.animation.core.TwoWayConverter<java.lang.Integer,androidx.compose.animation.core.AnimationVector1D> getVectorConverter(kotlin.jvm.internal.IntCompanionObject);
+ method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.geometry.Offset.Companion);
method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getVectorConverter(androidx.compose.ui.geometry.Rect.Companion);
+ method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.geometry.Size.Companion);
method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getVectorConverter(androidx.compose.ui.unit.Dp.Companion);
method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.DpOffset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.unit.DpOffset.Companion);
- method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.geometry.Size.Companion);
- method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.geometry.Offset.Companion);
method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.IntOffset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.unit.IntOffset.Companion);
method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.IntSize,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.unit.IntSize.Companion);
+ method public static androidx.compose.animation.core.TwoWayConverter<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> getVectorConverter(kotlin.jvm.internal.FloatCompanionObject);
+ method public static androidx.compose.animation.core.TwoWayConverter<java.lang.Integer,androidx.compose.animation.core.AnimationVector1D> getVectorConverter(kotlin.jvm.internal.IntCompanionObject);
}
@kotlin.jvm.JvmDefaultWithCompatibility public interface VectorizedAnimationSpec<V extends androidx.compose.animation.core.AnimationVector> {
@@ -689,8 +689,8 @@
}
public final class VectorizedInfiniteRepeatableSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedAnimationSpec<V> {
- ctor public VectorizedInfiniteRepeatableSpec(androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
ctor @Deprecated public VectorizedInfiniteRepeatableSpec(androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ ctor public VectorizedInfiniteRepeatableSpec(androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
method public long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
@@ -709,8 +709,8 @@
}
public final class VectorizedRepeatableSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> {
- ctor public VectorizedRepeatableSpec(int iterations, androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
ctor @Deprecated public VectorizedRepeatableSpec(int iterations, androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ ctor public VectorizedRepeatableSpec(int iterations, androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
method public long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
@@ -747,14 +747,14 @@
}
public final class VisibilityThresholdsKt {
- method public static long getVisibilityThreshold(androidx.compose.ui.unit.IntOffset.Companion);
method public static long getVisibilityThreshold(androidx.compose.ui.geometry.Offset.Companion);
- method public static int getVisibilityThreshold(kotlin.jvm.internal.IntCompanionObject);
+ method public static androidx.compose.ui.geometry.Rect getVisibilityThreshold(androidx.compose.ui.geometry.Rect.Companion);
+ method public static long getVisibilityThreshold(androidx.compose.ui.geometry.Size.Companion);
method public static float getVisibilityThreshold(androidx.compose.ui.unit.Dp.Companion);
method public static long getVisibilityThreshold(androidx.compose.ui.unit.DpOffset.Companion);
- method public static long getVisibilityThreshold(androidx.compose.ui.geometry.Size.Companion);
+ method public static long getVisibilityThreshold(androidx.compose.ui.unit.IntOffset.Companion);
method public static long getVisibilityThreshold(androidx.compose.ui.unit.IntSize.Companion);
- method public static androidx.compose.ui.geometry.Rect getVisibilityThreshold(androidx.compose.ui.geometry.Rect.Companion);
+ method public static int getVisibilityThreshold(kotlin.jvm.internal.IntCompanionObject);
}
}
diff --git a/compose/animation/animation-core/api/public_plus_experimental_current.txt b/compose/animation/animation-core/api/public_plus_experimental_current.txt
index 7a2c3a4..dae4fd4 100644
--- a/compose/animation/animation-core/api/public_plus_experimental_current.txt
+++ b/compose/animation/animation-core/api/public_plus_experimental_current.txt
@@ -2,8 +2,8 @@
package androidx.compose.animation.core {
public final class Animatable<T, V extends androidx.compose.animation.core.AnimationVector> {
- ctor public Animatable(T initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional T? visibilityThreshold, optional String label);
ctor @Deprecated public Animatable(T initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional T? visibilityThreshold);
+ ctor public Animatable(T initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional T? visibilityThreshold, optional String label);
method public suspend Object? animateDecay(T initialVelocity, androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Animatable<T,V>,kotlin.Unit>? block, optional kotlin.coroutines.Continuation<? super androidx.compose.animation.core.AnimationResult<T,V>>);
method public suspend Object? animateTo(T targetValue, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional T initialVelocity, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Animatable<T,V>,kotlin.Unit>? block, optional kotlin.coroutines.Continuation<? super androidx.compose.animation.core.AnimationResult<T,V>>);
method public androidx.compose.runtime.State<T> asState();
@@ -124,11 +124,11 @@
}
public final class AnimationSpecKt {
- method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.InfiniteRepeatableSpec<T> infiniteRepeatable(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
method @Deprecated @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.InfiniteRepeatableSpec<T>! infiniteRepeatable(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.InfiniteRepeatableSpec<T> infiniteRepeatable(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.KeyframesSpec<T> keyframes(kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.KeyframesSpec.KeyframesSpecConfig<T>,kotlin.Unit> init);
- method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.RepeatableSpec<T> repeatable(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
method @Deprecated @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.RepeatableSpec<T>! repeatable(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.RepeatableSpec<T> repeatable(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.SnapSpec<T> snap(optional int delayMillis);
method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.SpringSpec<T> spring(optional float dampingRatio, optional float stiffness, optional T? visibilityThreshold);
method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.TweenSpec<T> tween(optional int durationMillis, optional int delayMillis, optional androidx.compose.animation.core.Easing easing);
@@ -153,10 +153,10 @@
}
public final class AnimationStateKt {
- method public static androidx.compose.animation.core.AnimationState<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> AnimationState(float initialValue, optional float initialVelocity, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
method public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.AnimationState<T,V> AnimationState(androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T initialValue, T initialVelocity, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
- method public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.AnimationState<T,V> copy(androidx.compose.animation.core.AnimationState<T,V>, optional T value, optional V? velocityVector, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
+ method public static androidx.compose.animation.core.AnimationState<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> AnimationState(float initialValue, optional float initialVelocity, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
method public static androidx.compose.animation.core.AnimationState<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> copy(androidx.compose.animation.core.AnimationState<java.lang.Float,androidx.compose.animation.core.AnimationVector1D>, optional float value, optional float velocity, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
+ method public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.AnimationState<T,V> copy(androidx.compose.animation.core.AnimationState<T,V>, optional T value, optional V? velocityVector, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
method public static <T, V extends androidx.compose.animation.core.AnimationVector> V createZeroVectorFrom(androidx.compose.animation.core.TwoWayConverter<T,V>, T value);
method public static boolean isFinished(androidx.compose.animation.core.AnimationState<?,?>);
}
@@ -213,9 +213,9 @@
}
public final class DecayAnimation<T, V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.Animation<T,V> {
- ctor public DecayAnimation(androidx.compose.animation.core.VectorizedDecayAnimationSpec<V> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T initialValue, V initialVelocityVector);
- ctor public DecayAnimation(androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T initialValue, V initialVelocityVector);
ctor public DecayAnimation(androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T initialValue, T initialVelocity);
+ ctor public DecayAnimation(androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T initialValue, V initialVelocityVector);
+ ctor public DecayAnimation(androidx.compose.animation.core.VectorizedDecayAnimationSpec<V> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T initialValue, V initialVelocityVector);
method public long getDurationNanos();
method public T getInitialValue();
method public V getInitialVelocityVector();
@@ -237,8 +237,8 @@
}
public final class DecayAnimationSpecKt {
- method public static <T, V extends androidx.compose.animation.core.AnimationVector> T calculateTargetValue(androidx.compose.animation.core.DecayAnimationSpec<T>, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T initialValue, T initialVelocity);
method public static float calculateTargetValue(androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float>, float initialValue, float initialVelocity);
+ method public static <T, V extends androidx.compose.animation.core.AnimationVector> T calculateTargetValue(androidx.compose.animation.core.DecayAnimationSpec<T>, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T initialValue, T initialVelocity);
method public static <T> androidx.compose.animation.core.DecayAnimationSpec<T> exponentialDecay(optional float frictionMultiplier, optional float absVelocityThreshold);
method public static <T> androidx.compose.animation.core.DecayAnimationSpec<T> generateDecayAnimationSpec(androidx.compose.animation.core.FloatDecayAnimationSpec);
}
@@ -395,8 +395,8 @@
}
public final class InfiniteRepeatableSpec<T> implements androidx.compose.animation.core.AnimationSpec<T> {
- ctor public InfiniteRepeatableSpec(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
ctor @Deprecated public InfiniteRepeatableSpec(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ ctor public InfiniteRepeatableSpec(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
method public androidx.compose.animation.core.DurationBasedAnimationSpec<T> getAnimation();
method public long getInitialStartOffset();
method public androidx.compose.animation.core.RepeatMode getRepeatMode();
@@ -427,12 +427,12 @@
}
public final class InfiniteTransitionKt {
- method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Float> animateFloat(androidx.compose.animation.core.InfiniteTransition, float initialValue, float targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<java.lang.Float> animationSpec, optional String label);
method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends java.lang.Float> animateFloat(androidx.compose.animation.core.InfiniteTransition, float initialValue, float targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<java.lang.Float> animationSpec);
- method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValue(androidx.compose.animation.core.InfiniteTransition, T initialValue, T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.InfiniteRepeatableSpec<T> animationSpec, optional String label);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Float> animateFloat(androidx.compose.animation.core.InfiniteTransition, float initialValue, float targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<java.lang.Float> animationSpec, optional String label);
method @Deprecated @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<? extends T> animateValue(androidx.compose.animation.core.InfiniteTransition, T initialValue, T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.InfiniteRepeatableSpec<T> animationSpec);
- method @androidx.compose.runtime.Composable public static androidx.compose.animation.core.InfiniteTransition rememberInfiniteTransition(optional String label);
+ method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValue(androidx.compose.animation.core.InfiniteTransition, T initialValue, T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.InfiniteRepeatableSpec<T> animationSpec, optional String label);
method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.animation.core.InfiniteTransition rememberInfiniteTransition();
+ method @androidx.compose.runtime.Composable public static androidx.compose.animation.core.InfiniteTransition rememberInfiniteTransition(optional String label);
}
@kotlin.RequiresOptIn(message="This API is internal to library.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY, kotlin.annotation.AnnotationTarget.FIELD, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER}) public @interface InternalAnimationApi {
@@ -480,8 +480,8 @@
}
@androidx.compose.runtime.Immutable public final class RepeatableSpec<T> implements androidx.compose.animation.core.FiniteAnimationSpec<T> {
- ctor public RepeatableSpec(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
ctor @Deprecated public RepeatableSpec(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ ctor public RepeatableSpec(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
method public androidx.compose.animation.core.DurationBasedAnimationSpec<T> getAnimation();
method public long getInitialStartOffset();
method public int getIterations();
@@ -548,10 +548,10 @@
}
public final class SuspendAnimationKt {
- method public static suspend Object? animate(float initialValue, float targetValue, optional float initialVelocity, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public static suspend <T, V extends androidx.compose.animation.core.AnimationVector> Object? animate(androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T initialValue, T targetValue, optional T? initialVelocity, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, kotlin.jvm.functions.Function2<? super T,? super T,kotlin.Unit> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
- method public static suspend Object? animateDecay(float initialValue, float initialVelocity, androidx.compose.animation.core.FloatDecayAnimationSpec animationSpec, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? animate(float initialValue, float targetValue, optional float initialVelocity, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public static suspend <T, V extends androidx.compose.animation.core.AnimationVector> Object? animateDecay(androidx.compose.animation.core.AnimationState<T,V>, androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, optional boolean sequentialAnimation, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.AnimationScope<T,V>,kotlin.Unit> block, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? animateDecay(float initialValue, float initialVelocity, androidx.compose.animation.core.FloatDecayAnimationSpec animationSpec, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public static suspend <T, V extends androidx.compose.animation.core.AnimationVector> Object? animateTo(androidx.compose.animation.core.AnimationState<T,V>, T targetValue, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional boolean sequentialAnimation, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.AnimationScope<T,V>,kotlin.Unit> block, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
}
@@ -622,8 +622,8 @@
method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.geometry.Size> animateSize(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.Segment<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.geometry.Size>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.geometry.Size> targetValueByState);
method @androidx.compose.runtime.Composable public static inline <S, T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValue(androidx.compose.animation.core.Transition<S>, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.Segment<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<T>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,? extends T> targetValueByState);
method @androidx.compose.animation.core.ExperimentalTransitionApi @androidx.compose.runtime.Composable public static inline <S, T> androidx.compose.animation.core.Transition<T> createChildTransition(androidx.compose.animation.core.Transition<S>, optional String label, kotlin.jvm.functions.Function1<? super S,? extends T> transformToChildState);
- method @androidx.compose.runtime.Composable public static <T> androidx.compose.animation.core.Transition<T> updateTransition(T targetState, optional String? label);
method @androidx.compose.runtime.Composable public static <T> androidx.compose.animation.core.Transition<T> updateTransition(androidx.compose.animation.core.MutableTransitionState<T> transitionState, optional String? label);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.animation.core.Transition<T> updateTransition(T targetState, optional String? label);
}
@androidx.compose.runtime.Immutable public final class TweenSpec<T> implements androidx.compose.animation.core.DurationBasedAnimationSpec<T> {
@@ -646,15 +646,15 @@
public final class VectorConvertersKt {
method public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.TwoWayConverter<T,V> TwoWayConverter(kotlin.jvm.functions.Function1<? super T,? extends V> convertToVector, kotlin.jvm.functions.Function1<? super V,? extends T> convertFromVector);
- method public static androidx.compose.animation.core.TwoWayConverter<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> getVectorConverter(kotlin.jvm.internal.FloatCompanionObject);
- method public static androidx.compose.animation.core.TwoWayConverter<java.lang.Integer,androidx.compose.animation.core.AnimationVector1D> getVectorConverter(kotlin.jvm.internal.IntCompanionObject);
+ method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.geometry.Offset.Companion);
method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getVectorConverter(androidx.compose.ui.geometry.Rect.Companion);
+ method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.geometry.Size.Companion);
method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getVectorConverter(androidx.compose.ui.unit.Dp.Companion);
method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.DpOffset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.unit.DpOffset.Companion);
- method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.geometry.Size.Companion);
- method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.geometry.Offset.Companion);
method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.IntOffset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.unit.IntOffset.Companion);
method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.IntSize,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.unit.IntSize.Companion);
+ method public static androidx.compose.animation.core.TwoWayConverter<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> getVectorConverter(kotlin.jvm.internal.FloatCompanionObject);
+ method public static androidx.compose.animation.core.TwoWayConverter<java.lang.Integer,androidx.compose.animation.core.AnimationVector1D> getVectorConverter(kotlin.jvm.internal.IntCompanionObject);
}
@kotlin.jvm.JvmDefaultWithCompatibility public interface VectorizedAnimationSpec<V extends androidx.compose.animation.core.AnimationVector> {
@@ -696,8 +696,8 @@
}
public final class VectorizedInfiniteRepeatableSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedAnimationSpec<V> {
- ctor public VectorizedInfiniteRepeatableSpec(androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
ctor @Deprecated public VectorizedInfiniteRepeatableSpec(androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ ctor public VectorizedInfiniteRepeatableSpec(androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
method public long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
@@ -716,8 +716,8 @@
}
public final class VectorizedRepeatableSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> {
- ctor public VectorizedRepeatableSpec(int iterations, androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
ctor @Deprecated public VectorizedRepeatableSpec(int iterations, androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ ctor public VectorizedRepeatableSpec(int iterations, androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
method public long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
@@ -754,14 +754,14 @@
}
public final class VisibilityThresholdsKt {
- method public static long getVisibilityThreshold(androidx.compose.ui.unit.IntOffset.Companion);
method public static long getVisibilityThreshold(androidx.compose.ui.geometry.Offset.Companion);
- method public static int getVisibilityThreshold(kotlin.jvm.internal.IntCompanionObject);
+ method public static androidx.compose.ui.geometry.Rect getVisibilityThreshold(androidx.compose.ui.geometry.Rect.Companion);
+ method public static long getVisibilityThreshold(androidx.compose.ui.geometry.Size.Companion);
method public static float getVisibilityThreshold(androidx.compose.ui.unit.Dp.Companion);
method public static long getVisibilityThreshold(androidx.compose.ui.unit.DpOffset.Companion);
- method public static long getVisibilityThreshold(androidx.compose.ui.geometry.Size.Companion);
+ method public static long getVisibilityThreshold(androidx.compose.ui.unit.IntOffset.Companion);
method public static long getVisibilityThreshold(androidx.compose.ui.unit.IntSize.Companion);
- method public static androidx.compose.ui.geometry.Rect getVisibilityThreshold(androidx.compose.ui.geometry.Rect.Companion);
+ method public static int getVisibilityThreshold(kotlin.jvm.internal.IntCompanionObject);
}
}
diff --git a/compose/animation/animation-core/api/restricted_current.txt b/compose/animation/animation-core/api/restricted_current.txt
index b2e9658..cab01bb 100644
--- a/compose/animation/animation-core/api/restricted_current.txt
+++ b/compose/animation/animation-core/api/restricted_current.txt
@@ -2,8 +2,8 @@
package androidx.compose.animation.core {
public final class Animatable<T, V extends androidx.compose.animation.core.AnimationVector> {
- ctor public Animatable(T initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional T? visibilityThreshold, optional String label);
ctor @Deprecated public Animatable(T initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional T? visibilityThreshold);
+ ctor public Animatable(T initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional T? visibilityThreshold, optional String label);
method public suspend Object? animateDecay(T initialVelocity, androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Animatable<T,V>,kotlin.Unit>? block, optional kotlin.coroutines.Continuation<? super androidx.compose.animation.core.AnimationResult<T,V>>);
method public suspend Object? animateTo(T targetValue, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional T initialVelocity, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Animatable<T,V>,kotlin.Unit>? block, optional kotlin.coroutines.Continuation<? super androidx.compose.animation.core.AnimationResult<T,V>>);
method public androidx.compose.runtime.State<T> asState();
@@ -124,11 +124,11 @@
}
public final class AnimationSpecKt {
- method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.InfiniteRepeatableSpec<T> infiniteRepeatable(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
method @Deprecated @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.InfiniteRepeatableSpec<T>! infiniteRepeatable(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.InfiniteRepeatableSpec<T> infiniteRepeatable(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.KeyframesSpec<T> keyframes(kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.KeyframesSpec.KeyframesSpecConfig<T>,kotlin.Unit> init);
- method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.RepeatableSpec<T> repeatable(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
method @Deprecated @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.RepeatableSpec<T>! repeatable(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.RepeatableSpec<T> repeatable(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.SnapSpec<T> snap(optional int delayMillis);
method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.SpringSpec<T> spring(optional float dampingRatio, optional float stiffness, optional T? visibilityThreshold);
method @androidx.compose.runtime.Stable public static <T> androidx.compose.animation.core.TweenSpec<T> tween(optional int durationMillis, optional int delayMillis, optional androidx.compose.animation.core.Easing easing);
@@ -153,10 +153,10 @@
}
public final class AnimationStateKt {
- method public static androidx.compose.animation.core.AnimationState<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> AnimationState(float initialValue, optional float initialVelocity, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
method public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.AnimationState<T,V> AnimationState(androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T initialValue, T initialVelocity, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
- method public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.AnimationState<T,V> copy(androidx.compose.animation.core.AnimationState<T,V>, optional T value, optional V? velocityVector, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
+ method public static androidx.compose.animation.core.AnimationState<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> AnimationState(float initialValue, optional float initialVelocity, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
method public static androidx.compose.animation.core.AnimationState<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> copy(androidx.compose.animation.core.AnimationState<java.lang.Float,androidx.compose.animation.core.AnimationVector1D>, optional float value, optional float velocity, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
+ method public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.AnimationState<T,V> copy(androidx.compose.animation.core.AnimationState<T,V>, optional T value, optional V? velocityVector, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
method public static <T, V extends androidx.compose.animation.core.AnimationVector> V createZeroVectorFrom(androidx.compose.animation.core.TwoWayConverter<T,V>, T value);
method public static boolean isFinished(androidx.compose.animation.core.AnimationState<?,?>);
}
@@ -213,9 +213,9 @@
}
public final class DecayAnimation<T, V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.Animation<T,V> {
- ctor public DecayAnimation(androidx.compose.animation.core.VectorizedDecayAnimationSpec<V> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T initialValue, V initialVelocityVector);
- ctor public DecayAnimation(androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T initialValue, V initialVelocityVector);
ctor public DecayAnimation(androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T initialValue, T initialVelocity);
+ ctor public DecayAnimation(androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T initialValue, V initialVelocityVector);
+ ctor public DecayAnimation(androidx.compose.animation.core.VectorizedDecayAnimationSpec<V> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T initialValue, V initialVelocityVector);
method public long getDurationNanos();
method public T getInitialValue();
method public V getInitialVelocityVector();
@@ -237,8 +237,8 @@
}
public final class DecayAnimationSpecKt {
- method public static <T, V extends androidx.compose.animation.core.AnimationVector> T calculateTargetValue(androidx.compose.animation.core.DecayAnimationSpec<T>, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T initialValue, T initialVelocity);
method public static float calculateTargetValue(androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float>, float initialValue, float initialVelocity);
+ method public static <T, V extends androidx.compose.animation.core.AnimationVector> T calculateTargetValue(androidx.compose.animation.core.DecayAnimationSpec<T>, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T initialValue, T initialVelocity);
method public static <T> androidx.compose.animation.core.DecayAnimationSpec<T> exponentialDecay(optional float frictionMultiplier, optional float absVelocityThreshold);
method public static <T> androidx.compose.animation.core.DecayAnimationSpec<T> generateDecayAnimationSpec(androidx.compose.animation.core.FloatDecayAnimationSpec);
}
@@ -392,8 +392,8 @@
}
public final class InfiniteRepeatableSpec<T> implements androidx.compose.animation.core.AnimationSpec<T> {
- ctor public InfiniteRepeatableSpec(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
ctor @Deprecated public InfiniteRepeatableSpec(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ ctor public InfiniteRepeatableSpec(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
method public androidx.compose.animation.core.DurationBasedAnimationSpec<T> getAnimation();
method public long getInitialStartOffset();
method public androidx.compose.animation.core.RepeatMode getRepeatMode();
@@ -424,12 +424,12 @@
}
public final class InfiniteTransitionKt {
- method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Float> animateFloat(androidx.compose.animation.core.InfiniteTransition, float initialValue, float targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<java.lang.Float> animationSpec, optional String label);
method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends java.lang.Float> animateFloat(androidx.compose.animation.core.InfiniteTransition, float initialValue, float targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<java.lang.Float> animationSpec);
- method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValue(androidx.compose.animation.core.InfiniteTransition, T initialValue, T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.InfiniteRepeatableSpec<T> animationSpec, optional String label);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Float> animateFloat(androidx.compose.animation.core.InfiniteTransition, float initialValue, float targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<java.lang.Float> animationSpec, optional String label);
method @Deprecated @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<? extends T> animateValue(androidx.compose.animation.core.InfiniteTransition, T initialValue, T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.InfiniteRepeatableSpec<T> animationSpec);
- method @androidx.compose.runtime.Composable public static androidx.compose.animation.core.InfiniteTransition rememberInfiniteTransition(optional String label);
+ method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValue(androidx.compose.animation.core.InfiniteTransition, T initialValue, T targetValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.InfiniteRepeatableSpec<T> animationSpec, optional String label);
method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.animation.core.InfiniteTransition rememberInfiniteTransition();
+ method @androidx.compose.runtime.Composable public static androidx.compose.animation.core.InfiniteTransition rememberInfiniteTransition(optional String label);
}
@androidx.compose.runtime.Immutable public final class KeyframesSpec<T> implements androidx.compose.animation.core.DurationBasedAnimationSpec<T> {
@@ -474,8 +474,8 @@
}
@androidx.compose.runtime.Immutable public final class RepeatableSpec<T> implements androidx.compose.animation.core.FiniteAnimationSpec<T> {
- ctor public RepeatableSpec(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
ctor @Deprecated public RepeatableSpec(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ ctor public RepeatableSpec(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
method public androidx.compose.animation.core.DurationBasedAnimationSpec<T> getAnimation();
method public long getInitialStartOffset();
method public int getIterations();
@@ -542,10 +542,10 @@
}
public final class SuspendAnimationKt {
- method public static suspend Object? animate(float initialValue, float targetValue, optional float initialVelocity, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public static suspend <T, V extends androidx.compose.animation.core.AnimationVector> Object? animate(androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T initialValue, T targetValue, optional T? initialVelocity, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, kotlin.jvm.functions.Function2<? super T,? super T,kotlin.Unit> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
- method public static suspend Object? animateDecay(float initialValue, float initialVelocity, androidx.compose.animation.core.FloatDecayAnimationSpec animationSpec, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? animate(float initialValue, float targetValue, optional float initialVelocity, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public static suspend <T, V extends androidx.compose.animation.core.AnimationVector> Object? animateDecay(androidx.compose.animation.core.AnimationState<T,V>, androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, optional boolean sequentialAnimation, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.AnimationScope<T,V>,kotlin.Unit> block, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? animateDecay(float initialValue, float initialVelocity, androidx.compose.animation.core.FloatDecayAnimationSpec animationSpec, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public static suspend <T, V extends androidx.compose.animation.core.AnimationVector> Object? animateTo(androidx.compose.animation.core.AnimationState<T,V>, T targetValue, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional boolean sequentialAnimation, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.AnimationScope<T,V>,kotlin.Unit> block, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
}
@@ -618,8 +618,8 @@
method @androidx.compose.runtime.Composable public static inline <S, T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValue(androidx.compose.animation.core.Transition<S>, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.Segment<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<T>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,? extends T> targetValueByState);
method @androidx.compose.runtime.Composable @kotlin.PublishedApi internal static <S, T> androidx.compose.animation.core.Transition<T> createChildTransitionInternal(androidx.compose.animation.core.Transition<S>, T initialState, T targetState, String childLabel);
method @androidx.compose.runtime.Composable @kotlin.PublishedApi internal static <S, T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> createTransitionAnimation(androidx.compose.animation.core.Transition<S>, T initialValue, T targetValue, androidx.compose.animation.core.FiniteAnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, String label);
- method @androidx.compose.runtime.Composable public static <T> androidx.compose.animation.core.Transition<T> updateTransition(T targetState, optional String? label);
method @androidx.compose.runtime.Composable public static <T> androidx.compose.animation.core.Transition<T> updateTransition(androidx.compose.animation.core.MutableTransitionState<T> transitionState, optional String? label);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.animation.core.Transition<T> updateTransition(T targetState, optional String? label);
}
@androidx.compose.runtime.Immutable public final class TweenSpec<T> implements androidx.compose.animation.core.DurationBasedAnimationSpec<T> {
@@ -642,15 +642,15 @@
public final class VectorConvertersKt {
method public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.TwoWayConverter<T,V> TwoWayConverter(kotlin.jvm.functions.Function1<? super T,? extends V> convertToVector, kotlin.jvm.functions.Function1<? super V,? extends T> convertFromVector);
- method public static androidx.compose.animation.core.TwoWayConverter<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> getVectorConverter(kotlin.jvm.internal.FloatCompanionObject);
- method public static androidx.compose.animation.core.TwoWayConverter<java.lang.Integer,androidx.compose.animation.core.AnimationVector1D> getVectorConverter(kotlin.jvm.internal.IntCompanionObject);
+ method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.geometry.Offset.Companion);
method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getVectorConverter(androidx.compose.ui.geometry.Rect.Companion);
+ method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.geometry.Size.Companion);
method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getVectorConverter(androidx.compose.ui.unit.Dp.Companion);
method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.DpOffset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.unit.DpOffset.Companion);
- method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.geometry.Size.Companion);
- method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.geometry.Offset.Companion);
method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.IntOffset,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.unit.IntOffset.Companion);
method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.IntSize,androidx.compose.animation.core.AnimationVector2D> getVectorConverter(androidx.compose.ui.unit.IntSize.Companion);
+ method public static androidx.compose.animation.core.TwoWayConverter<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> getVectorConverter(kotlin.jvm.internal.FloatCompanionObject);
+ method public static androidx.compose.animation.core.TwoWayConverter<java.lang.Integer,androidx.compose.animation.core.AnimationVector1D> getVectorConverter(kotlin.jvm.internal.IntCompanionObject);
}
@kotlin.jvm.JvmDefaultWithCompatibility public interface VectorizedAnimationSpec<V extends androidx.compose.animation.core.AnimationVector> {
@@ -692,8 +692,8 @@
}
public final class VectorizedInfiniteRepeatableSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedAnimationSpec<V> {
- ctor public VectorizedInfiniteRepeatableSpec(androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
ctor @Deprecated public VectorizedInfiniteRepeatableSpec(androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ ctor public VectorizedInfiniteRepeatableSpec(androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
method public long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
@@ -712,8 +712,8 @@
}
public final class VectorizedRepeatableSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> {
- ctor public VectorizedRepeatableSpec(int iterations, androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
ctor @Deprecated public VectorizedRepeatableSpec(int iterations, androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
+ ctor public VectorizedRepeatableSpec(int iterations, androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode, optional long initialStartOffset);
method public long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
@@ -750,14 +750,14 @@
}
public final class VisibilityThresholdsKt {
- method public static long getVisibilityThreshold(androidx.compose.ui.unit.IntOffset.Companion);
method public static long getVisibilityThreshold(androidx.compose.ui.geometry.Offset.Companion);
- method public static int getVisibilityThreshold(kotlin.jvm.internal.IntCompanionObject);
+ method public static androidx.compose.ui.geometry.Rect getVisibilityThreshold(androidx.compose.ui.geometry.Rect.Companion);
+ method public static long getVisibilityThreshold(androidx.compose.ui.geometry.Size.Companion);
method public static float getVisibilityThreshold(androidx.compose.ui.unit.Dp.Companion);
method public static long getVisibilityThreshold(androidx.compose.ui.unit.DpOffset.Companion);
- method public static long getVisibilityThreshold(androidx.compose.ui.geometry.Size.Companion);
+ method public static long getVisibilityThreshold(androidx.compose.ui.unit.IntOffset.Companion);
method public static long getVisibilityThreshold(androidx.compose.ui.unit.IntSize.Companion);
- method public static androidx.compose.ui.geometry.Rect getVisibilityThreshold(androidx.compose.ui.geometry.Rect.Companion);
+ method public static int getVisibilityThreshold(kotlin.jvm.internal.IntCompanionObject);
}
}
diff --git a/compose/animation/animation-core/benchmark/src/androidTest/java/androidx/compose/animation/core/benchmark/SpringEstimationBenchmark.kt b/compose/animation/animation-core/benchmark/src/androidTest/java/androidx/compose/animation/core/benchmark/SpringEstimationBenchmark.kt
index 7c72011..0c15e61 100644
--- a/compose/animation/animation-core/benchmark/src/androidTest/java/androidx/compose/animation/core/benchmark/SpringEstimationBenchmark.kt
+++ b/compose/animation/animation-core/benchmark/src/androidTest/java/androidx/compose/animation/core/benchmark/SpringEstimationBenchmark.kt
@@ -21,10 +21,10 @@
import androidx.compose.animation.core.estimateAnimationDurationMillis
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
+import kotlin.math.sqrt
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.math.sqrt
@LargeTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/animation/animation-core/samples/build.gradle b/compose/animation/animation-core/samples/build.gradle
index 160f365..735da8e 100644
--- a/compose/animation/animation-core/samples/build.gradle
+++ b/compose/animation/animation-core/samples/build.gradle
@@ -37,7 +37,7 @@
}
androidx {
- name = "AndroidX Compose UI Animation Library Core Classes Samples"
+ name = "Compose UI Animation Core Classes Samples"
type = LibraryType.SAMPLES
inceptionYear = "2019"
description = "Contains the sample code for the Androidx Compose UI Animation Core Classes"
diff --git a/compose/animation/animation-core/samples/src/main/java/androidx/compose/animation/core/samples/AnimatableSamples.kt b/compose/animation/animation-core/samples/src/main/java/androidx/compose/animation/core/samples/AnimatableSamples.kt
index 0ca9c61..160a753 100644
--- a/compose/animation/animation-core/samples/src/main/java/androidx/compose/animation/core/samples/AnimatableSamples.kt
+++ b/compose/animation/animation-core/samples/src/main/java/androidx/compose/animation/core/samples/AnimatableSamples.kt
@@ -43,17 +43,17 @@
import androidx.compose.ui.composed
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Size
-import androidx.compose.ui.input.pointer.util.VelocityTracker
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.input.pointer.positionChange
+import androidx.compose.ui.input.pointer.util.VelocityTracker
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.dp
+import kotlin.math.roundToInt
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.launch
-import kotlin.math.roundToInt
@Sampled
@Composable
diff --git a/compose/animation/animation-core/samples/src/main/java/androidx/compose/animation/core/samples/AnimatedValueSamples.kt b/compose/animation/animation-core/samples/src/main/java/androidx/compose/animation/core/samples/AnimatedValueSamples.kt
index 9a76f58..110f0c6 100644
--- a/compose/animation/animation-core/samples/src/main/java/androidx/compose/animation/core/samples/AnimatedValueSamples.kt
+++ b/compose/animation/animation-core/samples/src/main/java/androidx/compose/animation/core/samples/AnimatedValueSamples.kt
@@ -19,11 +19,11 @@
import androidx.annotation.Sampled
import androidx.compose.animation.core.AnimationVector2D
import androidx.compose.animation.core.TwoWayConverter
-import androidx.compose.animation.core.animateValueAsState
import androidx.compose.animation.core.animateDpAsState
import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.animation.core.animateIntOffsetAsState
import androidx.compose.animation.core.animateOffsetAsState
+import androidx.compose.animation.core.animateValueAsState
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxWidth
diff --git a/compose/animation/animation-core/samples/src/main/java/androidx/compose/animation/core/samples/AnimationSpecSamples.kt b/compose/animation/animation-core/samples/src/main/java/androidx/compose/animation/core/samples/AnimationSpecSamples.kt
index 272a82d..96ce4ce 100644
--- a/compose/animation/animation-core/samples/src/main/java/androidx/compose/animation/core/samples/AnimationSpecSamples.kt
+++ b/compose/animation/animation-core/samples/src/main/java/androidx/compose/animation/core/samples/AnimationSpecSamples.kt
@@ -27,8 +27,8 @@
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
-import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.runtime.Composable
import androidx.compose.runtime.State
diff --git a/compose/animation/animation-core/src/androidAndroidTest/kotlin/androidx/compose/animation/core/InfiniteTransitionTest.kt b/compose/animation/animation-core/src/androidAndroidTest/kotlin/androidx/compose/animation/core/InfiniteTransitionTest.kt
index 379163f..acc232c 100644
--- a/compose/animation/animation-core/src/androidAndroidTest/kotlin/androidx/compose/animation/core/InfiniteTransitionTest.kt
+++ b/compose/animation/animation-core/src/androidAndroidTest/kotlin/androidx/compose/animation/core/InfiniteTransitionTest.kt
@@ -19,8 +19,8 @@
import androidx.compose.animation.VectorConverter
import androidx.compose.animation.animateColor
import androidx.compose.runtime.LaunchedEffect
-import androidx.compose.runtime.withFrameNanos
import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.withFrameNanos
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.test.ext.junit.runners.AndroidJUnit4
diff --git a/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/ComplexDouble.kt b/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/ComplexDouble.kt
index aeee770..1bc18567 100644
--- a/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/ComplexDouble.kt
+++ b/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/ComplexDouble.kt
@@ -83,20 +83,20 @@
b: Double,
c: Double
): Pair<ComplexDouble, ComplexDouble> {
- val firstRoot = (-b + complexSqrt(b * b - 4.0 * a * c)) / (2.0 * a)
- val secondRoot = (-b - complexSqrt(b * b - 4.0 * a * c)) / (2.0 * a)
+ val partialRoot = b * b - 4.0 * a * c
+ val divisor = 1.0 / (2.0 * a)
+ val firstRoot = (-b + complexSqrt(partialRoot)) * divisor
+ val secondRoot = (-b - complexSqrt(partialRoot)) * divisor
return firstRoot to secondRoot
}
/**
* Returns the square root of [num] which may be imaginary.
*/
-internal fun complexSqrt(num: Double): ComplexDouble {
- return if (num < 0.0) {
- ComplexDouble(0.0, sqrt(abs(num)))
- } else {
- ComplexDouble(sqrt(num), 0.0)
- }
+internal fun complexSqrt(num: Double): ComplexDouble = if (num < 0.0) {
+ ComplexDouble(0.0, sqrt(abs(num)))
+} else {
+ ComplexDouble(sqrt(num), 0.0)
}
internal inline operator fun Double.plus(other: ComplexDouble): ComplexDouble {
diff --git a/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/InternalMutatorMutex.kt b/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/InternalMutatorMutex.kt
index 0ba64b0..f0eff2f 100644
--- a/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/InternalMutatorMutex.kt
+++ b/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/InternalMutatorMutex.kt
@@ -55,6 +55,19 @@
}
/**
+ * Used in place of the standard Job cancellation pathway to avoid reflective
+ * javaClass.simpleName lookups to build the exception message and stack trace collection.
+ * Remove if these are changed in kotlinx.coroutines.
+ */
+private class MutationInterruptedException : CancellationException("Mutation interrupted") {
+ override fun fillInStackTrace(): Throwable {
+ // Avoid null.clone() on Android <= 6.0 when accessing stackTrace
+ stackTrace = emptyArray()
+ return this
+ }
+}
+
+/**
* Mutual exclusion for UI state mutation over time.
*
* [mutate] permits interruptible state mutation over time using a standard [MutatePriority].
@@ -73,7 +86,7 @@
private class Mutator(val priority: MutatePriority, val job: Job) {
fun canInterrupt(other: Mutator) = priority >= other.priority
- fun cancel() = job.cancel()
+ fun cancel() = job.cancel(MutationInterruptedException())
}
private val currentMutator = AtomicReference<Mutator?>(null)
diff --git a/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/SpringEstimation.kt b/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/SpringEstimation.kt
index e75fa39..45e2bf9 100644
--- a/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/SpringEstimation.kt
+++ b/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/SpringEstimation.kt
@@ -52,10 +52,16 @@
delta: Double
): Long {
val dampingCoefficient = 2.0 * dampingRatio * sqrt(stiffness)
- val roots = complexQuadraticFormula(1.0, dampingCoefficient, stiffness)
+
+ // Compute the roots of the polynomial [a]x^2+[b]x+[c]=0 which may be complex.
+ // Here a is set to the constant 1.0, and folded into the other computations
+ val partialRoot = dampingCoefficient * dampingCoefficient - 4.0 * stiffness
+ val firstRoot = (-dampingCoefficient + complexSqrt(partialRoot)) * 0.5
+ val secondRoot = (-dampingCoefficient - complexSqrt(partialRoot)) * 0.5
return estimateDurationInternal(
- roots,
+ firstRoot,
+ secondRoot,
dampingRatio,
initialVelocity,
initialDisplacement,
@@ -77,14 +83,20 @@
): Long {
val criticalDamping = 2.0 * sqrt(springConstant * mass)
val dampingRatio = dampingCoefficient / criticalDamping
- val roots = complexQuadraticFormula(mass, dampingCoefficient, springConstant)
+
+ // Compute the roots of the polynomial [a]x^2+[b]x+[c]=0 which may be complex.
+ val partialRoot = dampingCoefficient * dampingCoefficient - 4.0 * mass * springConstant
+ val divisor = 1.0 / (2.0 * mass)
+ val firstRoot = (-dampingCoefficient + complexSqrt(partialRoot)) * divisor
+ val secondRoot = (-dampingCoefficient - complexSqrt(partialRoot)) * divisor
return estimateDurationInternal(
- roots = roots,
- dampingRatio = dampingRatio,
- initialVelocity = initialVelocity,
- initialPosition = initialDisplacement,
- delta = delta
+ firstRoot,
+ secondRoot,
+ dampingRatio,
+ initialVelocity,
+ initialDisplacement,
+ delta
)
}
@@ -94,14 +106,14 @@
* which simplifies to x(t) = c*e^(r*t)*cos(...) where c*e^(r*t) is the envelope of x(t)
*/
private fun estimateUnderDamped(
- roots: Pair<ComplexDouble, ComplexDouble>,
+ firstRoot: ComplexDouble,
p0: Double,
v0: Double,
delta: Double
): Double {
- val r = roots.first.real
+ val r = firstRoot.real
val c1 = p0
- val c2 = (v0 - r * c1) / roots.first.imaginary
+ val c2 = (v0 - r * c1) / firstRoot.imaginary
val c = sqrt(c1 * c1 + c2 * c2)
return ln(delta / c) / r
@@ -112,28 +124,27 @@
* the equation x(t) = c_1*e^(r*t) + c_2*t*e^(r*t)
*/
private fun estimateCriticallyDamped(
- roots: Pair<ComplexDouble, ComplexDouble>,
+ firstRoot: ComplexDouble,
p0: Double,
v0: Double,
delta: Double
): Double {
- val r = roots.first.real
+ val r = firstRoot.real
val c1 = p0
val c2 = v0 - r * c1
- // Application of Lambert's W function to solve te^t
- fun t2Iterate(guess: Double, r: Double): Double {
- var t = guess
- for (i in 0..5) {
- t = (guess - ln(abs(t / r)))
- }
- return t
- }
-
// For our initial guess, determine the max t of c_1*e^(r*t) = delta and
// c_2*t*e^(r*t) = delta
val t1 = ln(abs(delta / c1)) / r
- val t2 = t2Iterate(ln(abs(delta / c2)), r) / r
+ val t2 = run {
+ // Application of Lambert's W function to solve te^t
+ val guess = ln(abs(delta / c2))
+ var t = guess
+ for (i in 0..5) {
+ t = (guess - ln(abs(t / r)))
+ }
+ t
+ } / r
var tCurr = when {
t1.isNotFinite() -> t2
t2.isNotFinite() -> t1
@@ -142,13 +153,13 @@
// Calculate the inflection time. This is important if the inflection is in t > 0
val tInflection = -(r * c1 + c2) / (r * c2)
- fun xInflection() = c1 * exp(r * tInflection) + c2 * tInflection * exp(r * tInflection)
+ val xInflection = c1 * exp(r * tInflection) + c2 * tInflection * exp(r * tInflection)
// For inflection that does not exist in real time, we always solve for x(t)=delta. Note
// the system is manipulated such that p0 is always positive.
val signedDelta = if (tInflection.isNaN() || tInflection <= 0.0) {
-delta
- } else if (tInflection > 0.0 && -xInflection() < delta) {
+ } else if (tInflection > 0.0 && -xInflection < delta) {
// In this scenario the first crossing with the threshold is to be found. Note that
// the inflection does not exceed delta. As such, we search from the left.
if (c2 < 0 && c1 > 0) {
@@ -169,15 +180,16 @@
delta
}
- val fn: (Double) -> Double = { t -> (c1 + c2 * t) * exp(r * t) + signedDelta }
- val fnPrime: (Double) -> Double = { t -> (c2 * (r * t + 1) + c1 * r) * exp(r * t) }
-
var tDelta = Double.MAX_VALUE
var iterations = 0
while (tDelta > 0.001 && iterations < 100) {
iterations++
val tLast = tCurr
- tCurr = iterateNewtonsMethod(tCurr, fn, fnPrime)
+ tCurr = iterateNewtonsMethod(
+ tCurr,
+ { t -> (c1 + c2 * t) * exp(r * t) + signedDelta },
+ { t -> (c2 * (r * t + 1) + c1 * r) * exp(r * t) }
+ )
tDelta = abs(tLast - tCurr)
}
@@ -189,13 +201,14 @@
* the equation x(t) = c_1*e^(r_1*t) + c_2*e^(r_2*t)
*/
private fun estimateOverDamped(
- roots: Pair<ComplexDouble, ComplexDouble>,
+ firstRoot: ComplexDouble,
+ secondRoot: ComplexDouble,
p0: Double,
v0: Double,
delta: Double
): Double {
- val r1 = roots.first.real
- val r2 = roots.second.real
+ val r1 = firstRoot.real
+ val r2 = secondRoot.real
val c2 = (r1 * p0 - v0) / (r1 - r2)
val c1 = p0 - c2
@@ -239,11 +252,8 @@
delta
}
- val fn: (Double) -> Double = { t -> c1 * exp(r1 * t) + c2 * exp(r2 * t) + signedDelta }
- val fnPrime: (Double) -> Double = { t -> c1 * r1 * exp(r1 * t) + c2 * r2 * exp(r2 * t) }
-
// For a good initial guess, simply return
- if (abs(fn(tCurr)) < 0.0001) {
+ if (abs(c1 * r1 * exp(r1 * tCurr) + c2 * r2 * exp(r2 * tCurr)) < 0.0001) {
return tCurr
}
var tDelta = Double.MAX_VALUE
@@ -253,7 +263,11 @@
while (tDelta > 0.001 && iterations < 100) {
iterations++
val tLast = tCurr
- tCurr = iterateNewtonsMethod(tCurr, fn, fnPrime)
+ tCurr = iterateNewtonsMethod(
+ tCurr,
+ { t -> c1 * exp(r1 * t) + c2 * exp(r2 * t) + signedDelta },
+ { t -> c1 * r1 * exp(r1 * t) + c2 * r2 * exp(r2 * t) }
+ )
tDelta = abs(tLast - tCurr)
}
@@ -262,15 +276,14 @@
// Applies Newton-Raphson's method to solve for the estimated time the spring mass system will
// last be at [delta].
-@Suppress("UnnecessaryVariable")
private fun estimateDurationInternal(
- roots: Pair<ComplexDouble, ComplexDouble>,
+ firstRoot: ComplexDouble,
+ secondRoot: ComplexDouble,
dampingRatio: Double,
initialVelocity: Double,
initialPosition: Double,
delta: Double
): Long {
-
if (initialPosition == 0.0 && initialVelocity == 0.0) {
return 0L
}
@@ -281,25 +294,26 @@
return (
when {
dampingRatio > 1.0 -> estimateOverDamped(
- roots = roots,
+ firstRoot = firstRoot,
+ secondRoot = secondRoot,
v0 = v0,
p0 = p0,
delta = delta
)
dampingRatio < 1.0 -> estimateUnderDamped(
- roots = roots,
+ firstRoot = firstRoot,
v0 = v0,
p0 = p0,
delta = delta
)
else -> estimateCriticallyDamped(
- roots = roots,
+ firstRoot = firstRoot,
v0 = v0,
p0 = p0,
delta = delta
)
} * 1000.0
- ).toLong()
+ ).toLong()
}
private inline fun iterateNewtonsMethod(
@@ -311,4 +325,4 @@
}
@Suppress("NOTHING_TO_INLINE")
-private inline fun Double.isNotFinite() = !this.isFinite()
+private inline fun Double.isNotFinite() = !isFinite()
diff --git a/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/SpringSimulation.kt b/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/SpringSimulation.kt
index a2c7d99..23f1cce 100644
--- a/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/SpringSimulation.kt
+++ b/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/SpringSimulation.kt
@@ -19,7 +19,6 @@
import androidx.compose.ui.util.packFloats
import androidx.compose.ui.util.unpackFloat1
import androidx.compose.ui.util.unpackFloat2
-
import kotlin.math.cos
import kotlin.math.exp
import kotlin.math.sin
diff --git a/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/Transition.kt b/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/Transition.kt
index ccbfd2a..7ae4fe0 100644
--- a/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/Transition.kt
+++ b/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/Transition.kt
@@ -18,6 +18,7 @@
package androidx.compose.animation.core
+import androidx.compose.animation.core.internal.JvmDefaultWithCompatibility
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
@@ -26,6 +27,7 @@
import androidx.compose.runtime.State
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableLongStateOf
import androidx.compose.runtime.mutableStateListOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
@@ -37,10 +39,8 @@
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.IntSize
-import kotlin.math.max
-import androidx.compose.animation.core.internal.JvmDefaultWithCompatibility
-import androidx.compose.runtime.mutableLongStateOf
import kotlin.jvm.JvmName
+import kotlin.math.max
/**
* This sets up a [Transition], and updates it with the target provided by [targetState]. When
diff --git a/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/VectorConverters.kt b/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/VectorConverters.kt
index 39415bc..e3354a9 100644
--- a/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/VectorConverters.kt
+++ b/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/VectorConverters.kt
@@ -20,9 +20,9 @@
import androidx.compose.ui.geometry.Rect
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.DpOffset
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.IntSize
-import androidx.compose.ui.unit.DpOffset
import androidx.compose.ui.unit.dp
import kotlin.math.roundToInt
diff --git a/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/VectorizedAnimationSpec.kt b/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/VectorizedAnimationSpec.kt
index 83c39ce..bc21855 100644
--- a/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/VectorizedAnimationSpec.kt
+++ b/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/VectorizedAnimationSpec.kt
@@ -17,8 +17,8 @@
package androidx.compose.animation.core
import androidx.compose.animation.core.AnimationConstants.DefaultDurationMillis
-import kotlin.math.min
import androidx.compose.animation.core.internal.JvmDefaultWithCompatibility
+import kotlin.math.min
/**
* [VectorizedAnimationSpec]s are stateless vector based animation specifications. They do
diff --git a/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/VisibilityThresholds.kt b/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/VisibilityThresholds.kt
index 5b27b547..7293a1b 100644
--- a/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/VisibilityThresholds.kt
+++ b/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/VisibilityThresholds.kt
@@ -20,9 +20,9 @@
import androidx.compose.ui.geometry.Rect
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.DpOffset
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.IntSize
-import androidx.compose.ui.unit.DpOffset
import androidx.compose.ui.unit.dp
private const val DpVisibilityThreshold = 0.1f
diff --git a/compose/animation/animation-core/src/test/java/androidx/compose/animation/core/AnimationTest.kt b/compose/animation/animation-core/src/test/java/androidx/compose/animation/core/AnimationTest.kt
index c932fe1..a632f65 100644
--- a/compose/animation/animation-core/src/test/java/androidx/compose/animation/core/AnimationTest.kt
+++ b/compose/animation/animation-core/src/test/java/androidx/compose/animation/core/AnimationTest.kt
@@ -16,11 +16,11 @@
package androidx.compose.animation.core
+import java.lang.Long.max
import org.junit.Assert.assertEquals
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import java.lang.Long.max
@RunWith(JUnit4::class)
class AnimationTest {
diff --git a/compose/animation/animation-core/src/test/java/androidx/compose/animation/core/SpringEstimationTest.kt b/compose/animation/animation-core/src/test/java/androidx/compose/animation/core/SpringEstimationTest.kt
index 7396ca5..9b0281d 100644
--- a/compose/animation/animation-core/src/test/java/androidx/compose/animation/core/SpringEstimationTest.kt
+++ b/compose/animation/animation-core/src/test/java/androidx/compose/animation/core/SpringEstimationTest.kt
@@ -19,12 +19,12 @@
import android.os.Build
import androidx.test.filters.SdkSuppress
import junit.framework.TestCase.assertTrue
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.Parameterized
import kotlin.math.abs
import kotlin.math.max
import kotlin.math.sqrt
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
@RunWith(Parameterized::class)
class SpringEstimationTest(private val m: Double, private val k: Double) {
diff --git a/compose/animation/animation-graphics/samples/build.gradle b/compose/animation/animation-graphics/samples/build.gradle
index 2b0e793..c317288 100644
--- a/compose/animation/animation-graphics/samples/build.gradle
+++ b/compose/animation/animation-graphics/samples/build.gradle
@@ -38,7 +38,7 @@
}
androidx {
- name = "AndroidX Compose UI Animation Graphics Library Samples"
+ name = "Compose UI Animation Graphics Samples"
type = LibraryType.SAMPLES
inceptionYear = "2021"
description = "Contains the sample code for the Androidx Compose UI Animation Graphics Library"
diff --git a/compose/animation/animation-graphics/src/androidAndroidTest/kotlin/androidx/compose/animation/graphics/vector/compat/XmlAnimatorParserTest.kt b/compose/animation/animation-graphics/src/androidAndroidTest/kotlin/androidx/compose/animation/graphics/vector/compat/XmlAnimatorParserTest.kt
index 6906bf6..e4cbe31 100644
--- a/compose/animation/animation-graphics/src/androidAndroidTest/kotlin/androidx/compose/animation/graphics/vector/compat/XmlAnimatorParserTest.kt
+++ b/compose/animation/animation-graphics/src/androidAndroidTest/kotlin/androidx/compose/animation/graphics/vector/compat/XmlAnimatorParserTest.kt
@@ -18,7 +18,10 @@
import androidx.compose.animation.core.LinearEasing
import androidx.compose.animation.core.RepeatMode
-import androidx.compose.ui.graphics.Color
+import androidx.compose.animation.graphics.res.AccelerateEasing
+import androidx.compose.animation.graphics.res.DecelerateEasing
+import androidx.compose.animation.graphics.res.loadAnimatorResource
+import androidx.compose.animation.graphics.test.R
import androidx.compose.animation.graphics.vector.AnimatorSet
import androidx.compose.animation.graphics.vector.ObjectAnimator
import androidx.compose.animation.graphics.vector.Ordering
@@ -27,11 +30,8 @@
import androidx.compose.animation.graphics.vector.PropertyValuesHolderFloat
import androidx.compose.animation.graphics.vector.PropertyValuesHolderInt
import androidx.compose.animation.graphics.vector.PropertyValuesHolderPath
-import androidx.compose.animation.graphics.res.AccelerateEasing
-import androidx.compose.animation.graphics.res.DecelerateEasing
-import androidx.compose.animation.graphics.res.loadAnimatorResource
-import androidx.compose.animation.graphics.test.R
import androidx.compose.animation.graphics.vector.RepeatCountInfinite
+import androidx.compose.ui.graphics.Color
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
diff --git a/compose/animation/animation-graphics/src/androidMain/kotlin/androidx/compose/animation/graphics/res/AnimatorResources.android.kt b/compose/animation/animation-graphics/src/androidMain/kotlin/androidx/compose/animation/graphics/res/AnimatorResources.android.kt
index ed925eb..7c51152 100644
--- a/compose/animation/animation-graphics/src/androidMain/kotlin/androidx/compose/animation/graphics/res/AnimatorResources.android.kt
+++ b/compose/animation/animation-graphics/src/androidMain/kotlin/androidx/compose/animation/graphics/res/AnimatorResources.android.kt
@@ -26,19 +26,19 @@
import androidx.compose.animation.core.FastOutSlowInEasing
import androidx.compose.animation.core.LinearEasing
import androidx.compose.animation.core.LinearOutSlowInEasing
-import androidx.compose.animation.graphics.vector.compat.AndroidVectorResources
import androidx.compose.animation.graphics.vector.Animator
+import androidx.compose.animation.graphics.vector.compat.AndroidVectorResources
import androidx.compose.animation.graphics.vector.compat.TagObjectAnimator
import androidx.compose.animation.graphics.vector.compat.TagSet
-import androidx.compose.animation.graphics.vector.compat.seekToStartTag
import androidx.compose.animation.graphics.vector.compat.parseAnimatorSet
import androidx.compose.animation.graphics.vector.compat.parseInterpolator
import androidx.compose.animation.graphics.vector.compat.parseObjectAnimator
-import org.xmlpull.v1.XmlPullParserException
+import androidx.compose.animation.graphics.vector.compat.seekToStartTag
import kotlin.math.PI
import kotlin.math.cos
import kotlin.math.pow
import kotlin.math.sin
+import org.xmlpull.v1.XmlPullParserException
/**
* Synchronously loads an [Animator] resource.
diff --git a/compose/animation/animation-lint/src/main/java/androidx/compose/animation/lint/CrossfadeDetector.kt b/compose/animation/animation-lint/src/main/java/androidx/compose/animation/lint/CrossfadeDetector.kt
index 9dcc564..fbef2b9 100644
--- a/compose/animation/animation-lint/src/main/java/androidx/compose/animation/lint/CrossfadeDetector.kt
+++ b/compose/animation/animation-lint/src/main/java/androidx/compose/animation/lint/CrossfadeDetector.kt
@@ -31,9 +31,9 @@
import com.android.tools.lint.detector.api.Severity
import com.android.tools.lint.detector.api.SourceCodeScanner
import com.intellij.psi.PsiMethod
+import java.util.EnumSet
import org.jetbrains.uast.UCallExpression
import org.jetbrains.uast.ULambdaExpression
-import java.util.EnumSet
/**
* [Detector] that checks `Crossfade` usages for correctness.
diff --git a/compose/animation/animation/api/current.txt b/compose/animation/animation/api/current.txt
index c0d2f31..f57cb90 100644
--- a/compose/animation/animation/api/current.txt
+++ b/compose/animation/animation/api/current.txt
@@ -6,8 +6,8 @@
}
public final class AnimatedContentKt {
- method @androidx.compose.runtime.Composable public static <S> void AnimatedContent(S targetState, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<S>,androidx.compose.animation.ContentTransform> transitionSpec, optional androidx.compose.ui.Alignment contentAlignment, optional String label, optional kotlin.jvm.functions.Function1<? super S,?> contentKey, kotlin.jvm.functions.Function2<? super androidx.compose.animation.AnimatedContentScope,? super S,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static <S> void AnimatedContent(androidx.compose.animation.core.Transition<S>, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<S>,androidx.compose.animation.ContentTransform> transitionSpec, optional androidx.compose.ui.Alignment contentAlignment, optional kotlin.jvm.functions.Function1<? super S,?> contentKey, kotlin.jvm.functions.Function2<? super androidx.compose.animation.AnimatedContentScope,? super S,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static <S> void AnimatedContent(S targetState, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<S>,androidx.compose.animation.ContentTransform> transitionSpec, optional androidx.compose.ui.Alignment contentAlignment, optional String label, optional kotlin.jvm.functions.Function1<? super S,?> contentKey, kotlin.jvm.functions.Function2<? super androidx.compose.animation.AnimatedContentScope,? super S,kotlin.Unit> content);
method public static androidx.compose.animation.SizeTransform SizeTransform(optional boolean clip, optional kotlin.jvm.functions.Function2<? super androidx.compose.ui.unit.IntSize,? super androidx.compose.ui.unit.IntSize,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize>> sizeAnimationSpec);
method public static infix androidx.compose.animation.ContentTransform togetherWith(androidx.compose.animation.EnterTransition, androidx.compose.animation.ExitTransition exit);
}
@@ -41,12 +41,12 @@
}
public final class AnimatedVisibilityKt {
- method @androidx.compose.runtime.Composable public static void AnimatedVisibility(boolean visible, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.RowScope, boolean visible, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.ColumnScope, boolean visible, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.animation.core.MutableTransitionState<java.lang.Boolean> visibleState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.RowScope, androidx.compose.animation.core.MutableTransitionState<java.lang.Boolean> visibleState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.ColumnScope, androidx.compose.animation.core.MutableTransitionState<java.lang.Boolean> visibleState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.ColumnScope, boolean visible, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.RowScope, androidx.compose.animation.core.MutableTransitionState<java.lang.Boolean> visibleState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.RowScope, boolean visible, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(boolean visible, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
}
@kotlin.jvm.JvmDefaultWithCompatibility public interface AnimatedVisibilityScope {
@@ -149,9 +149,9 @@
}
public final class TransitionKt {
- method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.Segment<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.graphics.Color>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.graphics.Color> targetValueByState);
- method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.InfiniteTransition, long initialValue, long targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<androidx.compose.ui.graphics.Color> animationSpec, optional String label);
method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.InfiniteTransition, long initialValue, long targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<androidx.compose.ui.graphics.Color> animationSpec);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.InfiniteTransition, long initialValue, long targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<androidx.compose.ui.graphics.Color> animationSpec, optional String label);
+ method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.Segment<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.graphics.Color>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.graphics.Color> targetValueByState);
}
}
diff --git a/compose/animation/animation/api/public_plus_experimental_current.txt b/compose/animation/animation/api/public_plus_experimental_current.txt
index 37c2eb3..5f498f4 100644
--- a/compose/animation/animation/api/public_plus_experimental_current.txt
+++ b/compose/animation/animation/api/public_plus_experimental_current.txt
@@ -6,8 +6,8 @@
}
public final class AnimatedContentKt {
- method @androidx.compose.runtime.Composable public static <S> void AnimatedContent(S targetState, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<S>,androidx.compose.animation.ContentTransform> transitionSpec, optional androidx.compose.ui.Alignment contentAlignment, optional String label, optional kotlin.jvm.functions.Function1<? super S,?> contentKey, kotlin.jvm.functions.Function2<? super androidx.compose.animation.AnimatedContentScope,? super S,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static <S> void AnimatedContent(androidx.compose.animation.core.Transition<S>, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<S>,androidx.compose.animation.ContentTransform> transitionSpec, optional androidx.compose.ui.Alignment contentAlignment, optional kotlin.jvm.functions.Function1<? super S,?> contentKey, kotlin.jvm.functions.Function2<? super androidx.compose.animation.AnimatedContentScope,? super S,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static <S> void AnimatedContent(S targetState, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<S>,androidx.compose.animation.ContentTransform> transitionSpec, optional androidx.compose.ui.Alignment contentAlignment, optional String label, optional kotlin.jvm.functions.Function1<? super S,?> contentKey, kotlin.jvm.functions.Function2<? super androidx.compose.animation.AnimatedContentScope,? super S,kotlin.Unit> content);
method public static androidx.compose.animation.SizeTransform SizeTransform(optional boolean clip, optional kotlin.jvm.functions.Function2<? super androidx.compose.ui.unit.IntSize,? super androidx.compose.ui.unit.IntSize,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize>> sizeAnimationSpec);
method public static infix androidx.compose.animation.ContentTransform togetherWith(androidx.compose.animation.EnterTransition, androidx.compose.animation.ExitTransition exit);
method @Deprecated @androidx.compose.animation.ExperimentalAnimationApi public static infix androidx.compose.animation.ContentTransform with(androidx.compose.animation.EnterTransition, androidx.compose.animation.ExitTransition exit);
@@ -42,14 +42,14 @@
}
public final class AnimatedVisibilityKt {
- method @androidx.compose.runtime.Composable public static void AnimatedVisibility(boolean visible, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.RowScope, boolean visible, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.ColumnScope, boolean visible, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.animation.core.MutableTransitionState<java.lang.Boolean> visibleState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.RowScope, androidx.compose.animation.core.MutableTransitionState<java.lang.Boolean> visibleState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.ColumnScope, androidx.compose.animation.core.MutableTransitionState<java.lang.Boolean> visibleState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
method @androidx.compose.animation.ExperimentalAnimationApi @androidx.compose.runtime.Composable public static <T> void AnimatedVisibility(androidx.compose.animation.core.Transition<T>, kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> visible, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.ColumnScope, androidx.compose.animation.core.MutableTransitionState<java.lang.Boolean> visibleState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.ColumnScope, boolean visible, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.RowScope, androidx.compose.animation.core.MutableTransitionState<java.lang.Boolean> visibleState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.RowScope, boolean visible, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
method @Deprecated @androidx.compose.animation.ExperimentalAnimationApi @androidx.compose.runtime.Composable public static void AnimatedVisibility(boolean visible, optional androidx.compose.ui.Modifier modifier, androidx.compose.animation.EnterTransition enter, androidx.compose.animation.ExitTransition exit, boolean initiallyVisible, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(boolean visible, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
}
@kotlin.jvm.JvmDefaultWithCompatibility public interface AnimatedVisibilityScope {
@@ -80,8 +80,8 @@
}
public final class CrossfadeKt {
- method @androidx.compose.runtime.Composable public static <T> void Crossfade(T targetState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, optional String label, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
method @androidx.compose.animation.ExperimentalAnimationApi @androidx.compose.runtime.Composable public static <T> void Crossfade(androidx.compose.animation.core.Transition<T>, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super T,?> contentKey, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static <T> void Crossfade(T targetState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, optional String label, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static <T> void Crossfade(T targetState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> content);
}
@@ -167,9 +167,9 @@
}
public final class TransitionKt {
- method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.Segment<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.graphics.Color>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.graphics.Color> targetValueByState);
- method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.InfiniteTransition, long initialValue, long targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<androidx.compose.ui.graphics.Color> animationSpec, optional String label);
method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.InfiniteTransition, long initialValue, long targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<androidx.compose.ui.graphics.Color> animationSpec);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.InfiniteTransition, long initialValue, long targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<androidx.compose.ui.graphics.Color> animationSpec, optional String label);
+ method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.Segment<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.graphics.Color>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.graphics.Color> targetValueByState);
}
}
diff --git a/compose/animation/animation/api/restricted_current.txt b/compose/animation/animation/api/restricted_current.txt
index c0d2f31..f57cb90 100644
--- a/compose/animation/animation/api/restricted_current.txt
+++ b/compose/animation/animation/api/restricted_current.txt
@@ -6,8 +6,8 @@
}
public final class AnimatedContentKt {
- method @androidx.compose.runtime.Composable public static <S> void AnimatedContent(S targetState, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<S>,androidx.compose.animation.ContentTransform> transitionSpec, optional androidx.compose.ui.Alignment contentAlignment, optional String label, optional kotlin.jvm.functions.Function1<? super S,?> contentKey, kotlin.jvm.functions.Function2<? super androidx.compose.animation.AnimatedContentScope,? super S,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static <S> void AnimatedContent(androidx.compose.animation.core.Transition<S>, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<S>,androidx.compose.animation.ContentTransform> transitionSpec, optional androidx.compose.ui.Alignment contentAlignment, optional kotlin.jvm.functions.Function1<? super S,?> contentKey, kotlin.jvm.functions.Function2<? super androidx.compose.animation.AnimatedContentScope,? super S,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static <S> void AnimatedContent(S targetState, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<S>,androidx.compose.animation.ContentTransform> transitionSpec, optional androidx.compose.ui.Alignment contentAlignment, optional String label, optional kotlin.jvm.functions.Function1<? super S,?> contentKey, kotlin.jvm.functions.Function2<? super androidx.compose.animation.AnimatedContentScope,? super S,kotlin.Unit> content);
method public static androidx.compose.animation.SizeTransform SizeTransform(optional boolean clip, optional kotlin.jvm.functions.Function2<? super androidx.compose.ui.unit.IntSize,? super androidx.compose.ui.unit.IntSize,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize>> sizeAnimationSpec);
method public static infix androidx.compose.animation.ContentTransform togetherWith(androidx.compose.animation.EnterTransition, androidx.compose.animation.ExitTransition exit);
}
@@ -41,12 +41,12 @@
}
public final class AnimatedVisibilityKt {
- method @androidx.compose.runtime.Composable public static void AnimatedVisibility(boolean visible, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.RowScope, boolean visible, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.ColumnScope, boolean visible, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.animation.core.MutableTransitionState<java.lang.Boolean> visibleState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.RowScope, androidx.compose.animation.core.MutableTransitionState<java.lang.Boolean> visibleState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.ColumnScope, androidx.compose.animation.core.MutableTransitionState<java.lang.Boolean> visibleState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.ColumnScope, boolean visible, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.RowScope, androidx.compose.animation.core.MutableTransitionState<java.lang.Boolean> visibleState, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(androidx.compose.foundation.layout.RowScope, boolean visible, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void AnimatedVisibility(boolean visible, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enter, optional androidx.compose.animation.ExitTransition exit, optional String label, kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedVisibilityScope,kotlin.Unit> content);
}
@kotlin.jvm.JvmDefaultWithCompatibility public interface AnimatedVisibilityScope {
@@ -149,9 +149,9 @@
}
public final class TransitionKt {
- method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.Segment<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.graphics.Color>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.graphics.Color> targetValueByState);
- method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.InfiniteTransition, long initialValue, long targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<androidx.compose.ui.graphics.Color> animationSpec, optional String label);
method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<? extends androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.InfiniteTransition, long initialValue, long targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<androidx.compose.ui.graphics.Color> animationSpec);
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.InfiniteTransition, long initialValue, long targetValue, androidx.compose.animation.core.InfiniteRepeatableSpec<androidx.compose.ui.graphics.Color> animationSpec, optional String label);
+ method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> animateColor(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.Segment<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.graphics.Color>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.graphics.Color> targetValueByState);
}
}
diff --git a/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/fancy/AnimatedClockDemo.kt b/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/fancy/AnimatedClockDemo.kt
index e3a7df2..7bc053f 100644
--- a/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/fancy/AnimatedClockDemo.kt
+++ b/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/fancy/AnimatedClockDemo.kt
@@ -51,8 +51,8 @@
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
-import kotlinx.coroutines.isActive
import java.util.Calendar
+import kotlinx.coroutines.isActive
private class Time(hours: State<Int>, minutes: State<Int>, seconds: State<Int>) {
val hours by hours
diff --git a/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/gesture/FancyScrollingDemo.kt b/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/gesture/FancyScrollingDemo.kt
index dadf80c..86bc567 100644
--- a/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/gesture/FancyScrollingDemo.kt
+++ b/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/gesture/FancyScrollingDemo.kt
@@ -27,8 +27,8 @@
import androidx.compose.foundation.gestures.rememberDraggableState
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableFloatStateOf
@@ -42,8 +42,8 @@
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
-import kotlinx.coroutines.launch
import kotlin.math.roundToInt
+import kotlinx.coroutines.launch
const val DEBUG = false
diff --git a/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/gesture/SpringBackScrollingDemo.kt b/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/gesture/SpringBackScrollingDemo.kt
index 71d4605..4f02955 100644
--- a/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/gesture/SpringBackScrollingDemo.kt
+++ b/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/gesture/SpringBackScrollingDemo.kt
@@ -31,8 +31,8 @@
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
@@ -51,9 +51,9 @@
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
+import kotlin.math.roundToInt
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.launch
-import kotlin.math.roundToInt
@Preview
@Composable
diff --git a/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/gesture/SwipeToDismissDemo.kt b/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/gesture/SwipeToDismissDemo.kt
index faa1d47..2f0db13 100644
--- a/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/gesture/SwipeToDismissDemo.kt
+++ b/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/gesture/SwipeToDismissDemo.kt
@@ -25,9 +25,9 @@
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.requiredHeight
import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.requiredHeight
import androidx.compose.foundation.layout.requiredSize
import androidx.compose.material.Button
import androidx.compose.material.Text
@@ -49,9 +49,9 @@
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
+import kotlin.math.roundToInt
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.launch
-import kotlin.math.roundToInt
@Preview
@Composable
diff --git a/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/layoutanimation/AnimateContentSizeDemo.kt b/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/layoutanimation/AnimateContentSizeDemo.kt
index 7c036ad..15b8a2f 100644
--- a/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/layoutanimation/AnimateContentSizeDemo.kt
+++ b/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/layoutanimation/AnimateContentSizeDemo.kt
@@ -25,8 +25,8 @@
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.aspectRatio
import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.requiredHeight
import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.requiredHeight
import androidx.compose.foundation.layout.requiredSizeIn
import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.foundation.layout.wrapContentSize
diff --git a/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/lookahead/LookaheadWithMovableContentDemo.kt b/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/lookahead/LookaheadWithMovableContentDemo.kt
index 3100d36..f25cb8a 100644
--- a/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/lookahead/LookaheadWithMovableContentDemo.kt
+++ b/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/lookahead/LookaheadWithMovableContentDemo.kt
@@ -20,9 +20,9 @@
import androidx.compose.animation.core.VectorConverter
import androidx.compose.animation.core.spring
+import androidx.compose.animation.demos.fancy.AnimatedDotsDemo
import androidx.compose.animation.demos.statetransition.InfiniteProgress
import androidx.compose.animation.demos.statetransition.InfinitePulsingHeart
-import androidx.compose.animation.demos.fancy.AnimatedDotsDemo
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
diff --git a/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/statetransition/MultiDimensionalAnimationDemo.kt b/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/statetransition/MultiDimensionalAnimationDemo.kt
index a32e677..01ca017 100644
--- a/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/statetransition/MultiDimensionalAnimationDemo.kt
+++ b/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/statetransition/MultiDimensionalAnimationDemo.kt
@@ -22,8 +22,8 @@
import androidx.compose.animation.core.tween
import androidx.compose.animation.core.updateTransition
import androidx.compose.foundation.Canvas
-import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.clickable
+import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
diff --git a/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/statetransition/RepeatedRotationDemo.kt b/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/statetransition/RepeatedRotationDemo.kt
index ade287e..5e89ee7 100644
--- a/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/statetransition/RepeatedRotationDemo.kt
+++ b/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/statetransition/RepeatedRotationDemo.kt
@@ -20,8 +20,8 @@
import androidx.compose.animation.core.animateFloat
import androidx.compose.animation.core.keyframes
import androidx.compose.animation.core.repeatable
-import androidx.compose.animation.core.updateTransition
import androidx.compose.animation.core.tween
+import androidx.compose.animation.core.updateTransition
import androidx.compose.foundation.Canvas
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
diff --git a/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/visualaid/ColumnConfigurationDemo.kt b/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/visualaid/ColumnConfigurationDemo.kt
index 4b94c68..dfd5b8e 100644
--- a/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/visualaid/ColumnConfigurationDemo.kt
+++ b/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/visualaid/ColumnConfigurationDemo.kt
@@ -27,11 +27,11 @@
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.Row
-import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxHeight
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.requiredHeight
-import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.Text
diff --git a/compose/animation/animation/samples/build.gradle b/compose/animation/animation/samples/build.gradle
index d355cdf..9fd59da 100644
--- a/compose/animation/animation/samples/build.gradle
+++ b/compose/animation/animation/samples/build.gradle
@@ -37,7 +37,7 @@
}
androidx {
- name = "AndroidX Compose UI Animation Library Samples"
+ name = "Compose UI Animation Samples"
type = LibraryType.SAMPLES
inceptionYear = "2019"
description = "Contains the sample code for the Androidx Compose UI Animation Library"
diff --git a/compose/animation/animation/src/androidAndroidTest/kotlin/androidx/compose/animation/AnimationModifierTest.kt b/compose/animation/animation/src/androidAndroidTest/kotlin/androidx/compose/animation/AnimationModifierTest.kt
index fb17dc0..ae167df 100644
--- a/compose/animation/animation/src/androidAndroidTest/kotlin/androidx/compose/animation/AnimationModifierTest.kt
+++ b/compose/animation/animation/src/androidAndroidTest/kotlin/androidx/compose/animation/AnimationModifierTest.kt
@@ -43,8 +43,8 @@
import junit.framework.TestCase.assertNull
import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.CoreMatchers.nullValue
-import org.junit.After
import org.hamcrest.MatcherAssert.assertThat
+import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
diff --git a/compose/animation/animation/src/commonMain/kotlin/androidx/compose/animation/AnimatedVisibility.kt b/compose/animation/animation/src/commonMain/kotlin/androidx/compose/animation/AnimatedVisibility.kt
index 408246d..2e6a3b2 100644
--- a/compose/animation/animation/src/commonMain/kotlin/androidx/compose/animation/AnimatedVisibility.kt
+++ b/compose/animation/animation/src/commonMain/kotlin/androidx/compose/animation/AnimatedVisibility.kt
@@ -25,6 +25,7 @@
import androidx.compose.animation.core.Transition
import androidx.compose.animation.core.createChildTransition
import androidx.compose.animation.core.updateTransition
+import androidx.compose.animation.internal.JvmDefaultWithCompatibility
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.Row
@@ -50,7 +51,6 @@
import androidx.compose.ui.util.fastForEach
import androidx.compose.ui.util.fastMaxBy
import kotlinx.coroutines.flow.collect
-import androidx.compose.animation.internal.JvmDefaultWithCompatibility
/**
* [AnimatedVisibility] composable animates the appearance and disappearance of its content, as
diff --git a/compose/animation/animation/src/commonMain/kotlin/androidx/compose/animation/AnimationModifier.kt b/compose/animation/animation/src/commonMain/kotlin/androidx/compose/animation/AnimationModifier.kt
index 2763366..4d49ae5 100644
--- a/compose/animation/animation/src/commonMain/kotlin/androidx/compose/animation/AnimationModifier.kt
+++ b/compose/animation/animation/src/commonMain/kotlin/androidx/compose/animation/AnimationModifier.kt
@@ -23,10 +23,10 @@
import androidx.compose.animation.core.FiniteAnimationSpec
import androidx.compose.animation.core.VectorConverter
import androidx.compose.animation.core.spring
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.getValue
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.composed
diff --git a/compose/animation/animation/src/test/kotlin/androidx/compose/animation/ConverterTest.kt b/compose/animation/animation/src/test/kotlin/androidx/compose/animation/ConverterTest.kt
index 4a889dc..ea4d100 100644
--- a/compose/animation/animation/src/test/kotlin/androidx/compose/animation/ConverterTest.kt
+++ b/compose/animation/animation/src/test/kotlin/androidx/compose/animation/ConverterTest.kt
@@ -27,10 +27,10 @@
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import junit.framework.TestCase.assertEquals
+import kotlin.random.Random
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import kotlin.random.Random
@RunWith(JUnit4::class)
class ConverterTest {
diff --git a/compose/benchmark-utils/src/main/java/androidx/compose/testutils/benchmark/BenchmarksExtensions.kt b/compose/benchmark-utils/src/main/java/androidx/compose/testutils/benchmark/BenchmarksExtensions.kt
index b0c29ab..b2247bd 100644
--- a/compose/benchmark-utils/src/main/java/androidx/compose/testutils/benchmark/BenchmarksExtensions.kt
+++ b/compose/benchmark-utils/src/main/java/androidx/compose/testutils/benchmark/BenchmarksExtensions.kt
@@ -20,12 +20,12 @@
import androidx.benchmark.junit4.BenchmarkRule
import androidx.benchmark.junit4.measureRepeated
import androidx.compose.testutils.ComposeTestCase
-import androidx.compose.ui.graphics.Canvas
import androidx.compose.testutils.ToggleableTestCase
import androidx.compose.testutils.assertNoPendingChanges
import androidx.compose.testutils.benchmark.android.AndroidTestCase
import androidx.compose.testutils.doFramesUntilNoChangesPending
import androidx.compose.testutils.recomposeAssertHadChanges
+import androidx.compose.ui.graphics.Canvas
/**
* Measures measure and layout performance of the given test case by toggling measure constraints.
diff --git a/compose/compiler/OWNERS b/compose/compiler/OWNERS
index e48b97d..51ec95d 100644
--- a/compose/compiler/OWNERS
+++ b/compose/compiler/OWNERS
@@ -3,4 +3,5 @@
[email protected]
[email protected]
[email protected]
[email protected]
per-file settings.gradle = [email protected], [email protected]
diff --git a/compose/compiler/compiler-daemon/integration-tests/build.gradle b/compose/compiler/compiler-daemon/integration-tests/build.gradle
index afda48a..5416516 100644
--- a/compose/compiler/compiler-daemon/integration-tests/build.gradle
+++ b/compose/compiler/compiler-daemon/integration-tests/build.gradle
@@ -30,7 +30,7 @@
}
androidx {
- name = "AndroidX Compiler Daemon CLI Tests"
+ name = "Compiler Daemon CLI Tests"
type = LibraryType.COMPILER_DAEMON_TEST
inceptionYear = "2021"
description = "Contains test for the compose compiler daemon"
diff --git a/compose/compiler/compiler-daemon/integration-tests/src/test/kotlin/androidx/compose/compiler/daemon/CompilerTest.kt b/compose/compiler/compiler-daemon/integration-tests/src/test/kotlin/androidx/compose/compiler/daemon/CompilerTest.kt
index 15fa946..8b284f3 100644
--- a/compose/compiler/compiler-daemon/integration-tests/src/test/kotlin/androidx/compose/compiler/daemon/CompilerTest.kt
+++ b/compose/compiler/compiler-daemon/integration-tests/src/test/kotlin/androidx/compose/compiler/daemon/CompilerTest.kt
@@ -16,14 +16,14 @@
package androidx.compose.compiler.daemon
+import java.io.File
+import java.nio.file.Files
import org.jetbrains.kotlin.cli.common.ExitCode
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import java.io.File
-import java.nio.file.Files
@RunWith(Parameterized::class)
class CompilerTest(
diff --git a/compose/compiler/compiler-daemon/integration-tests/src/test/kotlin/androidx/compose/compiler/daemon/DaemonProtocolTest.kt b/compose/compiler/compiler-daemon/integration-tests/src/test/kotlin/androidx/compose/compiler/daemon/DaemonProtocolTest.kt
index a97752d..d993c1e 100644
--- a/compose/compiler/compiler-daemon/integration-tests/src/test/kotlin/androidx/compose/compiler/daemon/DaemonProtocolTest.kt
+++ b/compose/compiler/compiler-daemon/integration-tests/src/test/kotlin/androidx/compose/compiler/daemon/DaemonProtocolTest.kt
@@ -16,9 +16,6 @@
package androidx.compose.compiler.daemon
-import org.jetbrains.kotlin.cli.common.ExitCode
-import org.junit.Assert.assertEquals
-import org.junit.Test
import java.io.ByteArrayOutputStream
import java.io.OutputStreamWriter
import java.io.PipedReader
@@ -26,6 +23,9 @@
import java.io.PrintWriter
import java.util.concurrent.CountDownLatch
import kotlin.concurrent.thread
+import org.jetbrains.kotlin.cli.common.ExitCode
+import org.junit.Assert.assertEquals
+import org.junit.Test
class DaemonProtocolTest {
diff --git a/compose/compiler/compiler-daemon/src/main/kotlin/androidx/compose/compiler/daemon/Compiler.kt b/compose/compiler/compiler-daemon/src/main/kotlin/androidx/compose/compiler/daemon/Compiler.kt
index 976bfa8..65757e6 100644
--- a/compose/compiler/compiler-daemon/src/main/kotlin/androidx/compose/compiler/daemon/Compiler.kt
+++ b/compose/compiler/compiler-daemon/src/main/kotlin/androidx/compose/compiler/daemon/Compiler.kt
@@ -16,8 +16,11 @@
package androidx.compose.compiler.daemon
+import java.io.File
+import java.nio.file.Files
import org.jetbrains.kotlin.build.DEFAULT_KOTLIN_SOURCE_FILES_EXTENSIONS
import org.jetbrains.kotlin.build.report.BuildReporter
+import org.jetbrains.kotlin.build.report.DoNothingICReporter
import org.jetbrains.kotlin.build.report.metrics.DoNothingBuildMetricsReporter
import org.jetbrains.kotlin.cli.common.ExitCode
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
@@ -26,13 +29,10 @@
import org.jetbrains.kotlin.cli.jvm.K2JVMCompiler
import org.jetbrains.kotlin.config.Services
import org.jetbrains.kotlin.incremental.ClasspathChanges.ClasspathSnapshotEnabled
-import org.jetbrains.kotlin.build.report.DoNothingICReporter
+import org.jetbrains.kotlin.incremental.ClasspathSnapshotFiles
import org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner
import org.jetbrains.kotlin.incremental.multiproject.EmptyModulesApiHistory
import org.jetbrains.kotlin.incremental.withIC
-import java.io.File
-import java.nio.file.Files
-import org.jetbrains.kotlin.incremental.ClasspathSnapshotFiles
internal fun parseArgs(
args: Array<String>,
diff --git a/compose/compiler/compiler-daemon/src/main/kotlin/androidx/compose/compiler/daemon/main.kt b/compose/compiler/compiler-daemon/src/main/kotlin/androidx/compose/compiler/daemon/main.kt
index 20445ef..8e8f201 100644
--- a/compose/compiler/compiler-daemon/src/main/kotlin/androidx/compose/compiler/daemon/main.kt
+++ b/compose/compiler/compiler-daemon/src/main/kotlin/androidx/compose/compiler/daemon/main.kt
@@ -17,11 +17,11 @@
package androidx.compose.compiler.daemon
import java.io.File
-import org.jetbrains.kotlin.cli.common.environment.setIdeaIoUseFallback
import java.io.PrintWriter
import java.lang.IllegalArgumentException
import java.net.URLDecoder
import java.nio.charset.Charset
+import org.jetbrains.kotlin.cli.common.environment.setIdeaIoUseFallback
private data class CliOptions(
val disableEmbeddedPlugin: Boolean = false,
diff --git a/compose/compiler/compiler-hosted/build.gradle b/compose/compiler/compiler-hosted/build.gradle
index fb76744..e4ce28e 100644
--- a/compose/compiler/compiler-hosted/build.gradle
+++ b/compose/compiler/compiler-hosted/build.gradle
@@ -41,7 +41,7 @@
}
androidx {
- name = "AndroidX Compose Hosted Compiler Plugin"
+ name = "Compose Hosted Compiler Plugin"
// This is only published because that is required when exporting it to g3.
// Nobody should ever get this artifact from maven; just from studio or from source
type = LibraryType.COMPILER_PLUGIN
diff --git a/compose/compiler/compiler-hosted/integration-tests/build.gradle b/compose/compiler/compiler-hosted/integration-tests/build.gradle
index b874154..00a111c 100644
--- a/compose/compiler/compiler-hosted/integration-tests/build.gradle
+++ b/compose/compiler/compiler-hosted/integration-tests/build.gradle
@@ -82,7 +82,7 @@
}
androidx {
- name = "AndroidX Compiler CLI Tests"
+ name = "Compiler CLI Tests"
publish = Publish.NONE
inceptionYear = "2019"
description = "Contains test for the compose compiler plugin"
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractCodegenSignatureTest.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractCodegenSignatureTest.kt
index f0a2827..67673c8 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractCodegenSignatureTest.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractCodegenSignatureTest.kt
@@ -20,11 +20,11 @@
import android.content.Context
import android.os.Bundle
import android.widget.LinearLayout
+import java.net.URLClassLoader
import org.intellij.lang.annotations.Language
import org.jetbrains.kotlin.backend.common.output.OutputFile
-import org.robolectric.Robolectric
-import java.net.URLClassLoader
import org.junit.Assert.assertEquals
+import org.robolectric.Robolectric
fun printPublicApi(classDump: String, name: String): String {
return classDump
@@ -60,7 +60,7 @@
.replace('$', '%') // replace $ to % to make comparing it to kotlin string literals easier
}
-abstract class AbstractCodegenSignatureTest : AbstractCodegenTest() {
+abstract class AbstractCodegenSignatureTest : AbstractCodegenTest(useFir = false) {
private fun OutputFile.printApi(): String {
return printPublicApi(asText(), relativePath)
}
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractCodegenTest.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractCodegenTest.kt
index a514ee8..e461caf 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractCodegenTest.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractCodegenTest.kt
@@ -21,7 +21,7 @@
import org.intellij.lang.annotations.Language
import org.jetbrains.kotlin.codegen.GeneratedClassLoader
-abstract class AbstractCodegenTest : AbstractCompilerTest() {
+abstract class AbstractCodegenTest(useFir: Boolean) : AbstractCompilerTest(useFir) {
private fun dumpClasses(loader: GeneratedClassLoader) {
for (
file in loader.allGeneratedFiles.filter {
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractCompilerTest.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractCompilerTest.kt
index b35ac1e..9169b38 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractCompilerTest.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractCompilerTest.kt
@@ -28,17 +28,22 @@
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
import org.jetbrains.kotlin.cli.jvm.config.configureJdkClasspathRoots
import org.jetbrains.kotlin.codegen.GeneratedClassLoader
+import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
import org.junit.After
import org.junit.BeforeClass
import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
+import org.junit.runners.Parameterized
-@RunWith(JUnit4::class)
-abstract class AbstractCompilerTest {
+@RunWith(Parameterized::class)
+abstract class AbstractCompilerTest(val useFir: Boolean) {
companion object {
+ @JvmStatic
+ @Parameterized.Parameters(name = "useFir = {0}")
+ fun data() = arrayOf<Any>(false, true)
+
private fun File.applyExistenceCheck(): File = apply {
if (!exists()) throw NoSuchFileException(this)
}
@@ -106,6 +111,7 @@
testRootDisposable,
updateConfiguration = {
updateConfiguration()
+ put(CommonConfigurationKeys.USE_FIR, useFir)
addJvmClasspathRoots(additionalPaths)
addJvmClasspathRoots(defaultClassPathRoots)
if (!getBoolean(JVMConfigurationKeys.NO_JDK) &&
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractComposeDiagnosticsTest.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractComposeDiagnosticsTest.kt
index 2cf385c..54c9f7c 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractComposeDiagnosticsTest.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractComposeDiagnosticsTest.kt
@@ -16,103 +16,57 @@
package androidx.compose.compiler.plugins.kotlin
-import androidx.compose.compiler.plugins.kotlin.facade.AnalysisResult
import androidx.compose.compiler.plugins.kotlin.facade.SourceFile
import org.jetbrains.kotlin.checkers.DiagnosedRange
import org.jetbrains.kotlin.checkers.utils.CheckerTestUtil
-import org.junit.Assert
+import org.jetbrains.kotlin.utils.addToStdlib.flatGroupBy
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertThrows
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
-abstract class AbstractComposeDiagnosticsTest : AbstractCompilerTest() {
- private class DiagnosticTestException(message: String) : Exception(message)
-
+@RunWith(JUnit4::class)
+abstract class AbstractComposeDiagnosticsTest : AbstractCompilerTest(useFir = false) {
protected fun check(expectedText: String, ignoreParseErrors: Boolean = false) {
val diagnosedRanges: MutableList<DiagnosedRange> = ArrayList()
val clearText = CheckerTestUtil.parseDiagnosedRanges(expectedText, diagnosedRanges)
val errors = analyze(
listOf(SourceFile("test.kt", clearText, ignoreParseErrors))
- ).diagnostics.toMutableList()
+ ).diagnostics
- // Ensure all the expected messages are there
- val message = StringBuilder()
- val found = mutableSetOf<AnalysisResult.Diagnostic>()
- for (range in diagnosedRanges) {
- for (diagnostic in range.getDiagnostics()) {
- val reportedDiagnostics = errors.filter { it.factoryName == diagnostic.name }
- if (reportedDiagnostics.isNotEmpty()) {
- val reportedDiagnostic =
- reportedDiagnostics.find {
- it.textRanges.find {
- it.startOffset == range.start && it.endOffset == range.end
- } != null
- }
- if (reportedDiagnostic == null) {
- val firstRange = reportedDiagnostics.first().textRanges.first()
- message.append(
- " Error ${diagnostic.name} reported at ${
- firstRange.startOffset
- }-${firstRange.endOffset} but expected at ${range.start}-${range.end}\n"
- )
- message.append(
- sourceInfo(clearText, firstRange.startOffset, firstRange.endOffset)
- )
- } else {
- errors.remove(reportedDiagnostic)
- found.add(reportedDiagnostic)
- }
- } else {
- message.append(
- " Diagnostic ${diagnostic.name} not reported, expected at ${
- range.start
- }\n"
- )
- message.append(
- sourceInfo(clearText, range.start, range.end)
- )
+ val rangeToDiagnostics = errors.flatGroupBy { it.textRanges }.mapValues { entry ->
+ entry.value.map { it.factoryName }.toSet()
+ }
+ val startOffsetToGroups = rangeToDiagnostics.entries.groupBy(
+ keySelector = { it.key.startOffset },
+ valueTransform = { it.value }
+ )
+ val endOffsetsToGroups = rangeToDiagnostics.entries.groupBy(
+ keySelector = { it.key.endOffset },
+ valueTransform = { it.value }
+ )
+
+ val annotatedText = buildString {
+ for ((i, c) in clearText.withIndex()) {
+ endOffsetsToGroups[i]?.let { groups ->
+ repeat(groups.size) { append("<!>") }
}
+ startOffsetToGroups[i]?.let { groups ->
+ for (diagnostics in groups) {
+ append("<!${diagnostics.joinToString(",")}!>")
+ }
+ }
+ append(c)
}
}
- // Ensure only the expected errors are reported
- for (diagnostic in errors) {
- if (diagnostic !in found) {
- val range = diagnostic.textRanges.first()
- message.append(
- " Unexpected diagnostic ${diagnostic.factoryName} reported at ${
- range.startOffset
- }\n"
- )
- message.append(
- sourceInfo(clearText, range.startOffset, range.endOffset)
- )
- }
- }
-
- // Throw an error if anything was found that was not expected
- if (message.isNotEmpty()) throw DiagnosticTestException("Mismatched errors:\n$message")
+ assertEquals(expectedText, annotatedText)
}
protected fun checkFail(expectedText: String) {
- Assert.assertThrows(DiagnosticTestException::class.java) {
+ assertThrows(AssertionError::class.java) {
check(expectedText)
}
}
-
- private fun String.lineStart(offset: Int): Int {
- return this.lastIndexOf('\n', offset) + 1
- }
-
- private fun String.lineEnd(offset: Int): Int {
- val result = this.indexOf('\n', offset)
- return if (result < 0) this.length else result
- }
-
- // Return the source line that contains the given range with the range underlined with '~'s
- private fun sourceInfo(clearText: String, start: Int, end: Int): String {
- val lineStart = clearText.lineStart(start)
- val lineEnd = clearText.lineEnd(start)
- val displayEnd = if (end > lineEnd) lineEnd else end
- return " " + clearText.substring(lineStart, lineEnd) + "\n" +
- " ".repeat(2 + start - lineStart) + "~".repeat(displayEnd - start) + "\n"
- }
}
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractControlFlowTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractControlFlowTransformTests.kt
index 7a6d998..ab590e2 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractControlFlowTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractControlFlowTransformTests.kt
@@ -17,8 +17,11 @@
package androidx.compose.compiler.plugins.kotlin
import org.intellij.lang.annotations.Language
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
-abstract class AbstractControlFlowTransformTests : AbstractIrTransformTest() {
+@RunWith(JUnit4::class)
+abstract class AbstractControlFlowTransformTests : AbstractIrTransformTest(useFir = false) {
protected fun controlFlow(
@Language("kotlin")
source: String,
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractIrTransformTest.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractIrTransformTest.kt
index 167632a..b8c6809 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractIrTransformTest.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractIrTransformTest.kt
@@ -27,7 +27,7 @@
import org.junit.Rule
import org.junit.rules.TemporaryFolder
-abstract class AbstractIrTransformTest : AbstractCodegenTest() {
+abstract class AbstractIrTransformTest(useFir: Boolean) : AbstractCodegenTest(useFir) {
override fun CompilerConfiguration.updateConfiguration() {
put(ComposeConfiguration.SOURCE_INFORMATION_ENABLED_KEY, true)
}
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractLiveLiteralTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractLiveLiteralTransformTests.kt
index 61a16f45..f82658c 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractLiveLiteralTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractLiveLiteralTransformTests.kt
@@ -25,8 +25,11 @@
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
import org.jetbrains.kotlin.ir.util.DeepCopySymbolRemapper
import org.junit.Assert.assertEquals
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
-abstract class AbstractLiveLiteralTransformTests : AbstractIrTransformTest() {
+@RunWith(JUnit4::class)
+abstract class AbstractLiveLiteralTransformTests : AbstractIrTransformTest(useFir = false) {
private fun computeKeys(files: List<SourceFile>): List<String> {
var builtKeys = mutableSetOf<String>()
compileToIr(
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractLoweringTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractLoweringTests.kt
index 11a509a..480de2d 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractLoweringTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractLoweringTests.kt
@@ -18,11 +18,11 @@
import androidx.compose.runtime.Composer
import androidx.compose.runtime.snapshots.Snapshot
+import java.net.URLClassLoader
import org.intellij.lang.annotations.Language
import org.robolectric.RuntimeEnvironment
-import java.net.URLClassLoader
-abstract class AbstractLoweringTests : AbstractCodegenTest() {
+abstract class AbstractLoweringTests(useFir: Boolean) : AbstractCodegenTest(useFir) {
fun codegen(text: String, dumpClasses: Boolean = false) {
codegenNoImports(
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractMetricsTransformTest.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractMetricsTransformTest.kt
index fbc7845..8b012f3 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractMetricsTransformTest.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractMetricsTransformTest.kt
@@ -21,7 +21,7 @@
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
import org.junit.Assert.assertEquals
-abstract class AbstractMetricsTransformTest : AbstractIrTransformTest() {
+abstract class AbstractMetricsTransformTest(useFir: Boolean) : AbstractIrTransformTest(useFir) {
private fun verifyMetrics(
source: String,
verify: ModuleMetrics.() -> Unit
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractMultiPlatformIntegrationTest.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractMultiPlatformIntegrationTest.kt
index 6d470eb..68935c4 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractMultiPlatformIntegrationTest.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractMultiPlatformIntegrationTest.kt
@@ -17,6 +17,10 @@
package androidx.compose.compiler.plugins.kotlin
import com.intellij.openapi.util.io.FileUtil
+import java.io.ByteArrayOutputStream
+import java.io.File
+import java.io.PrintStream
+import java.io.PrintWriter
import org.intellij.lang.annotations.Language
import org.jetbrains.kotlin.cli.common.CLICompiler
import org.jetbrains.kotlin.cli.common.CLITool
@@ -24,13 +28,11 @@
import org.jetbrains.kotlin.cli.jvm.K2JVMCompiler
import org.jetbrains.org.objectweb.asm.ClassReader
import org.jetbrains.org.objectweb.asm.util.TraceClassVisitor
-import java.io.ByteArrayOutputStream
-import java.io.File
-import java.io.PrintStream
-import java.io.PrintWriter
import org.junit.Assert.assertEquals
import org.junit.Rule
import org.junit.rules.TemporaryFolder
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
// AbstractCliTest
private fun executeCompilerGrabOutput(
@@ -77,7 +79,8 @@
if (result.endsWith("\n")) result else result + "\n"
}
-abstract class AbstractMultiPlatformIntegrationTest : AbstractCompilerTest() {
+@RunWith(JUnit4::class)
+abstract class AbstractMultiPlatformIntegrationTest : AbstractCompilerTest(useFir = false) {
@JvmField
@Rule
val sourceDirectory = TemporaryFolder()
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ClassStabilityTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ClassStabilityTransformTests.kt
index 7aa9356..a2fb1f9 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ClassStabilityTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ClassStabilityTransformTests.kt
@@ -29,8 +29,11 @@
import org.jetbrains.kotlin.ir.util.statements
import org.junit.Assert.assertEquals
import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
-class ClassStabilityTransformTests : AbstractIrTransformTest() {
+@RunWith(JUnit4::class)
+class ClassStabilityTransformTests : AbstractIrTransformTest(useFir = false) {
@Test
fun testEmptyClassIsStable() = assertStability(
"class Foo",
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/CodegenMetadataTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/CodegenMetadataTests.kt
index 16ae41f..3b85920 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/CodegenMetadataTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/CodegenMetadataTests.kt
@@ -20,7 +20,7 @@
import org.junit.Assert.assertEquals
import org.junit.Test
-class CodegenMetadataTests : AbstractLoweringTests() {
+class CodegenMetadataTests(useFir: Boolean) : AbstractLoweringTests(useFir) {
override fun CompilerConfiguration.updateConfiguration() {
put(ComposeConfiguration.LIVE_LITERALS_ENABLED_KEY, true)
}
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeCallLoweringTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeCallLoweringTests.kt
index c83cb3e..c96a15e 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeCallLoweringTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeCallLoweringTests.kt
@@ -35,7 +35,7 @@
minSdk = 23,
maxSdk = 23
)
-class ComposeCallLoweringTests : AbstractLoweringTests() {
+class ComposeCallLoweringTests : AbstractLoweringTests(useFir = false) {
@Test
@Ignore("b/173733968")
fun testInlineGroups() {
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeCallResolverTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeCallResolverTests.kt
index eee207e..77dc7a3 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeCallResolverTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeCallResolverTests.kt
@@ -16,7 +16,9 @@
package androidx.compose.compiler.plugins.kotlin
+import androidx.compose.compiler.plugins.kotlin.facade.K1AnalysisResult
import androidx.compose.compiler.plugins.kotlin.facade.SourceFile
+import androidx.compose.compiler.plugins.kotlin.k1.isComposableInvocation
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.psi.KtBlockExpression
import org.jetbrains.kotlin.psi.KtDeclaration
@@ -25,8 +27,12 @@
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall
import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
-class ComposeCallResolverTests : AbstractCodegenTest() {
+// TODO(b/282189431): run this test with K2
+@RunWith(JUnit4::class)
+class ComposeCallResolverTests : AbstractCodegenTest(useFir = false) {
@Test
fun testProperties() = assertInterceptions(
"""
@@ -220,8 +226,8 @@
private fun assertInterceptions(srcText: String) {
val (text, carets) = extractCarets(srcText)
- val analysisResult = analyze(listOf(SourceFile("test.kt", text)))
- val bindingContext = analysisResult.bindingContext!!
+ val analysisResult = analyze(listOf(SourceFile("test.kt", text))) as K1AnalysisResult
+ val bindingContext = analysisResult.bindingContext
val ktFile = analysisResult.files.single()
carets.forEachIndexed { index, (offset, calltype) ->
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeModuleMetricsTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeModuleMetricsTests.kt
index 5dc7dc0..dcb8380 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeModuleMetricsTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeModuleMetricsTests.kt
@@ -18,7 +18,7 @@
import org.junit.Test
-class ComposeModuleMetricsTests : AbstractMetricsTransformTest() {
+class ComposeModuleMetricsTests(useFir: Boolean) : AbstractMetricsTransformTest(useFir) {
@Test
fun testStableAndUnstableClassesTxt() = assertClasses(
"""
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeMultiPlatformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeMultiPlatformTests.kt
index 6effc56..0442a7f 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeMultiPlatformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeMultiPlatformTests.kt
@@ -18,6 +18,7 @@
import org.junit.Test
+// TODO(b/282189431): run this test with K2
@Suppress("unused")
class ComposeMultiPlatformTests : AbstractMultiPlatformIntegrationTest() {
@Test
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposerParamTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposerParamTransformTests.kt
index 611c856..54fa8c2 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposerParamTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposerParamTransformTests.kt
@@ -24,8 +24,11 @@
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
import org.junit.Assert.assertEquals
import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
-class ComposerParamTransformTests : AbstractIrTransformTest() {
+@RunWith(JUnit4::class)
+class ComposerParamTransformTests : AbstractIrTransformTest(useFir = false) {
private fun composerParam(
@Language("kotlin")
source: String,
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ContextReceiversTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ContextReceiversTransformTests.kt
index e9b56ea..dbe4c1b 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ContextReceiversTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ContextReceiversTransformTests.kt
@@ -23,7 +23,7 @@
import org.jetbrains.kotlin.config.languageVersionSettings
import org.junit.Test
-class ContextReceiversTransformTests : AbstractIrTransformTest() {
+class ContextReceiversTransformTests(useFir: Boolean) : AbstractIrTransformTest(useFir) {
override fun CompilerConfiguration.updateConfiguration() {
put(ComposeConfiguration.SOURCE_INFORMATION_ENABLED_KEY, true)
languageVersionSettings = LanguageVersionSettingsImpl(
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ControlFlowTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ControlFlowTransformTests.kt
index 48ceddc..096c0ac 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ControlFlowTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ControlFlowTransformTests.kt
@@ -455,7 +455,7 @@
A(%composer, 0)
if (condition) {
sourceInformationMarkerEnd(%composer)
- return
+ return@M3
}
A(%composer, 0)
sourceInformationMarkerEnd(%composer)
@@ -504,7 +504,7 @@
if (isTraceInProgress()) {
traceEventEnd()
}
- return
+ return@composableLambdaInstance
}
sourceInformationMarkerEnd(%composer)
}, %composer, 0)
@@ -575,7 +575,7 @@
sourceInformationMarkerStart(%composer, <>, "C:Test.kt")
if (condition) {
sourceInformationMarkerEnd(%composer)
- return
+ return@M1
}
sourceInformationMarkerEnd(%composer)
}, %composer, 0)
@@ -636,7 +636,7 @@
sourceInformationMarkerStart(%composer, <>, "C:Test.kt")
if (condition) {
%composer.endToMarker(tmp0_marker)
- return
+ return@M3
}
sourceInformationMarkerEnd(%composer)
}, %composer, 0)
@@ -773,7 +773,7 @@
A(%composer, 0)
if (condition) {
sourceInformationMarkerEnd(%composer)
- return
+ return@M3
}
A(%composer, 0)
sourceInformationMarkerEnd(%composer)
@@ -783,7 +783,7 @@
A(%composer, 0)
if (condition) {
sourceInformationMarkerEnd(%composer)
- return
+ return@M3
}
A(%composer, 0)
sourceInformationMarkerEnd(%composer)
@@ -908,7 +908,7 @@
sourceInformationMarkerStart(%composer, <>, "C<A()>:Test.kt")
if (condition) {
sourceInformationMarkerEnd(%composer)
- return
+ return@FakeBox
}
A(%composer, 0)
sourceInformationMarkerEnd(%composer)
@@ -1081,7 +1081,7 @@
sourceInformationMarkerStart(%composer, <>, "C<A()>:Test.kt")
if (condition) {
sourceInformationMarkerEnd(%composer)
- return
+ return@IW
}
A(%composer, 0)
sourceInformationMarkerEnd(%composer)
@@ -1242,7 +1242,7 @@
Identity {
if (condition) {
sourceInformationMarkerEnd(%composer)
- return
+ return@M1
}
}
sourceInformationMarkerEnd(%composer)
@@ -6175,7 +6175,7 @@
sourceInformationMarkerStart(%composer, <>, "C:Test.kt")
if (true) {
%composer.endToMarker(tmp0_marker)
- return
+ return@Inline1
}
sourceInformationMarkerEnd(%composer)
}, %composer, 0)
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/DefaultParamTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/DefaultParamTransformTests.kt
index d0a6e48..de1087bf 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/DefaultParamTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/DefaultParamTransformTests.kt
@@ -18,8 +18,11 @@
import org.intellij.lang.annotations.Language
import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
-class DefaultParamTransformTests : AbstractIrTransformTest() {
+@RunWith(JUnit4::class)
+class DefaultParamTransformTests : AbstractIrTransformTest(useFir = false) {
private fun defaultParams(
@Language("kotlin")
unchecked: String,
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FcsTypeResolutionTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FcsTypeResolutionTests.kt
index ad921b5..72f0c67 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FcsTypeResolutionTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FcsTypeResolutionTests.kt
@@ -38,7 +38,7 @@
@Composable
fun Int.Foo(content: @Composable Int.(foo: String) -> Unit) {
- content<!NO_VALUE_FOR_PARAMETER, NO_VALUE_FOR_PARAMETER!>()<!>
+ content<!NO_VALUE_FOR_PARAMETER!>()<!>
}
@Composable
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionBodySkippingTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionBodySkippingTransformTests.kt
index 80eb3c3..125adde 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionBodySkippingTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionBodySkippingTransformTests.kt
@@ -19,8 +19,11 @@
import org.intellij.lang.annotations.Language
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
-abstract class FunctionBodySkippingTransformTestsBase : AbstractIrTransformTest() {
+@RunWith(JUnit4::class)
+abstract class FunctionBodySkippingTransformTestsBase : AbstractIrTransformTest(useFir = false) {
protected fun comparisonPropagation(
@Language("kotlin")
unchecked: String,
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/KtxCrossModuleTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/KtxCrossModuleTests.kt
index d310b12..52576e3 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/KtxCrossModuleTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/KtxCrossModuleTests.kt
@@ -37,7 +37,7 @@
minSdk = 23,
maxSdk = 23
)
-class KtxCrossModuleTests : AbstractCodegenTest() {
+class KtxCrossModuleTests : AbstractCodegenTest(useFir = false) {
@Test
fun testInlineFunctionDefaultArgument() {
compile(
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/KtxTransformationTest.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/KtxTransformationTest.kt
index 4608a38..50d3a82 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/KtxTransformationTest.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/KtxTransformationTest.kt
@@ -17,8 +17,11 @@
package androidx.compose.compiler.plugins.kotlin
import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
-class KtxTransformationTest : AbstractCodegenTest() {
+@RunWith(JUnit4::class)
+class KtxTransformationTest : AbstractCodegenTest(useFir = false) {
// b/179279455
// @Test
// fun testObserveLowering() {
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LambdaMemoizationRegressionTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LambdaMemoizationRegressionTests.kt
index e33bf13..201a7f8 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LambdaMemoizationRegressionTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LambdaMemoizationRegressionTests.kt
@@ -17,6 +17,8 @@
package androidx.compose.compiler.plugins.kotlin
import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
/**
* This test merely ensures that code gen changes are evaluated against potentially
@@ -26,7 +28,8 @@
* The Android Studio debugger searches for `ComposableSingletons` classes by name.
* Any changes to the naming scheme have to be reflected in the Android Studio code.
*/
-class LambdaMemoizationRegressionTests : AbstractIrTransformTest() {
+@RunWith(JUnit4::class)
+class LambdaMemoizationRegressionTests : AbstractIrTransformTest(useFir = false) {
@Test
fun testNestedComposableSingletonsClass() = verifyComposeIrTransform(
"""
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LambdaMemoizationTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LambdaMemoizationTests.kt
index 2b9d52a..5e0d632 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LambdaMemoizationTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LambdaMemoizationTests.kt
@@ -32,7 +32,7 @@
minSdk = 23,
maxSdk = 23
)
-class LambdaMemoizationTests : AbstractLoweringTests() {
+class LambdaMemoizationTests : AbstractLoweringTests(useFir = false) {
@Test
@Ignore("b/179279455")
fun nonCapturingEventLambda() = skipping(
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LambdaMemoizationTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LambdaMemoizationTransformTests.kt
index b8c72cf..0eb6a7c 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LambdaMemoizationTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LambdaMemoizationTransformTests.kt
@@ -17,8 +17,11 @@
package androidx.compose.compiler.plugins.kotlin
import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
-class LambdaMemoizationTransformTests : AbstractIrTransformTest() {
+@RunWith(JUnit4::class)
+class LambdaMemoizationTransformTests : AbstractIrTransformTest(useFir = false) {
@Test
fun testCapturedThisFromFieldInitializer() = verifyComposeIrTransform(
"""
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LiveLiteralCodegenTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LiveLiteralCodegenTests.kt
index 1083583..79754ae 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LiveLiteralCodegenTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LiveLiteralCodegenTests.kt
@@ -33,7 +33,7 @@
minSdk = 23,
maxSdk = 23
)
-class LiveLiteralCodegenTests : AbstractLoweringTests() {
+class LiveLiteralCodegenTests : AbstractLoweringTests(useFir = false) {
override fun CompilerConfiguration.updateConfiguration() {
put(ComposeConfiguration.LIVE_LITERALS_ENABLED_KEY, true)
}
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/RememberIntrinsicTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/RememberIntrinsicTransformTests.kt
index 2cd3d0b..13f7adc 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/RememberIntrinsicTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/RememberIntrinsicTransformTests.kt
@@ -19,8 +19,11 @@
import org.intellij.lang.annotations.Language
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
-class RememberIntrinsicTransformTests : AbstractIrTransformTest() {
+@RunWith(JUnit4::class)
+class RememberIntrinsicTransformTests : AbstractIrTransformTest(useFir = false) {
override fun CompilerConfiguration.updateConfiguration() {
put(ComposeConfiguration.SOURCE_INFORMATION_ENABLED_KEY, true)
put(ComposeConfiguration.INTRINSIC_REMEMBER_OPTIMIZATION_ENABLED_KEY, true)
@@ -1167,10 +1170,10 @@
if (isTraceInProgress()) {
traceEventStart(<>, %dirty, -1, <>)
}
- used(%composer.cache(%dirty and 0b1110 === 0b0100, {
+ used(%composer.cache(%dirty and 0b1110 === 0b0100) {
effect()
}
- ))
+ )
if (isTraceInProgress()) {
traceEventEnd()
}
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/RunComposableTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/RunComposableTests.kt
index 4aad0a8..f884eb9 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/RunComposableTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/RunComposableTests.kt
@@ -21,6 +21,7 @@
import androidx.compose.runtime.Composition
import androidx.compose.runtime.MonotonicFrameClock
import androidx.compose.runtime.Recomposer
+import java.net.URLClassLoader
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.CoroutineStart
import kotlinx.coroutines.Dispatchers
@@ -31,11 +32,13 @@
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
import org.jetbrains.kotlin.cli.common.setupLanguageVersionSettings
import org.jetbrains.kotlin.config.CompilerConfiguration
-import org.junit.Test
-import java.net.URLClassLoader
import org.junit.Assert.assertEquals
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
-class RunComposableTests : AbstractCodegenTest() {
+@RunWith(JUnit4::class)
+class RunComposableTests : AbstractCodegenTest(useFir = false) {
override fun CompilerConfiguration.updateConfiguration() {
setupLanguageVersionSettings(K2JVMCompilerArguments().apply {
// enabling multiPlatform to use expect/actual declarations
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/SanityCheckCodegenTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/SanityCheckCodegenTests.kt
index afce655..dfbad0a 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/SanityCheckCodegenTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/SanityCheckCodegenTests.kt
@@ -16,9 +16,10 @@
package androidx.compose.compiler.plugins.kotlin
+import org.junit.Assume
import org.junit.Test
-class SanityCheckCodegenTests : AbstractCodegenTest() {
+class SanityCheckCodegenTests(useFir: Boolean) : AbstractCodegenTest(useFir) {
@Test
fun testCallAbstractSuperWithTypeParameters() {
testCompile(
@@ -125,6 +126,7 @@
// Regression validating b/237863365
@Test
fun testComposableAsLastStatementInUnitReturningLambda() {
+ Assume.assumeFalse(useFir)
testCompile(
"""
import androidx.compose.runtime.Composable
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ScopeComposabilityTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ScopeComposabilityTests.kt
index a21119e..3a6d1d1 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ScopeComposabilityTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ScopeComposabilityTests.kt
@@ -16,7 +16,9 @@
package androidx.compose.compiler.plugins.kotlin
+import androidx.compose.compiler.plugins.kotlin.facade.K1AnalysisResult
import androidx.compose.compiler.plugins.kotlin.facade.SourceFile
+import androidx.compose.compiler.plugins.kotlin.k1.allowsComposableCalls
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtFunction
@@ -27,8 +29,12 @@
import org.jetbrains.kotlin.resolve.BindingContext
import org.junit.Assert.assertTrue
import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
-class ScopeComposabilityTests : AbstractCodegenTest() {
+// TODO(b/282189431): run this test with K2
+@RunWith(JUnit4::class)
+class ScopeComposabilityTests : AbstractCodegenTest(useFir = false) {
@Test
fun testNormalFunctions() = assertComposability(
"""
@@ -156,8 +162,8 @@
private fun assertComposability(srcText: String) {
val (text, carets) = extractCarets(srcText)
- val analysisResult = analyze(listOf(SourceFile("test.kt", text)))
- val bindingContext = analysisResult.bindingContext!!
+ val analysisResult = analyze(listOf(SourceFile("test.kt", text))) as K1AnalysisResult
+ val bindingContext = analysisResult.bindingContext
val ktFile = analysisResult.files.single()
carets.forEachIndexed { index, (offset, marking) ->
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/StabilityPropagationTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/StabilityPropagationTransformTests.kt
index 8fdc521..f5f357e 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/StabilityPropagationTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/StabilityPropagationTransformTests.kt
@@ -19,7 +19,7 @@
import org.intellij.lang.annotations.Language
import org.junit.Test
-class StabilityPropagationTransformTests : AbstractIrTransformTest() {
+class StabilityPropagationTransformTests(useFir: Boolean) : AbstractIrTransformTest(useFir) {
private fun stabilityPropagation(
@Language("kotlin")
unchecked: String,
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/StaticExpressionDetectionTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/StaticExpressionDetectionTests.kt
index f1f0fd1..d339a8a 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/StaticExpressionDetectionTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/StaticExpressionDetectionTests.kt
@@ -24,8 +24,7 @@
import org.junit.Assert.fail
import org.junit.Test
-class StaticExpressionDetectionTests : AbstractIrTransformTest() {
-
+class StaticExpressionDetectionTests(useFir: Boolean) : AbstractIrTransformTest(useFir) {
@Test
fun testUnstableTypesAreNeverStatic() = assertUnstable(
expression = "Any()"
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/TargetAnnotationsTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/TargetAnnotationsTransformTests.kt
index 5b3aa04..218d11b 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/TargetAnnotationsTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/TargetAnnotationsTransformTests.kt
@@ -17,9 +17,12 @@
package androidx.compose.compiler.plugins.kotlin
import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+@RunWith(JUnit4::class)
@Suppress("SpellCheckingInspection") // Expected strings can have partial words
-class TargetAnnotationsTransformTests : AbstractIrTransformTest() {
+class TargetAnnotationsTransformTests : AbstractIrTransformTest(useFir = false) {
@Test
fun testInferUIFromCall() = verify(
"""
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/TraceInformationTest.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/TraceInformationTest.kt
index 0a5b091..9aae8db 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/TraceInformationTest.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/TraceInformationTest.kt
@@ -18,6 +18,8 @@
import androidx.compose.compiler.plugins.kotlin.AbstractIrTransformTest.TruncateTracingInfoMode
import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
/**
* Verifies trace data passed to tracing. Relies on [TruncateTracingInfoMode.KEEP_INFO_STRING] to
@@ -26,7 +28,8 @@
* More complex cases tested in other IrTransform tests that use
* the [TruncateTracingInfoMode.KEEP_INFO_STRING].
*/
-class TraceInformationTest : AbstractIrTransformTest() {
+@RunWith(JUnit4::class)
+class TraceInformationTest : AbstractIrTransformTest(useFir = false) {
@Test
fun testBasicComposableFunctions() = verifyComposeIrTransform(
"""
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/analysis/ComposableCheckerTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/analysis/ComposableCheckerTests.kt
index b198df57..7cc78ae 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/analysis/ComposableCheckerTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/analysis/ComposableCheckerTests.kt
@@ -496,7 +496,7 @@
@Composable
fun foo() {
val myList = listOf(1,2,3,4,5)
- myList.forEach @Composable { value: Int ->
+ myList.forEach <!REDUNDANT_COMPOSABLE_ANNOTATION!>@Composable<!> { value: Int ->
Leaf()
System.out.println(value)
}
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/analysis/ComposableDeclarationCheckerTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/analysis/ComposableDeclarationCheckerTests.kt
index 07aa897..2c611cf 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/analysis/ComposableDeclarationCheckerTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/analysis/ComposableDeclarationCheckerTests.kt
@@ -128,7 +128,7 @@
acceptSuspend <!TYPE_MISMATCH!>@Composable {}<!>
acceptComposableSuspend @Composable {}
acceptComposableSuspend(composableLambda)
- acceptSuspend(<!COMPOSABLE_SUSPEND_FUN, TYPE_MISMATCH!>@Composable suspend fun() { }<!>)
+ acceptSuspend(<!COMPOSABLE_SUSPEND_FUN,TYPE_MISMATCH!>@Composable suspend fun() { }<!>)
}
"""
)
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/debug/AbstractDebuggerTest.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/debug/AbstractDebuggerTest.kt
index 51ed468..2aaeeb1 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/debug/AbstractDebuggerTest.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/debug/AbstractDebuggerTest.kt
@@ -39,26 +39,29 @@
import com.sun.jdi.request.StepRequest
import com.sun.tools.jdi.SocketAttachingConnector
import java.io.File
+import java.net.URL
+import java.net.URLClassLoader
+import kotlin.properties.Delegates
import org.intellij.lang.annotations.Language
import org.jetbrains.kotlin.backend.common.output.SimpleOutputFileCollection
import org.jetbrains.kotlin.cli.common.output.writeAllTo
import org.jetbrains.kotlin.codegen.GeneratedClassLoader
-import java.net.URL
-import java.net.URLClassLoader
-import kotlin.properties.Delegates
import org.junit.After
import org.junit.AfterClass
import org.junit.Before
import org.junit.BeforeClass
import org.junit.Rule
import org.junit.rules.TemporaryFolder
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
private const val RUNNER_CLASS = "RunnerKt"
private const val MAIN_METHOD = "main"
private const val CONTENT_METHOD = "content"
private const val TEST_CLASS = "TestKt"
-abstract class AbstractDebuggerTest : AbstractCodegenTest() {
+@RunWith(JUnit4::class)
+abstract class AbstractDebuggerTest : AbstractCodegenTest(useFir = false) {
companion object {
private lateinit var testServerProcess: Process
lateinit var virtualMachine: VirtualMachine
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/facade/K1CompilerFacade.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/facade/K1CompilerFacade.kt
index de9ff6a..b3b6beb 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/facade/K1CompilerFacade.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/facade/K1CompilerFacade.kt
@@ -17,9 +17,7 @@
package androidx.compose.compiler.plugins.kotlin.facade
import androidx.compose.compiler.plugins.kotlin.TestsCompilerError
-import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig
import org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory
-import org.jetbrains.kotlin.backend.jvm.jvmPhases
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
import org.jetbrains.kotlin.cli.jvm.compiler.CliBindingTrace
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
@@ -36,7 +34,7 @@
class K1AnalysisResult(
override val files: List<KtFile>,
val moduleDescriptor: ModuleDescriptor,
- override val bindingContext: BindingContext
+ val bindingContext: BindingContext
) : AnalysisResult {
override val diagnostics: List<AnalysisResult.Diagnostic>
get() = bindingContext.diagnostics.all().map {
@@ -44,7 +42,7 @@
}
}
-class K1FrontendResult(
+private class K1FrontendResult(
val state: GenerationState,
val backendInput: JvmIrCodegenFactory.JvmIrBackendInput,
val codegenFactory: JvmIrCodegenFactory
@@ -84,7 +82,6 @@
val codegenFactory = JvmIrCodegenFactory(
environment.configuration,
environment.configuration.get(CLIConfigurationKeys.PHASE_CONFIG)
- ?: PhaseConfig(jvmPhases)
)
val state = GenerationState.Builder(
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/facade/K2CompilerFacade.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/facade/K2CompilerFacade.kt
new file mode 100644
index 0000000..a0b5f13
--- /dev/null
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/facade/K2CompilerFacade.kt
@@ -0,0 +1,208 @@
+/*
+ * Copyright 2022 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
+ *
+ * http://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.
+ */
+
+package androidx.compose.compiler.plugins.kotlin.facade
+
+import com.intellij.openapi.project.Project
+import com.intellij.openapi.vfs.StandardFileSystems
+import com.intellij.openapi.vfs.VirtualFileManager
+import com.intellij.psi.PsiElementFinder
+import com.intellij.psi.search.GlobalSearchScope
+import com.intellij.psi.search.ProjectScope
+import org.jetbrains.kotlin.asJava.finder.JavaElementFinder
+import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
+import org.jetbrains.kotlin.backend.jvm.JvmGeneratorExtensions
+import org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory
+import org.jetbrains.kotlin.backend.jvm.JvmIrDeserializerImpl
+import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
+import org.jetbrains.kotlin.cli.common.fir.FirDiagnosticsCompilerResultsReporter
+import org.jetbrains.kotlin.cli.common.messages.MessageRenderer
+import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
+import org.jetbrains.kotlin.cli.jvm.compiler.NoScopeRecordCliBindingTrace
+import org.jetbrains.kotlin.cli.jvm.compiler.PsiBasedProjectFileSearchScope
+import org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM
+import org.jetbrains.kotlin.cli.jvm.compiler.VfsBasedProjectEnvironment
+import org.jetbrains.kotlin.codegen.ClassBuilderFactories
+import org.jetbrains.kotlin.codegen.state.GenerationState
+import org.jetbrains.kotlin.config.CommonConfigurationKeys
+import org.jetbrains.kotlin.config.CompilerConfiguration
+import org.jetbrains.kotlin.config.JVMConfigurationKeys
+import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
+import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
+import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector
+import org.jetbrains.kotlin.fir.FirSession
+import org.jetbrains.kotlin.fir.backend.Fir2IrResult
+import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendClassResolver
+import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendExtension
+import org.jetbrains.kotlin.fir.backend.jvm.JvmFir2IrExtensions
+import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
+import org.jetbrains.kotlin.fir.pipeline.FirResult
+import org.jetbrains.kotlin.fir.pipeline.ModuleCompilerAnalyzedOutput
+import org.jetbrains.kotlin.fir.pipeline.buildFirFromKtFiles
+import org.jetbrains.kotlin.fir.pipeline.convertToIrAndActualize
+import org.jetbrains.kotlin.fir.pipeline.runCheckers
+import org.jetbrains.kotlin.fir.pipeline.runResolution
+import org.jetbrains.kotlin.fir.session.FirSessionFactoryHelper
+import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmIrMangler
+import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
+import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
+import org.jetbrains.kotlin.name.Name
+import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
+import org.jetbrains.kotlin.psi.KtFile
+import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
+
+class FirAnalysisResult(
+ val moduleCompilerAnalyzedOutput: ModuleCompilerAnalyzedOutput,
+ override val files: List<KtFile>,
+ val reporter: BaseDiagnosticsCollector
+) : AnalysisResult {
+ override val diagnostics: List<AnalysisResult.Diagnostic>
+ get() = reporter.diagnostics.map {
+ AnalysisResult.Diagnostic(it.factoryName, it.textRanges)
+ }
+}
+
+private class FirFrontendResult(
+ val session: FirSession,
+ val firResult: Fir2IrResult,
+ val generatorExtensions: JvmGeneratorExtensions,
+)
+
+class K2CompilerFacade(environment: KotlinCoreEnvironment) : KotlinCompilerFacade(environment) {
+ init {
+ PsiElementFinder.EP.getPoint(environment.project)
+ .unregisterExtension(JavaElementFinder::class.java)
+ }
+
+ private val project: Project
+ get() = environment.project
+
+ private val configuration: CompilerConfiguration
+ get() = environment.configuration
+
+ override fun analyze(files: List<SourceFile>): FirAnalysisResult {
+ val ktFiles = files.map { it.toKtFile(project) }
+
+ val session = createSessionForTests(
+ sourceScope = GlobalSearchScope.filesScope(project, ktFiles.map { it.virtualFile })
+ .uniteWith(TopDownAnalyzerFacadeForJVM.AllJavaSourcesInProjectScope(project)),
+ librariesScope = ProjectScope.getLibrariesScope(project),
+ moduleName = configuration.get(CommonConfigurationKeys.MODULE_NAME, "main"),
+ getPackagePartProvider = environment::createPackagePartProvider
+ )
+ val reporter = DiagnosticReporterFactory.createReporter()
+ val firFiles = session.buildFirFromKtFiles(ktFiles)
+ val scopeSession = session.runResolution(firFiles).first
+ session.runCheckers(scopeSession, firFiles, reporter)
+ return FirAnalysisResult(
+ ModuleCompilerAnalyzedOutput(session, scopeSession, firFiles),
+ ktFiles,
+ reporter
+ )
+ }
+
+ private fun frontend(files: List<SourceFile>): FirFrontendResult {
+ val analysisResult = analyze(files)
+
+ FirDiagnosticsCompilerResultsReporter.throwFirstErrorAsException(
+ analysisResult.reporter,
+ MessageRenderer.PLAIN_FULL_PATHS
+ )
+
+ val fir2IrExtensions = JvmFir2IrExtensions(
+ configuration,
+ JvmIrDeserializerImpl(),
+ JvmIrMangler
+ )
+
+ val fir2IrResult = FirResult(
+ analysisResult.moduleCompilerAnalyzedOutput,
+ null
+ ).convertToIrAndActualize(
+ fir2IrExtensions,
+ IrGenerationExtension.getInstances(project),
+ configuration.getBoolean(JVMConfigurationKeys.LINK_VIA_SIGNATURES)
+ )
+
+ return FirFrontendResult(
+ analysisResult.moduleCompilerAnalyzedOutput.session,
+ fir2IrResult,
+ fir2IrExtensions
+ )
+ }
+
+ override fun compileToIr(files: List<SourceFile>): IrModuleFragment =
+ frontend(files).firResult.irModuleFragment
+
+ override fun compile(files: List<SourceFile>): GenerationState {
+ val frontendResult = frontend(files)
+ val irModuleFragment = frontendResult.firResult.irModuleFragment
+ val components = frontendResult.firResult.components
+
+ val generationState = GenerationState.Builder(
+ project,
+ ClassBuilderFactories.TEST,
+ irModuleFragment.descriptor,
+ NoScopeRecordCliBindingTrace().bindingContext,
+ configuration
+ ).isIrBackend(
+ true
+ ).jvmBackendClassResolver(
+ FirJvmBackendClassResolver(components)
+ ).build()
+
+ generationState.beforeCompile()
+ val codegenFactory = JvmIrCodegenFactory(
+ configuration,
+ configuration.get(CLIConfigurationKeys.PHASE_CONFIG)
+ )
+ codegenFactory.generateModuleInFrontendIRMode(
+ generationState, irModuleFragment, components.symbolTable, components.irProviders,
+ frontendResult.generatorExtensions,
+ FirJvmBackendExtension(frontendResult.session, components),
+ frontendResult.firResult.pluginContext
+ ) {}
+ generationState.factory.done()
+ return generationState
+ }
+
+ private fun createSessionForTests(
+ sourceScope: GlobalSearchScope,
+ librariesScope: GlobalSearchScope,
+ moduleName: String,
+ getPackagePartProvider: (GlobalSearchScope) -> PackagePartProvider,
+ ): FirSession {
+ return FirSessionFactoryHelper.createSessionWithDependencies(
+ Name.identifier(moduleName),
+ JvmPlatforms.unspecifiedJvmPlatform,
+ JvmPlatformAnalyzerServices,
+ externalSessionProvider = null,
+ VfsBasedProjectEnvironment(
+ project,
+ VirtualFileManager.getInstance().getFileSystem(StandardFileSystems.FILE_PROTOCOL),
+ getPackagePartProvider
+ ),
+ languageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
+ PsiBasedProjectFileSearchScope(sourceScope),
+ PsiBasedProjectFileSearchScope(librariesScope),
+ lookupTracker = null,
+ enumWhenTracker = null,
+ incrementalCompilationContext = null,
+ extensionRegistrars = FirExtensionRegistrar.getInstances(project),
+ needRegisterJavaElementFinder = true,
+ )
+ }
+}
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/facade/KotlinCompilerFacade.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/facade/KotlinCompilerFacade.kt
index 6e77efc..8b2807e 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/facade/KotlinCompilerFacade.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/facade/KotlinCompilerFacade.kt
@@ -43,7 +43,6 @@
import org.jetbrains.kotlin.ir.util.IrMessageLogger
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.AnalyzingUtils
-import org.jetbrains.kotlin.resolve.BindingContext
class SourceFile(
val name: String,
@@ -88,7 +87,6 @@
val files: List<KtFile>
val diagnostics: List<Diagnostic>
- val bindingContext: BindingContext?
}
abstract class KotlinCompilerFacade(val environment: KotlinCoreEnvironment) {
@@ -123,7 +121,7 @@
environment.project.registerExtensions(configuration)
return if (configuration.getBoolean(CommonConfigurationKeys.USE_FIR)) {
- error("FIR unsupported")
+ K2CompilerFacade(environment)
} else {
K1CompilerFacade(environment)
}
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeFlags.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeFlags.kt
deleted file mode 100644
index 99d7528..0000000
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeFlags.kt
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright 2019 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
- *
- * http://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.
- */
-
-package androidx.compose.compiler.plugins.kotlin
-
-object ComposeFlags {
- var FRAMED_COMPONENTS = false
- var FRAMED_MODEL_CLASSES = true
-}
\ No newline at end of file
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeFqNames.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeFqNames.kt
index 2158b63..27a64eb 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeFqNames.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeFqNames.kt
@@ -16,13 +16,6 @@
package androidx.compose.compiler.plugins.kotlin
-import org.jetbrains.kotlin.descriptors.ModuleDescriptor
-import org.jetbrains.kotlin.descriptors.SourceElement
-import org.jetbrains.kotlin.descriptors.annotations.Annotated
-import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
-import org.jetbrains.kotlin.descriptors.annotations.Annotations
-import org.jetbrains.kotlin.descriptors.findClassAcrossModuleDependencies
-import org.jetbrains.kotlin.descriptors.impl.AnonymousFunctionDescriptor
import org.jetbrains.kotlin.ir.declarations.IrAnnotationContainer
import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.util.hasAnnotation
@@ -30,12 +23,6 @@
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
-import org.jetbrains.kotlin.resolve.constants.ConstantValue
-import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass
-import org.jetbrains.kotlin.types.KotlinType
-import org.jetbrains.kotlin.types.TypeUtils.NO_EXPECTED_TYPE
-import org.jetbrains.kotlin.types.TypeUtils.UNIT_EXPECTED_TYPE
-import org.jetbrains.kotlin.types.typeUtil.replaceAnnotations
private const val root = "androidx.compose.runtime"
private const val internalRoot = "$root.internal"
@@ -126,94 +113,11 @@
val Stable = fqNameFor("Stable")
val Immutable = fqNameFor("Immutable")
val Composer = ComposeClassIds.Composer.asSingleFqName()
- val ComposeVersion = fqNameFor("ComposeVersion")
- val Package = FqName(root)
val StabilityInferred = ComposeClassIds.StabilityInferred.asSingleFqName()
-
- fun makeComposableAnnotation(module: ModuleDescriptor): AnnotationDescriptor =
- object : AnnotationDescriptor {
- override val type: KotlinType
- get() = module.findClassAcrossModuleDependencies(
- ClassId.topLevel(Composable)
- )!!.defaultType
- override val allValueArguments: Map<Name, ConstantValue<*>> get() = emptyMap()
- override val source: SourceElement get() = SourceElement.NO_SOURCE
- override fun toString() = "[@Composable]"
- }
}
-private fun makeComposableAnnotation(module: ModuleDescriptor): AnnotationDescriptor =
- object : AnnotationDescriptor {
- override val type: KotlinType
- get() = module.findClassAcrossModuleDependencies(
- ComposeClassIds.Composable
- )!!.defaultType
- override val allValueArguments: Map<Name, ConstantValue<*>> get() = emptyMap()
- override val source: SourceElement get() = SourceElement.NO_SOURCE
- override fun toString() = "[@Composable]"
- }
-
-fun KotlinType.makeComposable(module: ModuleDescriptor): KotlinType {
- if (hasComposableAnnotation()) return this
- val annotation = makeComposableAnnotation(module)
- return replaceAnnotations(Annotations.create(annotations + annotation))
-}
-
-fun AnonymousFunctionDescriptor.annotateAsComposable(module: ModuleDescriptor) =
- AnonymousFunctionDescriptor(
- containingDeclaration,
- Annotations.create(annotations + makeComposableAnnotation(module)),
- kind,
- source,
- isSuspend
- )
-
fun IrType.hasComposableAnnotation(): Boolean =
hasAnnotation(ComposeFqNames.Composable)
fun IrAnnotationContainer.hasComposableAnnotation(): Boolean =
hasAnnotation(ComposeFqNames.Composable)
-
-fun KotlinType.hasComposableAnnotation(): Boolean =
- !isSpecialType && annotations.findAnnotation(ComposeFqNames.Composable) != null
-fun Annotated.hasComposableAnnotation(): Boolean =
- annotations.findAnnotation(ComposeFqNames.Composable) != null
-fun Annotated.hasNonRestartableComposableAnnotation(): Boolean =
- annotations.findAnnotation(ComposeFqNames.NonRestartableComposable) != null
-fun Annotated.hasReadonlyComposableAnnotation(): Boolean =
- annotations.findAnnotation(ComposeFqNames.ReadOnlyComposable) != null
-fun Annotated.hasExplicitGroupsAnnotation(): Boolean =
- annotations.findAnnotation(ComposeFqNames.ExplicitGroupsComposable) != null
-fun Annotated.hasDisallowComposableCallsAnnotation(): Boolean =
- annotations.findAnnotation(ComposeFqNames.DisallowComposableCalls) != null
-fun Annotated.compositionTarget(): String? =
- annotations.map { it.compositionTarget() }.firstOrNull { it != null }
-
-fun Annotated.hasCompositionTargetMarker(): Boolean =
- annotations.findAnnotation(
- ComposeFqNames.ComposableTargetMarker
- ) != null
-
-fun AnnotationDescriptor.compositionTarget(): String? =
- if (fqName == ComposeFqNames.ComposableTarget)
- allValueArguments[ComposeFqNames.ComposableTargetApplierArgument]?.value as? String
- else if (annotationClass?.hasCompositionTargetMarker() == true) this.fqName.toString() else null
-
-fun Annotated.compositionScheme(): String? =
- annotations.findAnnotation(
- ComposeFqNames.ComposableInferredTarget
- )?.allValueArguments?.let {
- it[ComposeFqNames.ComposableInferredTargetSchemeArgument]?.value as? String
- }
-
-fun Annotated.compositionOpenTarget(): Int? =
- annotations.findAnnotation(
- ComposeFqNames.ComposableOpenTarget
- )?.allValueArguments?.let {
- it[ComposeFqNames.ComposableOpenTargetIndexArgument]?.value as Int
- }
-
-internal val KotlinType.isSpecialType: Boolean get() =
- this === NO_EXPECTED_TYPE || this === UNIT_EXPECTED_TYPE
-
-val AnnotationDescriptor.isComposableAnnotation: Boolean get() = fqName == ComposeFqNames.Composable
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposePlugin.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposePlugin.kt
index 9aa4e7d..c337918 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposePlugin.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposePlugin.kt
@@ -16,6 +16,11 @@
package androidx.compose.compiler.plugins.kotlin
+import androidx.compose.compiler.plugins.kotlin.k1.ComposableCallChecker
+import androidx.compose.compiler.plugins.kotlin.k1.ComposableDeclarationChecker
+import androidx.compose.compiler.plugins.kotlin.k1.ComposableTargetChecker
+import androidx.compose.compiler.plugins.kotlin.k1.ComposeDiagnosticSuppressor
+import androidx.compose.compiler.plugins.kotlin.k1.ComposeTypeResolutionInterceptorExtension
import androidx.compose.compiler.plugins.kotlin.lower.ClassStabilityFieldSerializationPlugin
import com.intellij.mock.MockProject
import com.intellij.openapi.project.Project
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ValidatedAssignment.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ValidatedAssignment.kt
deleted file mode 100644
index 9646462..0000000
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ValidatedAssignment.kt
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2019 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
- *
- * http://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.
- */
-
-package androidx.compose.compiler.plugins.kotlin
-
-import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
-import org.jetbrains.kotlin.descriptors.FunctionDescriptor
-import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
-import org.jetbrains.kotlin.types.KotlinType
-
-class ValidatedAssignment(
- val validationType: ValidationType,
- val validationCall: ResolvedCall<*>?,
- val uncheckedValidationCall: ResolvedCall<*>?,
- val assignment: ResolvedCall<*>?,
- val assignmentLambda: FunctionDescriptor?, // needed?
- val type: KotlinType,
- val name: String,
- val descriptor: DeclarationDescriptor
-)
-
-enum class ValidationType {
- CHANGED,
- SET,
- UPDATE
-}
\ No newline at end of file
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/VersionChecker.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/VersionChecker.kt
index f4bafee..75258ec 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/VersionChecker.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/VersionChecker.kt
@@ -113,6 +113,7 @@
9801 to "1.5.0-alpha02",
9901 to "1.5.0-alpha03",
10001 to "1.5.0-alpha04",
+ 10101 to "1.5.0-alpha05",
)
/**
@@ -125,7 +126,7 @@
* The maven version string of this compiler. This string should be updated before/after every
* release.
*/
- const val compilerVersion: String = "1.4.7"
+ const val compilerVersion: String = "1.5.0-alpha05"
private val minimumRuntimeVersion: String
get() = runtimeVersionToMavenVersionTable[minimumRuntimeVersionInt] ?: "unknown"
}
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/analysis/ComposeWritableSlices.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/analysis/ComposeWritableSlices.kt
index 9261e3e..e2b36a9 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/analysis/ComposeWritableSlices.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/analysis/ComposeWritableSlices.kt
@@ -1,24 +1,15 @@
package androidx.compose.compiler.plugins.kotlin.analysis
-import androidx.compose.compiler.plugins.kotlin.lower.KeyInfo
import androidx.compose.compiler.plugins.kotlin.FunctionMetrics
-import androidx.compose.compiler.plugins.kotlin.inference.LazyScheme
-import org.jetbrains.kotlin.descriptors.FunctionDescriptor
+import androidx.compose.compiler.plugins.kotlin.lower.KeyInfo
import org.jetbrains.kotlin.ir.declarations.IrAttributeContainer
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrFunctionAccessExpression
-import org.jetbrains.kotlin.psi.KtLambdaExpression
import org.jetbrains.kotlin.util.slicedMap.BasicWritableSlice
import org.jetbrains.kotlin.util.slicedMap.RewritePolicy
import org.jetbrains.kotlin.util.slicedMap.WritableSlice
object ComposeWritableSlices {
- val INFERRED_COMPOSABLE_DESCRIPTOR: WritableSlice<FunctionDescriptor, Boolean> =
- BasicWritableSlice(RewritePolicy.DO_NOTHING)
- val LAMBDA_CAPABLE_OF_COMPOSER_CAPTURE: WritableSlice<FunctionDescriptor, Boolean> =
- BasicWritableSlice(RewritePolicy.DO_NOTHING)
- val INFERRED_COMPOSABLE_LITERAL: WritableSlice<KtLambdaExpression, Boolean> =
- BasicWritableSlice(RewritePolicy.DO_NOTHING)
val IS_SYNTHETIC_COMPOSABLE_CALL: WritableSlice<IrFunctionAccessExpression, Boolean> =
BasicWritableSlice(RewritePolicy.DO_NOTHING)
val IS_STATIC_FUNCTION_EXPRESSION: WritableSlice<IrExpression, Boolean> =
@@ -35,8 +26,6 @@
BasicWritableSlice(RewritePolicy.DO_NOTHING)
val IS_TRANSFORMED_LAMBDA: WritableSlice<IrAttributeContainer, Boolean> =
BasicWritableSlice(RewritePolicy.DO_NOTHING)
- val COMPOSE_LAZY_SCHEME: WritableSlice<Any, LazyScheme> =
- BasicWritableSlice(RewritePolicy.DO_NOTHING)
val FUNCTION_METRICS: WritableSlice<IrAttributeContainer, FunctionMetrics> =
BasicWritableSlice(RewritePolicy.DO_NOTHING)
}
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/inference/Scheme.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/inference/Scheme.kt
index b1a6a30..5c4bf94 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/inference/Scheme.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/inference/Scheme.kt
@@ -416,4 +416,25 @@
schemeParseError()
}
}
-}
\ No newline at end of file
+}
+
+internal fun Scheme.mergeWith(schemes: List<Scheme>): Scheme {
+ if (schemes.isEmpty()) return this
+
+ val lazyScheme = LazyScheme(this)
+ val bindings = lazyScheme.bindings
+
+ fun unifySchemes(a: LazyScheme, b: LazyScheme) {
+ bindings.unify(a.target, b.target)
+ for ((ap, bp) in a.parameters.zip(b.parameters)) {
+ unifySchemes(ap, bp)
+ }
+ }
+
+ schemes.forEach {
+ val overrideScheme = LazyScheme(it, bindings = lazyScheme.bindings)
+ unifySchemes(lazyScheme, overrideScheme)
+ }
+
+ return lazyScheme.toScheme()
+}
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/AnnotationUtils.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/AnnotationUtils.kt
new file mode 100644
index 0000000..3f01555
--- /dev/null
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/AnnotationUtils.kt
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.compose.compiler.plugins.kotlin.k1
+
+import androidx.compose.compiler.plugins.kotlin.ComposeClassIds
+import androidx.compose.compiler.plugins.kotlin.ComposeFqNames
+import org.jetbrains.kotlin.descriptors.ModuleDescriptor
+import org.jetbrains.kotlin.descriptors.SourceElement
+import org.jetbrains.kotlin.descriptors.annotations.Annotated
+import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
+import org.jetbrains.kotlin.descriptors.annotations.Annotations
+import org.jetbrains.kotlin.descriptors.findClassAcrossModuleDependencies
+import org.jetbrains.kotlin.descriptors.impl.AnonymousFunctionDescriptor
+import org.jetbrains.kotlin.name.Name
+import org.jetbrains.kotlin.resolve.constants.ConstantValue
+import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass
+import org.jetbrains.kotlin.types.KotlinType
+import org.jetbrains.kotlin.types.TypeUtils
+import org.jetbrains.kotlin.types.typeUtil.replaceAnnotations
+
+private fun makeComposableAnnotation(module: ModuleDescriptor): AnnotationDescriptor =
+ object : AnnotationDescriptor {
+ override val type: KotlinType
+ get() = module.findClassAcrossModuleDependencies(
+ ComposeClassIds.Composable
+ )!!.defaultType
+ override val allValueArguments: Map<Name, ConstantValue<*>> get() = emptyMap()
+ override val source: SourceElement get() = SourceElement.NO_SOURCE
+ override fun toString() = "[@Composable]"
+ }
+
+fun KotlinType.makeComposable(module: ModuleDescriptor): KotlinType {
+ if (hasComposableAnnotation()) return this
+ val annotation = makeComposableAnnotation(module)
+ return replaceAnnotations(Annotations.create(annotations + annotation))
+}
+
+fun AnonymousFunctionDescriptor.annotateAsComposable(module: ModuleDescriptor) =
+ AnonymousFunctionDescriptor(
+ containingDeclaration,
+ Annotations.create(annotations + makeComposableAnnotation(module)),
+ kind,
+ source,
+ isSuspend
+ )
+
+fun KotlinType.hasComposableAnnotation(): Boolean =
+ !isSpecialType && annotations.findAnnotation(ComposeFqNames.Composable) != null
+fun Annotated.hasComposableAnnotation(): Boolean =
+ annotations.findAnnotation(ComposeFqNames.Composable) != null
+fun Annotated.hasReadonlyComposableAnnotation(): Boolean =
+ annotations.findAnnotation(ComposeFqNames.ReadOnlyComposable) != null
+fun Annotated.hasDisallowComposableCallsAnnotation(): Boolean =
+ annotations.findAnnotation(ComposeFqNames.DisallowComposableCalls) != null
+fun Annotated.compositionTarget(): String? =
+ annotations.map { it.compositionTarget() }.firstOrNull { it != null }
+
+fun Annotated.hasCompositionTargetMarker(): Boolean =
+ annotations.findAnnotation(
+ ComposeFqNames.ComposableTargetMarker
+ ) != null
+
+fun AnnotationDescriptor.compositionTarget(): String? =
+ if (fqName == ComposeFqNames.ComposableTarget)
+ allValueArguments[ComposeFqNames.ComposableTargetApplierArgument]?.value as? String
+ else if (annotationClass?.hasCompositionTargetMarker() == true) this.fqName.toString() else null
+
+fun Annotated.compositionScheme(): String? =
+ annotations.findAnnotation(
+ ComposeFqNames.ComposableInferredTarget
+ )?.allValueArguments?.let {
+ it[ComposeFqNames.ComposableInferredTargetSchemeArgument]?.value as? String
+ }
+
+fun Annotated.compositionOpenTarget(): Int? =
+ annotations.findAnnotation(
+ ComposeFqNames.ComposableOpenTarget
+ )?.allValueArguments?.let {
+ it[ComposeFqNames.ComposableOpenTargetIndexArgument]?.value as Int
+ }
+
+internal val KotlinType.isSpecialType: Boolean get() =
+ this === TypeUtils.NO_EXPECTED_TYPE || this === TypeUtils.UNIT_EXPECTED_TYPE
+
+val AnnotationDescriptor.isComposableAnnotation: Boolean get() = fqName == ComposeFqNames.Composable
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposableCallChecker.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/ComposableCallChecker.kt
similarity index 95%
rename from compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposableCallChecker.kt
rename to compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/ComposableCallChecker.kt
index 25c7023..30eaf28 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposableCallChecker.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/ComposableCallChecker.kt
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package androidx.compose.compiler.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin.k1
-import androidx.compose.compiler.plugins.kotlin.analysis.ComposeWritableSlices
+import androidx.compose.compiler.plugins.kotlin.ComposeFqNames
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.builtins.isBuiltinFunctionalType
import org.jetbrains.kotlin.container.StorageComponentContainer
@@ -62,6 +62,7 @@
import org.jetbrains.kotlin.resolve.calls.util.getValueArgumentForExpression
import org.jetbrains.kotlin.resolve.inline.InlineUtil.isInlinedArgument
import org.jetbrains.kotlin.resolve.sam.getSingleAbstractMethodOrNull
+import org.jetbrains.kotlin.resolve.source.PsiSourceElement
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.TypeUtils
import org.jetbrains.kotlin.types.lowerIfFlexible
@@ -160,7 +161,7 @@
val arg = getArgumentDescriptor(node.functionLiteral, bindingContext)
if (arg?.type?.hasDisallowComposableCallsAnnotation() == true) {
context.trace.record(
- ComposeWritableSlices.LAMBDA_CAPABLE_OF_COMPOSER_CAPTURE,
+ FrontendWritableSlices.LAMBDA_CAPABLE_OF_COMPOSER_CAPTURE,
descriptor,
false
)
@@ -187,7 +188,7 @@
// since the function is inlined, we continue going up the PSI tree
// until we find a composable context. We also mark this lambda
context.trace.record(
- ComposeWritableSlices.LAMBDA_CAPABLE_OF_COMPOSER_CAPTURE,
+ FrontendWritableSlices.LAMBDA_CAPABLE_OF_COMPOSER_CAPTURE,
descriptor,
true
)
@@ -377,11 +378,23 @@
c.trace.bindingContext,
true
)
- if (isInlineable) return
+ if (isInlineable) {
+ if (!expectedComposable && descriptor.isMarkedAsComposable()) {
+ val reportOn = (descriptor
+ .annotations
+ .findAnnotation(ComposeFqNames.Composable)
+ ?.source as? PsiSourceElement)
+ ?.psi ?: expression
+ c.trace.report(
+ ComposeErrors.REDUNDANT_COMPOSABLE_ANNOTATION.on(reportOn)
+ )
+ }
+ return
+ }
if (!expectedComposable && isComposable) {
val inferred = c.trace.bindingContext[
- ComposeWritableSlices.INFERRED_COMPOSABLE_DESCRIPTOR,
+ FrontendWritableSlices.INFERRED_COMPOSABLE_DESCRIPTOR,
descriptor
] == true
if (inferred) {
@@ -524,7 +537,7 @@
if (isMarkedAsComposable()) return true
if (
this is FunctionDescriptor &&
- bindingContext[ComposeWritableSlices.INFERRED_COMPOSABLE_DESCRIPTOR, this] == true
+ bindingContext[FrontendWritableSlices.INFERRED_COMPOSABLE_DESCRIPTOR, this] == true
) {
// even though it's not marked, it is inferred as so by the type system (by being passed
// into a parameter marked as composable or a variable typed as one. This isn't much
@@ -543,7 +556,7 @@
val lambdaExpr = functionLiteral.parent as? KtLambdaExpression
if (
lambdaExpr != null &&
- bindingContext[ComposeWritableSlices.INFERRED_COMPOSABLE_LITERAL, lambdaExpr] == true
+ bindingContext[FrontendWritableSlices.INFERRED_COMPOSABLE_LITERAL, lambdaExpr] == true
) {
// this lambda was marked as inferred to be composable
return true
@@ -559,7 +572,7 @@
// otherwise, this is only true if it is a lambda which can be capable of composer
// capture
return bindingContext[
- ComposeWritableSlices.LAMBDA_CAPABLE_OF_COMPOSER_CAPTURE,
+ FrontendWritableSlices.LAMBDA_CAPABLE_OF_COMPOSER_CAPTURE,
this
] == true
}
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposableDeclarationChecker.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/ComposableDeclarationChecker.kt
similarity index 89%
rename from compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposableDeclarationChecker.kt
rename to compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/ComposableDeclarationChecker.kt
index 2cc17dc..c47f997 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposableDeclarationChecker.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/ComposableDeclarationChecker.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2020 The Android Open Source Project
+ * Copyright 2023 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.
@@ -14,13 +14,8 @@
* limitations under the License.
*/
-package androidx.compose.compiler.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin.k1
-import androidx.compose.compiler.plugins.kotlin.ComposeErrors.ABSTRACT_COMPOSABLE_DEFAULT_PARAMETER_VALUE
-import androidx.compose.compiler.plugins.kotlin.ComposeErrors.COMPOSABLE_FUN_MAIN
-import androidx.compose.compiler.plugins.kotlin.ComposeErrors.COMPOSABLE_PROPERTY_BACKING_FIELD
-import androidx.compose.compiler.plugins.kotlin.ComposeErrors.COMPOSABLE_SUSPEND_FUN
-import androidx.compose.compiler.plugins.kotlin.ComposeErrors.COMPOSABLE_VAR
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.builtins.isFunctionType
import org.jetbrains.kotlin.builtins.isSuspendFunctionType
@@ -127,7 +122,9 @@
}
if (descriptor.isSuspend && hasComposableAnnotation) {
context.trace.report(
- COMPOSABLE_SUSPEND_FUN.on(declaration.nameIdentifier ?: declaration)
+ ComposeErrors.COMPOSABLE_SUSPEND_FUN.on(
+ declaration.nameIdentifier ?: declaration
+ )
)
}
@@ -136,7 +133,7 @@
val defaultValue = it.defaultValue
if (defaultValue != null) {
context.trace.report(
- ABSTRACT_COMPOSABLE_DEFAULT_PARAMETER_VALUE.on(defaultValue)
+ ComposeErrors.ABSTRACT_COMPOSABLE_DEFAULT_PARAMETER_VALUE.on(defaultValue)
)
}
}
@@ -161,7 +158,9 @@
).isMain(descriptor)
) {
context.trace.report(
- COMPOSABLE_FUN_MAIN.on(declaration.nameIdentifier ?: declaration)
+ ComposeErrors.COMPOSABLE_FUN_MAIN.on(
+ declaration.nameIdentifier ?: declaration
+ )
)
}
@@ -185,7 +184,7 @@
) {
if (type.hasComposableAnnotation() && type.isSuspendFunctionType) {
context.trace.report(
- COMPOSABLE_SUSPEND_FUN.on(element)
+ ComposeErrors.COMPOSABLE_SUSPEND_FUN.on(element)
)
}
}
@@ -215,10 +214,10 @@
val initializer = declaration.initializer
val name = declaration.nameIdentifier
if (initializer != null && name != null) {
- context.trace.report(COMPOSABLE_PROPERTY_BACKING_FIELD.on(name))
+ context.trace.report(ComposeErrors.COMPOSABLE_PROPERTY_BACKING_FIELD.on(name))
}
if (descriptor.isVar && name != null) {
- context.trace.report(COMPOSABLE_VAR.on(name))
+ context.trace.report(ComposeErrors.COMPOSABLE_VAR.on(name))
}
}
@@ -246,10 +245,10 @@
}
if (!hasComposableAnnotation) return
if (initializer != null && name != null) {
- context.trace.report(COMPOSABLE_PROPERTY_BACKING_FIELD.on(name))
+ context.trace.report(ComposeErrors.COMPOSABLE_PROPERTY_BACKING_FIELD.on(name))
}
if (propertyDescriptor.isVar && name != null) {
- context.trace.report(COMPOSABLE_VAR.on(name))
+ context.trace.report(ComposeErrors.COMPOSABLE_VAR.on(name))
}
}
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposableTargetChecker.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/ComposableTargetChecker.kt
similarity index 95%
rename from compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposableTargetChecker.kt
rename to compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/ComposableTargetChecker.kt
index bd9e032..f39b525 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposableTargetChecker.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/ComposableTargetChecker.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2021 The Android Open Source Project
+ * Copyright 2023 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.
@@ -14,12 +14,11 @@
* limitations under the License.
*/
-package androidx.compose.compiler.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin.k1
-import androidx.compose.compiler.plugins.kotlin.analysis.ComposeWritableSlices
-import androidx.compose.compiler.plugins.kotlin.inference.ErrorReporter
-import androidx.compose.compiler.plugins.kotlin.inference.TypeAdapter
+import androidx.compose.compiler.plugins.kotlin.ComposeFqNames
import androidx.compose.compiler.plugins.kotlin.inference.ApplierInferencer
+import androidx.compose.compiler.plugins.kotlin.inference.ErrorReporter
import androidx.compose.compiler.plugins.kotlin.inference.Item
import androidx.compose.compiler.plugins.kotlin.inference.LazyScheme
import androidx.compose.compiler.plugins.kotlin.inference.LazySchemeStorage
@@ -28,7 +27,9 @@
import androidx.compose.compiler.plugins.kotlin.inference.Open
import androidx.compose.compiler.plugins.kotlin.inference.Scheme
import androidx.compose.compiler.plugins.kotlin.inference.Token
+import androidx.compose.compiler.plugins.kotlin.inference.TypeAdapter
import androidx.compose.compiler.plugins.kotlin.inference.deserializeScheme
+import androidx.compose.compiler.plugins.kotlin.inference.mergeWith
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.backend.jvm.ir.psiElement
import org.jetbrains.kotlin.builtins.isFunctionType
@@ -263,13 +264,13 @@
lazySchemeStorage = object : LazySchemeStorage<InferenceNode> {
override fun getLazyScheme(node: InferenceNode): LazyScheme? =
callContext.trace.bindingContext.get(
- ComposeWritableSlices.COMPOSE_LAZY_SCHEME,
+ FrontendWritableSlices.COMPOSE_LAZY_SCHEME,
node.type
)
override fun storeLazyScheme(node: InferenceNode, value: LazyScheme) {
callContext.trace.record(
- ComposeWritableSlices.COMPOSE_LAZY_SCHEME,
+ FrontendWritableSlices.COMPOSE_LAZY_SCHEME,
node.type,
value
)
@@ -470,24 +471,3 @@
private fun ValueParameterDescriptor.isSamComposable() =
samComposableOrNull()?.hasComposableAnnotation() == true
-
-internal fun Scheme.mergeWith(schemes: List<Scheme>): Scheme {
- if (schemes.isEmpty()) return this
-
- val lazyScheme = LazyScheme(this)
- val bindings = lazyScheme.bindings
-
- fun unifySchemes(a: LazyScheme, b: LazyScheme) {
- bindings.unify(a.target, b.target)
- for ((ap, bp) in a.parameters.zip(b.parameters)) {
- unifySchemes(ap, bp)
- }
- }
-
- schemes.forEach {
- val overrideScheme = LazyScheme(it, bindings = lazyScheme.bindings)
- unifySchemes(lazyScheme, overrideScheme)
- }
-
- return lazyScheme.toScheme()
-}
\ No newline at end of file
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeDiagnosticSuppressor.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/ComposeDiagnosticSuppressor.kt
similarity index 96%
rename from compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeDiagnosticSuppressor.kt
rename to compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/ComposeDiagnosticSuppressor.kt
index e0c1640..fc11167 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeDiagnosticSuppressor.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/ComposeDiagnosticSuppressor.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2019 The Android Open Source Project
+ * Copyright 2023 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.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package androidx.compose.compiler.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin.k1
import com.intellij.openapi.extensions.Extensions
import com.intellij.openapi.project.Project
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeErrorMessages.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/ComposeErrorMessages.kt
similarity index 93%
rename from compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeErrorMessages.kt
rename to compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/ComposeErrorMessages.kt
index b000674..29cea4b 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeErrorMessages.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/ComposeErrorMessages.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2020 The Android Open Source Project
+ * Copyright 2023 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.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package androidx.compose.compiler.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin.k1
import org.jetbrains.kotlin.diagnostics.rendering.CommonRenderers
import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages
@@ -128,5 +128,10 @@
ComposeErrors.COMPOSE_INVALID_DELEGATE,
"Composable setValue operator is not currently supported."
)
+ MAP.put(
+ ComposeErrors.REDUNDANT_COMPOSABLE_ANNOTATION,
+ "Invalid `@Composable` annotation on inline lambda." +
+ " This will become an error in Kotlin 2.0."
+ )
}
}
\ No newline at end of file
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeErrors.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/ComposeErrors.kt
similarity index 95%
rename from compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeErrors.kt
rename to compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/ComposeErrors.kt
index 2d7e47a..1547130 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeErrors.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/ComposeErrors.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2020 The Android Open Source Project
+ * Copyright 2023 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.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package androidx.compose.compiler.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin.k1
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.CallableDescriptor
@@ -160,6 +160,9 @@
Severity.ERROR
)
+ @JvmField
+ val REDUNDANT_COMPOSABLE_ANNOTATION = DiagnosticFactory0.create<PsiElement>(Severity.WARNING)
+
init {
Errors.Initializer.initializeFactoryNamesAndDefaultErrorMessages(
ComposeErrors::class.java,
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeTypeResolutionInterceptorExtension.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/ComposeTypeResolutionInterceptorExtension.kt
similarity index 85%
rename from compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeTypeResolutionInterceptorExtension.kt
rename to compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/ComposeTypeResolutionInterceptorExtension.kt
index b9912be..182f8ef 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeTypeResolutionInterceptorExtension.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/ComposeTypeResolutionInterceptorExtension.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2019 The Android Open Source Project
+ * Copyright 2023 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.
@@ -14,10 +14,8 @@
* limitations under the License.
*/
-package androidx.compose.compiler.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin.k1
-import androidx.compose.compiler.plugins.kotlin.analysis.ComposeWritableSlices
-import androidx.compose.compiler.plugins.kotlin.analysis.ComposeWritableSlices.INFERRED_COMPOSABLE_DESCRIPTOR
import org.jetbrains.kotlin.descriptors.impl.AnonymousFunctionDescriptor
import org.jetbrains.kotlin.extensions.internal.TypeResolutionInterceptorExtension
import org.jetbrains.kotlin.psi.KtElement
@@ -48,7 +46,11 @@
// If the expected type has an @Composable annotation then the literal function
// expression should infer a an @Composable annotation
descriptor.annotateAsComposable(context.scope.ownerDescriptor.module).also {
- context.trace.record(INFERRED_COMPOSABLE_DESCRIPTOR, it, true)
+ context.trace.record(
+ FrontendWritableSlices.INFERRED_COMPOSABLE_DESCRIPTOR,
+ it,
+ true
+ )
}
} else {
descriptor
@@ -67,7 +69,7 @@
element.getAnnotationEntries().hasComposableAnnotation(context.trace.bindingContext) ||
context.hasComposableExpectedType(element)
) {
- context.trace.record(ComposeWritableSlices.INFERRED_COMPOSABLE_LITERAL, element, true)
+ context.trace.record(FrontendWritableSlices.INFERRED_COMPOSABLE_LITERAL, element, true)
return resultType.makeComposable(context.scope.ownerDescriptor.module)
}
return resultType
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/FrontendWritableSlices.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/FrontendWritableSlices.kt
new file mode 100644
index 0000000..24bd498
--- /dev/null
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/FrontendWritableSlices.kt
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.compose.compiler.plugins.kotlin.k1
+
+import androidx.compose.compiler.plugins.kotlin.inference.LazyScheme
+import org.jetbrains.kotlin.descriptors.FunctionDescriptor
+import org.jetbrains.kotlin.psi.KtLambdaExpression
+import org.jetbrains.kotlin.util.slicedMap.BasicWritableSlice
+import org.jetbrains.kotlin.util.slicedMap.RewritePolicy
+import org.jetbrains.kotlin.util.slicedMap.WritableSlice
+
+object FrontendWritableSlices {
+ val INFERRED_COMPOSABLE_DESCRIPTOR: WritableSlice<FunctionDescriptor, Boolean> =
+ BasicWritableSlice(RewritePolicy.DO_NOTHING)
+ val LAMBDA_CAPABLE_OF_COMPOSER_CAPTURE: WritableSlice<FunctionDescriptor, Boolean> =
+ BasicWritableSlice(RewritePolicy.DO_NOTHING)
+ val INFERRED_COMPOSABLE_LITERAL: WritableSlice<KtLambdaExpression, Boolean> =
+ BasicWritableSlice(RewritePolicy.DO_NOTHING)
+ val COMPOSE_LAZY_SCHEME: WritableSlice<Any, LazyScheme> =
+ BasicWritableSlice(RewritePolicy.DO_NOTHING)
+}
\ No newline at end of file
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableSymbolRemapper.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableSymbolRemapper.kt
index 6974105..ee0a890 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableSymbolRemapper.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableSymbolRemapper.kt
@@ -16,7 +16,7 @@
package androidx.compose.compiler.plugins.kotlin.lower
-import androidx.compose.compiler.plugins.kotlin.hasComposableAnnotation
+import androidx.compose.compiler.plugins.kotlin.k1.hasComposableAnnotation
import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.descriptors.ParameterDescriptor
@@ -43,6 +43,9 @@
*
* This conversion is only required with decoys, but can be applied to the JVM as well for
* consistency.
+ *
+ * This is K1 specific. In K2, descriptors are only there for backwards compatibility and
+ * always reflect the IR.
*/
class ComposableSymbolRemapper : DeepCopySymbolRemapper(
object : DescriptorsRemapper {
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableTargetAnnotationsTransformer.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableTargetAnnotationsTransformer.kt
index 2eb7e75..32f328b 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableTargetAnnotationsTransformer.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableTargetAnnotationsTransformer.kt
@@ -23,7 +23,6 @@
import androidx.compose.compiler.plugins.kotlin.analysis.ComposeWritableSlices
import androidx.compose.compiler.plugins.kotlin.inference.ApplierInferencer
import androidx.compose.compiler.plugins.kotlin.inference.ErrorReporter
-import androidx.compose.compiler.plugins.kotlin.inference.TypeAdapter
import androidx.compose.compiler.plugins.kotlin.inference.Item
import androidx.compose.compiler.plugins.kotlin.inference.LazyScheme
import androidx.compose.compiler.plugins.kotlin.inference.LazySchemeStorage
@@ -32,9 +31,10 @@
import androidx.compose.compiler.plugins.kotlin.inference.Open
import androidx.compose.compiler.plugins.kotlin.inference.Scheme
import androidx.compose.compiler.plugins.kotlin.inference.Token
+import androidx.compose.compiler.plugins.kotlin.inference.TypeAdapter
import androidx.compose.compiler.plugins.kotlin.inference.deserializeScheme
+import androidx.compose.compiler.plugins.kotlin.inference.mergeWith
import androidx.compose.compiler.plugins.kotlin.irTrace
-import androidx.compose.compiler.plugins.kotlin.mergeWith
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Modality
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/CopyDefaultValuesFromExpectLowering.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/CopyDefaultValuesFromExpectLowering.kt
index 1ce5f87..6226df2 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/CopyDefaultValuesFromExpectLowering.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/CopyDefaultValuesFromExpectLowering.kt
@@ -76,8 +76,7 @@
* only for functions marked with @Composable annotation or
* for functions with @Composable lambdas in parameters.
*
- * TODO(karpovich): When adding support for FIR we'll need to use different API.
- * Likely: fun FirBasedSymbol<*>.getSingleCompatibleExpectForActualOrNull(): FirBasedSymbol<*>?
+ * This lowering is K1 specific and should not be run in K2.
*/
@OptIn(ObsoleteDescriptorBasedAPI::class)
class CopyDefaultValuesFromExpectLowering(
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrInlineReferenceLocator.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrInlineReferenceLocator.kt
index f3b721c..7870f61 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrInlineReferenceLocator.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrInlineReferenceLocator.kt
@@ -61,7 +61,7 @@
val parent = declaration.parent as? IrFunction
if (parent?.isInlineFunctionCall(context) == true &&
declaration.isInlineParameter()) {
- declaration.defaultValue?.expression?.unwrapInlineLambda()?.let {
+ declaration.defaultValue?.expression?.unwrapLambda()?.let {
inlineLambdaToParameter[it] = declaration
}
}
@@ -74,7 +74,7 @@
for (parameter in function.valueParameters) {
if (parameter.isInlineParameter()) {
expression.getValueArgument(parameter.index)
- ?.unwrapInlineLambda()
+ ?.unwrapLambda()
?.let { inlineLambdaToParameter[it] = parameter }
}
}
@@ -96,8 +96,8 @@
it in context.irBuiltIns.primitiveArraysToPrimitiveTypes
}
-private fun IrExpression.unwrapInlineLambda(): IrFunctionSymbol? = when {
- this is IrBlock && origin.isInlinable ->
+fun IrExpression.unwrapLambda(): IrFunctionSymbol? = when {
+ this is IrBlock && origin.isLambdaBlockOrigin ->
(statements.lastOrNull() as? IrFunctionReference)?.symbol
this is IrFunctionExpression ->
@@ -107,6 +107,6 @@
null
}
-private val IrStatementOrigin?.isInlinable: Boolean
+private val IrStatementOrigin?.isLambdaBlockOrigin: Boolean
get() = isLambda || this == IrStatementOrigin.ADAPTED_FUNCTION_REFERENCE ||
this == IrStatementOrigin.SUSPEND_CONVERSION
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrSourcePrinter.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrSourcePrinter.kt
index 01fc0be..ccf22cf 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrSourcePrinter.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrSourcePrinter.kt
@@ -23,6 +23,7 @@
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.ir.IrBuiltIns
import org.jetbrains.kotlin.ir.IrElement
+import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.IrAnnotationContainer
import org.jetbrains.kotlin.ir.declarations.IrClass
@@ -89,6 +90,7 @@
import org.jetbrains.kotlin.ir.expressions.IrWhen
import org.jetbrains.kotlin.ir.expressions.IrWhileLoop
import org.jetbrains.kotlin.ir.expressions.impl.IrIfThenElseImpl
+import org.jetbrains.kotlin.ir.symbols.IrReturnTargetSymbol
import org.jetbrains.kotlin.ir.symbols.IrTypeAliasSymbol
import org.jetbrains.kotlin.ir.types.IrDynamicType
import org.jetbrains.kotlin.ir.types.IrErrorType
@@ -115,6 +117,7 @@
import org.jetbrains.kotlin.ir.util.statements
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
import org.jetbrains.kotlin.ir.visitors.acceptVoid
+import org.jetbrains.kotlin.name.SpecialNames
import org.jetbrains.kotlin.types.Variance
import org.jetbrains.kotlin.utils.Printer
@@ -516,11 +519,16 @@
val arg = getValueArgument(i)
if (arg != null) {
val param = symbol.owner.valueParameters[i]
- val isTrailingLambda = i == symbol.owner.valueParameters.size - 1 &&
- (
- arg is IrFunctionExpression ||
- (arg is IrBlock && arg.origin == IrStatementOrigin.LAMBDA)
- )
+ val isLambda = arg is IrFunctionExpression ||
+ (arg is IrBlock &&
+ (arg.origin == IrStatementOrigin.LAMBDA ||
+ arg.origin == IrStatementOrigin.ADAPTED_FUNCTION_REFERENCE))
+ if (isLambda) {
+ arg.unwrapLambda()?.let {
+ returnTargetToCall[it] = this
+ }
+ }
+ val isTrailingLambda = i == symbol.owner.valueParameters.size - 1 && isLambda
if (isTrailingLambda) {
trailingLambda = arg
} else {
@@ -801,33 +809,42 @@
println("}")
}
+ // Map local return targets to the corresponding function call.
+ // This is used to print qualified returns.
+ private val returnTargetToCall =
+ mutableMapOf<IrReturnTargetSymbol, IrFunctionAccessExpression>()
+
+ private val IrFunction.isLambda: Boolean
+ get() = name.asString() == SpecialNames.ANONYMOUS_STRING ||
+ origin == IrDeclarationOrigin.ADAPTER_FOR_CALLABLE_REFERENCE
+
+ private fun IrExpression.isLastStatementIn(statements: List<IrStatement>): Boolean {
+ val lastStatement = statements.lastOrNull()
+ return when {
+ lastStatement === this -> true
+ lastStatement is IrBlock -> isLastStatementIn(lastStatement.statements)
+ else -> false
+ }
+ }
+
+ private fun IrExpression.isLastStatementIn(function: IrFunction): Boolean =
+ function.body?.let { isLastStatementIn(it.statements) } ?: false
+
override fun visitReturn(expression: IrReturn) {
val value = expression.value
- // only print the return statement directly if it is not a lambda
+ // Only print the return statement directly if it is not the last statement in a lambda
val returnTarget = expression.returnTargetSymbol.owner
- if (returnTarget !is IrFunction ||
- returnTarget.origin != IrDeclarationOrigin.ADAPTER_FOR_CALLABLE_REFERENCE) {
-
- val isLastStatementInLambda =
- returnTarget is IrFunction &&
- returnTarget.name.asString() == "<anonymous>" &&
- returnTarget.body?.statements?.last().let {
- it == expression || (it is IrBlock && it.statements.last() == expression)
- }
-
- if (!isLastStatementInLambda) {
- print("return ")
- }
+ if (returnTarget !is IrFunction || !returnTarget.isLambda ||
+ !expression.isLastStatementIn(returnTarget)) {
+ val suffix = returnTargetToCall[returnTarget.symbol]?.let {
+ "@${it.symbol.owner.name}"
+ } ?: ""
+ print("return$suffix ")
}
- if (expression.type.isUnit() || value.type.isUnit()) {
- if (value is IrGetObjectValue) {
- return
- } else {
- value.print()
- }
- } else {
- value.print()
+ if (value.type.isUnit() && value is IrGetObjectValue) {
+ return
}
+ value.print()
}
override fun visitBlock(expression: IrBlock) {
diff --git a/compose/compiler/compiler-hosted/src/main/resources/META-INF/services/org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages$Extension b/compose/compiler/compiler-hosted/src/main/resources/META-INF/services/org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages$Extension
index bc7e073..d5259a2 100644
--- a/compose/compiler/compiler-hosted/src/main/resources/META-INF/services/org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages$Extension
+++ b/compose/compiler/compiler-hosted/src/main/resources/META-INF/services/org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages$Extension
@@ -1 +1 @@
-androidx.compose.compiler.plugins.kotlin.ComposeErrorMessages
\ No newline at end of file
+androidx.compose.compiler.plugins.kotlin.k1.ComposeErrorMessages
\ No newline at end of file
diff --git a/compose/compiler/compiler/integration-tests/src/test/kotlin/androidx/compose/compiler/test/CompilerPluginRuntimeVersionCheckTest.kt b/compose/compiler/compiler/integration-tests/src/test/kotlin/androidx/compose/compiler/test/CompilerPluginRuntimeVersionCheckTest.kt
index fd0bf61..9559f16 100644
--- a/compose/compiler/compiler/integration-tests/src/test/kotlin/androidx/compose/compiler/test/CompilerPluginRuntimeVersionCheckTest.kt
+++ b/compose/compiler/compiler/integration-tests/src/test/kotlin/androidx/compose/compiler/test/CompilerPluginRuntimeVersionCheckTest.kt
@@ -17,6 +17,10 @@
package androidx.compose.compiler.test
import androidx.testutils.gradle.ProjectSetupRule
+import java.io.File
+import javax.xml.parsers.DocumentBuilderFactory
+import javax.xml.xpath.XPathConstants
+import javax.xml.xpath.XPathFactory
import org.gradle.testkit.runner.GradleRunner
import org.gradle.testkit.runner.TaskOutcome
import org.junit.Assert.assertEquals
@@ -26,10 +30,6 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import java.io.File
-import javax.xml.parsers.DocumentBuilderFactory
-import javax.xml.xpath.XPathConstants
-import javax.xml.xpath.XPathFactory
@RunWith(JUnit4::class)
class CompilerPluginRuntimeVersionCheckTest {
diff --git a/compose/desktop/desktop/build.gradle b/compose/desktop/desktop/build.gradle
index 46e9c83..2ff1640 100644
--- a/compose/desktop/desktop/build.gradle
+++ b/compose/desktop/desktop/build.gradle
@@ -98,7 +98,7 @@
}
androidx {
- name = "Jetpack Compose desktop implementation"
+ name = "Compose Desktop"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2020"
legacyDisableKotlinStrictApiMode = true
diff --git a/compose/desktop/desktop/samples/src/jvmMain/kotlin/androidx/compose/desktop/examples/example1/Main.jvm.kt b/compose/desktop/desktop/samples/src/jvmMain/kotlin/androidx/compose/desktop/examples/example1/Main.jvm.kt
index 584efe8..8bf13c0 100644
--- a/compose/desktop/desktop/samples/src/jvmMain/kotlin/androidx/compose/desktop/examples/example1/Main.jvm.kt
+++ b/compose/desktop/desktop/samples/src/jvmMain/kotlin/androidx/compose/desktop/examples/example1/Main.jvm.kt
@@ -24,7 +24,6 @@
import androidx.compose.foundation.Image
import androidx.compose.foundation.ScrollState
import androidx.compose.foundation.VerticalScrollbar
-import androidx.compose.foundation.mouseClickable
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
@@ -42,6 +41,7 @@
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.rememberLazyListState
+import androidx.compose.foundation.mouseClickable
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.rememberScrollbarAdapter
import androidx.compose.foundation.shape.CircleShape
@@ -75,29 +75,29 @@
import androidx.compose.ui.Alignment
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
-import androidx.compose.ui.focus.focusProperties
import androidx.compose.ui.focus.FocusRequester
+import androidx.compose.ui.focus.focusProperties
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Shadow
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.input.key.Key
-import androidx.compose.ui.input.pointer.isAltPressed
-import androidx.compose.ui.input.pointer.isCtrlPressed
-import androidx.compose.ui.input.pointer.isMetaPressed
-import androidx.compose.ui.input.pointer.isPrimaryPressed
-import androidx.compose.ui.input.pointer.isSecondaryPressed
-import androidx.compose.ui.input.pointer.isShiftPressed
-import androidx.compose.ui.input.pointer.isTertiaryPressed
import androidx.compose.ui.input.key.isMetaPressed
import androidx.compose.ui.input.key.isShiftPressed
import androidx.compose.ui.input.key.key
import androidx.compose.ui.input.key.onPreviewKeyEvent
import androidx.compose.ui.input.pointer.PointerEventType
import androidx.compose.ui.input.pointer.PointerIcon
+import androidx.compose.ui.input.pointer.isAltPressed
import androidx.compose.ui.input.pointer.isBackPressed
+import androidx.compose.ui.input.pointer.isCtrlPressed
import androidx.compose.ui.input.pointer.isForwardPressed
+import androidx.compose.ui.input.pointer.isMetaPressed
+import androidx.compose.ui.input.pointer.isPrimaryPressed
+import androidx.compose.ui.input.pointer.isSecondaryPressed
+import androidx.compose.ui.input.pointer.isShiftPressed
+import androidx.compose.ui.input.pointer.isTertiaryPressed
import androidx.compose.ui.input.pointer.pointerHoverIcon
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.platform.LocalUriHandler
@@ -118,15 +118,15 @@
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.em
import androidx.compose.ui.unit.sp
-import androidx.compose.ui.window.Window
import androidx.compose.ui.window.FrameWindowScope
+import androidx.compose.ui.window.Window
import androidx.compose.ui.window.WindowState
import androidx.compose.ui.window.launchApplication
import androidx.compose.ui.window.rememberWindowState
import androidx.compose.ui.window.singleWindowApplication
+import kotlin.random.Random
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.GlobalScope
-import kotlin.random.Random
private const val title = "Desktop Compose Elements"
diff --git a/compose/desktop/desktop/samples/src/jvmMain/kotlin/androidx/compose/desktop/examples/popupexample/AppContent.jvm.kt b/compose/desktop/desktop/samples/src/jvmMain/kotlin/androidx/compose/desktop/examples/popupexample/AppContent.jvm.kt
index 2b9d6c4..912f063 100644
--- a/compose/desktop/desktop/samples/src/jvmMain/kotlin/androidx/compose/desktop/examples/popupexample/AppContent.jvm.kt
+++ b/compose/desktop/desktop/samples/src/jvmMain/kotlin/androidx/compose/desktop/examples/popupexample/AppContent.jvm.kt
@@ -17,9 +17,9 @@
package androidx.compose.desktop.examples.popupexample
import androidx.compose.foundation.ExperimentalFoundationApi
-import androidx.compose.foundation.background
import androidx.compose.foundation.TooltipArea
import androidx.compose.foundation.TooltipPlacement
+import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
diff --git a/compose/desktop/desktop/samples/src/jvmMain/kotlin/androidx/compose/desktop/examples/swingexample/Main.jvm.kt b/compose/desktop/desktop/samples/src/jvmMain/kotlin/androidx/compose/desktop/examples/swingexample/Main.jvm.kt
index cb1aa60..06ddea7 100644
--- a/compose/desktop/desktop/samples/src/jvmMain/kotlin/androidx/compose/desktop/examples/swingexample/Main.jvm.kt
+++ b/compose/desktop/desktop/samples/src/jvmMain/kotlin/androidx/compose/desktop/examples/swingexample/Main.jvm.kt
@@ -47,13 +47,11 @@
import androidx.compose.ui.window.Window
import androidx.compose.ui.window.launchApplication
import androidx.compose.ui.window.rememberWindowState
-import kotlinx.coroutines.DelicateCoroutinesApi
-import kotlinx.coroutines.GlobalScope
import java.awt.BorderLayout
import java.awt.Color as awtColor
import java.awt.Component
-import java.awt.GridLayout
import java.awt.Dimension
+import java.awt.GridLayout
import java.awt.event.ActionEvent
import java.awt.event.ActionListener
import javax.swing.JButton
@@ -61,6 +59,8 @@
import javax.swing.JPanel
import javax.swing.SwingUtilities
import javax.swing.WindowConstants
+import kotlinx.coroutines.DelicateCoroutinesApi
+import kotlinx.coroutines.GlobalScope
val northClicks = mutableStateOf(0)
val westClicks = mutableStateOf(0)
diff --git a/compose/desktop/desktop/samples/src/jvmMain/kotlin/androidx/compose/desktop/examples/windowapi/Examples.jvm.kt b/compose/desktop/desktop/samples/src/jvmMain/kotlin/androidx/compose/desktop/examples/windowapi/Examples.jvm.kt
index e360681..a74900c 100644
--- a/compose/desktop/desktop/samples/src/jvmMain/kotlin/androidx/compose/desktop/examples/windowapi/Examples.jvm.kt
+++ b/compose/desktop/desktop/samples/src/jvmMain/kotlin/androidx/compose/desktop/examples/windowapi/Examples.jvm.kt
@@ -60,6 +60,12 @@
import androidx.compose.ui.window.launchApplication
import androidx.compose.ui.window.rememberNotification
import androidx.compose.ui.window.rememberWindowState
+import java.awt.Dimension
+import java.awt.FileDialog
+import java.awt.Frame
+import java.awt.event.WindowAdapter
+import java.awt.event.WindowEvent
+import javax.imageio.ImageIO
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
@@ -67,12 +73,6 @@
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withContext
-import java.awt.Dimension
-import java.awt.FileDialog
-import java.awt.Frame
-import java.awt.event.WindowAdapter
-import java.awt.event.WindowEvent
-import javax.imageio.ImageIO
@OptIn(DelicateCoroutinesApi::class)
fun helloWorld() = GlobalScope.launchApplication {
diff --git a/compose/foundation/foundation-layout/api/current.txt b/compose/foundation/foundation-layout/api/current.txt
index c8e0c04..147caf6 100644
--- a/compose/foundation/foundation-layout/api/current.txt
+++ b/compose/foundation/foundation-layout/api/current.txt
@@ -74,8 +74,8 @@
}
public final class BoxKt {
- method @androidx.compose.runtime.Composable public static inline void Box(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment contentAlignment, optional boolean propagateMinConstraints, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void Box(androidx.compose.ui.Modifier modifier);
+ method @androidx.compose.runtime.Composable public static inline void Box(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment contentAlignment, optional boolean propagateMinConstraints, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
}
@androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public interface BoxScope {
@@ -142,10 +142,10 @@
method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier absolutePadding(androidx.compose.ui.Modifier, optional float left, optional float top, optional float right, optional float bottom);
method @androidx.compose.runtime.Stable public static float calculateEndPadding(androidx.compose.foundation.layout.PaddingValues, androidx.compose.ui.unit.LayoutDirection layoutDirection);
method @androidx.compose.runtime.Stable public static float calculateStartPadding(androidx.compose.foundation.layout.PaddingValues, androidx.compose.ui.unit.LayoutDirection layoutDirection);
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, optional float start, optional float top, optional float end, optional float bottom);
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, optional float horizontal, optional float vertical);
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, float all);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.PaddingValues paddingValues);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, float all);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, optional float horizontal, optional float vertical);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, optional float start, optional float top, optional float end, optional float bottom);
}
@androidx.compose.runtime.Stable public interface PaddingValues {
@@ -217,8 +217,8 @@
}
public final class WindowInsetsKt {
- method public static androidx.compose.foundation.layout.WindowInsets WindowInsets(optional int left, optional int top, optional int right, optional int bottom);
method public static androidx.compose.foundation.layout.WindowInsets WindowInsets(optional float left, optional float top, optional float right, optional float bottom);
+ method public static androidx.compose.foundation.layout.WindowInsets WindowInsets(optional int left, optional int top, optional int right, optional int bottom);
method public static androidx.compose.foundation.layout.WindowInsets add(androidx.compose.foundation.layout.WindowInsets, androidx.compose.foundation.layout.WindowInsets insets);
method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static androidx.compose.foundation.layout.PaddingValues asPaddingValues(androidx.compose.foundation.layout.WindowInsets);
method public static androidx.compose.foundation.layout.PaddingValues asPaddingValues(androidx.compose.foundation.layout.WindowInsets, androidx.compose.ui.unit.Density density);
diff --git a/compose/foundation/foundation-layout/api/public_plus_experimental_current.txt b/compose/foundation/foundation-layout/api/public_plus_experimental_current.txt
index 3d72dbe..ec4aa19d 100644
--- a/compose/foundation/foundation-layout/api/public_plus_experimental_current.txt
+++ b/compose/foundation/foundation-layout/api/public_plus_experimental_current.txt
@@ -74,8 +74,8 @@
}
public final class BoxKt {
- method @androidx.compose.runtime.Composable public static inline void Box(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment contentAlignment, optional boolean propagateMinConstraints, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void Box(androidx.compose.ui.Modifier modifier);
+ method @androidx.compose.runtime.Composable public static inline void Box(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment contentAlignment, optional boolean propagateMinConstraints, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
}
@androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public interface BoxScope {
@@ -167,10 +167,10 @@
method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier absolutePadding(androidx.compose.ui.Modifier, optional float left, optional float top, optional float right, optional float bottom);
method @androidx.compose.runtime.Stable public static float calculateEndPadding(androidx.compose.foundation.layout.PaddingValues, androidx.compose.ui.unit.LayoutDirection layoutDirection);
method @androidx.compose.runtime.Stable public static float calculateStartPadding(androidx.compose.foundation.layout.PaddingValues, androidx.compose.ui.unit.LayoutDirection layoutDirection);
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, optional float start, optional float top, optional float end, optional float bottom);
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, optional float horizontal, optional float vertical);
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, float all);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.PaddingValues paddingValues);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, float all);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, optional float horizontal, optional float vertical);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, optional float start, optional float top, optional float end, optional float bottom);
}
@androidx.compose.runtime.Stable public interface PaddingValues {
@@ -246,8 +246,8 @@
}
public final class WindowInsetsKt {
- method public static androidx.compose.foundation.layout.WindowInsets WindowInsets(optional int left, optional int top, optional int right, optional int bottom);
method public static androidx.compose.foundation.layout.WindowInsets WindowInsets(optional float left, optional float top, optional float right, optional float bottom);
+ method public static androidx.compose.foundation.layout.WindowInsets WindowInsets(optional int left, optional int top, optional int right, optional int bottom);
method public static androidx.compose.foundation.layout.WindowInsets add(androidx.compose.foundation.layout.WindowInsets, androidx.compose.foundation.layout.WindowInsets insets);
method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static androidx.compose.foundation.layout.PaddingValues asPaddingValues(androidx.compose.foundation.layout.WindowInsets);
method public static androidx.compose.foundation.layout.PaddingValues asPaddingValues(androidx.compose.foundation.layout.WindowInsets, androidx.compose.ui.unit.Density density);
@@ -257,10 +257,10 @@
}
public final class WindowInsetsPaddingKt {
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier consumeWindowInsets(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.WindowInsets insets);
method @androidx.compose.foundation.layout.ExperimentalLayoutApi @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier consumeWindowInsets(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.PaddingValues paddingValues);
- method @Deprecated @androidx.compose.foundation.layout.ExperimentalLayoutApi @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier consumedWindowInsets(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.WindowInsets insets);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier consumeWindowInsets(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.WindowInsets insets);
method @Deprecated @androidx.compose.foundation.layout.ExperimentalLayoutApi @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier consumedWindowInsets(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.PaddingValues paddingValues);
+ method @Deprecated @androidx.compose.foundation.layout.ExperimentalLayoutApi @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier consumedWindowInsets(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.WindowInsets insets);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier onConsumedWindowInsetsChanged(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.WindowInsets,kotlin.Unit> block);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier windowInsetsPadding(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.WindowInsets insets);
method @Deprecated @androidx.compose.foundation.layout.ExperimentalLayoutApi @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier withConsumedWindowInsets(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.WindowInsets,kotlin.Unit> block);
diff --git a/compose/foundation/foundation-layout/api/restricted_current.txt b/compose/foundation/foundation-layout/api/restricted_current.txt
index 03cdfb3..ee1efa2 100644
--- a/compose/foundation/foundation-layout/api/restricted_current.txt
+++ b/compose/foundation/foundation-layout/api/restricted_current.txt
@@ -74,8 +74,8 @@
}
public final class BoxKt {
- method @androidx.compose.runtime.Composable public static inline void Box(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment contentAlignment, optional boolean propagateMinConstraints, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void Box(androidx.compose.ui.Modifier modifier);
+ method @androidx.compose.runtime.Composable public static inline void Box(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment contentAlignment, optional boolean propagateMinConstraints, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable @kotlin.PublishedApi internal static androidx.compose.ui.layout.MeasurePolicy rememberBoxMeasurePolicy(androidx.compose.ui.Alignment alignment, boolean propagateMinConstraints);
}
@@ -150,10 +150,10 @@
method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier absolutePadding(androidx.compose.ui.Modifier, optional float left, optional float top, optional float right, optional float bottom);
method @androidx.compose.runtime.Stable public static float calculateEndPadding(androidx.compose.foundation.layout.PaddingValues, androidx.compose.ui.unit.LayoutDirection layoutDirection);
method @androidx.compose.runtime.Stable public static float calculateStartPadding(androidx.compose.foundation.layout.PaddingValues, androidx.compose.ui.unit.LayoutDirection layoutDirection);
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, optional float start, optional float top, optional float end, optional float bottom);
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, optional float horizontal, optional float vertical);
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, float all);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, androidx.compose.foundation.layout.PaddingValues paddingValues);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, float all);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, optional float horizontal, optional float vertical);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier padding(androidx.compose.ui.Modifier, optional float start, optional float top, optional float end, optional float bottom);
}
@androidx.compose.runtime.Stable public interface PaddingValues {
@@ -227,8 +227,8 @@
}
public final class WindowInsetsKt {
- method public static androidx.compose.foundation.layout.WindowInsets WindowInsets(optional int left, optional int top, optional int right, optional int bottom);
method public static androidx.compose.foundation.layout.WindowInsets WindowInsets(optional float left, optional float top, optional float right, optional float bottom);
+ method public static androidx.compose.foundation.layout.WindowInsets WindowInsets(optional int left, optional int top, optional int right, optional int bottom);
method public static androidx.compose.foundation.layout.WindowInsets add(androidx.compose.foundation.layout.WindowInsets, androidx.compose.foundation.layout.WindowInsets insets);
method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static androidx.compose.foundation.layout.PaddingValues asPaddingValues(androidx.compose.foundation.layout.WindowInsets);
method public static androidx.compose.foundation.layout.PaddingValues asPaddingValues(androidx.compose.foundation.layout.WindowInsets, androidx.compose.ui.unit.Density density);
diff --git a/compose/foundation/foundation-layout/benchmark/src/androidTest/java/androidx/compose/foundation/layout/benchmark/SpacingBenchmark.kt b/compose/foundation/foundation-layout/benchmark/src/androidTest/java/androidx/compose/foundation/layout/benchmark/SpacingBenchmark.kt
index 182d5b4..d0d5564 100644
--- a/compose/foundation/foundation-layout/benchmark/src/androidTest/java/androidx/compose/foundation/layout/benchmark/SpacingBenchmark.kt
+++ b/compose/foundation/foundation-layout/benchmark/src/androidTest/java/androidx/compose/foundation/layout/benchmark/SpacingBenchmark.kt
@@ -37,16 +37,16 @@
import androidx.compose.testutils.benchmark.toggleStateBenchmarkLayout
import androidx.compose.testutils.benchmark.toggleStateBenchmarkMeasure
import androidx.compose.testutils.benchmark.toggleStateBenchmarkRecompose
-import androidx.compose.ui.layout.Layout
import androidx.compose.ui.Modifier
+import androidx.compose.ui.layout.Layout
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.offset
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@LargeTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/foundation/foundation-layout/samples/build.gradle b/compose/foundation/foundation-layout/samples/build.gradle
index dd396a9..3e07527 100644
--- a/compose/foundation/foundation-layout/samples/build.gradle
+++ b/compose/foundation/foundation-layout/samples/build.gradle
@@ -39,7 +39,7 @@
}
androidx {
- name = "AndroidX Compose UI Core Layout Classes Samples"
+ name = "Compose UI Core Layout Classes Samples"
type = LibraryType.SAMPLES
inceptionYear = "2019"
description = "Contains the sample code for the Androidx Compose UI Core Layout Classes"
diff --git a/compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/AspectRatioSample.kt b/compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/AspectRatioSample.kt
index 9063cd8..7a7f5b5 100644
--- a/compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/AspectRatioSample.kt
+++ b/compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/AspectRatioSample.kt
@@ -17,8 +17,8 @@
package androidx.compose.foundation.layout.samples
import androidx.annotation.Sampled
-import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.aspectRatio
import androidx.compose.foundation.layout.width
import androidx.compose.runtime.Composable
diff --git a/compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/BoxWithConstraintsSample.kt b/compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/BoxWithConstraintsSample.kt
index 8c17d20..0222c88 100644
--- a/compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/BoxWithConstraintsSample.kt
+++ b/compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/BoxWithConstraintsSample.kt
@@ -17,8 +17,8 @@
package androidx.compose.foundation.layout.samples
import androidx.annotation.Sampled
-import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxWithConstraints
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.size
diff --git a/compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/ColumnSample.kt b/compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/ColumnSample.kt
index 66fd1c0..c4cfe09 100644
--- a/compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/ColumnSample.kt
+++ b/compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/ColumnSample.kt
@@ -17,18 +17,18 @@
package androidx.compose.foundation.layout.samples
import androidx.annotation.Sampled
-import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
-import androidx.compose.ui.layout.Layout
import androidx.compose.ui.Modifier
-import androidx.compose.ui.layout.VerticalAlignmentLine
import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.layout.Layout
+import androidx.compose.ui.layout.VerticalAlignmentLine
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import kotlin.math.max
diff --git a/compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/LayoutPaddingSample.kt b/compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/LayoutPaddingSample.kt
index b34d40f..86e4ea6 100644
--- a/compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/LayoutPaddingSample.kt
+++ b/compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/LayoutPaddingSample.kt
@@ -18,8 +18,8 @@
import androidx.annotation.Sampled
import androidx.compose.foundation.background
-import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.absolutePadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
diff --git a/compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/SizeModifierSample.kt b/compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/SizeModifierSample.kt
index 90a175c..ac4662d 100644
--- a/compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/SizeModifierSample.kt
+++ b/compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/SizeModifierSample.kt
@@ -24,14 +24,14 @@
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.requiredHeight
import androidx.compose.foundation.layout.height
-import androidx.compose.foundation.layout.size
-import androidx.compose.foundation.layout.sizeIn
-import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.layout.requiredHeight
import androidx.compose.foundation.layout.requiredSize
import androidx.compose.foundation.layout.requiredSizeIn
import androidx.compose.foundation.layout.requiredWidth
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.sizeIn
+import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.foundation.layout.wrapContentWidth
diff --git a/compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/SpacerSample.kt b/compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/SpacerSample.kt
index fe7d2d5..ac36b09 100644
--- a/compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/SpacerSample.kt
+++ b/compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/SpacerSample.kt
@@ -17,8 +17,8 @@
package androidx.compose.foundation.layout.samples
import androidx.annotation.Sampled
-import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.size
diff --git a/compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/WindowInsetsPaddingSample.kt b/compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/WindowInsetsPaddingSample.kt
index ae72f5e..44ff60d 100644
--- a/compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/WindowInsetsPaddingSample.kt
+++ b/compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/WindowInsetsPaddingSample.kt
@@ -24,8 +24,8 @@
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.ExperimentalLayoutApi
import androidx.compose.foundation.layout.MutableWindowInsets
-import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.asPaddingValues
import androidx.compose.foundation.layout.captionBarPadding
import androidx.compose.foundation.layout.consumeWindowInsets
@@ -34,7 +34,6 @@
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.ime
import androidx.compose.foundation.layout.imePadding
-import androidx.compose.foundation.layout.windowInsetsPadding
import androidx.compose.foundation.layout.mandatorySystemGesturesPadding
import androidx.compose.foundation.layout.navigationBars
import androidx.compose.foundation.layout.navigationBarsPadding
@@ -51,6 +50,7 @@
import androidx.compose.foundation.layout.systemGesturesPadding
import androidx.compose.foundation.layout.union
import androidx.compose.foundation.layout.waterfallPadding
+import androidx.compose.foundation.layout.windowInsetsPadding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
diff --git a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/AlignmentLineTest.kt b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/AlignmentLineTest.kt
index 02d5c5c..c8d896e 100644
--- a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/AlignmentLineTest.kt
+++ b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/AlignmentLineTest.kt
@@ -39,14 +39,14 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import kotlin.math.min
import org.junit.After
import org.junit.Assert
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
-import kotlin.math.min
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/AspectRatioTest.kt b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/AspectRatioTest.kt
index 71c17f1..460b85a 100644
--- a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/AspectRatioTest.kt
+++ b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/AspectRatioTest.kt
@@ -17,9 +17,9 @@
package androidx.compose.foundation.layout
import androidx.compose.runtime.Composable
-import androidx.compose.ui.layout.Layout
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.layout.Layout
import androidx.compose.ui.node.Ref
import androidx.compose.ui.platform.InspectableValue
import androidx.compose.ui.platform.ValueElement
@@ -27,17 +27,17 @@
import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.dp
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.After
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/BoxTest.kt b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/BoxTest.kt
index 55c4cb4..913aff8 100644
--- a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/BoxTest.kt
+++ b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/BoxTest.kt
@@ -40,14 +40,14 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.After
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/BoxWithConstraintsTest.kt b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/BoxWithConstraintsTest.kt
index a4c46cf..d3cdacb 100644
--- a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/BoxWithConstraintsTest.kt
+++ b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/BoxWithConstraintsTest.kt
@@ -35,8 +35,8 @@
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
-import androidx.compose.ui.draw.paint
import androidx.compose.ui.draw.drawBehind
+import androidx.compose.ui.draw.paint
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.rememberVectorPainter
import androidx.compose.ui.layout.Layout
@@ -57,15 +57,15 @@
import androidx.test.filters.MediumTest
import androidx.test.filters.SdkSuppress
import androidx.test.rule.ActivityTestRule
-import org.junit.Assert.assertEquals
-import org.junit.Assert.assertTrue
-import org.junit.Test
-import org.junit.runner.RunWith
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
import kotlin.math.abs
import kotlin.math.max
import kotlin.math.min
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertTrue
+import org.junit.Test
+import org.junit.runner.RunWith
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/IntrinsicTest.kt b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/IntrinsicTest.kt
index 0d96ae64..dcc13ab 100644
--- a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/IntrinsicTest.kt
+++ b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/IntrinsicTest.kt
@@ -17,33 +17,33 @@
package androidx.compose.foundation.layout
import androidx.compose.runtime.Composable
-import androidx.compose.ui.layout.Layout
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.layout.IntrinsicMeasurable
import androidx.compose.ui.layout.IntrinsicMeasureScope
+import androidx.compose.ui.layout.Layout
import androidx.compose.ui.layout.LayoutCoordinates
import androidx.compose.ui.layout.Measurable
import androidx.compose.ui.layout.MeasurePolicy
import androidx.compose.ui.layout.MeasureResult
import androidx.compose.ui.layout.MeasureScope
-import androidx.compose.ui.node.Ref
import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.layout.onSizeChanged
+import androidx.compose.ui.node.Ref
import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.constrainHeight
import androidx.compose.ui.unit.constrainWidth
import androidx.compose.ui.unit.dp
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutTest.kt b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutTest.kt
index 7b3e8ca..bfc6d1d 100644
--- a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutTest.kt
+++ b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutTest.kt
@@ -54,6 +54,9 @@
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.isFinite
import androidx.compose.ui.unit.offset
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import kotlin.math.max
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
@@ -62,9 +65,6 @@
import org.junit.Assert.fail
import org.junit.Before
import org.junit.Rule
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
-import kotlin.math.max
open class LayoutTest {
@Suppress("DEPRECATION")
diff --git a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/OffsetTest.kt b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/OffsetTest.kt
index a20f98e..b784301 100644
--- a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/OffsetTest.kt
+++ b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/OffsetTest.kt
@@ -40,6 +40,7 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
+import kotlin.math.roundToInt
import org.junit.After
import org.junit.Assert
import org.junit.Assert.assertEquals
@@ -48,7 +49,6 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.math.roundToInt
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/PaddingTest.kt b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/PaddingTest.kt
index cb1732a..d1af40b1 100644
--- a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/PaddingTest.kt
+++ b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/PaddingTest.kt
@@ -19,12 +19,12 @@
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.Alignment
-import androidx.compose.ui.layout.Layout
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.layout.Layout
import androidx.compose.ui.layout.LayoutCoordinates
-import androidx.compose.ui.layout.positionInRoot
import androidx.compose.ui.layout.onGloballyPositioned
+import androidx.compose.ui.layout.positionInRoot
import androidx.compose.ui.platform.InspectableValue
import androidx.compose.ui.platform.LocalLayoutDirection
import androidx.compose.ui.platform.ValueElement
@@ -34,8 +34,12 @@
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import kotlin.math.roundToInt
import org.junit.After
import org.junit.Assert
import org.junit.Assert.assertEquals
@@ -43,10 +47,6 @@
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
-import kotlin.math.roundToInt
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/SizeTest.kt b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/SizeTest.kt
index cee92f7..46f3307 100644
--- a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/SizeTest.kt
+++ b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/SizeTest.kt
@@ -22,20 +22,20 @@
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
-import androidx.compose.ui.layout.Layout
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.layout.IntrinsicMeasurable
import androidx.compose.ui.layout.IntrinsicMeasureScope
+import androidx.compose.ui.layout.Layout
import androidx.compose.ui.layout.LayoutCoordinates
import androidx.compose.ui.layout.Measurable
import androidx.compose.ui.layout.MeasurePolicy
import androidx.compose.ui.layout.MeasureResult
import androidx.compose.ui.layout.MeasureScope
-import androidx.compose.ui.node.Ref
import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.layout.positionInParent
import androidx.compose.ui.layout.positionInRoot
+import androidx.compose.ui.node.Ref
import androidx.compose.ui.platform.InspectableValue
import androidx.compose.ui.platform.LocalLayoutDirection
import androidx.compose.ui.platform.ValueElement
@@ -48,21 +48,21 @@
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.constrain
import androidx.compose.ui.unit.dp
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
+import androidx.test.filters.SdkSuppress
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import kotlin.math.roundToInt
import org.junit.After
import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNotEquals
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.MediumTest
-import androidx.test.filters.SdkSuppress
-import org.junit.Assert.assertNotEquals
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
-import kotlin.math.roundToInt
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/SpacerTest.kt b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/SpacerTest.kt
index cb7da5b..6d2bb4e 100644
--- a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/SpacerTest.kt
+++ b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/SpacerTest.kt
@@ -21,14 +21,14 @@
import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.dp
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Assert.assertTrue
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/WindowInsetsPaddingTest.kt b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/WindowInsetsPaddingTest.kt
index 4872573..ca4f233 100644
--- a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/WindowInsetsPaddingTest.kt
+++ b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/WindowInsetsPaddingTest.kt
@@ -16,13 +16,13 @@
package androidx.compose.foundation.layout
+import android.content.Context
import android.graphics.Insets as FrameworkInsets
import android.graphics.Rect as AndroidRect
-import android.view.WindowInsets as AndroidWindowInsets
-import android.content.Context
import android.os.Build
import android.view.View
import android.view.ViewGroup
+import android.view.WindowInsets as AndroidWindowInsets
import android.view.WindowInsetsAnimation
import android.view.animation.LinearInterpolator
import android.widget.FrameLayout
diff --git a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/WindowInsetsSizeTest.kt b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/WindowInsetsSizeTest.kt
index 5615d51..f6d68db 100644
--- a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/WindowInsetsSizeTest.kt
+++ b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/WindowInsetsSizeTest.kt
@@ -17,10 +17,10 @@
package androidx.compose.foundation.layout
import android.graphics.Rect as AndroidRect
-import android.view.WindowInsets as AndroidWindowInsets
import android.os.Build
import android.view.View
import android.view.ViewGroup
+import android.view.WindowInsets as AndroidWindowInsets
import androidx.activity.ComponentActivity
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
diff --git a/compose/foundation/foundation-layout/src/androidMain/kotlin/androidx/compose/foundation/layout/WindowInsets.android.kt b/compose/foundation/foundation-layout/src/androidMain/kotlin/androidx/compose/foundation/layout/WindowInsets.android.kt
index c77441a..44a21ed 100644
--- a/compose/foundation/foundation-layout/src/androidMain/kotlin/androidx/compose/foundation/layout/WindowInsets.android.kt
+++ b/compose/foundation/foundation-layout/src/androidMain/kotlin/androidx/compose/foundation/layout/WindowInsets.android.kt
@@ -16,7 +16,6 @@
package androidx.compose.foundation.layout
-import androidx.core.graphics.Insets as AndroidXInsets
import android.os.Build
import android.view.View
import android.view.View.OnAttachStateChangeListener
@@ -28,16 +27,17 @@
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.runtime.snapshots.Snapshot
+import androidx.compose.ui.R
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.platform.LocalView
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.LayoutDirection
+import androidx.core.graphics.Insets as AndroidXInsets
import androidx.core.view.OnApplyWindowInsetsListener
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsAnimationCompat
import androidx.core.view.WindowInsetsCompat
import java.util.WeakHashMap
-import androidx.compose.ui.R
-import androidx.compose.ui.unit.Density
-import androidx.compose.ui.unit.LayoutDirection
import org.jetbrains.annotations.TestOnly
internal fun AndroidXInsets.toInsetsValues(): InsetsValues =
diff --git a/compose/foundation/foundation-layout/src/androidMain/kotlin/androidx/compose/foundation/layout/WindowInsetsConnection.android.kt b/compose/foundation/foundation-layout/src/androidMain/kotlin/androidx/compose/foundation/layout/WindowInsetsConnection.android.kt
index e406da8..bd2e95d 100644
--- a/compose/foundation/foundation-layout/src/androidMain/kotlin/androidx/compose/foundation/layout/WindowInsetsConnection.android.kt
+++ b/compose/foundation/foundation-layout/src/androidMain/kotlin/androidx/compose/foundation/layout/WindowInsetsConnection.android.kt
@@ -36,26 +36,27 @@
import androidx.compose.ui.input.nestedscroll.NestedScrollConnection
import androidx.compose.ui.input.nestedscroll.NestedScrollSource
import androidx.compose.ui.input.nestedscroll.nestedScroll
+import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.LocalLayoutDirection
import androidx.compose.ui.platform.LocalView
-import androidx.compose.ui.unit.LayoutDirection
-import androidx.compose.ui.unit.Velocity
-import kotlin.math.roundToInt
-import kotlinx.coroutines.Job
-import kotlinx.coroutines.launch
-import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.debugInspectorInfo
import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.LayoutDirection
+import androidx.compose.ui.unit.Velocity
import androidx.compose.ui.util.packFloats
import androidx.compose.ui.util.unpackFloat1
import androidx.compose.ui.util.unpackFloat2
import kotlin.math.abs
import kotlin.math.exp
import kotlin.math.ln
+import kotlin.math.roundToInt
import kotlin.math.sign
import kotlinx.coroutines.CancellableContinuation
+import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.Job
import kotlinx.coroutines.coroutineScope
+import kotlinx.coroutines.launch
import kotlinx.coroutines.suspendCancellableCoroutine
/**
@@ -129,6 +130,21 @@
*/
private object DoNothingNestedScrollConnection : NestedScrollConnection
+/**
+ * Used in place of the standard Job cancellation pathway to avoid reflective
+ * javaClass.simpleName lookups to build the exception message and stack trace collection.
+ * Remove if these are changed in kotlinx.coroutines.
+ */
+private class WindowInsetsAnimationCancelledException : CancellationException(
+ "Window insets animation cancelled"
+) {
+ override fun fillInStackTrace(): Throwable {
+ // Avoid null.clone() on Android <= 6.0 when accessing stackTrace
+ stackTrace = emptyArray()
+ return this
+ }
+}
+
@OptIn(ExperimentalCoroutinesApi::class, ExperimentalLayoutApi::class)
@RequiresApi(Build.VERSION_CODES.R)
private class WindowInsetsNestedScrollConnection(
@@ -219,7 +235,7 @@
*/
private fun scroll(available: Offset, scrollAmount: Float): Offset {
animationJob?.let {
- it.cancel()
+ it.cancel(WindowInsetsAnimationCancelledException())
animationJob = null
}
@@ -289,7 +305,7 @@
flingAmount: Float,
towardShown: Boolean
): Velocity {
- animationJob?.cancel()
+ animationJob?.cancel(WindowInsetsAnimationCancelledException())
animationJob = null
partialConsumption = 0f
@@ -341,7 +357,7 @@
endVelocity = velocity
animationController.finish(targetShown)
[email protected] = null
- animationJob?.cancel()
+ animationJob?.cancel(WindowInsetsAnimationCancelledException())
}
}
}
@@ -426,7 +442,7 @@
continuation = null
// Cancel any animation that's running.
- animationJob?.cancel()
+ animationJob?.cancel(WindowInsetsAnimationCancelledException())
animationJob = null
partialConsumption = 0f
diff --git a/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Arrangement.kt b/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Arrangement.kt
index a408742..b7e385e 100644
--- a/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Arrangement.kt
+++ b/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Arrangement.kt
@@ -16,6 +16,7 @@
package androidx.compose.foundation.layout
+import androidx.compose.foundation.layout.internal.JvmDefaultWithCompatibility
import androidx.compose.runtime.Immutable
import androidx.compose.runtime.Stable
import androidx.compose.ui.Alignment
@@ -25,7 +26,6 @@
import androidx.compose.ui.unit.dp
import kotlin.math.min
import kotlin.math.roundToInt
-import androidx.compose.foundation.layout.internal.JvmDefaultWithCompatibility
/**
* Used to specify the arrangement of the layout's children in layouts like [Row] or [Column] in
diff --git a/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/AspectRatio.kt b/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/AspectRatio.kt
index bd8c46e..03ba1e45 100644
--- a/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/AspectRatio.kt
+++ b/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/AspectRatio.kt
@@ -17,12 +17,12 @@
package androidx.compose.foundation.layout
import androidx.compose.runtime.Stable
-import androidx.compose.ui.layout.Measurable
-import androidx.compose.ui.layout.MeasureScope
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.IntrinsicMeasurable
import androidx.compose.ui.layout.IntrinsicMeasureScope
+import androidx.compose.ui.layout.Measurable
import androidx.compose.ui.layout.MeasureResult
+import androidx.compose.ui.layout.MeasureScope
import androidx.compose.ui.node.LayoutModifierNode
import androidx.compose.ui.node.ModifierNodeElement
import androidx.compose.ui.platform.InspectorInfo
diff --git a/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Intrinsic.kt b/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Intrinsic.kt
index 4b382a7..d4b84a8 100644
--- a/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Intrinsic.kt
+++ b/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Intrinsic.kt
@@ -17,13 +17,13 @@
package androidx.compose.foundation.layout
import androidx.compose.runtime.Stable
-import androidx.compose.ui.layout.LayoutModifier
-import androidx.compose.ui.layout.Measurable
-import androidx.compose.ui.layout.MeasureScope
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.IntrinsicMeasurable
import androidx.compose.ui.layout.IntrinsicMeasureScope
+import androidx.compose.ui.layout.LayoutModifier
+import androidx.compose.ui.layout.Measurable
import androidx.compose.ui.layout.MeasureResult
+import androidx.compose.ui.layout.MeasureScope
import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.constrain
diff --git a/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Spacer.kt b/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Spacer.kt
index 2dfc2c8..4ba62fe 100644
--- a/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Spacer.kt
+++ b/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Spacer.kt
@@ -18,13 +18,13 @@
import androidx.compose.runtime.Composable
import androidx.compose.runtime.NonRestartableComposable
+import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.Layout
import androidx.compose.ui.layout.Measurable
import androidx.compose.ui.layout.MeasurePolicy
import androidx.compose.ui.layout.MeasureResult
import androidx.compose.ui.layout.MeasureScope
import androidx.compose.ui.unit.Constraints
-import androidx.compose.ui.Modifier
/**
* Component that represents an empty space layout, whose size can be defined using
diff --git a/compose/foundation/foundation/api/current.txt b/compose/foundation/foundation/api/current.txt
index 32cc4078..f0329e3 100644
--- a/compose/foundation/foundation/api/current.txt
+++ b/compose/foundation/foundation/api/current.txt
@@ -2,14 +2,14 @@
package androidx.compose.foundation {
public final class BackgroundKt {
- method public static androidx.compose.ui.Modifier background(androidx.compose.ui.Modifier, long color, optional androidx.compose.ui.graphics.Shape shape);
method public static androidx.compose.ui.Modifier background(androidx.compose.ui.Modifier, androidx.compose.ui.graphics.Brush brush, optional androidx.compose.ui.graphics.Shape shape, optional float alpha);
+ method public static androidx.compose.ui.Modifier background(androidx.compose.ui.Modifier, long color, optional androidx.compose.ui.graphics.Shape shape);
}
public final class BorderKt {
method public static androidx.compose.ui.Modifier border(androidx.compose.ui.Modifier, androidx.compose.foundation.BorderStroke border, optional androidx.compose.ui.graphics.Shape shape);
- method public static androidx.compose.ui.Modifier border(androidx.compose.ui.Modifier, float width, long color, optional androidx.compose.ui.graphics.Shape shape);
method public static androidx.compose.ui.Modifier border(androidx.compose.ui.Modifier, float width, androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.graphics.Shape shape);
+ method public static androidx.compose.ui.Modifier border(androidx.compose.ui.Modifier, float width, long color, optional androidx.compose.ui.graphics.Shape shape);
}
@androidx.compose.runtime.Immutable public final class BorderStroke {
@@ -34,8 +34,8 @@
}
public final class ClickableKt {
- method public static androidx.compose.ui.Modifier clickable(androidx.compose.ui.Modifier, optional boolean enabled, optional String? onClickLabel, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
method public static androidx.compose.ui.Modifier clickable(androidx.compose.ui.Modifier, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, androidx.compose.foundation.Indication? indication, optional boolean enabled, optional String? onClickLabel, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ method public static androidx.compose.ui.Modifier clickable(androidx.compose.ui.Modifier, optional boolean enabled, optional String? onClickLabel, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
}
public final class ClipScrollableContainerKt {
@@ -60,10 +60,10 @@
}
public final class ImageKt {
- method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Image(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int filterQuality);
- method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Image(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter);
- method @androidx.compose.runtime.Composable public static void Image(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter);
method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Image(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Image(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int filterQuality);
+ method @androidx.compose.runtime.Composable public static void Image(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Image(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter);
}
@androidx.compose.runtime.Stable public interface Indication {
@@ -95,8 +95,8 @@
}
public final class ProgressSemanticsKt {
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier progressSemantics(androidx.compose.ui.Modifier, float value, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional int steps);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier progressSemantics(androidx.compose.ui.Modifier);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier progressSemantics(androidx.compose.ui.Modifier, float value, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional int steps);
}
public final class ScrollKt {
@@ -232,11 +232,11 @@
}
public final class TapGestureDetectorKt {
- method public static suspend Object? awaitFirstDown(androidx.compose.ui.input.pointer.AwaitPointerEventScope, optional boolean requireUnconsumed, optional androidx.compose.ui.input.pointer.PointerEventPass pass, optional kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
method @Deprecated public static suspend androidx.compose.ui.input.pointer.PointerInputChange awaitFirstDown(androidx.compose.ui.input.pointer.AwaitPointerEventScope, optional boolean requireUnconsumed);
+ method public static suspend Object? awaitFirstDown(androidx.compose.ui.input.pointer.AwaitPointerEventScope, optional boolean requireUnconsumed, optional androidx.compose.ui.input.pointer.PointerEventPass pass, optional kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
method public static suspend Object? detectTapGestures(androidx.compose.ui.input.pointer.PointerInputScope, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? onDoubleTap, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? onLongPress, optional kotlin.jvm.functions.Function3<? super androidx.compose.foundation.gestures.PressGestureScope,? super androidx.compose.ui.geometry.Offset,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> onPress, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? onTap, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
- method public static suspend Object? waitForUpOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, optional androidx.compose.ui.input.pointer.PointerEventPass pass, optional kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
method @Deprecated public static suspend androidx.compose.ui.input.pointer.PointerInputChange? waitForUpOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope);
+ method public static suspend Object? waitForUpOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, optional androidx.compose.ui.input.pointer.PointerEventPass pass, optional kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
}
public final class TransformGestureDetectorKt {
@@ -387,12 +387,12 @@
method @androidx.compose.runtime.Composable public static void LazyRow(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.ui.Alignment.Vertical verticalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static void LazyRow(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.ui.Alignment.Vertical verticalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,? extends kotlin.Unit> content);
method public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function1<? super T,?>? key, optional kotlin.jvm.functions.Function1<? super T,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
- method public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, optional kotlin.jvm.functions.Function1<? super T,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
method @Deprecated public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function1<? super T,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,? extends kotlin.Unit> itemContent);
+ method public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, optional kotlin.jvm.functions.Function1<? super T,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
method @Deprecated public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,? extends kotlin.Unit> itemContent);
method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?> contentType, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
- method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?> contentType, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
method @Deprecated public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,? extends kotlin.Unit> itemContent);
+ method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?> contentType, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
method @Deprecated public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,? extends kotlin.Unit> itemContent);
}
@@ -740,15 +740,15 @@
}
public final class SelectableKt {
- method public static androidx.compose.ui.Modifier selectable(androidx.compose.ui.Modifier, boolean selected, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
method public static androidx.compose.ui.Modifier selectable(androidx.compose.ui.Modifier, boolean selected, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, androidx.compose.foundation.Indication? indication, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ method public static androidx.compose.ui.Modifier selectable(androidx.compose.ui.Modifier, boolean selected, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
}
public final class ToggleableKt {
- method public static androidx.compose.ui.Modifier toggleable(androidx.compose.ui.Modifier, boolean value, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onValueChange);
method public static androidx.compose.ui.Modifier toggleable(androidx.compose.ui.Modifier, boolean value, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, androidx.compose.foundation.Indication? indication, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onValueChange);
- method public static androidx.compose.ui.Modifier triStateToggleable(androidx.compose.ui.Modifier, androidx.compose.ui.state.ToggleableState state, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ method public static androidx.compose.ui.Modifier toggleable(androidx.compose.ui.Modifier, boolean value, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onValueChange);
method public static androidx.compose.ui.Modifier triStateToggleable(androidx.compose.ui.Modifier, androidx.compose.ui.state.ToggleableState state, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, androidx.compose.foundation.Indication? indication, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ method public static androidx.compose.ui.Modifier triStateToggleable(androidx.compose.ui.Modifier, androidx.compose.ui.state.ToggleableState state, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
}
}
@@ -765,9 +765,9 @@
method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(androidx.compose.foundation.shape.CornerSize corner);
method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(float size);
method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(float size);
+ method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
+ method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(int percent);
- method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
- method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(optional int topLeftPercent, optional int topRightPercent, optional int bottomRightPercent, optional int bottomLeftPercent);
}
@@ -781,16 +781,16 @@
method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(androidx.compose.foundation.shape.CornerSize corner);
method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(float size);
method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(float size);
+ method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
+ method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(int percent);
- method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
- method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(optional int topLeftPercent, optional int topRightPercent, optional int bottomRightPercent, optional int bottomLeftPercent);
}
public abstract class CornerBasedShape implements androidx.compose.ui.graphics.Shape {
ctor public CornerBasedShape(androidx.compose.foundation.shape.CornerSize topStart, androidx.compose.foundation.shape.CornerSize topEnd, androidx.compose.foundation.shape.CornerSize bottomEnd, androidx.compose.foundation.shape.CornerSize bottomStart);
- method public abstract androidx.compose.foundation.shape.CornerBasedShape copy(optional androidx.compose.foundation.shape.CornerSize topStart, optional androidx.compose.foundation.shape.CornerSize topEnd, optional androidx.compose.foundation.shape.CornerSize bottomEnd, optional androidx.compose.foundation.shape.CornerSize bottomStart);
method public final androidx.compose.foundation.shape.CornerBasedShape copy(androidx.compose.foundation.shape.CornerSize all);
+ method public abstract androidx.compose.foundation.shape.CornerBasedShape copy(optional androidx.compose.foundation.shape.CornerSize topStart, optional androidx.compose.foundation.shape.CornerSize topEnd, optional androidx.compose.foundation.shape.CornerSize bottomEnd, optional androidx.compose.foundation.shape.CornerSize bottomStart);
method public final androidx.compose.ui.graphics.Outline createOutline(long size, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.unit.Density density);
method public abstract androidx.compose.ui.graphics.Outline createOutline(long size, float topStart, float topEnd, float bottomEnd, float bottomStart, androidx.compose.ui.unit.LayoutDirection layoutDirection);
method public final androidx.compose.foundation.shape.CornerSize getBottomEnd();
@@ -825,9 +825,9 @@
method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(androidx.compose.foundation.shape.CornerSize corner);
method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(float size);
method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(float size);
+ method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
+ method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(int percent);
- method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
- method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(optional int topStartPercent, optional int topEndPercent, optional int bottomEndPercent, optional int bottomStartPercent);
}
@@ -846,9 +846,9 @@
method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(androidx.compose.foundation.shape.CornerSize corner);
method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(float size);
method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(float size);
+ method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
+ method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(int percent);
- method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
- method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(optional int topStartPercent, optional int topEndPercent, optional int bottomEndPercent, optional int bottomStartPercent);
method public static androidx.compose.foundation.shape.RoundedCornerShape getCircleShape();
property public static final androidx.compose.foundation.shape.RoundedCornerShape CircleShape;
@@ -859,19 +859,19 @@
package androidx.compose.foundation.text {
public final class BasicTextFieldKt {
- method @androidx.compose.runtime.Composable public static void BasicTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
+ method @Deprecated @androidx.compose.runtime.Composable public static void BasicTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<? extends kotlin.Unit>,? extends kotlin.Unit> decorationBox);
method @androidx.compose.runtime.Composable public static void BasicTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
method @Deprecated @androidx.compose.runtime.Composable public static void BasicTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<? extends kotlin.Unit>,? extends kotlin.Unit> decorationBox);
- method @Deprecated @androidx.compose.runtime.Composable public static void BasicTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<? extends kotlin.Unit>,? extends kotlin.Unit> decorationBox);
+ method @androidx.compose.runtime.Composable public static void BasicTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
}
public final class BasicTextKt {
- method @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional androidx.compose.ui.graphics.ColorProducer? color);
+ method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent);
+ method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent);
method @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional androidx.compose.ui.graphics.ColorProducer? color);
method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines);
- method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent);
method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines);
- method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent);
+ method @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional androidx.compose.ui.graphics.ColorProducer? color);
}
public final class ClickableTextKt {
diff --git a/compose/foundation/foundation/api/public_plus_experimental_current.txt b/compose/foundation/foundation/api/public_plus_experimental_current.txt
index 260f499..d2266f4 100644
--- a/compose/foundation/foundation/api/public_plus_experimental_current.txt
+++ b/compose/foundation/foundation/api/public_plus_experimental_current.txt
@@ -2,8 +2,8 @@
package androidx.compose.foundation {
public final class BackgroundKt {
- method public static androidx.compose.ui.Modifier background(androidx.compose.ui.Modifier, long color, optional androidx.compose.ui.graphics.Shape shape);
method public static androidx.compose.ui.Modifier background(androidx.compose.ui.Modifier, androidx.compose.ui.graphics.Brush brush, optional androidx.compose.ui.graphics.Shape shape, optional float alpha);
+ method public static androidx.compose.ui.Modifier background(androidx.compose.ui.Modifier, long color, optional androidx.compose.ui.graphics.Shape shape);
}
public final class BasicMarqueeKt {
@@ -21,8 +21,8 @@
public final class BorderKt {
method public static androidx.compose.ui.Modifier border(androidx.compose.ui.Modifier, androidx.compose.foundation.BorderStroke border, optional androidx.compose.ui.graphics.Shape shape);
- method public static androidx.compose.ui.Modifier border(androidx.compose.ui.Modifier, float width, long color, optional androidx.compose.ui.graphics.Shape shape);
method public static androidx.compose.ui.Modifier border(androidx.compose.ui.Modifier, float width, androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.graphics.Shape shape);
+ method public static androidx.compose.ui.Modifier border(androidx.compose.ui.Modifier, float width, long color, optional androidx.compose.ui.graphics.Shape shape);
}
@androidx.compose.runtime.Immutable public final class BorderStroke {
@@ -39,8 +39,8 @@
}
public final class CanvasKt {
- method @androidx.compose.runtime.Composable public static void Canvas(androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> onDraw);
method @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void Canvas(androidx.compose.ui.Modifier modifier, String contentDescription, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> onDraw);
+ method @androidx.compose.runtime.Composable public static void Canvas(androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> onDraw);
}
public final class CheckScrollableContainerConstraintsKt {
@@ -48,10 +48,10 @@
}
public final class ClickableKt {
- method public static androidx.compose.ui.Modifier clickable(androidx.compose.ui.Modifier, optional boolean enabled, optional String? onClickLabel, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
method public static androidx.compose.ui.Modifier clickable(androidx.compose.ui.Modifier, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, androidx.compose.foundation.Indication? indication, optional boolean enabled, optional String? onClickLabel, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
- method @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.ui.Modifier combinedClickable(androidx.compose.ui.Modifier, optional boolean enabled, optional String? onClickLabel, optional androidx.compose.ui.semantics.Role? role, optional String? onLongClickLabel, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onLongClick, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onDoubleClick, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ method public static androidx.compose.ui.Modifier clickable(androidx.compose.ui.Modifier, optional boolean enabled, optional String? onClickLabel, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
method @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.ui.Modifier combinedClickable(androidx.compose.ui.Modifier, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, androidx.compose.foundation.Indication? indication, optional boolean enabled, optional String? onClickLabel, optional androidx.compose.ui.semantics.Role? role, optional String? onLongClickLabel, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onLongClick, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onDoubleClick, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ method @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.ui.Modifier combinedClickable(androidx.compose.ui.Modifier, optional boolean enabled, optional String? onClickLabel, optional androidx.compose.ui.semantics.Role? role, optional String? onLongClickLabel, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onLongClick, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onDoubleClick, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
}
public final class ClipScrollableContainerKt {
@@ -84,10 +84,10 @@
}
public final class ImageKt {
- method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Image(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int filterQuality);
- method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Image(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter);
- method @androidx.compose.runtime.Composable public static void Image(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter);
method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Image(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Image(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int filterQuality);
+ method @androidx.compose.runtime.Composable public static void Image(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Image(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter);
}
@androidx.compose.runtime.Stable public interface Indication {
@@ -186,8 +186,8 @@
}
public final class ProgressSemanticsKt {
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier progressSemantics(androidx.compose.ui.Modifier, float value, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional int steps);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier progressSemantics(androidx.compose.ui.Modifier);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier progressSemantics(androidx.compose.ui.Modifier, float value, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional int steps);
}
public final class ScrollKt {
@@ -304,8 +304,8 @@
}
public final class ScrollableKt {
- method public static androidx.compose.ui.Modifier scrollable(androidx.compose.ui.Modifier, androidx.compose.foundation.gestures.ScrollableState state, androidx.compose.foundation.gestures.Orientation orientation, optional boolean enabled, optional boolean reverseDirection, optional androidx.compose.foundation.gestures.FlingBehavior? flingBehavior, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource);
method @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.ui.Modifier scrollable(androidx.compose.ui.Modifier, androidx.compose.foundation.gestures.ScrollableState state, androidx.compose.foundation.gestures.Orientation orientation, androidx.compose.foundation.OverscrollEffect? overscrollEffect, optional boolean enabled, optional boolean reverseDirection, optional androidx.compose.foundation.gestures.FlingBehavior? flingBehavior, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource);
+ method public static androidx.compose.ui.Modifier scrollable(androidx.compose.ui.Modifier, androidx.compose.foundation.gestures.ScrollableState state, androidx.compose.foundation.gestures.Orientation orientation, optional boolean enabled, optional boolean reverseDirection, optional androidx.compose.foundation.gestures.FlingBehavior? flingBehavior, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource);
}
@kotlin.jvm.JvmDefaultWithCompatibility public interface ScrollableState {
@@ -325,11 +325,11 @@
}
public final class TapGestureDetectorKt {
- method public static suspend Object? awaitFirstDown(androidx.compose.ui.input.pointer.AwaitPointerEventScope, optional boolean requireUnconsumed, optional androidx.compose.ui.input.pointer.PointerEventPass pass, optional kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
method @Deprecated public static suspend androidx.compose.ui.input.pointer.PointerInputChange awaitFirstDown(androidx.compose.ui.input.pointer.AwaitPointerEventScope, optional boolean requireUnconsumed);
+ method public static suspend Object? awaitFirstDown(androidx.compose.ui.input.pointer.AwaitPointerEventScope, optional boolean requireUnconsumed, optional androidx.compose.ui.input.pointer.PointerEventPass pass, optional kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
method public static suspend Object? detectTapGestures(androidx.compose.ui.input.pointer.PointerInputScope, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? onDoubleTap, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? onLongPress, optional kotlin.jvm.functions.Function3<? super androidx.compose.foundation.gestures.PressGestureScope,? super androidx.compose.ui.geometry.Offset,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> onPress, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? onTap, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
- method public static suspend Object? waitForUpOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, optional androidx.compose.ui.input.pointer.PointerEventPass pass, optional kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
method @Deprecated public static suspend androidx.compose.ui.input.pointer.PointerInputChange? waitForUpOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope);
+ method public static suspend Object? waitForUpOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, optional androidx.compose.ui.input.pointer.PointerEventPass pass, optional kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
}
public final class TransformGestureDetectorKt {
@@ -520,12 +520,12 @@
method @androidx.compose.runtime.Composable public static void LazyRow(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.ui.Alignment.Vertical verticalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static void LazyRow(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.ui.Alignment.Vertical verticalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,? extends kotlin.Unit> content);
method public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function1<? super T,?>? key, optional kotlin.jvm.functions.Function1<? super T,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
- method public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, optional kotlin.jvm.functions.Function1<? super T,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
method @Deprecated public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function1<? super T,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,? extends kotlin.Unit> itemContent);
+ method public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, optional kotlin.jvm.functions.Function1<? super T,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
method @Deprecated public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,? extends kotlin.Unit> itemContent);
method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?> contentType, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
- method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?> contentType, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
method @Deprecated public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,? extends kotlin.Unit> itemContent);
+ method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?> contentType, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
method @Deprecated public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,? extends kotlin.Unit> itemContent);
}
@@ -808,14 +808,14 @@
@androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public sealed interface LazyLayoutMeasureScope extends androidx.compose.ui.layout.MeasureScope {
method public java.util.List<androidx.compose.ui.layout.Placeable> measure(int index, long constraints);
- method @androidx.compose.runtime.Stable public default float toDp(long);
- method @androidx.compose.runtime.Stable public default float toDp(int);
method @androidx.compose.runtime.Stable public default float toDp(float);
+ method @androidx.compose.runtime.Stable public default float toDp(int);
+ method @androidx.compose.runtime.Stable public default float toDp(long);
method @androidx.compose.runtime.Stable public default long toDpSize(long);
method @androidx.compose.runtime.Stable public default long toSize(long);
method @androidx.compose.runtime.Stable public default long toSp(float);
- method @androidx.compose.runtime.Stable public default long toSp(int);
method @androidx.compose.runtime.Stable public default long toSp(float);
+ method @androidx.compose.runtime.Stable public default long toSp(int);
}
public final class LazyLayoutPinnableItemKt {
@@ -1050,8 +1050,8 @@
}
public final class PagerStateKt {
- method @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static androidx.compose.foundation.pager.PagerState rememberPagerState(optional int initialPage, optional float initialPageOffsetFraction, kotlin.jvm.functions.Function0<java.lang.Integer> pageCount);
method @Deprecated @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static androidx.compose.foundation.pager.PagerState rememberPagerState(optional int initialPage, optional float initialPageOffsetFraction);
+ method @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static androidx.compose.foundation.pager.PagerState rememberPagerState(optional int initialPage, optional float initialPageOffsetFraction, kotlin.jvm.functions.Function0<java.lang.Integer> pageCount);
}
}
@@ -1085,15 +1085,15 @@
}
public final class SelectableKt {
- method public static androidx.compose.ui.Modifier selectable(androidx.compose.ui.Modifier, boolean selected, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
method public static androidx.compose.ui.Modifier selectable(androidx.compose.ui.Modifier, boolean selected, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, androidx.compose.foundation.Indication? indication, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ method public static androidx.compose.ui.Modifier selectable(androidx.compose.ui.Modifier, boolean selected, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
}
public final class ToggleableKt {
- method public static androidx.compose.ui.Modifier toggleable(androidx.compose.ui.Modifier, boolean value, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onValueChange);
method public static androidx.compose.ui.Modifier toggleable(androidx.compose.ui.Modifier, boolean value, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, androidx.compose.foundation.Indication? indication, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onValueChange);
- method public static androidx.compose.ui.Modifier triStateToggleable(androidx.compose.ui.Modifier, androidx.compose.ui.state.ToggleableState state, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ method public static androidx.compose.ui.Modifier toggleable(androidx.compose.ui.Modifier, boolean value, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onValueChange);
method public static androidx.compose.ui.Modifier triStateToggleable(androidx.compose.ui.Modifier, androidx.compose.ui.state.ToggleableState state, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, androidx.compose.foundation.Indication? indication, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ method public static androidx.compose.ui.Modifier triStateToggleable(androidx.compose.ui.Modifier, androidx.compose.ui.state.ToggleableState state, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
}
}
@@ -1110,9 +1110,9 @@
method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(androidx.compose.foundation.shape.CornerSize corner);
method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(float size);
method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(float size);
+ method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
+ method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(int percent);
- method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
- method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(optional int topLeftPercent, optional int topRightPercent, optional int bottomRightPercent, optional int bottomLeftPercent);
}
@@ -1126,16 +1126,16 @@
method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(androidx.compose.foundation.shape.CornerSize corner);
method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(float size);
method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(float size);
+ method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
+ method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(int percent);
- method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
- method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(optional int topLeftPercent, optional int topRightPercent, optional int bottomRightPercent, optional int bottomLeftPercent);
}
public abstract class CornerBasedShape implements androidx.compose.ui.graphics.Shape {
ctor public CornerBasedShape(androidx.compose.foundation.shape.CornerSize topStart, androidx.compose.foundation.shape.CornerSize topEnd, androidx.compose.foundation.shape.CornerSize bottomEnd, androidx.compose.foundation.shape.CornerSize bottomStart);
- method public abstract androidx.compose.foundation.shape.CornerBasedShape copy(optional androidx.compose.foundation.shape.CornerSize topStart, optional androidx.compose.foundation.shape.CornerSize topEnd, optional androidx.compose.foundation.shape.CornerSize bottomEnd, optional androidx.compose.foundation.shape.CornerSize bottomStart);
method public final androidx.compose.foundation.shape.CornerBasedShape copy(androidx.compose.foundation.shape.CornerSize all);
+ method public abstract androidx.compose.foundation.shape.CornerBasedShape copy(optional androidx.compose.foundation.shape.CornerSize topStart, optional androidx.compose.foundation.shape.CornerSize topEnd, optional androidx.compose.foundation.shape.CornerSize bottomEnd, optional androidx.compose.foundation.shape.CornerSize bottomStart);
method public final androidx.compose.ui.graphics.Outline createOutline(long size, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.unit.Density density);
method public abstract androidx.compose.ui.graphics.Outline createOutline(long size, float topStart, float topEnd, float bottomEnd, float bottomStart, androidx.compose.ui.unit.LayoutDirection layoutDirection);
method public final androidx.compose.foundation.shape.CornerSize getBottomEnd();
@@ -1170,9 +1170,9 @@
method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(androidx.compose.foundation.shape.CornerSize corner);
method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(float size);
method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(float size);
+ method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
+ method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(int percent);
- method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
- method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(optional int topStartPercent, optional int topEndPercent, optional int bottomEndPercent, optional int bottomStartPercent);
}
@@ -1191,9 +1191,9 @@
method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(androidx.compose.foundation.shape.CornerSize corner);
method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(float size);
method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(float size);
+ method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
+ method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(int percent);
- method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
- method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(optional int topStartPercent, optional int topEndPercent, optional int bottomEndPercent, optional int bottomStartPercent);
method public static androidx.compose.foundation.shape.RoundedCornerShape getCircleShape();
property public static final androidx.compose.foundation.shape.RoundedCornerShape CircleShape;
@@ -1204,19 +1204,19 @@
package androidx.compose.foundation.text {
public final class BasicTextFieldKt {
- method @androidx.compose.runtime.Composable public static void BasicTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
+ method @Deprecated @androidx.compose.runtime.Composable public static void BasicTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<? extends kotlin.Unit>,? extends kotlin.Unit> decorationBox);
method @androidx.compose.runtime.Composable public static void BasicTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
method @Deprecated @androidx.compose.runtime.Composable public static void BasicTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<? extends kotlin.Unit>,? extends kotlin.Unit> decorationBox);
- method @Deprecated @androidx.compose.runtime.Composable public static void BasicTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<? extends kotlin.Unit>,? extends kotlin.Unit> decorationBox);
+ method @androidx.compose.runtime.Composable public static void BasicTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
}
public final class BasicTextKt {
- method @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional androidx.compose.ui.graphics.ColorProducer? color);
+ method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent);
+ method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent);
method @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional androidx.compose.ui.graphics.ColorProducer? color);
method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines);
- method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent);
method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines);
- method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent);
+ method @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional androidx.compose.ui.graphics.ColorProducer? color);
}
public final class ClickableTextKt {
diff --git a/compose/foundation/foundation/api/restricted_current.txt b/compose/foundation/foundation/api/restricted_current.txt
index 32cc4078..f0329e3 100644
--- a/compose/foundation/foundation/api/restricted_current.txt
+++ b/compose/foundation/foundation/api/restricted_current.txt
@@ -2,14 +2,14 @@
package androidx.compose.foundation {
public final class BackgroundKt {
- method public static androidx.compose.ui.Modifier background(androidx.compose.ui.Modifier, long color, optional androidx.compose.ui.graphics.Shape shape);
method public static androidx.compose.ui.Modifier background(androidx.compose.ui.Modifier, androidx.compose.ui.graphics.Brush brush, optional androidx.compose.ui.graphics.Shape shape, optional float alpha);
+ method public static androidx.compose.ui.Modifier background(androidx.compose.ui.Modifier, long color, optional androidx.compose.ui.graphics.Shape shape);
}
public final class BorderKt {
method public static androidx.compose.ui.Modifier border(androidx.compose.ui.Modifier, androidx.compose.foundation.BorderStroke border, optional androidx.compose.ui.graphics.Shape shape);
- method public static androidx.compose.ui.Modifier border(androidx.compose.ui.Modifier, float width, long color, optional androidx.compose.ui.graphics.Shape shape);
method public static androidx.compose.ui.Modifier border(androidx.compose.ui.Modifier, float width, androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.graphics.Shape shape);
+ method public static androidx.compose.ui.Modifier border(androidx.compose.ui.Modifier, float width, long color, optional androidx.compose.ui.graphics.Shape shape);
}
@androidx.compose.runtime.Immutable public final class BorderStroke {
@@ -34,8 +34,8 @@
}
public final class ClickableKt {
- method public static androidx.compose.ui.Modifier clickable(androidx.compose.ui.Modifier, optional boolean enabled, optional String? onClickLabel, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
method public static androidx.compose.ui.Modifier clickable(androidx.compose.ui.Modifier, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, androidx.compose.foundation.Indication? indication, optional boolean enabled, optional String? onClickLabel, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ method public static androidx.compose.ui.Modifier clickable(androidx.compose.ui.Modifier, optional boolean enabled, optional String? onClickLabel, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
}
public final class ClipScrollableContainerKt {
@@ -60,10 +60,10 @@
}
public final class ImageKt {
- method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Image(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int filterQuality);
- method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Image(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter);
- method @androidx.compose.runtime.Composable public static void Image(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter);
method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Image(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Image(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int filterQuality);
+ method @androidx.compose.runtime.Composable public static void Image(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Image(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment alignment, optional androidx.compose.ui.layout.ContentScale contentScale, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter);
}
@androidx.compose.runtime.Stable public interface Indication {
@@ -95,8 +95,8 @@
}
public final class ProgressSemanticsKt {
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier progressSemantics(androidx.compose.ui.Modifier, float value, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional int steps);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier progressSemantics(androidx.compose.ui.Modifier);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier progressSemantics(androidx.compose.ui.Modifier, float value, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional int steps);
}
public final class ScrollKt {
@@ -232,11 +232,11 @@
}
public final class TapGestureDetectorKt {
- method public static suspend Object? awaitFirstDown(androidx.compose.ui.input.pointer.AwaitPointerEventScope, optional boolean requireUnconsumed, optional androidx.compose.ui.input.pointer.PointerEventPass pass, optional kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
method @Deprecated public static suspend androidx.compose.ui.input.pointer.PointerInputChange awaitFirstDown(androidx.compose.ui.input.pointer.AwaitPointerEventScope, optional boolean requireUnconsumed);
+ method public static suspend Object? awaitFirstDown(androidx.compose.ui.input.pointer.AwaitPointerEventScope, optional boolean requireUnconsumed, optional androidx.compose.ui.input.pointer.PointerEventPass pass, optional kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
method public static suspend Object? detectTapGestures(androidx.compose.ui.input.pointer.PointerInputScope, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? onDoubleTap, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? onLongPress, optional kotlin.jvm.functions.Function3<? super androidx.compose.foundation.gestures.PressGestureScope,? super androidx.compose.ui.geometry.Offset,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> onPress, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? onTap, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
- method public static suspend Object? waitForUpOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, optional androidx.compose.ui.input.pointer.PointerEventPass pass, optional kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
method @Deprecated public static suspend androidx.compose.ui.input.pointer.PointerInputChange? waitForUpOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope);
+ method public static suspend Object? waitForUpOrCancellation(androidx.compose.ui.input.pointer.AwaitPointerEventScope, optional androidx.compose.ui.input.pointer.PointerEventPass pass, optional kotlin.coroutines.Continuation<? super androidx.compose.ui.input.pointer.PointerInputChange>);
}
public final class TransformGestureDetectorKt {
@@ -387,12 +387,12 @@
method @androidx.compose.runtime.Composable public static void LazyRow(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.ui.Alignment.Vertical verticalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static void LazyRow(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.lazy.LazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, optional androidx.compose.ui.Alignment.Vertical verticalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.lazy.LazyListScope,? extends kotlin.Unit> content);
method public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function1<? super T,?>? key, optional kotlin.jvm.functions.Function1<? super T,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
- method public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, optional kotlin.jvm.functions.Function1<? super T,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
method @Deprecated public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function1<? super T,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,? extends kotlin.Unit> itemContent);
+ method public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, optional kotlin.jvm.functions.Function1<? super T,?> contentType, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,kotlin.Unit> itemContent);
method @Deprecated public static inline <T> void items(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.lazy.LazyItemScope,? super T,? extends kotlin.Unit> itemContent);
method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?> contentType, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
- method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?> contentType, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
method @Deprecated public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,? extends kotlin.Unit> itemContent);
+ method public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?> contentType, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
method @Deprecated public static inline <T> void itemsIndexed(androidx.compose.foundation.lazy.LazyListScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, kotlin.jvm.functions.Function3<? super androidx.compose.foundation.lazy.LazyItemScope,? super java.lang.Integer,? super T,? extends kotlin.Unit> itemContent);
}
@@ -740,15 +740,15 @@
}
public final class SelectableKt {
- method public static androidx.compose.ui.Modifier selectable(androidx.compose.ui.Modifier, boolean selected, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
method public static androidx.compose.ui.Modifier selectable(androidx.compose.ui.Modifier, boolean selected, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, androidx.compose.foundation.Indication? indication, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ method public static androidx.compose.ui.Modifier selectable(androidx.compose.ui.Modifier, boolean selected, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
}
public final class ToggleableKt {
- method public static androidx.compose.ui.Modifier toggleable(androidx.compose.ui.Modifier, boolean value, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onValueChange);
method public static androidx.compose.ui.Modifier toggleable(androidx.compose.ui.Modifier, boolean value, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, androidx.compose.foundation.Indication? indication, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onValueChange);
- method public static androidx.compose.ui.Modifier triStateToggleable(androidx.compose.ui.Modifier, androidx.compose.ui.state.ToggleableState state, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ method public static androidx.compose.ui.Modifier toggleable(androidx.compose.ui.Modifier, boolean value, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onValueChange);
method public static androidx.compose.ui.Modifier triStateToggleable(androidx.compose.ui.Modifier, androidx.compose.ui.state.ToggleableState state, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, androidx.compose.foundation.Indication? indication, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+ method public static androidx.compose.ui.Modifier triStateToggleable(androidx.compose.ui.Modifier, androidx.compose.ui.state.ToggleableState state, optional boolean enabled, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
}
}
@@ -765,9 +765,9 @@
method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(androidx.compose.foundation.shape.CornerSize corner);
method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(float size);
method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(float size);
+ method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
+ method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(int percent);
- method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
- method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
method public static androidx.compose.foundation.shape.AbsoluteCutCornerShape AbsoluteCutCornerShape(optional int topLeftPercent, optional int topRightPercent, optional int bottomRightPercent, optional int bottomLeftPercent);
}
@@ -781,16 +781,16 @@
method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(androidx.compose.foundation.shape.CornerSize corner);
method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(float size);
method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(float size);
+ method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
+ method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(int percent);
- method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
- method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(optional float topLeft, optional float topRight, optional float bottomRight, optional float bottomLeft);
method public static androidx.compose.foundation.shape.AbsoluteRoundedCornerShape AbsoluteRoundedCornerShape(optional int topLeftPercent, optional int topRightPercent, optional int bottomRightPercent, optional int bottomLeftPercent);
}
public abstract class CornerBasedShape implements androidx.compose.ui.graphics.Shape {
ctor public CornerBasedShape(androidx.compose.foundation.shape.CornerSize topStart, androidx.compose.foundation.shape.CornerSize topEnd, androidx.compose.foundation.shape.CornerSize bottomEnd, androidx.compose.foundation.shape.CornerSize bottomStart);
- method public abstract androidx.compose.foundation.shape.CornerBasedShape copy(optional androidx.compose.foundation.shape.CornerSize topStart, optional androidx.compose.foundation.shape.CornerSize topEnd, optional androidx.compose.foundation.shape.CornerSize bottomEnd, optional androidx.compose.foundation.shape.CornerSize bottomStart);
method public final androidx.compose.foundation.shape.CornerBasedShape copy(androidx.compose.foundation.shape.CornerSize all);
+ method public abstract androidx.compose.foundation.shape.CornerBasedShape copy(optional androidx.compose.foundation.shape.CornerSize topStart, optional androidx.compose.foundation.shape.CornerSize topEnd, optional androidx.compose.foundation.shape.CornerSize bottomEnd, optional androidx.compose.foundation.shape.CornerSize bottomStart);
method public final androidx.compose.ui.graphics.Outline createOutline(long size, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.unit.Density density);
method public abstract androidx.compose.ui.graphics.Outline createOutline(long size, float topStart, float topEnd, float bottomEnd, float bottomStart, androidx.compose.ui.unit.LayoutDirection layoutDirection);
method public final androidx.compose.foundation.shape.CornerSize getBottomEnd();
@@ -825,9 +825,9 @@
method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(androidx.compose.foundation.shape.CornerSize corner);
method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(float size);
method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(float size);
+ method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
+ method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(int percent);
- method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
- method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
method public static androidx.compose.foundation.shape.CutCornerShape CutCornerShape(optional int topStartPercent, optional int topEndPercent, optional int bottomEndPercent, optional int bottomStartPercent);
}
@@ -846,9 +846,9 @@
method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(androidx.compose.foundation.shape.CornerSize corner);
method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(float size);
method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(float size);
+ method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
+ method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(int percent);
- method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
- method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(optional float topStart, optional float topEnd, optional float bottomEnd, optional float bottomStart);
method public static androidx.compose.foundation.shape.RoundedCornerShape RoundedCornerShape(optional int topStartPercent, optional int topEndPercent, optional int bottomEndPercent, optional int bottomStartPercent);
method public static androidx.compose.foundation.shape.RoundedCornerShape getCircleShape();
property public static final androidx.compose.foundation.shape.RoundedCornerShape CircleShape;
@@ -859,19 +859,19 @@
package androidx.compose.foundation.text {
public final class BasicTextFieldKt {
- method @androidx.compose.runtime.Composable public static void BasicTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
+ method @Deprecated @androidx.compose.runtime.Composable public static void BasicTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<? extends kotlin.Unit>,? extends kotlin.Unit> decorationBox);
method @androidx.compose.runtime.Composable public static void BasicTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
method @Deprecated @androidx.compose.runtime.Composable public static void BasicTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<? extends kotlin.Unit>,? extends kotlin.Unit> decorationBox);
- method @Deprecated @androidx.compose.runtime.Composable public static void BasicTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<? extends kotlin.Unit>,? extends kotlin.Unit> decorationBox);
+ method @androidx.compose.runtime.Composable public static void BasicTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
}
public final class BasicTextKt {
- method @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional androidx.compose.ui.graphics.ColorProducer? color);
+ method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent);
+ method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent);
method @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional androidx.compose.ui.graphics.ColorProducer? color);
method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines);
- method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent);
method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines);
- method @Deprecated @androidx.compose.runtime.Composable public static void BasicText(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent);
+ method @androidx.compose.runtime.Composable public static void BasicText(String text, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle style, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional androidx.compose.ui.graphics.ColorProducer? color);
}
public final class ClickableTextKt {
diff --git a/compose/foundation/foundation/benchmark/src/androidTest/java/androidx/compose/foundation/benchmark/NestedScrollerTestCase.kt b/compose/foundation/foundation/benchmark/src/androidTest/java/androidx/compose/foundation/benchmark/NestedScrollerTestCase.kt
index ff79ab3..96778f3 100644
--- a/compose/foundation/foundation/benchmark/src/androidTest/java/androidx/compose/foundation/benchmark/NestedScrollerTestCase.kt
+++ b/compose/foundation/foundation/benchmark/src/androidTest/java/androidx/compose/foundation/benchmark/NestedScrollerTestCase.kt
@@ -37,8 +37,8 @@
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalDensity
-import kotlinx.coroutines.runBlocking
import kotlin.random.Random
+import kotlinx.coroutines.runBlocking
/**
* Test case that puts many horizontal scrollers in a vertical scroller
diff --git a/compose/foundation/foundation/benchmark/src/androidTest/java/androidx/compose/foundation/benchmark/TrailingLambdaBenchmark.kt b/compose/foundation/foundation/benchmark/src/androidTest/java/androidx/compose/foundation/benchmark/TrailingLambdaBenchmark.kt
index 73585f9..3cc15b9 100644
--- a/compose/foundation/foundation/benchmark/src/androidTest/java/androidx/compose/foundation/benchmark/TrailingLambdaBenchmark.kt
+++ b/compose/foundation/foundation/benchmark/src/androidTest/java/androidx/compose/foundation/benchmark/TrailingLambdaBenchmark.kt
@@ -30,11 +30,11 @@
import androidx.compose.testutils.benchmark.toggleStateBenchmarkRecompose
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@LargeTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/foundation/foundation/benchmark/src/androidTest/java/androidx/compose/foundation/benchmark/lazy/LazyGridScrollingBenchmark.kt b/compose/foundation/foundation/benchmark/src/androidTest/java/androidx/compose/foundation/benchmark/lazy/LazyGridScrollingBenchmark.kt
index d21da5c..2e190b3 100644
--- a/compose/foundation/foundation/benchmark/src/androidTest/java/androidx/compose/foundation/benchmark/lazy/LazyGridScrollingBenchmark.kt
+++ b/compose/foundation/foundation/benchmark/src/androidTest/java/androidx/compose/foundation/benchmark/lazy/LazyGridScrollingBenchmark.kt
@@ -25,10 +25,10 @@
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.requiredHeight
import androidx.compose.foundation.layout.requiredSize
-import androidx.compose.foundation.lazy.grid.LazyHorizontalGrid
-import androidx.compose.foundation.lazy.grid.LazyGridState
-import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
import androidx.compose.foundation.lazy.grid.GridCells
+import androidx.compose.foundation.lazy.grid.LazyGridState
+import androidx.compose.foundation.lazy.grid.LazyHorizontalGrid
+import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
import androidx.compose.foundation.lazy.grid.items
import androidx.compose.foundation.lazy.grid.rememberLazyGridState
import androidx.compose.foundation.shape.RoundedCornerShape
diff --git a/compose/foundation/foundation/benchmark/src/androidTest/java/androidx/compose/foundation/benchmark/text/TextDelegateBenchmark.kt b/compose/foundation/foundation/benchmark/src/androidTest/java/androidx/compose/foundation/benchmark/text/TextDelegateBenchmark.kt
index 9bb4429..101c12e 100644
--- a/compose/foundation/foundation/benchmark/src/androidTest/java/androidx/compose/foundation/benchmark/text/TextDelegateBenchmark.kt
+++ b/compose/foundation/foundation/benchmark/src/androidTest/java/androidx/compose/foundation/benchmark/text/TextDelegateBenchmark.kt
@@ -35,12 +35,12 @@
import androidx.compose.ui.unit.sp
import androidx.test.filters.LargeTest
import androidx.test.platform.app.InstrumentationRegistry
+import kotlin.math.roundToInt
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import kotlin.math.roundToInt
@OptIn(InternalFoundationTextApi::class)
@LargeTest
diff --git a/compose/foundation/foundation/benchmark/src/androidTest/java/androidx/compose/foundation/benchmark/text/TextFieldToggleTextTestCase.kt b/compose/foundation/foundation/benchmark/src/androidTest/java/androidx/compose/foundation/benchmark/text/TextFieldToggleTextTestCase.kt
index 308b085..92c706c 100644
--- a/compose/foundation/foundation/benchmark/src/androidTest/java/androidx/compose/foundation/benchmark/text/TextFieldToggleTextTestCase.kt
+++ b/compose/foundation/foundation/benchmark/src/androidTest/java/androidx/compose/foundation/benchmark/text/TextFieldToggleTextTestCase.kt
@@ -32,8 +32,8 @@
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalTextInputService
-import androidx.compose.ui.text.benchmark.RandomTextGenerator
import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.benchmark.RandomTextGenerator
import androidx.compose.ui.text.input.EditCommand
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.ImeOptions
diff --git a/compose/foundation/foundation/benchmark/src/androidTest/java/androidx/compose/foundation/benchmark/view/AndroidNestedScrollViewTestCase.kt b/compose/foundation/foundation/benchmark/src/androidTest/java/androidx/compose/foundation/benchmark/view/AndroidNestedScrollViewTestCase.kt
index 7c7f2a5..eb41dcf 100644
--- a/compose/foundation/foundation/benchmark/src/androidTest/java/androidx/compose/foundation/benchmark/view/AndroidNestedScrollViewTestCase.kt
+++ b/compose/foundation/foundation/benchmark/src/androidTest/java/androidx/compose/foundation/benchmark/view/AndroidNestedScrollViewTestCase.kt
@@ -20,11 +20,11 @@
import android.view.View
import android.view.ViewGroup
import android.widget.HorizontalScrollView
+import androidx.compose.foundation.benchmark.NestedScrollerTestCase
import androidx.compose.testutils.ToggleableTestCase
import androidx.compose.testutils.benchmark.android.AndroidTestCase
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.toArgb
-import androidx.compose.foundation.benchmark.NestedScrollerTestCase
import kotlin.random.Random
/**
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/DrawModifiersDemo.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/DrawModifiersDemo.kt
index 0c0c3eb..ca3fffe 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/DrawModifiersDemo.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/DrawModifiersDemo.kt
@@ -19,8 +19,8 @@
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
-import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.samples.BorderSample
import androidx.compose.foundation.samples.BorderSampleWithBrush
import androidx.compose.foundation.samples.BorderSampleWithDataClass
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/OverscrollDemo.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/OverscrollDemo.kt
index df7592a..c375e4e 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/OverscrollDemo.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/OverscrollDemo.kt
@@ -20,9 +20,9 @@
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.samples.OverscrollSample
import androidx.compose.foundation.samples.OverscrollWithDraggable_After
import androidx.compose.foundation.samples.OverscrollWithDraggable_Before
-import androidx.compose.foundation.samples.OverscrollSample
import androidx.compose.foundation.verticalScroll
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/PointerIconDemo.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/PointerIconDemo.kt
index 6a4a6cd..4c73cb5 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/PointerIconDemo.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/PointerIconDemo.kt
@@ -26,8 +26,8 @@
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.requiredSize
import androidx.compose.integration.demos.common.ComposableDemo
-import androidx.compose.runtime.Composable
import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.SolidColor
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/SuspendingGesturesDemo.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/SuspendingGesturesDemo.kt
index 6bae60a..4a3744e 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/SuspendingGesturesDemo.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/SuspendingGesturesDemo.kt
@@ -20,8 +20,8 @@
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.background
import androidx.compose.foundation.border
-import androidx.compose.foundation.gestures.detectDragGestures
import androidx.compose.foundation.gestures.awaitEachGesture
+import androidx.compose.foundation.gestures.detectDragGestures
import androidx.compose.foundation.gestures.detectHorizontalDragGestures
import androidx.compose.foundation.gestures.detectTapGestures
import androidx.compose.foundation.gestures.detectTransformGestures
@@ -33,12 +33,12 @@
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.requiredHeight
-import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.height
-import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.offset
+import androidx.compose.foundation.layout.requiredHeight
import androidx.compose.foundation.layout.requiredSize
import androidx.compose.foundation.layout.requiredWidth
+import androidx.compose.foundation.layout.size
import androidx.compose.integration.demos.common.ComposableDemo
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/snapping/LazyGridSnappingDemos.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/snapping/LazyGridSnappingDemos.kt
index 7b7ec83..86151d9 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/snapping/LazyGridSnappingDemos.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/snapping/LazyGridSnappingDemos.kt
@@ -19,8 +19,8 @@
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.background
import androidx.compose.foundation.gestures.FlingBehavior
-import androidx.compose.foundation.gestures.snapping.rememberSnapFlingBehavior
import androidx.compose.foundation.gestures.snapping.SnapLayoutInfoProvider
+import androidx.compose.foundation.gestures.snapping.rememberSnapFlingBehavior
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeFontPadding.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeFontPadding.kt
index 3e76a2e..d20cf1b 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeFontPadding.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeFontPadding.kt
@@ -43,10 +43,10 @@
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.text.Placeholder
import androidx.compose.ui.text.PlaceholderVerticalAlign
+import androidx.compose.ui.text.PlatformTextStyle
import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.buildAnnotatedString
-import androidx.compose.ui.text.PlatformTextStyle
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.text.withStyle
import androidx.compose.ui.tooling.preview.Preview
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeText.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeText.kt
index 709067a..5a10e21 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeText.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeText.kt
@@ -44,8 +44,8 @@
import androidx.compose.material.Icon
import androidx.compose.material.IconButton
import androidx.compose.material.ListItem
-import androidx.compose.material.Slider
import androidx.compose.material.RadioButton
+import androidx.compose.material.Slider
import androidx.compose.material.Switch
import androidx.compose.material.Text
import androidx.compose.material.icons.Icons
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeTextAccessibility.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeTextAccessibility.kt
index 3f36fd9..f3ccb2e 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeTextAccessibility.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeTextAccessibility.kt
@@ -16,8 +16,8 @@
package androidx.compose.foundation.demos.text
-import androidx.compose.material.Text
import androidx.compose.foundation.layout.Column
+import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.text.ExperimentalTextApi
import androidx.compose.ui.text.SpanStyle
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeTextSelection.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeTextSelection.kt
index d251f63..fcfec76 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeTextSelection.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeTextSelection.kt
@@ -24,12 +24,12 @@
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.foundation.text.selection.DisableSelection
+import androidx.compose.foundation.text.selection.SelectionContainer
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
-import androidx.compose.foundation.text.selection.DisableSelection
-import androidx.compose.foundation.text.selection.SelectionContainer
import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.buildAnnotatedString
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeTextSelectionSample.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeTextSelectionSample.kt
index 01670e0..9d63ed7 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeTextSelectionSample.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeTextSelectionSample.kt
@@ -24,15 +24,15 @@
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
+import androidx.compose.foundation.text.selection.SelectionContainer
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
-import androidx.compose.foundation.text.selection.SelectionContainer
import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.TextStyle
-import androidx.compose.ui.text.withStyle
import androidx.compose.ui.text.buildAnnotatedString
+import androidx.compose.ui.text.withStyle
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/TextFieldFocusKeyboardInteraction.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/TextFieldFocusKeyboardInteraction.kt
index e57604b..0d01e6b 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/TextFieldFocusKeyboardInteraction.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/TextFieldFocusKeyboardInteraction.kt
@@ -16,11 +16,11 @@
package androidx.compose.foundation.demos.text
-import android.widget.Button as AndroidButton
import android.content.Context
import android.view.ViewGroup.LayoutParams.MATCH_PARENT
import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
import android.view.inputmethod.EditorInfo
+import android.widget.Button as AndroidButton
import android.widget.EditText
import android.widget.LinearLayout
import androidx.compose.foundation.border
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/VariableFontsDemo.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/VariableFontsDemo.kt
index 843f8fe..8e052ff 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/VariableFontsDemo.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/VariableFontsDemo.kt
@@ -25,7 +25,6 @@
import androidx.compose.foundation.Canvas
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.background
-import androidx.testutils.fonts.R
import androidx.compose.foundation.demos.text.FontVariationSettingsCompot.compatSetFontVariationSettings
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
@@ -54,6 +53,7 @@
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
+import androidx.testutils.fonts.R
import java.io.File
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
diff --git a/compose/foundation/foundation/samples/build.gradle b/compose/foundation/foundation/samples/build.gradle
index 38d57ca..d6871de 100644
--- a/compose/foundation/foundation/samples/build.gradle
+++ b/compose/foundation/foundation/samples/build.gradle
@@ -41,7 +41,7 @@
}
androidx {
- name = "AndroidX Compose UI Foundational Component Samples"
+ name = "Compose UI Foundational Component Samples"
type = LibraryType.SAMPLES
inceptionYear = "2019"
description = "Contains the sample code for the Androidx Compose UI Foundational Components"
diff --git a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/ClickableTextSample.kt b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/ClickableTextSample.kt
index 2cc6ff7..96b1a1e 100644
--- a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/ClickableTextSample.kt
+++ b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/ClickableTextSample.kt
@@ -18,8 +18,8 @@
import android.util.Log
import androidx.annotation.Sampled
-import androidx.compose.foundation.text.ClickableText
import androidx.compose.foundation.gestures.detectTapGestures
+import androidx.compose.foundation.text.ClickableText
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
diff --git a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/DragGestureDetectorSamples.kt b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/DragGestureDetectorSamples.kt
index ed0b6f4..d08b4cf 100644
--- a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/DragGestureDetectorSamples.kt
+++ b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/DragGestureDetectorSamples.kt
@@ -19,6 +19,7 @@
import androidx.annotation.Sampled
import androidx.compose.foundation.background
import androidx.compose.foundation.gestures.awaitDragOrCancellation
+import androidx.compose.foundation.gestures.awaitEachGesture
import androidx.compose.foundation.gestures.awaitFirstDown
import androidx.compose.foundation.gestures.awaitHorizontalDragOrCancellation
import androidx.compose.foundation.gestures.awaitHorizontalTouchSlopOrCancellation
@@ -27,7 +28,6 @@
import androidx.compose.foundation.gestures.awaitVerticalTouchSlopOrCancellation
import androidx.compose.foundation.gestures.detectDragGestures
import androidx.compose.foundation.gestures.detectDragGesturesAfterLongPress
-import androidx.compose.foundation.gestures.awaitEachGesture
import androidx.compose.foundation.gestures.detectHorizontalDragGestures
import androidx.compose.foundation.gestures.detectVerticalDragGestures
import androidx.compose.foundation.gestures.drag
diff --git a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/FocusableSample.kt b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/FocusableSample.kt
index e394ae4..c90595b 100644
--- a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/FocusableSample.kt
+++ b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/FocusableSample.kt
@@ -20,8 +20,8 @@
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.border
import androidx.compose.foundation.focusGroup
-import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.focusable
+import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.interaction.collectIsFocusedAsState
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
diff --git a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/InteractionSourceSample.kt b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/InteractionSourceSample.kt
index 4b8fb36..ffe33b6 100644
--- a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/InteractionSourceSample.kt
+++ b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/InteractionSourceSample.kt
@@ -18,17 +18,17 @@
import androidx.annotation.Sampled
import androidx.compose.foundation.BorderStroke
-import androidx.compose.foundation.interaction.DragInteraction
-import androidx.compose.foundation.interaction.Interaction
-import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.LocalIndication
-import androidx.compose.foundation.interaction.PressInteraction
import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.gestures.draggable
import androidx.compose.foundation.gestures.rememberDraggableState
import androidx.compose.foundation.indication
+import androidx.compose.foundation.interaction.DragInteraction
+import androidx.compose.foundation.interaction.Interaction
+import androidx.compose.foundation.interaction.MutableInteractionSource
+import androidx.compose.foundation.interaction.PressInteraction
import androidx.compose.foundation.interaction.collectIsDraggedAsState
import androidx.compose.foundation.interaction.collectIsPressedAsState
import androidx.compose.foundation.layout.Box
diff --git a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/ScrollerSamples.kt b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/ScrollerSamples.kt
index b0028b7..9a1430e 100644
--- a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/ScrollerSamples.kt
+++ b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/ScrollerSamples.kt
@@ -17,17 +17,17 @@
package androidx.compose.foundation.samples
import androidx.annotation.Sampled
-import androidx.compose.foundation.gestures.scrollBy
-import androidx.compose.foundation.gestures.animateScrollBy
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
+import androidx.compose.foundation.gestures.animateScrollBy
+import androidx.compose.foundation.gestures.scrollBy
import androidx.compose.foundation.horizontalScroll
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.requiredHeight
import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.requiredHeight
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
diff --git a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/SelectionSample.kt b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/SelectionSample.kt
index 2d93ad6..38973fb 100644
--- a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/SelectionSample.kt
+++ b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/SelectionSample.kt
@@ -18,10 +18,10 @@
import androidx.annotation.Sampled
import androidx.compose.foundation.layout.Column
-import androidx.compose.material.Text
-import androidx.compose.runtime.Composable
import androidx.compose.foundation.text.selection.DisableSelection
import androidx.compose.foundation.text.selection.SelectionContainer
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
@Sampled
@Composable
diff --git a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/TapGestureSamples.kt b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/TapGestureSamples.kt
index 9255c67..b78ea5d 100644
--- a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/TapGestureSamples.kt
+++ b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/TapGestureSamples.kt
@@ -20,9 +20,9 @@
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.background
import androidx.compose.foundation.border
+import androidx.compose.foundation.gestures.awaitEachGesture
import androidx.compose.foundation.gestures.awaitFirstDown
import androidx.compose.foundation.gestures.awaitLongPressOrCancellation
-import androidx.compose.foundation.gestures.awaitEachGesture
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
diff --git a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/TransformGestureSamples.kt b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/TransformGestureSamples.kt
index d4940a6..f0c3785 100644
--- a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/TransformGestureSamples.kt
+++ b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/TransformGestureSamples.kt
@@ -18,14 +18,14 @@
import androidx.annotation.Sampled
import androidx.compose.foundation.background
+import androidx.compose.foundation.gestures.awaitEachGesture
+import androidx.compose.foundation.gestures.awaitFirstDown
import androidx.compose.foundation.gestures.calculateCentroid
import androidx.compose.foundation.gestures.calculateCentroidSize
import androidx.compose.foundation.gestures.calculatePan
import androidx.compose.foundation.gestures.calculateRotation
import androidx.compose.foundation.gestures.calculateZoom
import androidx.compose.foundation.gestures.detectTransformGestures
-import androidx.compose.foundation.gestures.awaitFirstDown
-import androidx.compose.foundation.gestures.awaitEachGesture
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.offset
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/BorderTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/BorderTest.kt
index 599ccd0..1eb8626 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/BorderTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/BorderTest.kt
@@ -19,8 +19,8 @@
import android.os.Build
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.requiredSize
+import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.GenericShape
import androidx.compose.foundation.shape.RoundedCornerShape
@@ -54,13 +54,13 @@
import androidx.compose.ui.unit.dp
import androidx.test.filters.MediumTest
import androidx.test.filters.SdkSuppress
+import kotlin.math.floor
+import kotlin.math.roundToInt
import org.junit.Assert.assertEquals
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import kotlin.math.floor
-import kotlin.math.roundToInt
@MediumTest
@SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ImageTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ImageTest.kt
index f852d45..364d71f 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ImageTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ImageTest.kt
@@ -19,9 +19,9 @@
import android.os.Build
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.heightIn
+import androidx.compose.foundation.layout.requiredSize
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.sizeIn
-import androidx.compose.foundation.layout.requiredSize
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.foundation.test.R
import androidx.compose.runtime.mutableStateOf
@@ -41,8 +41,8 @@
import androidx.compose.ui.graphics.Path
import androidx.compose.ui.graphics.asAndroidBitmap
import androidx.compose.ui.graphics.drawscope.CanvasDrawScope
-import androidx.compose.ui.graphics.painter.ColorPainter
import androidx.compose.ui.graphics.painter.BitmapPainter
+import androidx.compose.ui.graphics.painter.ColorPainter
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.graphics.toPixelMap
import androidx.compose.ui.layout.ContentScale
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/IndicationTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/IndicationTest.kt
index 64ba70c..6de2d3d 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/IndicationTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/IndicationTest.kt
@@ -37,6 +37,8 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
@@ -45,8 +47,6 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollableTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollableTest.kt
index 35b14c8..7ae5f78a 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollableTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollableTest.kt
@@ -49,6 +49,7 @@
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
+import androidx.compose.testutils.first
import androidx.compose.ui.Alignment
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
@@ -2161,7 +2162,8 @@
consumeScrollDelta = { it }
)
rule.setContentAndGetScope {
- val modifier = Modifier.scrollable(controller, Orientation.Vertical) as InspectableValue
+ val modifier =
+ Modifier.scrollable(controller, Orientation.Vertical).first() as InspectableValue
assertThat(modifier.nameFallback).isEqualTo("scrollable")
assertThat(modifier.valueOverride).isNull()
assertThat(modifier.inspectableElements.map { it.name }.asIterable()).containsExactly(
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/SystemGestureExclusionTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/SystemGestureExclusionTest.kt
index 17e0b89..8314fe4 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/SystemGestureExclusionTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/SystemGestureExclusionTest.kt
@@ -16,6 +16,7 @@
package androidx.compose.foundation
+import android.graphics.Rect as AndroidRect
import android.os.Build
import android.view.View
import android.view.ViewGroup
@@ -41,7 +42,6 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import android.graphics.Rect as AndroidRect
/**
* Testing the support for Android Views in Compose UI.
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/AwaitEachGestureTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/AwaitEachGestureTest.kt
index 592c0df..2107d07 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/AwaitEachGestureTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/AwaitEachGestureTest.kt
@@ -34,14 +34,14 @@
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.cancel
import kotlinx.coroutines.coroutineScope
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/AwaitTouchEventTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/AwaitTouchEventTest.kt
index 591e968..851df06 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/AwaitTouchEventTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/AwaitTouchEventTest.kt
@@ -16,9 +16,9 @@
package androidx.compose.foundation.gesture
+import androidx.compose.foundation.gestures.awaitEachGesture
import androidx.compose.foundation.gestures.awaitFirstDown
import androidx.compose.foundation.gestures.awaitLongPressOrCancellation
-import androidx.compose.foundation.gestures.awaitEachGesture
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.text.BasicText
import androidx.compose.ui.Modifier
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/ForEachGestureTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/ForEachGestureTest.kt
index 5660223..59f9952 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/ForEachGestureTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/ForEachGestureTest.kt
@@ -31,10 +31,6 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertWithMessage
-import org.junit.Assert.assertTrue
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
import kotlinx.coroutines.CancellationException
@@ -42,6 +38,10 @@
import kotlinx.coroutines.awaitCancellation
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.launch
+import org.junit.Assert.assertTrue
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
@Suppress("DEPRECATION")
@MediumTest
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/snapping/LazyGridSnapFlingBehaviorTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/snapping/LazyGridSnapFlingBehaviorTest.kt
index 39f045c..af3679b 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/snapping/LazyGridSnapFlingBehaviorTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/snapping/LazyGridSnapFlingBehaviorTest.kt
@@ -24,7 +24,10 @@
import androidx.compose.foundation.gestures.snapping.SnapLayoutInfoProvider
import androidx.compose.foundation.gestures.snapping.SnapPositionInLayout.Companion.CenterToCenter
import androidx.compose.foundation.gestures.snapping.calculateDistanceToDesiredSnapPosition
+import androidx.compose.foundation.gestures.snapping.offsetOnMainAxis
import androidx.compose.foundation.gestures.snapping.rememberSnapFlingBehavior
+import androidx.compose.foundation.gestures.snapping.singleAxisViewportSize
+import androidx.compose.foundation.gestures.snapping.sizeOnMainAxis
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.size
@@ -469,11 +472,16 @@
var itemIndex = -1
if (state == null) return -1
var minDistance = Float.POSITIVE_INFINITY
+ val layoutInfo = state.layoutInfo
(state.layoutInfo.visibleItemsInfo).forEach {
val distance = calculateDistanceToDesiredSnapPosition(
- state.layoutInfo,
- it,
- CenterToCenter
+ mainAxisViewPortSize = layoutInfo.singleAxisViewportSize,
+ beforeContentPadding = layoutInfo.beforeContentPadding,
+ afterContentPadding = layoutInfo.afterContentPadding,
+ itemSize = it.sizeOnMainAxis(orientation = layoutInfo.orientation),
+ itemOffset = it.offsetOnMainAxis(orientation = layoutInfo.orientation),
+ itemIndex = it.index,
+ snapPositionInLayout = CenterToCenter
)
if (abs(distance) < minDistance) {
minDistance = abs(distance)
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/snapping/LazyListSnapFlingBehaviorTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/snapping/LazyListSnapFlingBehaviorTest.kt
index 3153d92..603bbf7 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/snapping/LazyListSnapFlingBehaviorTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/snapping/LazyListSnapFlingBehaviorTest.kt
@@ -26,6 +26,7 @@
import androidx.compose.foundation.gestures.snapping.SnapPositionInLayout.Companion.CenterToCenter
import androidx.compose.foundation.gestures.snapping.calculateDistanceToDesiredSnapPosition
import androidx.compose.foundation.gestures.snapping.rememberSnapFlingBehavior
+import androidx.compose.foundation.gestures.snapping.singleAxisViewportSize
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.size
@@ -457,11 +458,16 @@
var itemIndex = -1
if (state == null) return -1
var minDistance = Float.POSITIVE_INFINITY
+ val layoutInfo = state.layoutInfo
(state.layoutInfo.visibleItemsInfo).forEach {
val distance = calculateDistanceToDesiredSnapPosition(
- state.layoutInfo,
- it,
- CenterToCenter
+ mainAxisViewPortSize = layoutInfo.singleAxisViewportSize,
+ beforeContentPadding = layoutInfo.beforeContentPadding,
+ afterContentPadding = layoutInfo.afterContentPadding,
+ itemSize = it.size,
+ itemOffset = it.offset,
+ itemIndex = it.index,
+ snapPositionInLayout = CenterToCenter
)
if (abs(distance) < minDistance) {
minDistance = abs(distance)
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/grid/LazyGridAnimateItemPlacementTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/grid/LazyGridAnimateItemPlacementTest.kt
index 030e1d7..5885114 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/grid/LazyGridAnimateItemPlacementTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/grid/LazyGridAnimateItemPlacementTest.kt
@@ -18,6 +18,8 @@
import androidx.compose.animation.core.FiniteAnimationSpec
import androidx.compose.animation.core.LinearEasing
+import androidx.compose.animation.core.VisibilityThreshold
+import androidx.compose.animation.core.spring
import androidx.compose.animation.core.tween
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.gestures.scrollBy
@@ -28,6 +30,8 @@
import androidx.compose.foundation.layout.requiredHeightIn
import androidx.compose.foundation.layout.requiredWidth
import androidx.compose.foundation.layout.requiredWidthIn
+import androidx.compose.foundation.lazy.list.getValueAtFrame
+import androidx.compose.foundation.lazy.list.getVelocityAtFrame
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
@@ -2254,6 +2258,70 @@
}
}
+ @Test
+ fun interruptedSizeChange() {
+ var item0Size by mutableStateOf(itemSizeDp)
+ val animSpec = spring(visibilityThreshold = IntOffset.VisibilityThreshold)
+ rule.setContent {
+ LazyGrid(cells = 1) {
+ items(2, key = { it }) {
+ Item(it, if (it == 0) item0Size else itemSizeDp, animSpec = animSpec)
+ }
+ }
+ }
+
+ rule.runOnUiThread {
+ item0Size = itemSize2Dp
+ }
+
+ rule.waitForIdle()
+ rule.mainClock.advanceTimeByFrame()
+ onAnimationFrame(duration = FrameDuration) { fraction ->
+ if (fraction == 0f) {
+ assertPositions(
+ 0 to AxisOffset(0f, 0f),
+ 1 to AxisOffset(0f, itemSize)
+ )
+ } else {
+ assertThat(fraction).isEqualTo(1f)
+ val valueAfterOneFrame =
+ animSpec.getValueAtFrame(1, from = itemSize, to = itemSize2)
+ assertPositions(
+ 0 to AxisOffset(0f, 0f),
+ 1 to AxisOffset(0f, valueAfterOneFrame)
+ )
+ }
+ }
+
+ rule.runOnUiThread {
+ item0Size = 0.dp
+ }
+
+ rule.waitForIdle()
+ val startValue = animSpec.getValueAtFrame(2, from = itemSize, to = itemSize2)
+ val startVelocity = animSpec.getVelocityAtFrame(2, from = itemSize, to = itemSize2)
+ onAnimationFrame(duration = FrameDuration) { fraction ->
+ if (fraction == 0f) {
+ assertPositions(
+ 0 to AxisOffset(0f, 0f),
+ 1 to AxisOffset(0f, startValue)
+ )
+ } else {
+ assertThat(fraction).isEqualTo(1f)
+ val valueAfterThreeFrames = animSpec.getValueAtFrame(
+ 1,
+ from = startValue,
+ to = 0f,
+ initialVelocity = startVelocity
+ )
+ assertPositions(
+ 0 to AxisOffset(0f, 0f),
+ 1 to AxisOffset(0f, valueAfterThreeFrames)
+ )
+ }
+ }
+ }
+
private fun AxisOffset(crossAxis: Float, mainAxis: Float) =
if (isVertical) Offset(crossAxis, mainAxis) else Offset(mainAxis, crossAxis)
@@ -2337,9 +2405,11 @@
for (i in 0..duration step FrameDuration) {
val fraction = i / duration.toFloat()
onFrame(fraction)
- rule.mainClock.advanceTimeBy(FrameDuration)
- expectedTime += FrameDuration
- assertThat(expectedTime).isEqualTo(rule.mainClock.currentTime)
+ if (i < duration) {
+ rule.mainClock.advanceTimeBy(FrameDuration)
+ expectedTime += FrameDuration
+ assertThat(expectedTime).isEqualTo(rule.mainClock.currentTime)
+ }
}
}
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/grid/LazyGridsIndexedTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/grid/LazyGridsIndexedTest.kt
index d6b35bd..53934b3 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/grid/LazyGridsIndexedTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/grid/LazyGridsIndexedTest.kt
@@ -17,8 +17,8 @@
package androidx.compose.foundation.lazy.grid
import androidx.compose.foundation.layout.Spacer
-import androidx.compose.foundation.layout.requiredHeight
import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.requiredHeight
import androidx.compose.foundation.text.BasicText
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.testTag
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/grid/LazyNestedScrollingTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/grid/LazyNestedScrollingTest.kt
index eba984d..25502d0 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/grid/LazyNestedScrollingTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/grid/LazyNestedScrollingTest.kt
@@ -16,18 +16,18 @@
package androidx.compose.foundation.lazy.grid
+import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.gestures.ScrollableState
import androidx.compose.foundation.gestures.scrollable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Spacer
-import androidx.compose.foundation.layout.requiredSize
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.geometry.Offset
-import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.layout.requiredHeight
+import androidx.compose.foundation.layout.requiredSize
import androidx.compose.foundation.lazy.list.TestTouchSlop
import androidx.compose.foundation.lazy.list.scrollBy
import androidx.compose.foundation.lazy.list.setContentWithTestViewConfiguration
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onNodeWithTag
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/grid/LazyScrollTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/grid/LazyScrollTest.kt
index c868e03..fc52c37 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/grid/LazyScrollTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/grid/LazyScrollTest.kt
@@ -24,8 +24,8 @@
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.width
import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.ui.Modifier
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.unit.Dp
import androidx.test.filters.MediumTest
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyListAnimateItemPlacementTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyListAnimateItemPlacementTest.kt
index fa60831..2763637 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyListAnimateItemPlacementTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyListAnimateItemPlacementTest.kt
@@ -18,6 +18,10 @@
import androidx.compose.animation.core.FiniteAnimationSpec
import androidx.compose.animation.core.LinearEasing
+import androidx.compose.animation.core.SpringSpec
+import androidx.compose.animation.core.VectorConverter
+import androidx.compose.animation.core.VisibilityThreshold
+import androidx.compose.animation.core.spring
import androidx.compose.animation.core.tween
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.gestures.scrollBy
@@ -65,14 +69,15 @@
import androidx.test.filters.LargeTest
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
+import java.util.concurrent.TimeUnit
+import kotlin.math.roundToInt
import kotlinx.coroutines.runBlocking
import org.junit.Assume.assumeTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
-import org.junit.runners.Parameterized
-import kotlin.math.roundToInt
import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
@LargeTest
@RunWith(Parameterized::class)
@@ -1703,6 +1708,58 @@
}
}
+ @Test
+ fun interruptedSizeChange() {
+ var item0Size by mutableStateOf(itemSizeDp)
+ val animSpec = spring(visibilityThreshold = IntOffset.VisibilityThreshold)
+ rule.setContent {
+ LazyList {
+ items(2, key = { it }) {
+ Item(it, if (it == 0) item0Size else itemSizeDp, animSpec = animSpec)
+ }
+ }
+ }
+
+ rule.runOnUiThread {
+ item0Size = itemSize2Dp
+ }
+
+ rule.waitForIdle()
+ rule.mainClock.advanceTimeByFrame()
+ onAnimationFrame(duration = FrameDuration) { fraction ->
+ if (fraction == 0f) {
+ assertPositions(0 to 0f, 1 to itemSize)
+ } else {
+ assertThat(fraction).isEqualTo(1f)
+ val valueAfterOneFrame =
+ animSpec.getValueAtFrame(1, from = itemSize, to = itemSize2)
+ assertPositions(0 to 0f, 1 to valueAfterOneFrame, fraction = fraction)
+ }
+ }
+
+ rule.runOnUiThread {
+ item0Size = 0.dp
+ }
+
+ rule.waitForIdle()
+ val startValue = animSpec.getValueAtFrame(2, from = itemSize, to = itemSize2)
+ val startVelocity = animSpec.getVelocityAtFrame(2, from = itemSize, to = itemSize2)
+ onAnimationFrame(duration = FrameDuration) { fraction ->
+ if (fraction == 0f) {
+ assertPositions(0 to 0f, 1 to startValue)
+ } else {
+ assertThat(fraction).isEqualTo(1f)
+ val valueAfterThreeFrames = animSpec.getValueAtFrame(
+ 1,
+ from = startValue,
+ to = 0f,
+ initialVelocity = startVelocity
+ )
+ assertPositions(0 to 0f, 1 to valueAfterThreeFrames)
+ }
+ }
+ }
+
private fun assertPositions(
vararg expected: Pair<Any, Float>,
crossAxis: List<Pair<Any, Float>>? = null,
@@ -1777,9 +1834,11 @@
for (i in 0..duration step FrameDuration) {
val fraction = i / duration.toFloat()
onFrame(fraction)
- rule.mainClock.advanceTimeBy(FrameDuration)
- expectedTime += FrameDuration
- assertThat(expectedTime).isEqualTo(rule.mainClock.currentTime)
+ if (i < duration) {
+ rule.mainClock.advanceTimeBy(FrameDuration)
+ expectedTime += FrameDuration
+ assertThat(expectedTime).isEqualTo(rule.mainClock.currentTime)
+ }
}
}
@@ -1923,3 +1982,51 @@
End,
Center
}
+
+internal fun SpringSpec<IntOffset>.getValueAtFrame(
+ frameCount: Int,
+ from: Float,
+ to: Float,
+ initialVelocity: IntOffset = IntOffset.Zero
+): Float {
+ val frameInNanos = TimeUnit.MILLISECONDS.toNanos(FrameDuration)
+ val vectorized = vectorize(converter = IntOffset.VectorConverter)
+ return IntOffset.VectorConverter.convertFromVector(
+ vectorized.getValueFromNanos(
+ playTimeNanos = frameInNanos * frameCount,
+ initialValue = IntOffset.VectorConverter.convertToVector(
+ IntOffset(0, from.toInt())
+ ),
+ targetValue = IntOffset.VectorConverter.convertToVector(
+ IntOffset(0, to.toInt())
+ ),
+ initialVelocity = IntOffset.VectorConverter.convertToVector(
+ initialVelocity
+ )
+ )
+ ).y.toFloat()
+}
+
+internal fun SpringSpec<IntOffset>.getVelocityAtFrame(
+ frameCount: Int,
+ from: Float,
+ to: Float,
+ initialVelocity: IntOffset = IntOffset.Zero
+): IntOffset {
+ val frameInNanos = TimeUnit.MILLISECONDS.toNanos(FrameDuration)
+ val vectorized = vectorize(converter = IntOffset.VectorConverter)
+ return IntOffset.VectorConverter.convertFromVector(
+ vectorized.getVelocityFromNanos(
+ playTimeNanos = frameInNanos * frameCount,
+ initialValue = IntOffset.VectorConverter.convertToVector(
+ IntOffset(0, from.toInt())
+ ),
+ targetValue = IntOffset.VectorConverter.convertToVector(
+ IntOffset(0, to.toInt())
+ ),
+ initialVelocity = IntOffset.VectorConverter.convertToVector(
+ initialVelocity
+ )
+ )
+ )
+}
\ No newline at end of file
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyListPinnableContainerTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyListPinnableContainerTest.kt
index a743ac3c..1b9ebac 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyListPinnableContainerTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyListPinnableContainerTest.kt
@@ -18,9 +18,9 @@
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.size
-import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyListState
+import androidx.compose.foundation.lazy.items
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.DisposableEffect
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyListsIndexedTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyListsIndexedTest.kt
index df2d615..41fc6d4 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyListsIndexedTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyListsIndexedTest.kt
@@ -21,10 +21,10 @@
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Spacer
-import androidx.compose.foundation.layout.requiredHeight
import androidx.compose.foundation.layout.height
-import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.layout.requiredHeight
import androidx.compose.foundation.layout.requiredWidth
+import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyList
import androidx.compose.foundation.lazy.LazyListScope
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyNestedScrollingTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyNestedScrollingTest.kt
index 78a5fdc..cac03bd 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyNestedScrollingTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyNestedScrollingTest.kt
@@ -16,17 +16,17 @@
package androidx.compose.foundation.lazy.list
+import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.gestures.ScrollableState
import androidx.compose.foundation.gestures.scrollable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.requiredSize
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.geometry.Offset
-import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyRow
import androidx.compose.foundation.lazy.items
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onNodeWithTag
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyScrollTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyScrollTest.kt
index bca1dc3..14fe3b1 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyScrollTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyScrollTest.kt
@@ -19,24 +19,26 @@
import androidx.compose.animation.core.FloatSpringSpec
import androidx.compose.foundation.AutoTestFrameClock
import androidx.compose.foundation.BaseLazyLayoutTestWithOrientation.Companion.FrameDuration
+import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.gestures.animateScrollBy
+import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.width
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-import androidx.compose.foundation.gestures.Orientation
-import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.foundation.lazy.LazyRow
import androidx.compose.foundation.lazy.rememberLazyListState
+import androidx.compose.runtime.Composable
import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.ui.Modifier
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.unit.Dp
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
+import java.util.concurrent.TimeUnit
+import kotlin.math.roundToInt
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@@ -47,8 +49,6 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import java.util.concurrent.TimeUnit
-import kotlin.math.roundToInt
@MediumTest
@RunWith(Parameterized::class)
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridAnimateItemPlacementTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridAnimateItemPlacementTest.kt
index 984c7d4..41f1c73f 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridAnimateItemPlacementTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridAnimateItemPlacementTest.kt
@@ -18,6 +18,8 @@
import androidx.compose.animation.core.FiniteAnimationSpec
import androidx.compose.animation.core.LinearEasing
+import androidx.compose.animation.core.VisibilityThreshold
+import androidx.compose.animation.core.spring
import androidx.compose.animation.core.tween
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.gestures.scrollBy
@@ -27,6 +29,8 @@
import androidx.compose.foundation.layout.requiredHeightIn
import androidx.compose.foundation.layout.requiredWidth
import androidx.compose.foundation.layout.requiredWidthIn
+import androidx.compose.foundation.lazy.list.getValueAtFrame
+import androidx.compose.foundation.lazy.list.getVelocityAtFrame
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
@@ -1992,6 +1996,70 @@
}
}
+ @Test
+ fun interruptedSizeChange() {
+ var item0Size by mutableStateOf(itemSizeDp)
+ val animSpec = spring(visibilityThreshold = IntOffset.VisibilityThreshold)
+ rule.setContent {
+ LazyStaggeredGrid(cells = 1) {
+ items(2, key = { it }) {
+ Item(it, if (it == 0) item0Size else itemSizeDp, animSpec = animSpec)
+ }
+ }
+ }
+
+ rule.runOnUiThread {
+ item0Size = itemSize2Dp
+ }
+
+ rule.waitForIdle()
+ rule.mainClock.advanceTimeByFrame()
+ onAnimationFrame(duration = FrameDuration) { fraction ->
+ if (fraction == 0f) {
+ assertPositions(
+ 0 to AxisOffset(0f, 0f),
+ 1 to AxisOffset(0f, itemSize)
+ )
+ } else {
+ assertThat(fraction).isEqualTo(1f)
+ val valueAfterOneFrame =
+ animSpec.getValueAtFrame(1, from = itemSize, to = itemSize2)
+ assertPositions(
+ 0 to AxisOffset(0f, 0f),
+ 1 to AxisOffset(0f, valueAfterOneFrame)
+ )
+ }
+ }
+
+ rule.runOnUiThread {
+ item0Size = 0.dp
+ }
+
+ rule.waitForIdle()
+ val startValue = animSpec.getValueAtFrame(2, from = itemSize, to = itemSize2)
+ val startVelocity = animSpec.getVelocityAtFrame(2, from = itemSize, to = itemSize2)
+ onAnimationFrame(duration = FrameDuration) { fraction ->
+ if (fraction == 0f) {
+ assertPositions(
+ 0 to AxisOffset(0f, 0f),
+ 1 to AxisOffset(0f, startValue)
+ )
+ } else {
+ assertThat(fraction).isEqualTo(1f)
+ val valueAfterThreeFrames = animSpec.getValueAtFrame(
+ 1,
+ from = startValue,
+ to = 0f,
+ initialVelocity = startVelocity
+ )
+ assertPositions(
+ 0 to AxisOffset(0f, 0f),
+ 1 to AxisOffset(0f, valueAfterThreeFrames)
+ )
+ }
+ }
+ }
+
private fun AxisOffset(crossAxis: Float, mainAxis: Float) =
if (isVertical) Offset(crossAxis, mainAxis) else Offset(mainAxis, crossAxis)
@@ -2075,9 +2143,11 @@
for (i in 0..duration step FrameDuration) {
val fraction = i / duration.toFloat()
onFrame(fraction)
- rule.mainClock.advanceTimeBy(FrameDuration)
- expectedTime += FrameDuration
- assertThat(expectedTime).isEqualTo(rule.mainClock.currentTime)
+ if (i < duration) {
+ rule.mainClock.advanceTimeBy(FrameDuration)
+ expectedTime += FrameDuration
+ assertThat(expectedTime).isEqualTo(rule.mainClock.currentTime)
+ }
}
}
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridReverseLayoutTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridReverseLayoutTest.kt
index 6af08de..344ebe3 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridReverseLayoutTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridReverseLayoutTest.kt
@@ -19,15 +19,15 @@
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.layout.Box
-import androidx.compose.ui.Modifier
import androidx.compose.foundation.layout.size
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
+import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalLayoutDirection
-import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/relocation/BringIntoViewRequesterViewIntegrationTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/relocation/BringIntoViewRequesterViewIntegrationTest.kt
index d3a38ce..37436c9 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/relocation/BringIntoViewRequesterViewIntegrationTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/relocation/BringIntoViewRequesterViewIntegrationTest.kt
@@ -16,8 +16,8 @@
package androidx.compose.foundation.relocation
-import android.graphics.Rect as AndroidRect
import android.content.Context
+import android.graphics.Rect as AndroidRect
import android.view.View
import android.widget.FrameLayout
import androidx.compose.foundation.ExperimentalFoundationApi
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/ClickableTextTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/ClickableTextTest.kt
index b23e468..d48e823 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/ClickableTextTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/ClickableTextTest.kt
@@ -29,6 +29,9 @@
import androidx.compose.ui.text.AnnotatedString
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
import org.mockito.kotlin.any
import org.mockito.kotlin.argWhere
import org.mockito.kotlin.inOrder
@@ -36,9 +39,6 @@
import org.mockito.kotlin.times
import org.mockito.kotlin.verify
import org.mockito.kotlin.verifyNoMoreInteractions
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/CoreTextFieldSoftWrapTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/CoreTextFieldSoftWrapTest.kt
index bba26f4..e96325c 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/CoreTextFieldSoftWrapTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/CoreTextFieldSoftWrapTest.kt
@@ -16,8 +16,8 @@
package androidx.compose.foundation.text
-import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.foundation.layout.requiredWidth
+import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.platform.LocalDensity
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/CoreTextInlineContentTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/CoreTextInlineContentTest.kt
index 0226267..3d76e18 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/CoreTextInlineContentTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/CoreTextInlineContentTest.kt
@@ -43,11 +43,11 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import com.google.common.truth.Truth.assertThat
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.verify
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.verify
@LargeTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/TextDelegateIntegrationTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/TextDelegateIntegrationTest.kt
index 3120601..ecc70a7 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/TextDelegateIntegrationTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/TextDelegateIntegrationTest.kt
@@ -28,13 +28,13 @@
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.sp
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
import com.google.common.truth.Truth.assertThat
+import kotlin.math.roundToInt
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import kotlin.math.roundToInt
@OptIn(InternalFoundationTextApi::class)
@RunWith(AndroidJUnit4::class)
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/TextFieldInteractionsTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/TextFieldInteractionsTest.kt
index dc5e79b..1970055 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/TextFieldInteractionsTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/TextFieldInteractionsTest.kt
@@ -16,12 +16,12 @@
package androidx.compose.foundation.text
+import androidx.compose.foundation.focusable
import androidx.compose.foundation.interaction.DragInteraction
import androidx.compose.foundation.interaction.FocusInteraction
import androidx.compose.foundation.interaction.Interaction
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.interaction.PressInteraction
-import androidx.compose.foundation.focusable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.requiredSize
import androidx.compose.runtime.mutableStateOf
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/TextLayoutResultIntegrationTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/TextLayoutResultIntegrationTest.kt
index b6a2ee9..2a3379c 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/TextLayoutResultIntegrationTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/TextLayoutResultIntegrationTest.kt
@@ -28,13 +28,13 @@
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.sp
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
import com.google.common.truth.Truth.assertThat
+import kotlin.math.floor
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import kotlin.math.floor
@OptIn(InternalFoundationTextApi::class)
@RunWith(AndroidJUnit4::class)
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/modifiers/TextLayoutResultIntegrationTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/modifiers/TextLayoutResultIntegrationTest.kt
index 1735715..e86416a 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/modifiers/TextLayoutResultIntegrationTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/modifiers/TextLayoutResultIntegrationTest.kt
@@ -29,14 +29,14 @@
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.sp
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
+import com.google.common.truth.IntegerSubject
import com.google.common.truth.Truth.assertThat
+import kotlin.math.floor
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import com.google.common.truth.IntegerSubject
-import kotlin.math.floor
@RunWith(AndroidJUnit4::class)
@SmallTest
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/MultiWidgetSelectionDelegateTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/MultiWidgetSelectionDelegateTest.kt
index 05fbc24..e601a24 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/MultiWidgetSelectionDelegateTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/MultiWidgetSelectionDelegateTest.kt
@@ -40,10 +40,10 @@
import androidx.test.filters.SdkSuppress
import androidx.test.platform.app.InstrumentationRegistry
import com.google.common.truth.Truth.assertThat
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.whenever
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.whenever
@RunWith(AndroidJUnit4::class)
@MediumTest
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/SelectionContainerFocusTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/SelectionContainerFocusTest.kt
index 4abc2b5..540a13b7 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/SelectionContainerFocusTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/SelectionContainerFocusTest.kt
@@ -57,13 +57,13 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import com.google.common.truth.Truth.assertThat
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.times
-import org.mockito.kotlin.verify
import java.util.concurrent.CountDownLatch
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.times
+import org.mockito.kotlin.verify
@LargeTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/SelectionContainerTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/SelectionContainerTest.kt
index 54927cb..7096695 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/SelectionContainerTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/SelectionContainerTest.kt
@@ -79,15 +79,15 @@
import androidx.test.filters.LargeTest
import androidx.test.filters.SdkSuppress
import com.google.common.truth.Truth.assertThat
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.times
-import org.mockito.kotlin.verify
import java.util.concurrent.CountDownLatch
import kotlin.math.max
import kotlin.math.sign
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.times
+import org.mockito.kotlin.verify
@LargeTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/SelectionHandlePopupPositionTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/SelectionHandlePopupPositionTest.kt
index 69c23d1..55b4d0e 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/SelectionHandlePopupPositionTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/SelectionHandlePopupPositionTest.kt
@@ -44,6 +44,8 @@
import androidx.test.espresso.matcher.BoundedMatcher
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.hamcrest.CoreMatchers
import org.hamcrest.Description
import org.hamcrest.Matcher
@@ -51,8 +53,6 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/SelectionHandlesTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/SelectionHandlesTest.kt
index d4c185a..8e8cdac 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/SelectionHandlesTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/SelectionHandlesTest.kt
@@ -37,14 +37,14 @@
import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/textfield/TextFieldDefaultWidthTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/textfield/TextFieldDefaultWidthTest.kt
index 6ff37fe..bc01efe 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/textfield/TextFieldDefaultWidthTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/textfield/TextFieldDefaultWidthTest.kt
@@ -36,11 +36,11 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import com.google.common.truth.Truth.assertThat
+import kotlin.math.ceil
+import kotlin.math.roundToInt
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.math.ceil
-import kotlin.math.roundToInt
@LargeTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/textfield/TextFieldOnValueChangeTextFieldValueTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/textfield/TextFieldOnValueChangeTextFieldValueTest.kt
index adda314..ed5ac51 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/textfield/TextFieldOnValueChangeTextFieldValueTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/textfield/TextFieldOnValueChangeTextFieldValueTest.kt
@@ -41,6 +41,10 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
import org.mockito.kotlin.any
import org.mockito.kotlin.argumentCaptor
import org.mockito.kotlin.clearInvocations
@@ -48,10 +52,6 @@
import org.mockito.kotlin.mock
import org.mockito.kotlin.times
import org.mockito.kotlin.verify
-import org.junit.Before
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/textfield/TextFieldTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/textfield/TextFieldTest.kt
index 990b749..e697e3c 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/textfield/TextFieldTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/textfield/TextFieldTest.kt
@@ -150,12 +150,6 @@
import androidx.testutils.fonts.R
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
-import org.mockito.kotlin.any
-import org.mockito.kotlin.argumentCaptor
-import org.mockito.kotlin.atLeastOnce
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.times
-import org.mockito.kotlin.verify
import kotlin.test.assertFailsWith
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
@@ -163,6 +157,12 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.kotlin.any
+import org.mockito.kotlin.argumentCaptor
+import org.mockito.kotlin.atLeastOnce
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.times
+import org.mockito.kotlin.verify
@MediumTest
@RunWith(AndroidJUnit4::class)
@@ -1441,6 +1441,43 @@
assertThat(dividerSize!!.height).isEqualTo(size!!.height)
}
}
+
+ @Test
+ fun decorationBox_togglingInnerTextField() {
+ var value by mutableStateOf("")
+ val decorationTag = "decorationTag"
+ rule.setContent {
+ Column {
+ BasicTextField(
+ value = value,
+ onValueChange = { value = it },
+ modifier = Modifier.fillMaxWidth().testTag(Tag),
+ decorationBox = {
+ // the core text field is at the very bottom
+ if (value.isEmpty()) {
+ BasicText("test", modifier = Modifier.testTag(decorationTag))
+ } else {
+ it()
+ }
+ }
+ )
+ }
+ }
+
+ rule.onNodeWithTag(decorationTag, true).assertExists()
+
+ rule.onNode(hasSetTextAction()).performTextInput("hello")
+
+ rule.onNodeWithTag(decorationTag, true).assertDoesNotExist()
+
+ rule.onNode(hasSetTextAction()).performTextClearance()
+
+ rule.onNodeWithTag(decorationTag, true).assertExists()
+
+ rule.onNode(hasSetTextAction()).performTextInput("hello2")
+
+ rule.onNodeWithTag(decorationTag, true).assertDoesNotExist()
+ }
}
private fun SemanticsNodeInteraction.assertEditableTextEquals(
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/textfield/TextFieldUndoTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/textfield/TextFieldUndoTest.kt
index 3ad3067..4d82c56 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/textfield/TextFieldUndoTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/textfield/TextFieldUndoTest.kt
@@ -16,7 +16,6 @@
package androidx.compose.foundation.textfield
-import androidx.compose.ui.input.key.KeyEvent as ComposeKeyEvent
import android.view.KeyEvent
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.text.BasicTextField
@@ -27,6 +26,7 @@
import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.input.key.Key
+import androidx.compose.ui.input.key.KeyEvent as ComposeKeyEvent
import androidx.compose.ui.input.key.nativeKeyCode
import androidx.compose.ui.platform.LocalTextInputService
import androidx.compose.ui.test.hasSetTextAction
@@ -36,10 +36,10 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
-import org.mockito.kotlin.mock
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.kotlin.mock
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/AndroidOverscroll.kt b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/AndroidOverscroll.kt
index 0df1c34..48fccdc 100644
--- a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/AndroidOverscroll.kt
+++ b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/AndroidOverscroll.kt
@@ -24,8 +24,8 @@
import androidx.compose.foundation.EdgeEffectCompat.onAbsorbCompat
import androidx.compose.foundation.EdgeEffectCompat.onPullDistanceCompat
import androidx.compose.foundation.EdgeEffectCompat.onReleaseWithOppositeDelta
-import androidx.compose.foundation.gestures.awaitFirstDown
import androidx.compose.foundation.gestures.awaitEachGesture
+import androidx.compose.foundation.gestures.awaitFirstDown
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.neverEqualPolicy
diff --git a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/gestures/AndroidScrollable.android.kt b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/gestures/AndroidScrollable.android.kt
index dfff476..3c4a1c1 100644
--- a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/gestures/AndroidScrollable.android.kt
+++ b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/gestures/AndroidScrollable.android.kt
@@ -17,15 +17,15 @@
package androidx.compose.foundation.gestures
import androidx.compose.foundation.fastFold
-import androidx.compose.runtime.Composable
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.input.pointer.PointerEvent
+import androidx.compose.ui.node.CompositionLocalConsumerModifierNode
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.dp
-@Composable
-internal actual fun platformScrollConfig(): ScrollConfig = AndroidConfig
+internal actual fun CompositionLocalConsumerModifierNode.platformScrollConfig(): ScrollConfig =
+ AndroidConfig
private object AndroidConfig : ScrollConfig {
override fun Density.calculateMouseWheelScroll(event: PointerEvent, bounds: IntSize): Offset {
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Background.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Background.kt
index 7fb11a3..83ed93c 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Background.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Background.kt
@@ -16,7 +16,6 @@
package androidx.compose.foundation
-import androidx.compose.ui.graphics.drawscope.ContentDrawScope
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.graphics.Brush
@@ -25,6 +24,7 @@
import androidx.compose.ui.graphics.RectangleShape
import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.graphics.drawOutline
+import androidx.compose.ui.graphics.drawscope.ContentDrawScope
import androidx.compose.ui.node.DrawModifierNode
import androidx.compose.ui.node.ModifierNodeElement
import androidx.compose.ui.platform.InspectorInfo
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Border.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Border.kt
index e188941..c95216d 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Border.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Border.kt
@@ -17,9 +17,9 @@
package androidx.compose.foundation
import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.CacheDrawModifierNode
import androidx.compose.ui.draw.CacheDrawScope
import androidx.compose.ui.draw.DrawResult
-import androidx.compose.ui.draw.CacheDrawModifierNode
import androidx.compose.ui.geometry.CornerRadius
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.RoundRect
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/FocusedBounds.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/FocusedBounds.kt
index 9ea3c65..16a49d1 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/FocusedBounds.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/FocusedBounds.kt
@@ -68,7 +68,7 @@
}
}
-private class FocusedBoundsObserverNode(
+internal class FocusedBoundsObserverNode(
var onPositioned: (LayoutCoordinates?) -> Unit
) : Modifier.Node(), ModifierLocalModifierNode, (LayoutCoordinates?) -> Unit {
private val parent: ((LayoutCoordinates?) -> Unit)?
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Image.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Image.kt
index 48a21a8..64b4556 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Image.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Image.kt
@@ -20,7 +20,6 @@
import androidx.compose.runtime.NonRestartableComposable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
-import androidx.compose.ui.layout.Layout
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clipToBounds
import androidx.compose.ui.draw.paint
@@ -29,12 +28,13 @@
import androidx.compose.ui.graphics.FilterQuality
import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.graphics.drawscope.DrawScope.Companion.DefaultFilterQuality
-import androidx.compose.ui.graphics.painter.ColorPainter
import androidx.compose.ui.graphics.painter.BitmapPainter
+import androidx.compose.ui.graphics.painter.ColorPainter
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.graphics.vector.rememberVectorPainter
import androidx.compose.ui.layout.ContentScale
+import androidx.compose.ui.layout.Layout
import androidx.compose.ui.semantics.Role
import androidx.compose.ui.semantics.contentDescription
import androidx.compose.ui.semantics.role
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Indication.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Indication.kt
index e15bfe4..d0ab687 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Indication.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Indication.kt
@@ -25,11 +25,11 @@
import androidx.compose.runtime.State
import androidx.compose.runtime.remember
import androidx.compose.runtime.staticCompositionLocalOf
-import androidx.compose.ui.graphics.drawscope.ContentDrawScope
-import androidx.compose.ui.draw.DrawModifier
import androidx.compose.ui.Modifier
import androidx.compose.ui.composed
+import androidx.compose.ui.draw.DrawModifier
import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.drawscope.ContentDrawScope
import androidx.compose.ui.platform.debugInspectorInfo
/**
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/MutatorMutex.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/MutatorMutex.kt
index 07cfb24..ee7b694 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/MutatorMutex.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/MutatorMutex.kt
@@ -54,6 +54,19 @@
}
/**
+ * Used in place of the standard Job cancellation pathway to avoid reflective
+ * javaClass.simpleName lookups to build the exception message and stack trace collection.
+ * Remove if these are changed in kotlinx.coroutines.
+ */
+private class MutationInterruptedException : CancellationException("Mutation interrupted") {
+ override fun fillInStackTrace(): Throwable {
+ // Avoid null.clone() on Android <= 6.0 when accessing stackTrace
+ stackTrace = emptyArray()
+ return this
+ }
+}
+
+/**
* Mutual exclusion for UI state mutation over time.
*
* [mutate] permits interruptible state mutation over time using a standard [MutatePriority].
@@ -73,7 +86,7 @@
private class Mutator(val priority: MutatePriority, val job: Job) {
fun canInterrupt(other: Mutator) = priority >= other.priority
- fun cancel() = job.cancel()
+ fun cancel() = job.cancel(MutationInterruptedException())
}
private val currentMutator = AtomicReference<Mutator?>(null)
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue.kt
index 6d1a818..3507443 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue.kt
@@ -16,7 +16,7 @@
package androidx.compose.foundation.gestures
-import androidx.compose.foundation.gestures.ContentInViewModifier.Request
+import androidx.compose.foundation.gestures.ContentInViewNode.Request
import androidx.compose.runtime.collection.mutableVectorOf
import androidx.compose.ui.geometry.Rect
import kotlin.contracts.ExperimentalContracts
@@ -25,7 +25,7 @@
import kotlinx.coroutines.CancellationException
/**
- * Ongoing requests from [ContentInViewModifier.bringChildIntoView], with the invariant that it is
+ * Ongoing requests from [ContentInViewNode.bringChildIntoView], with the invariant that it is
* always sorted by overlapping order: each item's bounds completely overlaps the next item.
*
* Requests are enqueued by calling [enqueue], which inserts the request at the correct position
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/ContentInViewModifier.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/ContentInViewNode.kt
similarity index 94%
rename from compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/ContentInViewModifier.kt
rename to compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/ContentInViewNode.kt
index 49929c3..bf1ffd3 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/ContentInViewModifier.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/ContentInViewNode.kt
@@ -19,24 +19,20 @@
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.gestures.Orientation.Horizontal
import androidx.compose.foundation.gestures.Orientation.Vertical
-import androidx.compose.foundation.onFocusedBoundsChanged
import androidx.compose.foundation.relocation.BringIntoViewRequester
import androidx.compose.foundation.relocation.BringIntoViewResponder
-import androidx.compose.foundation.relocation.bringIntoViewResponder
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Rect
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.layout.LayoutCoordinates
-import androidx.compose.ui.layout.OnPlacedModifier
-import androidx.compose.ui.layout.OnRemeasuredModifier
+import androidx.compose.ui.node.LayoutAwareModifierNode
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.toSize
import kotlin.math.abs
import kotlinx.coroutines.CancellableContinuation
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.CoroutineName
-import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.CoroutineStart
import kotlinx.coroutines.cancel
import kotlinx.coroutines.job
@@ -55,20 +51,14 @@
* the [ScrollableState] to handle [BringIntoViewRequester] requests and keep the currently-focused
* child in view when the viewport shrinks.
*
- * Instances of this class should not be directly added to the modifier chain, instead use the
- * [modifier] property since this class relies on some modifiers that must be specified as modifier
- * factory functions and can't be implemented as interfaces.
*/
// TODO(b/242732126) Make this logic reusable for TV's mario scrolling implementation.
@OptIn(ExperimentalFoundationApi::class)
-internal class ContentInViewModifier(
- private val scope: CoroutineScope,
- private val orientation: Orientation,
- private val scrollState: ScrollableState,
- private val reverseDirection: Boolean
-) : BringIntoViewResponder,
- OnRemeasuredModifier,
- OnPlacedModifier {
+internal class ContentInViewNode(
+ private var orientation: Orientation,
+ private var scrollState: ScrollableState,
+ private var reverseDirection: Boolean
+) : Modifier.Node(), BringIntoViewResponder, LayoutAwareModifierNode {
/**
* Ongoing requests from [bringChildIntoView], with the invariant that it is always sorted by
@@ -106,13 +96,6 @@
private var isAnimationRunning = false
private val animationState = UpdatableAnimationState()
- val modifier: Modifier = this
- .onFocusedBoundsChanged {
- focusedChild = it
- if (DEBUG) println("[$TAG] new focused child: ${getFocusedChildBounds()}")
- }
- .bringIntoViewResponder(this)
-
override fun calculateRectForParent(localRect: Rect): Rect {
check(viewportSize != IntSize.Zero) {
"Expected BringIntoViewRequester to not be used before parents are placed."
@@ -137,6 +120,10 @@
}
}
+ fun onFocusBoundsChanged(newBounds: LayoutCoordinates?) {
+ focusedChild = newBounds
+ }
+
override fun onPlaced(coordinates: LayoutCoordinates) {
this.coordinates = coordinates
}
@@ -184,7 +171,7 @@
if (DEBUG) println("[$TAG] launchAnimation")
- scope.launch(start = CoroutineStart.UNDISPATCHED) {
+ coroutineScope.launch(start = CoroutineStart.UNDISPATCHED) {
var cancellationException: CancellationException? = null
val animationJob = coroutineContext.job
@@ -403,6 +390,12 @@
Vertical -> height.compareTo(other.height)
}
+ fun update(orientation: Orientation, state: ScrollableState, reverseDirection: Boolean) {
+ this.orientation = orientation
+ this.scrollState = state
+ this.reverseDirection = reverseDirection
+ }
+
/**
* A request to bring some [Rect] in the scrollable viewport.
*
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/ForEachGesture.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/ForEachGesture.kt
index 4901cab..fde5758 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/ForEachGesture.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/ForEachGesture.kt
@@ -19,9 +19,9 @@
import androidx.compose.ui.input.pointer.PointerEventPass
import androidx.compose.ui.input.pointer.PointerInputScope
import androidx.compose.ui.util.fastAny
+import kotlin.coroutines.cancellation.CancellationException
import kotlinx.coroutines.currentCoroutineContext
import kotlinx.coroutines.isActive
-import kotlin.coroutines.cancellation.CancellationException
/**
* A gesture was canceled and cannot continue, likely because another gesture has taken
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Scrollable.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Scrollable.kt
index c387135..fb5dc19 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Scrollable.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Scrollable.kt
@@ -20,43 +20,49 @@
import androidx.compose.animation.core.DecayAnimationSpec
import androidx.compose.animation.core.animateDecay
import androidx.compose.animation.rememberSplineBasedDecay
+import androidx.compose.animation.splineBasedDecay
import androidx.compose.foundation.ExperimentalFoundationApi
+import androidx.compose.foundation.FocusedBoundsObserverNode
import androidx.compose.foundation.MutatePriority
import androidx.compose.foundation.OverscrollEffect
-import androidx.compose.foundation.focusGroup
import androidx.compose.foundation.gestures.Orientation.Horizontal
import androidx.compose.foundation.interaction.MutableInteractionSource
+import androidx.compose.foundation.relocation.BringIntoViewResponderNode
import androidx.compose.foundation.rememberOverscrollEffect
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.State
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
-import androidx.compose.runtime.rememberCoroutineScope
-import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.Modifier
import androidx.compose.ui.MotionDurationScale
-import androidx.compose.ui.composed
+import androidx.compose.ui.focus.FocusProperties
+import androidx.compose.ui.focus.FocusPropertiesModifierNode
+import androidx.compose.ui.focus.FocusTargetNode
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.input.nestedscroll.NestedScrollConnection
import androidx.compose.ui.input.nestedscroll.NestedScrollDispatcher
import androidx.compose.ui.input.nestedscroll.NestedScrollSource
import androidx.compose.ui.input.nestedscroll.NestedScrollSource.Companion.Drag
import androidx.compose.ui.input.nestedscroll.NestedScrollSource.Companion.Fling
-import androidx.compose.ui.input.nestedscroll.nestedScroll
+import androidx.compose.ui.input.nestedscroll.nestedScrollModifierNode
import androidx.compose.ui.input.pointer.AwaitPointerEventScope
import androidx.compose.ui.input.pointer.PointerEvent
-import androidx.compose.ui.input.pointer.PointerEventPass
import androidx.compose.ui.input.pointer.PointerEventType
+import androidx.compose.ui.input.pointer.PointerInputChange
import androidx.compose.ui.input.pointer.PointerType
import androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNode
-import androidx.compose.ui.modifier.ModifierLocalProvider
+import androidx.compose.ui.modifier.ModifierLocalMap
+import androidx.compose.ui.modifier.ModifierLocalModifierNode
+import androidx.compose.ui.modifier.modifierLocalMapOf
import androidx.compose.ui.modifier.modifierLocalOf
+import androidx.compose.ui.node.CompositionLocalConsumerModifierNode
import androidx.compose.ui.node.DelegatingNode
import androidx.compose.ui.node.ModifierNodeElement
-import androidx.compose.ui.node.PointerInputModifierNode
+import androidx.compose.ui.node.ObserverModifierNode
+import androidx.compose.ui.node.currentValueOf
+import androidx.compose.ui.node.observeReads
import androidx.compose.ui.platform.InspectorInfo
+import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.LocalLayoutDirection
-import androidx.compose.ui.platform.debugInspectorInfo
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.LayoutDirection
@@ -148,8 +154,78 @@
reverseDirection: Boolean = false,
flingBehavior: FlingBehavior? = null,
interactionSource: MutableInteractionSource? = null
-): Modifier = composed(
- inspectorInfo = debugInspectorInfo {
+): Modifier = this then ScrollableElement(
+ state,
+ orientation,
+ overscrollEffect,
+ enabled,
+ reverseDirection,
+ flingBehavior,
+ interactionSource
+)
+
+@OptIn(ExperimentalFoundationApi::class)
+private class ScrollableElement(
+ val state: ScrollableState,
+ val orientation: Orientation,
+ val overscrollEffect: OverscrollEffect?,
+ val enabled: Boolean,
+ val reverseDirection: Boolean,
+ val flingBehavior: FlingBehavior?,
+ val interactionSource: MutableInteractionSource?
+) : ModifierNodeElement<ScrollableNode>() {
+ override fun create(): ScrollableNode {
+ return ScrollableNode(
+ state,
+ orientation,
+ overscrollEffect,
+ enabled,
+ reverseDirection,
+ flingBehavior,
+ interactionSource
+ )
+ }
+
+ override fun update(node: ScrollableNode) {
+ node.update(
+ state,
+ orientation,
+ overscrollEffect,
+ enabled,
+ reverseDirection,
+ flingBehavior,
+ interactionSource
+ )
+ }
+
+ override fun hashCode(): Int {
+ var result = state.hashCode()
+ result = 31 * result + orientation.hashCode()
+ result = 31 * result + overscrollEffect.hashCode()
+ result = 31 * result + enabled.hashCode()
+ result = 31 * result + reverseDirection.hashCode()
+ result = 31 * result + flingBehavior.hashCode()
+ result = 31 * result + interactionSource.hashCode()
+ return result
+ }
+
+ override fun equals(other: Any?): Boolean {
+ if (this === other) return true
+
+ if (other !is ScrollableElement) return false
+
+ if (state != other.state) return false
+ if (orientation != other.orientation) return false
+ if (overscrollEffect != other.overscrollEffect) return false
+ if (enabled != other.enabled) return false
+ if (reverseDirection != other.reverseDirection) return false
+ if (flingBehavior != other.flingBehavior) return false
+ if (interactionSource != other.interactionSource) return false
+
+ return true
+ }
+
+ override fun InspectorInfo.inspectableProperties() {
name = "scrollable"
properties["orientation"] = orientation
properties["state"] = state
@@ -158,29 +234,135 @@
properties["reverseDirection"] = reverseDirection
properties["flingBehavior"] = flingBehavior
properties["interactionSource"] = interactionSource
- },
- factory = {
- val coroutineScope = rememberCoroutineScope()
- val keepFocusedChildInViewModifier =
- remember(coroutineScope, orientation, state, reverseDirection) {
- ContentInViewModifier(coroutineScope, orientation, state, reverseDirection)
- }
-
- Modifier
- .focusGroup()
- .then(keepFocusedChildInViewModifier.modifier)
- .pointerScrollable(
- interactionSource,
- orientation,
- reverseDirection,
- state,
- flingBehavior,
- overscrollEffect,
- enabled
- )
- .then(if (enabled) ModifierLocalScrollableContainerProvider else Modifier)
}
-)
+}
+
+@OptIn(ExperimentalFoundationApi::class)
+private class ScrollableNode(
+ private var state: ScrollableState,
+ private var orientation: Orientation,
+ private var overscrollEffect: OverscrollEffect?,
+ private var enabled: Boolean,
+ private var reverseDirection: Boolean,
+ private var flingBehavior: FlingBehavior?,
+ private var interactionSource: MutableInteractionSource?
+) : DelegatingNode(), ObserverModifierNode, CompositionLocalConsumerModifierNode,
+ FocusPropertiesModifierNode {
+
+ val scrollConfig: ScrollConfig = platformScrollConfig()
+
+ val nestedScrollDispatcher = NestedScrollDispatcher()
+
+ // Place holder fling behavior, we'll initialize it when the density is available.
+ val defaultFlingBehavior = DefaultFlingBehavior(splineBasedDecay(UnityDensity))
+
+ val scrollingLogic = ScrollingLogic(
+ scrollableState = state,
+ orientation = orientation,
+ overscrollEffect = overscrollEffect,
+ reverseDirection = reverseDirection,
+ flingBehavior = flingBehavior ?: defaultFlingBehavior,
+ nestedScrollDispatcher = nestedScrollDispatcher,
+ )
+
+ val nestedScrollConnection =
+ ScrollableNestedScrollConnection(enabled = enabled, scrollingLogic = scrollingLogic)
+
+ val contentInViewNode = delegate(ContentInViewNode(orientation, state, reverseDirection))
+ val scrollableContainer = delegate(ModifierLocalScrollableContainerProvider(enabled))
+
+ init {
+ /**
+ * Nested scrolling
+ */
+ delegate(nestedScrollModifierNode(nestedScrollConnection, nestedScrollDispatcher))
+
+ /**
+ * Focus scrolling
+ */
+ delegate(FocusTargetNode())
+ delegate(BringIntoViewResponderNode(contentInViewNode))
+ delegate(FocusedBoundsObserverNode { contentInViewNode.onFocusBoundsChanged(it) })
+ }
+
+ /**
+ * Pointer gesture handling
+ */
+ val scrollableGesturesNode = delegate(
+ ScrollableGesturesNode(
+ interactionSource = interactionSource,
+ orientation = orientation,
+ enabled = enabled,
+ nestedScrollDispatcher = nestedScrollDispatcher,
+ scrollConfig = scrollConfig,
+ scrollLogic = scrollingLogic
+ )
+ )
+
+ fun update(
+ state: ScrollableState,
+ orientation: Orientation,
+ overscrollEffect: OverscrollEffect?,
+ enabled: Boolean,
+ reverseDirection: Boolean,
+ flingBehavior: FlingBehavior?,
+ interactionSource: MutableInteractionSource?
+ ) {
+
+ if (this.enabled != enabled) { // enabled changed
+ nestedScrollConnection.enabled = enabled
+ scrollableContainer.enabled = enabled
+ }
+ // a new fling behavior was set, change the resolved one.
+ val resolvedFlingBehavior = flingBehavior ?: defaultFlingBehavior
+
+ scrollingLogic.update(
+ scrollableState = state,
+ orientation = orientation,
+ overscrollEffect = overscrollEffect,
+ reverseDirection = reverseDirection,
+ flingBehavior = resolvedFlingBehavior,
+ nestedScrollDispatcher = nestedScrollDispatcher
+ )
+
+ scrollableGesturesNode.update(
+ interactionSource = interactionSource,
+ orientation = orientation,
+ scrollConfig = scrollConfig,
+ enabled = enabled
+ )
+
+ contentInViewNode.update(orientation, state, reverseDirection)
+
+ this.state = state
+ this.orientation = orientation
+ this.overscrollEffect = overscrollEffect
+ this.enabled = enabled
+ this.reverseDirection = reverseDirection
+ this.flingBehavior = flingBehavior
+ this.interactionSource = interactionSource
+ }
+
+ @Suppress("SuspiciousCompositionLocalModifierRead")
+ override fun onAttach() {
+ updateDefaultFlingBehavior()
+ observeReads { currentValueOf(LocalDensity) } // monitor change in Density
+ }
+
+ override fun onObservedReadsChanged() {
+ // if density changes, update the default fling behavior.
+ updateDefaultFlingBehavior()
+ }
+
+ private fun updateDefaultFlingBehavior() {
+ val density = currentValueOf(LocalDensity)
+ defaultFlingBehavior.flingDecay = splineBasedDecay(density)
+ }
+
+ override fun applyFocusProperties(focusProperties: FocusProperties) {
+ focusProperties.canFocus = false
+ }
+}
/**
* Contains the default values used by [scrollable]
@@ -239,98 +421,81 @@
fun Density.calculateMouseWheelScroll(event: PointerEvent, bounds: IntSize): Offset
}
-@Composable
-internal expect fun platformScrollConfig(): ScrollConfig
+internal expect fun CompositionLocalConsumerModifierNode.platformScrollConfig(): ScrollConfig
-@Suppress("ComposableModifierFactory")
-@Composable
-@OptIn(ExperimentalFoundationApi::class)
-private fun Modifier.pointerScrollable(
- interactionSource: MutableInteractionSource?,
- orientation: Orientation,
- reverseDirection: Boolean,
- controller: ScrollableState,
- flingBehavior: FlingBehavior?,
- overscrollEffect: OverscrollEffect?,
- enabled: Boolean
-): Modifier {
- val fling = flingBehavior ?: ScrollableDefaults.flingBehavior()
- val nestedScrollDispatcher = remember { mutableStateOf(NestedScrollDispatcher()) }
- val scrollLogic = rememberUpdatedState(
- ScrollingLogic(
- orientation,
- reverseDirection,
- nestedScrollDispatcher,
- controller,
- fling,
- overscrollEffect
- )
- )
- val nestedScrollConnection = remember(enabled) {
- scrollableNestedScrollConnection(scrollLogic, enabled)
+/**
+ * A node that detects and processes all scrollable gestures.
+ */
+private class ScrollableGesturesNode(
+ val scrollLogic: ScrollingLogic,
+ val orientation: Orientation,
+ val enabled: Boolean,
+ val nestedScrollDispatcher: NestedScrollDispatcher,
+ val interactionSource: MutableInteractionSource?,
+ var scrollConfig: ScrollConfig
+) : DelegatingNode() {
+
+ val draggableState = ScrollDraggableState(scrollLogic)
+ private val startDragImmediately = { scrollLogic.shouldScrollImmediately() }
+ private val onDragStopped: suspend CoroutineScope.(velocity: Velocity) -> Unit = { velocity ->
+ nestedScrollDispatcher.coroutineScope.launch {
+ scrollLogic.onDragStopped(velocity)
+ }
}
- val draggableState = remember { ScrollDraggableState(scrollLogic) }
- val scrollConfig = platformScrollConfig()
- return this
- .then(DraggableElement(
- state = draggableState,
+ val draggableGesturesNode = delegate(
+ DraggableNode(
+ draggableState,
orientation = orientation,
enabled = enabled,
interactionSource = interactionSource,
reverseDirection = false,
- startDragImmediately = { scrollLogic.value.shouldScrollImmediately() },
+ startDragImmediately = startDragImmediately,
+ onDragStopped = onDragStopped,
+ canDrag = CanDragCalculation,
+ onDragStarted = NoOpOnDragStarted
+ )
+ )
+
+ val mouseWheelScrollNode = delegate(MouseWheelScrollNode(scrollLogic, scrollConfig))
+
+ fun update(
+ scrollConfig: ScrollConfig,
+ orientation: Orientation,
+ enabled: Boolean,
+ interactionSource: MutableInteractionSource?,
+ ) {
+
+ // update draggable node
+ draggableGesturesNode.update(
+ draggableState,
+ orientation = orientation,
+ enabled = enabled,
+ interactionSource = interactionSource,
+ reverseDirection = false,
+ startDragImmediately = startDragImmediately,
onDragStarted = NoOpOnDragStarted,
- onDragStopped = { velocity ->
- nestedScrollDispatcher.value.coroutineScope.launch {
- scrollLogic.value.onDragStopped(velocity)
- }
- },
- canDrag = { down -> down.type != PointerType.Mouse }
- ))
- .then(MouseWheelScrollElement(scrollLogic, scrollConfig))
- .nestedScroll(nestedScrollConnection, nestedScrollDispatcher.value)
+ onDragStopped = onDragStopped,
+ canDrag = CanDragCalculation
+ )
+
+ // update mouse wheel scroll
+ if (this.scrollConfig != scrollConfig) {
+ mouseWheelScrollNode.update(scrollConfig)
+ }
+ this.scrollConfig = scrollConfig
+ }
}
-// {} isn't being memoized for us, so extract this to make sure we compare equally on recomposition.
+private val CanDragCalculation: (PointerInputChange) -> Boolean =
+ { down -> down.type != PointerType.Mouse }
+
private val NoOpOnDragStarted: suspend CoroutineScope.(startedPosition: Offset) -> Unit = {}
-private class MouseWheelScrollElement(
- val scrollingLogicState: State<ScrollingLogic>,
- val mouseWheelScrollConfig: ScrollConfig
-) : ModifierNodeElement<MouseWheelScrollNode>() {
- override fun create(): MouseWheelScrollNode {
- return MouseWheelScrollNode(scrollingLogicState, mouseWheelScrollConfig)
- }
-
- override fun update(node: MouseWheelScrollNode) {
- node.scrollingLogicState = scrollingLogicState
- node.mouseWheelScrollConfig = mouseWheelScrollConfig
- }
-
- override fun hashCode(): Int {
- var result = scrollingLogicState.hashCode()
- result = 31 * result + mouseWheelScrollConfig.hashCode()
- return result
- }
-
- override fun equals(other: Any?): Boolean {
- if (this === other) return true
- if (other !is MouseWheelScrollElement) return false
-
- if (scrollingLogicState != other.scrollingLogicState) return false
- if (mouseWheelScrollConfig != other.mouseWheelScrollConfig) return false
- return true
- }
-
- override fun InspectorInfo.inspectableProperties() = Unit
-}
-
-// TODO(levima) Save the ScrollingLogic value in the ScrollableNode so we won't need a State here.
private class MouseWheelScrollNode(
- var scrollingLogicState: State<ScrollingLogic>,
- var mouseWheelScrollConfig: ScrollConfig
-) : DelegatingNode(), PointerInputModifierNode {
+ private val scrollingLogic: ScrollingLogic,
+ private var mouseWheelScrollConfig: ScrollConfig
+) : DelegatingNode() {
private val pointerInputNode = delegate(SuspendingPointerInputModifierNode {
awaitPointerEventScope {
@@ -339,7 +504,7 @@
if (event.changes.fastAll { !it.isConsumed }) {
with(mouseWheelScrollConfig) {
val scrollAmount = calculateMouseWheelScroll(event, size)
- with(scrollingLogicState.value) {
+ with(scrollingLogic) {
val delta = scrollAmount.toFloat().reverseIfNeeded()
val consumedDelta = scrollableState.dispatchRawDelta(delta)
if (consumedDelta != 0f) {
@@ -352,16 +517,9 @@
}
})
- override fun onPointerEvent(
- pointerEvent: PointerEvent,
- pass: PointerEventPass,
- bounds: IntSize
- ) {
- pointerInputNode.onPointerEvent(pointerEvent, pass, bounds)
- }
-
- override fun onCancelPointerInput() {
- pointerInputNode.onCancelPointerInput()
+ fun update(mouseWheelScrollConfig: ScrollConfig) {
+ this.mouseWheelScrollConfig = mouseWheelScrollConfig
+ pointerInputNode.resetPointerInputHandler()
}
}
@@ -373,14 +531,18 @@
return event
}
+/**
+ * Holds all scrolling related logic: controls nested scrolling, flinging, overscroll and delta
+ * dispatching.
+ */
@OptIn(ExperimentalFoundationApi::class)
private class ScrollingLogic(
- val orientation: Orientation,
- val reverseDirection: Boolean,
- val nestedScrollDispatcher: State<NestedScrollDispatcher>,
- val scrollableState: ScrollableState,
- val flingBehavior: FlingBehavior,
- val overscrollEffect: OverscrollEffect?
+ var scrollableState: ScrollableState,
+ private var orientation: Orientation,
+ private var overscrollEffect: OverscrollEffect?,
+ private var reverseDirection: Boolean,
+ private var flingBehavior: FlingBehavior,
+ private var nestedScrollDispatcher: NestedScrollDispatcher,
) {
private val isNestedFlinging = mutableStateOf(false)
fun Float.toOffset(): Offset = when {
@@ -415,7 +577,6 @@
val scrollDelta = availableDelta.singleAxisOffset()
val performScroll: (Offset) -> Offset = { delta ->
- val nestedScrollDispatcher = nestedScrollDispatcher.value
val preConsumedByParent = nestedScrollDispatcher
.dispatchPreScroll(delta, source)
@@ -434,8 +595,9 @@
preConsumedByParent + axisConsumed + parentConsumed
}
- return if (overscrollEffect != null && shouldDispatchOverscroll) {
- overscrollEffect.applyToScroll(scrollDelta, source, performScroll)
+ val overscroll = overscrollEffect
+ return if (overscroll != null && shouldDispatchOverscroll) {
+ overscroll.applyToScroll(scrollDelta, source, performScroll)
} else {
performScroll(scrollDelta)
}
@@ -461,11 +623,11 @@
val performFling: suspend (Velocity) -> Velocity = { velocity ->
val preConsumedByParent = nestedScrollDispatcher
- .value.dispatchPreFling(velocity)
+ .dispatchPreFling(velocity)
val available = velocity - preConsumedByParent
val velocityLeft = doFlingAnimation(available)
val consumedPost =
- nestedScrollDispatcher.value.dispatchPostFling(
+ nestedScrollDispatcher.dispatchPostFling(
(available - velocityLeft),
velocityLeft
)
@@ -473,8 +635,9 @@
velocity - totalLeft
}
- if (overscrollEffect != null && shouldDispatchOverscroll) {
- overscrollEffect.applyToFling(availableVelocity, performFling)
+ val overscroll = overscrollEffect
+ if (overscroll != null && shouldDispatchOverscroll) {
+ overscroll.applyToFling(availableVelocity, performFling)
} else {
performFling(availableVelocity)
}
@@ -494,6 +657,7 @@
return outerScopeScroll.invoke(pixels.toOffset()).toFloat()
}
}
+
with(scope) {
with(flingBehavior) {
result = result.update(
@@ -513,15 +677,31 @@
fun registerNestedFling(isFlinging: Boolean) {
isNestedFlinging.value = isFlinging
}
+
+ fun update(
+ scrollableState: ScrollableState,
+ orientation: Orientation,
+ overscrollEffect: OverscrollEffect?,
+ reverseDirection: Boolean,
+ flingBehavior: FlingBehavior,
+ nestedScrollDispatcher: NestedScrollDispatcher,
+ ) {
+ this.scrollableState = scrollableState
+ this.orientation = orientation
+ this.overscrollEffect = overscrollEffect
+ this.reverseDirection = reverseDirection
+ this.flingBehavior = flingBehavior
+ this.nestedScrollDispatcher = nestedScrollDispatcher
+ }
}
private class ScrollDraggableState(
- val scrollLogic: State<ScrollingLogic>
+ var scrollLogic: ScrollingLogic
) : DraggableState, DragScope {
var latestScrollScope: ScrollScope = NoOpScrollScope
override fun dragBy(pixels: Float) {
- with(scrollLogic.value) {
+ with(scrollLogic) {
with(latestScrollScope) {
dispatchScroll(pixels.toOffset(), Drag)
}
@@ -529,14 +709,14 @@
}
override suspend fun drag(dragPriority: MutatePriority, block: suspend DragScope.() -> Unit) {
- scrollLogic.value.scrollableState.scroll(dragPriority) {
+ scrollLogic.scrollableState.scroll(dragPriority) {
latestScrollScope = this
block()
}
}
override fun dispatchRawDelta(delta: Float) {
- with(scrollLogic.value) { performRawScroll(delta.toOffset()) }
+ with(scrollLogic) { performRawScroll(delta.toOffset()) }
}
}
@@ -544,14 +724,14 @@
override fun scrollBy(pixels: Float): Float = pixels
}
-private fun scrollableNestedScrollConnection(
- scrollLogic: State<ScrollingLogic>,
- enabled: Boolean
-): NestedScrollConnection = object : NestedScrollConnection {
+private class ScrollableNestedScrollConnection(
+ val scrollingLogic: ScrollingLogic,
+ var enabled: Boolean
+) : NestedScrollConnection {
override fun onPreScroll(available: Offset, source: NestedScrollSource): Offset {
// child will fling, set
if (source == Fling) {
- scrollLogic.value.registerNestedFling(true)
+ scrollingLogic.registerNestedFling(true)
}
return Offset.Zero
}
@@ -561,7 +741,7 @@
available: Offset,
source: NestedScrollSource
): Offset = if (enabled) {
- scrollLogic.value.performRawScroll(available)
+ scrollingLogic.performRawScroll(available)
} else {
Offset.Zero
}
@@ -571,19 +751,19 @@
available: Velocity
): Velocity {
return if (enabled) {
- val velocityLeft = scrollLogic.value.doFlingAnimation(available)
+ val velocityLeft = scrollingLogic.doFlingAnimation(available)
available - velocityLeft
} else {
Velocity.Zero
}.also {
// Flinging child finished flinging, reset
- scrollLogic.value.registerNestedFling(false)
+ scrollingLogic.registerNestedFling(false)
}
}
}
internal class DefaultFlingBehavior(
- private val flingDecay: DecayAnimationSpec<Float>,
+ var flingDecay: DecayAnimationSpec<Float>,
private val motionDurationScale: MotionDurationScale = DefaultScrollMotionDurationScale
) : FlingBehavior {
@@ -624,14 +804,32 @@
*/
internal val ModifierLocalScrollableContainer = modifierLocalOf { false }
-private object ModifierLocalScrollableContainerProvider : ModifierLocalProvider<Boolean> {
- override val key = ModifierLocalScrollableContainer
- override val value = true
+internal val NoOpFlingBehavior = object : FlingBehavior {
+ override suspend fun ScrollScope.performFling(initialVelocity: Float): Float = 0f
}
private const val DefaultScrollMotionDurationScaleFactor = 1f
-
internal val DefaultScrollMotionDurationScale = object : MotionDurationScale {
override val scaleFactor: Float
get() = DefaultScrollMotionDurationScaleFactor
+}
+
+private class ModifierLocalScrollableContainerProvider(var enabled: Boolean) :
+ ModifierLocalModifierNode,
+ Modifier.Node() {
+ private val modifierLocalMap =
+ modifierLocalMapOf(entry = ModifierLocalScrollableContainer to true)
+ override val providedValues: ModifierLocalMap
+ get() = if (enabled) {
+ modifierLocalMap
+ } else {
+ modifierLocalMapOf()
+ }
+}
+
+private val UnityDensity = object : Density {
+ override val density: Float
+ get() = 1f
+ override val fontScale: Float
+ get() = 1f
}
\ No newline at end of file
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/ScrollableState.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/ScrollableState.kt
index 33c8439..e56a7a43 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/ScrollableState.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/ScrollableState.kt
@@ -18,12 +18,12 @@
import androidx.compose.foundation.MutatePriority
import androidx.compose.foundation.MutatorMutex
+import androidx.compose.foundation.internal.JvmDefaultWithCompatibility
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberUpdatedState
import kotlinx.coroutines.coroutineScope
-import androidx.compose.foundation.internal.JvmDefaultWithCompatibility
/**
* An object representing something that can be scrolled. This interface is implemented by states
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/TapGestureDetector.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/TapGestureDetector.kt
index 2614f34..4a19ae0 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/TapGestureDetector.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/TapGestureDetector.kt
@@ -16,11 +16,12 @@
package androidx.compose.foundation.gestures
+import androidx.compose.foundation.internal.JvmDefaultWithCompatibility
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.input.pointer.AwaitPointerEventScope
-import androidx.compose.ui.input.pointer.PointerEventTimeoutCancellationException
import androidx.compose.ui.input.pointer.PointerEvent
import androidx.compose.ui.input.pointer.PointerEventPass
+import androidx.compose.ui.input.pointer.PointerEventTimeoutCancellationException
import androidx.compose.ui.input.pointer.PointerInputChange
import androidx.compose.ui.input.pointer.PointerInputScope
import androidx.compose.ui.input.pointer.changedToDown
@@ -35,7 +36,6 @@
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.sync.Mutex
-import androidx.compose.foundation.internal.JvmDefaultWithCompatibility
/**
* Receiver scope for [detectTapGestures]'s `onPress` lambda. This offers
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/TransformableState.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/TransformableState.kt
index 8c196ac..39b957b 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/TransformableState.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/TransformableState.kt
@@ -24,13 +24,13 @@
import androidx.compose.animation.core.animateTo
import androidx.compose.foundation.MutatePriority
import androidx.compose.foundation.MutatorMutex
+import androidx.compose.foundation.internal.JvmDefaultWithCompatibility
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.geometry.Offset
import kotlinx.coroutines.coroutineScope
-import androidx.compose.foundation.internal.JvmDefaultWithCompatibility
/**
* State of [transformable]. Allows for a granular control of how different gesture
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/LazyGridSnapLayoutInfoProvider.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/LazyGridSnapLayoutInfoProvider.kt
index 515dfc3..962b9d9 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/LazyGridSnapLayoutInfoProvider.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/LazyGridSnapLayoutInfoProvider.kt
@@ -78,7 +78,15 @@
layoutInfo.visibleItemsInfo.fastForEach { item ->
val distance =
- calculateDistanceToDesiredSnapPosition(layoutInfo, item, positionInLayout)
+ calculateDistanceToDesiredSnapPosition(
+ mainAxisViewPortSize = layoutInfo.singleAxisViewportSize,
+ beforeContentPadding = layoutInfo.beforeContentPadding,
+ afterContentPadding = layoutInfo.afterContentPadding,
+ itemSize = item.sizeOnMainAxis(orientation = layoutInfo.orientation),
+ itemOffset = item.offsetOnMainAxis(orientation = layoutInfo.orientation),
+ itemIndex = item.index,
+ snapPositionInLayout = positionInLayout
+ )
// Find item that is closest to the center
if (distance <= 0 && distance > distanceFromItemBeforeTarget) {
@@ -112,32 +120,14 @@
}
}
-@OptIn(ExperimentalFoundationApi::class)
-internal fun Density.calculateDistanceToDesiredSnapPosition(
- layoutInfo: LazyGridLayoutInfo,
- item: LazyGridItemInfo,
- positionInLayout: SnapPositionInLayout = SnapPositionInLayout.CenterToCenter
-): Float {
-
- val containerSize =
- with(layoutInfo) { singleAxisViewportSize - beforeContentPadding - afterContentPadding }
-
- val desiredDistance = with(positionInLayout) {
- position(containerSize, item.sizeOnMainAxis(layoutInfo.orientation), item.index)
- }
-
- val itemCurrentPosition = item.offsetOnMainAxis(layoutInfo.orientation)
- return itemCurrentPosition - desiredDistance.toFloat()
-}
-
-private val LazyGridLayoutInfo.singleAxisViewportSize: Int
+internal val LazyGridLayoutInfo.singleAxisViewportSize: Int
get() = if (orientation == Orientation.Vertical) {
viewportSize.height
} else {
viewportSize.width
}
-private fun LazyGridItemInfo.sizeOnMainAxis(orientation: Orientation): Int {
+internal fun LazyGridItemInfo.sizeOnMainAxis(orientation: Orientation): Int {
return if (orientation == Orientation.Vertical) {
size.height
} else {
@@ -145,7 +135,7 @@
}
}
-private fun LazyGridItemInfo.offsetOnMainAxis(orientation: Orientation): Int {
+internal fun LazyGridItemInfo.offsetOnMainAxis(orientation: Orientation): Int {
return if (orientation == Orientation.Vertical) {
offset.y
} else {
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/LazyListSnapLayoutInfoProvider.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/LazyListSnapLayoutInfoProvider.kt
index fece172..5df071b 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/LazyListSnapLayoutInfoProvider.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/LazyListSnapLayoutInfoProvider.kt
@@ -22,7 +22,6 @@
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.gestures.FlingBehavior
import androidx.compose.foundation.gestures.Orientation
-import androidx.compose.foundation.lazy.LazyListItemInfo
import androidx.compose.foundation.lazy.LazyListLayoutInfo
import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.runtime.Composable
@@ -71,7 +70,15 @@
layoutInfo.visibleItemsInfo.fastForEach { item ->
val offset =
- calculateDistanceToDesiredSnapPosition(layoutInfo, item, positionInLayout)
+ calculateDistanceToDesiredSnapPosition(
+ mainAxisViewPortSize = layoutInfo.singleAxisViewportSize,
+ beforeContentPadding = layoutInfo.beforeContentPadding,
+ afterContentPadding = layoutInfo.afterContentPadding,
+ itemSize = item.size,
+ itemOffset = item.offset,
+ itemIndex = item.index,
+ snapPositionInLayout = positionInLayout
+ )
// Find item that is closest to the center
if (offset <= 0 && offset > lowerBoundOffset) {
@@ -110,22 +117,5 @@
return rememberSnapFlingBehavior(snappingLayout)
}
-@OptIn(ExperimentalFoundationApi::class)
-internal fun Density.calculateDistanceToDesiredSnapPosition(
- layoutInfo: LazyListLayoutInfo,
- item: LazyListItemInfo,
- positionInLayout: SnapPositionInLayout
-): Float {
- val containerSize =
- with(layoutInfo) { singleAxisViewportSize - beforeContentPadding - afterContentPadding }
-
- val desiredDistance = with(positionInLayout) {
- position(containerSize, item.size, item.index)
- }.toFloat()
-
- val itemCurrentPosition = item.offset
- return itemCurrentPosition - desiredDistance
-}
-
-private val LazyListLayoutInfo.singleAxisViewportSize: Int
+internal val LazyListLayoutInfo.singleAxisViewportSize: Int
get() = if (orientation == Orientation.Vertical) viewportSize.height else viewportSize.width
\ No newline at end of file
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/SnapPositionInLayout.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/SnapPositionInLayout.kt
index 3b3f94f..6a16ff9 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/SnapPositionInLayout.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/SnapPositionInLayout.kt
@@ -39,4 +39,23 @@
val CenterToCenter =
SnapPositionInLayout { layoutSize, itemSize, _ -> layoutSize / 2 - itemSize / 2 }
}
+}
+
+@OptIn(ExperimentalFoundationApi::class)
+internal fun Density.calculateDistanceToDesiredSnapPosition(
+ mainAxisViewPortSize: Int,
+ beforeContentPadding: Int,
+ afterContentPadding: Int,
+ itemSize: Int,
+ itemOffset: Int,
+ itemIndex: Int,
+ snapPositionInLayout: SnapPositionInLayout
+): Float {
+ val containerSize = mainAxisViewPortSize - beforeContentPadding - afterContentPadding
+
+ val desiredDistance = with(snapPositionInLayout) {
+ position(containerSize, itemSize, itemIndex)
+ }.toFloat()
+
+ return itemOffset - desiredDistance
}
\ No newline at end of file
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyItemScope.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyItemScope.kt
index c1c594e..adba3f6 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyItemScope.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyItemScope.kt
@@ -21,11 +21,11 @@
import androidx.compose.animation.core.VisibilityThreshold
import androidx.compose.animation.core.spring
import androidx.compose.foundation.ExperimentalFoundationApi
+import androidx.compose.foundation.internal.JvmDefaultWithCompatibility
import androidx.compose.runtime.Stable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.IntOffset
-import androidx.compose.foundation.internal.JvmDefaultWithCompatibility
/**
* Receiver scope being used by the item content parameter of LazyColumn/Row.
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListBeyondBoundsModifier.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListBeyondBoundsModifier.kt
index 6def944..5ef94fe 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListBeyondBoundsModifier.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListBeyondBoundsModifier.kt
@@ -17,8 +17,8 @@
package androidx.compose.foundation.lazy
import androidx.compose.foundation.gestures.Orientation
-import androidx.compose.foundation.lazy.layout.LazyLayoutBeyondBoundsState
import androidx.compose.foundation.lazy.layout.LazyLayoutBeyondBoundsModifierLocal
+import androidx.compose.foundation.lazy.layout.LazyLayoutBeyondBoundsState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListLayoutInfo.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListLayoutInfo.kt
index be71365..37612eb 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListLayoutInfo.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListLayoutInfo.kt
@@ -17,8 +17,8 @@
package androidx.compose.foundation.lazy
import androidx.compose.foundation.gestures.Orientation
-import androidx.compose.ui.unit.IntSize
import androidx.compose.foundation.internal.JvmDefaultWithCompatibility
+import androidx.compose.ui.unit.IntSize
/**
* Contains useful information about the currently displayed layout state of lazy lists like
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListMeasure.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListMeasure.kt
index 91d0350..c247a1d 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListMeasure.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListMeasure.kt
@@ -342,22 +342,17 @@
var end = visibleItems.last().index
- fun addItem(index: Int) {
- if (list == null) list = mutableListOf()
- requireNotNull(list).add(
- measuredItemProvider.getAndMeasure(index)
- )
- }
-
end = minOf(end + beyondBoundsItemCount, itemsCount - 1)
for (i in visibleItems.last().index + 1..end) {
- addItem(i)
+ if (list == null) list = mutableListOf()
+ list.add(measuredItemProvider.getAndMeasure(i))
}
pinnedItems.fastForEach { index ->
if (index > end) {
- addItem(index)
+ if (list == null) list = mutableListOf()
+ list?.add(measuredItemProvider.getAndMeasure(index))
}
}
@@ -374,22 +369,17 @@
var start = currentFirstItemIndex
- fun addItem(index: Int) {
- if (list == null) list = mutableListOf()
- requireNotNull(list).add(
- measuredItemProvider.getAndMeasure(index)
- )
- }
-
start = maxOf(0, start - beyondBoundsItemCount)
for (i in currentFirstItemIndex - 1 downTo start) {
- addItem(i)
+ if (list == null) list = mutableListOf()
+ list.add(measuredItemProvider.getAndMeasure(i))
}
pinnedItems.fastForEach { index ->
if (index < start) {
- addItem(index)
+ if (list == null) list = mutableListOf()
+ list?.add(measuredItemProvider.getAndMeasure(index))
}
}
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridState.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridState.kt
index 193dfe2..73e2a21 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridState.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridState.kt
@@ -25,8 +25,8 @@
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.lazy.layout.AwaitFirstLayoutModifier
import androidx.compose.foundation.lazy.layout.LazyLayoutBeyondBoundsInfo
-import androidx.compose.foundation.lazy.layout.LazyLayoutPrefetchState
import androidx.compose.foundation.lazy.layout.LazyLayoutPinnedItemList
+import androidx.compose.foundation.lazy.layout.LazyLayoutPrefetchState
import androidx.compose.foundation.lazy.layout.animateScrollToItem
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Stable
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutAnimateItemModifierNode.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutAnimateItemModifierNode.kt
index 5623db2..dc2161f 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutAnimateItemModifierNode.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutAnimateItemModifierNode.kt
@@ -92,10 +92,17 @@
} else {
placementAnimationSpec
}
- val startVelocity = placementDeltaAnimation.velocity
- placementDeltaAnimation.snapTo(totalDelta)
- placementDeltaAnimation.animateTo(IntOffset.Zero, spec, startVelocity) {
- placementDelta = value
+ if (!placementDeltaAnimation.isRunning) {
+ // if not running we can snap to the initial value and animate to zero
+ placementDeltaAnimation.snapTo(totalDelta)
+ }
+ // if animation is not currently running the target will be zero, otherwise
+ // we have to continue the animation from the current value, but keep the needed
+ // total delta for the new animation.
+ val animationTarget = placementDeltaAnimation.value - totalDelta
+ placementDeltaAnimation.animateTo(animationTarget, spec) {
+ // placementDelta is calculated as if we always animate to target equal to zero
+ placementDelta = value - animationTarget
}
isAnimationInProgress = false
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsState.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsState.kt
index 2996035..7f5d9cb 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsState.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsState.kt
@@ -58,4 +58,4 @@
}
return pinnedItems
}
-}
\ No newline at end of file
+}
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridState.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridState.kt
index 35b1261..84f9df6 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridState.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridState.kt
@@ -26,9 +26,9 @@
import androidx.compose.foundation.lazy.layout.LazyAnimateScrollScope
import androidx.compose.foundation.lazy.layout.LazyLayoutBeyondBoundsInfo
import androidx.compose.foundation.lazy.layout.LazyLayoutItemProvider
+import androidx.compose.foundation.lazy.layout.LazyLayoutPinnedItemList
import androidx.compose.foundation.lazy.layout.LazyLayoutPrefetchState
import androidx.compose.foundation.lazy.layout.LazyLayoutPrefetchState.PrefetchHandle
-import androidx.compose.foundation.lazy.layout.LazyLayoutPinnedItemList
import androidx.compose.foundation.lazy.layout.animateScrollToItem
import androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridLaneInfo.Companion.Unset
import androidx.compose.runtime.Composable
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/Pager.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/Pager.kt
index 23c078e..96e93f6 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/Pager.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/Pager.kt
@@ -31,6 +31,7 @@
import androidx.compose.foundation.gestures.snapping.MinFlingVelocityDp
import androidx.compose.foundation.gestures.snapping.SnapFlingBehavior
import androidx.compose.foundation.gestures.snapping.SnapLayoutInfoProvider
+import androidx.compose.foundation.gestures.snapping.calculateDistanceToDesiredSnapPosition
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Stable
@@ -673,9 +674,13 @@
layoutInfo.visiblePagesInfo.fastForEach { page ->
val offset = calculateDistanceToDesiredSnapPosition(
- layoutInfo,
- page,
- SnapAlignmentStartToStart
+ mainAxisViewPortSize = layoutInfo.mainAxisViewportSize,
+ beforeContentPadding = layoutInfo.beforeContentPadding,
+ afterContentPadding = layoutInfo.afterContentPadding,
+ itemSize = layoutInfo.pageSize,
+ itemOffset = page.offset,
+ itemIndex = page.index,
+ snapPositionInLayout = SnapAlignmentStartToStart
)
// Find page that is closest to the snap position, but before it
@@ -870,26 +875,6 @@
})
}
-@OptIn(ExperimentalFoundationApi::class)
-internal fun Density.calculateDistanceToDesiredSnapPosition(
- layoutInfo: PagerLayoutInfo,
- page: PageInfo,
- positionInLayout: Density.(layoutSize: Float, itemSize: Float) -> Float
-): Float {
- val containerSize =
- with(layoutInfo) { mainAxisViewportSize - beforeContentPadding - afterContentPadding }
-
- val desiredDistance =
- positionInLayout(containerSize.toFloat(), layoutInfo.pageSize.toFloat())
-
- val itemCurrentPosition = page.offset
- return itemCurrentPosition - desiredDistance
-}
-
-@OptIn(ExperimentalFoundationApi::class)
-private val PagerLayoutInfo.mainAxisViewportSize: Int
- get() = if (orientation == Orientation.Vertical) viewportSize.height else viewportSize.width
-
private const val LowVelocityAnimationDefaultDuration = 500
private const val DEBUG = false
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerBeyondBoundsModifier.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerBeyondBoundsModifier.kt
index 7c9deaf..84d4297 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerBeyondBoundsModifier.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerBeyondBoundsModifier.kt
@@ -17,8 +17,8 @@
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.gestures.Orientation
-import androidx.compose.foundation.lazy.layout.LazyLayoutBeyondBoundsState
import androidx.compose.foundation.lazy.layout.LazyLayoutBeyondBoundsModifierLocal
+import androidx.compose.foundation.lazy.layout.LazyLayoutBeyondBoundsState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerLayoutInfo.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerLayoutInfo.kt
index 10a25d2..27009c4 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerLayoutInfo.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerLayoutInfo.kt
@@ -34,4 +34,8 @@
val viewportSize: IntSize
val orientation: Orientation
val reverseLayout: Boolean
-}
\ No newline at end of file
+}
+
+@ExperimentalFoundationApi
+internal val PagerLayoutInfo.mainAxisViewportSize: Int
+ get() = if (orientation == Orientation.Vertical) viewportSize.height else viewportSize.width
\ No newline at end of file
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerMeasure.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerMeasure.kt
index 68693ac..4c6eb09 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerMeasure.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerMeasure.kt
@@ -19,6 +19,7 @@
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.fastFilter
import androidx.compose.foundation.gestures.Orientation
+import androidx.compose.foundation.gestures.snapping.calculateDistanceToDesiredSnapPosition
import androidx.compose.foundation.layout.Arrangement.Absolute.spacedBy
import androidx.compose.foundation.lazy.layout.LazyLayoutMeasureScope
import androidx.compose.ui.Alignment
@@ -349,6 +350,7 @@
else
currentMainAxisOffset
)
+
val layoutHeight = constraints
.constrainHeight(
if (orientation == Orientation.Vertical)
@@ -381,12 +383,13 @@
val closestPageToSnapPosition = visiblePagesInfo.fastMaxBy {
-abs(
calculateDistanceToDesiredSnapPosition(
- viewPortSize,
- beforeContentPadding,
- afterContentPadding,
- pageAvailableSize,
- it,
- SnapAlignmentStartToStart
+ mainAxisViewPortSize = viewPortSize,
+ beforeContentPadding = beforeContentPadding,
+ afterContentPadding = afterContentPadding,
+ itemSize = pageAvailableSize,
+ itemOffset = it.offset,
+ itemIndex = it.index,
+ snapPositionInLayout = SnapAlignmentStartToStart
)
)
}
@@ -415,24 +418,6 @@
}
}
-@OptIn(ExperimentalFoundationApi::class)
-private fun Density.calculateDistanceToDesiredSnapPosition(
- axisViewPortSize: Int,
- beforeContentPadding: Int,
- afterContentPadding: Int,
- pageSize: Int,
- page: PageInfo,
- positionInLayout: Density.(layoutSize: Float, itemSize: Float) -> Float
-): Float {
- val containerSize = axisViewPortSize - beforeContentPadding - afterContentPadding
-
- val desiredDistance =
- positionInLayout(containerSize.toFloat(), pageSize.toFloat())
-
- val itemCurrentPosition = page.offset
- return itemCurrentPosition - desiredDistance
-}
-
private fun createPagesAfterList(
currentLastPage: Int,
pagesCount: Int,
@@ -444,18 +429,15 @@
val end = minOf(currentLastPage + beyondBoundsPageCount, pagesCount - 1)
- fun addPage(index: Int) {
- if (list == null) list = mutableListOf()
- requireNotNull(list).add(getAndMeasure(index))
- }
-
for (i in currentLastPage + 1..end) {
- addPage(i)
+ if (list == null) list = mutableListOf()
+ list.add(getAndMeasure(i))
}
pinnedPages.fastForEach { pageIndex ->
if (pageIndex in (end + 1) until pagesCount) {
- addPage(pageIndex)
+ if (list == null) list = mutableListOf()
+ list?.add(getAndMeasure(pageIndex))
}
}
@@ -472,20 +454,15 @@
val start = maxOf(0, currentFirstPage - beyondBoundsPageCount)
- fun addPage(index: Int) {
- if (list == null) list = mutableListOf()
- requireNotNull(list).add(
- getAndMeasure(index)
- )
- }
-
for (i in currentFirstPage - 1 downTo start) {
- addPage(i)
+ if (list == null) list = mutableListOf()
+ list.add(getAndMeasure(i))
}
pinnedPages.fastForEach { pageIndex ->
if (pageIndex < start) {
- addPage(pageIndex)
+ if (list == null) list = mutableListOf()
+ list?.add(getAndMeasure(pageIndex))
}
}
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerState.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerState.kt
index 715fe0a..ea799c2 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerState.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerState.kt
@@ -25,6 +25,8 @@
import androidx.compose.foundation.gestures.ScrollScope
import androidx.compose.foundation.gestures.ScrollableState
import androidx.compose.foundation.gestures.animateScrollBy
+import androidx.compose.foundation.gestures.snapping.SnapPositionInLayout
+import androidx.compose.foundation.gestures.snapping.calculateDistanceToDesiredSnapPosition
import androidx.compose.foundation.interaction.InteractionSource
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.lazy.layout.AwaitFirstLayoutModifier
@@ -259,9 +261,13 @@
private val distanceToSnapPosition: Float
get() = layoutInfo.closestPageToSnapPosition?.let {
density.calculateDistanceToDesiredSnapPosition(
- layoutInfo,
- it,
- SnapAlignmentStartToStart
+ mainAxisViewPortSize = layoutInfo.mainAxisViewportSize,
+ beforeContentPadding = layoutInfo.beforeContentPadding,
+ afterContentPadding = layoutInfo.afterContentPadding,
+ itemSize = layoutInfo.pageSize,
+ itemOffset = it.offset,
+ itemIndex = it.index,
+ snapPositionInLayout = SnapAlignmentStartToStart
)
} ?: 0f
@@ -665,8 +671,8 @@
override val fontScale: Float = 1f
}
-internal val SnapAlignmentStartToStart: Density.(layoutSize: Float, itemSize: Float) -> Float =
- { _, _ -> 0f }
+@OptIn(ExperimentalFoundationApi::class)
+internal val SnapAlignmentStartToStart = SnapPositionInLayout { _, _, _ -> 0 }
private const val DEBUG = false
private inline fun debugLog(generateMsg: () -> String) {
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/relocation/BringIntoViewResponder.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/relocation/BringIntoViewResponder.kt
index 15c631e..71820cc 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/relocation/BringIntoViewResponder.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/relocation/BringIntoViewResponder.kt
@@ -132,7 +132,7 @@
* for recursively propagating requests up the responder chain.
*/
@OptIn(ExperimentalFoundationApi::class)
-private class BringIntoViewResponderNode(
+internal class BringIntoViewResponderNode(
var responder: BringIntoViewResponder
) : BringIntoViewChildNode(), BringIntoViewParent {
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/selection/Selectable.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/selection/Selectable.kt
index 5b3869a..fcdba64 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/selection/Selectable.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/selection/Selectable.kt
@@ -17,9 +17,9 @@
package androidx.compose.foundation.selection
import androidx.compose.foundation.Indication
-import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.LocalIndication
import androidx.compose.foundation.clickable
+import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.composed
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/CoreTextField.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/CoreTextField.kt
index 49de4bc..6be6e4b 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/CoreTextField.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/CoreTextField.kt
@@ -81,7 +81,6 @@
import androidx.compose.ui.semantics.disabled
import androidx.compose.ui.semantics.editableText
import androidx.compose.ui.semantics.getTextLayoutResult
-import androidx.compose.ui.semantics.imeAction
import androidx.compose.ui.semantics.insertTextAtCursor
import androidx.compose.ui.semantics.onClick
import androidx.compose.ui.semantics.onLongClick
@@ -410,7 +409,6 @@
val isPassword = visualTransformation is PasswordVisualTransformation
val semanticsModifier = Modifier.semantics(true) {
// focused semantics are handled by Modifier.focusable()
- this.imeAction = imeOptions.imeAction
this.editableText = transformedText.text
this.textSelectionRange = value.selection
if (!enabled) this.disabled()
@@ -503,7 +501,7 @@
false
}
}
- performImeAction {
+ performImeAction(imeOptions.imeAction) {
// This will perform the appropriate default action if no handler has been specified, so
// as far as the platform is concerned, we always handle the action and never want to
// defer to the default _platform_ implementation.
@@ -782,8 +780,17 @@
*/
var minHeightForSingleLineField by mutableStateOf(0.dp)
- /** The last layout coordinates for the Text's layout, used by selection */
- var layoutCoordinates: LayoutCoordinates? = null
+ /**
+ * The last layout coordinates for the inner text field LayoutNode, used by selection and
+ * notifyFocusedRect. Since this layoutCoordinates only used for relative position calculation,
+ * we are guarding ourselves from using it when it's not attached.
+ */
+ private var _layoutCoordinates: LayoutCoordinates? = null
+ var layoutCoordinates: LayoutCoordinates?
+ get() = _layoutCoordinates?.takeIf { it.isAttached }
+ set(value) {
+ _layoutCoordinates = value
+ }
/**
* You should be using proxy type [TextLayoutResultProxy] if you need to translate touch
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/KeyboardActionRunner.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/KeyboardActionRunner.kt
index 96051ac..1bf9ca7 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/KeyboardActionRunner.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/KeyboardActionRunner.kt
@@ -20,13 +20,13 @@
import androidx.compose.ui.focus.FocusManager
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.ImeAction.Companion.Default
-import androidx.compose.ui.text.input.ImeAction.Companion.None
+import androidx.compose.ui.text.input.ImeAction.Companion.Done
import androidx.compose.ui.text.input.ImeAction.Companion.Go
+import androidx.compose.ui.text.input.ImeAction.Companion.Next
+import androidx.compose.ui.text.input.ImeAction.Companion.None
+import androidx.compose.ui.text.input.ImeAction.Companion.Previous
import androidx.compose.ui.text.input.ImeAction.Companion.Search
import androidx.compose.ui.text.input.ImeAction.Companion.Send
-import androidx.compose.ui.text.input.ImeAction.Companion.Previous
-import androidx.compose.ui.text.input.ImeAction.Companion.Next
-import androidx.compose.ui.text.input.ImeAction.Companion.Done
import androidx.compose.ui.text.input.TextInputSession
/**
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/LongPressTextDragObserver.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/LongPressTextDragObserver.kt
index d848b79..fa1811f 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/LongPressTextDragObserver.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/LongPressTextDragObserver.kt
@@ -16,10 +16,10 @@
package androidx.compose.foundation.text
+import androidx.compose.foundation.gestures.awaitEachGesture
import androidx.compose.foundation.gestures.awaitFirstDown
import androidx.compose.foundation.gestures.detectDragGestures
import androidx.compose.foundation.gestures.detectDragGesturesAfterLongPress
-import androidx.compose.foundation.gestures.awaitEachGesture
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.input.pointer.PointerInputScope
import androidx.compose.ui.util.fastAny
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/selection/SelectionRegistrarImpl.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/selection/SelectionRegistrarImpl.kt
index b07e058..27e669c 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/selection/SelectionRegistrarImpl.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/selection/SelectionRegistrarImpl.kt
@@ -17,9 +17,9 @@
package androidx.compose.foundation.text.selection
import androidx.compose.foundation.AtomicLong
-import androidx.compose.runtime.setValue
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.layout.LayoutCoordinates
diff --git a/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/BasicContextMenuRepresentation.desktop.kt b/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/BasicContextMenuRepresentation.desktop.kt
index 86ddbd5..7b68366 100644
--- a/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/BasicContextMenuRepresentation.desktop.kt
+++ b/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/BasicContextMenuRepresentation.desktop.kt
@@ -27,9 +27,9 @@
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.text.BasicText
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
-import androidx.compose.runtime.getValue
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
diff --git a/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/Scrollbar.desktop.kt b/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/Scrollbar.desktop.kt
index 77c5476..1398ec3 100644
--- a/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/Scrollbar.desktop.kt
+++ b/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/Scrollbar.desktop.kt
@@ -18,10 +18,10 @@
import androidx.compose.animation.animateColorAsState
import androidx.compose.animation.core.TweenSpec
+import androidx.compose.foundation.gestures.awaitEachGesture
import androidx.compose.foundation.gestures.awaitFirstDown
import androidx.compose.foundation.gestures.detectTapAndPress
import androidx.compose.foundation.gestures.drag
-import androidx.compose.foundation.gestures.awaitEachGesture
import androidx.compose.foundation.gestures.scrollBy
import androidx.compose.foundation.interaction.DragInteraction
import androidx.compose.foundation.interaction.MutableInteractionSource
@@ -59,11 +59,11 @@
import androidx.compose.ui.unit.constrainHeight
import androidx.compose.ui.unit.constrainWidth
import androidx.compose.ui.unit.dp
-import kotlinx.coroutines.delay
-import kotlinx.coroutines.runBlocking
import kotlin.math.abs
import kotlin.math.roundToInt
import kotlin.math.sign
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.runBlocking
/**
* [CompositionLocal] used to pass [ScrollbarStyle] down the tree.
diff --git a/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/TooltipArea.desktop.kt b/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/TooltipArea.desktop.kt
index 0de1a5c..4b9d393 100644
--- a/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/TooltipArea.desktop.kt
+++ b/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/TooltipArea.desktop.kt
@@ -24,26 +24,26 @@
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
-import androidx.compose.ui.input.pointer.changedToDown
import androidx.compose.ui.input.pointer.PointerEventPass
+import androidx.compose.ui.input.pointer.PointerEventType
import androidx.compose.ui.input.pointer.PointerInputScope
+import androidx.compose.ui.input.pointer.changedToDown
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.layout.positionInWindow
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.input.pointer.PointerEventType
import androidx.compose.ui.unit.Dp
-import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.DpOffset
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.IntRect
+import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Popup
import androidx.compose.ui.window.PopupPositionProvider
-import androidx.compose.ui.window.rememberCursorPositionProvider
import androidx.compose.ui.window.rememberComponentRectPositionProvider
-import kotlinx.coroutines.delay
+import androidx.compose.ui.window.rememberCursorPositionProvider
import kotlinx.coroutines.Job
+import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
/**
diff --git a/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/gestures/DesktopScrollable.desktop.kt b/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/gestures/DesktopScrollable.desktop.kt
index 6314814..6e08d4e 100644
--- a/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/gestures/DesktopScrollable.desktop.kt
+++ b/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/gestures/DesktopScrollable.desktop.kt
@@ -16,14 +16,15 @@
package androidx.compose.foundation.gestures
-import androidx.compose.runtime.Composable
-import androidx.compose.foundation.fastFold
import androidx.compose.foundation.DesktopPlatform
+import androidx.compose.foundation.fastFold
import androidx.compose.runtime.compositionLocalOf
-import androidx.compose.ui.unit.Density
-import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.input.pointer.PointerEvent
+import androidx.compose.ui.node.CompositionLocalConsumerModifierNode
+import androidx.compose.ui.node.currentValueOf
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.dp
import java.awt.event.MouseWheelEvent
import kotlin.math.sqrt
@@ -40,8 +41,8 @@
}
}
-@Composable
-internal actual fun platformScrollConfig() = LocalScrollConfig.current
+internal actual fun CompositionLocalConsumerModifierNode.platformScrollConfig() =
+ currentValueOf(LocalScrollConfig)
// TODO(demin): is this formula actually correct? some experimental values don't fit
// the formula
diff --git a/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/window/WindowDraggableArea.desktop.kt b/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/window/WindowDraggableArea.desktop.kt
index fff404c..c525ae5 100644
--- a/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/window/WindowDraggableArea.desktop.kt
+++ b/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/window/WindowDraggableArea.desktop.kt
@@ -16,8 +16,8 @@
package androidx.compose.foundation.window
-import androidx.compose.foundation.gestures.awaitFirstDown
import androidx.compose.foundation.gestures.awaitEachGesture
+import androidx.compose.foundation.gestures.awaitFirstDown
import androidx.compose.foundation.layout.Box
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
diff --git a/compose/foundation/foundation/src/desktopTest/kotlin/androidx/compose/foundation/ScrollbarTest.kt b/compose/foundation/foundation/src/desktopTest/kotlin/androidx/compose/foundation/ScrollbarTest.kt
index b086c51..7edf141 100644
--- a/compose/foundation/foundation/src/desktopTest/kotlin/androidx/compose/foundation/ScrollbarTest.kt
+++ b/compose/foundation/foundation/src/desktopTest/kotlin/androidx/compose/foundation/ScrollbarTest.kt
@@ -33,13 +33,13 @@
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.mutableStateOf
import androidx.compose.ui.ExperimentalComposeUiApi
-import androidx.compose.ui.input.pointer.PointerEventType
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.RectangleShape
-import androidx.compose.ui.platform.testTag
import androidx.compose.ui.input.pointer.PointerEvent
+import androidx.compose.ui.input.pointer.PointerEventType
+import androidx.compose.ui.platform.testTag
import androidx.compose.ui.test.ExperimentalTestApi
import androidx.compose.ui.test.InternalTestApi
import androidx.compose.ui.test.TouchInjectionScope
diff --git a/compose/foundation/foundation/src/desktopTest/kotlin/androidx/compose/foundation/gestures/DesktopScrollableTest.kt b/compose/foundation/foundation/src/desktopTest/kotlin/androidx/compose/foundation/gestures/DesktopScrollableTest.kt
index d7820234..b9b7073 100644
--- a/compose/foundation/foundation/src/desktopTest/kotlin/androidx/compose/foundation/gestures/DesktopScrollableTest.kt
+++ b/compose/foundation/foundation/src/desktopTest/kotlin/androidx/compose/foundation/gestures/DesktopScrollableTest.kt
@@ -32,11 +32,11 @@
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import com.google.common.truth.Truth.assertThat
+import kotlin.math.sqrt
import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import kotlin.math.sqrt
// TODO(demin): convert to ComposeScene instead of TestComposeWindow,
// after that we won't need `window.render`
diff --git a/compose/foundation/foundation/src/desktopTest/kotlin/androidx/compose/foundation/text/selection/DesktopTextFieldSelectionManagerTest.kt b/compose/foundation/foundation/src/desktopTest/kotlin/androidx/compose/foundation/text/selection/DesktopTextFieldSelectionManagerTest.kt
index f4df453..72b92ca 100644
--- a/compose/foundation/foundation/src/desktopTest/kotlin/androidx/compose/foundation/text/selection/DesktopTextFieldSelectionManagerTest.kt
+++ b/compose/foundation/foundation/src/desktopTest/kotlin/androidx/compose/foundation/text/selection/DesktopTextFieldSelectionManagerTest.kt
@@ -38,16 +38,16 @@
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.LayoutDirection
import com.google.common.truth.Truth.assertThat
-import org.mockito.kotlin.any
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.times
-import org.mockito.kotlin.verify
-import org.mockito.kotlin.whenever
import org.junit.Before
import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
+import org.mockito.kotlin.any
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.times
+import org.mockito.kotlin.verify
+import org.mockito.kotlin.whenever
@RunWith(JUnit4::class)
@Ignore("b/271123970 Fails in AOSP. Will be fixed after upstreaming Compose for Desktop")
diff --git a/compose/foundation/foundation/src/desktopTest/kotlin/androidx/compose/foundation/text/selection/StringHelpersTest.kt b/compose/foundation/foundation/src/desktopTest/kotlin/androidx/compose/foundation/text/selection/StringHelpersTest.kt
index 650354d..1de6bae 100644
--- a/compose/foundation/foundation/src/desktopTest/kotlin/androidx/compose/foundation/text/selection/StringHelpersTest.kt
+++ b/compose/foundation/foundation/src/desktopTest/kotlin/androidx/compose/foundation/text/selection/StringHelpersTest.kt
@@ -19,7 +19,6 @@
import androidx.compose.foundation.text.findFollowingBreak
import androidx.compose.foundation.text.findPrecedingBreak
import com.google.common.truth.Truth.assertThat
-
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
diff --git a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueueTest.kt b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueueTest.kt
index 3c89888..1839648 100644
--- a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueueTest.kt
+++ b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueueTest.kt
@@ -16,7 +16,7 @@
package androidx.compose.foundation.gestures
-import androidx.compose.foundation.gestures.ContentInViewModifier.Request
+import androidx.compose.foundation.gestures.ContentInViewNode.Request
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Rect
import androidx.compose.ui.geometry.Size
diff --git a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/TextDelegateTest.kt b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/TextDelegateTest.kt
index a878a1c..c9a1c17 100644
--- a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/TextDelegateTest.kt
+++ b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/TextDelegateTest.kt
@@ -22,10 +22,10 @@
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.Density
import com.google.common.truth.Truth.assertThat
-import org.mockito.kotlin.mock
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
+import org.mockito.kotlin.mock
@OptIn(InternalFoundationTextApi::class)
@RunWith(JUnit4::class)
diff --git a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/TextFieldBringIntoViewTest.kt b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/TextFieldBringIntoViewTest.kt
index f936cd5..e80c61f 100644
--- a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/TextFieldBringIntoViewTest.kt
+++ b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/TextFieldBringIntoViewTest.kt
@@ -33,17 +33,17 @@
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.LayoutDirection
+import kotlinx.coroutines.runBlocking
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
import org.mockito.kotlin.any
import org.mockito.kotlin.mock
import org.mockito.kotlin.reset
import org.mockito.kotlin.verify
import org.mockito.kotlin.verifyBlocking
import org.mockito.kotlin.whenever
-import kotlinx.coroutines.runBlocking
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
@OptIn(InternalFoundationTextApi::class, ExperimentalFoundationApi::class)
@RunWith(JUnit4::class)
diff --git a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/TextFieldDelegateTest.kt b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/TextFieldDelegateTest.kt
index 3ced499..f38fa30 100644
--- a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/TextFieldDelegateTest.kt
+++ b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/TextFieldDelegateTest.kt
@@ -38,6 +38,10 @@
import androidx.compose.ui.text.input.VisualTransformation
import androidx.compose.ui.text.style.TextDecoration
import com.google.common.truth.Truth.assertThat
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
import org.mockito.kotlin.any
import org.mockito.kotlin.eq
import org.mockito.kotlin.inOrder
@@ -45,10 +49,6 @@
import org.mockito.kotlin.times
import org.mockito.kotlin.verify
import org.mockito.kotlin.whenever
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
@OptIn(InternalFoundationTextApi::class)
@RunWith(JUnit4::class)
diff --git a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/TextFieldStateTest.kt b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/TextFieldStateTest.kt
index 80a615d..c8ab92b 100644
--- a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/TextFieldStateTest.kt
+++ b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/TextFieldStateTest.kt
@@ -18,10 +18,10 @@
import androidx.compose.runtime.snapshots.Snapshot
import com.google.common.truth.Truth
-import org.mockito.kotlin.mock
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
+import org.mockito.kotlin.mock
@RunWith(JUnit4::class)
internal class TextFieldStateTest {
diff --git a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/TextLayoutHelperTest.kt b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/TextLayoutHelperTest.kt
index 4420a2b..d14c552 100644
--- a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/TextLayoutHelperTest.kt
+++ b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/TextLayoutHelperTest.kt
@@ -33,12 +33,12 @@
import androidx.compose.ui.unit.em
import androidx.compose.ui.unit.sp
import com.google.common.truth.Truth.assertThat
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.whenever
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.whenever
@RunWith(JUnit4::class)
class TextLayoutHelperTest {
diff --git a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/selection/MockCoordinates.kt b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/selection/MockCoordinates.kt
index 344ce0b..ec961c2 100644
--- a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/selection/MockCoordinates.kt
+++ b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/selection/MockCoordinates.kt
@@ -16,9 +16,9 @@
package androidx.compose.foundation.text.selection
-import androidx.compose.ui.layout.AlignmentLine
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Rect
+import androidx.compose.ui.layout.AlignmentLine
import androidx.compose.ui.layout.LayoutCoordinates
import androidx.compose.ui.unit.IntSize
diff --git a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/selection/SelectionAdjustmentTest.kt b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/selection/SelectionAdjustmentTest.kt
index 84211e52..15f2365 100644
--- a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/selection/SelectionAdjustmentTest.kt
+++ b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/selection/SelectionAdjustmentTest.kt
@@ -29,11 +29,11 @@
import androidx.compose.ui.util.packInts
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
-import org.mockito.kotlin.any
-import org.mockito.kotlin.mock
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
+import org.mockito.kotlin.any
+import org.mockito.kotlin.mock
@SmallTest
@RunWith(JUnit4::class)
diff --git a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/selection/SelectionManagerDragTest.kt b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/selection/SelectionManagerDragTest.kt
index 034e5cd..9bcffd9 100644
--- a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/selection/SelectionManagerDragTest.kt
+++ b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/selection/SelectionManagerDragTest.kt
@@ -24,14 +24,14 @@
import androidx.compose.ui.text.style.ResolvedTextDirection
import androidx.compose.ui.unit.IntSize
import com.google.common.truth.Truth.assertThat
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.spy
-import org.mockito.kotlin.times
-import org.mockito.kotlin.verify
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.spy
+import org.mockito.kotlin.times
+import org.mockito.kotlin.verify
@RunWith(JUnit4::class)
class SelectionManagerDragTest {
diff --git a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/selection/SelectionManagerTest.kt b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/selection/SelectionManagerTest.kt
index 2e206d7..a14887a 100644
--- a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/selection/SelectionManagerTest.kt
+++ b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/selection/SelectionManagerTest.kt
@@ -26,6 +26,10 @@
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.style.ResolvedTextDirection
import com.google.common.truth.Truth.assertThat
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
import org.mockito.kotlin.any
import org.mockito.kotlin.argThat
import org.mockito.kotlin.doReturn
@@ -37,10 +41,6 @@
import org.mockito.kotlin.times
import org.mockito.kotlin.verify
import org.mockito.kotlin.whenever
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
@RunWith(JUnit4::class)
class SelectionManagerTest {
diff --git a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/selection/SelectionRegistrarImplTest.kt b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/selection/SelectionRegistrarImplTest.kt
index 0c8f63b..b0e573e 100644
--- a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/selection/SelectionRegistrarImplTest.kt
+++ b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/selection/SelectionRegistrarImplTest.kt
@@ -17,14 +17,13 @@
package androidx.compose.foundation.text.selection
import androidx.compose.ui.geometry.Offset
-
import androidx.compose.ui.layout.LayoutCoordinates
import com.google.common.truth.Truth.assertThat
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.whenever
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.whenever
@RunWith(JUnit4::class)
class SelectionRegistrarImplTest {
diff --git a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionManagerTest.kt b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionManagerTest.kt
index c0a54f5..525e6bf 100644
--- a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionManagerTest.kt
+++ b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionManagerTest.kt
@@ -16,8 +16,8 @@
package androidx.compose.foundation.text.selection
-import androidx.compose.foundation.text.InternalFoundationTextApi
import androidx.compose.foundation.text.HandleState
+import androidx.compose.foundation.text.InternalFoundationTextApi
import androidx.compose.foundation.text.TextFieldState
import androidx.compose.foundation.text.TextLayoutResultProxy
import androidx.compose.ui.focus.FocusRequester
@@ -45,6 +45,11 @@
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.util.packInts
import com.google.common.truth.Truth.assertThat
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import org.mockito.invocation.InvocationOnMock
import org.mockito.kotlin.any
import org.mockito.kotlin.anyOrNull
import org.mockito.kotlin.isNull
@@ -53,11 +58,6 @@
import org.mockito.kotlin.times
import org.mockito.kotlin.verify
import org.mockito.kotlin.whenever
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
-import org.mockito.invocation.InvocationOnMock
import org.mockito.stubbing.Answer
@RunWith(JUnit4::class)
diff --git a/compose/integration-tests/demos/src/main/java/androidx/compose/integration/demos/Demos.kt b/compose/integration-tests/demos/src/main/java/androidx/compose/integration/demos/Demos.kt
index 8b85bc8..a987eda 100644
--- a/compose/integration-tests/demos/src/main/java/androidx/compose/integration/demos/Demos.kt
+++ b/compose/integration-tests/demos/src/main/java/androidx/compose/integration/demos/Demos.kt
@@ -18,13 +18,13 @@
import androidx.compose.animation.demos.AnimationDemos
import androidx.compose.foundation.demos.FoundationDemos
+import androidx.compose.foundation.demos.text.TextDemos
import androidx.compose.foundation.layout.demos.LayoutDemos
import androidx.compose.integration.demos.common.DemoCategory
-import androidx.compose.foundation.demos.text.TextDemos
import androidx.compose.material.demos.MaterialDemos
import androidx.compose.material3.demos.Material3Demos
-import androidx.compose.ui.demos.CoreDemos
import androidx.compose.ui.demos.AccessibilityDemos
+import androidx.compose.ui.demos.CoreDemos
import androidx.navigation.compose.demos.NavigationDemos
import androidx.paging.compose.demos.PagingFoundationDemos
diff --git a/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/navigation/NavigationResponsiveUi.kt b/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/navigation/NavigationResponsiveUi.kt
index c8b4a9a..440795f 100644
--- a/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/navigation/NavigationResponsiveUi.kt
+++ b/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/navigation/NavigationResponsiveUi.kt
@@ -24,8 +24,8 @@
import androidx.compose.runtime.Composable
import androidx.lifecycle.ViewModel
import androidx.navigation.NavHostController
-import androidx.navigation.compose.composable
import androidx.navigation.compose.NavHost
+import androidx.navigation.compose.composable
import androidx.navigation.compose.navigation
import androidx.navigation.compose.rememberNavController
import kotlinx.coroutines.flow.MutableStateFlow
diff --git a/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/sideeffects/SideEffects.kt b/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/sideeffects/SideEffects.kt
index d2f586f..928fce9 100644
--- a/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/sideeffects/SideEffects.kt
+++ b/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/sideeffects/SideEffects.kt
@@ -53,12 +53,6 @@
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.LifecycleOwner
-import kotlinx.coroutines.delay
-import kotlinx.coroutines.flow.collect
-import kotlinx.coroutines.flow.distinctUntilChanged
-import kotlinx.coroutines.flow.filter
-import kotlinx.coroutines.flow.map
-import kotlinx.coroutines.launch
import kotlin.Boolean
import kotlin.Exception
import kotlin.Long
@@ -67,6 +61,12 @@
import kotlin.Suppress
import kotlin.Unit
import kotlin.random.Random
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.flow.collect
+import kotlinx.coroutines.flow.distinctUntilChanged
+import kotlinx.coroutines.flow.filter
+import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.launch
/**
* This file lets DevRel track changes to snippets present in
diff --git a/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/state/State.kt b/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/state/State.kt
deleted file mode 100644
index 5d7c893..0000000
--- a/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/state/State.kt
+++ /dev/null
@@ -1,420 +0,0 @@
-/*
- * 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
- *
- * http://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.
- */
-
-// Ignore lint warnings in documentation snippets
-@file:Suppress("unused", "ControlFlowWithEmptyBody", "UNUSED_PARAMETER", "UNUSED_VARIABLE")
-
-package androidx.compose.integration.docs.state
-
-import android.content.res.Resources
-import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.lazy.LazyColumn
-import androidx.compose.foundation.lazy.LazyListState
-import androidx.compose.foundation.lazy.items
-import androidx.compose.material.Button
-import androidx.compose.material.MaterialTheme
-import androidx.compose.material.OutlinedTextField
-import androidx.compose.material.Scaffold
-import androidx.compose.material.ScaffoldState
-import androidx.compose.material.Text
-import androidx.compose.material.rememberScaffoldState
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.MutableState
-import androidx.compose.runtime.State
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
-import androidx.compose.runtime.rememberCoroutineScope
-import androidx.compose.runtime.saveable.listSaver
-import androidx.compose.runtime.saveable.mapSaver
-import androidx.compose.runtime.saveable.rememberSaveable
-import androidx.compose.runtime.setValue
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.platform.LocalContext
-import androidx.compose.ui.unit.dp
-import androidx.lifecycle.SavedStateHandle
-import androidx.lifecycle.ViewModel
-import androidx.lifecycle.viewmodel.compose.viewModel
-import androidx.navigation.NavHostController
-import androidx.navigation.compose.NavHost
-import androidx.navigation.compose.rememberNavController
-import kotlinx.coroutines.launch
-
-/**
- * This file lets DevRel track changes to snippets present in
- * https://developer.android.com/jetpack/compose/state
- *
- * No action required if it's modified.
- */
-
-private object StateSnippet1 {
- @Composable
- fun HelloContent() {
- Column(modifier = Modifier.padding(16.dp)) {
- Text(
- text = "Hello!",
- modifier = Modifier.padding(bottom = 8.dp),
- style = MaterialTheme.typography.h5
- )
- OutlinedTextField(
- value = "",
- onValueChange = { },
- label = { Text("Name") }
- )
- }
- }
-}
-
-private object StateSnippet2 {
- /*
- * MutableState is part of the API, so StateSnippet2 can't have the exact code
- * for the published documentation. Instead, use the following commented code
- * in the doc. If FakeState<T> changes, update the commented code accordingly.
- *
- interface MutableState<T> : State<T> {
- override var value: T
- }
- */
- interface FakeState<T> : State<T> {
- override var value: T
- }
-
- interface FakeMutableState<T> : MutableState<String>
-}
-
-private object StateSnippet3 {
- @Composable
- fun HelloContent() {
- Column(modifier = Modifier.padding(16.dp)) {
- var name by remember { mutableStateOf("") }
- if (name.isNotEmpty()) {
- Text(
- text = "Hello, $name!",
- modifier = Modifier.padding(bottom = 8.dp),
- style = MaterialTheme.typography.h5
- )
- }
- OutlinedTextField(
- value = name,
- onValueChange = { name = it },
- label = { Text("Name") }
- )
- }
- }
-}
-
-private object StateSnippet4 {
- @Composable
- fun HelloScreen() {
- var name by rememberSaveable { mutableStateOf("") }
-
- HelloContent(name = name, onNameChange = { name = it })
- }
-
- @Composable
- fun HelloContent(name: String, onNameChange: (String) -> Unit) {
- Column(modifier = Modifier.padding(16.dp)) {
- Text(
- text = "Hello, $name",
- modifier = Modifier.padding(bottom = 8.dp),
- style = MaterialTheme.typography.h5
- )
- OutlinedTextField(
- value = name,
- onValueChange = onNameChange,
- label = { Text("Name") }
- )
- }
- }
-}
-
-private object StateSnippet5 {
- @Parcelize
- data class City(val name: String, val country: String) : Parcelable
-
- @Composable
- fun CityScreen() {
- var selectedCity = rememberSaveable {
- mutableStateOf(City("Madrid", "Spain"))
- }
- }
-}
-
-private object StateSnippet6 {
- data class City(val name: String, val country: String)
-
- val CitySaver = run {
- val nameKey = "Name"
- val countryKey = "Country"
- mapSaver(
- save = { mapOf(nameKey to it.name, countryKey to it.country) },
- restore = { City(it[nameKey] as String, it[countryKey] as String) }
- )
- }
-
- @Composable
- fun CityScreen() {
- var selectedCity = rememberSaveable(stateSaver = CitySaver) {
- mutableStateOf(City("Madrid", "Spain"))
- }
- }
-}
-
-@Composable
-private fun StateSnippets7() {
- data class City(val name: String, val country: String)
-
- val CitySaver = listSaver<City, Any>(
- save = { listOf(it.name, it.country) },
- restore = { City(it[0] as String, it[1] as String) }
- )
-
- @Composable
- fun CityScreen() {
- var selectedCity = rememberSaveable(stateSaver = CitySaver) {
- mutableStateOf(City("Madrid", "Spain"))
- }
- }
-}
-
-@Composable
-private fun StateSnippets8() {
- @Composable
- fun MyApp() {
- MyTheme {
- val scaffoldState = rememberScaffoldState()
- val coroutineScope = rememberCoroutineScope()
-
- Scaffold(scaffoldState = scaffoldState) { innerPadding ->
- MyContent(
- showSnackbar = { message ->
- coroutineScope.launch {
- scaffoldState.snackbarHostState.showSnackbar(message)
- }
- },
- modifier = Modifier.padding(innerPadding)
- )
- }
- }
- }
-}
-
-@Composable
-private fun StateSnippets9() {
-
- // Plain class that manages App's UI logic and UI elements' state
- class MyAppState(
- val scaffoldState: ScaffoldState,
- val navController: NavHostController,
- private val resources: Resources,
- /* ... */
- ) {
- val bottomBarTabs = /* State */
- // DO NOT COPY IN DAC
- Unit
-
- // Logic to decide when to show the bottom bar
- val shouldShowBottomBar: Boolean
- get() = /* ... */
- // DO NOT COPY IN DAC
- false
-
- // Navigation logic, which is a type of UI logic
- fun navigateToBottomBarRoute(route: String) { /* ... */ }
-
- // Show snackbar using Resources
- fun showSnackbar(message: String) { /* ... */ }
- }
-
- @Composable
- fun rememberMyAppState(
- scaffoldState: ScaffoldState = rememberScaffoldState(),
- navController: NavHostController = rememberNavController(),
- resources: Resources = LocalContext.current.resources,
- /* ... */
- ) = remember(scaffoldState, navController, resources, /* ... */) {
- MyAppState(scaffoldState, navController, resources, /* ... */)
- }
-}
-
-@Composable
-private fun StateSnippets10() {
- @Composable
- fun MyApp() {
- MyTheme {
- val myAppState = rememberMyAppState()
- Scaffold(
- scaffoldState = myAppState.scaffoldState,
- bottomBar = {
- if (myAppState.shouldShowBottomBar) {
- BottomBar(
- tabs = myAppState.bottomBarTabs,
- navigateToRoute = {
- myAppState.navigateToBottomBarRoute(it)
- }
- )
- }
- }
- ) { innerPadding ->
- NavHost(
- navController = myAppState.navController,
- startDestination = "initial",
- modifier = Modifier.padding(innerPadding)
- ) { /* ... */ }
- }
- }
- }
-}
-
-@Composable
-private fun StateSnippets11() {
- data class ExampleUiState(
- val dataToDisplayOnScreen: List<Example> = emptyList(),
- val userMessages: List<Message> = emptyList(),
- val loading: Boolean = false
- )
-
- class ExampleViewModel(
- private val repository: MyRepository,
- private val savedState: SavedStateHandle
- ) : ViewModel() {
-
- var uiState by mutableStateOf(ExampleUiState())
- private set
-
- // Business logic
- fun somethingRelatedToBusinessLogic() { /* ... */ }
- }
-
- @Composable
- fun ExampleScreen(viewModel: ExampleViewModel = viewModel()) {
-
- val uiState = viewModel.uiState
- /* ... */
-
- ExampleReusableComponent(
- someData = uiState.dataToDisplayOnScreen,
- onDoSomething = { viewModel.somethingRelatedToBusinessLogic() }
- )
- }
-
- @Composable
- fun ExampleReusableComponent(someData: Any, onDoSomething: () -> Unit) {
- /* ... */
- Button(onClick = onDoSomething) {
- Text("Do something")
- }
- }
-}
-
-@Composable
-private fun StateSnippets12() {
- class ExampleState(
- val lazyListState: LazyListState,
- private val resources: Resources,
- private val expandedItems: List<Item> = emptyList()
- ) {
- fun isExpandedItem(item: Item): Boolean = TODO()
- /* ... */
- }
-
- @Composable
- fun rememberExampleState(/* ... */): ExampleState { TODO() }
-
- @Composable
- fun ExampleScreen(viewModel: ExampleViewModel = viewModel()) {
-
- val uiState = viewModel.uiState
- val exampleState = rememberExampleState()
-
- LazyColumn(state = exampleState.lazyListState) {
- items(uiState.dataToDisplayOnScreen) { item ->
- if (exampleState.isExpandedItem(item)) {
- /* ... */
- }
- /* ... */
- }
- }
- }
-}
-
-/*
- * Fakes needed for snippets to build:
- */
-
-private object binding {
- object helloText {
- var text = ""
- }
-
- object textInput {
- fun doAfterTextChanged(function: () -> Unit) {}
- }
-}
-
-@Composable
-private fun MyTheme(content: @Composable () -> Unit) {}
-
-@Composable
-private fun MyContent(showSnackbar: (String) -> Unit, modifier: Modifier = Modifier) {}
-
-@Composable
-private fun BottomBar(tabs: Unit, navigateToRoute: (String) -> Unit) {}
-
-@Composable
-private fun rememberMyAppState(
- scaffoldState: ScaffoldState = rememberScaffoldState(),
- navController: NavHostController = rememberNavController(),
- resources: Resources = LocalContext.current.resources
-) = remember(scaffoldState, navController, resources) {
- MyAppState(scaffoldState, navController, resources)
-}
-
-private class MyAppState(
- val scaffoldState: ScaffoldState,
- val navController: NavHostController,
- private val resources: Resources,
-) {
- val shouldShowBottomBar: Boolean = false
- val bottomBarTabs = Unit
- fun navigateToBottomBarRoute(route: String) {}
-}
-
-/**
- * Add fake Parcelize and Parcelable to avoid adding AndroidX wide dependency on
- * kotlin-parcelize just for snippets
- */
-private annotation class Parcelize
-private interface Parcelable
-
-private class Example
-private class Item
-private class Message
-private class MyRepository
-
-@Composable
-private fun ExampleReusableComponent(someData: List<Example>, onDoSomething: () -> Unit) {}
-
-private class ExampleViewModel : ViewModel() {
- val uiState = ExampleUiState()
-}
-
-private data class ExampleUiState(
- val dataToDisplayOnScreen: List<Item> = emptyList(),
- val userMessages: List<Message> = emptyList(),
- val loading: Boolean = false
-)
\ No newline at end of file
diff --git a/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/testing/CheatSheet.kt b/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/testing/CheatSheet.kt
index 8531dc7e..bda62b5 100644
--- a/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/testing/CheatSheet.kt
+++ b/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/testing/CheatSheet.kt
@@ -20,6 +20,9 @@
package androidx.compose.integration.docs.testing
import android.os.Build
+import android.view.KeyEvent as AndroidKeyEvent
+import android.view.KeyEvent.ACTION_DOWN as ActionDown
+import android.view.KeyEvent.KEYCODE_A as KeyCodeA
import androidx.activity.ComponentActivity
import androidx.annotation.RequiresApi
import androidx.compose.runtime.Composable
@@ -143,9 +146,6 @@
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
-import android.view.KeyEvent as AndroidKeyEvent
-import android.view.KeyEvent.ACTION_DOWN as ActionDown
-import android.view.KeyEvent.KEYCODE_A as KeyCodeA
/**
* This file lets DevRel track changes to snippets present in
diff --git a/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/theming/Custom.kt b/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/theming/Custom.kt
deleted file mode 100644
index beb52bb5..0000000
--- a/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/theming/Custom.kt
+++ /dev/null
@@ -1,364 +0,0 @@
-// ktlint-disable indent https://github.com/pinterest/ktlint/issues/967
-/*
- * Copyright 2021 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
- *
- * http://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.
- */
-
-// Ignore lint warnings in documentation snippets
-@file:Suppress(
- "unused", "UNUSED_PARAMETER", "UNUSED_VARIABLE", "RemoveEmptyParenthesesFromLambdaCall"
-)
-
-package androidx.compose.integration.docs.theming
-
-import androidx.compose.foundation.layout.RowScope
-import androidx.compose.foundation.shape.RoundedCornerShape
-import androidx.compose.foundation.shape.ZeroCornerSize
-import androidx.compose.material.Button
-import androidx.compose.material.ButtonDefaults
-import androidx.compose.material.Colors
-import androidx.compose.material.ContentAlpha
-import androidx.compose.material.MaterialTheme
-import androidx.compose.material.ProvideTextStyle
-import androidx.compose.material.Shapes
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.CompositionLocalProvider
-import androidx.compose.runtime.Immutable
-import androidx.compose.runtime.staticCompositionLocalOf
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.Shape
-import androidx.compose.ui.graphics.compositeOver
-import androidx.compose.ui.text.TextStyle
-import androidx.compose.ui.unit.Dp
-import androidx.compose.ui.unit.dp
-import androidx.compose.ui.unit.sp
-
-/**
- * This file lets DevRel track changes to snippets present in
- * https://developer.android.com/jetpack/compose/themes/custom
- *
- * No action required if it's modified.
- */
-
-private object CustomSnippet1 {
- // Use with MaterialTheme.colors.snackbarAction
- val Colors.snackbarAction: Color
- get() = if (isLight) Red300 else Red700
-
- // Use with MaterialTheme.typography.textFieldInput
- val Typography.textFieldInput: TextStyle
- get() = TextStyle(/* ... */)
-
- // Use with MaterialTheme.shapes.card
- val Shapes.card: Shape
- get() = RoundedCornerShape(size = 20.dp)
-}
-
-private object CustomSnippet234 {
- // Start snippet 2
- @Immutable
- data class ExtendedColors(
- val tertiary: Color,
- val onTertiary: Color
- )
-
- val LocalExtendedColors = staticCompositionLocalOf {
- ExtendedColors(
- tertiary = Color.Unspecified,
- onTertiary = Color.Unspecified
- )
- }
-
- @Composable
- fun ExtendedTheme(
- /* ... */
- content: @Composable () -> Unit
- ) {
- val extendedColors = ExtendedColors(
- tertiary = Color(0xFFA8EFF0),
- onTertiary = Color(0xFF002021)
- )
- CompositionLocalProvider(LocalExtendedColors provides extendedColors) {
- MaterialTheme(
- /* colors = ..., typography = ..., shapes = ... */
- content = content
- )
- }
- }
-
- // Use with eg. ExtendedTheme.colors.tertiary
- object ExtendedTheme {
- val colors: ExtendedColors
- @Composable
- get() = LocalExtendedColors.current
- }
- // End snippet 2
-
- // Start snippet 3
- @Composable
- fun ExtendedButton(
- onClick: () -> Unit,
- modifier: Modifier = Modifier,
- content: @Composable RowScope.() -> Unit
- ) {
- Button(
- colors = ButtonDefaults.buttonColors(
- backgroundColor = ExtendedTheme.colors.tertiary,
- contentColor = ExtendedTheme.colors.onTertiary
- /* Other colors use values from MaterialTheme */
- ),
- onClick = onClick,
- modifier = modifier,
- content = content
- )
- }
- // End snippet 3
-
- // Start snippet 4
- @Composable
- fun ExtendedApp() {
- ExtendedTheme {
- /*...*/
- ExtendedButton(onClick = { /* ... */ }) {
- /* ... */
- }
- }
- }
- // End snippet 4
-}
-
-private object CustomSnippet567 {
- // Start snippet 5
- @Immutable
- data class ReplacementTypography(
- val body: TextStyle,
- val title: TextStyle
- )
-
- @Immutable
- data class ReplacementShapes(
- val component: Shape,
- val surface: Shape
- )
-
- val LocalReplacementTypography = staticCompositionLocalOf {
- ReplacementTypography(
- body = TextStyle.Default,
- title = TextStyle.Default
- )
- }
- val LocalReplacementShapes = staticCompositionLocalOf {
- ReplacementShapes(
- component = RoundedCornerShape(ZeroCornerSize),
- surface = RoundedCornerShape(ZeroCornerSize)
- )
- }
-
- @Composable
- fun ReplacementTheme(
- /* ... */
- content: @Composable () -> Unit
- ) {
- val replacementTypography = ReplacementTypography(
- body = TextStyle(fontSize = 16.sp),
- title = TextStyle(fontSize = 32.sp)
- )
- val replacementShapes = ReplacementShapes(
- component = RoundedCornerShape(percent = 50),
- surface = RoundedCornerShape(size = 40.dp)
- )
- CompositionLocalProvider(
- LocalReplacementTypography provides replacementTypography,
- LocalReplacementShapes provides replacementShapes
- ) {
- MaterialTheme(
- /* colors = ... */
- content = content
- )
- }
- }
-
- // Use with eg. ReplacementTheme.typography.body
- object ReplacementTheme {
- val typography: ReplacementTypography
- @Composable
- get() = LocalReplacementTypography.current
- val shapes: ReplacementShapes
- @Composable
- get() = LocalReplacementShapes.current
- }
- // End snippet 5
-
- // Start snippet 6
- @Composable
- fun ReplacementButton(
- onClick: () -> Unit,
- modifier: Modifier = Modifier,
- content: @Composable RowScope.() -> Unit
- ) {
- Button(
- shape = ReplacementTheme.shapes.component,
- onClick = onClick,
- modifier = modifier,
- content = {
- ProvideTextStyle(
- value = ReplacementTheme.typography.body
- ) {
- content()
- }
- }
- )
- }
- // End snippet 6
-
- // Start snippet 7
- @Composable
- fun ReplacementApp() {
- ReplacementTheme {
- /*...*/
- ReplacementButton(onClick = { /* ... */ }) {
- /* ... */
- }
- }
- }
- // End snippet 7
-}
-
-private object CustomSnippet89 {
- // Start snippet 8
- @Immutable
- data class CustomColors(
- val content: Color,
- val component: Color,
- val background: List<Color>
- )
-
- @Immutable
- data class CustomTypography(
- val body: TextStyle,
- val title: TextStyle
- )
-
- @Immutable
- data class CustomElevation(
- val default: Dp,
- val pressed: Dp
- )
-
- val LocalCustomColors = staticCompositionLocalOf {
- CustomColors(
- content = Color.Unspecified,
- component = Color.Unspecified,
- background = emptyList()
- )
- }
- val LocalCustomTypography = staticCompositionLocalOf {
- CustomTypography(
- body = TextStyle.Default,
- title = TextStyle.Default
- )
- }
- val LocalCustomElevation = staticCompositionLocalOf {
- CustomElevation(
- default = Dp.Unspecified,
- pressed = Dp.Unspecified
- )
- }
-
- @Composable
- fun CustomTheme(
- /* ... */
- content: @Composable () -> Unit
- ) {
- val customColors = CustomColors(
- content = Color(0xFFDD0D3C),
- component = Color(0xFFC20029),
- background = listOf(Color.White, Color(0xFFF8BBD0))
- )
- val customTypography = CustomTypography(
- body = TextStyle(fontSize = 16.sp),
- title = TextStyle(fontSize = 32.sp)
- )
- val customElevation = CustomElevation(
- default = 4.dp,
- pressed = 8.dp
- )
- CompositionLocalProvider(
- LocalCustomColors provides customColors,
- LocalCustomTypography provides customTypography,
- LocalCustomElevation provides customElevation,
- content = content
- )
- }
-
- // Use with eg. CustomTheme.elevation.small
- object CustomTheme {
- val colors: CustomColors
- @Composable
- get() = LocalCustomColors.current
- val typography: CustomTypography
- @Composable
- get() = LocalCustomTypography.current
- val elevation: CustomElevation
- @Composable
- get() = LocalCustomElevation.current
- }
- // End snippet 8
-
- // Start snippet 9
- @Composable
- fun CustomButton(
- onClick: () -> Unit,
- modifier: Modifier = Modifier,
- content: @Composable RowScope.() -> Unit
- ) {
- Button(
- colors = ButtonDefaults.buttonColors(
- backgroundColor = CustomTheme.colors.component,
- contentColor = CustomTheme.colors.content,
- disabledBackgroundColor = CustomTheme.colors.content
- .copy(alpha = 0.12f)
- .compositeOver(CustomTheme.colors.component),
- disabledContentColor = CustomTheme.colors.content
- .copy(alpha = ContentAlpha.disabled)
- ),
- shape = ButtonShape,
- elevation = ButtonDefaults.elevation(
- defaultElevation = CustomTheme.elevation.default,
- pressedElevation = CustomTheme.elevation.pressed
- /* disabledElevation = 0.dp */
- ),
- onClick = onClick,
- modifier = modifier,
- content = {
- ProvideTextStyle(
- value = CustomTheme.typography.body
- ) {
- content()
- }
- }
- )
- }
-
- val ButtonShape = RoundedCornerShape(percent = 50)
- // End snippet 9
-}
-
-/*
-Fakes needed for snippets to build:
- */
-
-private val Red300 = Color(0xffff0000)
-private val Red700 = Color(0xffff0000)
diff --git a/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/theming/Material.kt b/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/theming/Material.kt
deleted file mode 100644
index 8885249..0000000
--- a/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/theming/Material.kt
+++ /dev/null
@@ -1,448 +0,0 @@
-// ktlint-disable indent https://github.com/pinterest/ktlint/issues/967
-/*
- * Copyright 2021 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
- *
- * http://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.
- */
-
-// Ignore lint warnings in documentation snippets
-@file:Suppress(
- "unused", "UNUSED_PARAMETER", "UNUSED_VARIABLE", "RemoveEmptyParenthesesFromLambdaCall"
-)
-
-package androidx.compose.integration.docs.theming
-
-import androidx.compose.foundation.isSystemInDarkTheme
-import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.RowScope
-import androidx.compose.foundation.shape.CutCornerShape
-import androidx.compose.foundation.shape.RoundedCornerShape
-import androidx.compose.material.Button
-import androidx.compose.material.ButtonDefaults
-import androidx.compose.material.ContentAlpha
-import androidx.compose.material.Icon
-import androidx.compose.material.LocalContentAlpha
-import androidx.compose.material.LocalElevationOverlay
-import androidx.compose.material.MaterialTheme
-import androidx.compose.material.Shapes
-import androidx.compose.material.Surface
-import androidx.compose.material.Text
-import androidx.compose.material.TopAppBar
-import androidx.compose.material.Typography
-import androidx.compose.material.contentColorFor
-import androidx.compose.material.darkColors
-import androidx.compose.material.lightColors
-import androidx.compose.material.primarySurface
-import androidx.compose.material.ripple.LocalRippleTheme
-import androidx.compose.material.ripple.RippleTheme
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.CompositionLocalProvider
-import androidx.compose.runtime.Immutable
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.compositeOver
-import androidx.compose.ui.res.painterResource
-import androidx.compose.ui.text.TextStyle
-import androidx.compose.ui.text.font.Font
-import androidx.compose.ui.text.font.FontFamily
-import androidx.compose.ui.text.font.FontWeight
-import androidx.compose.ui.unit.dp
-import androidx.compose.ui.unit.sp
-
-/**
- * This file lets DevRel track changes to snippets present in
- * https://developer.android.com/jetpack/compose/themes/material
- *
- * No action required if it's modified.
- */
-
-private object MaterialSnippet1 {
- /* Can't be compiled. See snippet below for changes.
- MaterialTheme(
- colors = ...,
- typography = ...,
- shapes = ...
- ) {
- // app content
- }
- */
- @Composable
- fun MaterialTheming() {
- MaterialTheme(
- colors = MaterialTheme.colors,
- typography = MaterialTheme.typography,
- shapes = MaterialTheme.shapes
- ) { }
- }
-}
-
-private object MaterialSnippet2 {
- val Red = Color(0xffff0000)
- val Blue = Color(red = 0f, green = 0f, blue = 1f)
-}
-
-private object MaterialSnippet3 {
- private val Yellow200 = Color(0xffffeb46)
- private val Blue200 = Color(0xff91a4fc)
- // ...
-
- private val DarkColors = darkColors(
- primary = Yellow200,
- secondary = Blue200,
- // ...
- )
- private val LightColors = lightColors(
- primary = Yellow500,
- primaryVariant = Yellow400,
- secondary = Blue700,
- // ...
- )
-}
-
-private object MaterialSnippet4 {
- @Composable
- fun MaterialTheming() {
- MaterialTheme(
- colors = if (darkTheme) DarkColors else LightColors
- ) {
- // app content
- }
- }
-}
-
-private object MaterialSnippet5 {
- @Composable
- fun MaterialTheming() {
- Text(
- text = "Hello theming",
- color = MaterialTheme.colors.primary
- )
- }
-}
-
-private object MaterialSnippet6 {
- @Composable
- fun MaterialTheming() {
- /* This snippet comes from the API. It needs to be updated if the snippet below is modified:
-Surface(
- color: Color = MaterialTheme.colors.surface,
- contentColor: Color = contentColorFor(color),
- ...
-
-TopAppBar(
- backgroundColor: Color = MaterialTheme.colors.primarySurface,
- contentColor: Color = contentColorFor(backgroundColor),
- ...
- */
- Column {
- Surface(
- color = MaterialTheme.colors.surface,
- contentColor = contentColorFor(MaterialTheme.colors.surface)
- ) {}
- TopAppBar(
- backgroundColor = MaterialTheme.colors.primarySurface,
- contentColor = contentColorFor(MaterialTheme.colors.primarySurface)
- ) {}
- }
- }
-}
-
-private object MaterialSnippet7 {
- @Composable
- fun MaterialTheming() {
- // By default, both Icon & Text use the combination of LocalContentColor &
- // LocalContentAlpha. De-emphasize content by setting content alpha
- CompositionLocalProvider(LocalContentAlpha provides ContentAlpha.medium) {
- Text(/*...*/)
- }
- CompositionLocalProvider(LocalContentAlpha provides ContentAlpha.disabled) {
- Icon(/*...*/)
- Text(/*...*/)
- }
- }
- @Composable private fun Icon() { }
- @Composable private fun Text() { }
-}
-
-private object MaterialSnippet8 {
- @Composable
- fun MyTheme(
- darkTheme: Boolean = isSystemInDarkTheme(),
- content: @Composable () -> Unit
- ) {
- MaterialTheme(
- colors = if (darkTheme) DarkColors else LightColors,
- /*...*/
- content = content
- )
- }
-}
-
-private object MaterialSnippet9 {
- @Composable
- fun MaterialTheming() {
- val isLightTheme = MaterialTheme.colors.isLight
- Icon(
- painterResource(
- id = if (isLightTheme) {
- R.drawable.ic_sun_24dp
- } else {
- R.drawable.ic_moon_24dp
- }
- ),
- contentDescription = "Theme"
- )
- }
-}
-
-private object MaterialSnippet10 {
- @Composable
- fun MaterialTheming() {
- Surface(
- elevation = 2.dp,
- color = MaterialTheme.colors.surface, // color will be adjusted for elevation
- /*...*/
- ) { /*...*/ }
- }
-}
-
-private object MaterialSnippet11 {
- @Composable
- fun MaterialTheming() {
- // Elevation overlays
- // Implemented in Surface (and any components that use it)
- val color = MaterialTheme.colors.surface
- val elevation = 4.dp
- val overlaidColor = LocalElevationOverlay.current?.apply(
- color, elevation
- )
- }
-}
-
-private object MaterialSnippet12 {
- @Composable
- fun MaterialTheming() {
- MyTheme {
- CompositionLocalProvider(LocalElevationOverlay provides null) {
- // Content without elevation overlays
- }
- }
- }
-}
-
-private object MaterialSnippet13 {
- @Composable
- fun MaterialTheming() {
- Surface(
- // Switches between primary in light theme and surface in dark theme
- color = MaterialTheme.colors.primarySurface,
- /*...*/
- ) { /*...*/ }
- }
-}
-
-private object MaterialSnippet14 {
- @Composable
- fun MaterialTheming() {
- val Rubik = FontFamily(
- Font(R.font.rubik_regular),
- Font(R.font.rubik_medium, FontWeight.W500),
- Font(R.font.rubik_bold, FontWeight.Bold)
- )
-
- val MyTypography = Typography(
- h1 = TextStyle(
- fontFamily = Rubik,
- fontWeight = FontWeight.W300,
- fontSize = 96.sp
- ),
- body1 = TextStyle(
- fontFamily = Rubik,
- fontWeight = FontWeight.W600,
- fontSize = 16.sp
- )
- /*...*/
- )
- MaterialTheme(typography = MyTypography, /*...*/)
- }
- @Composable private fun MaterialTheme(typography: Typography) { }
-}
-
-private object MaterialSnippet15 {
- @Composable
- fun MaterialTheming() {
- val typography = Typography(defaultFontFamily = Rubik)
- MaterialTheme(typography = typography, /*...*/)
- }
- @Composable private fun MaterialTheme(typography: Typography) { }
-}
-
-private object MaterialSnippet16 {
- @Composable
- fun MaterialTheming() {
- Text(
- text = "Subtitle2 styled",
- style = MaterialTheme.typography.subtitle2
- )
- }
-}
-
-private object MaterialSnippet17 {
- @Composable
- fun MaterialTheming() {
- val Shapes = Shapes(
- small = RoundedCornerShape(percent = 50),
- medium = RoundedCornerShape(0f),
- large = CutCornerShape(
- topStart = 16.dp,
- topEnd = 0.dp,
- bottomEnd = 0.dp,
- bottomStart = 16.dp
- )
- )
-
- MaterialTheme(shapes = Shapes, /*...*/)
- }
- @Composable private fun MaterialTheme(shapes: Shapes) { }
-}
-
-private object MaterialSnippet18 {
- @Composable
- fun MaterialTheming() {
- Surface(
- shape = MaterialTheme.shapes.medium, /*...*/
- ) {
- /*...*/
- }
- }
-}
-
-private object MaterialSnippet19 {
- @Composable
- fun MyButton(
- onClick: () -> Unit,
- modifier: Modifier = Modifier,
- content: @Composable RowScope.() -> Unit
- ) {
- Button(
- colors = ButtonDefaults.buttonColors(
- backgroundColor = MaterialTheme.colors.secondary
- ),
- onClick = onClick,
- modifier = modifier,
- content = content
- )
- }
-}
-
-private object MaterialSnippet20 {
- @Composable
- fun DetailsScreen(/* ... */) {
- PinkTheme {
- // other content
- RelatedSection()
- }
- }
-
- @Composable
- fun RelatedSection(/* ... */) {
- BlueTheme {
- // content
- }
- }
-}
-
-private object MaterialSnippet21 {
- @Composable
- fun MaterialTheming() {
- Button(
- onClick = { /* ... */ },
- enabled = true,
- // Custom colors for different states
- colors = ButtonDefaults.buttonColors(
- backgroundColor = MaterialTheme.colors.secondary,
- disabledBackgroundColor = MaterialTheme.colors.onBackground
- .copy(alpha = 0.2f)
- .compositeOver(MaterialTheme.colors.background)
- // Also contentColor and disabledContentColor
- ),
- // Custom elevation for different states
- elevation = ButtonDefaults.elevation(
- defaultElevation = 8.dp,
- disabledElevation = 2.dp,
- // Also pressedElevation
- )
- ) { /* ... */ }
- }
-}
-
-private object MaterialSnippet22 {
- @Composable
- fun MyApp() {
- MaterialTheme {
- CompositionLocalProvider(
- LocalRippleTheme provides SecondaryRippleTheme
- ) {
- // App content
- }
- }
- }
-
- @Immutable
- private object SecondaryRippleTheme : RippleTheme {
- @Composable
- override fun defaultColor() = RippleTheme.defaultRippleColor(
- contentColor = MaterialTheme.colors.secondary,
- lightTheme = MaterialTheme.colors.isLight
- )
-
- @Composable
- override fun rippleAlpha() = RippleTheme.defaultRippleAlpha(
- contentColor = MaterialTheme.colors.secondary,
- lightTheme = MaterialTheme.colors.isLight
- )
- }
-}
-
-/*
-Fakes needed for snippets to build:
- */
-
-private val Yellow500 = Color(0xffffeb46)
-private val Yellow400 = Color(0xffffeb46)
-private val Blue700 = Color(0xffffeb46)
-
-private const val darkTheme = true
-private val DarkColors = darkColors()
-private val LightColors = lightColors()
-
-@Composable private fun MyTheme(content: @Composable () -> Unit) {}
-@Composable private fun PinkTheme(content: @Composable () -> Unit) {}
-@Composable private fun BlueTheme(content: @Composable () -> Unit) {}
-
-@Suppress("ClassName")
-internal object R {
- object drawable {
- const val ic_sun_24dp = 1
- const val ic_moon_24dp = 1
- }
- object font {
- const val rubik_regular = 1
- const val rubik_medium = 1
- const val rubik_bold = 1
- const val karla_regular = 1
- const val karla_bold = 1
- }
-}
-
-private val Rubik = FontFamily()
diff --git a/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/theming/Material3.kt b/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/theming/Material3.kt
deleted file mode 100644
index d10cdb2..0000000
--- a/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/theming/Material3.kt
+++ /dev/null
@@ -1,193 +0,0 @@
-// ktlint-disable indent https://github.com/pinterest/ktlint/issues/967
-/*
- * Copyright 2021 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
- *
- * http://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.
- */
-
-// Ignore lint warnings in documentation snippets
-@file:Suppress(
- "unused", "UNUSED_PARAMETER", "UNUSED_VARIABLE", "RemoveEmptyParenthesesFromLambdaCall"
-)
-
-package androidx.compose.integration.docs.theming
-
-import android.annotation.SuppressLint
-import android.os.Build
-import androidx.compose.foundation.isSystemInDarkTheme
-import androidx.compose.material3.MaterialTheme
-import androidx.compose.material3.Surface
-import androidx.compose.material3.Text
-import androidx.compose.material3.Typography
-import androidx.compose.material3.darkColorScheme
-import androidx.compose.material3.dynamicDarkColorScheme
-import androidx.compose.material3.dynamicLightColorScheme
-import androidx.compose.material3.lightColorScheme
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.platform.LocalContext
-import androidx.compose.ui.text.TextStyle
-import androidx.compose.ui.text.font.Font
-import androidx.compose.ui.text.font.FontFamily
-import androidx.compose.ui.text.font.FontWeight
-import androidx.compose.ui.unit.dp
-import androidx.compose.ui.unit.sp
-
-/**
- * This file lets DevRel track changes to snippets present in
- * https://developer.android.com/jetpack/compose/themes/material#material3
- *
- * No action required if it's modified.
- */
-
-private object Material3Snippet1 {
- /* Can't be compiled. See snippet below for changes.
- MaterialTheme(
- colorScheme = …,
- typography = …
- // Updates to shapes coming soon
- ) {
- // M3 app content
- }
- */
- @Composable
- fun MaterialTheming() {
- MaterialTheme(
- colorScheme = MaterialTheme.colorScheme,
- typography = MaterialTheme.typography
- ) { }
- }
-}
-
-private object Material3Snippet2 {
- private val Blue40 = Color(0xff1e40ff)
- private val DarkBlue40 = Color(0xff3e41f4)
- private val Yellow40 = Color(0xff7d5700)
- // Remaining colors from tonal palettes
-
- private val LightColorScheme = lightColorScheme(
- primary = Blue40,
- secondary = DarkBlue40,
- tertiary = Yellow40,
- // error, primaryContainer, onSecondary, etc.
- )
- private val DarkColorScheme = darkColorScheme(
- primary = Blue80,
- secondary = DarkBlue80,
- tertiary = Yellow80,
- // error, primaryContainer, onSecondary, etc.
- )
-}
-
-private object Material3Snippet3 {
- @Composable
- fun Material3Theming() {
- val darkTheme = isSystemInDarkTheme()
- MaterialTheme(
- colorScheme = if (darkTheme) DarkColorScheme else LightColorScheme
- ) {
- // M3 app content
- }
- }
-}
-
-private object Material3Snippet4 {
- @SuppressLint("NewApi")
- @Composable
- fun Material3Theming() {
- // Dynamic color is available on Android 12+
- val dynamicColor = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S
- val colorScheme = when {
- dynamicColor && darkTheme -> dynamicDarkColorScheme(LocalContext.current)
- dynamicColor && !darkTheme -> dynamicLightColorScheme(LocalContext.current)
- darkTheme -> DarkColorScheme
- else -> LightColorScheme
- }
- }
-}
-
-private object Material3Snippet5 {
- @Composable
- fun Material3Theming() {
- Text(
- text = "Hello M3 theming",
- color = MaterialTheme.colorScheme.tertiary
- )
- }
-}
-
-private object Material3Snippet6 {
- val KarlaFontFamily = FontFamily(
- Font(R.font.karla_regular),
- Font(R.font.karla_bold, FontWeight.Bold)
- )
-
- val AppTypography = Typography(
- bodyLarge = TextStyle(
- fontFamily = KarlaFontFamily,
- fontWeight = FontWeight.Normal,
- fontSize = 16.sp,
- lineHeight = 24.sp,
- letterSpacing = 0.15.sp
- ),
- // titleMedium, labelSmall, etc.
- )
-}
-
-private object Material3Snippet7 {
- @Composable
- fun Material3Theming() {
- MaterialTheme(
- typography = AppTypography
- ) {
- // M3 app content
- }
- }
-}
-
-private object Material3Snippet8 {
- @Composable
- fun Material3Theming() {
- Text(
- text = "Hello M3 theming",
- style = MaterialTheme.typography.bodyLarge
- )
- }
-}
-
-private object Material3Snippet9 {
- @Composable
- fun Material3Theming() {
- Surface(
- tonalElevation = 16.dp,
- shadowElevation = 16.dp
- ) {
- // Surface content
- }
- }
-}
-
-/*
-Fakes needed for snippets to build:
- */
-
-private val Blue80 = Color(0xff1e40ff)
-private val DarkBlue80 = Color(0xff3e41f4)
-private val Yellow80 = Color(0xff7d5700)
-
-private val DarkColorScheme = darkColorScheme()
-private val LightColorScheme = lightColorScheme()
-
-private const val darkTheme = true
-
-private val AppTypography = Typography()
diff --git a/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/tutorial/Tutorial.kt b/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/tutorial/Tutorial.kt
index da8c1bc..4f9fd87 100644
--- a/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/tutorial/Tutorial.kt
+++ b/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/tutorial/Tutorial.kt
@@ -24,8 +24,8 @@
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
diff --git a/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/tutorial/Tutorial.kt b/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/tutorial/Tutorial.kt
index b0b7e65..b17b824 100644
--- a/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/tutorial/Tutorial.kt
+++ b/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/tutorial/Tutorial.kt
@@ -38,8 +38,8 @@
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.CircleShape
-import androidx.compose.integration.tutorial.Lesson2_Layouts.Snippet4.MessageCard
import androidx.compose.integration.tutorial.Lesson2_Layouts.Snippet1.Message
+import androidx.compose.integration.tutorial.Lesson2_Layouts.Snippet4.MessageCard
import androidx.compose.integration.tutorial.Lesson4_ListsAnimations.Snippet1.Conversation
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Surface
diff --git a/compose/integration-tests/macrobenchmark-target/src/main/AndroidManifest.xml b/compose/integration-tests/macrobenchmark-target/src/main/AndroidManifest.xml
index 0b745aa..39a5d41 100644
--- a/compose/integration-tests/macrobenchmark-target/src/main/AndroidManifest.xml
+++ b/compose/integration-tests/macrobenchmark-target/src/main/AndroidManifest.xml
@@ -28,16 +28,19 @@
<profileable android:shell="true"/>
<!--
- Activities need to be exported so the macrobenchmark can discover them
- under the new package visibility changes for Android 11.
+ Activities need to be exported so the macrobenchmark can discover them.
+
+ Feel free to add the launcher intent filter to enable easier profiling,
+ just be sure to add a consistent label.
-->
<activity
android:name=".TrivialStartupActivity"
+ android:label="C Trivial"
android:exported="true">
- <!-- <intent-filter>-->
- <!-- <action android:name="android.intent.action.MAIN" />-->
- <!-- <category android:name="android.intent.category.LAUNCHER" />-->
- <!-- </intent-filter>-->
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
<intent-filter>
<action android:name="androidx.compose.integration.macrobenchmark.target.TRIVIAL_STARTUP_ACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
@@ -54,10 +57,6 @@
<activity
android:name=".IoSettingsActivity"
android:exported="true">
- <!-- <intent-filter>-->
- <!-- <action android:name="android.intent.action.MAIN" />-->
- <!-- <category android:name="android.intent.category.LAUNCHER" />-->
- <!-- </intent-filter>-->
<intent-filter>
<action android:name="androidx.compose.integration.macrobenchmark.target.IO_SETTINGS_ACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
@@ -65,8 +64,13 @@
</activity>
<activity
android:name=".LazyColumnActivity"
+ android:label="C LazyColumn"
android:exported="true">
<intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ <intent-filter>
<action android:name="androidx.compose.integration.macrobenchmark.target.LAZY_COLUMN_ACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
diff --git a/compose/integration-tests/material-catalog/src/main/java/androidx/compose/material/catalog/NavGraph.kt b/compose/integration-tests/material-catalog/src/main/java/androidx/compose/material/catalog/NavGraph.kt
index 21bee2a..22f5db5 100644
--- a/compose/integration-tests/material-catalog/src/main/java/androidx/compose/material/catalog/NavGraph.kt
+++ b/compose/integration-tests/material-catalog/src/main/java/androidx/compose/material/catalog/NavGraph.kt
@@ -18,8 +18,8 @@
import androidx.compose.material.catalog.library.MaterialCatalogApp
import androidx.compose.material.catalog.library.MaterialRoute
-import androidx.compose.material.catalog.model.MaterialSpecification
import androidx.compose.material.catalog.model.Material3Specification
+import androidx.compose.material.catalog.model.MaterialSpecification
import androidx.compose.material.catalog.model.Specifications
import androidx.compose.material.catalog.ui.specification.Specification
import androidx.compose.material3.catalog.library.Material3CatalogApp
diff --git a/compose/lint/OWNERS b/compose/lint/OWNERS
new file mode 100644
index 0000000..a973ce0
--- /dev/null
+++ b/compose/lint/OWNERS
@@ -0,0 +1 @@
[email protected]
\ No newline at end of file
diff --git a/compose/lint/common-test/src/main/java/androidx/compose/lint/test/Stubs.kt b/compose/lint/common-test/src/main/java/androidx/compose/lint/test/Stubs.kt
index 47b7cad..1d2a07a 100644
--- a/compose/lint/common-test/src/main/java/androidx/compose/lint/test/Stubs.kt
+++ b/compose/lint/common-test/src/main/java/androidx/compose/lint/test/Stubs.kt
@@ -21,8 +21,8 @@
import com.android.tools.lint.checks.infrastructure.LintDetectorTest.kotlin
import com.android.tools.lint.checks.infrastructure.TestFile
import com.android.tools.lint.checks.infrastructure.TestFiles.bytecode
-import org.intellij.lang.annotations.Language
import java.util.Locale
+import org.intellij.lang.annotations.Language
/**
* Common Compose-related bytecode lint stubs used for testing
diff --git a/compose/lint/internal-lint-checks/src/test/java/androidx/compose/lint/UnnecessaryLambdaCreationDetectorTest.kt b/compose/lint/internal-lint-checks/src/test/java/androidx/compose/lint/UnnecessaryLambdaCreationDetectorTest.kt
index e8aa463..6c011af 100644
--- a/compose/lint/internal-lint-checks/src/test/java/androidx/compose/lint/UnnecessaryLambdaCreationDetectorTest.kt
+++ b/compose/lint/internal-lint-checks/src/test/java/androidx/compose/lint/UnnecessaryLambdaCreationDetectorTest.kt
@@ -20,15 +20,15 @@
import androidx.compose.lint.test.Stubs
import androidx.compose.lint.test.kotlinAndBytecodeStub
-import com.android.tools.lint.checks.infrastructure.TestLintResult
-import org.junit.Test
-import org.junit.runner.RunWith
import com.android.tools.lint.checks.infrastructure.LintDetectorTest
import com.android.tools.lint.checks.infrastructure.TestFile
+import com.android.tools.lint.checks.infrastructure.TestLintResult
import com.android.tools.lint.checks.infrastructure.TestMode
import com.android.tools.lint.detector.api.Detector
import com.android.tools.lint.detector.api.Issue
import org.intellij.lang.annotations.Language
+import org.junit.Test
+import org.junit.runner.RunWith
import org.junit.runners.Parameterized
/* ktlint-disable max-line-length */
diff --git a/compose/material/material-icons-core/samples/build.gradle b/compose/material/material-icons-core/samples/build.gradle
index 040d910..0977215 100644
--- a/compose/material/material-icons-core/samples/build.gradle
+++ b/compose/material/material-icons-core/samples/build.gradle
@@ -36,7 +36,7 @@
}
androidx {
- name = "AndroidX Compose UI Core Material Icons Samples"
+ name = "Compose UI Core Material Icons Samples"
type = LibraryType.SAMPLES
inceptionYear = "2019"
description = "Contains the sample code for the Androidx Compose UI Core Material Icons"
diff --git a/compose/material/material-icons-core/src/commonMain/kotlin/androidx/compose/material/icons/Icons.kt b/compose/material/material-icons-core/src/commonMain/kotlin/androidx/compose/material/icons/Icons.kt
index 3031458..813f3ad 100644
--- a/compose/material/material-icons-core/src/commonMain/kotlin/androidx/compose/material/icons/Icons.kt
+++ b/compose/material/material-icons-core/src/commonMain/kotlin/androidx/compose/material/icons/Icons.kt
@@ -27,8 +27,8 @@
import androidx.compose.ui.graphics.StrokeCap
import androidx.compose.ui.graphics.StrokeJoin
import androidx.compose.ui.graphics.vector.DefaultFillType
-import androidx.compose.ui.graphics.vector.PathBuilder
import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathBuilder
import androidx.compose.ui.graphics.vector.path
import androidx.compose.ui.unit.dp
diff --git a/compose/material/material-lint/src/main/java/androidx/compose/material/lint/ColorsDetector.kt b/compose/material/material-lint/src/main/java/androidx/compose/material/lint/ColorsDetector.kt
index 0e1a911..cedd663 100644
--- a/compose/material/material-lint/src/main/java/androidx/compose/material/lint/ColorsDetector.kt
+++ b/compose/material/material-lint/src/main/java/androidx/compose/material/lint/ColorsDetector.kt
@@ -33,6 +33,7 @@
import com.android.tools.lint.detector.api.UastLintUtils
import com.intellij.psi.PsiParameter
import com.intellij.psi.PsiVariable
+import java.util.EnumSet
import org.jetbrains.kotlin.asJava.elements.KtLightParameter
import org.jetbrains.uast.UCallExpression
import org.jetbrains.uast.UElement
@@ -40,7 +41,6 @@
import org.jetbrains.uast.toUElement
import org.jetbrains.uast.tryResolve
import org.jetbrains.uast.util.isConstructorCall
-import java.util.EnumSet
/**
* [Detector] that checks `Colors` definitions for correctness.
diff --git a/compose/material/material-ripple/src/androidMain/kotlin/androidx/compose/material/ripple/Ripple.android.kt b/compose/material/material-ripple/src/androidMain/kotlin/androidx/compose/material/ripple/Ripple.android.kt
index 2c574e4..928b4ff 100644
--- a/compose/material/material-ripple/src/androidMain/kotlin/androidx/compose/material/ripple/Ripple.android.kt
+++ b/compose/material/material-ripple/src/androidMain/kotlin/androidx/compose/material/ripple/Ripple.android.kt
@@ -37,8 +37,8 @@
import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.isUnspecified
-import kotlinx.coroutines.CoroutineScope
import kotlin.math.roundToInt
+import kotlinx.coroutines.CoroutineScope
/**
* Android specific Ripple implementation that uses a [RippleDrawable] under the hood, which allows
diff --git a/compose/material/material-ripple/src/commonMain/kotlin/androidx/compose/material/ripple/RippleAnimation.kt b/compose/material/material-ripple/src/commonMain/kotlin/androidx/compose/material/ripple/RippleAnimation.kt
index 6005049..b4aa27b 100644
--- a/compose/material/material-ripple/src/commonMain/kotlin/androidx/compose/material/ripple/RippleAnimation.kt
+++ b/compose/material/material-ripple/src/commonMain/kotlin/androidx/compose/material/ripple/RippleAnimation.kt
@@ -33,10 +33,10 @@
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.isUnspecified
import androidx.compose.ui.util.lerp
+import kotlin.math.max
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.launch
-import kotlin.math.max
/**
* [RippleAnimation]s are drawn as part of [Ripple] as a visual indicator for an
diff --git a/compose/material/material-ripple/src/test/kotlin/androidx/compose/material/ripple/RippleAnimationTest.kt b/compose/material/material-ripple/src/test/kotlin/androidx/compose/material/ripple/RippleAnimationTest.kt
index 31838e1..2bb2aec 100644
--- a/compose/material/material-ripple/src/test/kotlin/androidx/compose/material/ripple/RippleAnimationTest.kt
+++ b/compose/material/material-ripple/src/test/kotlin/androidx/compose/material/ripple/RippleAnimationTest.kt
@@ -19,10 +19,10 @@
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.dp
import com.google.common.truth.Truth.assertThat
+import kotlin.math.sqrt
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import kotlin.math.sqrt
@RunWith(JUnit4::class)
class RippleAnimationTest {
diff --git a/compose/material/material/api/current.txt b/compose/material/material/api/current.txt
index c9c5c53..0660033 100644
--- a/compose/material/material/api/current.txt
+++ b/compose/material/material/api/current.txt
@@ -2,13 +2,13 @@
package androidx.compose.material {
public final class AndroidAlertDialog_androidKt {
- method @androidx.compose.runtime.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, kotlin.jvm.functions.Function0<kotlin.Unit> confirmButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? dismissButton, optional kotlin.jvm.functions.Function0<kotlin.Unit>? title, optional kotlin.jvm.functions.Function0<kotlin.Unit>? text, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional androidx.compose.ui.window.DialogProperties properties);
method @androidx.compose.runtime.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, kotlin.jvm.functions.Function0<kotlin.Unit> buttons, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? title, optional kotlin.jvm.functions.Function0<kotlin.Unit>? text, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional androidx.compose.ui.window.DialogProperties properties);
+ method @androidx.compose.runtime.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, kotlin.jvm.functions.Function0<kotlin.Unit> confirmButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? dismissButton, optional kotlin.jvm.functions.Function0<kotlin.Unit>? title, optional kotlin.jvm.functions.Function0<kotlin.Unit>? text, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional androidx.compose.ui.window.DialogProperties properties);
}
public final class AndroidMenu_androidKt {
- method @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.foundation.ScrollState scrollState, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<? extends kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.foundation.ScrollState scrollState, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void DropdownMenuItem(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
}
@@ -24,8 +24,8 @@
public final class AppBarKt {
method @androidx.compose.runtime.Composable public static void BottomAppBar(optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional androidx.compose.ui.graphics.Shape? cutoutShape, optional float elevation, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void TopAppBar(kotlin.jvm.functions.Function0<kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions, optional long backgroundColor, optional long contentColor, optional float elevation);
method @androidx.compose.runtime.Composable public static void TopAppBar(optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional float elevation, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void TopAppBar(kotlin.jvm.functions.Function0<kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions, optional long backgroundColor, optional long contentColor, optional float elevation);
}
public final class BackdropScaffoldDefaults {
@@ -73,8 +73,8 @@
public final class ButtonDefaults {
method @androidx.compose.runtime.Composable public androidx.compose.material.ButtonColors buttonColors(optional long backgroundColor, optional long contentColor, optional long disabledBackgroundColor, optional long disabledContentColor);
- method @androidx.compose.runtime.Composable public androidx.compose.material.ButtonElevation elevation(optional float defaultElevation, optional float pressedElevation, optional float disabledElevation, optional float hoveredElevation, optional float focusedElevation);
method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material.ButtonElevation elevation(optional float defaultElevation, optional float pressedElevation, optional float disabledElevation);
+ method @androidx.compose.runtime.Composable public androidx.compose.material.ButtonElevation elevation(optional float defaultElevation, optional float pressedElevation, optional float disabledElevation, optional float hoveredElevation, optional float focusedElevation);
method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
method public float getIconSize();
method public float getIconSpacing();
@@ -269,8 +269,8 @@
}
public final class FloatingActionButtonDefaults {
- method @androidx.compose.runtime.Composable public androidx.compose.material.FloatingActionButtonElevation elevation(optional float defaultElevation, optional float pressedElevation, optional float hoveredElevation, optional float focusedElevation);
method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material.FloatingActionButtonElevation elevation(optional float defaultElevation, optional float pressedElevation);
+ method @androidx.compose.runtime.Composable public androidx.compose.material.FloatingActionButtonElevation elevation(optional float defaultElevation, optional float pressedElevation, optional float hoveredElevation, optional float focusedElevation);
field public static final androidx.compose.material.FloatingActionButtonDefaults INSTANCE;
}
@@ -289,9 +289,9 @@
}
public final class IconKt {
- method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Icon(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
}
public final class InteractiveComponentSizeKt {
@@ -338,10 +338,10 @@
}
public final class OutlinedTextFieldKt {
- method @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ method @Deprecated @androidx.compose.runtime.Composable public static void OutlinedTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
method @androidx.compose.runtime.Composable public static void OutlinedTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
method @Deprecated @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
- method @Deprecated @androidx.compose.runtime.Composable public static void OutlinedTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ method @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
}
public final class ProgressIndicatorDefaults {
@@ -354,14 +354,14 @@
}
public final class ProgressIndicatorKt {
- method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth, optional long backgroundColor, optional int strokeCap);
+ method @Deprecated @androidx.compose.runtime.Composable public static void CircularProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth);
method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth, optional long backgroundColor, optional int strokeCap);
method @Deprecated @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth);
- method @Deprecated @androidx.compose.runtime.Composable public static void CircularProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth);
- method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional long backgroundColor, optional int strokeCap);
+ method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth, optional long backgroundColor, optional int strokeCap);
+ method @Deprecated @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional long backgroundColor);
method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional long backgroundColor, optional int strokeCap);
method @Deprecated @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional long backgroundColor);
- method @Deprecated @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional long backgroundColor);
+ method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional long backgroundColor, optional int strokeCap);
}
@androidx.compose.runtime.Stable public interface RadioButtonColors {
@@ -471,8 +471,8 @@
}
public final class SnackbarKt {
- method @androidx.compose.runtime.Composable public static void Snackbar(optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? action, optional boolean actionOnNewLine, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional float elevation, kotlin.jvm.functions.Function0<kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void Snackbar(androidx.compose.material.SnackbarData snackbarData, optional androidx.compose.ui.Modifier modifier, optional boolean actionOnNewLine, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional long actionColor, optional float elevation);
+ method @androidx.compose.runtime.Composable public static void Snackbar(optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? action, optional boolean actionOnNewLine, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional float elevation, kotlin.jvm.functions.Function0<kotlin.Unit> content);
}
public enum SnackbarResult {
@@ -513,8 +513,8 @@
public final class TabKt {
method @androidx.compose.runtime.Composable public static void LeadingIconTab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> icon, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional long selectedContentColor, optional long unselectedContentColor);
- method @androidx.compose.runtime.Composable public static void Tab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.jvm.functions.Function0<kotlin.Unit>? text, optional kotlin.jvm.functions.Function0<kotlin.Unit>? icon, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional long selectedContentColor, optional long unselectedContentColor);
method @androidx.compose.runtime.Composable public static void Tab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional long selectedContentColor, optional long unselectedContentColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Tab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.jvm.functions.Function0<kotlin.Unit>? text, optional kotlin.jvm.functions.Function0<kotlin.Unit>? icon, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional long selectedContentColor, optional long unselectedContentColor);
}
@androidx.compose.runtime.Immutable public final class TabPosition {
@@ -578,18 +578,18 @@
}
public final class TextFieldKt {
- method @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ method @Deprecated @androidx.compose.runtime.Composable public static void TextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
method @androidx.compose.runtime.Composable public static void TextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
method @Deprecated @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
- method @Deprecated @androidx.compose.runtime.Composable public static void TextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ method @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
}
public final class TextKt {
method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
- method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method @Deprecated @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> LocalTextStyle;
}
diff --git a/compose/material/material/api/public_plus_experimental_current.txt b/compose/material/material/api/public_plus_experimental_current.txt
index 7fd3fdd..4bed1769 100644
--- a/compose/material/material/api/public_plus_experimental_current.txt
+++ b/compose/material/material/api/public_plus_experimental_current.txt
@@ -2,13 +2,13 @@
package androidx.compose.material {
public final class AndroidAlertDialog_androidKt {
- method @androidx.compose.runtime.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, kotlin.jvm.functions.Function0<kotlin.Unit> confirmButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? dismissButton, optional kotlin.jvm.functions.Function0<kotlin.Unit>? title, optional kotlin.jvm.functions.Function0<kotlin.Unit>? text, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional androidx.compose.ui.window.DialogProperties properties);
method @androidx.compose.runtime.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, kotlin.jvm.functions.Function0<kotlin.Unit> buttons, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? title, optional kotlin.jvm.functions.Function0<kotlin.Unit>? text, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional androidx.compose.ui.window.DialogProperties properties);
+ method @androidx.compose.runtime.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, kotlin.jvm.functions.Function0<kotlin.Unit> confirmButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? dismissButton, optional kotlin.jvm.functions.Function0<kotlin.Unit>? title, optional kotlin.jvm.functions.Function0<kotlin.Unit>? text, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional androidx.compose.ui.window.DialogProperties properties);
}
public final class AndroidMenu_androidKt {
- method @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.foundation.ScrollState scrollState, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<? extends kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.foundation.ScrollState scrollState, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void DropdownMenuItem(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
}
@@ -24,8 +24,8 @@
public final class AppBarKt {
method @androidx.compose.runtime.Composable public static void BottomAppBar(optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional androidx.compose.ui.graphics.Shape? cutoutShape, optional float elevation, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void TopAppBar(kotlin.jvm.functions.Function0<kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions, optional long backgroundColor, optional long contentColor, optional float elevation);
method @androidx.compose.runtime.Composable public static void TopAppBar(optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional float elevation, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void TopAppBar(kotlin.jvm.functions.Function0<kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions, optional long backgroundColor, optional long contentColor, optional float elevation);
}
public final class BackdropScaffoldDefaults {
@@ -165,8 +165,8 @@
}
public static final class BottomSheetState.Companion {
- method public androidx.compose.runtime.saveable.Saver<androidx.compose.material.BottomSheetState,?> Saver(androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomSheetValue,java.lang.Boolean> confirmStateChange, androidx.compose.ui.unit.Density density);
method @Deprecated public androidx.compose.runtime.saveable.Saver<androidx.compose.material.BottomSheetState,?> Saver(androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomSheetValue,java.lang.Boolean> confirmStateChange);
+ method public androidx.compose.runtime.saveable.Saver<androidx.compose.material.BottomSheetState,?> Saver(androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomSheetValue,java.lang.Boolean> confirmStateChange, androidx.compose.ui.unit.Density density);
}
@androidx.compose.material.ExperimentalMaterialApi public enum BottomSheetValue {
@@ -183,8 +183,8 @@
public final class ButtonDefaults {
method @androidx.compose.runtime.Composable public androidx.compose.material.ButtonColors buttonColors(optional long backgroundColor, optional long contentColor, optional long disabledBackgroundColor, optional long disabledContentColor);
- method @androidx.compose.runtime.Composable public androidx.compose.material.ButtonElevation elevation(optional float defaultElevation, optional float pressedElevation, optional float disabledElevation, optional float hoveredElevation, optional float focusedElevation);
method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material.ButtonElevation elevation(optional float defaultElevation, optional float pressedElevation, optional float disabledElevation);
+ method @androidx.compose.runtime.Composable public androidx.compose.material.ButtonElevation elevation(optional float defaultElevation, optional float pressedElevation, optional float disabledElevation, optional float hoveredElevation, optional float focusedElevation);
method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
method public float getIconSize();
method public float getIconSpacing();
@@ -219,8 +219,8 @@
public final class CardKt {
method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Card(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional androidx.compose.foundation.BorderStroke? border, optional float elevation, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Card(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional androidx.compose.foundation.BorderStroke? border, optional float elevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
method @Deprecated @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Card(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional androidx.compose.foundation.BorderStroke? border, optional float elevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.Indication? indication, optional boolean enabled, optional String? onClickLabel, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Card(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional androidx.compose.foundation.BorderStroke? border, optional float elevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
}
@androidx.compose.runtime.Stable public interface CheckboxColors {
@@ -460,8 +460,8 @@
}
public final class FloatingActionButtonDefaults {
- method @androidx.compose.runtime.Composable public androidx.compose.material.FloatingActionButtonElevation elevation(optional float defaultElevation, optional float pressedElevation, optional float hoveredElevation, optional float focusedElevation);
method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material.FloatingActionButtonElevation elevation(optional float defaultElevation, optional float pressedElevation);
+ method @androidx.compose.runtime.Composable public androidx.compose.material.FloatingActionButtonElevation elevation(optional float defaultElevation, optional float pressedElevation, optional float hoveredElevation, optional float focusedElevation);
field public static final androidx.compose.material.FloatingActionButtonDefaults INSTANCE;
}
@@ -486,9 +486,9 @@
}
public final class IconKt {
- method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Icon(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
}
public final class InteractiveComponentSizeKt {
@@ -533,11 +533,11 @@
public final class ModalBottomSheetKt {
method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static void ModalBottomSheetLayout(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> sheetContent, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material.ModalBottomSheetState sheetState, optional boolean sheetGesturesEnabled, optional androidx.compose.ui.graphics.Shape sheetShape, optional float sheetElevation, optional long sheetBackgroundColor, optional long sheetContentColor, optional long scrimColor, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method @androidx.compose.material.ExperimentalMaterialApi public static androidx.compose.material.ModalBottomSheetState ModalBottomSheetState(androidx.compose.material.ModalBottomSheetValue initialValue, androidx.compose.ui.unit.Density density, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmValueChange, optional boolean isSkipHalfExpanded);
method @Deprecated @androidx.compose.material.ExperimentalMaterialApi public static androidx.compose.material.ModalBottomSheetState ModalBottomSheetState(androidx.compose.material.ModalBottomSheetValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmValueChange, optional boolean isSkipHalfExpanded);
- method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static androidx.compose.material.ModalBottomSheetState rememberModalBottomSheetState(androidx.compose.material.ModalBottomSheetValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmValueChange, optional boolean skipHalfExpanded);
+ method @androidx.compose.material.ExperimentalMaterialApi public static androidx.compose.material.ModalBottomSheetState ModalBottomSheetState(androidx.compose.material.ModalBottomSheetValue initialValue, androidx.compose.ui.unit.Density density, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmValueChange, optional boolean isSkipHalfExpanded);
method @Deprecated @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static androidx.compose.material.ModalBottomSheetState rememberModalBottomSheetState(androidx.compose.material.ModalBottomSheetValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, boolean skipHalfExpanded, kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmStateChange);
method @Deprecated @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static androidx.compose.material.ModalBottomSheetState rememberModalBottomSheetState(androidx.compose.material.ModalBottomSheetValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmStateChange);
+ method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static androidx.compose.material.ModalBottomSheetState rememberModalBottomSheetState(androidx.compose.material.ModalBottomSheetValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmValueChange, optional boolean skipHalfExpanded);
}
@androidx.compose.material.ExperimentalMaterialApi public final class ModalBottomSheetState {
@@ -555,9 +555,9 @@
}
public static final class ModalBottomSheetState.Companion {
- method public androidx.compose.runtime.saveable.Saver<androidx.compose.material.ModalBottomSheetState,?> Saver(androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmValueChange, boolean skipHalfExpanded, androidx.compose.ui.unit.Density density);
- method @Deprecated public androidx.compose.runtime.saveable.Saver<androidx.compose.material.ModalBottomSheetState,?> Saver(androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmValueChange, boolean skipHalfExpanded);
method @Deprecated public androidx.compose.runtime.saveable.Saver<androidx.compose.material.ModalBottomSheetState,?> Saver(androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, boolean skipHalfExpanded, kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmStateChange);
+ method @Deprecated public androidx.compose.runtime.saveable.Saver<androidx.compose.material.ModalBottomSheetState,?> Saver(androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmValueChange, boolean skipHalfExpanded);
+ method public androidx.compose.runtime.saveable.Saver<androidx.compose.material.ModalBottomSheetState,?> Saver(androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmValueChange, boolean skipHalfExpanded, androidx.compose.ui.unit.Density density);
}
@androidx.compose.material.ExperimentalMaterialApi public enum ModalBottomSheetValue {
@@ -580,10 +580,10 @@
}
public final class OutlinedTextFieldKt {
- method @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ method @Deprecated @androidx.compose.runtime.Composable public static void OutlinedTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
method @androidx.compose.runtime.Composable public static void OutlinedTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
method @Deprecated @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
- method @Deprecated @androidx.compose.runtime.Composable public static void OutlinedTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ method @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
}
public final class ProgressIndicatorDefaults {
@@ -596,14 +596,14 @@
}
public final class ProgressIndicatorKt {
- method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth, optional long backgroundColor, optional int strokeCap);
+ method @Deprecated @androidx.compose.runtime.Composable public static void CircularProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth);
method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth, optional long backgroundColor, optional int strokeCap);
method @Deprecated @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth);
- method @Deprecated @androidx.compose.runtime.Composable public static void CircularProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth);
- method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional long backgroundColor, optional int strokeCap);
+ method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth, optional long backgroundColor, optional int strokeCap);
+ method @Deprecated @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional long backgroundColor);
method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional long backgroundColor, optional int strokeCap);
method @Deprecated @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional long backgroundColor);
- method @Deprecated @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional long backgroundColor);
+ method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional long backgroundColor, optional int strokeCap);
}
@androidx.compose.runtime.Stable public interface RadioButtonColors {
@@ -720,8 +720,8 @@
}
public final class SnackbarKt {
- method @androidx.compose.runtime.Composable public static void Snackbar(optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? action, optional boolean actionOnNewLine, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional float elevation, kotlin.jvm.functions.Function0<kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void Snackbar(androidx.compose.material.SnackbarData snackbarData, optional androidx.compose.ui.Modifier modifier, optional boolean actionOnNewLine, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional long actionColor, optional float elevation);
+ method @androidx.compose.runtime.Composable public static void Snackbar(optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? action, optional boolean actionOnNewLine, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional float elevation, kotlin.jvm.functions.Function0<kotlin.Unit> content);
}
public enum SnackbarResult {
@@ -733,10 +733,10 @@
public final class SurfaceKt {
method @androidx.compose.runtime.Composable public static void Surface(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.Shape shape, optional long color, optional long contentColor, optional androidx.compose.foundation.BorderStroke? border, optional float elevation, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static void Surface(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional long color, optional long contentColor, optional androidx.compose.foundation.BorderStroke? border, optional float elevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static void Surface(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional long color, optional long contentColor, optional androidx.compose.foundation.BorderStroke? border, optional float elevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static void Surface(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional long color, optional long contentColor, optional androidx.compose.foundation.BorderStroke? border, optional float elevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
method @Deprecated @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static void Surface(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.Shape shape, optional long color, optional long contentColor, optional androidx.compose.foundation.BorderStroke? border, optional float elevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.Indication? indication, optional boolean enabled, optional String? onClickLabel, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Composable public static void Surface(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional long color, optional long contentColor, optional androidx.compose.foundation.BorderStroke? border, optional float elevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
}
@androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Immutable public final class SwipeProgress<T> {
@@ -813,8 +813,8 @@
public final class TabKt {
method @androidx.compose.runtime.Composable public static void LeadingIconTab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> icon, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional long selectedContentColor, optional long unselectedContentColor);
- method @androidx.compose.runtime.Composable public static void Tab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.jvm.functions.Function0<kotlin.Unit>? text, optional kotlin.jvm.functions.Function0<kotlin.Unit>? icon, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional long selectedContentColor, optional long unselectedContentColor);
method @androidx.compose.runtime.Composable public static void Tab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional long selectedContentColor, optional long unselectedContentColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Tab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.jvm.functions.Function0<kotlin.Unit>? text, optional kotlin.jvm.functions.Function0<kotlin.Unit>? icon, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional long selectedContentColor, optional long unselectedContentColor);
}
@androidx.compose.runtime.Immutable public final class TabPosition {
@@ -890,18 +890,18 @@
}
public final class TextFieldKt {
- method @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ method @Deprecated @androidx.compose.runtime.Composable public static void TextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
method @androidx.compose.runtime.Composable public static void TextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
method @Deprecated @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
- method @Deprecated @androidx.compose.runtime.Composable public static void TextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ method @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
}
public final class TextKt {
method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
- method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method @Deprecated @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> LocalTextStyle;
}
diff --git a/compose/material/material/api/restricted_current.txt b/compose/material/material/api/restricted_current.txt
index c9c5c53..0660033 100644
--- a/compose/material/material/api/restricted_current.txt
+++ b/compose/material/material/api/restricted_current.txt
@@ -2,13 +2,13 @@
package androidx.compose.material {
public final class AndroidAlertDialog_androidKt {
- method @androidx.compose.runtime.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, kotlin.jvm.functions.Function0<kotlin.Unit> confirmButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? dismissButton, optional kotlin.jvm.functions.Function0<kotlin.Unit>? title, optional kotlin.jvm.functions.Function0<kotlin.Unit>? text, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional androidx.compose.ui.window.DialogProperties properties);
method @androidx.compose.runtime.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, kotlin.jvm.functions.Function0<kotlin.Unit> buttons, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? title, optional kotlin.jvm.functions.Function0<kotlin.Unit>? text, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional androidx.compose.ui.window.DialogProperties properties);
+ method @androidx.compose.runtime.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, kotlin.jvm.functions.Function0<kotlin.Unit> confirmButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? dismissButton, optional kotlin.jvm.functions.Function0<kotlin.Unit>? title, optional kotlin.jvm.functions.Function0<kotlin.Unit>? text, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional androidx.compose.ui.window.DialogProperties properties);
}
public final class AndroidMenu_androidKt {
- method @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.foundation.ScrollState scrollState, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<? extends kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.foundation.ScrollState scrollState, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void DropdownMenuItem(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
}
@@ -24,8 +24,8 @@
public final class AppBarKt {
method @androidx.compose.runtime.Composable public static void BottomAppBar(optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional androidx.compose.ui.graphics.Shape? cutoutShape, optional float elevation, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void TopAppBar(kotlin.jvm.functions.Function0<kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions, optional long backgroundColor, optional long contentColor, optional float elevation);
method @androidx.compose.runtime.Composable public static void TopAppBar(optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional float elevation, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void TopAppBar(kotlin.jvm.functions.Function0<kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions, optional long backgroundColor, optional long contentColor, optional float elevation);
}
public final class BackdropScaffoldDefaults {
@@ -73,8 +73,8 @@
public final class ButtonDefaults {
method @androidx.compose.runtime.Composable public androidx.compose.material.ButtonColors buttonColors(optional long backgroundColor, optional long contentColor, optional long disabledBackgroundColor, optional long disabledContentColor);
- method @androidx.compose.runtime.Composable public androidx.compose.material.ButtonElevation elevation(optional float defaultElevation, optional float pressedElevation, optional float disabledElevation, optional float hoveredElevation, optional float focusedElevation);
method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material.ButtonElevation elevation(optional float defaultElevation, optional float pressedElevation, optional float disabledElevation);
+ method @androidx.compose.runtime.Composable public androidx.compose.material.ButtonElevation elevation(optional float defaultElevation, optional float pressedElevation, optional float disabledElevation, optional float hoveredElevation, optional float focusedElevation);
method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
method public float getIconSize();
method public float getIconSpacing();
@@ -269,8 +269,8 @@
}
public final class FloatingActionButtonDefaults {
- method @androidx.compose.runtime.Composable public androidx.compose.material.FloatingActionButtonElevation elevation(optional float defaultElevation, optional float pressedElevation, optional float hoveredElevation, optional float focusedElevation);
method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material.FloatingActionButtonElevation elevation(optional float defaultElevation, optional float pressedElevation);
+ method @androidx.compose.runtime.Composable public androidx.compose.material.FloatingActionButtonElevation elevation(optional float defaultElevation, optional float pressedElevation, optional float hoveredElevation, optional float focusedElevation);
field public static final androidx.compose.material.FloatingActionButtonDefaults INSTANCE;
}
@@ -289,9 +289,9 @@
}
public final class IconKt {
- method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Icon(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
}
public final class InteractiveComponentSizeKt {
@@ -338,10 +338,10 @@
}
public final class OutlinedTextFieldKt {
- method @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ method @Deprecated @androidx.compose.runtime.Composable public static void OutlinedTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
method @androidx.compose.runtime.Composable public static void OutlinedTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
method @Deprecated @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
- method @Deprecated @androidx.compose.runtime.Composable public static void OutlinedTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ method @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
}
public final class ProgressIndicatorDefaults {
@@ -354,14 +354,14 @@
}
public final class ProgressIndicatorKt {
- method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth, optional long backgroundColor, optional int strokeCap);
+ method @Deprecated @androidx.compose.runtime.Composable public static void CircularProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth);
method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth, optional long backgroundColor, optional int strokeCap);
method @Deprecated @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth);
- method @Deprecated @androidx.compose.runtime.Composable public static void CircularProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth);
- method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional long backgroundColor, optional int strokeCap);
+ method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth, optional long backgroundColor, optional int strokeCap);
+ method @Deprecated @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional long backgroundColor);
method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional long backgroundColor, optional int strokeCap);
method @Deprecated @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional long backgroundColor);
- method @Deprecated @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional long backgroundColor);
+ method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional long backgroundColor, optional int strokeCap);
}
@androidx.compose.runtime.Stable public interface RadioButtonColors {
@@ -471,8 +471,8 @@
}
public final class SnackbarKt {
- method @androidx.compose.runtime.Composable public static void Snackbar(optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? action, optional boolean actionOnNewLine, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional float elevation, kotlin.jvm.functions.Function0<kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void Snackbar(androidx.compose.material.SnackbarData snackbarData, optional androidx.compose.ui.Modifier modifier, optional boolean actionOnNewLine, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional long actionColor, optional float elevation);
+ method @androidx.compose.runtime.Composable public static void Snackbar(optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? action, optional boolean actionOnNewLine, optional androidx.compose.ui.graphics.Shape shape, optional long backgroundColor, optional long contentColor, optional float elevation, kotlin.jvm.functions.Function0<kotlin.Unit> content);
}
public enum SnackbarResult {
@@ -513,8 +513,8 @@
public final class TabKt {
method @androidx.compose.runtime.Composable public static void LeadingIconTab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> icon, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional long selectedContentColor, optional long unselectedContentColor);
- method @androidx.compose.runtime.Composable public static void Tab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.jvm.functions.Function0<kotlin.Unit>? text, optional kotlin.jvm.functions.Function0<kotlin.Unit>? icon, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional long selectedContentColor, optional long unselectedContentColor);
method @androidx.compose.runtime.Composable public static void Tab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional long selectedContentColor, optional long unselectedContentColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Tab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.jvm.functions.Function0<kotlin.Unit>? text, optional kotlin.jvm.functions.Function0<kotlin.Unit>? icon, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional long selectedContentColor, optional long unselectedContentColor);
}
@androidx.compose.runtime.Immutable public final class TabPosition {
@@ -578,18 +578,18 @@
}
public final class TextFieldKt {
- method @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ method @Deprecated @androidx.compose.runtime.Composable public static void TextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
method @androidx.compose.runtime.Composable public static void TextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
method @Deprecated @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
- method @Deprecated @androidx.compose.runtime.Composable public static void TextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
+ method @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material.TextFieldColors colors);
}
public final class TextKt {
method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
- method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method @Deprecated @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> LocalTextStyle;
}
diff --git a/compose/material/material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/tasks/IconGenerationTask.kt b/compose/material/material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/tasks/IconGenerationTask.kt
index d705315..f264ab4 100644
--- a/compose/material/material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/tasks/IconGenerationTask.kt
+++ b/compose/material/material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/tasks/IconGenerationTask.kt
@@ -19,24 +19,24 @@
import androidx.compose.material.icons.generator.Icon
import androidx.compose.material.icons.generator.IconProcessor
import com.android.build.gradle.LibraryExtension
+import java.io.File
+import java.util.Locale
import org.gradle.api.DefaultTask
import org.gradle.api.Project
import org.gradle.api.tasks.CacheableTask
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputDirectory
import org.gradle.api.tasks.InputFile
+import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.Optional
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.PathSensitive
import org.gradle.api.tasks.PathSensitivity
import org.gradle.api.tasks.TaskAction
-import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.TaskProvider
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
-import java.io.File
-import java.util.Locale
/**
* Base [org.gradle.api.Task] for tasks relating to icon generation.
diff --git a/compose/material/material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/tasks/IconSourceTasks.kt b/compose/material/material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/tasks/IconSourceTasks.kt
index 4e62a3d..9e8c3fe 100644
--- a/compose/material/material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/tasks/IconSourceTasks.kt
+++ b/compose/material/material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/tasks/IconSourceTasks.kt
@@ -18,12 +18,12 @@
import androidx.compose.material.icons.generator.CoreIcons
import androidx.compose.material.icons.generator.IconWriter
+import java.io.File
import org.gradle.api.Project
import org.gradle.api.tasks.CacheableTask
import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.bundling.Jar
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
-import java.io.File
/**
* Task responsible for converting core icons from xml to a programmatic representation.
diff --git a/compose/material/material/icons/generator/src/test/kotlin/androidx/compose/material/icons/generator/IconProcessorTest.kt b/compose/material/material/icons/generator/src/test/kotlin/androidx/compose/material/icons/generator/IconProcessorTest.kt
index 0e11d8c..15c45cb 100644
--- a/compose/material/material/icons/generator/src/test/kotlin/androidx/compose/material/icons/generator/IconProcessorTest.kt
+++ b/compose/material/material/icons/generator/src/test/kotlin/androidx/compose/material/icons/generator/IconProcessorTest.kt
@@ -17,13 +17,13 @@
package androidx.compose.material.icons.generator
import com.google.common.truth.Truth
+import java.io.File
import org.junit.Assert.fail
import org.junit.Rule
import org.junit.Test
import org.junit.rules.TemporaryFolder
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import java.io.File
/**
* Test for [IconProcessor].
diff --git a/compose/material/material/integration-tests/material-catalog/src/main/java/androidx/compose/material/catalog/library/model/Examples.kt b/compose/material/material/integration-tests/material-catalog/src/main/java/androidx/compose/material/catalog/library/model/Examples.kt
index 30fa679..4154cf1 100644
--- a/compose/material/material/integration-tests/material-catalog/src/main/java/androidx/compose/material/catalog/library/model/Examples.kt
+++ b/compose/material/material/integration-tests/material-catalog/src/main/java/androidx/compose/material/catalog/library/model/Examples.kt
@@ -25,8 +25,8 @@
import androidx.compose.material.samples.AlertDialogSample
import androidx.compose.material.samples.BackdropScaffoldSample
import androidx.compose.material.samples.BottomDrawerSample
-import androidx.compose.material.samples.BottomNavigationSample
import androidx.compose.material.samples.BottomNavigationItemWithBadge
+import androidx.compose.material.samples.BottomNavigationSample
import androidx.compose.material.samples.BottomNavigationWithOnlySelectedLabelsSample
import androidx.compose.material.samples.BottomSheetScaffoldSample
import androidx.compose.material.samples.ButtonSample
diff --git a/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ColorPickerDemo.kt b/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ColorPickerDemo.kt
index 4aff510..a2e1d22 100644
--- a/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ColorPickerDemo.kt
+++ b/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ColorPickerDemo.kt
@@ -24,8 +24,8 @@
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
-import androidx.compose.foundation.gestures.awaitFirstDown
import androidx.compose.foundation.gestures.awaitEachGesture
+import androidx.compose.foundation.gestures.awaitFirstDown
import androidx.compose.foundation.gestures.drag
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxWithConstraints
diff --git a/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/DynamicThemeActivity.kt b/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/DynamicThemeActivity.kt
index 9489001..8612e36 100644
--- a/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/DynamicThemeActivity.kt
+++ b/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/DynamicThemeActivity.kt
@@ -23,8 +23,8 @@
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.foundation.lazy.rememberLazyListState
diff --git a/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MaterialDemos.kt b/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MaterialDemos.kt
index 6eaf8ed..111e82d 100644
--- a/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MaterialDemos.kt
+++ b/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MaterialDemos.kt
@@ -22,12 +22,12 @@
import androidx.compose.material.samples.AlertDialogSample
import androidx.compose.material.samples.BackdropScaffoldSample
import androidx.compose.material.samples.BottomDrawerSample
-import androidx.compose.material.samples.CustomAlertDialogSample
-import androidx.compose.material.samples.ModalBottomSheetSample
-import androidx.compose.material.samples.ModalDrawerSample
import androidx.compose.material.samples.BottomSheetScaffoldSample
import androidx.compose.material.samples.ContentAlphaSample
+import androidx.compose.material.samples.CustomAlertDialogSample
import androidx.compose.material.samples.CustomPullRefreshSample
+import androidx.compose.material.samples.ModalBottomSheetSample
+import androidx.compose.material.samples.ModalDrawerSample
import androidx.compose.material.samples.PullRefreshIndicatorTransformSample
import androidx.compose.material.samples.PullRefreshSample
import androidx.compose.material.samples.ScaffoldWithBottomBarAndCutout
diff --git a/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MaterialTextField.kt b/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MaterialTextField.kt
index 858e9de..77c8de6 100644
--- a/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MaterialTextField.kt
+++ b/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MaterialTextField.kt
@@ -24,12 +24,12 @@
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.requiredHeight
import androidx.compose.foundation.layout.requiredHeightIn
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.height
-import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.requiredWidth
+import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.rememberScrollState
diff --git a/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MenuDemo.kt b/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MenuDemo.kt
index caf5517..c5cb10f 100644
--- a/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MenuDemo.kt
+++ b/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MenuDemo.kt
@@ -33,10 +33,10 @@
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
+import androidx.compose.ui.unit.DpOffset
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.LayoutDirection
-import androidx.compose.ui.unit.DpOffset
import androidx.compose.ui.unit.dp
import kotlin.math.roundToInt
diff --git a/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ProgressIndicatorDemo.kt b/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ProgressIndicatorDemo.kt
index b3aaf5c..c3edd69 100644
--- a/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ProgressIndicatorDemo.kt
+++ b/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ProgressIndicatorDemo.kt
@@ -18,9 +18,9 @@
import android.os.Handler
import android.os.Looper
-import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.border
import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
diff --git a/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/TabDemo.kt b/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/TabDemo.kt
index 43a42d1..2837fc3 100644
--- a/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/TabDemo.kt
+++ b/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/TabDemo.kt
@@ -18,8 +18,8 @@
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
-import androidx.compose.foundation.layout.requiredHeight
import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.requiredHeight
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.Button
@@ -29,10 +29,10 @@
import androidx.compose.material.samples.FancyIndicatorTabs
import androidx.compose.material.samples.FancyTabs
import androidx.compose.material.samples.IconTabs
+import androidx.compose.material.samples.LeadingIconTabs
import androidx.compose.material.samples.ScrollingFancyIndicatorContainerTabs
import androidx.compose.material.samples.ScrollingTextTabs
import androidx.compose.material.samples.TextAndIconTabs
-import androidx.compose.material.samples.LeadingIconTabs
import androidx.compose.material.samples.TextTabs
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
diff --git a/compose/material/material/samples/build.gradle b/compose/material/material/samples/build.gradle
index 0b5f612..73cef10 100644
--- a/compose/material/material/samples/build.gradle
+++ b/compose/material/material/samples/build.gradle
@@ -40,7 +40,7 @@
}
androidx {
- name = "AndroidX Compose Material Components Samples"
+ name = "Compose Material Components Samples"
type = LibraryType.SAMPLES
inceptionYear = "2019"
description = "Contains the sample code for the AndroidX Compose Material components."
diff --git a/compose/material/material/samples/src/main/java/androidx/compose/material/samples/BottomSheetScaffoldSamples.kt b/compose/material/material/samples/src/main/java/androidx/compose/material/samples/BottomSheetScaffoldSamples.kt
index 85a3567..d9155c8 100644
--- a/compose/material/material/samples/src/main/java/androidx/compose/material/samples/BottomSheetScaffoldSamples.kt
+++ b/compose/material/material/samples/src/main/java/androidx/compose/material/samples/BottomSheetScaffoldSamples.kt
@@ -22,8 +22,8 @@
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material.BottomSheetScaffold
import androidx.compose.material.Button
diff --git a/compose/material/material/samples/src/main/java/androidx/compose/material/samples/ScaffoldSamples.kt b/compose/material/material/samples/src/main/java/androidx/compose/material/samples/ScaffoldSamples.kt
index 370b121..66e071f 100644
--- a/compose/material/material/samples/src/main/java/androidx/compose/material/samples/ScaffoldSamples.kt
+++ b/compose/material/material/samples/src/main/java/androidx/compose/material/samples/ScaffoldSamples.kt
@@ -57,12 +57,12 @@
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
+import kotlin.math.abs
+import kotlin.math.roundToInt
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.receiveAsFlow
import kotlinx.coroutines.launch
-import kotlin.math.abs
-import kotlin.math.roundToInt
private val colors = listOf(
Color(0xFFffd7d7.toInt()),
diff --git a/compose/material/material/samples/src/main/java/androidx/compose/material/samples/SelectionControlsSamples.kt b/compose/material/material/samples/src/main/java/androidx/compose/material/samples/SelectionControlsSamples.kt
index cdad91a..dd3ae10 100644
--- a/compose/material/material/samples/src/main/java/androidx/compose/material/samples/SelectionControlsSamples.kt
+++ b/compose/material/material/samples/src/main/java/androidx/compose/material/samples/SelectionControlsSamples.kt
@@ -17,18 +17,18 @@
package androidx.compose.material.samples
import androidx.annotation.Sampled
+import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.foundation.selection.selectable
import androidx.compose.foundation.selection.selectableGroup
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.width
import androidx.compose.foundation.selection.toggleable
import androidx.compose.material.Checkbox
import androidx.compose.material.CheckboxDefaults
@@ -38,22 +38,22 @@
import androidx.compose.material.Text
import androidx.compose.material.TriStateCheckbox
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.getValue
import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.ExperimentalComposeUiApi
+import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.input.InputMode.Companion.Keyboard
-import androidx.compose.ui.Alignment
-import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalInputModeManager
-import androidx.compose.ui.semantics.role
import androidx.compose.ui.semantics.Role
+import androidx.compose.ui.semantics.role
import androidx.compose.ui.state.ToggleableState
import androidx.compose.ui.unit.dp
-import androidx.compose.ui.ExperimentalComposeUiApi
@Sampled
@Composable
diff --git a/compose/material/material/samples/src/main/java/androidx/compose/material/samples/SwipeableSamples.kt b/compose/material/material/samples/src/main/java/androidx/compose/material/samples/SwipeableSamples.kt
index e38cd70..afe146a 100644
--- a/compose/material/material/samples/src/main/java/androidx/compose/material/samples/SwipeableSamples.kt
+++ b/compose/material/material/samples/src/main/java/androidx/compose/material/samples/SwipeableSamples.kt
@@ -18,6 +18,7 @@
import androidx.annotation.Sampled
import androidx.compose.foundation.background
+import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.size
@@ -30,7 +31,6 @@
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
-import androidx.compose.foundation.gestures.Orientation
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.IntOffset
diff --git a/compose/material/material/samples/src/main/java/androidx/compose/material/samples/TabSamples.kt b/compose/material/material/samples/src/main/java/androidx/compose/material/samples/TabSamples.kt
index 93f09c5..6ac79a1 100644
--- a/compose/material/material/samples/src/main/java/androidx/compose/material/samples/TabSamples.kt
+++ b/compose/material/material/samples/src/main/java/androidx/compose/material/samples/TabSamples.kt
@@ -29,21 +29,21 @@
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.Icon
+import androidx.compose.material.LeadingIconTab
import androidx.compose.material.MaterialTheme
import androidx.compose.material.ScrollableTabRow
import androidx.compose.material.Tab
-import androidx.compose.material.TabRowDefaults.tabIndicatorOffset
import androidx.compose.material.TabPosition
import androidx.compose.material.TabRow
-import androidx.compose.material.LeadingIconTab
+import androidx.compose.material.TabRowDefaults.tabIndicatorOffset
import androidx.compose.material.Text
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Favorite
diff --git a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/ButtonTest.kt b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/ButtonTest.kt
index 323ee25..863e352 100644
--- a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/ButtonTest.kt
+++ b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/ButtonTest.kt
@@ -79,10 +79,10 @@
import androidx.test.filters.MediumTest
import androidx.test.filters.SdkSuppress
import com.google.common.truth.Truth.assertThat
+import kotlin.math.abs
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.math.abs
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/CheckboxTest.kt b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/CheckboxTest.kt
index 7d233e4..64005ba 100644
--- a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/CheckboxTest.kt
+++ b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/CheckboxTest.kt
@@ -28,18 +28,18 @@
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.platform.testTag
-import androidx.compose.ui.semantics.SemanticsProperties
import androidx.compose.ui.semantics.Role
+import androidx.compose.ui.semantics.SemanticsProperties
import androidx.compose.ui.semantics.focused
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.state.ToggleableState
import androidx.compose.ui.state.ToggleableState.Indeterminate
import androidx.compose.ui.state.ToggleableState.Off
import androidx.compose.ui.state.ToggleableState.On
-import androidx.compose.ui.test.assertHasClickAction
-import androidx.compose.ui.test.assertHasNoClickAction
import androidx.compose.ui.test.SemanticsMatcher
import androidx.compose.ui.test.assert
+import androidx.compose.ui.test.assertHasClickAction
+import androidx.compose.ui.test.assertHasNoClickAction
import androidx.compose.ui.test.assertHeightIsEqualTo
import androidx.compose.ui.test.assertIsEnabled
import androidx.compose.ui.test.assertIsOff
diff --git a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/DividerUiTest.kt b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/DividerUiTest.kt
index 5b9920e..5609447 100644
--- a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/DividerUiTest.kt
+++ b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/DividerUiTest.kt
@@ -37,10 +37,10 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import androidx.test.filters.SdkSuppress
+import kotlin.math.roundToInt
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.math.roundToInt
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/ExposedDropdownMenuTest.kt b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/ExposedDropdownMenuTest.kt
index 23300d9..246125e 100644
--- a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/ExposedDropdownMenuTest.kt
+++ b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/ExposedDropdownMenuTest.kt
@@ -54,8 +54,11 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.uiautomator.By
import androidx.test.uiautomator.UiDevice
import com.google.common.truth.Truth.assertThat
+import org.junit.Assume
+import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
@@ -127,6 +130,38 @@
}
@Test
+ fun edm_doesNotCollapse_whenTypingOnSoftKeyboard() {
+ rule.setMaterialContent {
+ var expanded by remember { mutableStateOf(false) }
+ ExposedDropdownMenuForTest(
+ expanded = expanded,
+ onExpandChange = { expanded = it }
+ )
+ }
+
+ rule.onNodeWithTag(TFTag).performClick()
+
+ rule.onNodeWithTag(TFTag).assertIsDisplayed()
+ rule.onNodeWithTag(TFTag).assertIsFocused()
+ rule.onNodeWithTag(EDMTag).assertIsDisplayed()
+ rule.onNodeWithTag(MenuItemTag).assertIsDisplayed()
+
+ val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
+ val zKey = device.findObject(By.desc("z")) ?: device.findObject(By.text("z"))
+ // Only run the test if we can find a key to type, which might fail for any number of
+ // reasons (keyboard doesn't appear, unexpected locale, etc.)
+ Assume.assumeNotNull(zKey)
+
+ repeat(3) {
+ zKey.click()
+ rule.waitForIdle()
+ }
+
+ rule.onNodeWithTag(TFTag).assertTextContains("zzz")
+ rule.onNodeWithTag(MenuItemTag).assertIsDisplayed()
+ }
+
+ @Test
fun expandedBehaviour_expandsAndFocusesTextFieldOnTrailingIconClick() {
rule.setMaterialContent {
var expanded by remember { mutableStateOf(false) }
@@ -310,6 +345,7 @@
rule.onNodeWithTag(TFTag).assertTextContains(OptionName)
}
+ @Ignore("b/266109857")
@Test
fun doesNotCrashWhenAnchorDetachedFirst() {
var parent: FrameLayout? = null
@@ -319,9 +355,19 @@
FrameLayout(context).apply {
addView(ComposeView(context).apply {
setContent {
- Box {
- ExposedDropdownMenuBox(expanded = true, onExpandedChange = {}) {
- Box(Modifier.size(20.dp))
+ ExposedDropdownMenuBox(expanded = true, onExpandedChange = {}) {
+ TextField(
+ value = "Text",
+ onValueChange = {},
+ )
+ ExposedDropdownMenu(
+ expanded = true,
+ onDismissRequest = {},
+ ) {
+ DropdownMenuItem(
+ content = { Text(OptionName) },
+ onClick = {},
+ )
}
}
}
diff --git a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/FloatingActionButtonTest.kt b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/FloatingActionButtonTest.kt
index bfb6224..6ae0c2a 100644
--- a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/FloatingActionButtonTest.kt
+++ b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/FloatingActionButtonTest.kt
@@ -20,8 +20,8 @@
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
-import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.requiredSize
+import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CutCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Favorite
diff --git a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/IconTest.kt b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/IconTest.kt
index 77af7e3..e22a0c14 100644
--- a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/IconTest.kt
+++ b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/IconTest.kt
@@ -26,8 +26,8 @@
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.graphics.drawscope.CanvasDrawScope
-import androidx.compose.ui.graphics.painter.ColorPainter
import androidx.compose.ui.graphics.painter.BitmapPainter
+import androidx.compose.ui.graphics.painter.ColorPainter
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.testTag
diff --git a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/ListItemTest.kt b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/ListItemTest.kt
index c16b858..e1e7ffd 100644
--- a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/ListItemTest.kt
+++ b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/ListItemTest.kt
@@ -37,10 +37,10 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
+import kotlin.math.roundToInt
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.math.roundToInt
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/MenuTest.kt b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/MenuTest.kt
index 8ad3242..4d0270f 100644
--- a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/MenuTest.kt
+++ b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/MenuTest.kt
@@ -19,8 +19,8 @@
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.requiredSize
+import androidx.compose.foundation.layout.size
import androidx.compose.foundation.rememberScrollState
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
@@ -40,11 +40,11 @@
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.performClick
import androidx.compose.ui.unit.Density
-import androidx.compose.ui.unit.IntRect
+import androidx.compose.ui.unit.DpOffset
import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntRect
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.LayoutDirection
-import androidx.compose.ui.unit.DpOffset
import androidx.compose.ui.unit.dp
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
diff --git a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/ObservableThemeTest.kt b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/ObservableThemeTest.kt
index b3ed829..b653c19 100644
--- a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/ObservableThemeTest.kt
+++ b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/ObservableThemeTest.kt
@@ -18,9 +18,9 @@
import androidx.activity.ComponentActivity
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.Immutable
import androidx.compose.runtime.MutableState
-import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
diff --git a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/RadioButtonTest.kt b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/RadioButtonTest.kt
index d34df51..04cd5e3 100644
--- a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/RadioButtonTest.kt
+++ b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/RadioButtonTest.kt
@@ -21,8 +21,8 @@
import androidx.compose.runtime.mutableStateOf
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.testTag
-import androidx.compose.ui.semantics.SemanticsProperties
import androidx.compose.ui.semantics.Role
+import androidx.compose.ui.semantics.SemanticsProperties
import androidx.compose.ui.semantics.focused
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.test.SemanticsMatcher
diff --git a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/SnackbarHostTest.kt b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/SnackbarHostTest.kt
index 5feb341..7eff0db 100644
--- a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/SnackbarHostTest.kt
+++ b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/SnackbarHostTest.kt
@@ -34,10 +34,6 @@
import androidx.test.filters.LargeTest
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth
-import org.mockito.kotlin.any
-import org.mockito.kotlin.doReturn
-import org.mockito.kotlin.eq
-import org.mockito.kotlin.mock
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.delay
@@ -47,6 +43,10 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.AdditionalMatchers.not
+import org.mockito.kotlin.any
+import org.mockito.kotlin.doReturn
+import org.mockito.kotlin.eq
+import org.mockito.kotlin.mock
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/SwipeableTest.kt b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/SwipeableTest.kt
index 126b642..26b529d 100644
--- a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/SwipeableTest.kt
+++ b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/SwipeableTest.kt
@@ -51,6 +51,7 @@
import androidx.test.filters.LargeTest
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
+import kotlin.math.sign
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.async
import kotlinx.coroutines.launch
@@ -61,7 +62,6 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.math.sign
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/SwitchScreenshotTest.kt b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/SwitchScreenshotTest.kt
index 01414b2..cb03029 100644
--- a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/SwitchScreenshotTest.kt
+++ b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/SwitchScreenshotTest.kt
@@ -29,10 +29,10 @@
import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
+import androidx.compose.ui.graphics.Color
import androidx.compose.ui.input.InputMode
import androidx.compose.ui.input.InputModeManager
import androidx.compose.ui.platform.LocalInputModeManager
-import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalLayoutDirection
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.test.ExperimentalTestApi
diff --git a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/OutlinedTextFieldTest.kt b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/OutlinedTextFieldTest.kt
index 8425818..1c4e841 100644
--- a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/OutlinedTextFieldTest.kt
+++ b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/OutlinedTextFieldTest.kt
@@ -71,6 +71,7 @@
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.semantics.SemanticsProperties
import androidx.compose.ui.semantics.error
+import androidx.compose.ui.semantics.getOrNull
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.test.SemanticsMatcher
import androidx.compose.ui.test.assert
@@ -79,6 +80,7 @@
import androidx.compose.ui.test.captureToImage
import androidx.compose.ui.test.click
import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.compose.ui.test.onChildren
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
@@ -100,16 +102,16 @@
import androidx.test.filters.MediumTest
import androidx.test.filters.SdkSuppress
import com.google.common.truth.Truth.assertThat
-import org.mockito.kotlin.any
-import org.mockito.kotlin.atLeastOnce
-import org.mockito.kotlin.eq
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.verify
import kotlin.math.max
import kotlin.math.roundToInt
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.kotlin.any
+import org.mockito.kotlin.atLeastOnce
+import org.mockito.kotlin.eq
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.verify
@MediumTest
@RunWith(AndroidJUnit4::class)
@@ -1080,19 +1082,32 @@
@Test
fun testErrorSemantics_messageOverridable() {
val errorMessage = "Special symbols not allowed"
+ lateinit var defaultErrorMessage: String
rule.setMaterialContent {
var isError = remember { mutableStateOf(true) }
OutlinedTextField(
value = "test",
onValueChange = {},
- modifier = Modifier.semantics { if (isError.value) error(errorMessage) },
+ modifier = Modifier
+ .testTag(TextfieldTag)
+ .semantics { if (isError.value) error(errorMessage) },
isError = isError.value
)
+ defaultErrorMessage = getString(Strings.DefaultErrorMessage)
}
- rule.onNodeWithText("test")
+ rule.onNodeWithTag(TextfieldTag)
.assert(SemanticsMatcher.keyIsDefined(SemanticsProperties.Error))
.assert(SemanticsMatcher.expectValue(SemanticsProperties.Error, errorMessage))
+
+ // Check that default error message is overwritten and not lingering in a child node
+ rule.onNodeWithTag(TextfieldTag, useUnmergedTree = true)
+ .onChildren()
+ .fetchSemanticsNodes()
+ .forEach { node ->
+ assertThat(node.config.getOrNull(SemanticsProperties.Error))
+ .isNotEqualTo(defaultErrorMessage)
+ }
}
@Test
diff --git a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/TextFieldTest.kt b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/TextFieldTest.kt
index 63a61ef..214cfb7 100644
--- a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/TextFieldTest.kt
+++ b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/TextFieldTest.kt
@@ -20,21 +20,21 @@
import android.os.Build
import android.view.View
import android.view.inputmethod.InputMethodManager
+import androidx.compose.foundation.background
import androidx.compose.foundation.interaction.FocusInteraction
import androidx.compose.foundation.interaction.Interaction
import androidx.compose.foundation.interaction.MutableInteractionSource
-import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.IntrinsicSize
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.requiredHeight
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.requiredHeight
import androidx.compose.foundation.layout.requiredWidth
+import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.Divider
@@ -83,6 +83,7 @@
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.semantics.SemanticsProperties
import androidx.compose.ui.semantics.error
+import androidx.compose.ui.semantics.getOrNull
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.test.SemanticsMatcher
import androidx.compose.ui.test.assert
@@ -91,6 +92,7 @@
import androidx.compose.ui.test.captureToImage
import androidx.compose.ui.test.click
import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.compose.ui.test.onChildren
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
@@ -116,18 +118,18 @@
import androidx.test.filters.MediumTest
import androidx.test.filters.SdkSuppress
import com.google.common.truth.Truth.assertThat
-import org.mockito.kotlin.any
-import org.mockito.kotlin.atLeastOnce
-import org.mockito.kotlin.eq
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.verify
+import kotlin.math.roundToInt
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.math.roundToInt
+import org.mockito.kotlin.any
+import org.mockito.kotlin.atLeastOnce
+import org.mockito.kotlin.eq
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.verify
@MediumTest
@RunWith(AndroidJUnit4::class)
@@ -1235,19 +1237,32 @@
@Test
fun testErrorSemantics_messageOverridable() {
val errorMessage = "Special symbols not allowed"
+ lateinit var defaultErrorMessage: String
rule.setMaterialContent {
- var isError = remember { mutableStateOf(true) }
+ val isError = remember { mutableStateOf(true) }
TextField(
value = "test",
onValueChange = {},
- modifier = Modifier.semantics { if (isError.value) error(errorMessage) },
+ modifier = Modifier
+ .testTag(TextfieldTag)
+ .semantics { if (isError.value) error(errorMessage) },
isError = isError.value
)
+ defaultErrorMessage = getString(DefaultErrorMessage)
}
- rule.onNodeWithText("test")
+ rule.onNodeWithTag(TextfieldTag)
.assert(SemanticsMatcher.keyIsDefined(SemanticsProperties.Error))
.assert(SemanticsMatcher.expectValue(SemanticsProperties.Error, errorMessage))
+
+ // Check that default error message is overwritten and not lingering in a child node
+ rule.onNodeWithTag(TextfieldTag, useUnmergedTree = true)
+ .onChildren()
+ .fetchSemanticsNodes()
+ .forEach { node ->
+ assertThat(node.config.getOrNull(SemanticsProperties.Error))
+ .isNotEqualTo(defaultErrorMessage)
+ }
}
@Test
diff --git a/compose/material/material/src/androidMain/kotlin/androidx/compose/material/internal/ExposedDropdownMenuPopup.kt b/compose/material/material/src/androidMain/kotlin/androidx/compose/material/internal/ExposedDropdownMenuPopup.kt
index 006240b..e810b09 100644
--- a/compose/material/material/src/androidMain/kotlin/androidx/compose/material/internal/ExposedDropdownMenuPopup.kt
+++ b/compose/material/material/src/androidMain/kotlin/androidx/compose/material/internal/ExposedDropdownMenuPopup.kt
@@ -65,8 +65,8 @@
import androidx.compose.ui.util.fastMap
import androidx.compose.ui.window.PopupPositionProvider
import androidx.lifecycle.findViewTreeLifecycleOwner
-import androidx.lifecycle.setViewTreeLifecycleOwner
import androidx.lifecycle.findViewTreeViewModelStoreOwner
+import androidx.lifecycle.setViewTreeLifecycleOwner
import androidx.lifecycle.setViewTreeViewModelStoreOwner
import androidx.savedstate.findViewTreeSavedStateRegistryOwner
import androidx.savedstate.setViewTreeSavedStateRegistryOwner
@@ -382,26 +382,15 @@
// matter whether we return true or false as some upper layer decides on whether the
// event is propagated to other windows or not. So for focusable the event is consumed but
// for not focusable it is propagated to other windows.
- if (
- (
- (event.action == MotionEvent.ACTION_DOWN) &&
- (
- (event.x < 0) ||
- (event.x >= width) ||
- (event.y < 0) ||
- (event.y >= height)
- )
- ) ||
+ if ((event.action == MotionEvent.ACTION_DOWN &&
+ (event.x < 0 || event.x >= width || event.y < 0 || event.y >= height)) ||
event.action == MotionEvent.ACTION_OUTSIDE
) {
val parentBounds = parentBounds
val shouldDismiss = parentBounds == null || dismissOnOutsideClick(
- if (event.x != 0f || event.y != 0f) {
- Offset(
- params.x + event.x,
- params.y + event.y
- )
- } else null,
+ // Keep menu open if ACTION_OUTSIDE event is reported as raw coordinates of (0, 0).
+ // This means it belongs to another owner, e.g., the soft keyboard or other window.
+ if (event.rawX != 0f && event.rawY != 0f) Offset(event.rawX, event.rawY) else null,
parentBounds
)
if (shouldDismiss) {
diff --git a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/BackdropScaffold.kt b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/BackdropScaffold.kt
index de183dc..ed10ccf 100644
--- a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/BackdropScaffold.kt
+++ b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/BackdropScaffold.kt
@@ -59,11 +59,11 @@
import androidx.compose.ui.util.fastForEach
import androidx.compose.ui.util.fastMap
import androidx.compose.ui.zIndex
-import kotlinx.coroutines.CancellationException
-import kotlinx.coroutines.launch
import kotlin.math.max
import kotlin.math.min
import kotlin.math.roundToInt
+import kotlinx.coroutines.CancellationException
+import kotlinx.coroutines.launch
/**
* Possible values of [BackdropScaffoldState].
diff --git a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/BottomSheetScaffold.kt b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/BottomSheetScaffold.kt
index c674017..a8f712b 100644
--- a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/BottomSheetScaffold.kt
+++ b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/BottomSheetScaffold.kt
@@ -23,9 +23,9 @@
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.requiredHeightIn
+import androidx.compose.material.AnchoredDraggableState.AnchorChangedCallback
import androidx.compose.material.BottomSheetValue.Collapsed
import androidx.compose.material.BottomSheetValue.Expanded
-import androidx.compose.material.AnchoredDraggableState.AnchorChangedCallback
import androidx.compose.runtime.Composable
import androidx.compose.runtime.SideEffect
import androidx.compose.runtime.Stable
diff --git a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Divider.kt b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Divider.kt
index e8c9fad..53b3b31 100644
--- a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Divider.kt
+++ b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Divider.kt
@@ -16,11 +16,11 @@
package androidx.compose.material
-import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
diff --git a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Drawer.kt b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Drawer.kt
index f42d552..d7162a6 100644
--- a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Drawer.kt
+++ b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Drawer.kt
@@ -30,10 +30,10 @@
import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.sizeIn
+import androidx.compose.material.AnchoredDraggableState.AnchorChangedCallback
import androidx.compose.material.BottomDrawerValue.Closed
import androidx.compose.material.BottomDrawerValue.Expanded
import androidx.compose.material.BottomDrawerValue.Open
-import androidx.compose.material.AnchoredDraggableState.AnchorChangedCallback
import androidx.compose.runtime.Composable
import androidx.compose.runtime.SideEffect
import androidx.compose.runtime.Stable
diff --git a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/IconButton.kt b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/IconButton.kt
index 8ffc43d..fc5182e 100644
--- a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/IconButton.kt
+++ b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/IconButton.kt
@@ -16,9 +16,9 @@
package androidx.compose.material
+import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.Interaction
import androidx.compose.foundation.interaction.MutableInteractionSource
-import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.selection.toggleable
import androidx.compose.material.ripple.rememberRipple
diff --git a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/ListItem.kt b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/ListItem.kt
index 6b1cd00..d3b5ef5 100644
--- a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/ListItem.kt
+++ b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/ListItem.kt
@@ -18,8 +18,8 @@
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
-import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.heightIn
+import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.sizeIn
import androidx.compose.foundation.layout.widthIn
import androidx.compose.runtime.Composable
diff --git a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/MaterialTextSelectionColors.kt b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/MaterialTextSelectionColors.kt
index aea6370..3cbb183 100644
--- a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/MaterialTextSelectionColors.kt
+++ b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/MaterialTextSelectionColors.kt
@@ -16,13 +16,13 @@
package androidx.compose.material
+import androidx.compose.foundation.text.selection.TextSelectionColors
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.compositeOver
import androidx.compose.ui.graphics.luminance
import androidx.compose.ui.graphics.takeOrElse
-import androidx.compose.foundation.text.selection.TextSelectionColors
import kotlin.math.max
import kotlin.math.min
diff --git a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/MaterialTheme.kt b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/MaterialTheme.kt
index 50396c8..eaf511a 100644
--- a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/MaterialTheme.kt
+++ b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/MaterialTheme.kt
@@ -17,15 +17,15 @@
package androidx.compose.material
import androidx.compose.foundation.LocalIndication
+import androidx.compose.foundation.text.selection.LocalTextSelectionColors
import androidx.compose.material.ripple.LocalRippleTheme
import androidx.compose.material.ripple.RippleTheme
import androidx.compose.material.ripple.rememberRipple
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.Immutable
import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.Immutable
import androidx.compose.runtime.ReadOnlyComposable
import androidx.compose.runtime.remember
-import androidx.compose.foundation.text.selection.LocalTextSelectionColors
/**
* <a href="https://material.io/design/material-theming/overview.html" class="external" target="_blank">Material Theming</a>.
diff --git a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/OutlinedTextField.kt b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/OutlinedTextField.kt
index 5f3120a..8e90c16 100644
--- a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/OutlinedTextField.kt
+++ b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/OutlinedTextField.kt
@@ -172,6 +172,7 @@
modifier
}
.background(colors.backgroundColor(enabled).value, shape)
+ .defaultErrorSemantics(isError, getString(Strings.DefaultErrorMessage))
.defaultMinSize(
minWidth = TextFieldDefaults.MinWidth,
minHeight = TextFieldDefaults.MinHeight
@@ -373,6 +374,7 @@
modifier
}
.background(colors.backgroundColor(enabled).value, shape)
+ .defaultErrorSemantics(isError, getString(Strings.DefaultErrorMessage))
.defaultMinSize(
minWidth = TextFieldDefaults.MinWidth,
minHeight = TextFieldDefaults.MinHeight
diff --git a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Slider.kt b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Slider.kt
index 316474c..3f01485 100644
--- a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Slider.kt
+++ b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Slider.kt
@@ -27,10 +27,10 @@
import androidx.compose.foundation.gestures.DraggableState
import androidx.compose.foundation.gestures.GestureCancellationException
import androidx.compose.foundation.gestures.Orientation
+import androidx.compose.foundation.gestures.awaitEachGesture
import androidx.compose.foundation.gestures.awaitFirstDown
import androidx.compose.foundation.gestures.detectTapGestures
import androidx.compose.foundation.gestures.draggable
-import androidx.compose.foundation.gestures.awaitEachGesture
import androidx.compose.foundation.gestures.horizontalDrag
import androidx.compose.foundation.hoverable
import androidx.compose.foundation.indication
diff --git a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/SnackbarHost.kt b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/SnackbarHost.kt
index 5e00644..e1af01b 100644
--- a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/SnackbarHost.kt
+++ b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/SnackbarHost.kt
@@ -42,12 +42,12 @@
import androidx.compose.ui.semantics.liveRegion
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.util.fastForEach
+import kotlin.coroutines.resume
import kotlinx.coroutines.CancellableContinuation
import kotlinx.coroutines.delay
import kotlinx.coroutines.suspendCancellableCoroutine
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
-import kotlin.coroutines.resume
/**
* State of the [SnackbarHost], controls the queue and the current [Snackbar] being shown inside
diff --git a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/SwipeToDismiss.kt b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/SwipeToDismiss.kt
index 0aa1377..1cda288 100644
--- a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/SwipeToDismiss.kt
+++ b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/SwipeToDismiss.kt
@@ -38,8 +38,8 @@
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp
-import kotlinx.coroutines.CancellationException
import kotlin.math.roundToInt
+import kotlinx.coroutines.CancellationException
/**
* The directions in which a [SwipeToDismiss] can be dismissed.
diff --git a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/TextField.kt b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/TextField.kt
index dfbd2c8..984e496 100644
--- a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/TextField.kt
+++ b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/TextField.kt
@@ -191,6 +191,7 @@
modifier = modifier
.background(colors.backgroundColor(enabled).value, shape)
.indicatorLine(enabled, isError, interactionSource, colors)
+ .defaultErrorSemantics(isError, getString(Strings.DefaultErrorMessage))
.defaultMinSize(
minWidth = TextFieldDefaults.MinWidth,
minHeight = TextFieldDefaults.MinHeight
@@ -379,6 +380,7 @@
modifier = modifier
.background(colors.backgroundColor(enabled).value, shape)
.indicatorLine(enabled, isError, interactionSource, colors)
+ .defaultErrorSemantics(isError, getString(Strings.DefaultErrorMessage))
.defaultMinSize(
minWidth = TextFieldDefaults.MinWidth,
minHeight = TextFieldDefaults.MinHeight
diff --git a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/TextFieldImpl.kt b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/TextFieldImpl.kt
index f46c5b1..c947d0a 100644
--- a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/TextFieldImpl.kt
+++ b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/TextFieldImpl.kt
@@ -27,7 +27,6 @@
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.defaultMinSize
-import androidx.compose.material.Strings.Companion.DefaultErrorMessage
import androidx.compose.runtime.Composable
import androidx.compose.runtime.ComposableOpenTarget
import androidx.compose.runtime.CompositionLocalProvider
@@ -146,12 +145,6 @@
}
} else null
- // Developers need to handle invalid input manually. But since we don't provide error
- // message slot API, we can set the default error message in case developers forget about
- // it.
- val defaultErrorMessage = getString(DefaultErrorMessage)
- val decorationBoxModifier = Modifier.semantics { if (isError) error(defaultErrorMessage) }
-
val leadingIconColor = if (colors is TextFieldColorsWithIcons) {
colors.leadingIconColor(enabled, isError, interactionSource).value
} else {
@@ -177,7 +170,7 @@
when (type) {
TextFieldType.Filled -> {
TextFieldLayout(
- modifier = decorationBoxModifier,
+ modifier = Modifier,
textField = innerTextField,
placeholder = decoratedPlaceholder,
label = decoratedLabel,
@@ -201,7 +194,7 @@
}
OutlinedTextFieldLayout(
- modifier = decorationBoxModifier,
+ modifier = Modifier,
textField = innerTextField,
placeholder = decoratedPlaceholder,
label = decoratedLabel,
@@ -255,6 +248,13 @@
if (typography != null) ProvideTextStyle(typography, colorAndEmphasis) else colorAndEmphasis()
}
+// Developers need to handle invalid input manually. But since we don't provide an error message
+// slot API, we can set the default error message in case developers forget about it.
+internal fun Modifier.defaultErrorSemantics(
+ isError: Boolean,
+ defaultErrorMessage: String,
+): Modifier = if (isError) semantics { error(defaultErrorMessage) } else this
+
internal fun widthOrZero(placeable: Placeable?) = placeable?.width ?: 0
internal fun heightOrZero(placeable: Placeable?) = placeable?.height ?: 0
diff --git a/compose/material/material/src/desktopMain/kotlin/androidx/compose/material/DesktopAlertDialog.desktop.kt b/compose/material/material/src/desktopMain/kotlin/androidx/compose/material/DesktopAlertDialog.desktop.kt
index 1c886e0..125aaed 100644
--- a/compose/material/material/src/desktopMain/kotlin/androidx/compose/material/DesktopAlertDialog.desktop.kt
+++ b/compose/material/material/src/desktopMain/kotlin/androidx/compose/material/DesktopAlertDialog.desktop.kt
@@ -31,15 +31,15 @@
import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.unit.Dp
-import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.IntRect
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.LayoutDirection
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.window.Dialog as CoreDialog
import androidx.compose.ui.window.Popup
import androidx.compose.ui.window.PopupPositionProvider
import androidx.compose.ui.window.rememberDialogState
-import androidx.compose.ui.window.Dialog as CoreDialog
/**
* Alert dialog is a Dialog which interrupts the user with urgent information, details or actions.
diff --git a/compose/material/material/src/desktopMain/kotlin/androidx/compose/material/DesktopMenu.desktop.kt b/compose/material/material/src/desktopMain/kotlin/androidx/compose/material/DesktopMenu.desktop.kt
index ea91b6c..ba88fef 100644
--- a/compose/material/material/src/desktopMain/kotlin/androidx/compose/material/DesktopMenu.desktop.kt
+++ b/compose/material/material/src/desktopMain/kotlin/androidx/compose/material/DesktopMenu.desktop.kt
@@ -17,11 +17,11 @@
package androidx.compose.material
import androidx.compose.animation.core.MutableTransitionState
+import androidx.compose.foundation.ScrollState
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.RowScope
-import androidx.compose.foundation.ScrollState
import androidx.compose.foundation.rememberScrollState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Immutable
@@ -32,14 +32,14 @@
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.DpOffset
-import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.IntRect
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.LayoutDirection
-import androidx.compose.ui.window.rememberCursorPositionProvider
+import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Popup
import androidx.compose.ui.window.PopupPositionProvider
+import androidx.compose.ui.window.rememberCursorPositionProvider
/**
* A Material Design [dropdown menu](https://material.io/components/menus#dropdown-menu).
diff --git a/compose/material/material/src/desktopTest/kotlin/androidx/compose/material/DesktopAlertDialogTest.kt b/compose/material/material/src/desktopTest/kotlin/androidx/compose/material/DesktopAlertDialogTest.kt
index 0537f91..cc5e759 100644
--- a/compose/material/material/src/desktopTest/kotlin/androidx/compose/material/DesktopAlertDialogTest.kt
+++ b/compose/material/material/src/desktopTest/kotlin/androidx/compose/material/DesktopAlertDialogTest.kt
@@ -18,20 +18,20 @@
import androidx.compose.foundation.layout.size
import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.layout.positionInRoot
-import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.unit.Density
-import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
import com.google.common.truth.Truth.assertThat
-import org.junit.runners.JUnit4
-import org.junit.runner.RunWith
import org.junit.Rule
import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
@RunWith(JUnit4::class)
class DesktopAlertDialogTest {
diff --git a/compose/material/material/src/desktopTest/kotlin/androidx/compose/material/DesktopMenuTest.kt b/compose/material/material/src/desktopTest/kotlin/androidx/compose/material/DesktopMenuTest.kt
index d658276..7ec3efcb 100644
--- a/compose/material/material/src/desktopTest/kotlin/androidx/compose/material/DesktopMenuTest.kt
+++ b/compose/material/material/src/desktopTest/kotlin/androidx/compose/material/DesktopMenuTest.kt
@@ -23,9 +23,9 @@
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.LayoutDirection
import com.google.common.truth.Truth.assertThat
-import org.junit.runners.JUnit4
-import org.junit.runner.RunWith
import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
@RunWith(JUnit4::class)
class DesktopMenuTest {
diff --git a/compose/material3/material3-adaptive/api/public_plus_experimental_current.txt b/compose/material3/material3-adaptive/api/public_plus_experimental_current.txt
index e6f50d0..8ae70d9 100644
--- a/compose/material3/material3-adaptive/api/public_plus_experimental_current.txt
+++ b/compose/material3/material3-adaptive/api/public_plus_experimental_current.txt
@@ -1 +1,8 @@
// Signature format: 4.0
+package androidx.compose.material3.adaptive {
+
+ @kotlin.RequiresOptIn(message="This material3-adaptive API is experimental and is likely to change or to be" + "removed in the future.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalMaterial3AdaptiveApi {
+ }
+
+}
+
diff --git a/compose/material3/material3-adaptive/build.gradle b/compose/material3/material3-adaptive/build.gradle
index b1aaced..57252de 100644
--- a/compose/material3/material3-adaptive/build.gradle
+++ b/compose/material3/material3-adaptive/build.gradle
@@ -36,6 +36,7 @@
dependencies {
implementation(libs.kotlinStdlibCommon)
api(project(":compose:foundation:foundation"))
+ implementation(project(":compose:material3:material3"))
}
}
diff --git a/wear/compose/compose-material/src/desktopMain/kotlin/androidx/wear/compose/material/DefaultPlatformTextStyle.desktop.kt b/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ExperimentalMaterial3AdaptiveApi.kt
similarity index 69%
rename from wear/compose/compose-material/src/desktopMain/kotlin/androidx/wear/compose/material/DefaultPlatformTextStyle.desktop.kt
rename to compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ExperimentalMaterial3AdaptiveApi.kt
index fd5d994..eb78310 100644
--- a/wear/compose/compose-material/src/desktopMain/kotlin/androidx/wear/compose/material/DefaultPlatformTextStyle.desktop.kt
+++ b/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ExperimentalMaterial3AdaptiveApi.kt
@@ -14,8 +14,11 @@
* limitations under the License.
*/
-package androidx.wear.compose.material
+package androidx.compose.material3.adaptive
-import androidx.compose.ui.text.PlatformTextStyle
-
-internal actual fun defaultPlatformTextStyle(): PlatformTextStyle? = null
\ No newline at end of file
+@RequiresOptIn(
+ "This material3-adaptive API is experimental and is likely to change or to be" +
+ "removed in the future."
+)
+@Retention(AnnotationRetention.BINARY)
+annotation class ExperimentalMaterial3AdaptiveApi
\ No newline at end of file
diff --git a/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/NavigationSuite.kt b/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/NavigationSuite.kt
new file mode 100644
index 0000000..002f5f5
--- /dev/null
+++ b/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/NavigationSuite.kt
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.compose.material3.adaptive
+
+import androidx.compose.foundation.layout.Box
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Surface
+import androidx.compose.material3.contentColorFor
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.layout.Layout
+import androidx.compose.ui.layout.layoutId
+
+/**
+ * The Navigation Suite wraps the provided content and places the adequate provided navigation
+ * component on the screen according to the current NavigationLayoutType.
+ *
+ * TODO: Add the navigationLayoutType param
+ * @param modifier the [Modifier] to be applied to the navigation suite
+ * @param navigationComponent the navigation component to be displayed
+ * @param containerColor the color used for the background of the navigation suite. Use
+ * [Color.Transparent] to have no color.
+ * @param contentColor the preferred color for content inside the navigation suite. Defaults to
+ * either the matching content color for [containerColor], or to the current LocalContentColor if
+ * [containerColor] is not a color from the theme.
+ * @param content the content of your screen
+ *
+ * TODO: Remove "internal".
+ */
+@ExperimentalMaterial3AdaptiveApi
+@Composable
+internal fun NavigationSuite(
+ modifier: Modifier = Modifier,
+ navigationComponent: @Composable () -> Unit,
+ containerColor: Color = MaterialTheme.colorScheme.background,
+ contentColor: Color = contentColorFor(containerColor),
+ content: @Composable () -> Unit = {},
+) {
+ Surface(modifier = modifier, color = containerColor, contentColor = contentColor) {
+ NavigationSuiteLayout(
+ navigationComponent = navigationComponent,
+ content = content
+ )
+ }
+}
+
+/**
+ * Layout for a [NavigationSuite]'s content.
+ *
+ * TODO: Add the navigationLayoutType param.
+ * @param navigationComponent the navigation component of the [NavigationSuite]
+ * @param content the main body of the [NavigationSuite]
+ */
+@OptIn(ExperimentalMaterial3AdaptiveApi::class)
+@Composable
+private fun NavigationSuiteLayout(
+ navigationComponent: @Composable () -> Unit,
+ content: @Composable () -> Unit = {}
+) {
+ Layout(
+ content = {
+ Box(modifier = Modifier.layoutId("navigation")) { navigationComponent() }
+ Box(modifier = Modifier.layoutId("content")) { content() }
+ }
+ ) { _, constraints ->
+ val layoutHeight = constraints.maxHeight
+ val layoutWidth = constraints.maxWidth
+
+ layout(layoutWidth, layoutHeight) {
+ // TODO: Add the placement logic based on the NavigationLayoutType.
+ }
+ }
+}
+
+/* TODO: Add NavigationLayoutType class and NavigationSuiteFeature. */
\ No newline at end of file
diff --git a/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/androidx-compose-material3-adaptive-documentation.md b/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/androidx-compose-material3-adaptive-documentation.md
similarity index 100%
rename from compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/androidx-compose-material3-adaptive-documentation.md
rename to compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/androidx-compose-material3-adaptive-documentation.md
diff --git a/compose/material3/material3-window-size-class/samples/build.gradle b/compose/material3/material3-window-size-class/samples/build.gradle
index 4dc7891..71ffc63d1 100644
--- a/compose/material3/material3-window-size-class/samples/build.gradle
+++ b/compose/material3/material3-window-size-class/samples/build.gradle
@@ -36,7 +36,7 @@
}
androidx {
- name = "AndroidX Compose Material 3 Window Size Class Samples"
+ name = "Compose Material 3 Window Size Class Samples"
type = LibraryType.SAMPLES
inceptionYear = "2022"
description = "Contains the sample code for the Material 3 Window Size Class APIs"
diff --git a/compose/material3/material3/api/current.txt b/compose/material3/material3/api/current.txt
index b6e6d45..f18e335 100644
--- a/compose/material3/material3/api/current.txt
+++ b/compose/material3/material3/api/current.txt
@@ -22,14 +22,14 @@
}
public final class AndroidMenu_androidKt {
- method @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.foundation.ScrollState scrollState, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<? extends kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.foundation.ScrollState scrollState, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void DropdownMenuItem(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean enabled, optional androidx.compose.material3.MenuItemColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource);
}
public final class AppBarKt {
- method @androidx.compose.runtime.Composable public static void BottomAppBar(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? floatingActionButton, optional long containerColor, optional long contentColor, optional float tonalElevation, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.layout.WindowInsets windowInsets);
method @androidx.compose.runtime.Composable public static void BottomAppBar(optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional float tonalElevation, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.layout.WindowInsets windowInsets, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void BottomAppBar(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? floatingActionButton, optional long containerColor, optional long contentColor, optional float tonalElevation, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.layout.WindowInsets windowInsets);
}
public final class AssistChipDefaults {
@@ -392,9 +392,9 @@
}
public final class IconKt {
- method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+ method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
}
@androidx.compose.runtime.Immutable public final class IconToggleButtonColors {
@@ -462,8 +462,8 @@
}
public final class NavigationBarItemDefaults {
- method @androidx.compose.runtime.Composable public androidx.compose.material3.NavigationBarItemColors colors(optional long selectedIconColor, optional long selectedTextColor, optional long indicatorColor, optional long unselectedIconColor, optional long unselectedTextColor, optional long disabledIconColor, optional long disabledTextColor);
method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material3.NavigationBarItemColors colors(optional long selectedIconColor, optional long selectedTextColor, optional long indicatorColor, optional long unselectedIconColor, optional long unselectedTextColor);
+ method @androidx.compose.runtime.Composable public androidx.compose.material3.NavigationBarItemColors colors(optional long selectedIconColor, optional long selectedTextColor, optional long indicatorColor, optional long unselectedIconColor, optional long unselectedTextColor, optional long disabledIconColor, optional long disabledTextColor);
field public static final androidx.compose.material3.NavigationBarItemDefaults INSTANCE;
}
@@ -509,8 +509,8 @@
}
public final class NavigationRailItemDefaults {
- method @androidx.compose.runtime.Composable public androidx.compose.material3.NavigationRailItemColors colors(optional long selectedIconColor, optional long selectedTextColor, optional long indicatorColor, optional long unselectedIconColor, optional long unselectedTextColor, optional long disabledIconColor, optional long disabledTextColor);
method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material3.NavigationRailItemColors colors(optional long selectedIconColor, optional long selectedTextColor, optional long indicatorColor, optional long unselectedIconColor, optional long unselectedTextColor);
+ method @androidx.compose.runtime.Composable public androidx.compose.material3.NavigationRailItemColors colors(optional long selectedIconColor, optional long selectedTextColor, optional long indicatorColor, optional long unselectedIconColor, optional long unselectedTextColor, optional long disabledIconColor, optional long disabledTextColor);
field public static final androidx.compose.material3.NavigationRailItemDefaults INSTANCE;
}
@@ -536,8 +536,8 @@
}
public final class OutlinedTextFieldKt {
- method @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? prefix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? suffix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
method @androidx.compose.runtime.Composable public static void OutlinedTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? prefix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? suffix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
+ method @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? prefix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? suffix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
}
public final class ProgressIndicatorDefaults {
@@ -563,14 +563,14 @@
}
public final class ProgressIndicatorKt {
- method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth, optional long trackColor, optional int strokeCap);
+ method @Deprecated @androidx.compose.runtime.Composable public static void CircularProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth);
method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth, optional long trackColor, optional int strokeCap);
method @Deprecated @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth);
- method @Deprecated @androidx.compose.runtime.Composable public static void CircularProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth);
- method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional long trackColor, optional int strokeCap);
+ method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth, optional long trackColor, optional int strokeCap);
+ method @Deprecated @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional long trackColor);
method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional long trackColor, optional int strokeCap);
method @Deprecated @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional long trackColor);
- method @Deprecated @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional long trackColor);
+ method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional long trackColor, optional int strokeCap);
}
@androidx.compose.runtime.Immutable public final class RadioButtonColors {
@@ -685,14 +685,14 @@
@androidx.compose.runtime.Stable public final class SnackbarHostState {
ctor public SnackbarHostState();
method public androidx.compose.material3.SnackbarData? getCurrentSnackbarData();
- method public suspend Object? showSnackbar(String message, optional String? actionLabel, optional boolean withDismissAction, optional androidx.compose.material3.SnackbarDuration duration, optional kotlin.coroutines.Continuation<? super androidx.compose.material3.SnackbarResult>);
method public suspend Object? showSnackbar(androidx.compose.material3.SnackbarVisuals visuals, kotlin.coroutines.Continuation<? super androidx.compose.material3.SnackbarResult>);
+ method public suspend Object? showSnackbar(String message, optional String? actionLabel, optional boolean withDismissAction, optional androidx.compose.material3.SnackbarDuration duration, optional kotlin.coroutines.Continuation<? super androidx.compose.material3.SnackbarResult>);
property public final androidx.compose.material3.SnackbarData? currentSnackbarData;
}
public final class SnackbarKt {
- method @androidx.compose.runtime.Composable public static void Snackbar(optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? action, optional kotlin.jvm.functions.Function0<kotlin.Unit>? dismissAction, optional boolean actionOnNewLine, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional long actionContentColor, optional long dismissActionContentColor, kotlin.jvm.functions.Function0<kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void Snackbar(androidx.compose.material3.SnackbarData snackbarData, optional androidx.compose.ui.Modifier modifier, optional boolean actionOnNewLine, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional long actionColor, optional long actionContentColor, optional long dismissActionContentColor);
+ method @androidx.compose.runtime.Composable public static void Snackbar(optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? action, optional kotlin.jvm.functions.Function0<kotlin.Unit>? dismissAction, optional boolean actionOnNewLine, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional long actionContentColor, optional long dismissActionContentColor, kotlin.jvm.functions.Function0<kotlin.Unit> content);
}
public enum SnackbarResult {
@@ -730,9 +730,9 @@
public final class SurfaceKt {
method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Surface(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.Shape shape, optional long color, optional long contentColor, optional float tonalElevation, optional float shadowElevation, optional androidx.compose.foundation.BorderStroke? border, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Surface(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional long color, optional long contentColor, optional float tonalElevation, optional float shadowElevation, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Surface(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional long color, optional long contentColor, optional float tonalElevation, optional float shadowElevation, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Surface(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional long color, optional long contentColor, optional float tonalElevation, optional float shadowElevation, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Surface(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional long color, optional long contentColor, optional float tonalElevation, optional float shadowElevation, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.unit.Dp> getLocalAbsoluteTonalElevation();
property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.unit.Dp> LocalAbsoluteTonalElevation;
}
@@ -817,16 +817,16 @@
}
public final class TextFieldKt {
- method @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? prefix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? suffix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
method @androidx.compose.runtime.Composable public static void TextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? prefix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? suffix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
+ method @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? prefix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? suffix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
}
public final class TextKt {
method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
- method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method @Deprecated @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> LocalTextStyle;
}
diff --git a/compose/material3/material3/api/public_plus_experimental_current.txt b/compose/material3/material3/api/public_plus_experimental_current.txt
index a2231ee..6a94b94 100644
--- a/compose/material3/material3/api/public_plus_experimental_current.txt
+++ b/compose/material3/material3/api/public_plus_experimental_current.txt
@@ -18,19 +18,19 @@
}
public final class AndroidAlertDialog_androidKt {
- method @androidx.compose.runtime.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, kotlin.jvm.functions.Function0<kotlin.Unit> confirmButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? dismissButton, optional kotlin.jvm.functions.Function0<kotlin.Unit>? icon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? title, optional kotlin.jvm.functions.Function0<kotlin.Unit>? text, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long iconContentColor, optional long titleContentColor, optional long textContentColor, optional float tonalElevation, optional androidx.compose.ui.window.DialogProperties properties);
method @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.window.DialogProperties properties, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, kotlin.jvm.functions.Function0<kotlin.Unit> confirmButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? dismissButton, optional kotlin.jvm.functions.Function0<kotlin.Unit>? icon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? title, optional kotlin.jvm.functions.Function0<kotlin.Unit>? text, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long iconContentColor, optional long titleContentColor, optional long textContentColor, optional float tonalElevation, optional androidx.compose.ui.window.DialogProperties properties);
}
public final class AndroidMenu_androidKt {
- method @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.foundation.ScrollState scrollState, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<? extends kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.foundation.ScrollState scrollState, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void DropdownMenuItem(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean enabled, optional androidx.compose.material3.MenuItemColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource);
}
public final class AppBarKt {
- method @androidx.compose.runtime.Composable public static void BottomAppBar(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? floatingActionButton, optional long containerColor, optional long contentColor, optional float tonalElevation, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.layout.WindowInsets windowInsets);
method @androidx.compose.runtime.Composable public static void BottomAppBar(optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional float tonalElevation, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.layout.WindowInsets windowInsets, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void BottomAppBar(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? floatingActionButton, optional long containerColor, optional long contentColor, optional float tonalElevation, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.layout.WindowInsets windowInsets);
method @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void CenterAlignedTopAppBar(kotlin.jvm.functions.Function0<kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit> navigationIcon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions, optional androidx.compose.foundation.layout.WindowInsets windowInsets, optional androidx.compose.material3.TopAppBarColors colors, optional androidx.compose.material3.TopAppBarScrollBehavior? scrollBehavior);
method @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void LargeTopAppBar(kotlin.jvm.functions.Function0<kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit> navigationIcon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions, optional androidx.compose.foundation.layout.WindowInsets windowInsets, optional androidx.compose.material3.TopAppBarColors colors, optional androidx.compose.material3.TopAppBarScrollBehavior? scrollBehavior);
method @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void MediumTopAppBar(kotlin.jvm.functions.Function0<kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit> navigationIcon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions, optional androidx.compose.foundation.layout.WindowInsets windowInsets, optional androidx.compose.material3.TopAppBarColors colors, optional androidx.compose.material3.TopAppBarScrollBehavior? scrollBehavior);
@@ -87,12 +87,14 @@
method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getHiddenShape();
method @androidx.compose.runtime.Composable public long getScrimColor();
method public float getSheetPeekHeight();
+ method @androidx.compose.runtime.Composable public androidx.compose.foundation.layout.WindowInsets getWindowInsets();
property @androidx.compose.runtime.Composable public final long ContainerColor;
property public final float Elevation;
property @androidx.compose.runtime.Composable public final androidx.compose.ui.graphics.Shape ExpandedShape;
property @androidx.compose.runtime.Composable public final androidx.compose.ui.graphics.Shape HiddenShape;
property @androidx.compose.runtime.Composable public final long ScrimColor;
property public final float SheetPeekHeight;
+ property @androidx.compose.runtime.Composable public final androidx.compose.foundation.layout.WindowInsets windowInsets;
field public static final androidx.compose.material3.BottomSheetDefaults INSTANCE;
}
@@ -520,12 +522,12 @@
@androidx.compose.material3.ExperimentalMaterial3Api public final class ExposedDropdownMenuDefaults {
method @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public void TrailingIcon(boolean expanded);
method public androidx.compose.foundation.layout.PaddingValues getItemContentPadding();
- method @androidx.compose.runtime.Composable public androidx.compose.material3.TextFieldColors outlinedTextFieldColors(optional long focusedTextColor, optional long unfocusedTextColor, optional long disabledTextColor, optional long errorTextColor, optional long focusedContainerColor, optional long unfocusedContainerColor, optional long disabledContainerColor, optional long errorContainerColor, optional long cursorColor, optional long errorCursorColor, optional androidx.compose.foundation.text.selection.TextSelectionColors selectionColors, optional long focusedBorderColor, optional long unfocusedBorderColor, optional long disabledBorderColor, optional long errorBorderColor, optional long focusedLeadingIconColor, optional long unfocusedLeadingIconColor, optional long disabledLeadingIconColor, optional long errorLeadingIconColor, optional long focusedTrailingIconColor, optional long unfocusedTrailingIconColor, optional long disabledTrailingIconColor, optional long errorTrailingIconColor, optional long focusedLabelColor, optional long unfocusedLabelColor, optional long disabledLabelColor, optional long errorLabelColor, optional long focusedPlaceholderColor, optional long unfocusedPlaceholderColor, optional long disabledPlaceholderColor, optional long errorPlaceholderColor, optional long focusedPrefixColor, optional long unfocusedPrefixColor, optional long disabledPrefixColor, optional long errorPrefixColor, optional long focusedSuffixColor, optional long unfocusedSuffixColor, optional long disabledSuffixColor, optional long errorSuffixColor);
- method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material3.TextFieldColors outlinedTextFieldColors(optional long focusedTextColor, optional long unfocusedTextColor, optional long disabledTextColor, optional long errorTextColor, optional long containerColor, optional long errorContainerColor, optional long cursorColor, optional long errorCursorColor, optional androidx.compose.foundation.text.selection.TextSelectionColors selectionColors, optional long focusedBorderColor, optional long unfocusedBorderColor, optional long disabledBorderColor, optional long errorBorderColor, optional long focusedLeadingIconColor, optional long unfocusedLeadingIconColor, optional long disabledLeadingIconColor, optional long errorLeadingIconColor, optional long focusedTrailingIconColor, optional long unfocusedTrailingIconColor, optional long disabledTrailingIconColor, optional long errorTrailingIconColor, optional long focusedLabelColor, optional long unfocusedLabelColor, optional long disabledLabelColor, optional long errorLabelColor, optional long focusedPlaceholderColor, optional long unfocusedPlaceholderColor, optional long disabledPlaceholderColor, optional long errorPlaceholderColor, optional long focusedPrefixColor, optional long unfocusedPrefixColor, optional long disabledPrefixColor, optional long errorPrefixColor, optional long focusedSuffixColor, optional long unfocusedSuffixColor, optional long disabledSuffixColor, optional long errorSuffixColor);
method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material3.TextFieldColors outlinedTextFieldColors(optional long textColor, optional long disabledTextColor, optional long containerColor, optional long cursorColor, optional long errorCursorColor, optional androidx.compose.foundation.text.selection.TextSelectionColors selectionColors, optional long focusedBorderColor, optional long unfocusedBorderColor, optional long disabledBorderColor, optional long errorBorderColor, optional long focusedLeadingIconColor, optional long unfocusedLeadingIconColor, optional long disabledLeadingIconColor, optional long errorLeadingIconColor, optional long focusedTrailingIconColor, optional long unfocusedTrailingIconColor, optional long disabledTrailingIconColor, optional long errorTrailingIconColor, optional long focusedLabelColor, optional long unfocusedLabelColor, optional long disabledLabelColor, optional long errorLabelColor, optional long placeholderColor, optional long disabledPlaceholderColor);
- method @androidx.compose.runtime.Composable public androidx.compose.material3.TextFieldColors textFieldColors(optional long focusedTextColor, optional long unfocusedTextColor, optional long disabledTextColor, optional long errorTextColor, optional long focusedContainerColor, optional long unfocusedContainerColor, optional long disabledContainerColor, optional long errorContainerColor, optional long cursorColor, optional long errorCursorColor, optional androidx.compose.foundation.text.selection.TextSelectionColors selectionColors, optional long focusedIndicatorColor, optional long unfocusedIndicatorColor, optional long disabledIndicatorColor, optional long errorIndicatorColor, optional long focusedLeadingIconColor, optional long unfocusedLeadingIconColor, optional long disabledLeadingIconColor, optional long errorLeadingIconColor, optional long focusedTrailingIconColor, optional long unfocusedTrailingIconColor, optional long disabledTrailingIconColor, optional long errorTrailingIconColor, optional long focusedLabelColor, optional long unfocusedLabelColor, optional long disabledLabelColor, optional long errorLabelColor, optional long focusedPlaceholderColor, optional long unfocusedPlaceholderColor, optional long disabledPlaceholderColor, optional long errorPlaceholderColor, optional long focusedPrefixColor, optional long unfocusedPrefixColor, optional long disabledPrefixColor, optional long errorPrefixColor, optional long focusedSuffixColor, optional long unfocusedSuffixColor, optional long disabledSuffixColor, optional long errorSuffixColor);
- method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material3.TextFieldColors textFieldColors(optional long focusedTextColor, optional long unfocusedTextColor, optional long disabledTextColor, optional long errorTextColor, optional long containerColor, optional long errorContainerColor, optional long cursorColor, optional long errorCursorColor, optional androidx.compose.foundation.text.selection.TextSelectionColors selectionColors, optional long focusedIndicatorColor, optional long unfocusedIndicatorColor, optional long disabledIndicatorColor, optional long errorIndicatorColor, optional long focusedLeadingIconColor, optional long unfocusedLeadingIconColor, optional long disabledLeadingIconColor, optional long errorLeadingIconColor, optional long focusedTrailingIconColor, optional long unfocusedTrailingIconColor, optional long disabledTrailingIconColor, optional long errorTrailingIconColor, optional long focusedLabelColor, optional long unfocusedLabelColor, optional long disabledLabelColor, optional long errorLabelColor, optional long focusedPlaceholderColor, optional long unfocusedPlaceholderColor, optional long disabledPlaceholderColor, optional long errorPlaceholderColor, optional long focusedPrefixColor, optional long unfocusedPrefixColor, optional long disabledPrefixColor, optional long errorPrefixColor, optional long focusedSuffixColor, optional long unfocusedSuffixColor, optional long disabledSuffixColor, optional long errorSuffixColor);
+ method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material3.TextFieldColors outlinedTextFieldColors(optional long focusedTextColor, optional long unfocusedTextColor, optional long disabledTextColor, optional long errorTextColor, optional long containerColor, optional long errorContainerColor, optional long cursorColor, optional long errorCursorColor, optional androidx.compose.foundation.text.selection.TextSelectionColors selectionColors, optional long focusedBorderColor, optional long unfocusedBorderColor, optional long disabledBorderColor, optional long errorBorderColor, optional long focusedLeadingIconColor, optional long unfocusedLeadingIconColor, optional long disabledLeadingIconColor, optional long errorLeadingIconColor, optional long focusedTrailingIconColor, optional long unfocusedTrailingIconColor, optional long disabledTrailingIconColor, optional long errorTrailingIconColor, optional long focusedLabelColor, optional long unfocusedLabelColor, optional long disabledLabelColor, optional long errorLabelColor, optional long focusedPlaceholderColor, optional long unfocusedPlaceholderColor, optional long disabledPlaceholderColor, optional long errorPlaceholderColor, optional long focusedPrefixColor, optional long unfocusedPrefixColor, optional long disabledPrefixColor, optional long errorPrefixColor, optional long focusedSuffixColor, optional long unfocusedSuffixColor, optional long disabledSuffixColor, optional long errorSuffixColor);
+ method @androidx.compose.runtime.Composable public androidx.compose.material3.TextFieldColors outlinedTextFieldColors(optional long focusedTextColor, optional long unfocusedTextColor, optional long disabledTextColor, optional long errorTextColor, optional long focusedContainerColor, optional long unfocusedContainerColor, optional long disabledContainerColor, optional long errorContainerColor, optional long cursorColor, optional long errorCursorColor, optional androidx.compose.foundation.text.selection.TextSelectionColors selectionColors, optional long focusedBorderColor, optional long unfocusedBorderColor, optional long disabledBorderColor, optional long errorBorderColor, optional long focusedLeadingIconColor, optional long unfocusedLeadingIconColor, optional long disabledLeadingIconColor, optional long errorLeadingIconColor, optional long focusedTrailingIconColor, optional long unfocusedTrailingIconColor, optional long disabledTrailingIconColor, optional long errorTrailingIconColor, optional long focusedLabelColor, optional long unfocusedLabelColor, optional long disabledLabelColor, optional long errorLabelColor, optional long focusedPlaceholderColor, optional long unfocusedPlaceholderColor, optional long disabledPlaceholderColor, optional long errorPlaceholderColor, optional long focusedPrefixColor, optional long unfocusedPrefixColor, optional long disabledPrefixColor, optional long errorPrefixColor, optional long focusedSuffixColor, optional long unfocusedSuffixColor, optional long disabledSuffixColor, optional long errorSuffixColor);
method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material3.TextFieldColors textFieldColors(optional long textColor, optional long disabledTextColor, optional long containerColor, optional long cursorColor, optional long errorCursorColor, optional androidx.compose.foundation.text.selection.TextSelectionColors selectionColors, optional long focusedIndicatorColor, optional long unfocusedIndicatorColor, optional long disabledIndicatorColor, optional long errorIndicatorColor, optional long focusedLeadingIconColor, optional long unfocusedLeadingIconColor, optional long disabledLeadingIconColor, optional long errorLeadingIconColor, optional long focusedTrailingIconColor, optional long unfocusedTrailingIconColor, optional long disabledTrailingIconColor, optional long errorTrailingIconColor, optional long focusedLabelColor, optional long unfocusedLabelColor, optional long disabledLabelColor, optional long errorLabelColor, optional long placeholderColor, optional long disabledPlaceholderColor);
+ method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material3.TextFieldColors textFieldColors(optional long focusedTextColor, optional long unfocusedTextColor, optional long disabledTextColor, optional long errorTextColor, optional long containerColor, optional long errorContainerColor, optional long cursorColor, optional long errorCursorColor, optional androidx.compose.foundation.text.selection.TextSelectionColors selectionColors, optional long focusedIndicatorColor, optional long unfocusedIndicatorColor, optional long disabledIndicatorColor, optional long errorIndicatorColor, optional long focusedLeadingIconColor, optional long unfocusedLeadingIconColor, optional long disabledLeadingIconColor, optional long errorLeadingIconColor, optional long focusedTrailingIconColor, optional long unfocusedTrailingIconColor, optional long disabledTrailingIconColor, optional long errorTrailingIconColor, optional long focusedLabelColor, optional long unfocusedLabelColor, optional long disabledLabelColor, optional long errorLabelColor, optional long focusedPlaceholderColor, optional long unfocusedPlaceholderColor, optional long disabledPlaceholderColor, optional long errorPlaceholderColor, optional long focusedPrefixColor, optional long unfocusedPrefixColor, optional long disabledPrefixColor, optional long errorPrefixColor, optional long focusedSuffixColor, optional long unfocusedSuffixColor, optional long disabledSuffixColor, optional long errorSuffixColor);
+ method @androidx.compose.runtime.Composable public androidx.compose.material3.TextFieldColors textFieldColors(optional long focusedTextColor, optional long unfocusedTextColor, optional long disabledTextColor, optional long errorTextColor, optional long focusedContainerColor, optional long unfocusedContainerColor, optional long disabledContainerColor, optional long errorContainerColor, optional long cursorColor, optional long errorCursorColor, optional androidx.compose.foundation.text.selection.TextSelectionColors selectionColors, optional long focusedIndicatorColor, optional long unfocusedIndicatorColor, optional long disabledIndicatorColor, optional long errorIndicatorColor, optional long focusedLeadingIconColor, optional long unfocusedLeadingIconColor, optional long disabledLeadingIconColor, optional long errorLeadingIconColor, optional long focusedTrailingIconColor, optional long unfocusedTrailingIconColor, optional long disabledTrailingIconColor, optional long errorTrailingIconColor, optional long focusedLabelColor, optional long unfocusedLabelColor, optional long disabledLabelColor, optional long errorLabelColor, optional long focusedPlaceholderColor, optional long unfocusedPlaceholderColor, optional long disabledPlaceholderColor, optional long errorPlaceholderColor, optional long focusedPrefixColor, optional long unfocusedPrefixColor, optional long disabledPrefixColor, optional long errorPrefixColor, optional long focusedSuffixColor, optional long unfocusedSuffixColor, optional long disabledSuffixColor, optional long errorSuffixColor);
property public final androidx.compose.foundation.layout.PaddingValues ItemContentPadding;
field public static final androidx.compose.material3.ExposedDropdownMenuDefaults INSTANCE;
}
@@ -623,9 +625,9 @@
}
public final class IconKt {
- method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+ method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
}
@androidx.compose.runtime.Immutable public final class IconToggleButtonColors {
@@ -699,7 +701,7 @@
}
public final class ModalBottomSheet_androidKt {
- method @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void ModalBottomSheet(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material3.SheetState sheetState, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional float tonalElevation, optional long scrimColor, optional kotlin.jvm.functions.Function0<kotlin.Unit>? dragHandle, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+ method @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void ModalBottomSheet(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.material3.SheetState sheetState, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional float tonalElevation, optional long scrimColor, optional kotlin.jvm.functions.Function0<kotlin.Unit>? dragHandle, optional androidx.compose.foundation.layout.WindowInsets windowInsets, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
method @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static androidx.compose.material3.SheetState rememberModalBottomSheetState(optional boolean skipPartiallyExpanded, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.SheetValue,java.lang.Boolean> confirmValueChange);
}
@@ -717,8 +719,8 @@
}
public final class NavigationBarItemDefaults {
- method @androidx.compose.runtime.Composable public androidx.compose.material3.NavigationBarItemColors colors(optional long selectedIconColor, optional long selectedTextColor, optional long indicatorColor, optional long unselectedIconColor, optional long unselectedTextColor, optional long disabledIconColor, optional long disabledTextColor);
method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material3.NavigationBarItemColors colors(optional long selectedIconColor, optional long selectedTextColor, optional long indicatorColor, optional long unselectedIconColor, optional long unselectedTextColor);
+ method @androidx.compose.runtime.Composable public androidx.compose.material3.NavigationBarItemColors colors(optional long selectedIconColor, optional long selectedTextColor, optional long indicatorColor, optional long unselectedIconColor, optional long unselectedTextColor, optional long disabledIconColor, optional long disabledTextColor);
field public static final androidx.compose.material3.NavigationBarItemDefaults INSTANCE;
}
@@ -764,8 +766,8 @@
}
public final class NavigationRailItemDefaults {
- method @androidx.compose.runtime.Composable public androidx.compose.material3.NavigationRailItemColors colors(optional long selectedIconColor, optional long selectedTextColor, optional long indicatorColor, optional long unselectedIconColor, optional long unselectedTextColor, optional long disabledIconColor, optional long disabledTextColor);
method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material3.NavigationRailItemColors colors(optional long selectedIconColor, optional long selectedTextColor, optional long indicatorColor, optional long unselectedIconColor, optional long unselectedTextColor);
+ method @androidx.compose.runtime.Composable public androidx.compose.material3.NavigationRailItemColors colors(optional long selectedIconColor, optional long selectedTextColor, optional long indicatorColor, optional long unselectedIconColor, optional long unselectedTextColor, optional long disabledIconColor, optional long disabledTextColor);
field public static final androidx.compose.material3.NavigationRailItemDefaults INSTANCE;
}
@@ -793,10 +795,10 @@
}
public final class OutlinedTextFieldKt {
- method @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? prefix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? suffix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
+ method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void OutlinedTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
method @androidx.compose.runtime.Composable public static void OutlinedTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? prefix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? suffix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
- method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void OutlinedTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
+ method @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? prefix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? suffix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
}
@androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Stable public interface PlainTooltipState extends androidx.compose.material3.TooltipState {
@@ -825,14 +827,14 @@
}
public final class ProgressIndicatorKt {
- method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth, optional long trackColor, optional int strokeCap);
+ method @Deprecated @androidx.compose.runtime.Composable public static void CircularProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth);
method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth, optional long trackColor, optional int strokeCap);
method @Deprecated @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth);
- method @Deprecated @androidx.compose.runtime.Composable public static void CircularProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth);
- method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional long trackColor, optional int strokeCap);
+ method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth, optional long trackColor, optional int strokeCap);
+ method @Deprecated @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional long trackColor);
method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional long trackColor, optional int strokeCap);
method @Deprecated @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional long trackColor);
- method @Deprecated @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional long trackColor);
+ method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional long trackColor, optional int strokeCap);
}
@androidx.compose.runtime.Immutable public final class RadioButtonColors {
@@ -891,8 +893,8 @@
method public float getInputFieldHeight();
method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getInputFieldShape();
method @androidx.compose.runtime.Composable public androidx.compose.foundation.layout.WindowInsets getWindowInsets();
- method @androidx.compose.runtime.Composable public androidx.compose.material3.TextFieldColors inputFieldColors(optional long focusedTextColor, optional long unfocusedTextColor, optional long disabledTextColor, optional long cursorColor, optional androidx.compose.foundation.text.selection.TextSelectionColors selectionColors, optional long focusedLeadingIconColor, optional long unfocusedLeadingIconColor, optional long disabledLeadingIconColor, optional long focusedTrailingIconColor, optional long unfocusedTrailingIconColor, optional long disabledTrailingIconColor, optional long focusedPlaceholderColor, optional long unfocusedPlaceholderColor, optional long disabledPlaceholderColor);
method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material3.TextFieldColors! inputFieldColors(optional long textColor, optional long disabledTextColor, optional long cursorColor, optional androidx.compose.foundation.text.selection.TextSelectionColors selectionColors, optional long focusedLeadingIconColor, optional long unfocusedLeadingIconColor, optional long disabledLeadingIconColor, optional long focusedTrailingIconColor, optional long unfocusedTrailingIconColor, optional long disabledTrailingIconColor, optional long placeholderColor, optional long disabledPlaceholderColor);
+ method @androidx.compose.runtime.Composable public androidx.compose.material3.TextFieldColors inputFieldColors(optional long focusedTextColor, optional long unfocusedTextColor, optional long disabledTextColor, optional long cursorColor, optional androidx.compose.foundation.text.selection.TextSelectionColors selectionColors, optional long focusedLeadingIconColor, optional long unfocusedLeadingIconColor, optional long disabledLeadingIconColor, optional long focusedTrailingIconColor, optional long unfocusedTrailingIconColor, optional long disabledTrailingIconColor, optional long focusedPlaceholderColor, optional long unfocusedPlaceholderColor, optional long disabledPlaceholderColor);
property public final float Elevation;
property public final float InputFieldHeight;
property @androidx.compose.runtime.Composable public final androidx.compose.ui.graphics.Shape dockedShape;
@@ -996,9 +998,9 @@
public final class SliderKt {
method @androidx.compose.runtime.Composable public static void RangeSlider(kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> value, kotlin.jvm.functions.Function1<? super kotlin.ranges.ClosedFloatingPointRange<java.lang.Float>,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional int steps, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onValueChangeFinished, optional androidx.compose.material3.SliderColors colors);
method @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void RangeSlider(kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> value, kotlin.jvm.functions.Function1<? super kotlin.ranges.ClosedFloatingPointRange<java.lang.Float>,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onValueChangeFinished, optional androidx.compose.material3.SliderColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource startInteractionSource, optional androidx.compose.foundation.interaction.MutableInteractionSource endInteractionSource, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.SliderPositions,kotlin.Unit> startThumb, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.SliderPositions,kotlin.Unit> endThumb, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.SliderPositions,kotlin.Unit> track, optional int steps);
- method @androidx.compose.runtime.Composable public static void Slider(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional int steps, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onValueChangeFinished, optional androidx.compose.material3.SliderColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource);
- method @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void Slider(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onValueChangeFinished, optional androidx.compose.material3.SliderColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional int steps, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.SliderState,kotlin.Unit> thumb, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.SliderState,kotlin.Unit> track, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange);
method @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void Slider(androidx.compose.material3.SliderState state, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.material3.SliderColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.SliderState,kotlin.Unit> thumb, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.SliderState,kotlin.Unit> track);
+ method @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void Slider(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onValueChangeFinished, optional androidx.compose.material3.SliderColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional int steps, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.SliderState,kotlin.Unit> thumb, optional kotlin.jvm.functions.Function1<? super androidx.compose.material3.SliderState,kotlin.Unit> track, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange);
+ method @androidx.compose.runtime.Composable public static void Slider(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional int steps, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onValueChangeFinished, optional androidx.compose.material3.SliderColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource);
}
@androidx.compose.runtime.Stable public final class SliderPositions {
@@ -1061,14 +1063,14 @@
@androidx.compose.runtime.Stable public final class SnackbarHostState {
ctor public SnackbarHostState();
method public androidx.compose.material3.SnackbarData? getCurrentSnackbarData();
- method public suspend Object? showSnackbar(String message, optional String? actionLabel, optional boolean withDismissAction, optional androidx.compose.material3.SnackbarDuration duration, optional kotlin.coroutines.Continuation<? super androidx.compose.material3.SnackbarResult>);
method public suspend Object? showSnackbar(androidx.compose.material3.SnackbarVisuals visuals, kotlin.coroutines.Continuation<? super androidx.compose.material3.SnackbarResult>);
+ method public suspend Object? showSnackbar(String message, optional String? actionLabel, optional boolean withDismissAction, optional androidx.compose.material3.SnackbarDuration duration, optional kotlin.coroutines.Continuation<? super androidx.compose.material3.SnackbarResult>);
property public final androidx.compose.material3.SnackbarData? currentSnackbarData;
}
public final class SnackbarKt {
- method @androidx.compose.runtime.Composable public static void Snackbar(optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? action, optional kotlin.jvm.functions.Function0<kotlin.Unit>? dismissAction, optional boolean actionOnNewLine, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional long actionContentColor, optional long dismissActionContentColor, kotlin.jvm.functions.Function0<kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void Snackbar(androidx.compose.material3.SnackbarData snackbarData, optional androidx.compose.ui.Modifier modifier, optional boolean actionOnNewLine, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional long actionColor, optional long actionContentColor, optional long dismissActionContentColor);
+ method @androidx.compose.runtime.Composable public static void Snackbar(optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? action, optional kotlin.jvm.functions.Function0<kotlin.Unit>? dismissAction, optional boolean actionOnNewLine, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional long actionContentColor, optional long dismissActionContentColor, kotlin.jvm.functions.Function0<kotlin.Unit> content);
}
public enum SnackbarResult {
@@ -1106,9 +1108,9 @@
public final class SurfaceKt {
method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Surface(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.Shape shape, optional long color, optional long contentColor, optional float tonalElevation, optional float shadowElevation, optional androidx.compose.foundation.BorderStroke? border, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Surface(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional long color, optional long contentColor, optional float tonalElevation, optional float shadowElevation, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Surface(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional long color, optional long contentColor, optional float tonalElevation, optional float shadowElevation, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Surface(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional long color, optional long contentColor, optional float tonalElevation, optional float shadowElevation, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Surface(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional long color, optional long contentColor, optional float tonalElevation, optional float shadowElevation, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.unit.Dp> getLocalAbsoluteTonalElevation();
property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.unit.Dp> LocalAbsoluteTonalElevation;
}
@@ -1180,10 +1182,10 @@
method @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public void DecorationBox(String value, kotlin.jvm.functions.Function0<kotlin.Unit> innerTextField, boolean enabled, boolean singleLine, androidx.compose.ui.text.input.VisualTransformation visualTransformation, androidx.compose.foundation.interaction.InteractionSource interactionSource, optional boolean isError, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? prefix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? suffix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function0<kotlin.Unit> container);
method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public void FilledContainerBox(boolean enabled, boolean isError, androidx.compose.foundation.interaction.InteractionSource interactionSource, androidx.compose.material3.TextFieldColors colors, optional androidx.compose.ui.graphics.Shape shape);
method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public void OutlinedBorderContainerBox(boolean enabled, boolean isError, androidx.compose.foundation.interaction.InteractionSource interactionSource, androidx.compose.material3.TextFieldColors colors, optional androidx.compose.ui.graphics.Shape shape, optional float focusedBorderThickness, optional float unfocusedBorderThickness);
- method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public void OutlinedTextFieldDecorationBox(String value, kotlin.jvm.functions.Function0<kotlin.Unit> innerTextField, boolean enabled, boolean singleLine, androidx.compose.ui.text.input.VisualTransformation visualTransformation, androidx.compose.foundation.interaction.InteractionSource interactionSource, optional boolean isError, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? prefix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? suffix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional androidx.compose.material3.TextFieldColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function0<kotlin.Unit> container);
method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public void OutlinedTextFieldDecorationBox(String value, kotlin.jvm.functions.Function0<? extends kotlin.Unit> innerTextField, boolean enabled, boolean singleLine, androidx.compose.ui.text.input.VisualTransformation visualTransformation, androidx.compose.foundation.interaction.InteractionSource interactionSource, optional boolean isError, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? supportingText, optional androidx.compose.material3.TextFieldColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit> container);
- method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public void TextFieldDecorationBox(String value, kotlin.jvm.functions.Function0<kotlin.Unit> innerTextField, boolean enabled, boolean singleLine, androidx.compose.ui.text.input.VisualTransformation visualTransformation, androidx.compose.foundation.interaction.InteractionSource interactionSource, optional boolean isError, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? prefix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? suffix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function0<kotlin.Unit> container);
+ method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public void OutlinedTextFieldDecorationBox(String value, kotlin.jvm.functions.Function0<kotlin.Unit> innerTextField, boolean enabled, boolean singleLine, androidx.compose.ui.text.input.VisualTransformation visualTransformation, androidx.compose.foundation.interaction.InteractionSource interactionSource, optional boolean isError, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? prefix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? suffix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional androidx.compose.material3.TextFieldColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function0<kotlin.Unit> container);
method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public void TextFieldDecorationBox(String value, kotlin.jvm.functions.Function0<? extends kotlin.Unit> innerTextField, boolean enabled, boolean singleLine, androidx.compose.ui.text.input.VisualTransformation visualTransformation, androidx.compose.foundation.interaction.InteractionSource interactionSource, optional boolean isError, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? supportingText, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit> container);
+ method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public void TextFieldDecorationBox(String value, kotlin.jvm.functions.Function0<kotlin.Unit> innerTextField, boolean enabled, boolean singleLine, androidx.compose.ui.text.input.VisualTransformation visualTransformation, androidx.compose.foundation.interaction.InteractionSource interactionSource, optional boolean isError, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? prefix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? suffix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function0<kotlin.Unit> container);
method @androidx.compose.runtime.Composable public androidx.compose.material3.TextFieldColors colors(optional long focusedTextColor, optional long unfocusedTextColor, optional long disabledTextColor, optional long errorTextColor, optional long focusedContainerColor, optional long unfocusedContainerColor, optional long disabledContainerColor, optional long errorContainerColor, optional long cursorColor, optional long errorCursorColor, optional androidx.compose.foundation.text.selection.TextSelectionColors selectionColors, optional long focusedIndicatorColor, optional long unfocusedIndicatorColor, optional long disabledIndicatorColor, optional long errorIndicatorColor, optional long focusedLeadingIconColor, optional long unfocusedLeadingIconColor, optional long disabledLeadingIconColor, optional long errorLeadingIconColor, optional long focusedTrailingIconColor, optional long unfocusedTrailingIconColor, optional long disabledTrailingIconColor, optional long errorTrailingIconColor, optional long focusedLabelColor, optional long unfocusedLabelColor, optional long disabledLabelColor, optional long errorLabelColor, optional long focusedPlaceholderColor, optional long unfocusedPlaceholderColor, optional long disabledPlaceholderColor, optional long errorPlaceholderColor, optional long focusedSupportingTextColor, optional long unfocusedSupportingTextColor, optional long disabledSupportingTextColor, optional long errorSupportingTextColor, optional long focusedPrefixColor, optional long unfocusedPrefixColor, optional long disabledPrefixColor, optional long errorPrefixColor, optional long focusedSuffixColor, optional long unfocusedSuffixColor, optional long disabledSuffixColor, optional long errorSuffixColor);
method public androidx.compose.foundation.layout.PaddingValues contentPaddingWithLabel(optional float start, optional float end, optional float top, optional float bottom);
method public androidx.compose.foundation.layout.PaddingValues contentPaddingWithoutLabel(optional float start, optional float top, optional float end, optional float bottom);
@@ -1197,11 +1199,11 @@
method @Deprecated public float getUnfocusedBorderThickness();
method public float getUnfocusedIndicatorThickness();
method @androidx.compose.material3.ExperimentalMaterial3Api public androidx.compose.ui.Modifier indicatorLine(androidx.compose.ui.Modifier, boolean enabled, boolean isError, androidx.compose.foundation.interaction.InteractionSource interactionSource, androidx.compose.material3.TextFieldColors colors, optional float focusedIndicatorLineThickness, optional float unfocusedIndicatorLineThickness);
- method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public androidx.compose.material3.TextFieldColors outlinedTextFieldColors(optional long focusedTextColor, optional long unfocusedTextColor, optional long disabledTextColor, optional long errorTextColor, optional long containerColor, optional long errorContainerColor, optional long cursorColor, optional long errorCursorColor, optional androidx.compose.foundation.text.selection.TextSelectionColors selectionColors, optional long focusedBorderColor, optional long unfocusedBorderColor, optional long disabledBorderColor, optional long errorBorderColor, optional long focusedLeadingIconColor, optional long unfocusedLeadingIconColor, optional long disabledLeadingIconColor, optional long errorLeadingIconColor, optional long focusedTrailingIconColor, optional long unfocusedTrailingIconColor, optional long disabledTrailingIconColor, optional long errorTrailingIconColor, optional long focusedLabelColor, optional long unfocusedLabelColor, optional long disabledLabelColor, optional long errorLabelColor, optional long focusedPlaceholderColor, optional long unfocusedPlaceholderColor, optional long disabledPlaceholderColor, optional long errorPlaceholderColor, optional long focusedSupportingTextColor, optional long unfocusedSupportingTextColor, optional long disabledSupportingTextColor, optional long errorSupportingTextColor, optional long focusedPrefixColor, optional long unfocusedPrefixColor, optional long disabledPrefixColor, optional long errorPrefixColor, optional long focusedSuffixColor, optional long unfocusedSuffixColor, optional long disabledSuffixColor, optional long errorSuffixColor);
method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public androidx.compose.material3.TextFieldColors outlinedTextFieldColors(optional long textColor, optional long disabledTextColor, optional long containerColor, optional long cursorColor, optional long errorCursorColor, optional androidx.compose.foundation.text.selection.TextSelectionColors selectionColors, optional long focusedBorderColor, optional long unfocusedBorderColor, optional long disabledBorderColor, optional long errorBorderColor, optional long focusedLeadingIconColor, optional long unfocusedLeadingIconColor, optional long disabledLeadingIconColor, optional long errorLeadingIconColor, optional long focusedTrailingIconColor, optional long unfocusedTrailingIconColor, optional long disabledTrailingIconColor, optional long errorTrailingIconColor, optional long focusedLabelColor, optional long unfocusedLabelColor, optional long disabledLabelColor, optional long errorLabelColor, optional long placeholderColor, optional long disabledPlaceholderColor, optional long focusedSupportingTextColor, optional long unfocusedSupportingTextColor, optional long disabledSupportingTextColor, optional long errorSupportingTextColor, optional long focusedPrefixColor, optional long unfocusedPrefixColor, optional long disabledPrefixColor, optional long errorPrefixColor, optional long focusedSuffixColor, optional long unfocusedSuffixColor, optional long disabledSuffixColor, optional long errorSuffixColor);
+ method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public androidx.compose.material3.TextFieldColors outlinedTextFieldColors(optional long focusedTextColor, optional long unfocusedTextColor, optional long disabledTextColor, optional long errorTextColor, optional long containerColor, optional long errorContainerColor, optional long cursorColor, optional long errorCursorColor, optional androidx.compose.foundation.text.selection.TextSelectionColors selectionColors, optional long focusedBorderColor, optional long unfocusedBorderColor, optional long disabledBorderColor, optional long errorBorderColor, optional long focusedLeadingIconColor, optional long unfocusedLeadingIconColor, optional long disabledLeadingIconColor, optional long errorLeadingIconColor, optional long focusedTrailingIconColor, optional long unfocusedTrailingIconColor, optional long disabledTrailingIconColor, optional long errorTrailingIconColor, optional long focusedLabelColor, optional long unfocusedLabelColor, optional long disabledLabelColor, optional long errorLabelColor, optional long focusedPlaceholderColor, optional long unfocusedPlaceholderColor, optional long disabledPlaceholderColor, optional long errorPlaceholderColor, optional long focusedSupportingTextColor, optional long unfocusedSupportingTextColor, optional long disabledSupportingTextColor, optional long errorSupportingTextColor, optional long focusedPrefixColor, optional long unfocusedPrefixColor, optional long disabledPrefixColor, optional long errorPrefixColor, optional long focusedSuffixColor, optional long unfocusedSuffixColor, optional long disabledSuffixColor, optional long errorSuffixColor);
method @Deprecated public androidx.compose.foundation.layout.PaddingValues outlinedTextFieldPadding(optional float start, optional float top, optional float end, optional float bottom);
- method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public androidx.compose.material3.TextFieldColors textFieldColors(optional long focusedTextColor, optional long unfocusedTextColor, optional long disabledTextColor, optional long errorTextColor, optional long containerColor, optional long errorContainerColor, optional long cursorColor, optional long errorCursorColor, optional androidx.compose.foundation.text.selection.TextSelectionColors selectionColors, optional long focusedIndicatorColor, optional long unfocusedIndicatorColor, optional long disabledIndicatorColor, optional long errorIndicatorColor, optional long focusedLeadingIconColor, optional long unfocusedLeadingIconColor, optional long disabledLeadingIconColor, optional long errorLeadingIconColor, optional long focusedTrailingIconColor, optional long unfocusedTrailingIconColor, optional long disabledTrailingIconColor, optional long errorTrailingIconColor, optional long focusedLabelColor, optional long unfocusedLabelColor, optional long disabledLabelColor, optional long errorLabelColor, optional long focusedPlaceholderColor, optional long unfocusedPlaceholderColor, optional long disabledPlaceholderColor, optional long errorPlaceholderColor, optional long focusedSupportingTextColor, optional long unfocusedSupportingTextColor, optional long disabledSupportingTextColor, optional long errorSupportingTextColor, optional long focusedPrefixColor, optional long unfocusedPrefixColor, optional long disabledPrefixColor, optional long errorPrefixColor, optional long focusedSuffixColor, optional long unfocusedSuffixColor, optional long disabledSuffixColor, optional long errorSuffixColor);
method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public androidx.compose.material3.TextFieldColors textFieldColors(optional long textColor, optional long disabledTextColor, optional long containerColor, optional long cursorColor, optional long errorCursorColor, optional androidx.compose.foundation.text.selection.TextSelectionColors selectionColors, optional long focusedIndicatorColor, optional long unfocusedIndicatorColor, optional long disabledIndicatorColor, optional long errorIndicatorColor, optional long focusedLeadingIconColor, optional long unfocusedLeadingIconColor, optional long disabledLeadingIconColor, optional long errorLeadingIconColor, optional long focusedTrailingIconColor, optional long unfocusedTrailingIconColor, optional long disabledTrailingIconColor, optional long errorTrailingIconColor, optional long focusedLabelColor, optional long unfocusedLabelColor, optional long disabledLabelColor, optional long errorLabelColor, optional long placeholderColor, optional long disabledPlaceholderColor, optional long focusedSupportingTextColor, optional long unfocusedSupportingTextColor, optional long disabledSupportingTextColor, optional long errorSupportingTextColor, optional long focusedPrefixColor, optional long unfocusedPrefixColor, optional long disabledPrefixColor, optional long errorPrefixColor, optional long focusedSuffixColor, optional long unfocusedSuffixColor, optional long disabledSuffixColor, optional long errorSuffixColor);
+ method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public androidx.compose.material3.TextFieldColors textFieldColors(optional long focusedTextColor, optional long unfocusedTextColor, optional long disabledTextColor, optional long errorTextColor, optional long containerColor, optional long errorContainerColor, optional long cursorColor, optional long errorCursorColor, optional androidx.compose.foundation.text.selection.TextSelectionColors selectionColors, optional long focusedIndicatorColor, optional long unfocusedIndicatorColor, optional long disabledIndicatorColor, optional long errorIndicatorColor, optional long focusedLeadingIconColor, optional long unfocusedLeadingIconColor, optional long disabledLeadingIconColor, optional long errorLeadingIconColor, optional long focusedTrailingIconColor, optional long unfocusedTrailingIconColor, optional long disabledTrailingIconColor, optional long errorTrailingIconColor, optional long focusedLabelColor, optional long unfocusedLabelColor, optional long disabledLabelColor, optional long errorLabelColor, optional long focusedPlaceholderColor, optional long unfocusedPlaceholderColor, optional long disabledPlaceholderColor, optional long errorPlaceholderColor, optional long focusedSupportingTextColor, optional long unfocusedSupportingTextColor, optional long disabledSupportingTextColor, optional long errorSupportingTextColor, optional long focusedPrefixColor, optional long unfocusedPrefixColor, optional long disabledPrefixColor, optional long errorPrefixColor, optional long focusedSuffixColor, optional long unfocusedSuffixColor, optional long disabledSuffixColor, optional long errorSuffixColor);
method @Deprecated public androidx.compose.foundation.layout.PaddingValues textFieldWithLabelPadding(optional float start, optional float end, optional float top, optional float bottom);
method @Deprecated public androidx.compose.foundation.layout.PaddingValues textFieldWithoutLabelPadding(optional float start, optional float top, optional float end, optional float bottom);
property @Deprecated public final float FocusedBorderThickness;
@@ -1217,18 +1219,18 @@
}
public final class TextFieldKt {
- method @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? prefix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? suffix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
+ method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void TextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
method @androidx.compose.runtime.Composable public static void TextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? prefix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? suffix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
- method @Deprecated @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void TextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,? extends kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
+ method @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? prefix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? suffix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
}
public final class TextKt {
method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
- method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method @Deprecated @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> LocalTextStyle;
}
diff --git a/compose/material3/material3/api/restricted_current.txt b/compose/material3/material3/api/restricted_current.txt
index b6e6d45..f18e335 100644
--- a/compose/material3/material3/api/restricted_current.txt
+++ b/compose/material3/material3/api/restricted_current.txt
@@ -22,14 +22,14 @@
}
public final class AndroidMenu_androidKt {
- method @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.foundation.ScrollState scrollState, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<? extends kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void DropdownMenu(boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional long offset, optional androidx.compose.foundation.ScrollState scrollState, optional androidx.compose.ui.window.PopupProperties properties, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void DropdownMenuItem(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional boolean enabled, optional androidx.compose.material3.MenuItemColors colors, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource);
}
public final class AppBarKt {
- method @androidx.compose.runtime.Composable public static void BottomAppBar(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? floatingActionButton, optional long containerColor, optional long contentColor, optional float tonalElevation, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.layout.WindowInsets windowInsets);
method @androidx.compose.runtime.Composable public static void BottomAppBar(optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional float tonalElevation, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.layout.WindowInsets windowInsets, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void BottomAppBar(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? floatingActionButton, optional long containerColor, optional long contentColor, optional float tonalElevation, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.foundation.layout.WindowInsets windowInsets);
}
public final class AssistChipDefaults {
@@ -392,9 +392,9 @@
}
public final class IconKt {
- method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+ method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
}
@androidx.compose.runtime.Immutable public final class IconToggleButtonColors {
@@ -462,8 +462,8 @@
}
public final class NavigationBarItemDefaults {
- method @androidx.compose.runtime.Composable public androidx.compose.material3.NavigationBarItemColors colors(optional long selectedIconColor, optional long selectedTextColor, optional long indicatorColor, optional long unselectedIconColor, optional long unselectedTextColor, optional long disabledIconColor, optional long disabledTextColor);
method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material3.NavigationBarItemColors colors(optional long selectedIconColor, optional long selectedTextColor, optional long indicatorColor, optional long unselectedIconColor, optional long unselectedTextColor);
+ method @androidx.compose.runtime.Composable public androidx.compose.material3.NavigationBarItemColors colors(optional long selectedIconColor, optional long selectedTextColor, optional long indicatorColor, optional long unselectedIconColor, optional long unselectedTextColor, optional long disabledIconColor, optional long disabledTextColor);
field public static final androidx.compose.material3.NavigationBarItemDefaults INSTANCE;
}
@@ -509,8 +509,8 @@
}
public final class NavigationRailItemDefaults {
- method @androidx.compose.runtime.Composable public androidx.compose.material3.NavigationRailItemColors colors(optional long selectedIconColor, optional long selectedTextColor, optional long indicatorColor, optional long unselectedIconColor, optional long unselectedTextColor, optional long disabledIconColor, optional long disabledTextColor);
method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material3.NavigationRailItemColors colors(optional long selectedIconColor, optional long selectedTextColor, optional long indicatorColor, optional long unselectedIconColor, optional long unselectedTextColor);
+ method @androidx.compose.runtime.Composable public androidx.compose.material3.NavigationRailItemColors colors(optional long selectedIconColor, optional long selectedTextColor, optional long indicatorColor, optional long unselectedIconColor, optional long unselectedTextColor, optional long disabledIconColor, optional long disabledTextColor);
field public static final androidx.compose.material3.NavigationRailItemDefaults INSTANCE;
}
@@ -536,8 +536,8 @@
}
public final class OutlinedTextFieldKt {
- method @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? prefix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? suffix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
method @androidx.compose.runtime.Composable public static void OutlinedTextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? prefix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? suffix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
+ method @androidx.compose.runtime.Composable public static void OutlinedTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? prefix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? suffix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
}
public final class ProgressIndicatorDefaults {
@@ -563,14 +563,14 @@
}
public final class ProgressIndicatorKt {
- method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth, optional long trackColor, optional int strokeCap);
+ method @Deprecated @androidx.compose.runtime.Composable public static void CircularProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth);
method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth, optional long trackColor, optional int strokeCap);
method @Deprecated @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth);
- method @Deprecated @androidx.compose.runtime.Composable public static void CircularProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth);
- method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional long trackColor, optional int strokeCap);
+ method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional float strokeWidth, optional long trackColor, optional int strokeCap);
+ method @Deprecated @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional long trackColor);
method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional long trackColor, optional int strokeCap);
method @Deprecated @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional long trackColor);
- method @Deprecated @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional long color, optional long trackColor);
+ method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional long color, optional long trackColor, optional int strokeCap);
}
@androidx.compose.runtime.Immutable public final class RadioButtonColors {
@@ -685,14 +685,14 @@
@androidx.compose.runtime.Stable public final class SnackbarHostState {
ctor public SnackbarHostState();
method public androidx.compose.material3.SnackbarData? getCurrentSnackbarData();
- method public suspend Object? showSnackbar(String message, optional String? actionLabel, optional boolean withDismissAction, optional androidx.compose.material3.SnackbarDuration duration, optional kotlin.coroutines.Continuation<? super androidx.compose.material3.SnackbarResult>);
method public suspend Object? showSnackbar(androidx.compose.material3.SnackbarVisuals visuals, kotlin.coroutines.Continuation<? super androidx.compose.material3.SnackbarResult>);
+ method public suspend Object? showSnackbar(String message, optional String? actionLabel, optional boolean withDismissAction, optional androidx.compose.material3.SnackbarDuration duration, optional kotlin.coroutines.Continuation<? super androidx.compose.material3.SnackbarResult>);
property public final androidx.compose.material3.SnackbarData? currentSnackbarData;
}
public final class SnackbarKt {
- method @androidx.compose.runtime.Composable public static void Snackbar(optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? action, optional kotlin.jvm.functions.Function0<kotlin.Unit>? dismissAction, optional boolean actionOnNewLine, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional long actionContentColor, optional long dismissActionContentColor, kotlin.jvm.functions.Function0<kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void Snackbar(androidx.compose.material3.SnackbarData snackbarData, optional androidx.compose.ui.Modifier modifier, optional boolean actionOnNewLine, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional long actionColor, optional long actionContentColor, optional long dismissActionContentColor);
+ method @androidx.compose.runtime.Composable public static void Snackbar(optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? action, optional kotlin.jvm.functions.Function0<kotlin.Unit>? dismissAction, optional boolean actionOnNewLine, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional long actionContentColor, optional long dismissActionContentColor, kotlin.jvm.functions.Function0<kotlin.Unit> content);
}
public enum SnackbarResult {
@@ -730,9 +730,9 @@
public final class SurfaceKt {
method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Surface(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.Shape shape, optional long color, optional long contentColor, optional float tonalElevation, optional float shadowElevation, optional androidx.compose.foundation.BorderStroke? border, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Surface(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional long color, optional long contentColor, optional float tonalElevation, optional float shadowElevation, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Surface(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional long color, optional long contentColor, optional float tonalElevation, optional float shadowElevation, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Surface(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional long color, optional long contentColor, optional float tonalElevation, optional float shadowElevation, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void Surface(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional long color, optional long contentColor, optional float tonalElevation, optional float shadowElevation, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.unit.Dp> getLocalAbsoluteTonalElevation();
property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.unit.Dp> LocalAbsoluteTonalElevation;
}
@@ -817,16 +817,16 @@
}
public final class TextFieldKt {
- method @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? prefix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? suffix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
method @androidx.compose.runtime.Composable public static void TextField(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? prefix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? suffix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
+ method @androidx.compose.runtime.Composable public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.ui.text.TextStyle textStyle, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder, optional kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? prefix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? suffix, optional kotlin.jvm.functions.Function0<kotlin.Unit>? supportingText, optional boolean isError, optional androidx.compose.ui.text.input.VisualTransformation visualTransformation, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional boolean singleLine, optional int maxLines, optional int minLines, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.TextFieldColors colors);
}
public final class TextKt {
method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
- method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method @Deprecated @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit>? onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> LocalTextStyle;
}
diff --git a/compose/material3/material3/build.gradle b/compose/material3/material3/build.gradle
index f300862c..9583afe 100644
--- a/compose/material3/material3/build.gradle
+++ b/compose/material3/material3/build.gradle
@@ -16,6 +16,7 @@
import androidx.build.AndroidXComposePlugin
import androidx.build.LibraryType
+import androidx.build.KmpPlatformsKt
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
@@ -25,71 +26,15 @@
id("AndroidXPaparazziPlugin")
}
-AndroidXComposePlugin.applyAndConfigureKotlinPlugin(project)
+def desktopEnabled = KmpPlatformsKt.enableDesktop(project)
-dependencies {
+androidXMultiplatform {
+ android()
+ if (desktopEnabled) desktop()
-
- if(!AndroidXComposePlugin.isMultiplatformEnabled(project)) {
- /*
- * When updating dependencies, make sure to make the an an analogous update in the
- * corresponding block below
- */
- implementation(libs.kotlinStdlibCommon)
- implementation("androidx.activity:activity-compose:1.5.0")
- implementation(project(":compose:animation:animation"))
- implementation(project(":compose:foundation:foundation-layout"))
- implementation("androidx.compose.ui:ui-util:1.4.2")
- api(project(":compose:foundation:foundation"))
- api("androidx.compose.material:material-icons-core:1.4.2")
- api("androidx.compose.material:material-ripple:1.4.2")
- api("androidx.compose.runtime:runtime:1.4.2")
- api("androidx.compose.ui:ui-graphics:1.4.2")
- api("androidx.compose.ui:ui:1.4.2")
- api(project(":compose:ui:ui-text"))
-
- // TODO: remove next 3 dependencies when b/202810604 is fixed
- implementation("androidx.savedstate:savedstate-ktx:1.2.1")
- implementation("androidx.lifecycle:lifecycle-runtime:2.6.1")
- implementation("androidx.lifecycle:lifecycle-viewmodel:2.6.1")
-
- implementation("androidx.lifecycle:lifecycle-common-java8:2.6.1")
-
- testImplementation(libs.testRules)
- testImplementation(libs.testRunner)
- testImplementation(libs.junit)
- testImplementation(libs.truth)
-
- androidTestImplementation(project(":compose:material3:material3:material3-samples"))
- androidTestImplementation(project(":compose:foundation:foundation-layout"))
- androidTestImplementation(project(":compose:test-utils"))
- androidTestImplementation(project(":test:screenshot:screenshot"))
- androidTestImplementation(project(":core:core"))
- androidTestImplementation(libs.testRules)
- androidTestImplementation(libs.testRunner)
- androidTestImplementation(libs.junit)
- androidTestImplementation(libs.truth)
- androidTestImplementation(libs.dexmakerMockitoInlineExtended)
- androidTestImplementation(libs.mockitoKotlin)
- androidTestImplementation(libs.testUiautomator)
-
- lintPublish project(":compose:material3:material3-lint")
- }
-}
-
-if(AndroidXComposePlugin.isMultiplatformEnabled(project)) {
- androidXComposeMultiplatform {
- android()
- desktop()
- }
-
- kotlin {
- /*
- * When updating dependencies, make sure to make the an an analogous update in the
- * corresponding block above
- */
- sourceSets {
- commonMain.dependencies {
+ sourceSets {
+ commonMain {
+ dependencies {
implementation(libs.kotlinStdlibCommon)
implementation(project(":compose:animation:animation-core"))
@@ -103,8 +48,37 @@
implementation(project(":compose:ui:ui-util"))
implementation(project(":compose:foundation:foundation-layout"))
}
+ }
- androidMain.dependencies {
+ commonTest {
+ dependencies {
+ }
+ }
+
+ jvmMain {
+ dependsOn(commonMain)
+ dependencies {
+ }
+ }
+
+ if (desktopEnabled) {
+ skikoMain {
+ dependsOn(commonMain)
+ dependencies {
+ api(project(":compose:animation:animation-core"))
+ api(project(":compose:runtime:runtime"))
+ api(project(":compose:ui:ui"))
+ api(project(":compose:ui:ui-text"))
+ implementation(project(":compose:animation:animation"))
+ implementation(project(":compose:foundation:foundation-layout"))
+ implementation(project(":compose:ui:ui-util"))
+ }
+ }
+ }
+
+ androidMain {
+ dependsOn(jvmMain)
+ dependencies {
api("androidx.annotation:annotation:1.1.0")
implementation("androidx.activity:activity-compose:1.5.0")
@@ -115,23 +89,41 @@
implementation("androidx.lifecycle:lifecycle-common-java8:2.6.1")
}
+ }
- desktopMain.dependencies {
- implementation(libs.kotlinStdlib)
+ if (desktopEnabled) {
+ desktopMain {
+ dependsOn(skikoMain)
+ dependsOn(jvmMain)
+ dependencies {
+ implementation(libs.kotlinStdlib)
+ }
}
+ }
- // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
- // need to add Robolectric (which must be kept out of androidAndroidTest), use a top
- // level dependencies block instead:
- // `dependencies { testImplementation(libs.robolectric) }`
- androidTest.dependencies {
+ jvmTest {
+ dependsOn(commonTest)
+ dependencies {
+ }
+ }
+
+ // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
+ // need to add Robolectric (which must be kept out of androidAndroidTest), use a top
+ // level dependencies block instead:
+ // `dependencies { testImplementation(libs.robolectric) }`
+ androidTest {
+ dependsOn(jvmTest)
+ dependencies {
implementation(libs.testRules)
implementation(libs.testRunner)
implementation(libs.junit)
implementation(libs.truth)
}
+ }
- androidAndroidTest.dependencies {
+ androidAndroidTest {
+ dependsOn(jvmTest)
+ dependencies {
implementation(project(":compose:material3:material3:material3-samples"))
implementation(project(":compose:test-utils"))
implementation(project(':compose:foundation:foundation-layout'))
@@ -146,9 +138,26 @@
implementation(libs.testUiautomator)
}
}
+
+ if (desktopEnabled) {
+ desktopTest {
+ dependsOn(jvmTest)
+ dependsOn(desktopMain)
+ dependencies {
+ implementation(project(":compose:ui:ui-test-junit4"))
+ implementation(libs.truth)
+ implementation(libs.junit)
+ implementation(libs.skikoCurrentOs)
+ }
+ }
+ }
}
}
+dependencies {
+ lintPublish project(":compose:material3:material3-lint")
+}
+
androidx {
name = "Compose Material3 Components"
type = LibraryType.PUBLISHED_LIBRARY
diff --git a/compose/material3/material3/integration-tests/material3-demos/build.gradle b/compose/material3/material3/integration-tests/material3-demos/build.gradle
index fc83ff8..76ba389 100644
--- a/compose/material3/material3/integration-tests/material3-demos/build.gradle
+++ b/compose/material3/material3/integration-tests/material3-demos/build.gradle
@@ -39,7 +39,7 @@
}
androidx {
- name = "AndroidX Compose Material3 Components Demos"
+ name = "Compose Material3 Components Demos"
publish = Publish.NONE
inceptionYear = "2022"
description = "Contains the demo code for the AndroidX Compose Material 3 components."
diff --git a/compose/material3/material3/samples/build.gradle b/compose/material3/material3/samples/build.gradle
index 075b5f4..eb9d9a3 100644
--- a/compose/material3/material3/samples/build.gradle
+++ b/compose/material3/material3/samples/build.gradle
@@ -47,7 +47,7 @@
}
androidx {
- name = "AndroidX Compose Material3 Components Samples"
+ name = "Compose Material3 Components Samples"
type = LibraryType.SAMPLES
inceptionYear = "2021"
description = "Contains the sample code for the AndroidX Compose Material You components."
diff --git a/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/BottomSheetSamples.kt b/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/BottomSheetSamples.kt
index 226ffc70..5e6f497 100644
--- a/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/BottomSheetSamples.kt
+++ b/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/BottomSheetSamples.kt
@@ -23,6 +23,7 @@
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
@@ -33,6 +34,7 @@
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Favorite
import androidx.compose.material.icons.filled.Menu
+import androidx.compose.material3.BottomSheetDefaults
import androidx.compose.material3.BottomSheetScaffold
import androidx.compose.material3.Button
import androidx.compose.material3.Checkbox
@@ -70,6 +72,7 @@
fun ModalBottomSheetSample() {
var openBottomSheet by rememberSaveable { mutableStateOf(false) }
var skipPartiallyExpanded by remember { mutableStateOf(false) }
+ var edgeToEdgeEnabled by remember { mutableStateOf(false) }
val scope = rememberCoroutineScope()
val bottomSheetState = rememberModalBottomSheetState(
skipPartiallyExpanded = skipPartiallyExpanded
@@ -92,6 +95,17 @@
Spacer(Modifier.width(16.dp))
Text("Skip partially expanded State")
}
+ Row(
+ Modifier.toggleable(
+ value = edgeToEdgeEnabled,
+ role = Role.Checkbox,
+ onValueChange = { checked -> edgeToEdgeEnabled = checked }
+ )
+ ) {
+ Checkbox(checked = edgeToEdgeEnabled, onCheckedChange = null)
+ Spacer(Modifier.width(16.dp))
+ Text("Toggle edge to edge enabled.")
+ }
Button(onClick = { openBottomSheet = !openBottomSheet }) {
Text(text = "Show Bottom Sheet")
}
@@ -99,9 +113,13 @@
// Sheet content
if (openBottomSheet) {
+ val windowInsets = if (edgeToEdgeEnabled)
+ WindowInsets(0) else BottomSheetDefaults.windowInsets
+
ModalBottomSheet(
onDismissRequest = { openBottomSheet = false },
sheetState = bottomSheetState,
+ windowInsets = windowInsets
) {
Row(Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.Center) {
Button(
diff --git a/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/ButtonSamples.kt b/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/ButtonSamples.kt
index cc1daef..5521ab9 100644
--- a/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/ButtonSamples.kt
+++ b/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/ButtonSamples.kt
@@ -17,8 +17,8 @@
package androidx.compose.material3.samples
import androidx.annotation.Sampled
-import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Favorite
import androidx.compose.material3.Button
diff --git a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/DividerUiTest.kt b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/DividerUiTest.kt
index a11f610..9e19fbb 100644
--- a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/DividerUiTest.kt
+++ b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/DividerUiTest.kt
@@ -38,10 +38,10 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import androidx.test.filters.SdkSuppress
+import kotlin.math.roundToInt
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.math.roundToInt
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/ExposedDropdownMenuTest.kt b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/ExposedDropdownMenuTest.kt
index 95357cf..d6d9c74 100644
--- a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/ExposedDropdownMenuTest.kt
+++ b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/ExposedDropdownMenuTest.kt
@@ -363,7 +363,7 @@
TextField(
value = "Text",
onValueChange = {},
- modifier = Modifier.menuAnchor().size(20.dp),
+ modifier = Modifier.menuAnchor(),
)
ExposedDropdownMenu(
expanded = true,
diff --git a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/ListItemTest.kt b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/ListItemTest.kt
index 1abb4ea..1b21463 100644
--- a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/ListItemTest.kt
+++ b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/ListItemTest.kt
@@ -36,11 +36,11 @@
import androidx.compose.ui.unit.width
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
+import com.google.common.truth.Truth.assertThat
+import kotlin.math.roundToInt
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.math.roundToInt
-import com.google.common.truth.Truth.assertThat
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/ModalBottomSheetTest.kt b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/ModalBottomSheetTest.kt
index 72643ec..34df5b3 100644
--- a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/ModalBottomSheetTest.kt
+++ b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/ModalBottomSheetTest.kt
@@ -24,6 +24,7 @@
import androidx.compose.foundation.ScrollState
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
@@ -70,7 +71,6 @@
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.height
import androidx.compose.ui.unit.width
-import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.UiDevice
@@ -84,11 +84,12 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
@MediumTest
-@RunWith(AndroidJUnit4::class)
+@RunWith(Parameterized::class)
@OptIn(ExperimentalMaterial3Api::class)
-class ModalBottomSheetTest {
+class ModalBottomSheetTest(private val edgeToEdgeWrapper: EdgeToEdgeWrapper) {
@get:Rule
val rule = createAndroidComposeRule<ComponentActivity>()
@@ -106,10 +107,14 @@
val sheetState = SheetState(skipPartiallyExpanded = false)
rule.setContent {
+ val windowInsets = if (edgeToEdgeWrapper.edgeToEdgeEnabled)
+ WindowInsets(0) else BottomSheetDefaults.windowInsets
+
if (showBottomSheet) {
ModalBottomSheet(
sheetState = sheetState,
- onDismissRequest = { showBottomSheet = false }
+ onDismissRequest = { showBottomSheet = false },
+ windowInsets = windowInsets
) {
Box(
Modifier
@@ -143,8 +148,13 @@
val density = LocalDensity.current
val resScreenWidth = context.resources.configuration.screenWidthDp
with(density) { screenWidth = resScreenWidth.dp.roundToPx() }
+ val windowInsets = if (edgeToEdgeWrapper.edgeToEdgeEnabled)
+ WindowInsets(0) else BottomSheetDefaults.windowInsets
- ModalBottomSheet(onDismissRequest = {}) {
+ ModalBottomSheet(
+ onDismissRequest = {},
+ windowInsets = windowInsets
+ ) {
Box(
Modifier
.fillMaxWidth()
@@ -178,7 +188,12 @@
try {
latch.await(1500, TimeUnit.MILLISECONDS)
rule.setContent {
- ModalBottomSheet(onDismissRequest = {}) {
+ val windowInsets = if (edgeToEdgeWrapper.edgeToEdgeEnabled)
+ WindowInsets(0) else BottomSheetDefaults.windowInsets
+ ModalBottomSheet(
+ onDismissRequest = {},
+ windowInsets = windowInsets
+ ) {
Box(
Modifier
.testTag(sheetTag)
@@ -213,10 +228,21 @@
@Test
fun modalBottomSheet_defaultStateForSmallContentIsFullExpanded() {
lateinit var sheetState: SheetState
+ var height by mutableStateOf(0.dp)
rule.setContent {
+ val config = LocalContext.current.resources.configuration
+ height = config.screenHeightDp.dp
sheetState = rememberModalBottomSheetState()
- ModalBottomSheet(onDismissRequest = {}, sheetState = sheetState, dragHandle = null) {
+ val windowInsets = if (edgeToEdgeWrapper.edgeToEdgeEnabled)
+ WindowInsets(0) else BottomSheetDefaults.windowInsets
+
+ ModalBottomSheet(
+ onDismissRequest = {},
+ sheetState = sheetState,
+ dragHandle = null,
+ windowInsets = windowInsets
+ ) {
Box(
Modifier
.fillMaxWidth()
@@ -226,7 +252,7 @@
}
}
- val height = rule.onNode(isPopup()).getUnclippedBoundsInRoot().height
+ height = rule.onNode(isPopup()).getUnclippedBoundsInRoot().height
assertThat(sheetState.currentValue).isEqualTo(SheetValue.Expanded)
rule.onNodeWithTag(sheetTag).assertTopPositionInRootIsEqualTo(height - sheetHeight)
}
@@ -238,13 +264,13 @@
rule.setContent {
sheetState = rememberModalBottomSheetState()
- val context = LocalContext.current
- val density = LocalDensity.current
- val resScreenHeight = context.resources.configuration.screenHeightDp
- with(density) {
- screenHeightPx = resScreenHeight.dp.roundToPx().toFloat()
- }
- ModalBottomSheet(onDismissRequest = {}, sheetState = sheetState) {
+ val windowInsets = if (edgeToEdgeWrapper.edgeToEdgeEnabled)
+ WindowInsets(0) else BottomSheetDefaults.windowInsets
+ ModalBottomSheet(
+ onDismissRequest = {},
+ sheetState = sheetState,
+ windowInsets = windowInsets
+ ) {
Box(
Modifier
// Deliberately use fraction != 1f
@@ -253,6 +279,9 @@
}
}
+ screenHeightPx = with(rule.density) {
+ rule.onNode(isPopup()).getUnclippedBoundsInRoot().height.toPx()
+ }
assertThat(sheetState.currentValue).isEqualTo(SheetValue.PartiallyExpanded)
assertThat(sheetState.requireOffset())
.isWithin(1f)
@@ -266,10 +295,13 @@
rule.setContent {
val dispatcher = LocalOnBackPressedDispatcherOwner.current!!.onBackPressedDispatcher
+ val windowInsets = if (edgeToEdgeWrapper.edgeToEdgeEnabled)
+ WindowInsets(0) else BottomSheetDefaults.windowInsets
if (showBottomSheet) {
ModalBottomSheet(
sheetState = sheetState,
- onDismissRequest = { showBottomSheet = false }
+ onDismissRequest = { showBottomSheet = false },
+ windowInsets = windowInsets
) {
Box(
Modifier
@@ -302,10 +334,13 @@
rule.setContent {
val dispatcher = LocalOnBackPressedDispatcherOwner.current!!.onBackPressedDispatcher
+ val windowInsets = if (edgeToEdgeWrapper.edgeToEdgeEnabled)
+ WindowInsets(0) else BottomSheetDefaults.windowInsets
if (showBottomSheet) {
ModalBottomSheet(
sheetState = sheetState,
- onDismissRequest = { showBottomSheet = false }
+ onDismissRequest = { showBottomSheet = false },
+ windowInsets = windowInsets
) {
Box(
Modifier
@@ -344,10 +379,13 @@
val context = LocalContext.current
screenHeight = context.resources.configuration.screenHeightDp.dp
state = rememberModalBottomSheetState()
+ val windowInsets = if (edgeToEdgeWrapper.edgeToEdgeEnabled)
+ WindowInsets(0) else BottomSheetDefaults.windowInsets
ModalBottomSheet(
onDismissRequest = {},
sheetState = state,
- dragHandle = null
+ dragHandle = null,
+ windowInsets = windowInsets
) {
Box(
Modifier
@@ -356,15 +394,16 @@
)
}
}
- assertThat(state.requireOffset()).isWithin(0.5f).of(expectedExpandedAnchor)
+ screenHeight = rule.onNode(isPopup()).getUnclippedBoundsInRoot().height
+ assertThat(state.requireOffset()).isWithin(1f).of(expectedExpandedAnchor)
size = 100.dp
rule.waitForIdle()
- assertThat(state.requireOffset()).isWithin(0.5f).of(expectedExpandedAnchor)
+ assertThat(state.requireOffset()).isWithin(1f).of(expectedExpandedAnchor)
size = 30.dp
rule.waitForIdle()
- assertThat(state.requireOffset()).isWithin(0.5f).of(expectedExpandedAnchor)
+ assertThat(state.requireOffset()).isWithin(1f).of(expectedExpandedAnchor)
}
@Test
@@ -374,8 +413,15 @@
rule.setContent {
state = rememberModalBottomSheetState()
scope = rememberCoroutineScope()
+ val windowInsets = if (edgeToEdgeWrapper.edgeToEdgeEnabled)
+ WindowInsets(0) else BottomSheetDefaults.windowInsets
- ModalBottomSheet(onDismissRequest = {}, sheetState = state, dragHandle = null) {}
+ ModalBottomSheet(
+ onDismissRequest = {},
+ sheetState = state,
+ dragHandle = null,
+ windowInsets = windowInsets
+ ) {}
}
assertThat(state.swipeableState.currentValue).isEqualTo(SheetValue.Hidden)
val hiddenOffset = state.requireOffset()
@@ -395,10 +441,14 @@
lateinit var scope: CoroutineScope
rule.setContent {
state = rememberModalBottomSheetState()
+ val windowInsets = if (edgeToEdgeWrapper.edgeToEdgeEnabled)
+ WindowInsets(0) else BottomSheetDefaults.windowInsets
+
ModalBottomSheet(
onDismissRequest = {},
sheetState = state,
dragHandle = null,
+ windowInsets = windowInsets
) {
scope = rememberCoroutineScope()
LazyColumn {
@@ -447,7 +497,7 @@
sheetState = rememberModalBottomSheetState()
ModalBottomSheet(
onDismissRequest = {},
- sheetState = sheetState,
+ sheetState = sheetState
) {
scrollState = rememberScrollState()
Column(
@@ -517,10 +567,14 @@
rule.setContent {
scope = rememberCoroutineScope()
+ val windowInsets = if (edgeToEdgeWrapper.edgeToEdgeEnabled)
+ WindowInsets(0) else BottomSheetDefaults.windowInsets
+
ModalBottomSheet(
onDismissRequest = {},
modifier = Modifier.testTag(topTag),
sheetState = sheetState,
+ windowInsets = windowInsets
) {
if (showShortContent) {
Box(
@@ -561,7 +615,13 @@
lateinit var sheetState: SheetState
rule.setContent {
sheetState = rememberModalBottomSheetState()
- ModalBottomSheet(onDismissRequest = {}, sheetState = sheetState) {
+ val windowInsets = if (edgeToEdgeWrapper.edgeToEdgeEnabled)
+ WindowInsets(0) else BottomSheetDefaults.windowInsets
+ ModalBottomSheet(
+ onDismissRequest = {},
+ sheetState = sheetState,
+ windowInsets = windowInsets
+ ) {
Box(
Modifier
.fillMaxSize()
@@ -591,13 +651,17 @@
newState != SheetValue.Hidden
}
)
+ val windowInsets = if (edgeToEdgeWrapper.edgeToEdgeEnabled)
+ WindowInsets(0) else BottomSheetDefaults.windowInsets
+
ModalBottomSheet(
onDismissRequest = {},
sheetState = sheetState,
dragHandle = { Box(
Modifier
.testTag(dragHandleTag)
- .size(dragHandleSize)) }
+ .size(dragHandleSize)) },
+ windowInsets = windowInsets
) {
Box(
Modifier
@@ -643,7 +707,13 @@
rule.setContent {
sheetState = rememberModalBottomSheetState()
scope = rememberCoroutineScope()
- ModalBottomSheet(onDismissRequest = {}, sheetState = sheetState) {
+ val windowInsets = if (edgeToEdgeWrapper.edgeToEdgeEnabled)
+ WindowInsets(0) else BottomSheetDefaults.windowInsets
+ ModalBottomSheet(
+ onDismissRequest = {},
+ sheetState = sheetState,
+ windowInsets = windowInsets
+ ) {
Box(
Modifier
.fillMaxSize()
@@ -674,7 +744,14 @@
lateinit var sheetState: SheetState
rule.setContent {
sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
- ModalBottomSheet(onDismissRequest = {}, sheetState = sheetState) {
+ val windowInsets = if (edgeToEdgeWrapper.edgeToEdgeEnabled)
+ WindowInsets(0) else BottomSheetDefaults.windowInsets
+
+ ModalBottomSheet(
+ onDismissRequest = {},
+ sheetState = sheetState,
+ windowInsets = windowInsets
+ ) {
Box(
Modifier
.fillMaxWidth()
@@ -703,7 +780,13 @@
lateinit var sheetState: SheetState
rule.setContent {
sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
- ModalBottomSheet(onDismissRequest = {}, sheetState = sheetState) {
+ val windowInsets = if (edgeToEdgeWrapper.edgeToEdgeEnabled)
+ WindowInsets(0) else BottomSheetDefaults.windowInsets
+ ModalBottomSheet(
+ onDismissRequest = {},
+ sheetState = sheetState,
+ windowInsets = windowInsets
+ ) {
Box(
Modifier
.fillMaxSize()
@@ -726,7 +809,14 @@
)
rule.setContent {
scope = rememberCoroutineScope()
- ModalBottomSheet(onDismissRequest = {}, sheetState = bottomSheetState) {
+ val windowInsets = if (edgeToEdgeWrapper.edgeToEdgeEnabled)
+ WindowInsets(0) else BottomSheetDefaults.windowInsets
+
+ ModalBottomSheet(
+ onDismissRequest = {},
+ sheetState = bottomSheetState,
+ windowInsets = windowInsets
+ ) {
Box(
Modifier
.fillMaxSize()
@@ -749,12 +839,15 @@
@Test
fun modalBottomSheet_testDismissAction_tallBottomSheet_whenPartiallyExpanded() {
rule.setContent {
+ val windowInsets = if (edgeToEdgeWrapper.edgeToEdgeEnabled)
+ WindowInsets(0) else BottomSheetDefaults.windowInsets
ModalBottomSheet(
onDismissRequest = {},
dragHandle = { Box(
Modifier
.testTag(dragHandleTag)
- .size(dragHandleSize)) }
+ .size(dragHandleSize)) },
+ windowInsets = windowInsets
) {
Box(
Modifier
@@ -776,13 +869,16 @@
lateinit var sheetState: SheetState
rule.setContent {
sheetState = rememberModalBottomSheetState()
+ val windowInsets = if (edgeToEdgeWrapper.edgeToEdgeEnabled)
+ WindowInsets(0) else BottomSheetDefaults.windowInsets
ModalBottomSheet(
onDismissRequest = {},
sheetState = sheetState,
dragHandle = { Box(
Modifier
.testTag(dragHandleTag)
- .size(dragHandleSize)) }
+ .size(dragHandleSize)) },
+ windowInsets = windowInsets
) {
Box(
Modifier
@@ -813,12 +909,8 @@
rule.setContent {
sheetState = rememberModalBottomSheetState()
scope = rememberCoroutineScope()
- val context = LocalContext.current
- val density = LocalDensity.current
- val resScreenHeight = context.resources.configuration.screenHeightDp
- with(density) {
- screenHeightPx = resScreenHeight.dp.roundToPx().toFloat()
- }
+ val windowInsets = if (edgeToEdgeWrapper.edgeToEdgeEnabled)
+ WindowInsets(0) else BottomSheetDefaults.windowInsets
ModalBottomSheet(
onDismissRequest = {},
@@ -826,7 +918,8 @@
dragHandle = { Box(
Modifier
.testTag(dragHandleTag)
- .size(dragHandleSize)) }
+ .size(dragHandleSize)) },
+ windowInsets = windowInsets
) {
Box(
Modifier
@@ -835,6 +928,9 @@
)
}
}
+ screenHeightPx = with(rule.density) {
+ rule.onNode(isPopup()).getUnclippedBoundsInRoot().height.toPx()
+ }
scope.launch {
sheetState.expand()
}
@@ -861,12 +957,8 @@
rule.setContent {
sheetState = rememberModalBottomSheetState()
scope = rememberCoroutineScope()
- val context = LocalContext.current
- val density = LocalDensity.current
- val resScreenHeight = context.resources.configuration.screenHeightDp
- with(density) {
- screenHeightPx = resScreenHeight.dp.roundToPx().toFloat()
- }
+ val windowInsets = if (edgeToEdgeWrapper.edgeToEdgeEnabled)
+ WindowInsets(0) else BottomSheetDefaults.windowInsets
ModalBottomSheet(
onDismissRequest = {},
@@ -874,7 +966,8 @@
dragHandle = { Box(
Modifier
.testTag(dragHandleTag)
- .size(dragHandleSize)) }
+ .size(dragHandleSize)) },
+ windowInsets = windowInsets
) {
Box(
Modifier
@@ -883,6 +976,9 @@
)
}
}
+ screenHeightPx = with(rule.density) {
+ rule.onNode(isPopup()).getUnclippedBoundsInRoot().height.toPx()
+ }
scope.launch {
sheetState.expand()
}
@@ -906,10 +1002,14 @@
lateinit var scope: CoroutineScope
rule.setContent {
scope = rememberCoroutineScope()
+ val windowInsets = if (edgeToEdgeWrapper.edgeToEdgeEnabled)
+ WindowInsets(0) else BottomSheetDefaults.windowInsets
+
ModalBottomSheet(
onDismissRequest = {},
sheetState = sheetState,
dragHandle = null,
+ windowInsets = windowInsets
) {
if (hasSheetContent) {
Box(Modifier.fillMaxHeight(0.4f))
@@ -941,10 +1041,14 @@
lateinit var scope: CoroutineScope
rule.setContent {
scope = rememberCoroutineScope()
+ val windowInsets = if (edgeToEdgeWrapper.edgeToEdgeEnabled)
+ WindowInsets(0) else BottomSheetDefaults.windowInsets
+
ModalBottomSheet(
onDismissRequest = {},
sheetState = sheetState,
dragHandle = null,
+ windowInsets = windowInsets
) {
if (hasSheetContent) {
Box(Modifier.fillMaxHeight(0.6f))
@@ -983,7 +1087,14 @@
rule.setContent {
scope = rememberCoroutineScope()
- ModalBottomSheet(onDismissRequest = { callCount += 1 }, sheetState = sheetState) {
+ val windowInsets = if (edgeToEdgeWrapper.edgeToEdgeEnabled)
+ WindowInsets(0) else BottomSheetDefaults.windowInsets
+
+ ModalBottomSheet(
+ onDismissRequest = { callCount += 1 },
+ sheetState = sheetState,
+ windowInsets = windowInsets
+ ) {
Column(
Modifier
.testTag(sheetTag)
@@ -1015,4 +1126,19 @@
assertThat(sheetState.isVisible).isFalse()
assertThat(callCount).isEqualTo(expectedCallCount)
}
+
+ companion object {
+ @Parameterized.Parameters(name = "{0}")
+ @JvmStatic
+ fun parameters() = arrayOf(
+ EdgeToEdgeWrapper("EdgeToEdge", true),
+ EdgeToEdgeWrapper("NonEdgeToEdge", false)
+ )
+ }
+
+ class EdgeToEdgeWrapper(val name: String, val edgeToEdgeEnabled: Boolean) {
+ override fun toString(): String {
+ return name
+ }
+ }
}
\ No newline at end of file
diff --git a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/OutlinedTextFieldTest.kt b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/OutlinedTextFieldTest.kt
index 0399416..fddbdf2a 100644
--- a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/OutlinedTextFieldTest.kt
+++ b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/OutlinedTextFieldTest.kt
@@ -52,6 +52,7 @@
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.semantics.SemanticsProperties
import androidx.compose.ui.semantics.error
+import androidx.compose.ui.semantics.getOrNull
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.test.SemanticsMatcher
import androidx.compose.ui.test.assert
@@ -60,6 +61,7 @@
import androidx.compose.ui.test.captureToImage
import androidx.compose.ui.test.click
import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.compose.ui.test.onChildren
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
@@ -1206,6 +1208,24 @@
}
@Test
+ fun testOutlinedTextField_supportingText_remainsVisibleWithTallInput() {
+ rule.setMaterialContent(lightColorScheme()) {
+ OutlinedTextField(
+ value = buildString {
+ repeat(200) {
+ append("line $it\n")
+ }
+ },
+ onValueChange = {},
+ modifier = Modifier.size(width = ExpectedDefaultTextFieldWidth, height = 150.dp),
+ supportingText = { Text("Supporting", modifier = Modifier.testTag("Supporting")) }
+ )
+ }
+
+ rule.onNodeWithTag("Supporting", useUnmergedTree = true).assertIsDisplayed()
+ }
+
+ @Test
fun testOutlinedTextField_supportingText_clickFocusesTextField() {
var focused = false
rule.setMaterialContent(lightColorScheme()) {
@@ -1344,19 +1364,32 @@
@Test
fun testOutlinedTextField_errorSemantics_messageOverridable() {
val errorMessage = "Special symbols not allowed"
+ lateinit var defaultErrorMessage: String
rule.setMaterialContent(lightColorScheme()) {
val isError = remember { mutableStateOf(true) }
OutlinedTextField(
value = "test",
onValueChange = {},
- modifier = Modifier.semantics { if (isError.value) error(errorMessage) },
+ modifier = Modifier
+ .testTag(TextFieldTag)
+ .semantics { if (isError.value) error(errorMessage) },
isError = isError.value
)
+ defaultErrorMessage = getString(Strings.DefaultErrorMessage)
}
- rule.onNodeWithText("test")
+ rule.onNodeWithTag(TextFieldTag)
.assert(SemanticsMatcher.keyIsDefined(SemanticsProperties.Error))
.assert(SemanticsMatcher.expectValue(SemanticsProperties.Error, errorMessage))
+
+ // Check that default error message is overwritten and not lingering in a child node
+ rule.onNodeWithTag(TextFieldTag, useUnmergedTree = true)
+ .onChildren()
+ .fetchSemanticsNodes()
+ .forEach { node ->
+ assertThat(node.config.getOrNull(SemanticsProperties.Error))
+ .isNotEqualTo(defaultErrorMessage)
+ }
}
@Test
diff --git a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/SnackbarHostTest.kt b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/SnackbarHostTest.kt
index a5d5e9f..e67aa28 100644
--- a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/SnackbarHostTest.kt
+++ b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/SnackbarHostTest.kt
@@ -36,10 +36,6 @@
import androidx.test.filters.MediumTest
import androidx.test.filters.SdkSuppress
import com.google.common.truth.Truth
-import org.mockito.kotlin.any
-import org.mockito.kotlin.doReturn
-import org.mockito.kotlin.eq
-import org.mockito.kotlin.mock
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.delay
@@ -49,6 +45,10 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.AdditionalMatchers.not
+import org.mockito.kotlin.any
+import org.mockito.kotlin.doReturn
+import org.mockito.kotlin.eq
+import org.mockito.kotlin.mock
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/SwitchScreenshotTest.kt b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/SwitchScreenshotTest.kt
index 30162ba..5fcafa4 100644
--- a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/SwitchScreenshotTest.kt
+++ b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/SwitchScreenshotTest.kt
@@ -33,10 +33,10 @@
import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
+import androidx.compose.ui.graphics.Color
import androidx.compose.ui.input.InputMode
import androidx.compose.ui.input.InputModeManager
import androidx.compose.ui.platform.LocalInputModeManager
-import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalLayoutDirection
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.test.ExperimentalTestApi
diff --git a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/TextFieldTest.kt b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/TextFieldTest.kt
index 53c668f..e1b215d 100644
--- a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/TextFieldTest.kt
+++ b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/TextFieldTest.kt
@@ -65,14 +65,17 @@
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.semantics.SemanticsProperties
import androidx.compose.ui.semantics.error
+import androidx.compose.ui.semantics.getOrNull
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.test.SemanticsMatcher
import androidx.compose.ui.test.assert
import androidx.compose.ui.test.assertHeightIsEqualTo
+import androidx.compose.ui.test.assertIsDisplayed
import androidx.compose.ui.test.assertWidthIsEqualTo
import androidx.compose.ui.test.captureToImage
import androidx.compose.ui.test.click
import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.compose.ui.test.onChildren
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
@@ -98,17 +101,17 @@
import androidx.test.filters.MediumTest
import androidx.test.filters.SdkSuppress
import com.google.common.truth.Truth.assertThat
-import org.mockito.kotlin.any
-import org.mockito.kotlin.atLeastOnce
-import org.mockito.kotlin.eq
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.verify
import kotlin.math.roundToInt
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.kotlin.any
+import org.mockito.kotlin.atLeastOnce
+import org.mockito.kotlin.eq
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.verify
@OptIn(ExperimentalMaterial3Api::class)
@MediumTest
@@ -1170,6 +1173,24 @@
}
@Test
+ fun testTextField_supportingText_remainsVisibleWithTallInput() {
+ rule.setMaterialContent(lightColorScheme()) {
+ TextField(
+ value = buildString {
+ repeat(200) {
+ append("line $it\n")
+ }
+ },
+ onValueChange = {},
+ modifier = Modifier.size(width = ExpectedDefaultTextFieldWidth, height = 150.dp),
+ supportingText = { Text("Supporting", modifier = Modifier.testTag("Supporting")) }
+ )
+ }
+
+ rule.onNodeWithTag("Supporting", useUnmergedTree = true).assertIsDisplayed()
+ }
+
+ @Test
fun testTextField_supportingText_clickFocusesTextField() {
var focused = false
rule.setMaterialContent(lightColorScheme()) {
@@ -1447,19 +1468,32 @@
@Test
fun testTextField_errorSemantics_messageOverridable() {
val errorMessage = "Special symbols not allowed"
+ lateinit var defaultErrorMessage: String
rule.setMaterialContent(lightColorScheme()) {
val isError = remember { mutableStateOf(true) }
TextField(
value = "test",
onValueChange = {},
- modifier = Modifier.semantics { if (isError.value) error(errorMessage) },
+ modifier = Modifier
+ .testTag(TextFieldTag)
+ .semantics { if (isError.value) error(errorMessage) },
isError = isError.value
)
+ defaultErrorMessage = getString(DefaultErrorMessage)
}
- rule.onNodeWithText("test")
+ rule.onNodeWithTag(TextFieldTag)
.assert(SemanticsMatcher.keyIsDefined(SemanticsProperties.Error))
.assert(SemanticsMatcher.expectValue(SemanticsProperties.Error, errorMessage))
+
+ // Check that default error message is overwritten and not lingering in a child node
+ rule.onNodeWithTag(TextFieldTag, useUnmergedTree = true)
+ .onChildren()
+ .fetchSemanticsNodes()
+ .forEach { node ->
+ assertThat(node.config.getOrNull(SemanticsProperties.Error))
+ .isNotEqualTo(defaultErrorMessage)
+ }
}
@Test
diff --git a/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/ModalBottomSheet.android.kt b/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/ModalBottomSheet.android.kt
index 33e9f0c..42b9c63 100644
--- a/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/ModalBottomSheet.android.kt
+++ b/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/ModalBottomSheet.android.kt
@@ -16,6 +16,13 @@
package androidx.compose.material3
+import android.content.Context
+import android.graphics.PixelFormat
+import android.view.Gravity
+import android.view.KeyEvent
+import android.view.View
+import android.view.ViewTreeObserver
+import android.view.WindowManager
import androidx.compose.animation.core.TweenSpec
import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.foundation.Canvas
@@ -26,18 +33,29 @@
import androidx.compose.foundation.layout.BoxWithConstraints
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ColumnScope
+import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.widthIn
+import androidx.compose.foundation.layout.windowInsetsPadding
import androidx.compose.material3.SheetValue.Expanded
import androidx.compose.material3.SheetValue.Hidden
+import androidx.compose.material3.SheetValue.PartiallyExpanded
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.CompositionContext
+import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCompositionContext
import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.runtime.rememberUpdatedState
+import androidx.compose.runtime.saveable.rememberSaveable
+import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
@@ -45,17 +63,27 @@
import androidx.compose.ui.graphics.isSpecified
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.input.pointer.pointerInput
-import androidx.compose.ui.platform.LocalDensity
+import androidx.compose.ui.platform.AbstractComposeView
+import androidx.compose.ui.platform.LocalView
+import androidx.compose.ui.platform.ViewRootForInspector
import androidx.compose.ui.semantics.clearAndSetSemantics
import androidx.compose.ui.semantics.collapse
import androidx.compose.ui.semantics.dismiss
import androidx.compose.ui.semantics.expand
+import androidx.compose.ui.semantics.paneTitle
+import androidx.compose.ui.semantics.popup
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.IntOffset
-import androidx.compose.ui.window.Popup
-import androidx.compose.ui.window.PopupProperties
+import androidx.lifecycle.findViewTreeLifecycleOwner
+import androidx.lifecycle.findViewTreeViewModelStoreOwner
+import androidx.lifecycle.setViewTreeLifecycleOwner
+import androidx.lifecycle.setViewTreeViewModelStoreOwner
+import androidx.savedstate.findViewTreeSavedStateRegistryOwner
+import androidx.savedstate.setViewTreeSavedStateRegistryOwner
+import java.util.UUID
import kotlin.math.max
+import kotlin.math.roundToInt
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
@@ -86,6 +114,8 @@
* @param tonalElevation The tonal elevation of this bottom sheet.
* @param scrimColor Color of the scrim that obscures content when the bottom sheet is open.
* @param dragHandle Optional visual marker to swipe the bottom sheet.
+ * @param windowInsets window insets to be passed to the bottom sheet window via [PaddingValues]
+ * params.
* @param content The content to be displayed inside the bottom sheet.
*/
@Composable
@@ -100,6 +130,7 @@
tonalElevation: Dp = BottomSheetDefaults.Elevation,
scrimColor: Color = BottomSheetDefaults.ScrimColor,
dragHandle: @Composable (() -> Unit)? = { BottomSheetDefaults.DragHandle() },
+ windowInsets: WindowInsets = BottomSheetDefaults.windowInsets,
content: @Composable ColumnScope.() -> Unit,
) {
val scope = rememberCoroutineScope()
@@ -125,10 +156,14 @@
animateTo = { target, velocity ->
scope.launch { sheetState.animateTo(target, velocity = velocity) }
},
- snapTo = { target -> scope.launch { sheetState.snapTo(target) } }
+ snapTo = { target ->
+ val didSnapImmediately = sheetState.trySnapTo(target)
+ if (!didSnapImmediately) {
+ scope.launch { sheetState.snapTo(target) }
+ }
+ }
)
}
- val systemBarHeight = WindowInsets.systemBarsForVisualComponents.getBottom(LocalDensity.current)
ModalBottomSheetPopup(
onDismissRequest = {
@@ -137,7 +172,8 @@
} else { // Is expanded without collapsed state or is collapsed.
scope.launch { sheetState.hide() }.invokeOnCompletion { onDismissRequest() }
}
- }
+ },
+ windowInsets = windowInsets,
) {
BoxWithConstraints(Modifier.fillMaxSize()) {
val fullHeight = constraints.maxHeight
@@ -146,11 +182,13 @@
onDismissRequest = animateToDismiss,
visible = sheetState.targetValue != Hidden
)
+ val bottomSheetPaneTitle = getString(string = Strings.BottomSheetPaneTitle)
Surface(
modifier = modifier
.widthIn(max = BottomSheetMaxWidth)
.fillMaxWidth()
.align(Alignment.TopCenter)
+ .semantics { paneTitle = bottomSheetPaneTitle }
.offset {
IntOffset(
0,
@@ -172,7 +210,6 @@
sheetState = sheetState,
anchorChangeHandler = anchorChangeHandler,
screenHeight = fullHeight.toFloat(),
- bottomPadding = systemBarHeight.toFloat(),
onDragStopped = {
settleToDismiss(it)
},
@@ -188,35 +225,38 @@
getString(Strings.BottomSheetPartialExpandDescription)
val dismissActionLabel = getString(Strings.BottomSheetDismissDescription)
val expandActionLabel = getString(Strings.BottomSheetExpandDescription)
- Box(Modifier
- .align(Alignment.CenterHorizontally)
- .semantics(mergeDescendants = true) {
- // Provides semantics to interact with the bottomsheet based on its
- // current value.
- with(sheetState) {
- dismiss(dismissActionLabel) {
- animateToDismiss()
- true
- }
- if (currentValue == SheetValue.PartiallyExpanded) {
- expand(expandActionLabel) {
- if (swipeableState.confirmValueChange(Expanded)) {
- scope.launch { sheetState.expand() }
- }
+ Box(
+ Modifier
+ .align(Alignment.CenterHorizontally)
+ .semantics(mergeDescendants = true) {
+ // Provides semantics to interact with the bottomsheet based on its
+ // current value.
+ with(sheetState) {
+ dismiss(dismissActionLabel) {
+ animateToDismiss()
true
}
- } else if (hasPartiallyExpandedState) {
- collapse(collapseActionLabel) {
- val confirmPartial = swipeableState
- .confirmValueChange(SheetValue.PartiallyExpanded)
- if (confirmPartial) {
- scope.launch { partialExpand() }
+ if (currentValue == PartiallyExpanded) {
+ expand(expandActionLabel) {
+ if (swipeableState.confirmValueChange(Expanded)) {
+ scope.launch { sheetState.expand() }
+ }
+ true
}
- true
+ } else if (hasPartiallyExpandedState) {
+ collapse(collapseActionLabel) {
+ if (
+ swipeableState.confirmValueChange(
+ PartiallyExpanded
+ )
+ ) {
+ scope.launch { partialExpand() }
+ }
+ true
+ }
}
}
}
- }
) {
dragHandle()
}
@@ -265,7 +305,8 @@
detectTapGestures {
onDismissRequest()
}
- }.clearAndSetSemantics {}
+ }
+ .clearAndSetSemantics {}
} else {
Modifier
}
@@ -284,23 +325,22 @@
sheetState: SheetState,
anchorChangeHandler: AnchorChangeHandler<SheetValue>,
screenHeight: Float,
- bottomPadding: Float,
onDragStopped: CoroutineScope.(velocity: Float) -> Unit,
) = draggable(
- state = sheetState.swipeableState.swipeDraggableState,
- orientation = Orientation.Vertical,
- enabled = sheetState.isVisible,
- startDragImmediately = sheetState.swipeableState.isAnimationRunning,
- onDragStopped = onDragStopped
-)
+ state = sheetState.swipeableState.swipeDraggableState,
+ orientation = Orientation.Vertical,
+ enabled = sheetState.isVisible,
+ startDragImmediately = sheetState.swipeableState.isAnimationRunning,
+ onDragStopped = onDragStopped
+ )
.swipeAnchors(
state = sheetState.swipeableState,
anchorChangeHandler = anchorChangeHandler,
- possibleValues = setOf(Hidden, SheetValue.PartiallyExpanded, Expanded),
+ possibleValues = setOf(Hidden, PartiallyExpanded, Expanded),
) { value, sheetSize ->
when (value) {
- Hidden -> screenHeight + bottomPadding
- SheetValue.PartiallyExpanded -> when {
+ Hidden -> screenHeight
+ PartiallyExpanded -> when {
sheetSize.height < screenHeight / 2 -> null
sheetState.skipPartiallyExpanded -> null
else -> screenHeight / 2f
@@ -320,9 +360,9 @@
val previousTargetOffset = previousAnchors[previousTarget]
val newTarget = when (previousTarget) {
Hidden -> Hidden
- SheetValue.PartiallyExpanded, Expanded -> {
- val hasPartiallyExpandedState = newAnchors.containsKey(SheetValue.PartiallyExpanded)
- val newTarget = if (hasPartiallyExpandedState) SheetValue.PartiallyExpanded
+ PartiallyExpanded, Expanded -> {
+ val hasPartiallyExpandedState = newAnchors.containsKey(PartiallyExpanded)
+ val newTarget = if (hasPartiallyExpandedState) PartiallyExpanded
else if (newAnchors.containsKey(Expanded)) Expanded else Hidden
newTarget
}
@@ -343,12 +383,158 @@
* Popup specific for modal bottom sheet.
*/
@Composable
-@ExperimentalMaterial3Api
internal fun ModalBottomSheetPopup(
onDismissRequest: () -> Unit,
- content: @Composable () -> Unit
-) = Popup(
- onDismissRequest = onDismissRequest,
- properties = PopupProperties(focusable = true),
- content = content
-)
\ No newline at end of file
+ windowInsets: WindowInsets,
+ content: @Composable () -> Unit,
+) {
+ val view = LocalView.current
+ val id = rememberSaveable { UUID.randomUUID() }
+ val parentComposition = rememberCompositionContext()
+ val currentContent by rememberUpdatedState(content)
+ val modalBottomSheetWindow = remember {
+ ModalBottomSheetWindow(
+ onDismissRequest = onDismissRequest,
+ composeView = view,
+ saveId = id
+ ).apply {
+ setCustomContent(
+ parent = parentComposition,
+ content = {
+ Box(
+ Modifier
+ .semantics { this.popup() }
+ .windowInsetsPadding(windowInsets)
+ .imePadding()
+ ) {
+ currentContent()
+ }
+ }
+ )
+ }
+ }
+
+ DisposableEffect(modalBottomSheetWindow) {
+ modalBottomSheetWindow.show()
+ onDispose {
+ modalBottomSheetWindow.disposeComposition()
+ modalBottomSheetWindow.dismiss()
+ }
+ }
+}
+
+/** Custom compose view for [ModalBottomSheet] */
+private class ModalBottomSheetWindow(
+ private var onDismissRequest: () -> Unit,
+ private val composeView: View,
+ saveId: UUID,
+) :
+ AbstractComposeView(composeView.context),
+ ViewTreeObserver.OnGlobalLayoutListener,
+ ViewRootForInspector {
+ init {
+ id = android.R.id.content
+ // Set up view owners
+ setViewTreeLifecycleOwner(composeView.findViewTreeLifecycleOwner())
+ setViewTreeViewModelStoreOwner(composeView.findViewTreeViewModelStoreOwner())
+ setViewTreeSavedStateRegistryOwner(composeView.findViewTreeSavedStateRegistryOwner())
+ setTag(androidx.compose.ui.R.id.compose_view_saveable_id_tag, "Popup:$saveId")
+ // Enable children to draw their shadow by not clipping them
+ clipChildren = false
+ }
+
+ private val windowManager =
+ composeView.context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
+
+ private val displayWidth: Int
+ get() {
+ val density = context.resources.displayMetrics.density
+ return (context.resources.configuration.screenWidthDp * density).roundToInt()
+ }
+
+ private val params: WindowManager.LayoutParams =
+ WindowManager.LayoutParams().apply {
+ // Position bottom sheet from the bottom of the screen
+ gravity = Gravity.BOTTOM or Gravity.START
+ // Application panel window
+ type = WindowManager.LayoutParams.TYPE_APPLICATION_PANEL
+ // Fill up the entire app view
+ width = displayWidth
+ height = WindowManager.LayoutParams.MATCH_PARENT
+
+ // Format of screen pixels
+ format = PixelFormat.TRANSLUCENT
+ // Title used as fallback for a11y services
+ // TODO: Provide bottom sheet window resource
+ title = composeView.context.resources.getString(
+ androidx.compose.ui.R.string.default_popup_window_title
+ )
+ // Get the Window token from the parent view
+ token = composeView.applicationWindowToken
+
+ // Flags specific to modal bottom sheet.
+ flags = flags and (
+ WindowManager.LayoutParams.FLAG_IGNORE_CHEEK_PRESSES or
+ WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM
+ ).inv()
+
+ flags = flags or WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
+ }
+
+ private var content: @Composable () -> Unit by mutableStateOf({})
+
+ override var shouldCreateCompositionOnAttachedToWindow: Boolean = false
+ private set
+
+ @Composable
+ override fun Content() {
+ content()
+ }
+
+ fun setCustomContent(
+ parent: CompositionContext? = null,
+ content: @Composable () -> Unit
+ ) {
+ parent?.let { setParentCompositionContext(it) }
+ this.content = content
+ shouldCreateCompositionOnAttachedToWindow = true
+ }
+
+ fun show() {
+ windowManager.addView(this, params)
+ }
+
+ fun dismiss() {
+ setViewTreeLifecycleOwner(null)
+ setViewTreeSavedStateRegistryOwner(null)
+ composeView.viewTreeObserver.removeOnGlobalLayoutListener(this)
+ windowManager.removeViewImmediate(this)
+ }
+
+ /**
+ * Taken from PopupWindow. Calls [onDismissRequest] when back button is pressed.
+ */
+ override fun dispatchKeyEvent(event: KeyEvent): Boolean {
+ if (event.keyCode == KeyEvent.KEYCODE_BACK) {
+ if (keyDispatcherState == null) {
+ return super.dispatchKeyEvent(event)
+ }
+ if (event.action == KeyEvent.ACTION_DOWN && event.repeatCount == 0) {
+ val state = keyDispatcherState
+ state?.startTracking(event, this)
+ return true
+ } else if (event.action == KeyEvent.ACTION_UP) {
+ val state = keyDispatcherState
+ if (state != null && state.isTracking(event) && !event.isCanceled) {
+ onDismissRequest()
+ return true
+ }
+ }
+ }
+ return super.dispatchKeyEvent(event)
+ }
+
+ override fun onGlobalLayout() {
+ // No-op
+ }
+}
diff --git a/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/Strings.android.kt b/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/Strings.android.kt
index 6a6c8c3..428cadd 100644
--- a/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/Strings.android.kt
+++ b/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/Strings.android.kt
@@ -155,6 +155,9 @@
Strings.DateRangeInputInvalidRangeInput -> resources.getString(
androidx.compose.material3.R.string.m3c_date_range_input_invalid_range_input
)
+ Strings.BottomSheetPaneTitle -> resources.getString(
+ androidx.compose.material3.R.string.m3c_bottom_sheet_pane_title
+ )
Strings.BottomSheetDragHandleDescription -> resources.getString(
androidx.compose.material3.R.string.m3c_bottom_sheet_drag_handle_description
)
diff --git a/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/TouchExplorationStateProvider.android.kt b/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/TouchExplorationStateProvider.android.kt
index cbb7308..955ebc5 100644
--- a/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/TouchExplorationStateProvider.android.kt
+++ b/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/TouchExplorationStateProvider.android.kt
@@ -25,9 +25,9 @@
import androidx.compose.runtime.State
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
-import androidx.compose.runtime.setValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.lifecycle.Lifecycle
diff --git a/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/internal/ExposedDropdownMenuPopup.kt b/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/internal/ExposedDropdownMenuPopup.kt
index 6900df5..67a996d 100644
--- a/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/internal/ExposedDropdownMenuPopup.kt
+++ b/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/internal/ExposedDropdownMenuPopup.kt
@@ -63,9 +63,9 @@
import androidx.compose.ui.unit.dp
import androidx.compose.ui.util.fastMap
import androidx.compose.ui.window.PopupPositionProvider
-import androidx.lifecycle.setViewTreeLifecycleOwner
import androidx.lifecycle.findViewTreeLifecycleOwner
import androidx.lifecycle.findViewTreeViewModelStoreOwner
+import androidx.lifecycle.setViewTreeLifecycleOwner
import androidx.lifecycle.setViewTreeViewModelStoreOwner
import androidx.savedstate.findViewTreeSavedStateRegistryOwner
import androidx.savedstate.setViewTreeSavedStateRegistryOwner
diff --git a/compose/material3/material3/src/androidMain/res/values-af/strings.xml b/compose/material3/material3/src/androidMain/res/values-af/strings.xml
new file mode 100644
index 0000000..52938d3
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-af/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Dialoog"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Uitgevou"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Ingevou"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Maak toe"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Soek"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Voorstelle hieronder"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Kies datum"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Gekose datum"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Skakel oor na kies van ’n jaar"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Swiep om ’n jaar te kies of tik om terug te skakel om ’n dag te kies"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Verander na volgende maand"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Verander na vorige maand"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Gaan na jaar %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Huidige keuse: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Geen"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Vandag"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Jaarkieser sigbaar"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Kies datum"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Datum wat ingevoer is"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Datum"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Datum wat ingevoer is: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Geen"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Datum word nie toegelaat nie: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Datum pas nie by die verwagte patroon nie: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Datum val buite verwagte jaardatumreeks %1$s-%2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Skakel oor na kalenderinvoermodus"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Skakel oor na teksinvoermodus"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Rollees om later jare te wys"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Rollees om vroeër jare te wys"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Kies datums"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Begindatum"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Einddatum"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Rollees om die volgende maand te wys"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Rollees om die vorige maand te wys"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Binne datumreeks"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Voer datums in"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Ongeldige datumreeksinvoer"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Sleephandvatsel"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Vou onderste blad in"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Maak onderste blad toe"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Vou onderste blad uit"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Nutswenk"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Wys nutswenk"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"nm."</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"vm."</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Kies vm. of nm."</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Kies uur"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Kies minute"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d uur"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d uur"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d minute"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minute"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Uur"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"vir minute"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"vir uur"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-am/strings.xml b/compose/material3/material3/src/androidMain/res/values-am/strings.xml
new file mode 100644
index 0000000..a91d248
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-am/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"መገናኛ"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"ተዘርግቷል"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"ተሰብስቧል"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"አሰናብት"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"ፈልግ"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"የአስተያየት ጥቆማዎች ከታች"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"ቀን ይምረጡ"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"የተመረጠው ቀን"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"ወደ ዓመት መምረጥ ይቀይሩ"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"ዓመት ለመምረጥ ያንሸራትቱ ወይም ወደ ቀንን መምረጥ መልሶ ለመቀየር መታ ያድርጉ"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"ወደ የሚቀጥለው ወር ይቀይሩ"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"ወደ ቀዳሚው ወር ይቀይሩ"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"ወደ ዓመት %1$s ያስሱ"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"የአሁን ምርጫ፦ %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"ምንም"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"ዛሬ"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"ዓመት መራጭ ይታያል"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"ቀን ይምረጡ"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"የገባው ቀን"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"ቀን"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"የገባው ቀን፦ %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"ምንም"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"ቀን አልተፈቀደም፦ %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"ቀኑ ከተጠበቀው ስርዓተ ጥለት ጋር አይዛመድም፦ %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"ቀን ከተጠበቀው የዓመት ክልል ውጪ ነው %1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"ወደ የቀን መቁጠሪያ ግቤት ሁነታ ይቀይሩ"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"ወደ የጽሁፍ ግቤት ሁነታ ይቀይሩ"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"ከዚህ በኋላ ያሉ ዓመታትን ለማሳየት ያሸብልሉ"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"ቀደም ያሉ ዓመታትን ለማሳየት ያሸብልሉ"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"ቀናትን ይምረጡ"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"መጀመሪያ ቀን"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"የማብቂያ ቀን"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"ቀጣዩን ወር ለማሳየት ያሸብልሉ"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"ቀዳሚውን ወር ለማሳየት ያሸብልሉ"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"በክልል ውስጥ"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"ቀናትን ያስገቡ"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"ልክ ያልሆነ የቀን ክልል ግቤት"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"መያዣ ይጎትቱ"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"የግርጌ ሉህን ይሰብስቡ"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"የግርጌ ሉህን ያሰናብቱ"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"የግርጌ ሉህ ይዘርጉ"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"የመሣሪያ ጥቆማ"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"መሣሪያ ጥቆማን አሳይ"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"ፒኤም"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"ኤኤም"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"ኤኤም ወይም ፒኤምን ይምረጡ"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"ሰዓት ምረጥ"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"ደቂቃዎችን ምረጥ"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d ሰዓት"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d ሰዓታት"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d ደቂቃዎች"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"ደቂቃ"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"ሰዓት"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"ለደቂቃዎች"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"ለሰዓት"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-ar/strings.xml b/compose/material3/material3/src/androidMain/res/values-ar/strings.xml
new file mode 100644
index 0000000..c133e1c5
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-ar/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"مربّع حوار"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"موسَّعة"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"مصغَّرة"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"إغلاق"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"شريط بحث"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"إليك الاقتراحات"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"اختيار تاريخ"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"التاريخ المحدَّد"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"التبديل لاختيار سنة"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"مرِّر سريعًا لتحديد سنة، أو انقر للرجوع إلى تحديد يوم."</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"التغيير إلى الشهر التالي"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"التغيير إلى الشهر السابق"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"الانتقال إلى سنة %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"الاختيار الحالي: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"بدون تاريخ"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"اليوم"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"أداة اختيار السنوات مرئية"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"اختيار تاريخ"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"التاريخ الذي تم إدخاله"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"التاريخ"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"التاريخ الذي تم إدخاله: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"بدون تاريخ"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"التاريخ غير مسموح به: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"لا يتوافق التاريخ مع النمط المتوقَّع: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"التاريخ خارج نطاق السنوات المتوقَّع: %1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"التبديل إلى وضع \"الإدخال في التقويم\""</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"التبديل إلى \"وضع إدخال النص\""</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"انتقِل للأسفل أو للأعلى لإظهار السنوات التالية."</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"انتقِل للأسفل أو للأعلى لإظهار السنوات السابقة."</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"اختيار التواريخ"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"تاريخ البدء"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"تاريخ الانتهاء"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"انتقِل للأسفل أو للأعلى لإظهار الشهر التالي."</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"انتقِل للأسفل أو للأعلى لإظهار الشهر السابق."</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"في النطاق"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"إدخال التواريخ"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"إدخال نطاق زمني غير صالح"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"مقبض السحب"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"تصغير البطاقة السفلية"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"إغلاق البطاقة السفلية"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"توسيع البطاقة السفلية"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"تلميح"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"إظهار التلميح"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"م"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"ص"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"يُرجى اختيار \"ص\" أو \"م\"."</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"اختيار الساعة"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"اختيار الدقائق"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"الساعة %1$d"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d ساعة"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d دقيقة"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"دقيقة"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"ساعة"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"الدقائق"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"الساعات"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-as/strings.xml b/compose/material3/material3/src/androidMain/res/values-as/strings.xml
new file mode 100644
index 0000000..20cbe7e
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-as/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"ডায়ল’গ"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"বিস্তাৰ কৰা আছে"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"সংকোচন কৰা আছে"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"অগ্ৰাহ্য কৰক"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"সন্ধান কৰক"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"তলত পৰামৰ্শ দেখুওৱা হৈছে"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"তাৰিখ বাছনি কৰক"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"বাছনি কৰা তাৰিখ"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"বছৰ বাছনি কৰাৰ সুবিধাটোলৈ সলনি কৰক"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"এটা বছৰ বাছনি কৰিবলৈ ছোৱাইপ কৰক অথবা এটা দিন বাছনি কৰাৰ সুবিধাটোলৈ উভতি যাবলৈ টিপক"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"পৰৱৰ্তী মাহলৈ সলনি কৰক"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"পূৰ্বৱৰ্তী মাহলৈ সলনি কৰক"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"বৰ্ষ %1$sলৈ নেভিগে’ট কৰক"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"বৰ্তমানৰ বাছনি: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"নাই"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"আজি"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"বছৰ বাছনিকৰ্তা দৃশ্যমান"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"তাৰিখ বাছনি কৰক"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"দিয়া তাৰিখ"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"তাৰিখ"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"দিয়া তাৰিখ: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"নাই"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"অনুমোদিত নোহোৱা তাৰিখ: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"তাৰিখটো এই প্ৰত্যাশিত আৰ্হিটোৰ সৈতে মিলা নাই: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"তাৰিখটো প্ৰত্যাশিত বছৰৰ পৰিসৰ %1$s - %2$sৰ বাহিৰৰ"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"কেলেণ্ডাৰ ইনপুট ম’ডলৈ সলনি কৰক"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"পাঠ ইনপুট ম’ডলৈ সলনি কৰক"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"পাছৰ বছৰবোৰ দেখুৱাবলৈ স্ক্ৰ’ল কৰক"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"আগৰ বছৰবোৰ দেখুৱাবলৈ স্ক্ৰ’ল কৰক"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"তাৰিখ বাছনি কৰক"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"আৰম্ভণিৰ তাৰিখ"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"সমাপ্তিৰ তাৰিখ"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"পৰৱৰ্তী মাহটো দেখুৱাবলৈ স্ক্ৰ’ল কৰক"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"পূৰ্বৱৰ্তী মাহটো দেখুৱাবলৈ স্ক্ৰ’ল কৰক"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"পৰিসৰৰ ভিতৰত আছে"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"তাৰিখ দিয়ক"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"অমান্য তাৰিখৰ পৰিসৰৰ ইনপুট"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"ড্ৰেগ হেণ্ডেল"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"তলৰ শ্বীটখন সংকোচন কৰক"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"তলৰ শ্বীটখন অগ্ৰাহ্য কৰক"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"তলৰ শ্বীটখন বিস্তাৰ কৰক"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"টুলটিপ"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"টুলটিপ দেখুৱাওক"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"AM অথবা PM বাছনি কৰক"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"ঘণ্টা বাছনি কৰক"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"মিনিট বাছনি কৰক"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d বাজিছে"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d ঘণ্টা"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d মিনিট"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"মিনিট"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"ঘণ্টা"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"মিনিটৰ বাবে"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"ঘণ্টাৰ বাবে"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-az/strings.xml b/compose/material3/material3/src/androidMain/res/values-az/strings.xml
new file mode 100644
index 0000000..4d882ac
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-az/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Dialoq"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Genişləndirilb"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Yığcamlaşdırılıb"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Rədd edin"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Axtarış"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Təkliflər aşağıdadır"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Tarix seçin"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Seçilmiş tarix"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"İl seçiminə keçin"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"İl seçmək üçün sürüşdürün. Gün seçiminə qayıtmaq üçün toxunun"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Növbəti aya dəyişin"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Əvvəlki aya dəyişin"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Bu ilə keçin: %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Cari seçim: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Yoxdur"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Bu gün"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"İl seçicisi görünür"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Tarix seçin"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Daxil edilmiş tarix"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Tarix"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Daxil edilmiş tarix: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Yoxdur"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Tarixə icazə verilmir: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Tarix gözlənilən modelə uyğun gəlmir: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Tarix gözlənilən il aralığından kənardır: %1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Təqvim daxiletmə rejiminə keçin"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Mətn daxiletmə rejiminə keçin"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Sonrakı illəri göstərmək üçün sürüşdürün"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Əvvəlki illəri göstərmək üçün sürüşdürün"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Tarixlər seçin"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Başlama tarixi"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Bitmə tarixi"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Növbəti ayı göstərmək üçün sürüşdürün"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Əvvəlki ayı göstərmək üçün sürüşdürün"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Bu aralıqda"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Tarixlər daxil edin"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Yanlış tarix aralığı daxiletməsi"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Dəstəyi çəkin"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Aşağıdakı vərəqi yığcamlaşdırın"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Aşağıdakı vərəqi rədd edin"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Aşağıdakı vərəqi genişləndirin"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Alət izahı"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Alət izahını göstərin"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"AM və ya PM seçin"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Saat seçin"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Dəqiqə seçin"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"Saat: %1$d"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d saat"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d dəqiqə"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Dəqiqə"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Saat"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"dəqiqəlik"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"saatlıq"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-b+sr+Latn/strings.xml b/compose/material3/material3/src/androidMain/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..82602ea
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Dijalog"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Prošireno je"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Skupljeno je"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Odbaci"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Pretraga"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Predlozi su u nastavku"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Izaberite datum"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Izabrani datum"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Pređite na izbor godine"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Prevucite da biste izabrali godinu ili dodirnite da biste se vratili na izbor dana"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Pređite na sledeći mesec"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Pređite na prethodni mesec"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Idite na godinu: %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Aktuelni izbor: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Ništa"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Danas"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Vidljiv birač godina"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Izaberite datum"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Uneti datum"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Datum"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Uneti datum: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Ništa"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Datum nije dozvoljen: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Datum ne odgovara očekivanom šablonu: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Datum je izvan očekivanog opsega godina %1$s–%2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Pređite na režim unosa u Kalendaru"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Pređite na režim unosa teksta"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Skrolujte da bi se prikazale kasnije godine"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Skrolujte da bi se prikazale ranije godine"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Izaberite datume"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Datum početka"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Datum završetka"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Pomerajte da bi se prikazao sledeći mesec"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Pomerajte da bi se prikazao prethodni mesec"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"U opsegu"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Unesite datume"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Unos opsega datuma je nevažeći"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Identifikator za prevlačenje"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Skupite donju tabelu"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Odbacite donju tabelu"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Proširite donju tabelu"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Objašnjenje"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Prikažite objašnjenje"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Izaberite pre podne ili po podne"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Izaberite sat"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Izaberite minute"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d s"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d s"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d min"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minut"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Sat"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"za minute"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"za sate"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-be/strings.xml b/compose/material3/material3/src/androidMain/res/values-be/strings.xml
new file mode 100644
index 0000000..bf493db
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-be/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Дыялогавае акно"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Разгорнута"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Згорнута"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Закрыць"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Пошук"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Прапановы ўнізе"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Выберыце дату"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Выбраная дата"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Перайсці да выбару года"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Правядзіце пальцам, каб выбраць год, або націсніце, каб вярнуцца да выбару даты"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Перайсці да наступнага месяца"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Перайсці да папярэдняга месяца"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Перайсці ў год %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Бягучы выбар: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Без абмежаванняў"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Сёння"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Бачны інструмент выбару года"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Выберыце дату"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Уведзеная дата"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Дата"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Уведзеная дата: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Без абмежаванняў"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Дата забаронена: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Дата не адпавядае ўзору: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Дата выходзіць за дазволены дыяпазон гадоў %1$s-%2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Пераключыцца ў рэжым уводу \"Каляндар\""</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Пераключыцца ў рэжым уводу \"Тэкст\""</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Прагартайце экран, каб прагледзець пазнейшыя гады"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Прагартайце экран, каб прагледзець ранейшыя гады"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Выберыце даты"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Дата пачатку"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Дата заканчэння"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Прагартайце экран, каб прагледзець наступны месяц"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Прагартайце экран, каб прагледзець мінулы месяц"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"У межах дыяпазону"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Увядзіце даты"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Уведзены няправільны дыяпазон дат"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Маркер перацягвання"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Згарнуць ніжні аркуш"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Закрыць ніжні аркуш"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Разгарнуць ніжні аркуш"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Падказка"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Паказваць усплывальую падказку"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"пасля паўдня"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"да паўдня"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Выберыце AM (да паўдня) або PM (пасля паўдня)"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Выберыце гадзіны"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Выберыце хвіліны"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d гадз"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d гадз"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d хв"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Хвіліны"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Гадзіны"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"хвіліны"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"гадзіны"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-bg/strings.xml b/compose/material3/material3/src/androidMain/res/values-bg/strings.xml
new file mode 100644
index 0000000..f600a9a
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-bg/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Диалогов прозорец"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Разгънато"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Свито"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Отхвърляне"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Лента за търсене"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Предложенията са по-долу"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Избиране на дата"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Избрана дата"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Превключване към избиране на година"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Прекарайте пръст, за да изберете година, или докоснете, за да се върнете към избора на ден"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Преминаване към следващия месец"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Преминаване към предишния месец"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Навигиране до %1$s година"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Текущ избор: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Няма"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Днес"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Инструментът за избор на година е видим"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Избиране на дата"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Въведена дата"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Дата"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Въведена дата: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Няма"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Датата не е разрешена: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Датата не е в очаквания формат: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Датата е извън очаквания годишен диапазон: %1$s – %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Превключване към режим за въвеждане в календар"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Превключване към режим за въвеждане на текст"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Превъртете, за да се покажат следващите години"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Превъртете, за да се покажат миналите години"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Избиране на дати"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Начална дата"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Крайна дата"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Превъртете, за да се покаже следващият месец"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Превъртете, за да се покаже предишният месец"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"В диапазона"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Въвеждане на дати"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Въведен е невалиден период от време"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Манипулатор за преместване с плъзгане"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Свиване на долния лист"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Отхвърляне на долния лист"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Разгъване на долния лист"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Подсказка"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Показване на подсказка"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Изберете AM или PM"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Изберете час"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Изберете минути"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d часа"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d часа"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d минути"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Минута"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Час"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"за минутите"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"за часа"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-bn/strings.xml b/compose/material3/material3/src/androidMain/res/values-bn/strings.xml
new file mode 100644
index 0000000..1a04e7f
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-bn/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"ডায়ালগ"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"বড় করা হয়েছে"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"আড়াল করা হয়েছে"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"বাতিল করুন"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"সার্চ করুন"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"নিচে দেওয়া সাজেশন"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"তারিখ বেছে নিন"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"বেছে নেওয়া তারিখ"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"কোনও একটি বছর বেছে নিতে বদল করুন"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"একটি বছর বেছে নিতে সোয়াইপ করুন অথবা দিন বেছে নেওয়ার বিকল্পে ফিরে যেতে ট্যাপ করুন"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"আগামী মাসে পরিবর্তন করুন"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"আগের মাসে পরিবর্তন করুন"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"নেভিগেট করে %1$s বছরে যান"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"বর্তমানে বেছে নেওয়া হয়েছে: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"কোনওটিই নয়"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"আজ"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"বছর বেছে নেওয়ার তালিকা দেখা যাচ্ছে"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"তারিখ বেছে নিন"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"উল্লেখ করা তারিখ"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"তারিখ"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"উল্লেখ করা তারিখ: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"কোনওটিই নয়"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"এই তারিখ লেখা যাবে না: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"প্রত্যাশিত প্যাটার্নের সাথে তারিখ মিলছে না: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"প্রত্যাশিত বছরের রেঞ্জের বাইরের তারিখ %1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"ক্যালেন্ডার ইনপুট মোডে বদল করুন"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"টেক্সট ইনপুট মোডে বদল করুন"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"পরের বছরগুলি দেখতে স্ক্রল করুন"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"আগের বছরগুলি দেখতে স্ক্রল করুন"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"তারিখ বেছে নিন"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"শুরুর তারিখ"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"শেষ হওয়ার তারিখ"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"পরের মাস দেখতে স্ক্রল করুন"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"আগের মাস দেখতে স্ক্রল করুন"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"সীমার মধ্যে"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"তারিখ লিখুন"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"তারিখের ব্যাপ্তি সম্পর্কিত ইনপুট ভুল দেওয়া আছে"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"টেনে আনার হ্যান্ডেল"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"স্ক্রিনের নিচে অ্যাটাচ করা শিট আড়াল করুন"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"স্ক্রিনের নিচে অ্যাটাচ করা শিট বাতিল করুন"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"স্ক্রিনের নিচে অ্যাটাচ করা শিট বড় করুন"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"টুলটিপ"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"টুলটিপ দেখান"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"AM বা PM বেছে নিন"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"ঘণ্টা বেছে নিন"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"মিনিট বেছে নিন"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$dটা"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d ঘণ্টা"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d মিনিট"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"মিনিট"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"ঘণ্টা"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"এত মিনিটের জন্য"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"এত ঘণ্টার জন্য"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-bs/strings.xml b/compose/material3/material3/src/androidMain/res/values-bs/strings.xml
new file mode 100644
index 0000000..584bfe0
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-bs/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Dijaloški okvir"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Prošireno"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Suženo"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Odbacivanje"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Pretraživanje"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Prijedlozi su u nastavku"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Odabir datuma"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Odabrani datum"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Prebacivanje na odabir godine"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Prevucite da odaberete godinu ili dodirnite da se vratite na odabir dana"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Promjena na sljedeći mjesec"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Promjena na prethodni mjesec"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Odlazak na %1$s. godinu"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Trenutni odabir: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Ništa"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Danas"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Birač godine je vidljiv"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Odabir datuma"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Unesen je datum"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Datum"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Unesen je datum: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Ništa"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Datum nije dozvoljen: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Datumi se ne podudaraju s očekivanim obrascem: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Datum je izvan očekivanog raspona %1$s – %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Prebacivanje na način rada unosa kalendara"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Prebacivanje na način rada unosa teksta"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Kliznite da se prikažu kasnije godine"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Kliznite da se prikažu ranije godine"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Odabir datuma"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Datum početka"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Datum završetka"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Kliznite da se prikaže sljedeći mjesec"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Kliznite da se prikaže prethodni mjesec"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"U rasponu"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Unos datuma"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Nevažeći unos raspona datuma"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Ručica za prevlačenje"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Sužavanje donje tabele"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Odbacivanje donje tabele"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Proširivanje donje tabele"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Skočni opis"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Prikaz skočnog opisa"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"poslijepodne"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"prijepodne"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Odaberite prijepodne ili poslijepodne"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Odaberite sate"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Odaberite minute"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d h"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d h"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d min"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minuta"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Sat"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"za minute"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"za sat"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-ca/strings.xml b/compose/material3/material3/src/androidMain/res/values-ca/strings.xml
new file mode 100644
index 0000000..982a4b0
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-ca/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Quadre de diàleg"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"S\'ha desplegat"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"S\'ha replegat"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Ignora"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Cerca"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Suggeriments a continuació"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Selecciona la data"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Data seleccionada"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Canvia a la selecció de l\'any"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Llisca per seleccionar un any o toca per tornar a seleccionar un dia"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Canvia al mes següent"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Canvia al mes anterior"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Navega fins a l\'any %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Selecció actual: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Cap"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Avui"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Selector d\'any visible"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Selecciona la data"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Data introduïda"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Data"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Data introduïda: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Cap"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Data no permesa: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"La data no coincideix amb el patró esperat: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"La data no es troba dins de l\'interval d\'anys esperat: %1$s-%2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Canvia al mode d\'introducció de calendari"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Canvia al mode d\'introducció de text"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Desplaça\'t per mostrar els anys posteriors"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Desplaça\'t per mostrar els anys anteriors"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Selecciona les dates"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Data d\'inici"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Data de finalització"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Desplaça\'t per mostrar el mes següent"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Desplaça\'t per mostrar el mes anterior"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Dins de l\'interval"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Introdueix les dates"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"S\'ha introduït un interval de dates no vàlid"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Ansa per arrossegar"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Replega el full inferior"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Ignora el full inferior"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Desplega el full inferior"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Descripció emergent"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Mostra la descripció emergent"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Selecciona AM o PM"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Selecciona l\'hora"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Selecciona els minuts"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d en punt"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d hores"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d minuts"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minut"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Hora"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"per als minuts"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"per a l\'hora"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-cs/strings.xml b/compose/material3/material3/src/androidMain/res/values-cs/strings.xml
new file mode 100644
index 0000000..0a3c854
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-cs/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Dialogové okno"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Rozbaleno"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Sbaleno"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Zavřít"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Vyhledávání"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Níže jsou k dispozici návrhy"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Výběr data"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Vybrané datum"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Přepnout na výběr roku"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Přejetím prstem vyberte rok nebo se klepnutím vraťte k výběru dne"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Přejít na další měsíc"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Přejít na předchozí měsíc"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Přejít na rok %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Aktuální výběr: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Žádné"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Dnes"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Je zobrazen výběr roku"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Vyberte datum"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Zadané datum"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Datum"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Zadané datum: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Žádné"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Nepovolené datum: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Datum neodpovídá očekávanému vzoru: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Datum není v očekávaném rozsahu roků %1$s–%2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Přepnout na režim zadávání pomocí kalendáře"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Přepnout na režim zadávání textu"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Posunutím zobrazíte pozdější roky"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Posunutím zobrazíte předchozí roky"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Vyberte data"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Datum zahájení"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Datum ukončení"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Posunutím zobrazíte další měsíc"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Posunutím zobrazíte předchozí měsíc"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"V rozsahu"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Zadejte data"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Neplatné období"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Úchyt pro přetažení"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Sbalit spodní tabulku"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Zavřít spodní tabulku"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Rozbalit spodní tabulku"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Popisek"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Zobrazit popisek"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Vyberte AM nebo PM"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Vybrat hodinu"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Vyberte minuty"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d hodin"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d hodin"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d minut"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minuta"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Hodina"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"pro minuty"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"pro hodinu"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-da/strings.xml b/compose/material3/material3/src/androidMain/res/values-da/strings.xml
new file mode 100644
index 0000000..1acf697
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-da/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Dialogboks"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Udvidet"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Skjult"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Afvis"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Søg"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Forslag nedenfor"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Vælg dato"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Valgt dato"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Skift til valg af år"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Stryg for at vælge et år, eller tryk for at skifte tilbage til datovælgeren"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Skift til næste måned"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Skift til forrige måned"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Gå til år %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Aktuelt valg: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Ingen"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"I dag"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Årsvælgeren er synlig"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Vælg dato"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Angivet dato"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Dato"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Angivet dato: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Ingen"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Datoen er ikke tilladt: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Datoen svarer ikke til det forventede format: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Datoen er uden for det forventede årsinterval: %1$s-%2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Skift til input-tilstand for kalender"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Skift til input-tilstand for tekst"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Rul for at se senere år"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Rul for at se tidligere år"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Vælg datoer"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Startdato"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Slutdato"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Rul for at se næste måned"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Rul for at se forrige måned"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Inden for de valgte dage"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Angiv datoer"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Det angivne datointerval er ugyldigt"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Håndtag"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Skjul felt i bunden"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Luk felt i bunden"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Udvid felt i bunden"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Værktøjstip"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Se værktøjstip"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Vælg AM eller PM"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Vælg time"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Vælg minutter"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"kl. %1$d"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d timer"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d minutter"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minut"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Time"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"til minutter"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"til timer"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-de/strings.xml b/compose/material3/material3/src/androidMain/res/values-de/strings.xml
new file mode 100644
index 0000000..3cee3b1
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-de/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Dialogfeld"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Maximiert"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Minimiert"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Schließen"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Suche"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Vorschläge unten"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Datum auswählen"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Ausgewähltes Datum"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Zur Jahresauswahl wechseln"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Wischen, um ein Jahr auszuwählen, oder tippen, um zur Tagesauswahl zurückzukehren"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Zum nächsten Monat wechseln"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Zum vorherigen Monat wechseln"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Zum Jahr %1$s wechseln"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Aktuelle Auswahl: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Kein Datum"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Heute"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Jahresauswahl sichtbar"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Datum auswählen"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Eingabedatum"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Datum"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Eingabedatum: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Kein Datum"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Unzulässiges Datum: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Datum entspricht nicht dem erwarteten Format: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Datum liegt außerhalb des erwarteten Jahresbereichs (%1$s–%2$s)"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"In den Kalendereingabemodus wechseln"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"In den Texteingabemodus wechseln"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Zum Ansehen nachfolgender Jahre scrollen"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Zum Ansehen vorheriger Jahre scrollen"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Daten auswählen"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Startdatum"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Enddatum"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Zum Ansehen des nächsten Monats scrollen"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Zum Ansehen des vorherigen Monats scrollen"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Im Zeitraum"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Daten eingeben"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Angegebener Zeitraum ungültig"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Ziehpunkt"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Ansicht am unteren Rand minimieren"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Ansicht am unteren Rand schließen"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Ansicht am unteren Rand maximieren"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Kurzinfo"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Kurzinfo anzeigen"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"Nachmittags"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"Vormittags"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Vormittags oder nachmittags auswählen"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Stunde auswählen"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Minuten auswählen"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d Uhr"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d Std."</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d Minuten"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minute"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Stunde"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"für Minuten"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"für Stunde"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-el/strings.xml b/compose/material3/material3/src/androidMain/res/values-el/strings.xml
new file mode 100644
index 0000000..bee936e
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-el/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Παράθυρο διαλόγου"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Αναπτυγμένο"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Συμπτυγμένο"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Παράβλεψη"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Αναζήτηση"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Προτάσεις παρακάτω"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Επιλογή ημερομηνίας"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Επιλεγμένη ημερομηνία"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Εναλλαγή σε επιλογή έτους"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Σύρετε για να επιλέξετε ένα έτος ή πατήστε για να επιστρέψετε στην επιλογή ημέρας."</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Αλλαγή στον επόμενο μήνα"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Αλλαγή στον προηγούμενο μήνα"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Μετάβαση στο έτος %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Τρέχουσα επιλογή: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Καμία"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Σήμερα"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Το εργαλείο επιλογής έτους είναι ορατό"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Επιλογή ημερομηνίας"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Εισαγωγή ημερομηνίας"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Ημερομηνία"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Εισαγωγή ημερομηνίας: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Καμία"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Η ημερομηνία δεν επιτρέπεται: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Η ημερομηνία δεν αντιστοιχεί στο αναμενόμενο μοτίβο: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Η ημερομηνία είναι εκτός του αναμενόμενου εύρους ετών %1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Εναλλαγή στη λειτουργία εισαγωγής ημερολογίου"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Εναλλαγή στη λειτουργία εισαγωγής κειμένου"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Κάντε κύλιση για εμφάνιση επόμενων ετών"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Κάντε κύλιση για εμφάνιση προηγούμενων ετών"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Επιλογή ημερομηνιών"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Ημερομηνία έναρξης"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Ημερομηνία λήξης"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Κάντε κύλιση για εμφάνιση του επόμενου μήνα"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Κάντε κύλιση για εμφάνιση του προηγούμενου μήνα"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Εντός εύρους"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Εισαγωγή ημερομηνιών"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Μη έγκυρη εισαγωγή εύρους ημερομηνιών"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Λαβή μεταφοράς"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Σύμπτυξη φύλλου κάτω μέρους"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Παράβλεψη φύλλου κάτω μέρους"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Ανάπτυξη φύλλου κάτω μέρους"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Επεξήγηση εργαλείου"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Προβολή επεξήγησης εργαλείου"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"μμ"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"πμ"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Επιλέξτε π.μ. ή μ.μ."</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Επιλογή ώρας"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Επιλογή λεπτών"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d η ώρα"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"Ώρα %1$d"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d λεπτά"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Λεπτό"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Ώρα"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"για λεπτά"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"για ώρα"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-en-rAU/strings.xml b/compose/material3/material3/src/androidMain/res/values-en-rAU/strings.xml
new file mode 100644
index 0000000..f2f7017
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-en-rAU/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Dialogue"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Expanded"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Collapsed"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Dismiss"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Search"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Suggestions below"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Select date"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Selected date"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Switch to selecting a year"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Swipe to select a year or tap to switch back to selecting a day"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Change to next month"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Change to previous month"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Navigate to year %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Current selection: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"None"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Today"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Year picker visible"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Select date"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Entered date"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Date"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Entered date: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"None"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Date not allowed: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Date does not match expected pattern: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Date out of expected year range %1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Switch to calendar input mode"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Switch to text input mode"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Scroll to show later years"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Scroll to show earlier years"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Select dates"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Start date"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"End date"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Scroll to show the next month"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Scroll to show the previous month"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"In range"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Enter dates"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Invalid date range input"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Drag handle"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Collapse bottom sheet"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Dismiss bottom sheet"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Expand bottom sheet"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Tooltip"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Show tooltip"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"p.m."</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"a.m."</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Select a.m. or p.m."</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Select hour"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Select minutes"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d o\'clock"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d hours"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d minutes"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minute"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Hour"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"for minutes"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"for hour"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-en-rCA/strings.xml b/compose/material3/material3/src/androidMain/res/values-en-rCA/strings.xml
index e1286b7..8914bb2 100644
--- a/compose/material3/material3/src/androidMain/res/values-en-rCA/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-en-rCA/strings.xml
@@ -17,112 +17,59 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for m3c_dialog (7617233117134790350) -->
- <skip />
+ <string name="m3c_dialog" msgid="7617233117134790350">"Dialog"</string>
<string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Expanded"</string>
<string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Collapsed"</string>
- <!-- no translation found for m3c_snackbar_dismiss (6152755701819882931) -->
- <skip />
- <!-- no translation found for m3c_search_bar_search (6152806324422087846) -->
- <skip />
- <!-- no translation found for m3c_suggestions_available (7655536806087401899) -->
- <skip />
- <!-- no translation found for m3c_date_picker_title (7430790972741451689) -->
- <skip />
- <!-- no translation found for m3c_date_picker_headline (7605002211875882969) -->
- <skip />
- <!-- no translation found for m3c_date_picker_switch_to_year_selection (791651718641787594) -->
- <skip />
- <!-- no translation found for m3c_date_picker_switch_to_day_selection (395627960681594326) -->
- <skip />
- <!-- no translation found for m3c_date_picker_switch_to_next_month (7142101321095356500) -->
- <skip />
- <!-- no translation found for m3c_date_picker_switch_to_previous_month (228438865139394590) -->
- <skip />
- <!-- no translation found for m3c_date_picker_navigate_to_year_description (8436650776581492840) -->
- <skip />
- <!-- no translation found for m3c_date_picker_headline_description (3664277305226978227) -->
- <skip />
- <!-- no translation found for m3c_date_picker_no_selection_description (5811000998184572395) -->
- <skip />
- <!-- no translation found for m3c_date_picker_today_description (3199387177749801575) -->
- <skip />
- <!-- no translation found for m3c_date_picker_year_picker_pane_title (2068382232816991922) -->
- <skip />
- <!-- no translation found for m3c_date_input_title (7306227249789210568) -->
- <skip />
- <!-- no translation found for m3c_date_input_headline (8166741421776570875) -->
- <skip />
- <!-- no translation found for m3c_date_input_label (2895559812010326913) -->
- <skip />
- <!-- no translation found for m3c_date_input_headline_description (229313757840775812) -->
- <skip />
- <!-- no translation found for m3c_date_input_no_input_description (1237013946323089826) -->
- <skip />
- <!-- no translation found for m3c_date_input_invalid_not_allowed (2521768508935305279) -->
- <skip />
- <!-- no translation found for m3c_date_input_invalid_for_pattern (6116910750161463197) -->
- <skip />
- <!-- no translation found for m3c_date_input_invalid_year_range (7052898923934555305) -->
- <skip />
- <!-- no translation found for m3c_date_picker_switch_to_calendar_mode (1804346892470238807) -->
- <skip />
- <!-- no translation found for m3c_date_picker_switch_to_input_mode (2219746470065162704) -->
- <skip />
- <!-- no translation found for m3c_date_picker_scroll_to_later_years (5727367015496556177) -->
- <skip />
- <!-- no translation found for m3c_date_picker_scroll_to_earlier_years (7813882352367152251) -->
- <skip />
- <!-- no translation found for m3c_date_range_picker_title (3134165431120340385) -->
- <skip />
- <!-- no translation found for m3c_date_range_picker_start_headline (4665981448952749820) -->
- <skip />
- <!-- no translation found for m3c_date_range_picker_end_headline (4947636797751277713) -->
- <skip />
- <!-- no translation found for m3c_date_range_picker_scroll_to_next_month (602077859540990149) -->
- <skip />
- <!-- no translation found for m3c_date_range_picker_scroll_to_previous_month (4592174524846109496) -->
- <skip />
- <!-- no translation found for m3c_date_range_picker_day_in_range (2138321128465719402) -->
- <skip />
- <!-- no translation found for m3c_date_range_input_title (3148384720560189467) -->
- <skip />
- <!-- no translation found for m3c_date_range_input_invalid_range_input (3190049423327661366) -->
- <skip />
- <!-- no translation found for m3c_bottom_sheet_drag_handle_description (8403354765404029791) -->
- <skip />
- <!-- no translation found for m3c_bottom_sheet_collapse_description (2988463736136100848) -->
- <skip />
- <!-- no translation found for m3c_bottom_sheet_dismiss_description (1555567894577437024) -->
- <skip />
- <!-- no translation found for m3c_bottom_sheet_expand_description (6670819569745899763) -->
- <skip />
- <!-- no translation found for m3c_tooltip_pane_description (5460405025248574620) -->
- <skip />
- <!-- no translation found for m3c_tooltip_long_press_label (1805687647081129904) -->
- <skip />
- <!-- no translation found for m3c_time_picker_pm (6616362054113087709) -->
- <skip />
- <!-- no translation found for m3c_time_picker_am (2786685010796619560) -->
- <skip />
- <!-- no translation found for m3c_time_picker_period_toggle_description (5865171949528594571) -->
- <skip />
- <!-- no translation found for m3c_time_picker_hour_selection (8876759303332837035) -->
- <skip />
- <!-- no translation found for m3c_time_picker_minute_selection (4699133535056739733) -->
- <skip />
- <!-- no translation found for m3c_time_picker_hour_suffix (3458167507790628988) -->
- <skip />
- <!-- no translation found for m3c_time_picker_hour_24h_suffix (9179527532316922345) -->
- <skip />
- <!-- no translation found for m3c_time_picker_minute_suffix (5064177921781937179) -->
- <skip />
- <!-- no translation found for m3c_time_picker_minute (4313071914266462005) -->
- <skip />
- <!-- no translation found for m3c_time_picker_hour (2349193472625211372) -->
- <skip />
- <!-- no translation found for m3c_time_picker_minute_text_field (7661234488295443182) -->
- <skip />
- <!-- no translation found for m3c_time_picker_hour_text_field (6973808109666874069) -->
- <skip />
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Dismiss"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Search"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Suggestions below"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Select date"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Selected date"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Switch to selecting a year"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Swipe to select a year, or tap to switch back to selecting a day"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Change to next month"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Change to previous month"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Navigate to year %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Current selection: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"None"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Today"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Year picker visible"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Select date"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Entered date"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Date"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Entered date: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"None"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Date not allowed: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Date does not match expected pattern: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Date out of expected year range %1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Switch to calendar input mode"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Switch to text input mode"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Scroll to show later years"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Scroll to show earlier years"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Select dates"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Start date"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"End date"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Scroll to show the next month"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Scroll to show the previous month"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"In range"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Enter dates"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Invalid date range input"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Drag handle"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Collapse bottom sheet"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Dismiss bottom sheet"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Expand bottom sheet"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Tooltip"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Show tooltip"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Select AM or PM"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Select hour"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Select minutes"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d o\'clock"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d hours"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d minutes"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minute"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Hour"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"for minutes"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"for hour"</string>
</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-en-rGB/strings.xml b/compose/material3/material3/src/androidMain/res/values-en-rGB/strings.xml
new file mode 100644
index 0000000..f2f7017
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-en-rGB/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Dialogue"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Expanded"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Collapsed"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Dismiss"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Search"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Suggestions below"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Select date"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Selected date"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Switch to selecting a year"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Swipe to select a year or tap to switch back to selecting a day"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Change to next month"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Change to previous month"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Navigate to year %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Current selection: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"None"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Today"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Year picker visible"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Select date"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Entered date"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Date"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Entered date: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"None"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Date not allowed: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Date does not match expected pattern: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Date out of expected year range %1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Switch to calendar input mode"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Switch to text input mode"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Scroll to show later years"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Scroll to show earlier years"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Select dates"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Start date"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"End date"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Scroll to show the next month"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Scroll to show the previous month"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"In range"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Enter dates"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Invalid date range input"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Drag handle"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Collapse bottom sheet"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Dismiss bottom sheet"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Expand bottom sheet"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Tooltip"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Show tooltip"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"p.m."</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"a.m."</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Select a.m. or p.m."</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Select hour"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Select minutes"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d o\'clock"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d hours"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d minutes"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minute"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Hour"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"for minutes"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"for hour"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-en-rIN/strings.xml b/compose/material3/material3/src/androidMain/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..f2f7017
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-en-rIN/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Dialogue"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Expanded"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Collapsed"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Dismiss"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Search"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Suggestions below"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Select date"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Selected date"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Switch to selecting a year"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Swipe to select a year or tap to switch back to selecting a day"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Change to next month"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Change to previous month"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Navigate to year %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Current selection: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"None"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Today"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Year picker visible"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Select date"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Entered date"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Date"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Entered date: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"None"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Date not allowed: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Date does not match expected pattern: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Date out of expected year range %1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Switch to calendar input mode"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Switch to text input mode"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Scroll to show later years"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Scroll to show earlier years"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Select dates"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Start date"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"End date"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Scroll to show the next month"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Scroll to show the previous month"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"In range"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Enter dates"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Invalid date range input"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Drag handle"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Collapse bottom sheet"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Dismiss bottom sheet"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Expand bottom sheet"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Tooltip"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Show tooltip"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"p.m."</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"a.m."</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Select a.m. or p.m."</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Select hour"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Select minutes"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d o\'clock"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d hours"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d minutes"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minute"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Hour"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"for minutes"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"for hour"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-en-rXC/strings.xml b/compose/material3/material3/src/androidMain/res/values-en-rXC/strings.xml
index af84efe..8713ddb 100644
--- a/compose/material3/material3/src/androidMain/res/values-en-rXC/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values-en-rXC/strings.xml
@@ -17,112 +17,59 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for m3c_dialog (7617233117134790350) -->
- <skip />
+ <string name="m3c_dialog" msgid="7617233117134790350">"Dialog"</string>
<string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Expanded"</string>
<string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Collapsed"</string>
- <!-- no translation found for m3c_snackbar_dismiss (6152755701819882931) -->
- <skip />
- <!-- no translation found for m3c_search_bar_search (6152806324422087846) -->
- <skip />
- <!-- no translation found for m3c_suggestions_available (7655536806087401899) -->
- <skip />
- <!-- no translation found for m3c_date_picker_title (7430790972741451689) -->
- <skip />
- <!-- no translation found for m3c_date_picker_headline (7605002211875882969) -->
- <skip />
- <!-- no translation found for m3c_date_picker_switch_to_year_selection (791651718641787594) -->
- <skip />
- <!-- no translation found for m3c_date_picker_switch_to_day_selection (395627960681594326) -->
- <skip />
- <!-- no translation found for m3c_date_picker_switch_to_next_month (7142101321095356500) -->
- <skip />
- <!-- no translation found for m3c_date_picker_switch_to_previous_month (228438865139394590) -->
- <skip />
- <!-- no translation found for m3c_date_picker_navigate_to_year_description (8436650776581492840) -->
- <skip />
- <!-- no translation found for m3c_date_picker_headline_description (3664277305226978227) -->
- <skip />
- <!-- no translation found for m3c_date_picker_no_selection_description (5811000998184572395) -->
- <skip />
- <!-- no translation found for m3c_date_picker_today_description (3199387177749801575) -->
- <skip />
- <!-- no translation found for m3c_date_picker_year_picker_pane_title (2068382232816991922) -->
- <skip />
- <!-- no translation found for m3c_date_input_title (7306227249789210568) -->
- <skip />
- <!-- no translation found for m3c_date_input_headline (8166741421776570875) -->
- <skip />
- <!-- no translation found for m3c_date_input_label (2895559812010326913) -->
- <skip />
- <!-- no translation found for m3c_date_input_headline_description (229313757840775812) -->
- <skip />
- <!-- no translation found for m3c_date_input_no_input_description (1237013946323089826) -->
- <skip />
- <!-- no translation found for m3c_date_input_invalid_not_allowed (2521768508935305279) -->
- <skip />
- <!-- no translation found for m3c_date_input_invalid_for_pattern (6116910750161463197) -->
- <skip />
- <!-- no translation found for m3c_date_input_invalid_year_range (7052898923934555305) -->
- <skip />
- <!-- no translation found for m3c_date_picker_switch_to_calendar_mode (1804346892470238807) -->
- <skip />
- <!-- no translation found for m3c_date_picker_switch_to_input_mode (2219746470065162704) -->
- <skip />
- <!-- no translation found for m3c_date_picker_scroll_to_later_years (5727367015496556177) -->
- <skip />
- <!-- no translation found for m3c_date_picker_scroll_to_earlier_years (7813882352367152251) -->
- <skip />
- <!-- no translation found for m3c_date_range_picker_title (3134165431120340385) -->
- <skip />
- <!-- no translation found for m3c_date_range_picker_start_headline (4665981448952749820) -->
- <skip />
- <!-- no translation found for m3c_date_range_picker_end_headline (4947636797751277713) -->
- <skip />
- <!-- no translation found for m3c_date_range_picker_scroll_to_next_month (602077859540990149) -->
- <skip />
- <!-- no translation found for m3c_date_range_picker_scroll_to_previous_month (4592174524846109496) -->
- <skip />
- <!-- no translation found for m3c_date_range_picker_day_in_range (2138321128465719402) -->
- <skip />
- <!-- no translation found for m3c_date_range_input_title (3148384720560189467) -->
- <skip />
- <!-- no translation found for m3c_date_range_input_invalid_range_input (3190049423327661366) -->
- <skip />
- <!-- no translation found for m3c_bottom_sheet_drag_handle_description (8403354765404029791) -->
- <skip />
- <!-- no translation found for m3c_bottom_sheet_collapse_description (2988463736136100848) -->
- <skip />
- <!-- no translation found for m3c_bottom_sheet_dismiss_description (1555567894577437024) -->
- <skip />
- <!-- no translation found for m3c_bottom_sheet_expand_description (6670819569745899763) -->
- <skip />
- <!-- no translation found for m3c_tooltip_pane_description (5460405025248574620) -->
- <skip />
- <!-- no translation found for m3c_tooltip_long_press_label (1805687647081129904) -->
- <skip />
- <!-- no translation found for m3c_time_picker_pm (6616362054113087709) -->
- <skip />
- <!-- no translation found for m3c_time_picker_am (2786685010796619560) -->
- <skip />
- <!-- no translation found for m3c_time_picker_period_toggle_description (5865171949528594571) -->
- <skip />
- <!-- no translation found for m3c_time_picker_hour_selection (8876759303332837035) -->
- <skip />
- <!-- no translation found for m3c_time_picker_minute_selection (4699133535056739733) -->
- <skip />
- <!-- no translation found for m3c_time_picker_hour_suffix (3458167507790628988) -->
- <skip />
- <!-- no translation found for m3c_time_picker_hour_24h_suffix (9179527532316922345) -->
- <skip />
- <!-- no translation found for m3c_time_picker_minute_suffix (5064177921781937179) -->
- <skip />
- <!-- no translation found for m3c_time_picker_minute (4313071914266462005) -->
- <skip />
- <!-- no translation found for m3c_time_picker_hour (2349193472625211372) -->
- <skip />
- <!-- no translation found for m3c_time_picker_minute_text_field (7661234488295443182) -->
- <skip />
- <!-- no translation found for m3c_time_picker_hour_text_field (6973808109666874069) -->
- <skip />
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Dismiss"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Search"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Suggestions below"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Select date"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Selected date"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Switch to selecting a year"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Swipe to select a year, or tap to switch back to selecting a day"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Change to next month"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Change to previous month"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Navigate to year %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Current selection: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"None"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Today"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Year picker visible"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Select date"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Entered date"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Date"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Entered date: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"None"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Date not allowed: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Date does not match expected pattern: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Date out of expected year range %1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Switch to calendar input mode"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Switch to text input mode"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Scroll to show later years"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Scroll to show earlier years"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Select dates"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Start date"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"End date"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Scroll to show the next month"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Scroll to show the previous month"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"In range"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Enter dates"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Invalid date range input"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Drag handle"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Collapse bottom sheet"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Dismiss bottom sheet"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Expand bottom sheet"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Tooltip"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Show tooltip"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Select AM or PM"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Select hour"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Select minutes"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d o\'clock"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d hours"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d minutes"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minute"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Hour"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"for minutes"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"for hour"</string>
</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-es-rUS/strings.xml b/compose/material3/material3/src/androidMain/res/values-es-rUS/strings.xml
new file mode 100644
index 0000000..3ffdcf73
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-es-rUS/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Diálogo"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Expandido"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Contraído"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Descartar"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Buscar"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Sugerencias a continuación"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Seleccionar fecha"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Fecha seleccionada"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Cambiar a seleccionar un año"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Desliza el dedo para seleccionar un año o presiona para volver a la selección de día"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Cambiar al mes siguiente"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Cambiar al mes anterior"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Navegar al año %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Selección actual: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Ninguna"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Hoy"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Selector de año visible"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Seleccionar fecha"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Fecha ingresada"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Fecha"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Fecha ingresada: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Ninguna"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Fecha no permitida: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"La fecha no coincide con el patrón esperado: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"La fecha está fuera del rango de años esperado: %1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Cambiar al modo de entrada de calendario"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Cambiar al modo de entrada de texto"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Desplázate para ver los últimos años"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Desplázate para ver los primeros años"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Seleccionar fechas"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Fecha de inicio"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Fecha de finalización"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Desplázate para ver el próximo mes"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Desplázate para ver el mes anterior"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"En el rango"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Ingresar fechas"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Se introdujo un período no válido"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Controlador de arrastre"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Contraer la hoja inferior"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Descartar la hoja inferior"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Expandir la hoja inferior"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Información"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Mostrar información"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Selecciona a.m. o p.m."</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Seleccionar hora"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Seleccionar los minutos"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d en punto"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d horas"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d minutos"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minuto"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Hora"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"por minutos"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"por hora"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-es/strings.xml b/compose/material3/material3/src/androidMain/res/values-es/strings.xml
new file mode 100644
index 0000000..659ba0b
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-es/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Cuadro de diálogo"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Desplegado"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Contraído"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Cerrar"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Buscar"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Sugerencias a continuación"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Seleccionar fecha"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Fecha seleccionada"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Cambiar para seleccionar un año"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Desliza para seleccionar un año o toca para volver a seleccionar un día"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Cambiar al mes siguiente"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Cambiar al mes anterior"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Ir al año %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Seleccionado: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"No hay datos"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Hoy"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Selector de año visible"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Seleccionar fecha"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Fecha introducida"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Fecha"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Fecha introducida: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"No hay datos"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Fecha no permitida: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"La fecha no coincide con el patrón esperado: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Fecha fuera del intervalo de años previsto: %1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Cambiar al modo de introducción de calendario"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Cambiar al modo de introducción de texto"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Desplázate para ver los años posteriores"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Desplázate para ver los años anteriores"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Seleccionar fechas"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Fecha de inicio"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Fecha de finalización"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Desplázate para ver el mes siguiente"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Desplázate para ver el mes anterior"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Dentro del intervalo"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Introducir fechas"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"El intervalo de fechas no es válido"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Controlador de arrastre"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Contrae la hoja inferior"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Cierra la hoja inferior"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Despliega la hoja inferior"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Descripción emergente"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Mostrar descripción emergente"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Selecciona AM o PM"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Seleccionar hora"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Seleccionar minutos"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d en punto"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d horas"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d minutos"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minutos"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Hora"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"para los minutos"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"para la hora"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-et/strings.xml b/compose/material3/material3/src/androidMain/res/values-et/strings.xml
new file mode 100644
index 0000000..f283b3d
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-et/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Dialoog"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Laiendatud"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Ahendatud"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Loobu"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Otsing"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Soovitused on allpool"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Valige kuupäev"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Valitud kuupäev"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Lülitu aasta valimisele"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Pühkige aasta valimiseks või puudutage, et minna tagasi päeva valimise juurde"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Vaheta järgmisele kuule"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Vaheta eelmisele kuule"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Liigu aasta %1$s juurde"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Praegune valik: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Puudub"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Täna"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Aasta valija on nähtav"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Valige kuupäev"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Sisestatud kuupäev"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Kuupäev"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Sisestatud kuupäev: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Puudub"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Kuupäev pole lubatud: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Kuupäev ei ühti eeldatud mustriga: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Kuupäev on väljaspool eeldatud aastavahemikku %1$s–%2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Lülitu kalendrisisestusrežiimile"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Lülitu tekstisisestusrežiimile"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Hilisemate aastate kuvamiseks kerige"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Varasemate aastate kuvamiseks kerige"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Valige kuupäevad"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Alguskuupäev"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Lõppkuupäev"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Järgmise kuu kuvamiseks kerige"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Eelmise kuu kuvamiseks kerige"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Vahemikus"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Sisestage kuupäevad"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Sisestati sobimatu kuupäevavahemik"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Lohistamispide"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Alumise lehe ahendamine"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Alumisest lehest loobumine"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Alumise lehe laiendamine"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Kohtspikker"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Kuva kohtspikker"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Valige AM või PM"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Tunni valimine"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Minutite valimine"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d.00"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d tundi"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d minutit"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minut"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Tunnid"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"minutite jaoks"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"tundide jaoks"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-eu/strings.xml b/compose/material3/material3/src/androidMain/res/values-eu/strings.xml
new file mode 100644
index 0000000..4a3ec21
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-eu/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Leihoa"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Zabalduta"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Tolestuta"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Baztertu"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Bilatu"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Iradokizunak daude behean"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Hautatu data bat"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Hautatutako data"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Joan urte-hautatzailera"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Pasatu hatza urte bat hautatzeko. Bestela, sakatu hau eguna hautatzeko pantailara itzultzeko."</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Aldatu hurrengo hilabetera"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Aldatu aurreko hilabetera"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Joan %1$s. urtera"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Oraingo hautapena: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Bat ere ez"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Gaur"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Urte-hautatzailea ikusgai dago"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Hautatu data bat"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Idatzitako data"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Data"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Idatzitako data: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Bat ere ez"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Ez da onartzen data: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Data ez dator bat espero den ereduarekin: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Espero den urte tartetik (%1$s-%2$s) kanpo dago data"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Aldatu egutegiaren idazketa-metodora"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Aldatu testua idazteko modura"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Egin gora/behera etorkizuneko urteak erakusteko"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Egin gora/behera iraganeko urteak erakusteko"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Hautatu datak"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Hasiera-data"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Amaiera-data"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Egin gora/behera hurrengo hilabetea erakusteko"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Egin gora/behera aurreko hilabetea erakusteko"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Barrutian"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Idatzi datak"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Idatzitako data tarteak ez du balio"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Arrastatzeko kontrol-puntua"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Tolestu pantailaren behealdean ainguratutako orria"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Baztertu pantailaren behealdean ainguratutako orria"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Zabaldu pantailaren behealdean ainguratutako orria"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Aholkua"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Erakutsi aholkua"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Hautatu AM edo PM"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Hautatu ordua"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Hautatu minutuak"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d minutu"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minutua"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Ordua"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"minutuetarako"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"ordurako"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-fa/strings.xml b/compose/material3/material3/src/androidMain/res/values-fa/strings.xml
new file mode 100644
index 0000000..0cae189
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-fa/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"کادر گفتگو"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"ازهم باز شد"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"جمع شد"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"بستن"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"جستجو"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"پیشنهادهای زیر"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"انتخاب تاریخ"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"تاریخ انتخابی"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"رفتن به انتخاب سال"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"برای انتخاب سال، تند بکشید یا برای برگشتن به انتخاب روز، ضربه بزنید"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"تغییر به ماه بعدی"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"تغییر به ماه قبلی"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"پیمایش به سال %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"انتخاب فعلی: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"هیچکدام"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"امروز"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"انتخابگر سال نمایان است"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"انتخاب تاریخ"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"تاریخ واردشده"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"تاریخ"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"تاریخ واردشده: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"هیچکدام"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"تاریخ مجاز نیست: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"تاریخ با الگوی موردانتظار مطابقت ندارد: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"تاریخ خارج از بازه زمانی %1$s تا %2$s است"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"رفتن به روش ورودی تقویم"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"رفتن به حالت ورودی نوشتاری"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"برای نمایش سالهای بعد پیمایش کنید"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"برای نمایش سالهای قبل پیمایش کنید"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"تاریخها را انتخاب کنید"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"تاریخ شروع"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"تاریخ پایان"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"برای نمایش ماه بعد پیمایش کنید"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"برای نمایش ماه قبل پیمایش کنید"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"در محدوده"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"تاریخها را وارد کنید"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"محدوده تاریخ واردشده نامعتبر است"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"دستگیره کشاندن"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"جمع کردن برگ زیرین"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"بستن برگ زیرین"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"ازهم باز کردن برگ زیرین"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"نکتهابزار"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"نمایش نکتهابزار"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"ب.ظ."</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"ق.ظ."</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"انتخاب ق.ظ. یا ب.ظ."</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"انتخاب ساعت"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"انتخاب دقیقه"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"ساعت %1$d"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d ساعت"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d دقیقه"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"دقیقه"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"ساعت"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"برای دقیقه"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"برای ساعت"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-fi/strings.xml b/compose/material3/material3/src/androidMain/res/values-fi/strings.xml
new file mode 100644
index 0000000..4936890
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-fi/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Valintaikkuna"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Laajennettu"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Tiivistetty"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Ohita"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Hae"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Ehdotuksia alla"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Valitse päivämäärä"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Valittu päivämäärä"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Vaihda vuoden valintaan"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Valitse vuosi pyyhkäisemällä tai palaa päivän valintaan napauttamalla"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Vaihda seuraavaan kuukauteen"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Vaihda edelliseen kuukauteen"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Siirry vuoteen %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Nykyinen valinta: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"–"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Tänään"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Vuosivalitsin näkyvillä"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Valitse päivämäärä"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Lisätty päivämäärä"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Päivämäärä"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Lisätty päivämäärä: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"–"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Päivämäärä ei sallittu: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Päivämäärä ei vastaa odotettua mallia: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Päivämäärä ei sisälly odotettuun vuosiaikaväliin: %1$s–%2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Vaihda syöttötavaksi kalenteri"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Vaihda tekstinsyöttötilaan"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Vieritä nähdäksesi myöhemmät vuodet"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Vieritä nähdäksesi aiemmat vuodet"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Valitse päivämäärät"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Alkamispäivä"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Päättymispäivä"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Vieritä nähdäksesi seuraavan kuukauden"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Vieritä nähdäksesi edellisen kuukauden"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Valitulla välillä"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Lisää päivämäärät"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Virheellinen ajanjakso"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Vetokahva"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Tiivistä alapaneeli"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Hylkää alapaneeli"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Laajenna alapaneeli"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Vihjeteksti"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Näytä vihjeteksti"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"IP"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AP"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Valitse AP tai IP"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Valitse tunti"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Valitse minuutit"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"Kello %1$d"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d h"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d minuuttia"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minuutti"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Tunti"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"minuuttien osalta"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"tuntien osalta"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-fr-rCA/strings.xml b/compose/material3/material3/src/androidMain/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..9f32ba2
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-fr-rCA/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Dialogue"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Développé"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Réduit"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Fermer"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Recherche"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Suggestions ci-dessous"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Sélectionner une date"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Date sélectionnée"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Passer à la sélection d\'une année"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Balayez l\'écran pour sélectionner une année, ou touchez pour revenir en arrière et sélectionner un jour"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Passer au mois suivant"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Passer au mois précédent"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Naviguez jusqu\'à l\'année %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Sélection actuelle : %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Aucune"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Aujourd\'hui"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Sélecteur d\'année visible"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Sélectionner une date"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Date entrée"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Date"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Date entrée : %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Aucune"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Date non autorisée : %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"La date ne correspond pas au schéma prévu : %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Date non comprise dans la fourchette prévue des années %1$s à %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Passer au mode d\'entrée de l\'agenda"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Passer au mode d\'entrée de texte"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Faites défiler pour afficher les années suivantes"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Faites défiler pour afficher les années précédentes"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Sélectionner les dates"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Date de début"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Date de fin"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Faites défiler pour afficher le mois suivant"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Faites défiler pour afficher le mois précédent"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Dans la fourchette"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Entrer les dates"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Entrée de période incorrecte"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Poignée de déplacement"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Réduire la zone de contenu dans le bas de l\'écran"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Fermer la zone de contenu dans le bas de l\'écran"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Développer la zone de contenu dans le bas de l\'écran"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Infobulle"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Afficher une infobulle"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Sélectionner AM ou PM"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Sélectionner l\'heure"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Sélectionnez les minutes"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d h"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d h"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d minutes"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minute"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Heure"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"pour les minutes"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"pour l\'heure"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-fr/strings.xml b/compose/material3/material3/src/androidMain/res/values-fr/strings.xml
new file mode 100644
index 0000000..617abdc
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-fr/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Boîte de dialogue"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Développé"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Réduit"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Fermer"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Rechercher"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Suggestions ci-dessous"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Sélectionner une date"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Date sélectionnée"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Passer à la sélection d\'une année"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Balayez l\'écran pour sélectionner une année ou appuyez pour revenir à la sélection d\'un jour"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Passer au mois suivant"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Passer au mois précédent"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Accéder à l\'année %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Sélection actuelle : %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Aucun"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Aujourd\'hui"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Sélecteur d\'année visible"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Sélectionner une date"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Date saisie"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Date"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Date saisie : %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Aucun"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Date non autorisée : %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"La date ne correspond pas au format attendu : %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Date hors de la plage d\'années attendue : %1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Passer au mode de saisie Agenda"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Passer au mode de saisie Texte"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Faites défiler pour afficher les années suivantes"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Faites défiler pour afficher les années précédentes"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Sélectionner des dates"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Date de début"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Date de fin"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Faites défiler pour afficher le mois suivant"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Faites défiler pour afficher le mois précédent"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Dans la plage"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Saisir des dates"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Plage de dates non valide"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Poignée de déplacement"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Réduire la bottom sheet"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Fermer la bottom sheet"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Développer la bottom sheet"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Info-bulle"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Afficher l\'info-bulle"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Sélectionner le format AM ou PM"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Sélectionner une heure"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Sélectionner des minutes"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d heures"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d heures"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d minutes"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minute"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Heure"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"en minutes"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"en heures"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-gl/strings.xml b/compose/material3/material3/src/androidMain/res/values-gl/strings.xml
new file mode 100644
index 0000000..d0a13b4
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-gl/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Cadro de diálogo"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Despregado"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Contraído"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Pechar"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Buscar"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Hai suxestións abaixo"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Selecciona a data"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Data seleccionada"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Cambiar á selección do ano"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Pasar o dedo para seleccionar un ano ou tocar a pantalla para volver á selección do día"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Cambiar ao mes seguinte"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Cambiar ao mes anterior"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Ir ao ano %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Selección actual: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Ningunha"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Hoxe"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Selector de ano visible"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Selecciona a data"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Data indicada"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Data"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Data indicada: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Ningunha"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Data non permitida: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"A data non coincide co padrón esperado: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"A data está fóra do intervalo de anos esperado (%1$s - %2$s)"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Cambiar ao modo de introdución de texto do calendario"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Cambiar ao modo de introdución de texto"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Desprazarse para mostrar anos posteriores"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Desprazarse para mostrar anos anteriores"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Selecciona as datas"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Data de inicio"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Data de finalización"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Desprazarse para mostrar o mes seguinte"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Desprazarse para mostrar o mes anterior"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Dentro do intervalo"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Indica as datas"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Indicouse un intervalo de datas que non é válido"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Controlador de arrastre"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Contrae o panel inferior"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Pecha o panel inferior"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Desprega o panel inferior"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Cadro de información"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Mostrar o cadro de información"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Selecciona a.m. ou p.m."</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Selecciona a hora"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Selecciona os minutos"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d horas"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d minutos"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minuto"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Hora"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"por minuto"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"por hora"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-gu/strings.xml b/compose/material3/material3/src/androidMain/res/values-gu/strings.xml
new file mode 100644
index 0000000..cacb9c4
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-gu/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"સંવાદ"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"મોટી કરેલી"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"નાની કરેલી"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"છોડી દો"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"શોધો"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"સૂચનો નીચે છે"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"તારીખ પસંદ કરો"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"પસંદ કરેલી તારીખ"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"વર્ષ પસંદ કરવાના વિકલ્પ પર સ્વિચ કરો"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"વર્ષ પસંદ કરવા માટે સ્વાઇપ કરો અથવા દિવસની પસંદગી પર પાછા સ્વિચ કરવા માટે ટૅપ કરો"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"બદલીને આગલો મહિનો પસંદ કરો"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"બદલીને પાછલો મહિનો પસંદ કરો"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"વર્ષ %1$s પર નૅવિગેટ કરો"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"હાલની પસંદગી: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"એકપણ નહીં"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"આજે"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"વર્ષ માટેનું પિકર દૃશ્યમાન છે"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"તારીખ પસંદ કરો"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"દાખલ કરેલી તારીખ"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"તારીખ"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"દાખલ કરેલી તારીખ: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"એકપણ નહીં"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"આ તારીખની મંજૂરી નથી: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"તારીખ અપેક્ષિત પૅટર્ન સાથે મેળ ખાતી નથી: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"અપેક્ષિત વર્ષની શ્રેણી %1$s - %2$sની બહારની તારીખ"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"કૅલેન્ડર ઇનપુટ મોડ પર સ્વિચ કરો"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"ટેક્સ્ટ ઇનપુટ મોડ પર સ્વિચ કરો"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"પછીના વર્ષો બતાવવા માટે સ્ક્રોલ કરો"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"અગાઉના વર્ષો બતાવવા માટે સ્ક્રોલ કરો"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"તારીખો પસંદ કરો"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"પ્રારંભ તારીખ"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"સમાપ્તિ તારીખ"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"આગલો મહિનો બતાવવા માટે સ્ક્રોલ કરો"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"પાછલો મહિનો બતાવવા માટે સ્ક્રોલ કરો"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"રેન્જમાં છે"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"તારીખો દાખલ કરો"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"તારીખની શ્રેણીનું અમાન્ય ઇનપુટ"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"ઑબ્જેક્ટ ખેંચવાનું હૅન્ડલ"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"બોટમ શીટ નાની કરો"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"બોટમ શીટ છોડી દો"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"બોટમ શીટ મોટી કરો"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"ટૂલટિપ"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"ટૂલટિપ બતાવો"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"AM કે PM પસંદ કરો"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"કલાક પસંદ કરો"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"મિનિટ પસંદ કરો"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d વાગ્યે"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d કલાક"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d મિનિટ"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"મિનિટ"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"કલાક"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"મિનિટ માટે"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"કલાક માટે"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-hi/strings.xml b/compose/material3/material3/src/androidMain/res/values-hi/strings.xml
new file mode 100644
index 0000000..3973f98
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-hi/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"डायलॉग"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"बड़ा किया गया"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"छोटा किया गया"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"खारिज करें"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"खोजें"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"सुझाव यहां मौजूद हैं"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"तारीख चुनें"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"चुनी गई तारीख"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"साल चुनने के लिए स्विच करें"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"किसी साल को चुनने के लिए स्वाइप करें या दिन को चुनने की सेटिंग पर वापस जाने के लिए टैप करें"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"अगले महीने पर सेट करें"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"पिछले महीने पर सेट करें"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"साल %1$s पर जाएं"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"फ़िलहाल, यह तारीख चुनी गई है: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"कोई नहीं"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"आज"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"साल चुनने का विकल्प दिख रहा है"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"तारीख चुनें"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"डाली गई तारीख"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"तारीख"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"डाली गई तारीख: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"कोई नहीं"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"यह तारीख सही नहीं है: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"तारीख सही फ़ॉर्मैट में नहीं डाली गई है: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"तारीख को साल की सही रेंज में नहीं डाला गया है %1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"कैलेंडर इनपुट मोड पर स्विच करें"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"टेक्स्ट इनपुट मोड पर स्विच करें"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"बाद वाले सालों की तारीख देखने के लिए स्क्रोल करें"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"पिछले सालों की तारीख देखने के लिए स्क्रोल करें"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"तारीखें चुनें"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"शुरू होने की तारीख"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"खत्म होने की तारीख"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"अगले महीने की तारीख देखने के लिए स्क्रोल करें"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"पिछले महीने की तारीख देखने के लिए स्क्रोल करें"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"रेंज में"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"तारीखें डालें"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"तारीख की दी गई सीमा गलत है"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"खींचकर छोड़ने वाला हैंडल"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"बॉटम शीट को छोटा करें"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"बॉटम शीट को खारिज करें"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"बॉटम शीट को बड़ा करें"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"टूलटिप"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"टूलटिप देखें"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"AM या PM चुनें"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"घंटा चुनें"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"मिनट चुनें"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d बजे"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d घंटे"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d मिनट"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"मिनट"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"घंटा"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"मिनट के लिए"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"घंटे के लिए"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-hr/strings.xml b/compose/material3/material3/src/androidMain/res/values-hr/strings.xml
new file mode 100644
index 0000000..70dab0f
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-hr/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Dijaloški okvir"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Prošireno"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Sažeto"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Odbaci"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Pretraživanje"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Prijedlozi su u nastavku"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Odaberite datum"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Odabrani datum"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Prijelaz na odabir godine"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Pomaknite se za odabir godine ili dodirnite za povratak na odabir dana"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Pomicanje na sljedeći mjesec"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Pomicanje na prethodni mjesec"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Prelazak u godinu %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Trenutačni odabir: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Ništa"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Danas"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Vidljiv je alat za odabir godine"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Odaberite datum"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Datum unosa"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Datum"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Datum unosa: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Ništa"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Datum nije dopušten: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Datum se ne podudara s očekivanim uzorkom: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Datum je izvan očekivanog raspona godine %1$s – %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Prijelaz na način unosa u Kalendaru"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Prijelaz na način unosa teksta"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Pomaknite se za prikaz kasnijih godina"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Pomaknite se za prikaz ranijih godina"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Odabir datuma"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Datum početka"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Datum završetka"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Pomaknite se za prikaz sljedećeg mjeseca"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Pomaknite se za prikaz prethodnog mjeseca"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"U dometu"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Unos datuma"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Unos datumskog raspona nije važeći"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Marker za povlačenje"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Sažimanje donje tablice"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Odbacivanje donje tablice"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Proširivanje donje tablice"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Opis"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Prikaži opis"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"Poslijepodne"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"Prijepodne"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Odaberite prijepodne ili poslijepodne"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Odabir sata"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Odaberite minute"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d h"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d h"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d min"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minuta"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Sat"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"za minute"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"za sat"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-hu/strings.xml b/compose/material3/material3/src/androidMain/res/values-hu/strings.xml
new file mode 100644
index 0000000..7808ce8
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-hu/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Párbeszédpanel"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Kibontva"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Összecsukva"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Elvetés"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Keresés"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Javaslatok alább"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Dátum kiválasztása"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Kiválasztott dátum"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Váltás az év kiválasztására"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Csúsztatással kiválaszthatja a kívánt évet, vagy koppintással visszaválthat a nap kiválasztásához."</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Váltás a következő hónapra"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Váltás az előző hónapra"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Navigálás a következő évhez: %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Jelenleg kiválasztva: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Nincs"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Ma"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Látható az évválasztó"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Dátum kiválasztása"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Megadott dátum"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Dátum"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Megadott dátum: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Nincs"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Nem engedélyezett dátum: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"A dátum nem felel meg a várt formátumnak: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"A dátum a várt időtartományon (%1$s – %2$s) kívül esik"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Váltás naptárbeviteli módra"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Váltás szövegbeviteli módra"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Görgessen a későbbi évek megjelenítéséhez"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Görgessen a korábbi évek megjelenítéséhez"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Dátumok kiválasztása"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Kezdő dátum"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Záró dátum"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Görgessen a következő hónap megjelenítéséhez"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Görgessen az előző hónap megjelenítéséhez"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Tartományon belül"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Dátumok megadása"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Érvénytelen a megadott dátumtartomány"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Fogópont"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Az alsó lap összecsukása"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Az alsó lap elvetése"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Az alsó lap kibontása"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Elemleírás"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Elemleírás megjelenítése"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"du."</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"de."</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Napszak kiválasztása"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Óra kiválasztása"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Perc kiválasztása"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d óra"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d óra"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d perc"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Perc"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Óra"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"perc megadása"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"óra megadása"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-hy/strings.xml b/compose/material3/material3/src/androidMain/res/values-hy/strings.xml
new file mode 100644
index 0000000..f50f0f3
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-hy/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Երկխոսության պատուհան"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Ծավալված է"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Ծալված է"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Փակել"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Որոնում"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Առաջարկները հասանելի են ստորև"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Ընտրեք ամսաթիվը"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Ընտրված ամսաթիվ"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Անցնել տարվա ընտրությանը"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Սահեցրեք՝ տարեթիվ ընտրելու համար, կամ հպեք՝ օրվա ընտրությանը վերադառնալու համար"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Անցնել հաջորդ ամսվան"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Անցնել նախորդ ամսվան"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Անցնել %1$s թվական"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Ընթացիկ ընտրությունը՝ %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Չկա"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Այսօր"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Տարեթվի ցուցադրվող ընտրիչ"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Ընտրեք ամսաթիվը"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Մուտքագրված ամսաթիվ"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Ամսաթիվ"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Մուտքագրված ամսաթիվ՝ %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Չկա"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Ամսաթիվը թույլատրված չէ՝ %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Ամսաթիվը չի համընկնում թույլատրելի ձևաչափի հետ՝ %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Ամսաթիվը տարեթվերի թույլատրելի միջակայքից (%1$s – %2$s) դուրս է"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Անցնել օրացույցի մուտքագրման ռեժիմ"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Անցնել տեքստի մուտքագրման ռեժիմին"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Ոլորեք՝ վերջին տարիները ցուցադրելու համար"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Ոլորեք՝ նախորդ տարիները ցուցադրելու համար"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Ընտրեք ամսաթվեր"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Սկզբի ամսաթիվ"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Ավարտի ամսաթիվ"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Ոլորեք՝ հաջորդ ամիսը ցուցադրելու համար"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Ոլորեք՝ նախորդ ամիսը ցուցադրելու համար"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Միջակայքում"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Մուտքագրեք ամսաթվերը"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Մուտքագրված ամսաթվերի միջակայքն անվավեր է"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Տեղափոխման նշիչ"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Ծալել ներքևի էկրանը"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Փակել ներքևի էկրանը"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Ծավալել ներքևի էկրանը"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Հուշակ"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Ցուցադրել հուշում"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Ընտրել AM կամ PM"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Ընտրեք ժամը"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Ընտրեք րոպեն"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d ժամ"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d րոպե"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Րոպեներ"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Ժամ"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"րոպեներ"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"ժամեր"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-in/strings.xml b/compose/material3/material3/src/androidMain/res/values-in/strings.xml
new file mode 100644
index 0000000..1622117
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-in/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Dialog"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Diperluas"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Diciutkan"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Tutup"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Telusuri"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Saran di bawah"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Pilih tanggal"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Tanggal yang dipilih"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Beralih ke memilih tahun"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Geser untuk memilih tahun, atau ketuk untuk beralih kembali ke pemilihan tanggal"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Ubah ke bulan berikutnya"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Ubah ke bulan sebelumnya"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Pilih tahun %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Pilihan saat ini: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Tidak ada"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Hari ini"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Pemilih tahun terlihat"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Pilih tanggal"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Tanggal yang dimasukkan"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Tanggal"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Tanggal yang dimasukkan: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Tidak ada"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Tanggal tidak diizinkan: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Tanggal tidak cocok dengan pola yang diharapkan: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Tanggal di luar rentang tahun yang diharapkan %1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Beralih ke mode input kalender"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Beralih ke mode input teks"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Scroll untuk menampilkan tahun berikutnya"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Scroll untuk menampilkan tahun sebelumnya"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Pilih tanggal"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Tanggal mulai"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Tanggal akhir"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Scroll untuk menampilkan bulan berikutnya"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Scroll untuk menampilkan bulan sebelumnya"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Dalam rentang"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Masukkan tanggal"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Input rentang tanggal tidak valid"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Handel geser"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Menciutkan sheet bawah"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Menutup sheet bawah"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Meluaskan sheet bawah"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Tooltip"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Tampilkan tooltip"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Pilih AM atau PM"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Pilih jam"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Pilih menit"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"Pukul %1$d"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d jam"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d menit"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Menit"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Jam"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"untuk menit"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"untuk jam"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-is/strings.xml b/compose/material3/material3/src/androidMain/res/values-is/strings.xml
new file mode 100644
index 0000000..5dcf9b3
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-is/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Gluggi"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Stækkað"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Minnkað"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Hunsa"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Leit"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Tillögur hér fyrir neðan"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Velja dagsetningu"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Valin dagsetning"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Skipta yfir í val á ári"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Strjúktu til að velja ár eða ýttu til að skipta aftur yfir í að velja dag"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Breyta í næsta mánuð"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Breyta í fyrri mánuð"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Fletta til ársins %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Núverandi val: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Ekkert"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Í dag"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Ársval birt"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Velja dagsetningu"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Skráð dagsetning"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Dagsetning"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Skráð dagsetning: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Ekkert"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Dagsetning er ekki leyfileg: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Dagsetning passar ekki við áætlað mynstur: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Dagsetning er utan áætlaðra ára: %1$s–%2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Skipta yfir í innfærsluaðferð fyrir dagatal"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Skipta yfir í textainnslátt"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Flettu til að sjá síðari ár"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Flettu til að sjá fyrri ár"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Velja dagsetningar"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Upphafsdagur"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Lokadagur"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Flettu til að sjá næsta mánuð"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Flettu til að sjá fyrri mánuð"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Innan tímabils"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Slá inn dagsetningar"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Ógilt tímabil fært inn"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Dragkló"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Minnka blað neðst"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Hunsa blað neðst"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Stækka blað neðst"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Ábending"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Sýna ábendingu"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"eh"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"fh"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Velja f.h. eða e.h."</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Velja klst."</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Velja mínútur"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"Kl. %1$d"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d klst."</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d mínútur"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Mínúta"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Klukkustund"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"fyrir mínútur"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"fyrir klukkustund"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-it/strings.xml b/compose/material3/material3/src/androidMain/res/values-it/strings.xml
new file mode 100644
index 0000000..62375a6
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-it/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Finestra di dialogo"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Espanso"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Compresso"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Chiudi"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Cerca"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Suggerimenti sotto"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Seleziona data"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Data selezionata"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Passa alla selezione di un anno"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Scorri per selezionare un anno o tocca per tornare alla selezione di un giorno"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Passa al mese successivo"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Passa al mese precedente"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Vai all\'anno %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Selezione attuale: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Nessuna selezione"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Oggi"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Selettore dell\'anno visibile"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Seleziona data"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Data inserita"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Data"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Data inserita: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Nessuna selezione"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Data non consentita: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"La data non corrisponde al pattern previsto: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"La data non rientra nell\'intervallo di anni previsto (%1$s-%2$s)"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Passa alla modalità di immissione calendario"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Passa alla modalità di immissione testo"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Scorri per visualizzare gli anni successivi"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Scorri per visualizzare gli anni precedenti"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Seleziona date"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Data di inizio"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Data di fine"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Scorri per visualizzare il mese successivo"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Scorri per visualizzare il mese precedente"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Nell\'intervallo"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Inserisci date"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Intervallo di date inserito non valido"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Punto di trascinamento"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Comprimi il riquadro inferiore"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Chiudi il riquadro inferiore"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Espandi il riquadro inferiore"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Descrizione comando"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Mostra descrizione comando"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Seleziona AM o PM"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Seleziona l\'ora"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Seleziona i minuti"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d in punto"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d ore"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d minuti"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minuto"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Ora"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"per i minuti"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"per l\'ora"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-iw/strings.xml b/compose/material3/material3/src/androidMain/res/values-iw/strings.xml
new file mode 100644
index 0000000..fe7d309
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-iw/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"תיבת דו-שיח"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"התפריט הנפתח מורחב"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"התפריט הנפתח מכווץ"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"סגירה"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"חיפוש"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"הצעות מופיעות למטה"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"בחירת תאריך"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"התאריך הנבחר"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"החלפה לבחירה של שנה"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"יש להחליק כדי לבחור שנה, או להקיש כדי לחזור לבחירת היום"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"מעבר לחודש הבא"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"מעבר לחודש הקודם"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"ניווט לשנת %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"הבחירה הנוכחית: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"ללא"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"היום"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"בורר השנה גלוי"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"בחירת תאריך"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"התאריך שהוזן"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"תאריך"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"התאריך שהוזן: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"ללא"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"תאריך לא מורשה: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"התאריך לא תואם לקו ביטול הנעילה הצפוי: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"התאריך נמצא מחוץ לטווח השנים הצפוי %1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"מעבר לשיטת קלט של יומן"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"מעבר לשיטת קלט של טקסט"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"צריך לגלול כדי להציג את השנים המאוחרות"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"צריך לגלול כדי להציג את השנים הקודמות"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"בחירת תאריכים"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"תאריך התחלה"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"תאריך סיום"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"צריך לגלול כדי להציג את החודש הבא"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"צריך לגלול כדי להציג את החודש הקודם"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"בטווח"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"הזנת תאריכים"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"קלט טווח תאריכים לא חוקי"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"נקודת אחיזה לגרירה"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"כיווץ הגיליון התחתון"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"סגירת הגיליון התחתון"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"הרחבת הגיליון התחתון"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"הסבר קצר"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"הצגת הסבר קצר"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"צריך לבחור ב-AM או ב-PM"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"בחירת שעה"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"בחירת דקות"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d שעות"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d דקות"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"דקות"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"שעות"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"דקות"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"שעות"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-ja/strings.xml b/compose/material3/material3/src/androidMain/res/values-ja/strings.xml
new file mode 100644
index 0000000..c624ebe
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-ja/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"ダイアログ"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"開いています"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"閉じています"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"閉じる"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"検索"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"検索候補は次のとおりです"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"日付の選択"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"選択した日付"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"年の選択に切り替え"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"スワイプして年を選択するか、タップして日付の選択に戻ります"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"翌月に変更"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"前月に変更"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"年に移動 %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"現在の選択: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"なし"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"今日"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"年の選択ツールの表示"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"日付の選択"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"入力された日付"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"日付"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"入力された日付: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"なし"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"許可されない日付: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"想定パターンと一致しない日付: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"想定される年の範囲(%1$s~%2$s)から日付が外れています"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"カレンダー入力モードに切り替え"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"テキスト入力モードに切り替え"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"これより後の年を表示するにはスクロールしてください"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"これより前の年を表示するにはスクロールしてください"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"日付の選択"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"開始日"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"終了日"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"翌月を表示するにはスクロールしてください"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"前月を表示するにはスクロールしてください"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"範囲内"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"日付の入力"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"入力された期間は無効です"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"ドラッグ ハンドル"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"ボトムシートを折りたたみます"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"ボトムシートを閉じます"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"ボトムシートを開きます"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"ツールチップ"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"ツールチップを表示"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"午前または午後を選択"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"時刻を選択"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"分を選択"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d 時"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d 時間"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d 分"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"分"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"時間"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"(分単位)"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"(時間単位)"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-ka/strings.xml b/compose/material3/material3/src/androidMain/res/values-ka/strings.xml
new file mode 100644
index 0000000..132e1f9
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-ka/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"დიალოგი"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"გაფართოებული"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"ჩაკეცილი"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"დახურვა"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"ძიება"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"შემოთავაზებები იხილეთ ქვემოთ"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"თარიღის არჩევა"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"არჩეული თარიღი"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"წლის არჩევაზე გადასვლა"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"გადაფურცლეთ წლის ასარჩევად, ან შეხებით აირჩიეთ ისევ დღის არჩევაზე გადართვა"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"შემდეგ თვეზე გადასვლა"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"წინა თვეზე გადასვლა"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"%1$s-ზე გადასვლა"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"ამჟამინდელი არჩევანი: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"არცერთი"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"დღეს"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"არჩეული წელი ხილულია"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"თარიღის არჩევა"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"შეყვანილი სახელი"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"თარიღი"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"შეყვანილი თარიღი: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"არცერთი"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"თარიღი დაუშვებელია: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"თარიღი არ ემთხვევა მოსალოდნელ ნიმუშს: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"თარიღი არ არის წლების მოსალოდნელ დიაპაზონში %1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"კალენდარში შეყვანის რეჟიმზე გადართვა"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"ტექსტის შეყვანის რეჟიმზე გადართვა"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"გადააადგილეთ შემდგომი წლების საჩვენებლად"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"გადააადგილეთ წინა წლების საჩვენებლად"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"თარიღების არჩევა"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"დაწყების თარიღი"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"დასრულების თარიღი"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"გადააადგილეთ შემდეგი თვის საჩვენებლად"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"გადააადგილეთ წინა თვის საჩვენებლად"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"არეალშია"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"თარიღების შეყვანა"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"შეყვანილია თარიღების არასწორი დიაპაზონი"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"სახელური ჩავლებისთვის"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"ქვედა ფურცლის ჩაკეცვა"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"ქვედა ფურცლის უარყოფა"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"ქვედა ფურცლის გაშლა"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"მინიშნება"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"მინიშნების ჩვენება"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"აირჩიეთ AM ან PM"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"აირჩიეთ საათი"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"აირჩიეთ წუთები"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d სთ"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d საათი"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d წთ"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"წუთი"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"საათი"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"რამდენიმე წუთით"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"ერთი საათით"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-kk/strings.xml b/compose/material3/material3/src/androidMain/res/values-kk/strings.xml
new file mode 100644
index 0000000..e208383
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-kk/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Диалогтік терезе"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Жайылды"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Жиылды"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Жабу"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Іздеу"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Төмендегі ұсыныстар"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Күн таңдау"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Таңдалған күн"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Жыл таңдауға өту"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Жыл таңдау үшін сырғытыңыз. Күн таңдауға ауысу үшін түртіңіз."</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Келесі айға өзгерту"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Алдыңғы айға өзгерту"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Мына жылға өту: %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Қазіргі таңдау: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Ешқандай"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Бүгін"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Көрсетілген жыл таңдағышы"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Күн таңдау"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Деректер енгізілді"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Күні"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Деректер енгізілді: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Ешқандай"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Деректер рұқсат етілмейді: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Деректер болжалды өрнекке сай келмейді: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Күтілетін жыл аралығы: %1$s–%2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Күнтізбенің енгізу режиміне ауысу"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Мәтін енгізу режиміне ауысу"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Кейінгі жылдарды көрсету үшін айналдырыңыз."</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Алдыңғы жылдарды көрсету үшін айналдырыңыз."</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Күндер таңдау"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Басталу күні"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Аяқталу күні"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Келесі айды көрсету үшін айналдырыңыз."</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Алдыңғы айды көрсету үшін айналдырыңыз."</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Күндер аралығында"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Күндерді енгізіңіз"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Жарамсыз күндер аралығы енгізілген."</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Сүйрейтін тетік"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Төменгі парақшаны жию"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Төменгі парақшаны жабу"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Төменгі парақшаны жаю"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Қалқыма көмек"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Қалқыма көмекті көрсету"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"түстен кейін"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"түске дейін"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"\"AM\" немесе \"PM\" форматын таңдау"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Сағатты таңдау"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Минут таңдау"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d сағат"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d сағат"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d минут"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Mинут"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Сағат"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"минут"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"сағат"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-km/strings.xml b/compose/material3/material3/src/androidMain/res/values-km/strings.xml
new file mode 100644
index 0000000..0e6572c
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-km/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"ប្រអប់"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"បានពង្រីក"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"បានបង្រួម"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"ច្រានចោល"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"ស្វែងរក"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"ការណែនាំខាងក្រោម"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"ជ្រើសរើសកាលបរិច្ឆេទ"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"កាលបរិច្ឆេទដែលបានជ្រើសរើស"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"ប្ដូរទៅការជ្រើសរើសឆ្នាំ"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"អូសដើម្បីជ្រើសរើសឆ្នាំ ឬចុចដើម្បីប្ដូរត្រឡប់ទៅការជ្រើសរើសថ្ងៃវិញ"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"ប្ដូរទៅខែបន្ទាប់"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"ប្ដូរទៅខែមុន"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"រុករកទៅកាន់ឆ្នាំ %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"ការជ្រើសរើសបច្ចុប្បន្ន៖ %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"គ្មាន"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"ថ្ងៃនេះ"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"អាចមើលឃើញផ្ទាំងជ្រើសរើសឆ្នាំ"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"ជ្រើសរើសកាលបរិច្ឆេទ"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"កាលបរិច្ឆេទដែលបានបញ្ចូល"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"កាលបរិច្ឆេទ"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"កាលបរិច្ឆេទដែលបានបញ្ចូល៖ %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"គ្មាន"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"កាលបរិច្ឆេទដែលមិនបានអនុញ្ញាត៖ %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"កាលបរិច្ឆេទមិនត្រូវគ្នានឹងលំនាំដែលរំពឹងទុកទេ៖ %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"កាលបរិច្ឆេទដែលស្ថិតនៅក្រៅចន្លោះឆ្នាំដែលរំពឹងទុក %1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"ប្ដូរទៅមុខងារបញ្ចូលប្រតិទិន"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"ប្ដូរទៅមុខងារបញ្ចូលអក្សរ"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"រំកិលដើម្បីបង្ហាញឆ្នាំក្រោយៗ"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"រំកិលដើម្បីបង្ហាញឆ្នាំមុនៗ"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"ជ្រើសរើសកាលបរិច្ឆេទ"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"កាលបរិច្ឆេទចាប់ផ្ដើម"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"កាលបរិច្ឆេទបញ្ចប់"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"រំកិលដើម្បីបង្ហាញខែក្រោយ"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"រំកិលដើម្បីបង្ហាញខែមុន"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"ក្នុងចន្លោះ"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"បញ្ចូលកាលបរិច្ឆេទ"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"ការបញ្ចូលចន្លោះកាលបរិច្ឆេទមិនត្រឹមត្រូវ"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"ដងអូស"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"បង្រួមសន្លឹកខាងក្រោម"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"ច្រានចោលសន្លឹកខាងក្រោម"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"ពង្រីកសន្លឹកខាងក្រោម"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"កំណត់ពន្យល់"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"បង្ហាញកំណត់ពន្យល់"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"ជ្រើសរើស AM ឬ PM"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"ជ្រើសរើសម៉ោង"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"ជ្រើសរើសនាទី"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"ម៉ោង %1$d"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d ម៉ោង"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d នាទី"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"នាទី"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"ម៉ោង"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"រយៈពេលប៉ុន្មាននាទី"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"រយៈពេលប៉ុន្មានម៉ោង"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-kn/strings.xml b/compose/material3/material3/src/androidMain/res/values-kn/strings.xml
new file mode 100644
index 0000000..dfb622b
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-kn/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"ಡೈಲಾಗ್"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"ವಿಸ್ತರಿಸಲಾಗಿದೆ"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"ಕುಗ್ಗಿಸಲಾಗಿದೆ"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"ವಜಾಗೊಳಿಸಿ"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"ಹುಡುಕಿ"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"ಸಲಹೆಗಳನ್ನು ಕೆಳಗೆ ನೀಡಲಾಗಿದೆ"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"ದಿನಾಂಕ ಆಯ್ಕೆಮಾಡಿ"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"ಆಯ್ಕೆಮಾಡಲಾದ ದಿನಾಂಕ"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"ವರ್ಷವನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ಬದಲಿಸಿ"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"ವರ್ಷವನ್ನು ಆಯ್ಕೆಮಾಡಲು ಸ್ವೈಪ್ ಮಾಡಿ ಅಥವಾ ದಿನವನ್ನು ಆಯ್ಕೆಮಾಡಲು ಹಿಂತಿರುಗಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"ಮುಂದಿನ ತಿಂಗಳಿಗೆ ಬದಲಿಸಿ"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"ಹಿಂದಿನ ತಿಂಗಳಿಗೆ ಬದಲಿಸಿ"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"%1$s ವರ್ಷಕ್ಕೆ ನ್ಯಾವಿಗೇಟ್ ಮಾಡಿ"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"ಪ್ರಸ್ತುತ ಆಯ್ಕೆ: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"ಯಾವುದೂ ಅಲ್ಲ"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"ಇಂದು"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"ವರ್ಷದ ಪಿಕರ್ ಗೋಚರಿಸುತ್ತದೆ"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"ದಿನಾಂಕ ಆಯ್ಕೆಮಾಡಿ"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"ನಮೂದಿಸಿದ ದಿನಾಂಕ"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"ದಿನಾಂಕ"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"ನಮೂದಿಸಿದ ದಿನಾಂಕ: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"ಯಾವುದೂ ಅಲ್ಲ"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"ದಿನಾಂಕವನ್ನು ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"ನಿರೀಕ್ಷಿಸಿದ ಪ್ಯಾಟರ್ನ್ನೊಂದಿಗೆ ದಿನಾಂಕ ಹೊಂದಾಣಿಕೆಯಾಗುತ್ತಿಲ್ಲ: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"ದಿನಾಂಕವು ನಿರೀಕ್ಷಿಸಿದ ವರ್ಷದ ವ್ಯಾಪ್ತಿಯನ್ನು ಮೀರಿದೆ %1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"ಕ್ಯಾಲೆಂಡರ್ ಇನ್ಪುಟ್ ಮೋಡ್ಗೆ ಬದಲಿಸಿ"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"ಪಠ್ಯ ಇನ್ಪುಟ್ ಮೋಡ್ಗೆ ಬದಲಿಸಿ"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"ನಂತರದ ವರ್ಷಗಳನ್ನು ತೋರಿಸಲು ಸ್ಕ್ರಾಲ್ ಮಾಡಿ"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"ಹಿಂದಿನ ವರ್ಷಗಳನ್ನು ತೋರಿಸಲು ಸ್ಕ್ರಾಲ್ ಮಾಡಿ"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"ದಿನಾಂಕಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"ಪ್ರಾರಂಭ ದಿನಾಂಕ"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"ಅಂತಿಮ ದಿನಾಂಕ"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"ಮುಂದಿನ ತಿಂಗಳನ್ನು ತೋರಿಸಲು ಸ್ಕ್ರಾಲ್ ಮಾಡಿ"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"ಹಿಂದಿನ ತಿಂಗಳನ್ನು ತೋರಿಸಲು ಸ್ಕ್ರಾಲ್ ಮಾಡಿ"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"ವ್ಯಾಪ್ತಿಯಲ್ಲಿದೆ"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"ದಿನಾಂಕಗಳನ್ನು ನಮೂದಿಸಿ"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"ದಿನಾಂಕ ವ್ಯಾಪ್ತಿಯ ಇನ್ಪುಟ್ ಅಮಾನ್ಯವಾಗಿದೆ"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"ಹ್ಯಾಂಡಲ್ ಡ್ರ್ಯಾಗ್ ಮಾಡಿ"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"ಕೆಳಭಾಗದ ಶೀಟ್ ಅನ್ನು ಕುಗ್ಗಿಸಿ"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"ಕೆಳಭಾಗದ ಶೀಟ್ ಅನ್ನು ವಜಾಗೊಳಿಸಿ"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"ಕೆಳಭಾಗದ ಶೀಟ್ ಅನ್ನು ವಿಸ್ತರಿಸಿ"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"ಟೂಲ್ಟಿಪ್"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"ಟೂಲ್ಟಿಪ್ ಅನ್ನು ತೋರಿಸಿ"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"AM ಅಥವಾ PM ಆಯ್ಕೆಮಾಡಿ"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"ಸಮಯವನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"ನಿಮಿಷಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d ಓ ಕ್ಲಾಕ್"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d ಗಂಟೆ"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d ನಿಮಿಷಗಳು"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"ನಿಮಿಷ"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"ಗಂಟೆ"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"ನಿಮಿಷಗಳವರೆಗೆ"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"ಗಂಟೆಯವರೆಗೆ"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-ko/strings.xml b/compose/material3/material3/src/androidMain/res/values-ko/strings.xml
new file mode 100644
index 0000000..fb57d2d
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-ko/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"대화상자"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"펼침"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"접힘"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"닫기"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"검색"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"아래의 추천 검색어"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"날짜 선택"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"선택한 날짜"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"연도 선택으로 전환"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"스와이프하여 연도를 선택하거나 탭하여 날짜 선택으로 돌아가세요."</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"다음 달로 변경"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"이전 달로 변경"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"%1$s년으로 이동"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"현재 선택사항: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"없음"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"오늘"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"연도 선택 도구 표시"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"날짜 선택"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"입력한 날짜"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"날짜"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"입력한 날짜: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"없음"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"데이터 허용 안 됨: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"데이터가 예상 패턴과 일치하지 않음: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"데이터가 예상 연도 범위(%1$s~%2$s)를 벗어남"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"캘린더 입력 모드로 전환"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"텍스트 입력 모드로 전환"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"스크롤하여 이후 연도 보기"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"스크롤하여 이전 연도 보기"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"날짜 선택"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"시작일"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"종료일"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"스크롤하여 다음 달 보기"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"스크롤하여 이전 달 보기"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"범위 내"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"날짜 입력"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"잘못된 기간 입력"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"드래그 핸들"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"하단 시트 접기"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"하단 시트 닫기"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"하단 시트 펼치기"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"도움말"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"도움말 표시"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"오후"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"오전"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"오전 또는 오후를 선택하세요."</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"시간 선택"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"분 선택"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d시 정각"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d시간"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d분"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"분"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"시간"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"기간(분)"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"기간(시간)"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-ky/strings.xml b/compose/material3/material3/src/androidMain/res/values-ky/strings.xml
new file mode 100644
index 0000000..849a323
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-ky/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Диалог"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Жайылып көрсөтүлдү"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Жыйыштырылды"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Жабуу"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Издөө"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Сунуштар төмөндө келтирилди"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Күндү тандоо"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Тандалган күн"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Жыл тандоого которулуу"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Жылды тандоо үчүн экранды сүрүңүз же күндү тандоого кайтуу үчүн таптап коюңуз"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Кийинки айга өзгөртүү"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Мурунку айга өзгөртүү"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"%1$s-жылга өтүү"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Учурда %1$s тандалды"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Жок"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Бүгүн"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Көрсөтүлгөн жыл тандагыч"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Күндү тандоо"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Киргизилген күн"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Күнү"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Киргизилген күн: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Жок"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Күндүн мындай форматын колдонууга болбойт: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Күндүн форматы үлгүгө дал келген жок: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Күн %1$s — %2$s деп белгиленген жылдар диапазонуна кирбей калды"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Жылнаамага киргизүү режимине которулуу"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Текст киргизүү режимине которулуу"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Кийинки жылдарды көрүү үчүн сыдырыңыз"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Мурунку жылдарды көрүү үчүн сыдырыңыз"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Күндөрдү тандоо"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Башталуу күнү"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Аяктоо күнү"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Кийинки айды көрүү үчүн сыдырыңыз"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Мурунку айды көрүү үчүн сыдырыңыз"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Төмөнкү убакыт аралыгындагы күн"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Күндөрдү киргизүү"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Даталар диапазону туура эмес тандалды"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Сүйрөө маркери"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Ылдыйкы экранды жыйыштыруу"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Ылдыйкы экранды жабуу"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Ылдыйкы экранды жайып көрсөтүү"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Калкып чыгуучу кеңеш"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Калкып чыгуучу кеңешти көрсөтүү"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"түштөн кийин"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"түшкө чейин"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Түшкө чейинки же түштөн кийинки убакытты тандоо"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Саат тандоо"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Мүнөттөрдү тандаңыз"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d саат"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d саат"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d мүнөт"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Мүнөт"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Саат"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"мүнөткө"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"саатка"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-lo/strings.xml b/compose/material3/material3/src/androidMain/res/values-lo/strings.xml
new file mode 100644
index 0000000..f4f11a3
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-lo/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"ກ່ອງໂຕ້ຕອບ"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"ຂະຫຍາຍແລ້ວ"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"ຫຍໍ້ລົງແລ້ວ"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"ປິດໄວ້"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"ຊອກຫາ"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"ມີຄຳແນະນຳຢູ່ຂ້າງລຸ່ມ"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"ເລືອກວັນທີ"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"ວັນທີທີ່ເລືອກໄວ້"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"ປ່ຽນໄປເລືອກປີ"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"ປັດເພື່ອເລືອກປີ ຫຼື ແຕະເພື່ອປ່ຽນກັບໄປຫາການເລືອກວັນ"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"ປ່ຽນເປັນເດືອນຕໍ່ໄປ"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"ປ່ຽນເປັນເດືອນກ່ອນໜ້າ"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"ນຳທາງໄປຫາປີ %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"ການເລືອກປັດຈຸບັນ: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"ບໍ່ມີ"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"ມື້ນີ້"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"ສະແດງຕົວເລືອກປີ"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"ເລືອກວັນທີ"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"ລະບຸວັນທີແລ້ວ"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"ວັນທີ"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"ລະບຸວັນທີແລ້ວ: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"ບໍ່ມີ"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"ບໍ່ອະນຸຍາດໃຫ້ໃຊ້ວັນທີ: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"ວັນທີບໍ່ກົງກັບຮູບແບບທີ່ຄາດໄວ້: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"ວັນທີຢູ່ນອກໄລຍະປີທີ່ຄາດໄວ້ %1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"ສະຫຼັບໄປໃຊ້ໂໝດປ້ອນຂໍ້ມູນປະຕິທິນ"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"ສະຫຼັບໄປໃຊ້ໂໝດປ້ອນຂໍ້ຄວາມ"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"ເລື່ອນເພື່ອສະແດງປີຫຼັງຈາກນີ້"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"ເລື່ອນເພື່ອສະແດງປີກ່ອນໜ້ານີ້"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"ເລືອກວັນທີ"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"ວັນທີເລີ່ມຕົ້ນ"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"ວັນທີສິ້ນສຸດ"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"ເລື່ອນເພື່ອສະແດງເດືອນຕໍ່ໄປ"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"ເລື່ອນເພື່ອສະແດງເດືອນກ່ອນໜ້າ"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"ຢູ່ໃນໄລຍະວັນທີທີ່ເລືອກ"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"ໃສ່ວັນທີ"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"ອິນພຸດໄລຍະວັນທີບໍ່ຖືກຕ້ອງ"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"ບ່ອນຈັບລາກ"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"ຫຍໍ້ຊີດລຸ່ມສຸດລົງ"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"ປິດຊີດລຸ່ມສຸດໄວ້"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"ຂະຫຍາຍຊີດລຸ່ມສຸດ"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"ຄຳແນະນຳ"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"ສະແດງຄຳແນະນຳ"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"ຫຼັງທ່ຽງ"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"ກ່ອນທ່ຽງ"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"ເລືອກກ່ອນທ່ຽງ ຫຼື ຫຼັງທ່ຽງ"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"ເລືອກຊົ່ວໂມງ"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"ເລືອກນາທີ"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d ໂມງ"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d ຊົ່ວໂມງ"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d ນາທີ"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"ນາທີ"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"ຊົ່ວໂມງ"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"ສຳລັບນາທີ"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"ສຳລັບຊົ່ວໂມງ"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-lt/strings.xml b/compose/material3/material3/src/androidMain/res/values-lt/strings.xml
new file mode 100644
index 0000000..a24fa91
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-lt/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Dialogo langas"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Išskleista"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Sutraukta"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Atsisakyti"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Paieška"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Pasiūlymai pateikti toliau"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Pasirinkite datą"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Pasirinkta data"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Perjungti į metų pasirinkimą"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Perbraukite, kad pasirinktumėte metus, arba palieskite, kad grįžtumėte ir vėl pasirinktumėte dieną"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Pakeisti į kitą mėnesį"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Pakeisti į ankstesnį mėnesį"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Eiti į %1$s m."</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Dabartinis pasirinkimas: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Nėra"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Šiandien"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Rodomas metų parinkiklis"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Pasirinkite datą"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Įvesta data"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Data"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Įvesta data: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Nėra"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Data neleidžiama: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Data neatitinka numatyto šablono: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Data nepatenka į numatytų metų diapazoną: %1$s–%2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Perjungti į kalendoriaus įvesties režimą"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Perjungti į teksto įvesties režimą"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Slinkite, kol bus rodomi vėlesni metai"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Slinkite, kol bus rodomi ankstesni metai"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Pasirinkite datas"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Pradžios data"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Pabaigos data"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Slinkite, kol bus rodomas kitas mėnuo"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Slinkite, kol bus rodomas ankstesnis mėnuo"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Diapazone"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Įvesti datas"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Netinkama dienų sekos įvestis"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Vilkimo rankenėlė"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Sutraukti apatinį lapą"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Atsisakyti apatinio lapo"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Išskleisti apatinį lapą"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Patarimas"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Rodyti patarimą"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"popiet"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Pasirinkite „priešpiet“ arba „popiet“"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Pasirinkite valandą"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Pasirinkite minutes"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d val."</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d val."</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%d min."</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minutė"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Valanda"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"minutės"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"valandos"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-lv/strings.xml b/compose/material3/material3/src/androidMain/res/values-lv/strings.xml
new file mode 100644
index 0000000..508be30
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-lv/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Dialoglodziņš"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Izvērsta"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Sakļauta"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Nerādīt"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Meklēšana"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Tālāk ir sniegti ieteikumi"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Atlasīt datumu"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Atlasītais datums"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Pāriet uz gada atlasi"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Velciet, lai atlasītu gadu, vai pieskarieties, lai pārietu atpakaļ pie dienas atlases"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Mainīt uz nākamo mēnesi"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Mainīt uz iepriekšējo mēnesi"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Pāriet uz %1$s. gadu"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Pašreizējā atlase: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Nav"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Šodien"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Redzams gada atlasītājs"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Atlasīt datumu"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Ievadītais datums"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Datums"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Ievadītais datums: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Nav"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Datums nav atļauts: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Datums neatbilst paredzētajam formātam: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Datums nav paredzētajā gadu diapazonā (%1$s.–%2$s. g.)"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Pārslēgties uz kalendāra ievades režīmu"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Pārslēgties uz teksta ievades režīmu"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Lai rādītu nākamos gadus, ritiniet"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Lai rādītu iepriekšējos gadus, ritiniet"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Atlasiet datumus"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Sākuma datums"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Beigu datums"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Lai rādītu nākamo mēnesi, ritiniet"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Lai rādītu iepriekšējo mēnesi, ritiniet"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Atlasītajā diapazonā"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Ievadiet datumus"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Ievadīts nederīgs datumu diapazons."</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Vilkšanas turis"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Sakļaut ekrāna apakšdaļas lapu"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Noraidīt ekrāna apakšdaļas lapu"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Izvērst ekrāna apakšdaļas lapu"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Rīka padoms"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Rādīt rīka padomu"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Atlasīt “AM” (priekšpusdienā) vai “PM” (pēcpusdienā)"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Atlasīt stundu"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Atlasīt minūtes"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"Minūtes: %1$d"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minūtes"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Stunda"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"minūtēm"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"stundām"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-mk/strings.xml b/compose/material3/material3/src/androidMain/res/values-mk/strings.xml
new file mode 100644
index 0000000..f137b45
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-mk/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Дијалог"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Проширено"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Собрано"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Отфрли"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Пребарување"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Предлозите се наведени подолу"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Изберете датум"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Избран датум"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Префрли на избирање година"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Повлечете за да изберете година или допрете за да се вратите на избирање ден"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Промени на следниот месец"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Промени на претходниот месец"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Одете на %1$s година"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Тековен избор: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Нема"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Денес"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Избирачот на година е видлив"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Изберете датум"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Внесен датум"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Датум"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Внесен датум: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Нема"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Датумот не е дозволен: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Не се совпаѓа со очекуваната шема: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Датумот не е во очекуваниот опсег на години %1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Префрли на режим за внесување во календарот"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Префрли на режим за внесување текст"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Лизгајте за да ги прикажете подоцнежните години"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Лизгајте за да ги прикажете претходните години"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Изберете датуми"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Датум на започнување"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Датум на завршување"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Лизгајте за да се прикаже следниот месец"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Лизгајте за да се прикаже претходниот месец"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Во опсег"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Внесете датуми"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Внесовте неважечки временски период"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Рачка за влечење"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Собери го долниот лист"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Отфрли го долниот лист"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Прошири го долниот лист"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Совет за алатка"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Прикажи совет за алатка"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"попл."</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"прет."</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Изберете претпладне или попладне"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Изберете час"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Изберете минути"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d часот"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d часа"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d минути"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Минута"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Час"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"за минути"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"за час"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-ml/strings.xml b/compose/material3/material3/src/androidMain/res/values-ml/strings.xml
new file mode 100644
index 0000000..a800a5a
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-ml/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"ഡയലോഗ്"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"വിപുലീകരിച്ചത്"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"ചുരുക്കിയത്"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"ഡിസ്മിസ് ചെയ്യുക"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"തിരയുക"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"നിദ്ദേശങ്ങൾ ചുവടെയുണ്ട്"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"തീയതി തിരഞ്ഞെടുക്കുക"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"തിരഞ്ഞെടുത്ത തീയതി"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"വർഷം തിരഞ്ഞെടുക്കുന്നതിലേക്ക് മാറുക"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"വർഷം തിരഞ്ഞെടുക്കാൻ സ്വൈപ്പ് ചെയ്യുക അല്ലെങ്കിൽ ദിവസം തിരഞ്ഞെടുക്കുന്നതിലേക്ക് തിരികെ പോകാൻ ടാപ്പ് ചെയ്യുക"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"അടുത്ത മാസത്തിലേക്ക് മാറ്റുക"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"മുമ്പത്തെ മാസത്തിലേക്ക് മാറ്റുക"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"%1$s എന്ന വർഷത്തിലേക്ക് പോകുക"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"നിലവിലെ തിരഞ്ഞെടുപ്പ്: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"ഒന്നുമില്ല"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"ഇന്ന്"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"വർഷ പിക്കർ ദൃശ്യമാണ്"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"തീയതി തിരഞ്ഞെടുക്കുക"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"നൽകിയ തീയതി"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"തീയതി"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"നൽകിയ തീയതി: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"ഒന്നുമില്ല"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"തീയതി അനുവദനീയമല്ല: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"പ്രതീക്ഷിച്ച പാറ്റേണുമായി തീയതി പൊരുത്തപ്പെടുന്നില്ല: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"പ്രതീക്ഷിക്കുന്ന കാലയളവിലെ വർഷമല്ല നൽകിയ തീയതിയുടേത് %1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"കലണ്ടർ ഇൻപുട്ട് മോഡിലേക്ക് മാറുക"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"ടെക്സ്റ്റ് ഇൻപുട്ട് മോഡിലേക്ക് മാറുക"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"പിന്നീടുള്ള വർഷങ്ങൾ കാണിക്കാൻ സ്ക്രോൾ ചെയ്യുക"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"മുൻ വർഷങ്ങൾ കാണിക്കാൻ സ്ക്രോൾ ചെയ്യുക"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"തീയതികൾ തിരഞ്ഞെടുക്കുക"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"ആരംഭിക്കുന്ന തീയതി"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"അവസാനിക്കുന്ന തീയതി"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"അടുത്ത മാസം കാണിക്കാൻ സ്ക്രോൾ ചെയ്യുക"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"മുമ്പത്തെ മാസം കാണിക്കാൻ സ്ക്രോൾ ചെയ്യുക"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"പരിധിയിൽ"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"തീയതികൾ നൽകുക"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"തീയതി ശ്രേണി ഇൻപുട്ട് അസാധുവാണ്"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"വലിച്ചിടുന്നതിനുള്ള ഹാൻഡിൽ"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"ബോട്ടം ഷീറ്റ് ചുരുക്കുക"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"ബോട്ടം ഷീറ്റ് ഡിസ്മിസ് ചെയ്യുക"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"ബോട്ടം ഷീറ്റ് വികസിപ്പിക്കുക"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"ടൂൾടിപ്പ്"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"ടൂൾടിപ്പ് കാണിക്കുക"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"AM അല്ലെങ്കിൽ PM തിരഞ്ഞെടുക്കുക"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"മണിക്കൂർ തിരഞ്ഞെടുക്കുക"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"മിനിറ്റ് തിരഞ്ഞെടുക്കുക"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d മണി"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d മ."</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d മിനിറ്റ്"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"മിനിറ്റ്"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"മണിക്കൂർ"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"മിനിറ്റ് നേരത്തേക്ക്"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"മണിക്കൂർ നേരത്തേക്ക്"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-mn/strings.xml b/compose/material3/material3/src/androidMain/res/values-mn/strings.xml
new file mode 100644
index 0000000..485667d
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-mn/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Харилцах цонх"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Дэлгэсэн"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Хураасан"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Хаах"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Хайх"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Доорх зөвлөмжүүд"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Огноо сонгох"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Сонгосон огноо"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Он сонгох руу сэлгэх"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Он сонгохын тулд шудрах эсвэл өдөр сонгох руу буцааж сэлгэхийн тулд товшино уу"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Дараагийн сар луу өөрчлөх"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Өмнөх сар луу өөрчлөх"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"%1$s он руу шилжих"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Одоогийн сонголт: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Байхгүй"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Өнөөдөр"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Он сонгогч харагдаж байна"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Огноо сонгох"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Оруулсан огноо"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Огноо"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Оруулсан огноо: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Байхгүй"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Зөвшөөрөөгүй огноо: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Огноо нь тооцоолсон хээтэй таарахгүй байна: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Тооцоолсон оны %1$s - %2$s мужаас гарсан огноо"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Календарийн орох горим руу сэлгэх"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Текст оруулах горим руу сэлгэх"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Дараагийн жилүүдийг харуулахын тулд гүйлгэнэ үү"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Өмнөх жилүүдийг харуулахын тулд гүйлгэнэ үү"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Огноо сонгох"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Эхлэх огноо"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Дуусах огноо"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Дараагийн сарыг харуулахын тулд гүйлгэнэ үү"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Өмнөх сарыг харуулахын тулд гүйлгэнэ үү"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Мужид байгаа"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Огноо оруулах"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Хугацааны интервалын оролт буруу байна"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Чирэх бариул"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Доод хүснэгтийг хураах"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Доод хүснэгтийг хаах"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Доод хүснэгтийг дэлгэх"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Зөвлөмж"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Зөвлөмж харуулах"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"ҮХ"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"ҮӨ"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"ҮӨ эсвэл ҮХ эсэхийг сонгоно уу"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Цаг сонгох"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Минут сонгох"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d цаг"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d цаг"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d минут"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Минут"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Цаг"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"минутын турш"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"цагийн турш"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-mr/strings.xml b/compose/material3/material3/src/androidMain/res/values-mr/strings.xml
new file mode 100644
index 0000000..f5231f06
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-mr/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"डायलॉग"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"विस्तारित केला आहे"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"कोलॅप्स केला आहे"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"डिसमिस करा"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"शोधा"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"सूचना खाली आहेत"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"तारीख निवडा"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"निवडलेली तारीख"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"वर्ष निवडणे यावर स्विच करा"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"वर्ष निवडण्यासाठी स्वाइप करा किंवा दिवस निवडण्यावर परत स्विच करण्यासाठी टॅप करा"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"पुढील महिन्यावर बदला"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"मागील महिन्यावर बदला"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"%1$s वर्षावर नेव्हिगेट करा"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"सध्याची निवड: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"काहीही नाही"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"आज"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"वर्ष पिकर दृश्यमान आहे"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"तारीख निवडा"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"एंटर केलेली तारीख"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"तारीख"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"एंटर केली तारीख: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"काहीही नाही"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"अशा तारखेला अनुमती नाही: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"तारीख ही अपेक्षित पॅटर्नशी जुळत नाही: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"तारीख ही %1$s - %2$s या अपेक्षित रेंजच्या बाहेरची आहे"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"कॅलेंडर इनपुट मोडवर स्विच करा"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"टेक्स्ट इनपुट मोडवर स्विच करा"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"नंतरची वर्षे दाखवण्यासाठी स्क्रोल करा"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"मागील वर्षे दाखवण्यासाठी स्क्रोल करा"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"तारखा निवडा"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"सुरू होण्याची तारीख"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"संपण्याची तारीख"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"पुढील महिना दाखवण्यासाठी स्क्रोल करा"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"मागील महिना दाखवण्यासाठी स्क्रोल करा"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"रेंजमध्ये"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"तारखा एंटर करा"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"तारीख रेंजचे इनपुट चुकीचे आहे"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"ड्रॅग हॅंडल"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"तळाशी असलेली शीट कोलॅप्स करा"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"तळाशी असलेली शीट डिसमिस करा"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"तळाशी असलेली शीट विस्तारीत करा"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"टूलटिप"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"टूलटिप दाखवा"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"AM किंवा PM निवडा"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"तास निवडा"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"मिनिटे निवडा"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d वाजता"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d तास"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d मिनिटे"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"मिनिट"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"तास"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"मिनिटांसाठी"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"तासासाठी"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-ms/strings.xml b/compose/material3/material3/src/androidMain/res/values-ms/strings.xml
new file mode 100644
index 0000000..e6c51cd
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-ms/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Dialog"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Dikembangkan"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Dikuncupkan"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Ketepikan"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Carian"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Cadangan di bawah"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Pilih tarikh"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Tarikh dipilih"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Beralih kepada pemilihan tahun"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Leret untuk memilih tahun atau ketik untuk bertukar kembali kepada pemilihan hari"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Tukar kepada bulan seterusnya"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Tukar kepada bulan sebelumnya"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Navigasi ke tahun %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Pilihan semasa: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Tiada"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Hari ini"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Pemilih tahun kelihatan"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Pilih tarikh"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Tarikh yang dimasukkan"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Tarikh"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Tarikh yang dimasukkan: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Tiada"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Tarikh yang tidak dibenarkan: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Tarikh tidak sepadan dengan corak yang dijangkakan: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Tarikh di luar julat tahun yang dijangkakan %1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Beralih kepada mod input kalendar"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Beralih kepada mod input teks"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Tatal untuk menunjukkan tahun kemudian"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Tatal untuk menunjukkan tahun terdahulu"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Pilih tarikh"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Tarikh mula"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Tarikh tamat"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Tatal untuk menunjukkan bulan seterusnya"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Tatal untuk menunjukkan bulan sebelumnya"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Dalam liputan"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Masukkan tarikh"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Input julat tarikh tidak sah"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Pemegang seret"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Kuncupkan helaian bawah"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Ketepikan helaian bawah"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Kembangkan helaian bawah"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Tip alat"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Tunjukkan tip alat"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"P/M"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"PG"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Pilih PG atau PTG/MLM"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Pilih jam"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Pilih minit"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"Pukul %1$d"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d jam"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d minit"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minit"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Jam"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"selama # minit"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"selama # jam"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-my/strings.xml b/compose/material3/material3/src/androidMain/res/values-my/strings.xml
new file mode 100644
index 0000000..9d1ec09
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-my/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"ဒိုင်ယာလော့"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"ချဲ့ထားသည်"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"ချုံ့ထားသည်"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"ပယ်ရန်"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"ရှာရန်"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"အကြံပြုချက်များသည် အောက်တွင်ရှိသည်"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"ရက်စွဲရွေးရန်"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"ရွေးထားသည့် ရက်စွဲ"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"နှစ်ရွေးခြင်းသို့ ပြောင်းရန်"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"ခုနှစ်ရွေးချယ်ရန် ပွတ်ဆွဲပါ (သို့) ရက်ရွေးချယ်ခြင်းသို့ ပြန်ရန် တို့ပါ"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"နောက်လသို့ ပြောင်းရန်"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"ယခင်လသို့ ပြောင်းရန်"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"%1$s ခုနှစ်သို့ သွားရန်"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"လက်ရှိ ရွေးချယ်မှု- %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"မရှိ"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"ယနေ့"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"ခုနှစ်ရွေးချယ်ရေးစနစ်ကို မြင်ရသည်"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"ရက်စွဲရွေးရန်"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"ထည့်ထားသော ရက်စွဲ"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"ရက်စွဲ"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"ထည့်ထားသော ရက်စွဲ- %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"မရှိ"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"ရက်စွဲကို ခွင့်ပြုမထားပါ- %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"ရက်စွဲသည် မျှော်မှန်းထားသော ပုံစံနှင့် မကိုက်ညီပါ- %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"ရက်စွဲသည် မျှော်မှန်းထားသော နှစ်အပိုင်းအခြား %1$s - %2$s တွင် မပါဝင်ပါ"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"ပြက္ခဒိန် လက်ကွက်ထည့်သွင်းနည်းသို့ ပြောင်းရန်"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"စာရိုက်နည်းသို့ ပြောင်းရန်"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"နောက်ပိုင်းနှစ်များ ပြရန် လှိမ့်ပါ"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"ယခင်နှစ်များ ပြရန် လှိမ့်ပါ"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"ရက်စွဲများရွေးပါ"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"စတင်ရက်"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"ပြီးဆုံးရက်"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"လာမည့်လကို ပြရန် လှိမ့်ပါ"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"ယခင်လကို ပြရန် လှိမ့်ပါ"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"အပိုင်းအခြားအတွင်း"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"ရက်စွဲများထည့်ပါ"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"ဒေတာအပိုင်းအခြား ထည့်သွင်းမှု မမှန်ပါ"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"ဖိဆွဲအထိန်း"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"အောက်ခြေအပိုဆောင်း စာမျက်နှာကို ချုံ့သည်"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"အောက်ခြေအပိုဆောင်း စာမျက်နှာကို ပယ်သည်"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"အောက်ခြေအပိုဆောင်း စာမျက်နှာကို ချဲ့သည်"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"အကြံပြုချက်ပြ ပေါ့အပ် ဝင်းဒိုး"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"အကြံပြုချက်ပြ ပေါ့အပ်ဝင်းဒိုး ပြရန်"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"AM (သို့) PM ရွေးရန်"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"နာရီ ရွေးရန်"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"မိနစ်များရွေးပါ"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d နာရီ"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d နာရီ"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d မိနစ်"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"မိနစ်"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"နာရီ"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"မိနစ်ကြာ"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"နာရီကြာ"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-nb/strings.xml b/compose/material3/material3/src/androidMain/res/values-nb/strings.xml
new file mode 100644
index 0000000..04edceb
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-nb/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Dialogboks"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Vises"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Skjules"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Lukk"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Søk"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Du finner forslag nedenfor"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Velg dato"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Valgt dato"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Bytt til å velge et år"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Sveip for å velge år, eller trykk for å bytte tilbake til valg av dag"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Bytt til neste måned"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Bytt til forrige måned"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Gå til år %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Valgt: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Ingen"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"I dag"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Årsvelgeren er synlig"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Velg dato"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Angitt dato"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Dato"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Angitt dato: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Ingen"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Datoen er ikke tillatt: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Datoen matcher ikke det forventede mønsteret: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Datoen er utenfor det forventede årsintervallet %1$s–%2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Bytt til kalendermodus for inndata"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Bytt til tekstmodus for inndata"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Rull for å vise senere år"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Rull for å vise tidligere år"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Velg datoer"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Startdato"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Sluttdato"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Rull for å vise den neste måneden"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Rull for å vise den forrige måneden"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Innenfor området"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Legg inn datoer"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"En ugyldig datoperiode er valgt"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Håndtak"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Skjul feltet nederst"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Lukk feltet nederst"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Vis feltet nederst"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Verktøytips"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Vis verktøytips"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Velg AM eller PM"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Velg time"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Velg minutter"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d timer"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d minutter"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minutt"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Time"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"for minutter"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"for timer"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-ne/strings.xml b/compose/material3/material3/src/androidMain/res/values-ne/strings.xml
new file mode 100644
index 0000000..5079393
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-ne/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"डायलग"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"एक्स्पान्ड गरिएको छ"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"कोल्याप्स गरिएको छ"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"खारेज गर्नुहोस्"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"खोज्नुहोस्"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"सुझावहरू तल दिइएका छन्"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"मिति चयन गर्नुहोस्"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"चयन गरिएको मिति"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"साल चयन गर्ने फिल्डमा जानुहोस्"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"कुनै साल छनौट गर्न स्वाइप गर्नुहोस् वा दिन चयन गर्न ट्याप गर्नुहोस्"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"हाल चयन गरिएको महिना परिवर्तन गरी आगामी महिना बनाउनुहोस्"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"हाल चयन गरिएको महिना परिवर्तन गरी अघिल्लो महिना बनाउनुहोस्"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"साल %1$s मा जानुहोस्"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"हालको छनौट: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"कुनै पनि होइन"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"आज"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"डेट पिकर देखिएको छ"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"मिति चयन गर्नुहोस्"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"हालिएको मिति"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"मिति"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"हालिएको मिति: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"कुनै पनि होइन"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"यो मिति हाल्न पाइँदैन: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"हालिएको मितिको प्याटर्न अपेक्षित प्याटर्नसँग मिल्दैन: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"हालिएको मिति सालको अपेक्षित दायरा (%1$s - %2$s) भित्र पर्दैन"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"पात्रोको इनपुट मोड प्रयोग गर्नुहोस्"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"टेक्स्ट इनपुट मोड प्रयोग गर्नुहोस्"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"आगामी सालहरूको जानकारी हेर्न स्क्रोल गर्नुहोस्"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"विगतका सालहरूको जानकारी हेर्न स्क्रोल गर्नुहोस्"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"मितिहरू चयन गर्नुहोस्"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"सुरु हुने मिति"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"अन्त्य हुने मिति"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"अर्को महिनाको जानकारी हेर्न स्क्रोल गर्नुहोस्"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"गत महिनाको जानकारी हेर्न स्क्रोल गर्नुहोस्"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"चयन गरिएका दिनभित्र पर्ने"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"मितिहरू हाल्नुहोस्"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"मितिको अवैध दायरा हालियो"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"ड्र्याग ह्यान्डल"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"पुछारको पाना कोल्याप्स गर्नुहोस्"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"पुछारको पाना हटाउनुहोस्"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"पुछारको पाना एक्स्पान्ड गर्नुहोस्"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"टुलटिप"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"टुलटिप देखाइयोस्"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"अपराह्न"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"पूर्वाह्न"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"पूर्वाह्न वा अपराह्न चयन गर्नुहोस्"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"घण्टा चयन गर्नुहोस्"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"मिनेट चयन गर्नुहोस्"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d बजे"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d घण्टा"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d मिनेट"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"मिनेट"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"घण्टा"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"मिनेटका लागि"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"घण्टाका लागि"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-nl/strings.xml b/compose/material3/material3/src/androidMain/res/values-nl/strings.xml
new file mode 100644
index 0000000..0fd598d
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-nl/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Dialoogvenster"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Uitgevouwen"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Samengevouwen"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Sluiten"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Zoeken"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Suggesties hieronder"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Datum selecteren"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Geselecteerde datum"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Schakelaar om een jaar te selecteren"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Swipe om een jaar te selecteren of tik om terug te gaan en een dag te selecteren"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Naar volgende maand gaan"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Naar vorige maand gaan"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Ga naar jaar %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Huidige selectie: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Geen"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Vandaag"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Jaarselectie zichtbaar"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Datum selecteren"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Ingevulde datum"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Datum"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Ingevulde datum: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Geen"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Datum niet toegestaan: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"De datum komt niet overeen met het verwachte patroon: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Datum buiten het verwachte jaarbereik %1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Overschakelen naar agenda-invoermodus"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Overschakelen naar tekstinvoermodus"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Scroll om latere jaren te tonen"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Scroll om eerdere jaren te tonen"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Datums selecteren"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Startdatum"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Einddatum"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Scroll om de volgende maand te tonen"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Scroll om de vorige maand te tonen"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Binnen bereik"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Datums opgeven"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Ongeldige invoer voor periode"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Handgreep voor slepen"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Blad onderaan samenvouwen"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Blad onderaan sluiten"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Blad onderaan uitvouwen"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Tooltip"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Tooltip tonen"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"AM of PM selecteren"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Uur selecteren"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Minuten selecteren"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d uur"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d uur"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d minuten"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minuut"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Uur"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"voor minuten"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"voor uur"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-or/strings.xml b/compose/material3/material3/src/androidMain/res/values-or/strings.xml
new file mode 100644
index 0000000..9babec3
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-or/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"ଡାଏଲଗ"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"ବିସ୍ତାର କରାଯାଇଛି"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"ସଙ୍କୁଚିତ କରାଯାଇଛି"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"ଖାରଜ କରନ୍ତୁ"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"ସର୍ଚ୍ଚ କରନ୍ତୁ"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"ପରାମର୍ଶ ତଳେ ଦିଆଯାଇଛି"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"ତାରିଖ ଚୟନ କରନ୍ତୁ"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"ଚୟନିତ ତାରିଖ"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"ଏକ ବର୍ଷ ଚୟନ କରିବାକୁ ସୁଇଚ କରନ୍ତୁ"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"ଏକ ବର୍ଷ ଚୟନ କରିବା ପାଇଁ ସ୍ୱାଇପ କରନ୍ତୁ କିମ୍ବା ଏକ ଦିନ ଚୟନ କରିବା ପାଇଁ ପୁଣି ସୁଇଚ କରିବାକୁ ଟାପ କରନ୍ତୁ"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"ପରବର୍ତ୍ତୀ ମାସକୁ ପରିବର୍ତ୍ତନ କରନ୍ତୁ"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"ପୂର୍ବବର୍ତ୍ତୀ ମାସକୁ ପରିବର୍ତ୍ତନ କରନ୍ତୁ"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"%1$s ବର୍ଷକୁ ନାଭିଗେଟ କରନ୍ତୁ"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"ବର୍ତ୍ତମାନର ଚୟନ: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"କିଛି ନାହିଁ"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"ଆଜି"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"ବର୍ଷ ପିକର ଦେଖାଯାଉଛି"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"ତାରିଖ ଚୟନ କରନ୍ତୁ"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"ଲେଖାଯାଇଥିବା ତାରିଖ"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"ତାରିଖ"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"ଲେଖାଯାଇଥିବା ତାରିଖ: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"କିଛି ନାହିଁ"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"ତାରିଖକୁ ଅନୁମତି ଦିଆଯାଇନାହିଁ: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"ଆଶା କରାଯାଉଥିବା ପାଟର୍ନ ସହ ତାରିଖ ମେଳ ହେଉନାହିଁ: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"ତାରିଖଟି ଆଶା କରାଯାଉଥିବା ବର୍ଷ ରେଞ୍ଜ %1$s - %2$sରୁ ବାହାରେ ଅଛି"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"କେଲେଣ୍ଡର ଇନପୁଟ ମୋଡକୁ ସୁଇଚ କରନ୍ତୁ"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"ଟେକ୍ସଟ ଇନପୁଟ ମୋଡକୁ ସୁଇଚ କରନ୍ତୁ"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"ପର ବର୍ଷଗୁଡ଼ିକ ଦେଖାଇବା ପାଇଁ ସ୍କ୍ରୋଲ କରନ୍ତୁ"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"ପୂର୍ବ ବର୍ଷଗୁଡ଼ିକ ଦେଖାଇବା ପାଇଁ ସ୍କ୍ରୋଲ କରନ୍ତୁ"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"ତାରିଖଗୁଡ଼ିକ ଚୟନ କରନ୍ତୁ"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"ଆରମ୍ଭ ତାରିଖ"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"ଶେଷ ତାରିଖ"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"ପରବର୍ତ୍ତୀ ମାସ ଦେଖାଇବା ପାଇଁ ସ୍କ୍ରୋଲ କରନ୍ତୁ"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"ପୂର୍ବବର୍ତ୍ତୀ ମାସ ଦେଖାଇବା ପାଇଁ ସ୍କ୍ରୋଲ କରନ୍ତୁ"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"ରେଞ୍ଜରେ ଅଛି"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"ତାରିଖଗୁଡ଼ିକ ଲେଖନ୍ତୁ"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"ଅବୈଧ ତାରିଖ ରେଞ୍ଜ ଇନପୁଟ"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"ଡ୍ରାଗ ହେଣ୍ଡେଲ"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"ବଟମ ସିଟକୁ ସଙ୍କୁଚିତ କରନ୍ତୁ"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"ବଟମ ସିଟକୁ ଖାରଜ କରନ୍ତୁ"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"ବଟମ ସିଟକୁ ବିସ୍ତାର କରନ୍ତୁ"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"ଟୁଲଟିପ"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"ଟୁଲଟିପ ଦେଖାନ୍ତୁ"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"AM କିମ୍ବା PM ଚୟନ କରନ୍ତୁ"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"ଘଣ୍ଟା ଚୟନ କରନ୍ତୁ"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"ମିନିଟ ଚୟନ କରନ୍ତୁ"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$dଟା"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d ଘଣ୍ଟା"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d ମିନିଟ"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"ମିନିଟ"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"ଘଣ୍ଟା"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"ମିନିଟ ପାଇଁ"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"ଘଣ୍ଟା ପାଇଁ"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-pa/strings.xml b/compose/material3/material3/src/androidMain/res/values-pa/strings.xml
new file mode 100644
index 0000000..ccb24f9
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-pa/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"ਡਾਇਲੌਗ"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"ਵਿਸਤਾਰ ਕੀਤਾ ਗਿਆ"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"ਸਮੇਟਿਆ ਗਿਆ"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"ਖਾਰਜ ਕਰੋ"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"ਖੋਜੋ"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"ਸੁਝਾਅ ਹੇਠਾਂ ਹਨ"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"ਤਾਰੀਖ ਚੁਣੋ"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"ਚੁਣੀ ਗਈ ਤਾਰੀਖ"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"ਸਾਲ ਚੁਣਨ ਲਈ ਸਵਿੱਚ ਕਰੋ"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"ਕੋਈ ਸਾਲ ਚੁਣਨ ਲਈ ਸਵਾਈਪ ਕਰੋ ਜਾਂ ਕੋਈ ਦਿਨ ਚੁਣਨ ਲਈ ਵਾਪਸ ਜਾਣ ਵਾਸਤੇ ਟੈਪ ਕਰੋ"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"ਅਗਲੇ ਮਹੀਨੇ \'ਤੇ ਜਾਓ"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"ਪਿਛਲੇ ਮਹੀਨੇ \'ਤੇ ਜਾਓ"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"ਸਾਲ %1$s \'ਤੇ ਜਾਓ"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"ਮੌਜੂਦਾ ਚੋਣ: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"ਕੋਈ ਨਹੀਂ"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"ਅੱਜ"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"ਸਾਲ ਚੋਣਕਾਰ ਦਿਖਣਯੋਗ ਹੈ"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"ਤਾਰੀਖ ਚੁਣੋ"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"ਦਾਖਲ ਕੀਤੀ ਗਈ ਤਾਰੀਖ"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"ਤਾਰੀਖ"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"ਦਾਖਲ ਕੀਤੀ ਗਈ ਤਾਰੀਖ: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"ਕੋਈ ਨਹੀਂ"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"ਇਸ ਤਾਰੀਖ ਦੀ ਆਗਿਆ ਨਹੀਂ ਹੈ: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"ਤਾਰੀਖ ਸੰਭਾਵਿਤ ਪੈਟਰਨ ਨਾਲ ਮੇਲ ਨਹੀਂ ਖਾਂਦੀ: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"ਤਾਰੀਖ ਸੰਭਾਵਿਤ ਸਾਲ ਦੀ ਰੇਂਜ, %1$s - %2$s ਤੋਂ ਬਾਹਰ ਹੈ"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"ਕੈਲੰਡਰ ਇਨਪੁੱਟ ਮੋਡ \'ਤੇ ਸਵਿੱਚ ਕਰੋ"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"ਲਿਖਤ ਇਨਪੁੱਟ ਮੋਡ \'ਤੇ ਸਵਿੱਚ ਕਰੋ"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"ਬਾਅਦ ਵਾਲੇ ਸਾਲਾਂ ਨੂੰ ਦਿਖਾਉਣ ਲਈ ਸਕ੍ਰੋਲ ਕਰੋ"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"ਪਿਛਲੇ ਸਾਲਾਂ ਨੂੰ ਦਿਖਾਉਣ ਲਈ ਸਕ੍ਰੋਲ ਕਰੋ"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"ਤਾਰੀਖਾਂ ਚੁਣੋ"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"ਸ਼ੁੁਰੂਆਤੀ ਤਾਰੀਖ"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"ਸਮਾਪਤੀ ਤਾਰੀਖ"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"ਅਗਲਾ ਮਹੀਨਾ ਦਿਖਾਉਣ ਲਈ ਸਕ੍ਰੋਲ ਕਰੋ"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"ਪਿਛਲਾ ਮਹੀਨਾ ਦਿਖਾਉਣ ਲਈ ਸਕ੍ਰੋਲ ਕਰੋ"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"ਰੇਂਜ ਵਿੱਚ"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"ਤਾਰੀਖਾਂ ਦਾਖਲ ਕਰੋ"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"ਇਨਪੁੱਟ ਕੀਤੀ ਗਈ ਤਾਰੀਖ ਦੀ ਰੇਂਜ ਅਵੈਧ ਹੈ"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"ਘਸੀਟਣ ਵਾਲਾ ਹੈਂਡਲ"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"ਹੇਠਲੀ ਸ਼ੀਟ ਨੂੰ ਸਮੇਟੋ"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"ਹੇਠਲੀ ਸ਼ੀਟ ਨੂੰ ਖਾਰਜ ਕਰੋ"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"ਹੇਠਲੀ ਸ਼ੀਟ ਦਾ ਵਿਸਤਾਰ ਕਰੋ"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"ਟੂਲ-ਟਿੱਪ"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"ਟੂਲ-ਟਿੱਪ ਦਿਖਾਓ"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"AM ਜਾਂ PM ਚੁਣੋ"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"ਘੰਟਾ ਚੁਣੋ"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"ਮਿੰਟ ਚੁਣੋ"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d ਵਜੇ"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d ਘੰਟੇ"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d ਮਿੰਟ"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"ਮਿੰਟ"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"ਘੰਟਾ"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"ਮਿੰਟਾਂ ਲਈ"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"ਘੰਟੇ ਲਈ"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-pl/strings.xml b/compose/material3/material3/src/androidMain/res/values-pl/strings.xml
new file mode 100644
index 0000000..69066e2
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-pl/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Okno"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Rozwinięte"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Zwinięte"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Zamknij"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Szukaj"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Sugestie znajdziesz poniżej"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Wybierz datę"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Wybrana data"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Przełącz na wybór roku"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Przesuń, aby wybrać rok, lub kliknij, aby wrócić do wyboru dnia"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Zmień na następny miesiąc"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Zmień na poprzedni miesiąc"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Przejdź do roku %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Obecnie wybrane: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Brak"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Dzisiaj"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Widoczny selektor roku"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Wybierz datę"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Wprowadzono datę"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Data"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Wprowadzono datę: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Brak"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Data jest niedozwolona: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Data nie pasuje do oczekiwanego wzorca: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Data jest poza oczekiwanym zakresem lat %1$s–%2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Włącz tryb wprowadzania danych kalendarzowych"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Przełącz na tryb wprowadzania tekstu"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Przewiń, aby wyświetlić późniejsze lata"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Przewiń, aby wyświetlić wcześniejsze lata"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Wybierz daty"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Data początkowa"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Data końcowa"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Przewiń, aby wyświetlić następny miesiąc"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Przewiń, aby wyświetlić poprzedni miesiąc"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"W zakresie"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Wprowadź daty"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Nieprawidłowy zakres dat"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Uchwyt do przeciągania"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Zwiń planszę dolną"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Zamknij planszę dolną"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Rozwiń planszę dolną"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Etykietka"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Pokaż etykietkę"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Wybierz AM lub PM"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Wybierz godzinę"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Wybierz minuty"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"Minuty: %1$d"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minuta"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Godzina"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"aby wpisać minuty"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"aby wpisać godzinę"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-pt-rBR/strings.xml b/compose/material3/material3/src/androidMain/res/values-pt-rBR/strings.xml
new file mode 100644
index 0000000..c281759
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-pt-rBR/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Caixa de diálogo"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Aberto"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Fechado"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Dispensar"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Pesquisar"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Sugestões abaixo"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Selecionar data"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Data selecionada"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Usar a seleção de ano"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Deslize para selecionar um ano ou toque para voltar à seleção de dia"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Mudar para o próximo mês"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Mudar para o mês anterior"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Navegar para o ano de %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Seleção atual: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Nenhum"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Hoje"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Seletor de ano visível"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Selecionar data"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Data informada"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Data"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Data informada: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Nenhum"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Data não permitida: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"A data não está no padrão esperado: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"A data está fora do intervalo de anos esperado: %1$s a %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Usar o modo de entrada na agenda"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Usar o modo de entrada de texto"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Role a tela para mostrar anos seguintes"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Role a tela para mostrar anos anteriores"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Selecionar datas"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Data de início"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Data de término"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Role a tela para mostrar o mês seguinte"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Role a tela para mostrar o mês anterior"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Dentro do período"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Informar datas"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Período inválido"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Alça de arrastar"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Fechar página inferior"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Dispensar página inferior"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Abrir página inferior"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Dica"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Mostrar dica"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Selecione AM ou PM"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Selecione a hora"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Selecione os minutos"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$dh"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d horas"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d minutos"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minuto"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Hora"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"por minutos"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"por hora"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-pt-rPT/strings.xml b/compose/material3/material3/src/androidMain/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000..2a4eb3b
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-pt-rPT/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Caixa de diálogo"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Expandido"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Reduzido"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Ignorar"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Pesquisar"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Sugestões abaixo"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Selecione uma data"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Data selecionada"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Mudar para a seleção do ano"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Deslize rapidamente para selecionar um ano ou toque para mudar novamente para a seleção do dia"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Mudar para o mês seguinte"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Mudar para o mês anterior"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Navegar para o ano %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Seleção atual: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Nenhuma"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Hoje"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Selecionador de ano visível"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Selecione uma data"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Data introduzida"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Data"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Data introduzida: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Nenhuma"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Data não permitida: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"A data não corresponde ao padrão esperado: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Data fora do intervalo de anos esperado: %1$s – %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Mudar para o método de introdução de calendário"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Mudar para o método de introdução de texto"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Desloque a página para mostrar anos posteriores"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Desloque a página para mostrar anos anteriores"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Selecione as datas"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Data de início"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Data de fim"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Desloque a página para mostrar o mês seguinte"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Desloque a página para mostrar o mês anterior"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Dentro do intervalo"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Introduza as datas"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Entrada do intervalo de datas inválida"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Indicador para arrastar"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Reduza a secção inferior"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Ignore a secção inferior"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Expanda a secção inferior"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Sugestão"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Mostrar sugestão"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Selecione AM ou PM"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Selecionar hora"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Selecionar minutos"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d h"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d horas"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d minutos"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minuto"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Hora"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"para minutos"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"para hora"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-pt/strings.xml b/compose/material3/material3/src/androidMain/res/values-pt/strings.xml
new file mode 100644
index 0000000..c281759
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-pt/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Caixa de diálogo"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Aberto"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Fechado"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Dispensar"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Pesquisar"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Sugestões abaixo"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Selecionar data"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Data selecionada"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Usar a seleção de ano"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Deslize para selecionar um ano ou toque para voltar à seleção de dia"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Mudar para o próximo mês"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Mudar para o mês anterior"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Navegar para o ano de %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Seleção atual: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Nenhum"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Hoje"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Seletor de ano visível"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Selecionar data"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Data informada"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Data"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Data informada: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Nenhum"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Data não permitida: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"A data não está no padrão esperado: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"A data está fora do intervalo de anos esperado: %1$s a %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Usar o modo de entrada na agenda"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Usar o modo de entrada de texto"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Role a tela para mostrar anos seguintes"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Role a tela para mostrar anos anteriores"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Selecionar datas"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Data de início"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Data de término"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Role a tela para mostrar o mês seguinte"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Role a tela para mostrar o mês anterior"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Dentro do período"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Informar datas"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Período inválido"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Alça de arrastar"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Fechar página inferior"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Dispensar página inferior"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Abrir página inferior"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Dica"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Mostrar dica"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Selecione AM ou PM"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Selecione a hora"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Selecione os minutos"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$dh"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d horas"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d minutos"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minuto"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Hora"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"por minutos"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"por hora"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-ro/strings.xml b/compose/material3/material3/src/androidMain/res/values-ro/strings.xml
new file mode 100644
index 0000000..0b357c8
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-ro/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Dialog"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Extins"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Restrâns"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Închide"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Caută"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Sugestii mai jos"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Selectează data"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Data selectată"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Comută la selectarea anului"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Glisează pentru a selecta un an sau atinge pentru a reveni la selectarea zilei"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Treci la luna următoare"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Treci la luna anterioară"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Navighează la anul %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Opțiunea selectată: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Niciuna"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Azi"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Selectorul de an este vizibil"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Selectează data"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Data introdusă"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Dată"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Data introdusă: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Niciuna"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Data nu este permisă: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Data nu corespunde modelului așteptat: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Data este în afara intervalului de ani %1$s – %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Comută la modul de introducere în calendar"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Comută la modul de introducere a textului"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Derulează pentru a afișa anii ulteriori"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Derulează pentru a afișa anii anteriori"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Selectează datele"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Data de începere"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Data de încheiere"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Derulează pentru a afișa luna următoare"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Derulează pentru a afișa luna anterioară"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"În interval"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Introdu datele"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Intervalul de date introdus nu este valid"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Ghidaj de tragere"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Restrânge foaia din partea de jos"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Închide foaia din partea de jos"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Extinde foaia din partea de jos"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Balon explicativ"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Afișează balonul explicativ"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Selectează AM sau PM"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Selectează ora"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Selectează minutele"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"Ora %1$d"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"Ora %1$d"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d minute"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minut"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Oră"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"pentru minute"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"pentru oră"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-ru/strings.xml b/compose/material3/material3/src/androidMain/res/values-ru/strings.xml
new file mode 100644
index 0000000..2443c51
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-ru/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Диалоговое окно"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Развернуто"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Свернуто"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Закрыть"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Строка поиска"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Подсказки показаны ниже"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Выберите дату"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Выбранная дата"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Перейти к выбору года"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Проведите по экрану, чтобы выбрать год, или нажмите, чтобы вернуться к выбору дня."</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Перейти к следующему месяцу"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Перейти к предыдущему месяцу"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Переход к %1$s году"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Текущий выбор: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Нет"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Сегодня"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Отображаемый выбор года"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Выберите дату"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Введенная дата"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Дата"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Введенная дата: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Нет"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Недопустимая дата: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Дата не соответствует допустимому шаблону: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Дата не входит в допустимый диапазон: %1$s–%2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Перейти в режим выбора даты"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Перейти в режим ввода текста"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Прокрутите до более поздних лет"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Прокрутите до более ранних лет"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Выберите даты"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Начальная дата"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Конечная дата"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Прокрутите до следующего месяца"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Прокрутите до предыдущего месяца"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"День в диапазоне дат"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Введите даты"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Указан недопустимый диапазон дат."</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Маркер перемещения"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Свернуть нижний экран"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Закрыть нижний экран"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Развернуть нижний экран"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Подсказка"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Показать подсказку"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Выбрать AM (до полудня) или PM (после полудня)"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Выбрать час"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Выберите минуты"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d ч."</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d ч."</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d мин."</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Минуты"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Часы"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"минуты"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"часы"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-si/strings.xml b/compose/material3/material3/src/androidMain/res/values-si/strings.xml
new file mode 100644
index 0000000..461c6bf
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-si/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"සංවාදය"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"දිග හරින ලදි"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"හකුළන ලදි"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"අස් කරන්න"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"සෙවීම"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"පහත යෝජනා"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"දිනය තෝරන්න"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"තෝරා ගත් දිනය"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"වසරක් තේරීමට මාරු වන්න"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"වසරක් තේරීමට ස්වයිප් කරන්න, නැතහොත් දිනක් තේරීමට ආපසු මාරු වීමට තට්ටු කරන්න"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"ඊළඟ මාසයට වෙනස් කරන්න"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"පෙර මාසයට වෙනස් කරන්න"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"%1$s වසර වෙත සංචලන කරන්න"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"වත්මන් තේරීම: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"කිසිවක් නැත"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"අද"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"වසර තෝරකය දෘශ්යමානයි"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"දිනය තෝරන්න"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"ඇතුළත් කළ දිනය"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"දිනය"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"ඇතුළත් කළ දිනය: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"කිසිවක් නැත"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"දිනයට ඉඩ දෙනු නොලැබේ: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"දිනය අපේක්ෂිත රටාවට නොගැළපෙයි: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"දිනය %1$s - %2$s අපේක්ෂිත වසර පරාසයෙන් පිටත වේ"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"දිනදර්ශන ආදාන ප්රකාරයට මාරු වන්න"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"පාඨ ආදාන ප්රකාරයට මාරු වන්න"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"පසු වසර පෙන්වීමට අනුචලන කරන්න"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"පෙර වසර පෙන්වීමට අනුචලන කරන්න"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"දින තෝරන්න"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"ආරම්භක දිනය"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"අවසාන දිනය"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"ඊළඟ මාසය පෙන්වීමට අනුචලන කරන්න"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"පෙර මාසය පෙන්වීමට අනුචලන කරන්න"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"පරාසය තුළ"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"දින ඇතුළු කරන්න"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"අවලංගු දින පරාස ආදානය"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"ඇදීම් හැඬලය"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"පහළම පත්රය හකුළන්න"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"පහළම පත්රය අස් කරන්න"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"පහළම පත්රය දිග හරින්න"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"මෙවලම් ඉඟිය"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"මෙවලම් ඉඟිය පෙන්වන්න"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"ප.ව."</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"පෙ.ව."</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"පෙ.ව. හෝ ප.ව. තෝරන්න"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"පැය තෝරන්න"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"මිනිත්තු ගණන තෝරන්න"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$dට"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"පැය %1$d"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"මිනිත්තු %1$d"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"විනාඩි"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"පැය"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"මිනිත්තු ගණනක් සඳහා"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"පැයක් සඳහා"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-sk/strings.xml b/compose/material3/material3/src/androidMain/res/values-sk/strings.xml
new file mode 100644
index 0000000..744b6eb
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-sk/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Dialógové okno"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Rozbalené"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Zbalené"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Zavrieť"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Hľadať"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Návrhy sú nižšie"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Vybrať dátum"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Vybraný dátum"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Prepnúť na výber roka"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Potiahnutím vyberte rok alebo klepnutím prepnite späť na výber dňa"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Zmeniť na nasledujúci mesiac"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Zmeniť na predchádzajúci mesiac"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Prejsť na rok %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Aktuálny výber: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Žiadne"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Dnes"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Výber roka je viditeľný"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Vybrať dátum"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Zadaný dátum"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Dátum"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Zadaný dátum: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Žiadne"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Nepovolený dátum: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Dátum nezodpovedá očakávanému vzoru: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Dátum sa nenachádza v očakávanom rozsahu rokov: %1$s – %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Prepnúť na kalendárový režim vstupu"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Prepnúť na režim zadávania textu"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Posunutím si zobrazte neskoršie roky"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Posunutím si zobrazte skoršie roky"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Vybrať dátumy"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Dátum začatia"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Dátum ukončenia"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Posunutím si zobrazte nasledujúci mesiac"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Posunutím si zobrazte predchádzajúci mesiac"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"V rozsahu"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Zadať dátumy"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Neplatné zadané obdobie"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Presúvadlo"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Zbaliť dolný hárok"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Zavrieť dolný hárok"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Rozbaliť dolný hárok"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Popis"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Zobraziť popis"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Vyberte AM alebo PM"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Vybrať hodinu"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Vybrať minúty"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d h"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d h"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d min"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minúty"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Hodina"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"minúty"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"hodiny"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-sl/strings.xml b/compose/material3/material3/src/androidMain/res/values-sl/strings.xml
new file mode 100644
index 0000000..3d9543a
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-sl/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Pogovorno okno"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Razširjeno"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Strnjeno"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Opusti"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Iskanje"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Predlogi so spodaj"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Izbira datuma"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Izbrani datum"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Preklopi na izbiro leta"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Povlecite, da izberete leto, ali se dotaknite, da preklopite nazaj na izbiranje dneva."</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Spremeni na naslednji mesec"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Spremeni na prejšnji mesec"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Pomik na leto %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Trenutna izbira: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Brez"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Danes"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Izbirnik leta je viden"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Izbira datuma"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Vneseni datum"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Datum"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Vneseni datum: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Brez"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Oblika datuma ni dovoljena: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Datum se ne ujema s pričakovanim vzorcem: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Datum je zunaj pričakovanega razpona let %1$s–%2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Preklop na način vnosa v koledar"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Preklop na način vnosa besedila"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Pomaknite se za prikaz poznejših let."</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Pomaknite se za prikaz zgodnejših let."</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Izberite datume"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Začetni datum"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Končni datum"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Pomaknite se za prikaz naslednjega meseca."</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Pomaknite se za prikaz prejšnjega meseca."</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Znotraj obdobja"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Vnesite datume"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Neveljaven vnos obdobja."</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Ročica za vlečenje"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Strnitev razdelka na dnu zaslona"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Opustitev razdelka na dnu zaslona"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Razširitev razdelka na dnu zaslona"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Opis orodja"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Pokaži opis orodja"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"pop."</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"dop."</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Izberite dopoldanski ali popoldanski čas."</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Izbira ure"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Izbira minut"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d min"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minuta"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Ura"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"za minute"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"za uro"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-sq/strings.xml b/compose/material3/material3/src/androidMain/res/values-sq/strings.xml
new file mode 100644
index 0000000..781881a
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-sq/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Dialogu"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Zgjeruar"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Palosur"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Hiq"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Kërkimi"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Sugjerimet më poshtë"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Zgjidh datën"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Data e zgjedhur"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Kalo te zgjedhja e një viti"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Rrëshqit shpejt për të zgjedhur një vit ose trokit për të kaluar sërish te zgjedhja e ditës"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Ndrysho te muaji i ardhshëm"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Ndrysho te muaji i kaluar"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Navigo në vitin %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Zgjedhja aktuale: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Asnjë"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Sot"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Zgjedhësi i vitit i dukshëm"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Zgjidh datën"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Data e futur"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Data"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Data e futur: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Asnjë"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Data nuk lejohet: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Data nuk përputhet me motivin e pritur: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Data jashtë diapazonit të pritur të vitit %1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Kalo te modaliteti i \"Hyrjes së kalendarit\""</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Kalo te modaliteti i \"Hyrjes së tekstit\""</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Lëviz për të shfaqur vitet e ardhshme"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Lëviz për të shfaqur vitet e mëparshme"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Zgjidh datat"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Data e fillimit"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Data e mbarimit"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Lëviz për të shfaqur muajin e ardhshëm"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Lëviz për të shfaqur muajin e mëparshëm"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Brenda intervalit"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Fut datat"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Hyrje e pavlefshme e diapazonit të datave"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Doreza e zvarritjes"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Palos fletën e poshtme"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Hiq fletën e poshtme"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Zgjero fletën e poshtme"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Këshilla për veglën"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Shfaq këshillat për veglën"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"pasdite"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"paradite"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Zgjidh paradite ose pasdite"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Zgjidh orën"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Zgjidh minutat"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"ora %1$d"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d orë"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d minuta"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minuta"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Ora"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"për minuta"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"për orë"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-sr/strings.xml b/compose/material3/material3/src/androidMain/res/values-sr/strings.xml
new file mode 100644
index 0000000..030fc23
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-sr/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Дијалог"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Проширено је"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Скупљено је"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Одбаци"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Претрага"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Предлози су у наставку"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Изаберите датум"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Изабрани датум"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Пређите на избор године"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Превуците да бисте изабрали годину или додирните да бисте се вратили на избор дана"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Пређите на следећи месец"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Пређите на претходни месец"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Идите на годину: %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Актуелни избор: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Ништа"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Данас"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Видљив бирач година"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Изаберите датум"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Унети датум"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Датум"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Унети датум: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Ништа"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Датум није дозвољен: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Датум не одговара очекиваном шаблону: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Датум је изван очекиваног опсега година %1$s–%2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Пређите на режим уноса у Календару"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Пређите на режим уноса текста"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Скролујте да би се приказале касније године"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Скролујте да би се приказале раније године"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Изаберите датуме"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Датум почетка"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Датум завршетка"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Померајте да би се приказао следећи месец"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Померајте да би се приказао претходни месец"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"У опсегу"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Унесите датуме"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Унос опсега датума је неважећи"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Идентификатор за превлачење"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Скупите доњу табелу"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Одбаците доњу табелу"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Проширите доњу табелу"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Објашњење"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Прикажите објашњење"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Изаберите пре подне или по подне"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Изаберите сат"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Изаберите минуте"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d с"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d с"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d мин"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Минут"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Сат"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"за минуте"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"за сате"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-sv/strings.xml b/compose/material3/material3/src/androidMain/res/values-sv/strings.xml
new file mode 100644
index 0000000..b5a62cc
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-sv/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Dialogruta"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Utökad"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Komprimerad"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Stäng"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Sök"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Se förslag nedan"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Välj datum"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Valt datum"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Byt till att välja år"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Svep för att välja ett år eller tryck för att återgå till att välja en dag"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Ändra till nästa månad"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Ändra till föregående månad"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Navigera till %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Aktuellt val: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Inga"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"I dag"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Årväljaren är synlig"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Välj datum"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Angivet datum"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Datum"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Angivet datum: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Inga"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Datumet är inte tillåtet: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Datumet matchar inte det förväntade formatet: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Datumet faller utanför det förväntade årsintervallet %1$s–%2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Byt till kalender som inmatningsläge"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Byt till text som inmatningsläge"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Scrolla för att visa senare år"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Scrolla för att visa föregående år"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Välj datum"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Startdatum"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Slutdatum"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Scrolla för att visa nästa månad"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Scrolla för att visa föregående månad"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Inom intervall"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Ange datum"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Ett ogiltigt datumintervall har angetts"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Handtag"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Komprimera arket på nedre delen av skärmen"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Stäng arket på nedre delen av skärmen"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Utöka arket på nedre delen av skärmen"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Beskrivning"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Visa beskrivning"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"EM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"FM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Välj mellan FM och EM"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Ange timme"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Välj minuter"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"Kl. %1$d"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d tim"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d minuter"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minut"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Timme"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"för minuter"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"för timme"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-sw/strings.xml b/compose/material3/material3/src/androidMain/res/values-sw/strings.xml
new file mode 100644
index 0000000..cc4d5a6
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-sw/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Kidirisha"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Imepanuliwa"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Imekunjwa"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Ondoa"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Tafuta"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Mapendekezo yaliyo hapa chini"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Chagua tarehe"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Tarehe uliyochagua"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Teua mwaka"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Telezesha kidole ili uchague mwaka au gusa ili urejee kuchagua siku"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Nenda kwenye mwezi unaofuata"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Rudi kwenye mwezi uliotangulia"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Nenda kwenye mwaka %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Ambayo umechagua: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Hamna"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Leo"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Kiteua mwaka kimeonyeshwa"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Chagua tarehe"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Tarehe uliyoweka"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Tarehe"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Tarehe uliyoweka: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Hamna"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Tarehe si sahihi: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Tarehe hailingani na mpangilio unaotumika: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Tarehe uliyoweka haiambatani na kipindi husika %1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Badilisha uteue tarehe kwenye kalenda"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Badilisha uandike tarehe mwenyewe"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Sogeza ili uone miaka ya baadaye"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Sogeza ili uone miaka iliyopita"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Chagua tarehe"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Tarehe ya kuanza"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Tarehe ya mwisho"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Sogeza ili kuonyesha mwezi ujao"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Sogeza ili kuonyesha mwezi uliopita"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Ipo katika kipindi"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Weka tarehe"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Kipindi ulichoweka si sahihi"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Aikoni ya buruta"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Kunja safu ya chini"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Ondoa safu ya chini"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Panua safu ya chini"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Kidirisha cha vidokezo"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Onyesha kidirisha cha vidokezo"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Chagua AM au PM"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Chagua saa"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Chagua dakika"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"Saa %1$d"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"Saa %1$d"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"Dakika %1$d"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Dakika"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Saa"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"cha dakika"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"cha moja"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-ta/strings.xml b/compose/material3/material3/src/androidMain/res/values-ta/strings.xml
new file mode 100644
index 0000000..12c420a
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-ta/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"உரையாடல்"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"விரிவாக்கப்பட்டது"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"சுருக்கப்பட்டது"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"நிராகரிக்கும்"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"தேடல்"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"பரிந்துரைகள் கீழே கிடைக்கும்"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"தேதியைத் தேர்வுசெய்க"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"தேர்ந்தெடுக்கப்பட்ட தேதி"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"ஆண்டைத் தேர்ந்தெடுக்கும் விருப்பத்திற்கு மாற்று"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"ஆண்டைத் தேர்வுசெய்ய ஸ்வைப் செய்யுங்கள் அல்லது தேதியைத் தேர்வுசெய்யும் பக்கத்திற்கு மீண்டும் செல்ல தட்டுங்கள்"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"அடுத்த மாதத்திற்கு மாற்று"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"முந்தைய மாதத்திற்கு மாற்று"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"%1$sக்குச் செல்லும்"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"தற்போதைய தேர்வு: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"ஏதுமில்லை"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"இன்று"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"ஆண்டைத் தேர்வுசெய்யும் விருப்பம் காட்டப்படுகிறது"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"தேதியைத் தேர்வுசெய்க"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"உள்ளிட்ட தேதி"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"தேதி"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"உள்ளிட்ட தேதி: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"ஏதுமில்லை"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"இந்தத் தேதி அனுமதிக்கப்படவில்லை: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"எதிர்பார்க்கப்படும் பேட்டர்னுடன் தேதி பொருந்தவில்லை: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"இந்தத் தேதி %1$s - %2$s ஆண்டு வரம்பிற்குள் இல்லை"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"கேலெண்டர் உள்ளீட்டு முறைக்கு மாற்று"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"எழுத்து உள்ளீட்டு முறைக்கு மாற்று"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"பிந்தைய ஆண்டுகளைப் பார்க்க ஸ்க்ரோல் செய்யுங்கள்"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"முந்தைய ஆண்டுகளைப் பார்க்க ஸ்க்ரோல் செய்யுங்கள்"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"தேதிகளைத் தேர்ந்தெடுங்கள்"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"தொடக்கத் தேதி"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"முடிவுத் தேதி"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"அடுத்த மாதத்தைப் பார்க்க ஸ்க்ரோல் செய்யுங்கள்"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"முந்தைய மாதத்தைப் பார்க்க ஸ்க்ரோல் செய்யுங்கள்"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"வரம்பிற்குள் உள்ளது"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"தேதிகளை உள்ளிடுங்கள்"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"தவறான தேதி வரம்பை உள்ளிட்டுள்ளீர்கள்"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"இழுப்பதற்கான ஹேண்டில்"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"கீழ்ப்புற ஷீட்டைச் சுருக்கும்"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"கீழ்ப்புற ஷீட்டை நிராகரிக்கும்"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"கீழ்ப்புற ஷீட்டை விரிவாக்கும்"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"உதவிக்குறிப்பு"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"உதவிக்குறிப்பைக் காட்டு"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"AM/PM என்பதைத் தேர்ந்தெடுக்கலாம்"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"மணிநேரத்தைத் தேர்ந்தெடுக்கலாம்"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"நிமிடங்களைத் தேர்ந்தெடுக்கலாம்"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d மணி"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d மணி"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d நிமிடங்கள்"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"நிமிடம்"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"மணிநேரம்"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"நிமிடங்களுக்கு"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"மணிநேரத்திற்கு"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-te/strings.xml b/compose/material3/material3/src/androidMain/res/values-te/strings.xml
new file mode 100644
index 0000000..29a5642
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-te/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"డైలాగ్"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"విస్తరించబడింది"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"కుదించబడింది"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"విస్మరించండి"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"సెర్చ్ చేయండి"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"సూచనలు దిగువున ఉన్నాయి"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"తేదీని ఎంచుకోండి"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"ఎంచుకున్న తేదీ"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"సంవత్సరాన్ని ఎంచుకునే ఆప్షన్కు మారండి"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"సంవత్సరాన్ని ఎంచుకోవడానికి స్వైప్ చేయండి, లేదా తిరిగి రోజును ఎంచుకునేందుకు మారడానికి ట్యాప్ చేయండి"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"వచ్చే నెలకు మార్చండి"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"మునుపటి నెలకు మార్చండి"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"%1$s సంవత్సరానికి వెళ్లండి"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"ప్రస్తుత ఎంపిక: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"ఏదీ లేదు"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"నేడు"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"సంవత్సరం పికర్ కనిపిస్తుంది"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"తేదీని ఎంచుకోండి"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"ఎంటర్ చేసిన తేదీ"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"తేదీ"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"ఎంటర్ చేసిన తేదీ: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"ఏదీ లేదు"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"చెల్లని తేదీ: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"తేదీ, ఉండాల్సిన ఫార్మాట్తో మ్యాచ్ కాలేదు: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"ఉండాల్సిన సంవత్సరాల పరిధి %1$s - %2$sలో తేదీ లేదు"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"క్యాలెండర్ ఇన్పుట్ మోడ్కు మారండి"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"టెక్స్ట్ ఇన్పుట్ మోడ్కు మారండి"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"తర్వాతి సంవత్సరాల డేటాను చూడటానికి స్క్రోల్ చేయండి"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"మునుపటి సంవత్సరాల డేటాను చూడటానికి స్క్రోల్ చేయండి"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"తేదీలను ఎంచుకోండి"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"ప్రారంభ తేదీ"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"ముగింపు తేదీ"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"వచ్చే నెల డేటాను చూడటానికి స్క్రోల్ చేయండి"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"మునుపటి నెల డేటాను చూడటానికి స్క్రోల్ చేయండి"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"పరిధిలో ఉంది"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"తేదీలను ఎంటర్ చేయండి"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"తేదీల పరిధి ఇన్పుట్ చెల్లదు"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"లాగే హ్యాండిల్"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"దిగువున ఉన్న షీట్ను కుదిస్తుంది"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"దిగువున ఉన్న షీట్ను విస్మరిస్తుంది"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"దిగువున ఉన్న షీట్ను విస్తరిస్తుంది"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"టూల్టిప్"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"టూల్టిప్ను చూడండి"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"AM లేదా PMను ఎంచుకోండి"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"గంటలను ఎంచుకోవడానికి వీలు కల్పిస్తుంది"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"నిమిషాలను ఎంచుకోండి"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d గం"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d గంటలు"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d నిమిషాలు"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"నిమిషం"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"గంట"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"నిమిషాలను ఎంచుకోవడం కోసం"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"గంటలను ఎంచుకోవడం కోసం"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-th/strings.xml b/compose/material3/material3/src/androidMain/res/values-th/strings.xml
new file mode 100644
index 0000000..e591400
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-th/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"กล่องโต้ตอบ"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"ขยายแล้ว"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"ยุบแล้ว"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"ปิด"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"ค้นหา"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"มีคำแนะนำที่ด้านล่าง"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"เลือกวันที่"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"วันที่ที่เลือก"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"เปลี่ยนไปที่การเลือกปี"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"ปัดเพื่อเลือกปีหรือแตะเพื่อเปลี่ยนกลับไปยังการเลือกวัน"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"เปลี่ยนไปที่เดือนถัดไป"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"เปลี่ยนไปที่เดือนก่อนหน้า"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"ไปยังปี %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"การเลือกปัจจุบัน: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"ไม่มี"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"วันนี้"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"แสดงตัวเลือกปี"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"เลือกวันที่"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"วันที่ป้อน"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"วันที่"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"วันที่ป้อน: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"ไม่มี"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"ไม่อนุญาตให้ใช้วันที่นี้: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"วันที่ไม่ตรงกับรูปแบบที่คาดไว้: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"วันที่อยู่นอกเหนือจากช่วงปีที่คาดไว้ %1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"สลับไปใช้โหมดป้อนข้อมูลปฏิทิน"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"สลับไปใช้โหมดการป้อนข้อความ"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"เลื่อนเพื่อแสดงปีหลังจากนี้"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"เลื่อนเพื่อแสดงปีก่อนหน้านี้"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"เลือกวันที่"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"วันที่เริ่มต้น"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"วันที่สิ้นสุด"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"เลื่อนเพื่อแสดงเดือนถัดไป"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"เลื่อนเพื่อแสดงเดือนก่อนหน้า"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"อยู่ในช่วงวันที่ที่เลือก"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"ป้อนวันที่"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"การป้อนข้อมูลช่วงวันที่ไม่ถูกต้อง"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"แฮนเดิลการลาก"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"ยุบ Bottom Sheet"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"ปิด Bottom Sheet"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"ขยาย Bottom Sheet"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"เคล็ดลับเครื่องมือ"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"แสดงเคล็ดลับเครื่องมือ"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"เลือก AM หรือ PM"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"เลือกชั่วโมง"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"เลือกนาที"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d น."</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d ชม."</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d นาที"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"นาที"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"ชั่วโมง"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"สำหรับนาที"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"สำหรับชั่วโมง"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-tl/strings.xml b/compose/material3/material3/src/androidMain/res/values-tl/strings.xml
new file mode 100644
index 0000000..6eee833
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-tl/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Dialog"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Naka-expand"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Naka-collapse"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"I-dismiss"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Maghanap"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Mga suhestyon sa ibaba"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Pumili ng petsa"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Piniling petsa"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Lumipat sa pagpili ng taon"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Mag-swipe para pumili ng taon, o mag-tap para bumalik sa pagpili ng araw"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Lumipat sa susunod na buwan"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Lumipat sa nakaraang buwan"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Mag-navigate papunta sa taong %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Kasalukuyang napili: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Wala"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Ngayon"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Nakikita ang picker ng taon"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Pumili ng petsa"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Inilagay na petsa"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Petsa"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Inilagay na petsa: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Wala"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Hindi pinapayagan ang petsa: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Hindi tumutugma ang petsa sa inaasahang pattern: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Wala ang petsa sa inaasahang hanay ng taon na %1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Lumipat sa pamamaraan ng pag-input ng kalendaryo"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Lumipat sa pamamaraan ng pag-input ng text"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Mag-scroll para makita ang mga mas kamakailang taon"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Mag-scroll para ipakita ang mga mas naunang taon"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Pumili ng mga petsa"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Petsa ng pagsisimula"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Petsa ng pagtatapos"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Mag-scroll para ipakita ang susunod na buwan"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Mag-scroll para ipakita ang nakaraang buwan"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"May signal"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Maglagay ng mga petsa"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Invalid ang input na hanay ng petsa"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Handle sa pag-drag"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"I-collapse ang bottom sheet"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"I-dismiss ang bottom sheet"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Palawakin ang bottom sheet"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Tooltip"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Ipakita ang tooltip"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Piliin ang AM o PM"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Pumili ng oras"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Pumili ng mga minuto"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d o\'clock"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d oras"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d (na) minuto"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Minuto"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Oras"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"nang ilang minuto"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"nang ilang oras"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-tr/strings.xml b/compose/material3/material3/src/androidMain/res/values-tr/strings.xml
new file mode 100644
index 0000000..a1bb70e
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-tr/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Dialog"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Genişletildi"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Daraltıldı"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Kapat"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Arama"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Önerileri aşağıda bulabilirsiniz"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Tarih seç"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Seçilen tarih"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Yıl seçimine geç"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Kaydırarak bir yıl seçin veya gün seçme bölümüne geri dönmek için dokunun"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Sonraki aya değiştir"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Önceki aya değiştir"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"%1$s yılına gidin"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Geçerli seçim: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Yok"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Bugün"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Yıl seçici görünür durumda"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Tarih seç"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Girilen tarih"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Tarih"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Girilen tarih: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Yok"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Tarihe izin verilmiyor: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Tarih, istenen biçimle eşleşmiyor: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Tarih, istenen %1$s-%2$s yıl aralığının dışında"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Takvim giriş moduna geç"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Metin giriş moduna geç"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Sonraki yılları göstermek için kaydırın"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Önceki yılları göstermek için kaydırın"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Tarihleri seçin"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Başlangıç tarihi"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Bitiş tarihi"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Sonraki ayı göstermek için kaydırın"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Önceki ayı göstermek için kaydırın"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Aralıkta"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Tarihleri girin"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Geçersiz tarih aralığı girişi"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Sürükleme tutamacı"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Alt sayfayı daralt"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Alt sayfayı kapat"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Alt sayfayı genişlet"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"İpucu"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Araç ipucunu göster"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"ÖS"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"ÖÖ"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"ÖÖ veya ÖS\'yi seçin"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Saat seçin"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Dakikayı seçin"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"Saat %1$d"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d saat"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d dakika"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Dakika"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Saat"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"dakika"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"saat"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-uk/strings.xml b/compose/material3/material3/src/androidMain/res/values-uk/strings.xml
new file mode 100644
index 0000000..5c563cf
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-uk/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Вікно"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Розгорнуто"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Згорнуто"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Закрити"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Пошук"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Підказки внизу"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Виберіть дату"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Вибрана дата"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Перейти до вибору року"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Проведіть пальцем по екрану, щоб вибрати рік, або торкніться, щоб повернутися до вибору дня"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Перейти до наступного місяця"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Перейти до попереднього місяця"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Перейти до %1$s року"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Поточний вибір: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Немає"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Сьогодні"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Показувати засіб вибору року"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Виберіть дату"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Введена дата"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Дата"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Введена дата: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Немає"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Недопустима дата: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Дата не відповідає очікуваному шаблону: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Дата за межами очікуваного діапазону років %1$s – %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Перейти в режим введення в календарі"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Перейти в режим введення тексту"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Прокрутіть, щоб відобразити пізніші роки"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Прокрутіть, щоб відобразити попередні роки"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Виберіть дати"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Дата початку"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Дата завершення"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Прокрутіть, щоб відобразити наступний місяць"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Прокрутіть, щоб відобразити попередній місяць"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"У діапазоні"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Введіть дати"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Указано недійсний діапазон дат"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Маркер переміщення"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Згорнути нижній екран"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Закрити нижній екран"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Розгорнути нижній екран"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Спливаюча підказка"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Показати спливаючу підказку"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"ПП"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"ДП"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Виберіть ДП чи ПП"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Вибрати годину"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Вибрати хвилини"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d год"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d год"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d хв"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Хвилина"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Година"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"для хвилин"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"для годин"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-ur/strings.xml b/compose/material3/material3/src/androidMain/res/values-ur/strings.xml
new file mode 100644
index 0000000..90a6720
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-ur/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"ڈائلاگ"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"پھیلایا گیا"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"سکیڑا گیا"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"برخاست کریں"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"تلاش کریں"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"تلاش کی تجاویز نیچے دستیاب ہیں"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"تاریخ منتخب کریں"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"منتخب کردہ تاریخ"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"ایک سال کا انتخاب کرنے کے لیے سوئچ کریں"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"ایک سال منتخب کرنے کے لیے سوائپ کریں یا ایک دن منتخب کرنے کی خاطر دوبارہ سوئچ کرنے کے لیے تھپتھپائیں"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"اگلے ماہ میں تبدیل کریں"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"گزشتہ ماہ میں تبدیل کریں"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"سال %1$s پر نیویگیٹ کریں"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"موجودہ انتخاب: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"کوئی نہیں"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"آج"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"سال کا منتخب کنندہ مرئی ہے"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"تاریخ منتخب کریں"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"درج کردہ تاریخ"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"تاریخ"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"درج کردہ تاریخ: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"کوئی نہیں"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"تاریخ کی اجازت نہیں ہے: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"تاریخ متوقع پیٹرن سے مماثل نہیں ہے: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"متوقع سال کی حد %1$s - %2$s سے باہر کی تاریخ"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"کیلنڈر اِن پٹ موڈ پر سوئچ کریں"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"ٹیکسٹ اِن پٹ موڈ پر سوئچ کریں"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"بعد کے سالوں کا ڈیٹا دکھانے کے لیے اسکرول کریں"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"پچھلے سالوں کا ڈیٹا دکھانے کے لیے اسکرول کریں"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"تواریخ منتخب کریں"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"تاریخ آغاز"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"تاریخ اختتام"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"اگلے ماہ کا ڈیٹا دکھانے کے لیے اسکرول کریں"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"پچھلے ماہ کا ڈیٹا دکھانے کے لیے اسکرول کریں"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"رینج میں ہے"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"تواریخ درج کریں"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"تاریخ کی حد کا غلط ان پٹ"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"گھسیٹنے کا ہینڈل"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"نیچے کی شیٹ کو سکیڑیں"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"نیچے کی شیٹ کو برخاست کریں"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"نیچے کی شیٹ کو پھیلائیں"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"ٹول ٹپ"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"ٹول ٹپ دکھائیں"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"AM یا PM منتخب کریں"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"گھنٹہ منتخب کریں"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"منٹ منتخب کریں"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d بجے"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d گھنٹے"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d منٹس"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"منٹ"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"گھنٹہ"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"منٹ کے لیے"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"گھنٹے کے لیے"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-uz/strings.xml b/compose/material3/material3/src/androidMain/res/values-uz/strings.xml
new file mode 100644
index 0000000..cc90175
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-uz/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Muloqot oynasi"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Yoyilgan"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Yigʻilgan"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Yopish"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Qidiruv"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Takliflar quyida"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Sanani tanlang"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Tanlangan sana"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Tanlangan yilga oʻtish"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Yilni tanlash uchun suring yoki kunni tanlashga qaytish uchun tegining"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Keyingi oyga oʻzgartirish"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Avvalgi oyga oʻzgartirish"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"%1$s-yilga oʻtish"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Joriy tanlov: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Hech biri"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Bugun"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Yil tanlagich ochiq"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Sanani tanlang"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Kiritilgan sana"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Sana"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Kiritilgan sana: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Hech biri"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Sana xato: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Sana mavjud namunaga mos kelmaydi: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Sana kutilgan yillar oraligʻida emas: %1$s – %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Taqvim kiritish rejimiga oʻtish"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Matn kiritish rejimiga oʻtish"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Keyingi yillarga varaqlang"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Avvalgi yillarga varaqlang"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Sanalarni tanlang"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Boshlanish sanasi"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Tugash sanasi"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Keyingi oyga varaqlang"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Avvalgi oyga varaqlang"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Xizmat doirasida"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Sanalarni kiriting"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Kiritilgan muddat yaroqsiz"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Surish dastagi"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Quyi ekranni yigʻish"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Quyi ekranni yopish"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Quyi ekranni yoyish"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Maslahat oynasi"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Maslahat oynasini koʻrsatish"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"TK"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"TO"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Tushdan oldin yoki keyinligini tanlang"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Soatni tanlang"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Daqiqani tanlang"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d soat"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d soat"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d daqiqa"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Daqiqa"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Soat"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"bir daqiqa"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"bir soat"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-vi/strings.xml b/compose/material3/material3/src/androidMain/res/values-vi/strings.xml
new file mode 100644
index 0000000..211355e
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-vi/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Hộp thoại"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Đã mở rộng"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Đã thu gọn"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Đóng"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Tìm kiếm"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Các đề xuất ở bên dưới"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Chọn ngày"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Ngày đã chọn"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Chuyển sang chọn năm"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Vuốt để chọn một năm hoặc nhấn để chuyển lại về chọn một ngày"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Chuyển sang tháng tiếp theo"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Chuyển về tháng trước"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Chuyển đến năm %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Lựa chọn hiện tại: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Không có"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Hôm nay"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Bộ chọn năm hiển thị"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Chọn ngày"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Ngày đã nhập"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Ngày"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Ngày đã nhập: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Không có"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Ngày không được phép: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Ngày không khớp với định dạng dự kiến: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Ngày không thuộc phạm vi năm dự kiến %1$s – %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Chuyển sang chế độ nhập lịch"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Chuyển sang chế độ nhập văn bản"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Cuộn để hiện những năm sau"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Cuộn để hiện những năm trước"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Chọn ngày"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Ngày bắt đầu"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Ngày kết thúc"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Cuộn để hiện tháng sau"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Cuộn để hiện tháng trước"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Trong khoảng"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Nhập ngày"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Phạm vi ngày đã nhập không hợp lệ"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Nút kéo"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Thu gọn bảng dưới cùng"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Đóng bảng dưới cùng"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Mở rộng bảng dưới cùng"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Chú giải công cụ"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Hiện chú giải công cụ"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"CH"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"SA"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Chọn SA hoặc CH"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Chọn giờ"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Chọn phút"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d giờ"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d giờ"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d phút"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Phút"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Giờ"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"nhập phút"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"nhập giờ"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-zh-rCN/strings.xml b/compose/material3/material3/src/androidMain/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..bcb313d
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-zh-rCN/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"对话框"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"已展开"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"已收起"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"关闭"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"搜索"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"以下是搜索建议"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"选择日期"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"选定的日期"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"切换为选择年份"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"滑动可选择年份,点按可切换回选择日期"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"转到下个月"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"转到上个月"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"切换到年份:%1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"当前的选择:%1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"无"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"今天"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"年份选择器可见"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"选择日期"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"输入的日期"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"日期"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"输入的日期:%1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"无"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"日期无效:%1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"日期不符合格式要求:%1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"日期超出预期年份范围 %1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"切换到日历输入模式"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"切换到文本字段输入模式"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"滚动即可显示之后的年份"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"滚动即可显示之前的年份"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"选择日期"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"开始日期"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"结束日期"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"滚动即可显示下个月"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"滚动即可显示上个月"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"在范围内"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"输入日期"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"输入的日期范围无效"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"拖动手柄"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"收起底部动作条"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"关闭底部动作条"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"展开底部动作条"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"提示"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"显示提示"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"下午"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"上午"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"选择上午或下午"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"选择小时"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"选择分钟"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d 点"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d 小时"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d 分钟"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"分钟"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"小时"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"输入分钟"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"输入小时"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-zh-rHK/strings.xml b/compose/material3/material3/src/androidMain/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..c87746f
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-zh-rHK/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"對話框"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"已展開"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"已收合"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"關閉"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"搜尋"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"建議如下"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"選取日期"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"所選日期"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"切換為選取年份"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"滑動可選取年分,或可輕按返回選取日期"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"變更至下個月"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"變更至上個月"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"前往 %1$s 年"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"目前選項:%1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"無"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"今天"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"顯示年分挑選器"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"選取日期"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"已輸入的日期"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"日期"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"已輸入的日期:%1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"無"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"不允許的日期:%1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"日期格式不符:%1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"日期超出預期的年份範圍:%1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"切換至日曆輸入模式"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"切換至文字輸入模式"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"碌去顯示新啲嘅年份"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"碌去顯示舊啲嘅年份"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"選取日期"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"開始日期"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"結束日期"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"碌去顯示下一個月"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"碌去顯示上一個月"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"喺指定日期範圍內"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"輸入日期"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"輸入的日期範圍無效"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"拖曳控點"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"收合頁底面板"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"關閉頁底面板"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"展開頁底面板"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"提示"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"顯示提示"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"下午"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"上午"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"選取上午或下午"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"選取小時"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"選取分鐘"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d 點"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d 點"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d 分鐘"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"分鐘"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"小時"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"分鐘"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"小時"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-zh-rTW/strings.xml b/compose/material3/material3/src/androidMain/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000..c24a29a
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-zh-rTW/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"對話方塊"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"已展開"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"已收合"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"關閉"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"搜尋"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"建議如下"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"選取日期"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"所選日期"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"改為選取年份"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"滑動即可選取年分,也可輕觸返回選取日期"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"改成下個月"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"改成上個月"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"前往 %1$s 年"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"目前選項:%1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"無"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"今天"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"顯示年份挑選器"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"選取日期"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"輸入的日期"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"日期"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"輸入的日期:%1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"無"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"不允許的日期:%1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"日期格式不符:%1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"日期超出預期的年份範圍:%1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"切換至日曆輸入模式"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"切換至文字輸入模式"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"捲動即可顯示之後年分"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"捲動即可顯示先前年分"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"選取日期"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"開始日期"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"結束日期"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"捲動即可顯示下一個月"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"捲動即可顯示上一個月"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"在有效範圍內"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"輸入日期"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"輸入的日期範圍無效"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"拖曳控點"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"收合底部功能表"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"關閉底部功能表"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"展開底部功能表"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"工具提示"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"顯示工具提示"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"下午"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"上午"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"選取上午或下午"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"選取小時"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"選取分鐘數"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"%1$d 點"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"%1$d 時"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"%1$d 分鐘"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"分鐘"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"小時"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"分鐘"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"小時"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values-zu/strings.xml b/compose/material3/material3/src/androidMain/res/values-zu/strings.xml
new file mode 100644
index 0000000..f123626
--- /dev/null
+++ b/compose/material3/material3/src/androidMain/res/values-zu/strings.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2022 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
+
+ http://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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="m3c_dialog" msgid="7617233117134790350">"Ibhokisi"</string>
+ <string name="m3c_dropdown_menu_expanded" msgid="2360841780724299882">"Kunwetshiwe"</string>
+ <string name="m3c_dropdown_menu_collapsed" msgid="3177828188723359358">"Kugoqiwe"</string>
+ <string name="m3c_snackbar_dismiss" msgid="6152755701819882931">"Chitha"</string>
+ <string name="m3c_search_bar_search" msgid="6152806324422087846">"Sesha"</string>
+ <string name="m3c_suggestions_available" msgid="7655536806087401899">"Iziphakamiso ngezansi"</string>
+ <string name="m3c_date_picker_title" msgid="7430790972741451689">"Khetha usuku"</string>
+ <string name="m3c_date_picker_headline" msgid="7605002211875882969">"Usuku olukhethiwe"</string>
+ <string name="m3c_date_picker_switch_to_year_selection" msgid="791651718641787594">"Shintshela ekukhetheni unyaka"</string>
+ <string name="m3c_date_picker_switch_to_day_selection" msgid="395627960681594326">"Swayipha ukuze ukhethe unyaka, noma thepha ukuze ubuyele ekukhetheni usuku"</string>
+ <string name="m3c_date_picker_switch_to_next_month" msgid="7142101321095356500">"Shintshela kunyanga elandelayo"</string>
+ <string name="m3c_date_picker_switch_to_previous_month" msgid="228438865139394590">"Shintshela kunyanga edlule"</string>
+ <string name="m3c_date_picker_navigate_to_year_description" msgid="8436650776581492840">"Funa onyakeni %1$s"</string>
+ <string name="m3c_date_picker_headline_description" msgid="3664277305226978227">"Ukukhetha kwamanje: %1$s"</string>
+ <string name="m3c_date_picker_no_selection_description" msgid="5811000998184572395">"Lutho"</string>
+ <string name="m3c_date_picker_today_description" msgid="3199387177749801575">"Namuhla"</string>
+ <string name="m3c_date_picker_year_picker_pane_title" msgid="2068382232816991922">"Isikhethi sonyaka siyabonakala"</string>
+ <string name="m3c_date_input_title" msgid="7306227249789210568">"Khetha usuku"</string>
+ <string name="m3c_date_input_headline" msgid="8166741421776570875">"Usuku olufakiwe"</string>
+ <string name="m3c_date_input_label" msgid="2895559812010326913">"Usuku"</string>
+ <string name="m3c_date_input_headline_description" msgid="229313757840775812">"Usuku olufakiwe: %1$s"</string>
+ <string name="m3c_date_input_no_input_description" msgid="1237013946323089826">"Lutho"</string>
+ <string name="m3c_date_input_invalid_not_allowed" msgid="2521768508935305279">"Usuku aluvunyelwe: %1$s"</string>
+ <string name="m3c_date_input_invalid_for_pattern" msgid="6116910750161463197">"Usuku alufani nephethini elindelekile: %1$s"</string>
+ <string name="m3c_date_input_invalid_year_range" msgid="7052898923934555305">"Usuku lungaphandle kwebanga lonyaka elilindelekile %1$s - %2$s"</string>
+ <string name="m3c_date_picker_switch_to_calendar_mode" msgid="1804346892470238807">"Shintshela kwimodi yokufaka yekhalenda"</string>
+ <string name="m3c_date_picker_switch_to_input_mode" msgid="2219746470065162704">"Shintshela kwimodi yokufaka yombhalo"</string>
+ <string name="m3c_date_picker_scroll_to_later_years" msgid="5727367015496556177">"Skrola ukuze ubonise iminyaka yakamuva"</string>
+ <string name="m3c_date_picker_scroll_to_earlier_years" msgid="7813882352367152251">"Skrola ukuze ubonise iminyaka yangaphambilini"</string>
+ <string name="m3c_date_range_picker_title" msgid="3134165431120340385">"Khetha izinsuku"</string>
+ <string name="m3c_date_range_picker_start_headline" msgid="4665981448952749820">"Usuku lokuqala"</string>
+ <string name="m3c_date_range_picker_end_headline" msgid="4947636797751277713">"Usuku lokuphela"</string>
+ <string name="m3c_date_range_picker_scroll_to_next_month" msgid="602077859540990149">"Skrola ukuze ubonise inyanga elandelayo"</string>
+ <string name="m3c_date_range_picker_scroll_to_previous_month" msgid="4592174524846109496">"Skrola ukuze ubonise inyanga edlule"</string>
+ <string name="m3c_date_range_picker_day_in_range" msgid="2138321128465719402">"Ebangeni"</string>
+ <string name="m3c_date_range_input_title" msgid="3148384720560189467">"Faka izinsuku"</string>
+ <string name="m3c_date_range_input_invalid_range_input" msgid="3190049423327661366">"Okokufaka kwebanga losuku okungavumelekile"</string>
+ <string name="m3c_bottom_sheet_drag_handle_description" msgid="8403354765404029791">"Hudula isibambi"</string>
+ <string name="m3c_bottom_sheet_collapse_description" msgid="2988463736136100848">"Goqa ishidi eliphansi"</string>
+ <string name="m3c_bottom_sheet_dismiss_description" msgid="1555567894577437024">"Chitha ishidi eliphansi"</string>
+ <string name="m3c_bottom_sheet_expand_description" msgid="6670819569745899763">"Nweba ishidi eliphansi"</string>
+ <string name="m3c_tooltip_pane_description" msgid="5460405025248574620">"Ithulithiphu"</string>
+ <string name="m3c_tooltip_long_press_label" msgid="1805687647081129904">"Bonisa ithulithiphu"</string>
+ <string name="m3c_time_picker_pm" msgid="6616362054113087709">"PM"</string>
+ <string name="m3c_time_picker_am" msgid="2786685010796619560">"AM"</string>
+ <string name="m3c_time_picker_period_toggle_description" msgid="5865171949528594571">"Khetha u-AM noma u-PM"</string>
+ <string name="m3c_time_picker_hour_selection" msgid="8876759303332837035">"Khetha ihora"</string>
+ <string name="m3c_time_picker_minute_selection" msgid="4699133535056739733">"Khetha imizuzu"</string>
+ <string name="m3c_time_picker_hour_suffix" msgid="3458167507790628988">"Ngu-%1$d o\'clock"</string>
+ <string name="m3c_time_picker_hour_24h_suffix" msgid="9179527532316922345">"Amahora angu-%1$d"</string>
+ <string name="m3c_time_picker_minute_suffix" msgid="5064177921781937179">"Imizuzu engu-%1$d"</string>
+ <string name="m3c_time_picker_minute" msgid="4313071914266462005">"Umzuzu"</string>
+ <string name="m3c_time_picker_hour" msgid="2349193472625211372">"Ihora"</string>
+ <string name="m3c_time_picker_minute_text_field" msgid="7661234488295443182">"ngemizuzu"</string>
+ <string name="m3c_time_picker_hour_text_field" msgid="6973808109666874069">"ngehora"</string>
+</resources>
diff --git a/compose/material3/material3/src/androidMain/res/values/strings.xml b/compose/material3/material3/src/androidMain/res/values/strings.xml
index a2c68b0..063958d 100644
--- a/compose/material3/material3/src/androidMain/res/values/strings.xml
+++ b/compose/material3/material3/src/androidMain/res/values/strings.xml
@@ -72,6 +72,8 @@
Describes an invalid date range input when a user enters a start or end date [CHAR_LIMIT=NONE]
-->
<string name="m3c_date_range_input_invalid_range_input">Invalid date range input</string>
+ <!-- Spoken description of a bottom sheet -->
+ <string name="m3c_bottom_sheet_pane_title">Bottom Sheet</string>
<!-- Names the drag handle visual for bottom sheet. -->
<string name="m3c_bottom_sheet_drag_handle_description">Drag handle</string>
<!-- Describes the collapse action for bottom sheet. -->
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/BottomSheetScaffold.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/BottomSheetScaffold.kt
index d0379dd..d81502f7 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/BottomSheetScaffold.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/BottomSheetScaffold.kt
@@ -24,9 +24,9 @@
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.requiredHeightIn
import androidx.compose.foundation.layout.widthIn
-import androidx.compose.material3.SheetValue.PartiallyExpanded
import androidx.compose.material3.SheetValue.Expanded
import androidx.compose.material3.SheetValue.Hidden
+import androidx.compose.material3.SheetValue.PartiallyExpanded
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Stable
import androidx.compose.runtime.remember
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Divider.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Divider.kt
index 73e47de..5da509f 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Divider.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Divider.kt
@@ -16,8 +16,8 @@
package androidx.compose.material3
-import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.material3.tokens.DividerTokens
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/OutlinedTextField.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/OutlinedTextField.kt
index 05c8c52..3d47224 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/OutlinedTextField.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/OutlinedTextField.kt
@@ -180,6 +180,7 @@
} else {
modifier
}
+ .defaultErrorSemantics(isError, getString(Strings.DefaultErrorMessage))
.defaultMinSize(
minWidth = OutlinedTextFieldDefaults.MinWidth,
minHeight = OutlinedTextFieldDefaults.MinHeight
@@ -339,6 +340,7 @@
} else {
modifier
}
+ .defaultErrorSemantics(isError, getString(Strings.DefaultErrorMessage))
.defaultMinSize(
minWidth = OutlinedTextFieldDefaults.MinWidth,
minHeight = OutlinedTextFieldDefaults.MinHeight
@@ -688,17 +690,20 @@
onLabelMeasured(Size(it.width.toFloat(), it.height.toFloat()))
}
+ // supporting text must be measured after other elements, but we
+ // reserve space for it using its intrinsic height as a heuristic
+ val supportingMeasurable = measurables.find { it.layoutId == SupportingId }
+ val supportingIntrinsicHeight =
+ supportingMeasurable?.minIntrinsicHeight(constraints.minWidth) ?: 0
+
// measure text field
- // On top, we offset either by default padding or by label's half height if its too big.
- // On bottom, we offset to make room for supporting text.
- // minHeight must not be set to 0 due to how foundation TextField treats zero minHeight.
val topPadding = max(
heightOrZero(labelPlaceable) / 2,
paddingValues.calculateTopPadding().roundToPx()
)
val textConstraints = constraints.offset(
horizontal = -occupiedSpaceHorizontally,
- vertical = -bottomPadding - topPadding
+ vertical = -bottomPadding - topPadding - supportingIntrinsicHeight
).copy(minHeight = 0)
val textFieldPlaceable =
measurables.first { it.layoutId == TextFieldId }.measure(textConstraints)
@@ -733,8 +738,7 @@
val supportingConstraints = relaxedConstraints.offset(
vertical = -occupiedSpaceVertically
).copy(minHeight = 0, maxWidth = width)
- val supportingPlaceable =
- measurables.find { it.layoutId == SupportingId }?.measure(supportingConstraints)
+ val supportingPlaceable = supportingMeasurable?.measure(supportingConstraints)
val supportingHeight = heightOrZero(supportingPlaceable)
val totalHeight =
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Shapes.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Shapes.kt
index c0fcd04..2fed380 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Shapes.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Shapes.kt
@@ -25,8 +25,8 @@
import androidx.compose.runtime.Immutable
import androidx.compose.runtime.ReadOnlyComposable
import androidx.compose.runtime.staticCompositionLocalOf
-import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.graphics.RectangleShape
+import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.unit.dp
/**
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SheetDefaults.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SheetDefaults.kt
index 71dd117..141ffbf 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SheetDefaults.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SheetDefaults.kt
@@ -18,11 +18,14 @@
import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.WindowInsets
+import androidx.compose.foundation.layout.WindowInsetsSides
+import androidx.compose.foundation.layout.only
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
-import androidx.compose.material3.SheetValue.PartiallyExpanded
-import androidx.compose.material3.SheetValue.Hidden
import androidx.compose.material3.SheetValue.Expanded
+import androidx.compose.material3.SheetValue.Hidden
+import androidx.compose.material3.SheetValue.PartiallyExpanded
import androidx.compose.material3.tokens.ScrimTokens
import androidx.compose.material3.tokens.SheetBottomTokens
import androidx.compose.runtime.Composable
@@ -215,6 +218,15 @@
}
/**
+ * Attempt to snap synchronously. Snapping can happen synchronously when there is no other swipe
+ * transaction like a drag or an animation is progress. If there is another interaction in
+ * progress, the suspending [snapTo] overload needs to be used.
+ *
+ * @return true if the synchronous snap was successful, or false if we couldn't snap synchronous
+ */
+ internal fun trySnapTo(targetValue: SheetValue) = swipeableState.trySnapTo(targetValue)
+
+ /**
* Find the closest anchor taking into account the velocity and settle at it with an animation.
*/
internal suspend fun settle(velocity: Float) {
@@ -301,6 +313,13 @@
val SheetPeekHeight = 56.dp
/**
+ * Default insets to be used and consumed by the [ModalBottomSheet] window.
+ */
+ val windowInsets: WindowInsets
+ @Composable
+ get() = WindowInsets.systemBarsForVisualComponents.only(WindowInsetsSides.Vertical)
+
+ /**
* The optional visual marker placed on top of a bottom sheet to indicate it may be dragged.
*/
@Composable
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Slider.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Slider.kt
index da8bcc1..1bce0b5 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Slider.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Slider.kt
@@ -27,10 +27,10 @@
import androidx.compose.foundation.gestures.GestureCancellationException
import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.gestures.PressGestureScope
+import androidx.compose.foundation.gestures.awaitEachGesture
import androidx.compose.foundation.gestures.awaitFirstDown
import androidx.compose.foundation.gestures.detectTapGestures
import androidx.compose.foundation.gestures.draggable
-import androidx.compose.foundation.gestures.awaitEachGesture
import androidx.compose.foundation.gestures.horizontalDrag
import androidx.compose.foundation.hoverable
import androidx.compose.foundation.indication
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SnackbarHost.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SnackbarHost.kt
index 3e072a2..dce3b38 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SnackbarHost.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SnackbarHost.kt
@@ -41,12 +41,12 @@
import androidx.compose.ui.semantics.dismiss
import androidx.compose.ui.semantics.liveRegion
import androidx.compose.ui.semantics.semantics
+import kotlin.coroutines.resume
import kotlinx.coroutines.CancellableContinuation
import kotlinx.coroutines.delay
import kotlinx.coroutines.suspendCancellableCoroutine
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
-import kotlin.coroutines.resume
/**
* State of the [SnackbarHost], which controls the queue and the current [Snackbar] being shown
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Strings.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Strings.kt
index dd8f671..285f8b4 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Strings.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Strings.kt
@@ -73,6 +73,7 @@
val DateRangePickerDayInRange = Strings()
val DateRangeInputTitle = Strings()
val DateRangeInputInvalidRangeInput = Strings()
+ val BottomSheetPaneTitle = Strings()
val BottomSheetDragHandleDescription = Strings()
val BottomSheetPartialExpandDescription = Strings()
val BottomSheetDismissDescription = Strings()
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SwipeToDismiss.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SwipeToDismiss.kt
index 271d0cf..dfd656f 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SwipeToDismiss.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SwipeToDismiss.kt
@@ -27,8 +27,8 @@
import androidx.compose.material3.DismissValue.DismissedToEnd
import androidx.compose.material3.DismissValue.DismissedToStart
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.saveable.Saver
import androidx.compose.runtime.remember
+import androidx.compose.runtime.saveable.Saver
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalLayoutDirection
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Swipeable.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Swipeable.kt
index 8ebe654..3155cfd 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Swipeable.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Swipeable.kt
@@ -53,16 +53,16 @@
import androidx.compose.ui.unit.Velocity
import androidx.compose.ui.unit.dp
import androidx.compose.ui.util.lerp
+import kotlin.math.PI
+import kotlin.math.abs
+import kotlin.math.sign
+import kotlin.math.sin
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.take
import kotlinx.coroutines.launch
-import kotlin.math.PI
-import kotlin.math.abs
-import kotlin.math.sign
-import kotlin.math.sin
/**
* State of the [swipeable] modifier.
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Tab.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Tab.kt
index 31ab35e..b1cbd6f 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Tab.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Tab.kt
@@ -52,7 +52,6 @@
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
-
import kotlin.math.max
/**
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/TextField.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/TextField.kt
index 1cc5891..039d06c 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/TextField.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/TextField.kt
@@ -198,6 +198,7 @@
BasicTextField(
value = value,
modifier = modifier
+ .defaultErrorSemantics(isError, getString(Strings.DefaultErrorMessage))
.defaultMinSize(
minWidth = TextFieldDefaults.MinWidth,
minHeight = TextFieldDefaults.MinHeight
@@ -343,6 +344,7 @@
BasicTextField(
value = value,
modifier = modifier
+ .defaultErrorSemantics(isError, getString(Strings.DefaultErrorMessage))
.defaultMinSize(
minWidth = TextFieldDefaults.MinWidth,
minHeight = TextFieldDefaults.MinHeight
@@ -676,13 +678,18 @@
val labelPlaceable =
measurables.find { it.layoutId == LabelId }?.measure(labelConstraints)
+ // supporting text must be measured after other elements, but we
+ // reserve space for it using its intrinsic height as a heuristic
+ val supportingMeasurable = measurables.find { it.layoutId == SupportingId }
+ val supportingIntrinsicHeight =
+ supportingMeasurable?.minIntrinsicHeight(constraints.minWidth) ?: 0
+
// measure input field
val effectiveTopOffset = topPaddingValue + heightOrZero(labelPlaceable)
- val verticalConstraintOffset = -effectiveTopOffset - bottomPaddingValue
val textFieldConstraints = constraints
.copy(minHeight = 0)
.offset(
- vertical = verticalConstraintOffset,
+ vertical = -effectiveTopOffset - bottomPaddingValue - supportingIntrinsicHeight,
horizontal = -occupiedSpaceHorizontally
)
val textFieldPlaceable = measurables
@@ -715,8 +722,7 @@
val supportingConstraints = looseConstraints.offset(
vertical = -occupiedSpaceVertically
).copy(minHeight = 0, maxWidth = width)
- val supportingPlaceable =
- measurables.find { it.layoutId == SupportingId }?.measure(supportingConstraints)
+ val supportingPlaceable = supportingMeasurable?.measure(supportingConstraints)
val supportingHeight = heightOrZero(supportingPlaceable)
val totalHeight = calculateHeight(
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/TextFieldImpl.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/TextFieldImpl.kt
index 6cfb01f..2ee2a6c 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/TextFieldImpl.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/TextFieldImpl.kt
@@ -27,7 +27,6 @@
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.defaultMinSize
-import androidx.compose.material3.Strings.Companion.DefaultErrorMessage
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.getValue
@@ -172,12 +171,6 @@
}
} else null
- // Developers need to handle invalid input manually. But since we don't provide error
- // message slot API, we can set the default error message in case developers forget about
- // it.
- val defaultErrorMessage = getString(DefaultErrorMessage)
- val decorationBoxModifier = Modifier.semantics { if (isError) error(defaultErrorMessage) }
-
val leadingIconColor = colors.leadingIconColor(enabled, isError, interactionSource).value
val decoratedLeading: @Composable (() -> Unit)? = leadingIcon?.let {
@Composable {
@@ -210,7 +203,7 @@
}
TextFieldLayout(
- modifier = decorationBoxModifier,
+ modifier = Modifier,
textField = innerTextField,
placeholder = decoratedPlaceholder,
label = decoratedLabel,
@@ -240,7 +233,7 @@
}
OutlinedTextFieldLayout(
- modifier = decorationBoxModifier,
+ modifier = Modifier,
textField = innerTextField,
placeholder = decoratedPlaceholder,
label = decoratedLabel,
@@ -286,6 +279,13 @@
if (typography != null) ProvideTextStyle(typography, contentWithColor) else contentWithColor()
}
+// Developers need to handle invalid input manually. But since we don't provide an error message
+// slot API, we can set the default error message in case developers forget about it.
+internal fun Modifier.defaultErrorSemantics(
+ isError: Boolean,
+ defaultErrorMessage: String,
+): Modifier = if (isError) semantics { error(defaultErrorMessage) } else this
+
internal fun widthOrZero(placeable: Placeable?) = placeable?.width ?: 0
internal fun heightOrZero(placeable: Placeable?) = placeable?.height ?: 0
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Typography.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Typography.kt
index fe45135..7b6273b 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Typography.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Typography.kt
@@ -17,10 +17,10 @@
package androidx.compose.material3
import androidx.compose.material3.tokens.TypographyKeyTokens
+import androidx.compose.material3.tokens.TypographyTokens
import androidx.compose.runtime.Immutable
import androidx.compose.runtime.staticCompositionLocalOf
import androidx.compose.ui.text.TextStyle
-import androidx.compose.material3.tokens.TypographyTokens
/**
* The Material Design type scale includes a range of contrasting styles that support the needs of
diff --git a/compose/material3/material3/src/desktopMain/kotlin/androidx/compose/material3/Strings.desktop.kt b/compose/material3/material3/src/desktopMain/kotlin/androidx/compose/material3/Strings.desktop.kt
index 2de7b31..81c26dd 100644
--- a/compose/material3/material3/src/desktopMain/kotlin/androidx/compose/material3/Strings.desktop.kt
+++ b/compose/material3/material3/src/desktopMain/kotlin/androidx/compose/material3/Strings.desktop.kt
@@ -18,7 +18,6 @@
import androidx.compose.runtime.Composable
import androidx.compose.runtime.ReadOnlyComposable
-
import java.util.Locale
@Composable
@@ -69,6 +68,7 @@
Strings.DateRangePickerDayInRange -> "In range"
Strings.DateRangeInputTitle -> "Enter dates"
Strings.DateRangeInputInvalidRangeInput -> "Invalid date range input"
+ Strings.BottomSheetPaneTitle -> "Bottom Sheet"
Strings.BottomSheetDragHandleDescription -> "Drag Handle"
Strings.BottomSheetPartialExpandDescription -> "Collapse bottom sheet"
Strings.BottomSheetDismissDescription -> "Dismiss bottom sheet"
diff --git a/compose/material3/material3/src/desktopMain/kotlin/androidx/compose/material3/SystemBarsDefaultInsets.desktop.kt b/compose/material3/material3/src/desktopMain/kotlin/androidx/compose/material3/SystemBarsDefaultInsets.desktop.kt
index fe5ca33..c48c446 100644
--- a/compose/material3/material3/src/desktopMain/kotlin/androidx/compose/material3/SystemBarsDefaultInsets.desktop.kt
+++ b/compose/material3/material3/src/desktopMain/kotlin/androidx/compose/material3/SystemBarsDefaultInsets.desktop.kt
@@ -17,8 +17,8 @@
package androidx.compose.material3
import androidx.compose.foundation.layout.WindowInsets
-import androidx.compose.ui.unit.dp
import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
internal actual val WindowInsets.Companion.systemBarsForVisualComponents: WindowInsets
@Composable
diff --git a/compose/runtime/OWNERS b/compose/runtime/OWNERS
index a9c5fa6..1d23419 100644
--- a/compose/runtime/OWNERS
+++ b/compose/runtime/OWNERS
@@ -3,6 +3,7 @@
[email protected]
[email protected]
[email protected]
[email protected]
# Per-file for Playground infra
per-file settings.gradle = [email protected], [email protected], [email protected]
diff --git a/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/ComposableCoroutineCreationDetector.kt b/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/ComposableCoroutineCreationDetector.kt
index 8f8df7f..373c6f1 100644
--- a/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/ComposableCoroutineCreationDetector.kt
+++ b/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/ComposableCoroutineCreationDetector.kt
@@ -31,8 +31,8 @@
import com.android.tools.lint.detector.api.Severity
import com.android.tools.lint.detector.api.SourceCodeScanner
import com.intellij.psi.PsiMethod
-import org.jetbrains.uast.UCallExpression
import java.util.EnumSet
+import org.jetbrains.uast.UCallExpression
/**
* [Detector] that checks `async` and `launch` calls to make sure they don't happen inside the
diff --git a/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/ComposableFlowOperatorDetector.kt b/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/ComposableFlowOperatorDetector.kt
index 7688c4f..024e954 100644
--- a/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/ComposableFlowOperatorDetector.kt
+++ b/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/ComposableFlowOperatorDetector.kt
@@ -33,6 +33,7 @@
import com.android.tools.lint.detector.api.Severity
import com.android.tools.lint.detector.api.SourceCodeScanner
import com.intellij.psi.impl.compiled.ClsMethodImpl
+import java.util.EnumSet
import kotlinx.metadata.KmClassifier
import org.jetbrains.kotlin.psi.KtNamedFunction
import org.jetbrains.uast.UCallExpression
@@ -40,7 +41,6 @@
import org.jetbrains.uast.UTypeReferenceExpression
import org.jetbrains.uast.resolveToUElement
import org.jetbrains.uast.toUElement
-import java.util.EnumSet
/**
* [Detector] that checks calls to Flow operator functions (such as map) to make sure they don't
diff --git a/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/ComposableLambdaParameterDetector.kt b/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/ComposableLambdaParameterDetector.kt
index 1ed4cd9..5993c93 100644
--- a/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/ComposableLambdaParameterDetector.kt
+++ b/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/ComposableLambdaParameterDetector.kt
@@ -30,13 +30,13 @@
import com.android.tools.lint.detector.api.Scope
import com.android.tools.lint.detector.api.Severity
import com.android.tools.lint.detector.api.SourceCodeScanner
+import java.util.EnumSet
import org.jetbrains.kotlin.psi.KtFunctionType
import org.jetbrains.kotlin.psi.KtNullableType
import org.jetbrains.kotlin.psi.KtParameter
import org.jetbrains.uast.UElement
import org.jetbrains.uast.UMethod
import org.jetbrains.uast.UParameter
-import java.util.EnumSet
/**
* [Detector] that checks composable lambda parameters inside composable functions for
diff --git a/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/ComposableNamingDetector.kt b/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/ComposableNamingDetector.kt
index 1bbfff0..c7be5bf 100644
--- a/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/ComposableNamingDetector.kt
+++ b/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/ComposableNamingDetector.kt
@@ -30,9 +30,9 @@
import com.android.tools.lint.detector.api.Scope
import com.android.tools.lint.detector.api.Severity
import com.android.tools.lint.detector.api.SourceCodeScanner
-import org.jetbrains.uast.UMethod
import java.util.EnumSet
import java.util.Locale
+import org.jetbrains.uast.UMethod
/**
* [Detector] that checks the naming of @Composable functions for consistency with guidelines.
diff --git a/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/ComposableStateFlowValueDetector.kt b/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/ComposableStateFlowValueDetector.kt
index 8673429..ce42adb 100644
--- a/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/ComposableStateFlowValueDetector.kt
+++ b/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/ComposableStateFlowValueDetector.kt
@@ -32,9 +32,9 @@
import com.android.tools.lint.detector.api.Severity
import com.android.tools.lint.detector.api.SourceCodeScanner
import com.intellij.psi.PsiMethod
+import java.util.EnumSet
import org.jetbrains.uast.USimpleNameReferenceExpression
import org.jetbrains.uast.tryResolve
-import java.util.EnumSet
/**
* [Detector] that checks calls to StateFlow.value to make sure they don't happen inside the body
diff --git a/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/CompositionLocalNamingDetector.kt b/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/CompositionLocalNamingDetector.kt
index ef2fca4..dee4098 100644
--- a/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/CompositionLocalNamingDetector.kt
+++ b/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/CompositionLocalNamingDetector.kt
@@ -29,12 +29,12 @@
import com.android.tools.lint.detector.api.Scope
import com.android.tools.lint.detector.api.Severity
import com.android.tools.lint.detector.api.SourceCodeScanner
+import java.util.EnumSet
import org.jetbrains.kotlin.psi.KtParameter
import org.jetbrains.kotlin.psi.KtProperty
import org.jetbrains.uast.UElement
import org.jetbrains.uast.UParameter
import org.jetbrains.uast.UVariable
-import java.util.EnumSet
/**
* [Detector] that checks the naming of CompositionLocal properties for consistency with guidelines.
diff --git a/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/MutableCollectionMutableStateDetector.kt b/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/MutableCollectionMutableStateDetector.kt
index 896c7bf..4285eca 100644
--- a/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/MutableCollectionMutableStateDetector.kt
+++ b/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/MutableCollectionMutableStateDetector.kt
@@ -29,13 +29,13 @@
import com.android.tools.lint.detector.api.Severity
import com.android.tools.lint.detector.api.SourceCodeScanner
import com.intellij.psi.PsiMethod
+import java.util.EnumSet
import org.jetbrains.kotlin.descriptors.containingPackage
import org.jetbrains.kotlin.psi.KtExpression
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.typeUtil.supertypes
import org.jetbrains.uast.UCallExpression
import org.jetbrains.uast.kotlin.KotlinUastResolveProviderService
-import java.util.EnumSet
/**
* [Detector] that checks `mutableStateOf` calls to warn if the type is a mutable collection, as
diff --git a/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/ProduceStateDetector.kt b/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/ProduceStateDetector.kt
index a18642d..2afb1ab 100644
--- a/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/ProduceStateDetector.kt
+++ b/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/ProduceStateDetector.kt
@@ -31,12 +31,12 @@
import com.android.tools.lint.detector.api.Severity
import com.android.tools.lint.detector.api.SourceCodeScanner
import com.intellij.psi.PsiMethod
+import java.util.EnumSet
import org.jetbrains.uast.UCallExpression
import org.jetbrains.uast.USimpleNameReferenceExpression
import org.jetbrains.uast.getParameterForArgument
import org.jetbrains.uast.tryResolve
import org.jetbrains.uast.visitor.AbstractUastVisitor
-import java.util.EnumSet
/**
* [Detector] that checks calls to produceState, to make sure that the producer lambda writes to
diff --git a/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/RememberDetector.kt b/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/RememberDetector.kt
index 559d08c..354a305 100644
--- a/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/RememberDetector.kt
+++ b/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/RememberDetector.kt
@@ -30,10 +30,10 @@
import com.android.tools.lint.detector.api.Severity
import com.android.tools.lint.detector.api.SourceCodeScanner
import com.intellij.psi.PsiMethod
-import org.jetbrains.uast.UCallExpression
import java.util.EnumSet
import org.jetbrains.kotlin.psi.KtCallExpression
import org.jetbrains.kotlin.psi.KtLambdaExpression
+import org.jetbrains.uast.UCallExpression
import org.jetbrains.uast.UExpression
import org.jetbrains.uast.toUElementOfType
diff --git a/compose/runtime/runtime-livedata/samples/build.gradle b/compose/runtime/runtime-livedata/samples/build.gradle
index 78130f2..436d6e9 100644
--- a/compose/runtime/runtime-livedata/samples/build.gradle
+++ b/compose/runtime/runtime-livedata/samples/build.gradle
@@ -34,7 +34,7 @@
}
androidx {
- name = "AndroidX Compose UI Livedata Interop Samples"
+ name = "Compose UI Livedata Interop Samples"
type = LibraryType.SAMPLES
inceptionYear = "2019"
description = "Contains the sample code for the Androidx Compose UI Livedata Interop System"
diff --git a/compose/runtime/runtime-rxjava2/api/current.txt b/compose/runtime/runtime-rxjava2/api/current.txt
index ea20020..43f9fd4 100644
--- a/compose/runtime/runtime-rxjava2/api/current.txt
+++ b/compose/runtime/runtime-rxjava2/api/current.txt
@@ -2,11 +2,11 @@
package androidx.compose.runtime.rxjava2 {
public final class RxJava2AdapterKt {
- method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Observable<T>, R initial);
- method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Flowable<T>, R initial);
- method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Single<T>, R initial);
- method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Maybe<T>, R initial);
method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Boolean> subscribeAsState(io.reactivex.Completable);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Flowable<T>, R initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Maybe<T>, R initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Observable<T>, R initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Single<T>, R initial);
}
}
diff --git a/compose/runtime/runtime-rxjava2/api/public_plus_experimental_current.txt b/compose/runtime/runtime-rxjava2/api/public_plus_experimental_current.txt
index ea20020..43f9fd4 100644
--- a/compose/runtime/runtime-rxjava2/api/public_plus_experimental_current.txt
+++ b/compose/runtime/runtime-rxjava2/api/public_plus_experimental_current.txt
@@ -2,11 +2,11 @@
package androidx.compose.runtime.rxjava2 {
public final class RxJava2AdapterKt {
- method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Observable<T>, R initial);
- method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Flowable<T>, R initial);
- method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Single<T>, R initial);
- method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Maybe<T>, R initial);
method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Boolean> subscribeAsState(io.reactivex.Completable);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Flowable<T>, R initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Maybe<T>, R initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Observable<T>, R initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Single<T>, R initial);
}
}
diff --git a/compose/runtime/runtime-rxjava2/api/restricted_current.txt b/compose/runtime/runtime-rxjava2/api/restricted_current.txt
index ea20020..43f9fd4 100644
--- a/compose/runtime/runtime-rxjava2/api/restricted_current.txt
+++ b/compose/runtime/runtime-rxjava2/api/restricted_current.txt
@@ -2,11 +2,11 @@
package androidx.compose.runtime.rxjava2 {
public final class RxJava2AdapterKt {
- method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Observable<T>, R initial);
- method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Flowable<T>, R initial);
- method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Single<T>, R initial);
- method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Maybe<T>, R initial);
method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Boolean> subscribeAsState(io.reactivex.Completable);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Flowable<T>, R initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Maybe<T>, R initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Observable<T>, R initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Single<T>, R initial);
}
}
diff --git a/compose/runtime/runtime-rxjava2/samples/build.gradle b/compose/runtime/runtime-rxjava2/samples/build.gradle
index d73b254..5c9082f4 100644
--- a/compose/runtime/runtime-rxjava2/samples/build.gradle
+++ b/compose/runtime/runtime-rxjava2/samples/build.gradle
@@ -34,7 +34,7 @@
}
androidx {
- name = "AndroidX Compose RxJava 2 Integration Samples"
+ name = "Compose RxJava 2 Integration Samples"
type = LibraryType.SAMPLES
inceptionYear = "2019"
description = "Contains the sample code for the Androidx Compose RxJava 2 Integration System"
diff --git a/compose/runtime/runtime-rxjava3/api/current.txt b/compose/runtime/runtime-rxjava3/api/current.txt
index aa5ec91..357541c8 100644
--- a/compose/runtime/runtime-rxjava3/api/current.txt
+++ b/compose/runtime/runtime-rxjava3/api/current.txt
@@ -2,11 +2,11 @@
package androidx.compose.runtime.rxjava3 {
public final class RxJava3AdapterKt {
- method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Observable<T>, R initial);
- method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Flowable<T>, R initial);
- method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Single<T>, R initial);
- method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Maybe<T>, R initial);
method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Boolean> subscribeAsState(io.reactivex.rxjava3.core.Completable);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Flowable<T>, R initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Maybe<T>, R initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Observable<T>, R initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Single<T>, R initial);
}
}
diff --git a/compose/runtime/runtime-rxjava3/api/public_plus_experimental_current.txt b/compose/runtime/runtime-rxjava3/api/public_plus_experimental_current.txt
index aa5ec91..357541c8 100644
--- a/compose/runtime/runtime-rxjava3/api/public_plus_experimental_current.txt
+++ b/compose/runtime/runtime-rxjava3/api/public_plus_experimental_current.txt
@@ -2,11 +2,11 @@
package androidx.compose.runtime.rxjava3 {
public final class RxJava3AdapterKt {
- method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Observable<T>, R initial);
- method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Flowable<T>, R initial);
- method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Single<T>, R initial);
- method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Maybe<T>, R initial);
method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Boolean> subscribeAsState(io.reactivex.rxjava3.core.Completable);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Flowable<T>, R initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Maybe<T>, R initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Observable<T>, R initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Single<T>, R initial);
}
}
diff --git a/compose/runtime/runtime-rxjava3/api/restricted_current.txt b/compose/runtime/runtime-rxjava3/api/restricted_current.txt
index aa5ec91..357541c8 100644
--- a/compose/runtime/runtime-rxjava3/api/restricted_current.txt
+++ b/compose/runtime/runtime-rxjava3/api/restricted_current.txt
@@ -2,11 +2,11 @@
package androidx.compose.runtime.rxjava3 {
public final class RxJava3AdapterKt {
- method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Observable<T>, R initial);
- method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Flowable<T>, R initial);
- method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Single<T>, R initial);
- method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Maybe<T>, R initial);
method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Boolean> subscribeAsState(io.reactivex.rxjava3.core.Completable);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Flowable<T>, R initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Maybe<T>, R initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Observable<T>, R initial);
+ method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.rxjava3.core.Single<T>, R initial);
}
}
diff --git a/compose/runtime/runtime-rxjava3/samples/build.gradle b/compose/runtime/runtime-rxjava3/samples/build.gradle
index aa111a0..9da055d 100644
--- a/compose/runtime/runtime-rxjava3/samples/build.gradle
+++ b/compose/runtime/runtime-rxjava3/samples/build.gradle
@@ -34,7 +34,7 @@
}
androidx {
- name = "AndroidX Compose RxJava 3 Integration Samples"
+ name = "Compose RxJava 3 Integration Samples"
type = LibraryType.SAMPLES
inceptionYear = "2020"
description = "Contains the sample code for the Androidx Compose RxJava 3 Integration System"
diff --git a/compose/runtime/runtime-saveable-lint/src/main/java/androidx/compose/runtime/saveable/lint/RememberSaveableDetector.kt b/compose/runtime/runtime-saveable-lint/src/main/java/androidx/compose/runtime/saveable/lint/RememberSaveableDetector.kt
index 146c33a..c96aa91 100644
--- a/compose/runtime/runtime-saveable-lint/src/main/java/androidx/compose/runtime/saveable/lint/RememberSaveableDetector.kt
+++ b/compose/runtime/runtime-saveable-lint/src/main/java/androidx/compose/runtime/saveable/lint/RememberSaveableDetector.kt
@@ -34,8 +34,8 @@
import com.android.tools.lint.detector.api.SourceCodeScanner
import com.intellij.psi.PsiArrayType
import com.intellij.psi.PsiMethod
-import org.jetbrains.uast.UCallExpression
import java.util.EnumSet
+import org.jetbrains.uast.UCallExpression
/**
* [Detector] that checks `rememberSaveable` calls to make sure that a `Saver` is not passed to
diff --git a/compose/runtime/runtime-saveable/api/current.txt b/compose/runtime/runtime-saveable/api/current.txt
index bdc843c..6cf4941 100644
--- a/compose/runtime/runtime-saveable/api/current.txt
+++ b/compose/runtime/runtime-saveable/api/current.txt
@@ -10,8 +10,8 @@
}
public final class RememberSaveableKt {
- method @androidx.compose.runtime.Composable public static <T> T rememberSaveable(Object![]? inputs, optional androidx.compose.runtime.saveable.Saver<T,?> saver, optional String? key, kotlin.jvm.functions.Function0<? extends T> init);
method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.MutableState<T> rememberSaveable(Object![]? inputs, androidx.compose.runtime.saveable.Saver<T,?> stateSaver, optional String? key, kotlin.jvm.functions.Function0<? extends androidx.compose.runtime.MutableState<T>> init);
+ method @androidx.compose.runtime.Composable public static <T> T rememberSaveable(Object![]? inputs, optional androidx.compose.runtime.saveable.Saver<T,?> saver, optional String? key, kotlin.jvm.functions.Function0<? extends T> init);
}
public interface SaveableStateHolder {
diff --git a/compose/runtime/runtime-saveable/api/public_plus_experimental_current.txt b/compose/runtime/runtime-saveable/api/public_plus_experimental_current.txt
index bdc843c..6cf4941 100644
--- a/compose/runtime/runtime-saveable/api/public_plus_experimental_current.txt
+++ b/compose/runtime/runtime-saveable/api/public_plus_experimental_current.txt
@@ -10,8 +10,8 @@
}
public final class RememberSaveableKt {
- method @androidx.compose.runtime.Composable public static <T> T rememberSaveable(Object![]? inputs, optional androidx.compose.runtime.saveable.Saver<T,?> saver, optional String? key, kotlin.jvm.functions.Function0<? extends T> init);
method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.MutableState<T> rememberSaveable(Object![]? inputs, androidx.compose.runtime.saveable.Saver<T,?> stateSaver, optional String? key, kotlin.jvm.functions.Function0<? extends androidx.compose.runtime.MutableState<T>> init);
+ method @androidx.compose.runtime.Composable public static <T> T rememberSaveable(Object![]? inputs, optional androidx.compose.runtime.saveable.Saver<T,?> saver, optional String? key, kotlin.jvm.functions.Function0<? extends T> init);
}
public interface SaveableStateHolder {
diff --git a/compose/runtime/runtime-saveable/api/restricted_current.txt b/compose/runtime/runtime-saveable/api/restricted_current.txt
index bdc843c..6cf4941 100644
--- a/compose/runtime/runtime-saveable/api/restricted_current.txt
+++ b/compose/runtime/runtime-saveable/api/restricted_current.txt
@@ -10,8 +10,8 @@
}
public final class RememberSaveableKt {
- method @androidx.compose.runtime.Composable public static <T> T rememberSaveable(Object![]? inputs, optional androidx.compose.runtime.saveable.Saver<T,?> saver, optional String? key, kotlin.jvm.functions.Function0<? extends T> init);
method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.MutableState<T> rememberSaveable(Object![]? inputs, androidx.compose.runtime.saveable.Saver<T,?> stateSaver, optional String? key, kotlin.jvm.functions.Function0<? extends androidx.compose.runtime.MutableState<T>> init);
+ method @androidx.compose.runtime.Composable public static <T> T rememberSaveable(Object![]? inputs, optional androidx.compose.runtime.saveable.Saver<T,?> saver, optional String? key, kotlin.jvm.functions.Function0<? extends T> init);
}
public interface SaveableStateHolder {
diff --git a/compose/runtime/runtime-saveable/samples/build.gradle b/compose/runtime/runtime-saveable/samples/build.gradle
index 8483522..c69d961 100644
--- a/compose/runtime/runtime-saveable/samples/build.gradle
+++ b/compose/runtime/runtime-saveable/samples/build.gradle
@@ -37,7 +37,7 @@
}
androidx {
- name = "AndroidX Compose Saved Instance State System Samples"
+ name = "Compose Saved Instance State System Samples"
type = LibraryType.SAMPLES
inceptionYear = "2019"
description = "Contains the sample code for the Androidx Compose Saved Instance State System"
diff --git a/compose/runtime/runtime-saveable/src/androidAndroidTest/kotlin/androidx/compose/runtime/saveable/ActivityRecreationTest.kt b/compose/runtime/runtime-saveable/src/androidAndroidTest/kotlin/androidx/compose/runtime/saveable/ActivityRecreationTest.kt
index aaec57b..ab8811c 100644
--- a/compose/runtime/runtime-saveable/src/androidAndroidTest/kotlin/androidx/compose/runtime/saveable/ActivityRecreationTest.kt
+++ b/compose/runtime/runtime-saveable/src/androidAndroidTest/kotlin/androidx/compose/runtime/saveable/ActivityRecreationTest.kt
@@ -37,9 +37,9 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
+import kotlin.random.Random
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.random.Random
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/runtime/runtime-saveable/src/androidAndroidTest/kotlin/androidx/compose/runtime/saveable/RememberSaveableTest.kt b/compose/runtime/runtime-saveable/src/androidAndroidTest/kotlin/androidx/compose/runtime/saveable/RememberSaveableTest.kt
index 1d15b6c..ceffeeb 100644
--- a/compose/runtime/runtime-saveable/src/androidAndroidTest/kotlin/androidx/compose/runtime/saveable/RememberSaveableTest.kt
+++ b/compose/runtime/runtime-saveable/src/androidAndroidTest/kotlin/androidx/compose/runtime/saveable/RememberSaveableTest.kt
@@ -26,13 +26,13 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/runtime/runtime/api/current.txt b/compose/runtime/runtime/api/current.txt
index 2ba2092..e0839e9 100644
--- a/compose/runtime/runtime/api/current.txt
+++ b/compose/runtime/runtime/api/current.txt
@@ -76,11 +76,11 @@
method @androidx.compose.runtime.Composable public static androidx.compose.runtime.CompositionLocalContext getCurrentCompositionLocalContext();
method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static androidx.compose.runtime.RecomposeScope getCurrentRecomposeScope();
method @androidx.compose.runtime.Composable public static inline <T> T key(Object![]? keys, kotlin.jvm.functions.Function0<? extends T> block);
- method @androidx.compose.runtime.Composable public static inline <T> T remember(kotlin.jvm.functions.Function0<? extends T> calculation);
- method @androidx.compose.runtime.Composable public static inline <T> T remember(Object? key1, kotlin.jvm.functions.Function0<? extends T> calculation);
- method @androidx.compose.runtime.Composable public static inline <T> T remember(Object? key1, Object? key2, kotlin.jvm.functions.Function0<? extends T> calculation);
method @androidx.compose.runtime.Composable public static inline <T> T remember(Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method @androidx.compose.runtime.Composable public static inline <T> T remember(Object? key1, Object? key2, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method @androidx.compose.runtime.Composable public static inline <T> T remember(Object? key1, kotlin.jvm.functions.Function0<? extends T> calculation);
method @androidx.compose.runtime.Composable public static inline <T> T remember(Object![]? keys, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method @androidx.compose.runtime.Composable public static inline <T> T remember(kotlin.jvm.functions.Function0<? extends T> calculation);
method @androidx.compose.runtime.Composable public static androidx.compose.runtime.CompositionContext rememberCompositionContext();
property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static final androidx.compose.runtime.Composer currentComposer;
property @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static final int currentCompositeKeyHash;
@@ -99,15 +99,15 @@
public sealed interface Composer {
method @androidx.compose.runtime.ComposeCompilerApi public <V, T> void apply(V value, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit> block);
- method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(Object? value);
method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(boolean value);
- method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(char value);
method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(byte value);
- method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(short value);
- method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(int value);
- method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(float value);
- method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(long value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(char value);
method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(double value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(float value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(int value);
+ method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(Object? value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(long value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(short value);
method @androidx.compose.runtime.ComposeCompilerApi public default boolean changedInstance(Object? value);
method public void collectParameterInformation();
method @androidx.compose.runtime.ComposeCompilerApi public <T> void createNode(kotlin.jvm.functions.Function0<? extends T> factory);
@@ -208,8 +208,8 @@
}
public final class CompositionLocalKt {
- method @androidx.compose.runtime.Composable public static void CompositionLocalProvider(androidx.compose.runtime.ProvidedValue<?>![] values, kotlin.jvm.functions.Function0<kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void CompositionLocalProvider(androidx.compose.runtime.CompositionLocalContext context, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void CompositionLocalProvider(androidx.compose.runtime.ProvidedValue<?>![] values, kotlin.jvm.functions.Function0<kotlin.Unit> content);
method public static <T> androidx.compose.runtime.ProvidableCompositionLocal<T> compositionLocalOf(optional androidx.compose.runtime.SnapshotMutationPolicy<T> policy, kotlin.jvm.functions.Function0<? extends T> defaultFactory);
method public static <T> androidx.compose.runtime.ProvidableCompositionLocal<T> staticCompositionLocalOf(kotlin.jvm.functions.Function0<? extends T> defaultFactory);
}
@@ -263,16 +263,16 @@
}
public final class EffectsKt {
- method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
- method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(Object? key1, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
- method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(Object? key1, Object? key2, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(Object? key1, Object? key2, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(Object? key1, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(Object![]? keys, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
- method @Deprecated @androidx.compose.runtime.Composable public static void LaunchedEffect(kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
- method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void LaunchedEffect(Object? key1, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
- method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void LaunchedEffect(Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void LaunchedEffect(Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void LaunchedEffect(Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void LaunchedEffect(Object? key1, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void LaunchedEffect(Object![]? keys, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method @Deprecated @androidx.compose.runtime.Composable public static void LaunchedEffect(kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void SideEffect(kotlin.jvm.functions.Function0<kotlin.Unit> effect);
method @androidx.compose.runtime.Composable public static inline kotlinx.coroutines.CoroutineScope rememberCoroutineScope(optional kotlin.jvm.functions.Function0<? extends kotlin.coroutines.CoroutineContext> getContext);
}
@@ -512,10 +512,10 @@
}
public final class SnapshotStateKt {
- method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, optional kotlin.coroutines.CoroutineContext context);
method @androidx.compose.runtime.Composable public static <T extends R, R> androidx.compose.runtime.State<R> collectAsState(kotlinx.coroutines.flow.Flow<? extends T>, R initial, optional kotlin.coroutines.CoroutineContext context);
- method @androidx.compose.runtime.snapshots.StateFactoryMarker public static <T> androidx.compose.runtime.State<T> derivedStateOf(kotlin.jvm.functions.Function0<? extends T> calculation);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, optional kotlin.coroutines.CoroutineContext context);
method @androidx.compose.runtime.snapshots.StateFactoryMarker public static <T> androidx.compose.runtime.State<T> derivedStateOf(androidx.compose.runtime.SnapshotMutationPolicy<T> policy, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method @androidx.compose.runtime.snapshots.StateFactoryMarker public static <T> androidx.compose.runtime.State<T> derivedStateOf(kotlin.jvm.functions.Function0<? extends T> calculation);
method public static inline operator <T> T getValue(androidx.compose.runtime.State<? extends T>, Object? thisObj, kotlin.reflect.KProperty<?> property);
method @androidx.compose.runtime.snapshots.StateFactoryMarker public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf();
method @androidx.compose.runtime.snapshots.StateFactoryMarker public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf(T?... elements);
@@ -523,11 +523,11 @@
method @androidx.compose.runtime.snapshots.StateFactoryMarker public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
method @androidx.compose.runtime.snapshots.StateFactoryMarker public static <T> androidx.compose.runtime.MutableState<T> mutableStateOf(T value, optional androidx.compose.runtime.SnapshotMutationPolicy<T> policy);
method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> neverEqualPolicy();
- method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T initialValue, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
- method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T initialValue, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
- method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T initialValue, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T initialValue, Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T initialValue, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T initialValue, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T initialValue, Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T initialValue, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> referentialEqualityPolicy();
method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> rememberUpdatedState(T newValue);
method public static inline operator <T> void setValue(androidx.compose.runtime.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T value);
@@ -563,22 +563,22 @@
package androidx.compose.runtime.collection {
public final class MutableVector<T> implements java.util.RandomAccess {
- method public boolean add(T element);
method public void add(int index, T element);
- method public boolean addAll(int index, java.util.List<? extends T> elements);
- method public boolean addAll(int index, androidx.compose.runtime.collection.MutableVector<T> elements);
- method public inline boolean addAll(java.util.List<? extends T> elements);
+ method public boolean add(T element);
method public inline boolean addAll(androidx.compose.runtime.collection.MutableVector<T> elements);
- method public boolean addAll(T![] elements);
+ method public boolean addAll(int index, androidx.compose.runtime.collection.MutableVector<T> elements);
method public boolean addAll(int index, java.util.Collection<? extends T> elements);
+ method public boolean addAll(int index, java.util.List<? extends T> elements);
method public boolean addAll(java.util.Collection<? extends T> elements);
+ method public inline boolean addAll(java.util.List<? extends T> elements);
+ method public boolean addAll(T![] elements);
method public inline boolean any(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
method public java.util.List<T> asMutableList();
method public void clear();
method public operator boolean contains(T element);
- method public boolean containsAll(java.util.List<? extends T> elements);
- method public boolean containsAll(java.util.Collection<? extends T> elements);
method public boolean containsAll(androidx.compose.runtime.collection.MutableVector<T> elements);
+ method public boolean containsAll(java.util.Collection<? extends T> elements);
+ method public boolean containsAll(java.util.List<? extends T> elements);
method public boolean contentEquals(androidx.compose.runtime.collection.MutableVector<T> other);
method public void ensureCapacity(int capacity);
method public T first();
@@ -614,9 +614,9 @@
method public inline operator void minusAssign(T element);
method public inline operator void plusAssign(T element);
method public boolean remove(T element);
- method public boolean removeAll(java.util.List<? extends T> elements);
method public boolean removeAll(androidx.compose.runtime.collection.MutableVector<T> elements);
method public boolean removeAll(java.util.Collection<? extends T> elements);
+ method public boolean removeAll(java.util.List<? extends T> elements);
method public T removeAt(int index);
method public void removeRange(int start, int end);
method public boolean retainAll(java.util.Collection<? extends T> elements);
@@ -822,8 +822,8 @@
@androidx.compose.runtime.Stable public final class SnapshotStateList<T> implements kotlin.jvm.internal.markers.KMutableList java.util.List<T> androidx.compose.runtime.snapshots.StateObject {
ctor public SnapshotStateList();
- method public boolean add(T element);
method public void add(int index, T element);
+ method public boolean add(T element);
method public boolean addAll(int index, java.util.Collection<? extends T> elements);
method public boolean addAll(java.util.Collection<? extends T> elements);
method public void clear();
@@ -877,8 +877,8 @@
public final class SnapshotStateObserver {
ctor public SnapshotStateObserver(kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> onChangedExecutor);
- method public void clear(Object scope);
method public void clear();
+ method public void clear(Object scope);
method public void clearIf(kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Boolean> predicate);
method @org.jetbrains.annotations.TestOnly public void notifyChanges(java.util.Set<?> changes, androidx.compose.runtime.snapshots.Snapshot snapshot);
method public <T> void observeReads(T scope, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> onValueChangedForScope, kotlin.jvm.functions.Function0<kotlin.Unit> block);
diff --git a/compose/runtime/runtime/api/public_plus_experimental_current.txt b/compose/runtime/runtime/api/public_plus_experimental_current.txt
index 6edfaf4..d9c5ce4 100644
--- a/compose/runtime/runtime/api/public_plus_experimental_current.txt
+++ b/compose/runtime/runtime/api/public_plus_experimental_current.txt
@@ -81,11 +81,11 @@
method @androidx.compose.runtime.Composable public static androidx.compose.runtime.CompositionLocalContext getCurrentCompositionLocalContext();
method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static androidx.compose.runtime.RecomposeScope getCurrentRecomposeScope();
method @androidx.compose.runtime.Composable public static inline <T> T key(Object![]? keys, kotlin.jvm.functions.Function0<? extends T> block);
- method @androidx.compose.runtime.Composable public static inline <T> T remember(kotlin.jvm.functions.Function0<? extends T> calculation);
- method @androidx.compose.runtime.Composable public static inline <T> T remember(Object? key1, kotlin.jvm.functions.Function0<? extends T> calculation);
- method @androidx.compose.runtime.Composable public static inline <T> T remember(Object? key1, Object? key2, kotlin.jvm.functions.Function0<? extends T> calculation);
method @androidx.compose.runtime.Composable public static inline <T> T remember(Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method @androidx.compose.runtime.Composable public static inline <T> T remember(Object? key1, Object? key2, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method @androidx.compose.runtime.Composable public static inline <T> T remember(Object? key1, kotlin.jvm.functions.Function0<? extends T> calculation);
method @androidx.compose.runtime.Composable public static inline <T> T remember(Object![]? keys, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method @androidx.compose.runtime.Composable public static inline <T> T remember(kotlin.jvm.functions.Function0<? extends T> calculation);
method @androidx.compose.runtime.Composable public static androidx.compose.runtime.CompositionContext rememberCompositionContext();
property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static final androidx.compose.runtime.Composer currentComposer;
property @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static final int currentCompositeKeyHash;
@@ -105,15 +105,15 @@
public sealed interface Composer {
method @androidx.compose.runtime.ComposeCompilerApi public <V, T> void apply(V value, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit> block);
method @androidx.compose.runtime.InternalComposeApi public androidx.compose.runtime.CompositionContext buildContext();
- method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(Object? value);
method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(boolean value);
- method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(char value);
method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(byte value);
- method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(short value);
- method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(int value);
- method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(float value);
- method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(long value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(char value);
method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(double value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(float value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(int value);
+ method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(Object? value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(long value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(short value);
method @androidx.compose.runtime.ComposeCompilerApi public default boolean changedInstance(Object? value);
method public void collectParameterInformation();
method @androidx.compose.runtime.InternalComposeApi public <T> T consume(androidx.compose.runtime.CompositionLocal<T> key);
@@ -226,8 +226,8 @@
}
public final class CompositionLocalKt {
- method @androidx.compose.runtime.Composable public static void CompositionLocalProvider(androidx.compose.runtime.ProvidedValue<?>![] values, kotlin.jvm.functions.Function0<kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void CompositionLocalProvider(androidx.compose.runtime.CompositionLocalContext context, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void CompositionLocalProvider(androidx.compose.runtime.ProvidedValue<?>![] values, kotlin.jvm.functions.Function0<kotlin.Unit> content);
method public static <T> androidx.compose.runtime.ProvidableCompositionLocal<T> compositionLocalOf(optional androidx.compose.runtime.SnapshotMutationPolicy<T> policy, kotlin.jvm.functions.Function0<? extends T> defaultFactory);
method public static <T> androidx.compose.runtime.ProvidableCompositionLocal<T> staticCompositionLocalOf(kotlin.jvm.functions.Function0<? extends T> defaultFactory);
}
@@ -290,16 +290,16 @@
}
public final class EffectsKt {
- method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
- method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(Object? key1, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
- method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(Object? key1, Object? key2, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(Object? key1, Object? key2, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(Object? key1, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(Object![]? keys, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
- method @Deprecated @androidx.compose.runtime.Composable public static void LaunchedEffect(kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
- method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void LaunchedEffect(Object? key1, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
- method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void LaunchedEffect(Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void LaunchedEffect(Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void LaunchedEffect(Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void LaunchedEffect(Object? key1, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void LaunchedEffect(Object![]? keys, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method @Deprecated @androidx.compose.runtime.Composable public static void LaunchedEffect(kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void SideEffect(kotlin.jvm.functions.Function0<kotlin.Unit> effect);
method @androidx.compose.runtime.Composable public static inline kotlinx.coroutines.CoroutineScope rememberCoroutineScope(optional kotlin.jvm.functions.Function0<? extends kotlin.coroutines.CoroutineContext> getContext);
}
@@ -561,10 +561,10 @@
}
public final class SnapshotStateKt {
- method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, optional kotlin.coroutines.CoroutineContext context);
method @androidx.compose.runtime.Composable public static <T extends R, R> androidx.compose.runtime.State<R> collectAsState(kotlinx.coroutines.flow.Flow<? extends T>, R initial, optional kotlin.coroutines.CoroutineContext context);
- method @androidx.compose.runtime.snapshots.StateFactoryMarker public static <T> androidx.compose.runtime.State<T> derivedStateOf(kotlin.jvm.functions.Function0<? extends T> calculation);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, optional kotlin.coroutines.CoroutineContext context);
method @androidx.compose.runtime.snapshots.StateFactoryMarker public static <T> androidx.compose.runtime.State<T> derivedStateOf(androidx.compose.runtime.SnapshotMutationPolicy<T> policy, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method @androidx.compose.runtime.snapshots.StateFactoryMarker public static <T> androidx.compose.runtime.State<T> derivedStateOf(kotlin.jvm.functions.Function0<? extends T> calculation);
method public static inline operator <T> T getValue(androidx.compose.runtime.State<? extends T>, Object? thisObj, kotlin.reflect.KProperty<?> property);
method @androidx.compose.runtime.snapshots.StateFactoryMarker public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf();
method @androidx.compose.runtime.snapshots.StateFactoryMarker public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf(T?... elements);
@@ -572,11 +572,11 @@
method @androidx.compose.runtime.snapshots.StateFactoryMarker public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
method @androidx.compose.runtime.snapshots.StateFactoryMarker public static <T> androidx.compose.runtime.MutableState<T> mutableStateOf(T value, optional androidx.compose.runtime.SnapshotMutationPolicy<T> policy);
method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> neverEqualPolicy();
- method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T initialValue, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
- method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T initialValue, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
- method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T initialValue, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T initialValue, Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T initialValue, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T initialValue, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T initialValue, Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T initialValue, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> referentialEqualityPolicy();
method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> rememberUpdatedState(T newValue);
method public static inline operator <T> void setValue(androidx.compose.runtime.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T value);
@@ -612,22 +612,22 @@
package androidx.compose.runtime.collection {
public final class MutableVector<T> implements java.util.RandomAccess {
- method public boolean add(T element);
method public void add(int index, T element);
- method public boolean addAll(int index, java.util.List<? extends T> elements);
- method public boolean addAll(int index, androidx.compose.runtime.collection.MutableVector<T> elements);
- method public inline boolean addAll(java.util.List<? extends T> elements);
+ method public boolean add(T element);
method public inline boolean addAll(androidx.compose.runtime.collection.MutableVector<T> elements);
- method public boolean addAll(T![] elements);
+ method public boolean addAll(int index, androidx.compose.runtime.collection.MutableVector<T> elements);
method public boolean addAll(int index, java.util.Collection<? extends T> elements);
+ method public boolean addAll(int index, java.util.List<? extends T> elements);
method public boolean addAll(java.util.Collection<? extends T> elements);
+ method public inline boolean addAll(java.util.List<? extends T> elements);
+ method public boolean addAll(T![] elements);
method public inline boolean any(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
method public java.util.List<T> asMutableList();
method public void clear();
method public operator boolean contains(T element);
- method public boolean containsAll(java.util.List<? extends T> elements);
- method public boolean containsAll(java.util.Collection<? extends T> elements);
method public boolean containsAll(androidx.compose.runtime.collection.MutableVector<T> elements);
+ method public boolean containsAll(java.util.Collection<? extends T> elements);
+ method public boolean containsAll(java.util.List<? extends T> elements);
method public boolean contentEquals(androidx.compose.runtime.collection.MutableVector<T> other);
method public void ensureCapacity(int capacity);
method public T first();
@@ -663,9 +663,9 @@
method public inline operator void minusAssign(T element);
method public inline operator void plusAssign(T element);
method public boolean remove(T element);
- method public boolean removeAll(java.util.List<? extends T> elements);
method public boolean removeAll(androidx.compose.runtime.collection.MutableVector<T> elements);
method public boolean removeAll(java.util.Collection<? extends T> elements);
+ method public boolean removeAll(java.util.List<? extends T> elements);
method public T removeAt(int index);
method public void removeRange(int start, int end);
method public boolean retainAll(java.util.Collection<? extends T> elements);
@@ -902,8 +902,8 @@
@androidx.compose.runtime.Stable public final class SnapshotStateList<T> implements kotlin.jvm.internal.markers.KMutableList java.util.List<T> androidx.compose.runtime.snapshots.StateObject {
ctor public SnapshotStateList();
- method public boolean add(T element);
method public void add(int index, T element);
+ method public boolean add(T element);
method public boolean addAll(int index, java.util.Collection<? extends T> elements);
method public boolean addAll(java.util.Collection<? extends T> elements);
method public void clear();
@@ -957,8 +957,8 @@
public final class SnapshotStateObserver {
ctor public SnapshotStateObserver(kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> onChangedExecutor);
- method public void clear(Object scope);
method public void clear();
+ method public void clear(Object scope);
method public void clearIf(kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Boolean> predicate);
method @org.jetbrains.annotations.TestOnly public void notifyChanges(java.util.Set<?> changes, androidx.compose.runtime.snapshots.Snapshot snapshot);
method public <T> void observeReads(T scope, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> onValueChangedForScope, kotlin.jvm.functions.Function0<kotlin.Unit> block);
diff --git a/compose/runtime/runtime/api/restricted_current.txt b/compose/runtime/runtime/api/restricted_current.txt
index fae054f..96ce97e 100644
--- a/compose/runtime/runtime/api/restricted_current.txt
+++ b/compose/runtime/runtime/api/restricted_current.txt
@@ -81,11 +81,11 @@
method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static androidx.compose.runtime.RecomposeScope getCurrentRecomposeScope();
method @kotlin.PublishedApi internal static void invalidApplier();
method @androidx.compose.runtime.Composable public static inline <T> T key(Object![]? keys, kotlin.jvm.functions.Function0<? extends T> block);
- method @androidx.compose.runtime.Composable public static inline <T> T remember(kotlin.jvm.functions.Function0<? extends T> calculation);
- method @androidx.compose.runtime.Composable public static inline <T> T remember(Object? key1, kotlin.jvm.functions.Function0<? extends T> calculation);
- method @androidx.compose.runtime.Composable public static inline <T> T remember(Object? key1, Object? key2, kotlin.jvm.functions.Function0<? extends T> calculation);
method @androidx.compose.runtime.Composable public static inline <T> T remember(Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method @androidx.compose.runtime.Composable public static inline <T> T remember(Object? key1, Object? key2, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method @androidx.compose.runtime.Composable public static inline <T> T remember(Object? key1, kotlin.jvm.functions.Function0<? extends T> calculation);
method @androidx.compose.runtime.Composable public static inline <T> T remember(Object![]? keys, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method @androidx.compose.runtime.Composable public static inline <T> T remember(kotlin.jvm.functions.Function0<? extends T> calculation);
method @androidx.compose.runtime.Composable public static androidx.compose.runtime.CompositionContext rememberCompositionContext();
property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static final androidx.compose.runtime.Composer currentComposer;
property @androidx.compose.runtime.Composable @androidx.compose.runtime.ExplicitGroupsComposable public static final int currentCompositeKeyHash;
@@ -104,15 +104,15 @@
public sealed interface Composer {
method @androidx.compose.runtime.ComposeCompilerApi public <V, T> void apply(V value, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit> block);
- method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(Object? value);
method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(boolean value);
- method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(char value);
method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(byte value);
- method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(short value);
- method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(int value);
- method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(float value);
- method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(long value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(char value);
method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(double value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(float value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(int value);
+ method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(Object? value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(long value);
+ method @androidx.compose.runtime.ComposeCompilerApi public default boolean changed(short value);
method @androidx.compose.runtime.ComposeCompilerApi public default boolean changedInstance(Object? value);
method public void collectParameterInformation();
method @androidx.compose.runtime.ComposeCompilerApi public <T> void createNode(kotlin.jvm.functions.Function0<? extends T> factory);
@@ -226,8 +226,8 @@
}
public final class CompositionLocalKt {
- method @androidx.compose.runtime.Composable public static void CompositionLocalProvider(androidx.compose.runtime.ProvidedValue<?>![] values, kotlin.jvm.functions.Function0<kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void CompositionLocalProvider(androidx.compose.runtime.CompositionLocalContext context, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void CompositionLocalProvider(androidx.compose.runtime.ProvidedValue<?>![] values, kotlin.jvm.functions.Function0<kotlin.Unit> content);
method public static <T> androidx.compose.runtime.ProvidableCompositionLocal<T> compositionLocalOf(optional androidx.compose.runtime.SnapshotMutationPolicy<T> policy, kotlin.jvm.functions.Function0<? extends T> defaultFactory);
method public static <T> androidx.compose.runtime.ProvidableCompositionLocal<T> staticCompositionLocalOf(kotlin.jvm.functions.Function0<? extends T> defaultFactory);
}
@@ -290,16 +290,16 @@
}
public final class EffectsKt {
- method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
- method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(Object? key1, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
- method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(Object? key1, Object? key2, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(Object? key1, Object? key2, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(Object? key1, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(Object![]? keys, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
- method @Deprecated @androidx.compose.runtime.Composable public static void LaunchedEffect(kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
- method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void LaunchedEffect(Object? key1, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
- method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void LaunchedEffect(Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void DisposableEffect(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.DisposableEffectScope,? extends androidx.compose.runtime.DisposableEffectResult> effect);
method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void LaunchedEffect(Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void LaunchedEffect(Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void LaunchedEffect(Object? key1, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void LaunchedEffect(Object![]? keys, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method @Deprecated @androidx.compose.runtime.Composable public static void LaunchedEffect(kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static void SideEffect(kotlin.jvm.functions.Function0<kotlin.Unit> effect);
method @kotlin.PublishedApi internal static kotlinx.coroutines.CoroutineScope createCompositionCoroutineScope(kotlin.coroutines.CoroutineContext coroutineContext, androidx.compose.runtime.Composer composer);
method @androidx.compose.runtime.Composable public static inline kotlinx.coroutines.CoroutineScope rememberCoroutineScope(optional kotlin.jvm.functions.Function0<? extends kotlin.coroutines.CoroutineContext> getContext);
@@ -548,10 +548,10 @@
}
public final class SnapshotStateKt {
- method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, optional kotlin.coroutines.CoroutineContext context);
method @androidx.compose.runtime.Composable public static <T extends R, R> androidx.compose.runtime.State<R> collectAsState(kotlinx.coroutines.flow.Flow<? extends T>, R initial, optional kotlin.coroutines.CoroutineContext context);
- method @androidx.compose.runtime.snapshots.StateFactoryMarker public static <T> androidx.compose.runtime.State<T> derivedStateOf(kotlin.jvm.functions.Function0<? extends T> calculation);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, optional kotlin.coroutines.CoroutineContext context);
method @androidx.compose.runtime.snapshots.StateFactoryMarker public static <T> androidx.compose.runtime.State<T> derivedStateOf(androidx.compose.runtime.SnapshotMutationPolicy<T> policy, kotlin.jvm.functions.Function0<? extends T> calculation);
+ method @androidx.compose.runtime.snapshots.StateFactoryMarker public static <T> androidx.compose.runtime.State<T> derivedStateOf(kotlin.jvm.functions.Function0<? extends T> calculation);
method public static inline operator <T> T getValue(androidx.compose.runtime.State<? extends T>, Object? thisObj, kotlin.reflect.KProperty<?> property);
method @androidx.compose.runtime.snapshots.StateFactoryMarker public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf();
method @androidx.compose.runtime.snapshots.StateFactoryMarker public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf(T?... elements);
@@ -559,11 +559,11 @@
method @androidx.compose.runtime.snapshots.StateFactoryMarker public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
method @androidx.compose.runtime.snapshots.StateFactoryMarker public static <T> androidx.compose.runtime.MutableState<T> mutableStateOf(T value, optional androidx.compose.runtime.SnapshotMutationPolicy<T> policy);
method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> neverEqualPolicy();
- method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T initialValue, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
- method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T initialValue, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
- method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T initialValue, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T initialValue, Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T initialValue, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T initialValue, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T initialValue, Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T initialValue, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> referentialEqualityPolicy();
method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> rememberUpdatedState(T newValue);
method public static inline operator <T> void setValue(androidx.compose.runtime.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T value);
@@ -600,22 +600,22 @@
public final class MutableVector<T> implements java.util.RandomAccess {
ctor @kotlin.PublishedApi internal MutableVector(@kotlin.PublishedApi T![] content, int size);
- method public boolean add(T element);
method public void add(int index, T element);
- method public boolean addAll(int index, java.util.List<? extends T> elements);
- method public boolean addAll(int index, androidx.compose.runtime.collection.MutableVector<T> elements);
- method public inline boolean addAll(java.util.List<? extends T> elements);
+ method public boolean add(T element);
method public inline boolean addAll(androidx.compose.runtime.collection.MutableVector<T> elements);
- method public boolean addAll(T![] elements);
+ method public boolean addAll(int index, androidx.compose.runtime.collection.MutableVector<T> elements);
method public boolean addAll(int index, java.util.Collection<? extends T> elements);
+ method public boolean addAll(int index, java.util.List<? extends T> elements);
method public boolean addAll(java.util.Collection<? extends T> elements);
+ method public inline boolean addAll(java.util.List<? extends T> elements);
+ method public boolean addAll(T![] elements);
method public inline boolean any(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
method public java.util.List<T> asMutableList();
method public void clear();
method public operator boolean contains(T element);
- method public boolean containsAll(java.util.List<? extends T> elements);
- method public boolean containsAll(java.util.Collection<? extends T> elements);
method public boolean containsAll(androidx.compose.runtime.collection.MutableVector<T> elements);
+ method public boolean containsAll(java.util.Collection<? extends T> elements);
+ method public boolean containsAll(java.util.List<? extends T> elements);
method public boolean contentEquals(androidx.compose.runtime.collection.MutableVector<T> other);
method public void ensureCapacity(int capacity);
method public T first();
@@ -651,9 +651,9 @@
method public inline operator void minusAssign(T element);
method public inline operator void plusAssign(T element);
method public boolean remove(T element);
- method public boolean removeAll(java.util.List<? extends T> elements);
method public boolean removeAll(androidx.compose.runtime.collection.MutableVector<T> elements);
method public boolean removeAll(java.util.Collection<? extends T> elements);
+ method public boolean removeAll(java.util.List<? extends T> elements);
method public T removeAt(int index);
method public void removeRange(int start, int end);
method public boolean retainAll(java.util.Collection<? extends T> elements);
@@ -851,8 +851,8 @@
}
public final class SnapshotKt {
- method @kotlin.PublishedApi internal static <T extends androidx.compose.runtime.snapshots.StateRecord> T current(T r, androidx.compose.runtime.snapshots.Snapshot snapshot);
method @kotlin.PublishedApi internal static <T extends androidx.compose.runtime.snapshots.StateRecord> T current(T r);
+ method @kotlin.PublishedApi internal static <T extends androidx.compose.runtime.snapshots.StateRecord> T current(T r, androidx.compose.runtime.snapshots.Snapshot snapshot);
method @kotlin.PublishedApi internal static void notifyWrite(androidx.compose.runtime.snapshots.Snapshot snapshot, androidx.compose.runtime.snapshots.StateObject state);
method public static <T extends androidx.compose.runtime.snapshots.StateRecord> T readable(T, androidx.compose.runtime.snapshots.StateObject state);
method public static <T extends androidx.compose.runtime.snapshots.StateRecord> T readable(T, androidx.compose.runtime.snapshots.StateObject state, androidx.compose.runtime.snapshots.Snapshot snapshot);
@@ -872,8 +872,8 @@
@androidx.compose.runtime.Stable public final class SnapshotStateList<T> implements kotlin.jvm.internal.markers.KMutableList java.util.List<T> androidx.compose.runtime.snapshots.StateObject {
ctor public SnapshotStateList();
- method public boolean add(T element);
method public void add(int index, T element);
+ method public boolean add(T element);
method public boolean addAll(int index, java.util.Collection<? extends T> elements);
method public boolean addAll(java.util.Collection<? extends T> elements);
method public void clear();
@@ -927,8 +927,8 @@
public final class SnapshotStateObserver {
ctor public SnapshotStateObserver(kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> onChangedExecutor);
- method public void clear(Object scope);
method public void clear();
+ method public void clear(Object scope);
method public void clearIf(kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Boolean> predicate);
method @org.jetbrains.annotations.TestOnly public void notifyChanges(java.util.Set<?> changes, androidx.compose.runtime.snapshots.Snapshot snapshot);
method public <T> void observeReads(T scope, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> onValueChangedForScope, kotlin.jvm.functions.Function0<kotlin.Unit> block);
diff --git a/compose/runtime/runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/ComposeBenchmark.kt b/compose/runtime/runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/ComposeBenchmark.kt
index 56ef072..147cc7b 100644
--- a/compose/runtime/runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/ComposeBenchmark.kt
+++ b/compose/runtime/runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/ComposeBenchmark.kt
@@ -21,9 +21,9 @@
import androidx.compose.foundation.layout.padding
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
diff --git a/compose/runtime/runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/DbMonsterBenchmark.kt b/compose/runtime/runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/DbMonsterBenchmark.kt
index 5f134b7..ad91d96 100644
--- a/compose/runtime/runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/DbMonsterBenchmark.kt
+++ b/compose/runtime/runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/DbMonsterBenchmark.kt
@@ -25,12 +25,12 @@
import androidx.test.annotation.UiThreadTest
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
+import kotlin.random.Random
import kotlinx.coroutines.ExperimentalCoroutinesApi
import org.junit.FixMethodOrder
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.MethodSorters
-import kotlin.random.Random
/**
* This is an implementation of a classic web perf benchmark "dbmonster". This can provide insight into apps with
diff --git a/compose/runtime/runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/SiblingBenchmark.kt b/compose/runtime/runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/SiblingBenchmark.kt
index 391d120..da437421 100644
--- a/compose/runtime/runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/SiblingBenchmark.kt
+++ b/compose/runtime/runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/SiblingBenchmark.kt
@@ -25,11 +25,11 @@
import androidx.compose.ui.test.ExperimentalTestApi
import androidx.test.annotation.UiThreadTest
import androidx.test.filters.LargeTest
+import kotlin.random.Random
import kotlinx.coroutines.ExperimentalCoroutinesApi
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import kotlin.random.Random
/**
* Managing “lists” of components that are siblings in Compose and other declarative reactive frameworks ends up
diff --git a/compose/runtime/runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/SnapshotStateObserverBenchmark.kt b/compose/runtime/runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/SnapshotStateObserverBenchmark.kt
index 4fe328d..055b6f9 100644
--- a/compose/runtime/runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/SnapshotStateObserverBenchmark.kt
+++ b/compose/runtime/runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/SnapshotStateObserverBenchmark.kt
@@ -21,8 +21,8 @@
import android.os.Looper
import androidx.benchmark.junit4.measureRepeated
import androidx.compose.runtime.MutableState
-import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.derivedStateOf
+import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.snapshots.Snapshot
import androidx.compose.runtime.snapshots.SnapshotStateObserver
import androidx.test.ext.junit.runners.AndroidJUnit4
diff --git a/compose/runtime/runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/deeptree/DeepTree.kt b/compose/runtime/runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/deeptree/DeepTree.kt
index 45e8e80..c481a56 100644
--- a/compose/runtime/runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/deeptree/DeepTree.kt
+++ b/compose/runtime/runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/deeptree/DeepTree.kt
@@ -16,8 +16,8 @@
package androidx.compose.runtime.benchmark.deeptree
-import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxHeight
diff --git a/compose/runtime/runtime/integration-tests/src/androidAndroidTest/kotlin/androidx/compose/runtime/ComposeIntoTests.kt b/compose/runtime/runtime/integration-tests/src/androidAndroidTest/kotlin/androidx/compose/runtime/ComposeIntoTests.kt
index e22971c..79df8bd 100644
--- a/compose/runtime/runtime/integration-tests/src/androidAndroidTest/kotlin/androidx/compose/runtime/ComposeIntoTests.kt
+++ b/compose/runtime/runtime/integration-tests/src/androidAndroidTest/kotlin/androidx/compose/runtime/ComposeIntoTests.kt
@@ -21,10 +21,6 @@
import androidx.core.os.HandlerCompat
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
-import org.junit.Assert.assertEquals
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
import java.lang.ref.PhantomReference
import java.lang.ref.ReferenceQueue
import java.util.concurrent.CountDownLatch
@@ -32,6 +28,10 @@
import kotlin.test.assertNotNull
import kotlin.test.assertNull
import kotlin.test.assertTrue
+import org.junit.Assert.assertEquals
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
class ComposeIntoTests : BaseComposeTest() {
diff --git a/compose/runtime/runtime/integration-tests/src/androidAndroidTest/kotlin/androidx/compose/runtime/EmittableComposer.kt b/compose/runtime/runtime/integration-tests/src/androidAndroidTest/kotlin/androidx/compose/runtime/EmittableComposer.kt
index f34d918..1ab873f 100644
--- a/compose/runtime/runtime/integration-tests/src/androidAndroidTest/kotlin/androidx/compose/runtime/EmittableComposer.kt
+++ b/compose/runtime/runtime/integration-tests/src/androidAndroidTest/kotlin/androidx/compose/runtime/EmittableComposer.kt
@@ -17,8 +17,8 @@
import android.view.View
import android.widget.Button
-import android.widget.TextView
import android.widget.LinearLayout
+import android.widget.TextView
import androidx.compose.ui.viewinterop.AndroidView
@Suppress("UNUSED_PARAMETER")
diff --git a/compose/runtime/runtime/integration-tests/src/androidAndroidTest/kotlin/androidx/compose/runtime/FlowAdapterTest.kt b/compose/runtime/runtime/integration-tests/src/androidAndroidTest/kotlin/androidx/compose/runtime/FlowAdapterTest.kt
index fdb2a56..7d7a083 100644
--- a/compose/runtime/runtime/integration-tests/src/androidAndroidTest/kotlin/androidx/compose/runtime/FlowAdapterTest.kt
+++ b/compose/runtime/runtime/integration-tests/src/androidAndroidTest/kotlin/androidx/compose/runtime/FlowAdapterTest.kt
@@ -20,6 +20,8 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import com.google.common.truth.Truth.assertThat
+import kotlin.coroutines.CoroutineContext
+import kotlin.test.assertNotNull
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.MutableStateFlow
@@ -27,8 +29,6 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.coroutines.CoroutineContext
-import kotlin.test.assertNotNull
@LargeTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/runtime/runtime/integration-tests/src/androidAndroidTest/kotlin/androidx/compose/runtime/ProduceStateTests.kt b/compose/runtime/runtime/integration-tests/src/androidAndroidTest/kotlin/androidx/compose/runtime/ProduceStateTests.kt
index a550adb..ad0091f 100644
--- a/compose/runtime/runtime/integration-tests/src/androidAndroidTest/kotlin/androidx/compose/runtime/ProduceStateTests.kt
+++ b/compose/runtime/runtime/integration-tests/src/androidAndroidTest/kotlin/androidx/compose/runtime/ProduceStateTests.kt
@@ -16,14 +16,14 @@
package androidx.compose.runtime
-import androidx.test.filters.MediumTest
import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
+import kotlin.test.assertEquals
import kotlinx.coroutines.channels.Channel
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import kotlin.test.assertEquals
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/runtime/runtime/integration-tests/src/androidAndroidTest/kotlin/androidx/compose/runtime/SideEffectTests.kt b/compose/runtime/runtime/integration-tests/src/androidAndroidTest/kotlin/androidx/compose/runtime/SideEffectTests.kt
index f156f72..da25ff8 100644
--- a/compose/runtime/runtime/integration-tests/src/androidAndroidTest/kotlin/androidx/compose/runtime/SideEffectTests.kt
+++ b/compose/runtime/runtime/integration-tests/src/androidAndroidTest/kotlin/androidx/compose/runtime/SideEffectTests.kt
@@ -19,18 +19,18 @@
import android.view.Choreographer
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
-import kotlinx.coroutines.channels.Channel
-import kotlinx.coroutines.channels.ReceiveChannel
-import kotlinx.coroutines.channels.SendChannel
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
import kotlin.test.assertEquals
import kotlin.test.assertNotEquals
import kotlin.test.assertNotNull
import kotlin.test.assertSame
import kotlin.test.assertTrue
import kotlin.test.fail
+import kotlinx.coroutines.channels.Channel
+import kotlinx.coroutines.channels.ReceiveChannel
+import kotlinx.coroutines.channels.SendChannel
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
@Suppress("UNUSED_VARIABLE")
@MediumTest
diff --git a/compose/runtime/runtime/integration-tests/src/androidAndroidTest/kotlin/androidx/compose/runtime/SuspendingEffectsTests.kt b/compose/runtime/runtime/integration-tests/src/androidAndroidTest/kotlin/androidx/compose/runtime/SuspendingEffectsTests.kt
index 09cdb86..243e11a 100644
--- a/compose/runtime/runtime/integration-tests/src/androidAndroidTest/kotlin/androidx/compose/runtime/SuspendingEffectsTests.kt
+++ b/compose/runtime/runtime/integration-tests/src/androidAndroidTest/kotlin/androidx/compose/runtime/SuspendingEffectsTests.kt
@@ -19,6 +19,12 @@
import android.view.Choreographer
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
+import kotlin.test.assertEquals
+import kotlin.test.assertFalse
+import kotlin.test.assertNotEquals
+import kotlin.test.assertNotNull
+import kotlin.test.assertSame
+import kotlin.test.assertTrue
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.isActive
@@ -26,12 +32,6 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.test.assertEquals
-import kotlin.test.assertFalse
-import kotlin.test.assertNotEquals
-import kotlin.test.assertNotNull
-import kotlin.test.assertSame
-import kotlin.test.assertTrue
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/runtime/runtime/samples/build.gradle b/compose/runtime/runtime/samples/build.gradle
index 376b851..a8c279f 100644
--- a/compose/runtime/runtime/samples/build.gradle
+++ b/compose/runtime/runtime/samples/build.gradle
@@ -36,7 +36,7 @@
}
androidx {
- name = "AndroidX Compose Runtime Samples"
+ name = "Compose Runtime Samples"
type = LibraryType.SAMPLES
inceptionYear = "2019"
description = "Contains the sample code for the Compose runtime"
diff --git a/compose/runtime/runtime/samples/src/main/java/androidx/compose/runtime/samples/CustomTreeCompositionSamples.kt b/compose/runtime/runtime/samples/src/main/java/androidx/compose/runtime/samples/CustomTreeCompositionSamples.kt
index 688760c..28d0089 100644
--- a/compose/runtime/runtime/samples/src/main/java/androidx/compose/runtime/samples/CustomTreeCompositionSamples.kt
+++ b/compose/runtime/runtime/samples/src/main/java/androidx/compose/runtime/samples/CustomTreeCompositionSamples.kt
@@ -19,9 +19,9 @@
import androidx.annotation.Sampled
import androidx.compose.runtime.AbstractApplier
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.ComposeNode
import androidx.compose.runtime.Composition
import androidx.compose.runtime.CompositionContext
-import androidx.compose.runtime.ComposeNode
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
diff --git a/compose/runtime/runtime/samples/src/main/java/androidx/compose/runtime/samples/ModelSamples.kt b/compose/runtime/runtime/samples/src/main/java/androidx/compose/runtime/samples/ModelSamples.kt
index d1c516f..7080f39 100644
--- a/compose/runtime/runtime/samples/src/main/java/androidx/compose/runtime/samples/ModelSamples.kt
+++ b/compose/runtime/runtime/samples/src/main/java/androidx/compose/runtime/samples/ModelSamples.kt
@@ -18,9 +18,9 @@
import androidx.annotation.Sampled
import androidx.compose.foundation.ExperimentalFoundationApi
+import androidx.compose.foundation.text.BasicTextField
import androidx.compose.material.Button
import androidx.compose.material.Text
-import androidx.compose.foundation.text.BasicTextField
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
diff --git a/compose/runtime/runtime/samples/src/main/java/androidx/compose/runtime/samples/MutableStateListSamples.kt b/compose/runtime/runtime/samples/src/main/java/androidx/compose/runtime/samples/MutableStateListSamples.kt
index db5044c..24f0b6f 100644
--- a/compose/runtime/runtime/samples/src/main/java/androidx/compose/runtime/samples/MutableStateListSamples.kt
+++ b/compose/runtime/runtime/samples/src/main/java/androidx/compose/runtime/samples/MutableStateListSamples.kt
@@ -20,9 +20,9 @@
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.text.BasicTextField
import androidx.compose.material.Button
import androidx.compose.material.Text
-import androidx.compose.foundation.text.BasicTextField
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateListOf
diff --git a/compose/runtime/runtime/samples/src/main/java/androidx/compose/runtime/samples/MutableStateMapSample.kt b/compose/runtime/runtime/samples/src/main/java/androidx/compose/runtime/samples/MutableStateMapSample.kt
index 9d8b1ec3..8a6f4df 100644
--- a/compose/runtime/runtime/samples/src/main/java/androidx/compose/runtime/samples/MutableStateMapSample.kt
+++ b/compose/runtime/runtime/samples/src/main/java/androidx/compose/runtime/samples/MutableStateMapSample.kt
@@ -20,9 +20,9 @@
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.text.BasicTextField
import androidx.compose.material.Button
import androidx.compose.material.Text
-import androidx.compose.foundation.text.BasicTextField
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateMapOf
diff --git a/compose/runtime/runtime/samples/src/main/java/androidx/compose/runtime/samples/SnapshotSamples.kt b/compose/runtime/runtime/samples/src/main/java/androidx/compose/runtime/samples/SnapshotSamples.kt
index c6b6ac0..937674e 100644
--- a/compose/runtime/runtime/samples/src/main/java/androidx/compose/runtime/samples/SnapshotSamples.kt
+++ b/compose/runtime/runtime/samples/src/main/java/androidx/compose/runtime/samples/SnapshotSamples.kt
@@ -21,8 +21,8 @@
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
-import androidx.compose.runtime.snapshots.Snapshot
import androidx.compose.runtime.snapshotFlow
+import androidx.compose.runtime.snapshots.Snapshot
import androidx.compose.runtime.snapshots.asContextElement
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.collect
diff --git a/compose/runtime/runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/snapshots/ParcelableMutableStateTests.kt b/compose/runtime/runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/snapshots/ParcelableMutableStateTests.kt
index dbb8932..42e45c5 100644
--- a/compose/runtime/runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/snapshots/ParcelableMutableStateTests.kt
+++ b/compose/runtime/runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/snapshots/ParcelableMutableStateTests.kt
@@ -23,10 +23,10 @@
import androidx.compose.runtime.neverEqualPolicy
import androidx.compose.runtime.referentialEqualityPolicy
import androidx.compose.runtime.structuralEqualityPolicy
+import kotlin.test.assertEquals
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import kotlin.test.assertEquals
@RunWith(Parameterized::class)
class ParcelableMutableStateTests(
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/BroadcastFrameClock.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/BroadcastFrameClock.kt
index cec11b2..1718d92 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/BroadcastFrameClock.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/BroadcastFrameClock.kt
@@ -17,10 +17,10 @@
package androidx.compose.runtime
import androidx.compose.runtime.snapshots.fastForEach
-import kotlinx.coroutines.CancellationException
-import kotlinx.coroutines.suspendCancellableCoroutine
import kotlin.coroutines.Continuation
import kotlin.coroutines.resumeWithException
+import kotlinx.coroutines.CancellationException
+import kotlinx.coroutines.suspendCancellableCoroutine
/**
* A simple frame clock.
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/ComposeVersion.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/ComposeVersion.kt
index 8f2683a..2164a56 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/ComposeVersion.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/ComposeVersion.kt
@@ -28,5 +28,5 @@
* IMPORTANT: Whenever updating this value, please make sure to also update `versionTable` and
* `minimumRuntimeVersionInt` in `VersionChecker.kt` of the compiler.
*/
- const val version: Int = 10001
+ const val version: Int = 10101
}
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Effects.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Effects.kt
index 9efcc11..cfb0359 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Effects.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Effects.kt
@@ -17,12 +17,12 @@
package androidx.compose.runtime
import kotlin.coroutines.CoroutineContext
+import kotlin.coroutines.EmptyCoroutineContext
+import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.cancel
import kotlinx.coroutines.launch
-import kotlin.coroutines.EmptyCoroutineContext
-import kotlinx.coroutines.CancellationException
/**
* Schedule [effect] to run when the current composition completes successfully and applies
@@ -389,7 +389,11 @@
private class LeftCompositionCancellationException : CancellationException(
"The coroutine scope left the composition"
) {
- override fun fillInStackTrace(): Throwable = this
+ override fun fillInStackTrace(): Throwable {
+ // Avoid null.clone() on Android <= 6.0 when accessing stackTrace
+ stackTrace = emptyArray()
+ return this
+ }
}
/**
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Latch.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Latch.kt
index 6be6d1a..8bb366f 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Latch.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Latch.kt
@@ -16,9 +16,9 @@
package androidx.compose.runtime
-import kotlinx.coroutines.suspendCancellableCoroutine
import kotlin.coroutines.Continuation
import kotlin.coroutines.resume
+import kotlinx.coroutines.suspendCancellableCoroutine
/**
* A boolean open or closed latch for awaiting a single repeating event, like pending
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/MonotonicFrameClock.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/MonotonicFrameClock.kt
index 9fa259d..c6227a5 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/MonotonicFrameClock.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/MonotonicFrameClock.kt
@@ -16,9 +16,9 @@
package androidx.compose.runtime
+import androidx.compose.runtime.internal.JvmDefaultWithCompatibility
import kotlin.coroutines.CoroutineContext
import kotlin.coroutines.coroutineContext
-import androidx.compose.runtime.internal.JvmDefaultWithCompatibility
/**
* Provides a time source for display frames and the ability to perform an action on the next frame.
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/Snapshot.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/Snapshot.kt
index d5d312b..1df196c 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/Snapshot.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/Snapshot.kt
@@ -715,17 +715,20 @@
this,
openSnapshots.clear(currentGlobalSnapshot.get().id)
) else null
- val (observers, globalModified) = sync {
+
+ var observers = emptyList<(Set<Any>, Snapshot) -> Unit>()
+ var globalModified: IdentityArraySet<StateObject>? = null
+ sync {
validateOpen(this)
if (modified == null || modified.size == 0) {
closeLocked()
val previousGlobalSnapshot = currentGlobalSnapshot.get()
takeNewGlobalSnapshot(previousGlobalSnapshot, emptyLambda)
- val globalModified = previousGlobalSnapshot.modified
- if (!globalModified.isNullOrEmpty())
- applyObservers.toMutableList() to globalModified
- else
- emptyList<(Set<Any>, Snapshot) -> Unit>() to null
+ val previousModified = previousGlobalSnapshot.modified
+ if (!previousModified.isNullOrEmpty()) {
+ observers = applyObservers.toMutableList()
+ globalModified = previousModified
+ }
} else {
val previousGlobalSnapshot = currentGlobalSnapshot.get()
val result = innerApplyLocked(
@@ -739,11 +742,12 @@
// Take a new global snapshot that includes this one.
takeNewGlobalSnapshot(previousGlobalSnapshot, emptyLambda)
- val globalModified = previousGlobalSnapshot.modified
+ val previousModified = previousGlobalSnapshot.modified
this.modified = null
previousGlobalSnapshot.modified = null
- applyObservers.toMutableList() to globalModified
+ observers = applyObservers.toMutableList()
+ globalModified = previousModified
}
}
@@ -752,8 +756,9 @@
// Notify any apply observers that changes applied were seen
if (!globalModified.isNullOrEmpty()) {
+ val nonNullGlobalModified = globalModified!!
observers.fastForEach {
- it(globalModified, this)
+ it(nonNullGlobalModified, this)
}
}
diff --git a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/BroadcastFrameClockTest.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/BroadcastFrameClockTest.kt
index 21e14a5..a0f493d 100644
--- a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/BroadcastFrameClockTest.kt
+++ b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/BroadcastFrameClockTest.kt
@@ -16,15 +16,15 @@
package androidx.compose.runtime.dispatch
+import kotlin.test.Test
+import kotlin.test.assertEquals
+import kotlin.test.assertTrue
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.Deferred
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.async
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.runTest
-import kotlin.test.Test
-import kotlin.test.assertEquals
-import kotlin.test.assertTrue
@ExperimentalCoroutinesApi
class BroadcastFrameClockTest {
diff --git a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/CompositionLocalTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/CompositionLocalTests.kt
index 468fd71..2dc9e36 100644
--- a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/CompositionLocalTests.kt
+++ b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/CompositionLocalTests.kt
@@ -26,12 +26,12 @@
import androidx.compose.runtime.mock.expectNoChanges
import androidx.compose.runtime.mock.revalidate
import androidx.compose.runtime.mock.validate
-import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.launch
-import kotlin.test.assertEquals
import kotlin.test.Test
+import kotlin.test.assertEquals
import kotlin.test.assertFalse
import kotlin.test.assertTrue
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.launch
// Create a normal (dynamic) CompositionLocal with a string value
val LocalSomeTextComposition = compositionLocalOf { "Default" }
diff --git a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/GroupSizeValidationTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/GroupSizeValidationTests.kt
index 04c5b531..edfbac3 100644
--- a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/GroupSizeValidationTests.kt
+++ b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/GroupSizeValidationTests.kt
@@ -19,11 +19,10 @@
package androidx.compose.runtime
import androidx.compose.runtime.mock.CompositionTestScope
+import androidx.compose.runtime.mock.View
import androidx.compose.runtime.mock.compositionTest
import androidx.compose.runtime.tooling.CompositionData
import androidx.compose.runtime.tooling.CompositionGroup
-import androidx.compose.runtime.mock.View
-
import kotlin.test.Test
class GroupSizeValidationTests {
diff --git a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/LatchTest.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/LatchTest.kt
index 3367da5..041d795 100644
--- a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/LatchTest.kt
+++ b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/LatchTest.kt
@@ -16,13 +16,13 @@
package androidx.compose.runtime
+import kotlin.test.Test
+import kotlin.test.assertTrue
import kotlinx.coroutines.CoroutineStart
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.launch
import kotlinx.coroutines.test.runTest
import kotlinx.coroutines.withTimeout
-import kotlin.test.Test
-import kotlin.test.assertTrue
@ExperimentalCoroutinesApi
class LatchTest {
diff --git a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/SnapshotFlowTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/SnapshotFlowTests.kt
index 8e7e8fc..13b1ba4 100644
--- a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/SnapshotFlowTests.kt
+++ b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/SnapshotFlowTests.kt
@@ -17,6 +17,8 @@
package androidx.compose.runtime
import androidx.compose.runtime.snapshots.Snapshot
+import kotlin.test.Test
+import kotlin.test.assertEquals
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.launchIn
@@ -24,8 +26,6 @@
import kotlinx.coroutines.plus
import kotlinx.coroutines.test.runTest
import kotlinx.coroutines.yield
-import kotlin.test.Test
-import kotlin.test.assertEquals
@OptIn(ExperimentalCoroutinesApi::class)
@Suppress("RemoveExplicitTypeArguments")
diff --git a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/CompositionTest.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/CompositionTest.kt
index 15e98c8..4a3d14b 100644
--- a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/CompositionTest.kt
+++ b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/CompositionTest.kt
@@ -22,14 +22,14 @@
import androidx.compose.runtime.InternalComposeApi
import androidx.compose.runtime.Recomposer
import androidx.compose.runtime.snapshots.Snapshot
+import kotlin.test.assertFalse
+import kotlin.test.assertTrue
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.launch
+import kotlinx.coroutines.test.TestCoroutineScheduler
import kotlinx.coroutines.test.runTest
import kotlinx.coroutines.withContext
-import kotlin.test.assertFalse
-import kotlin.test.assertTrue
-import kotlinx.coroutines.test.TestCoroutineScheduler
@OptIn(InternalComposeApi::class, ExperimentalCoroutinesApi::class)
fun compositionTest(block: suspend CompositionTestScope.() -> Unit) = runTest {
diff --git a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/Views.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/Views.kt
index a5617c9..8babf4b 100644
--- a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/Views.kt
+++ b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/mock/Views.kt
@@ -18,9 +18,9 @@
import androidx.compose.runtime.Composable
import androidx.compose.runtime.ComposeNode
-import androidx.compose.runtime.ReusableComposeNode
-import androidx.compose.runtime.NonRestartableComposable
import androidx.compose.runtime.ComposeNodeLifecycleCallback
+import androidx.compose.runtime.NonRestartableComposable
+import androidx.compose.runtime.ReusableComposeNode
import androidx.compose.runtime.getValue
import androidx.compose.runtime.key
import androidx.compose.runtime.rememberUpdatedState
diff --git a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/DerivedSnapshotStateTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/DerivedSnapshotStateTests.kt
index 3457ab2..0100bb8 100644
--- a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/DerivedSnapshotStateTests.kt
+++ b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/DerivedSnapshotStateTests.kt
@@ -24,9 +24,9 @@
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.runtime.snapshots.Snapshot.Companion.openSnapshotCount
-import kotlin.test.Ignore
import kotlin.test.AfterTest
import kotlin.test.BeforeTest
+import kotlin.test.Ignore
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertNull
diff --git a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotContextElementTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotContextElementTests.kt
index 762d20c..58cdedd 100644
--- a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotContextElementTests.kt
+++ b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotContextElementTests.kt
@@ -19,12 +19,12 @@
import androidx.compose.runtime.ExperimentalComposeApi
import kotlin.test.Test
import kotlin.test.assertSame
+import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
-import kotlinx.coroutines.withContext
-import kotlinx.coroutines.test.runTest
import kotlinx.coroutines.test.UnconfinedTestDispatcher
-import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.test.runTest
+import kotlinx.coroutines.withContext
@OptIn(ExperimentalComposeApi::class, ExperimentalCoroutinesApi::class)
class SnapshotContextElementTests {
diff --git a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateListTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateListTests.kt
index 886b51c..d788ffe 100644
--- a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateListTests.kt
+++ b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateListTests.kt
@@ -17,18 +17,18 @@
package androidx.compose.runtime.snapshots
import androidx.compose.runtime.mutableStateListOf
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.coroutineScope
-import kotlinx.coroutines.launch
-import kotlinx.coroutines.test.runTest
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertFailsWith
import kotlin.test.assertFalse
import kotlin.test.assertTrue
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.channels.consumeEach
+import kotlinx.coroutines.coroutineScope
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.test.runTest
import kotlinx.test.IgnoreJsTarget
class SnapshotStateListTests {
diff --git a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateMapTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateMapTests.kt
index be1db36..dab7a74 100644
--- a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateMapTests.kt
+++ b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateMapTests.kt
@@ -19,18 +19,18 @@
package androidx.compose.runtime.snapshots
import androidx.compose.runtime.mutableStateMapOf
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.coroutineScope
-import kotlinx.coroutines.launch
-import kotlinx.coroutines.test.runTest
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertFailsWith
import kotlin.test.assertFalse
import kotlin.test.assertTrue
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.channels.consumeEach
+import kotlinx.coroutines.coroutineScope
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.test.runTest
import kotlinx.test.IgnoreJsTarget
class SnapshotStateMapTests {
diff --git a/compose/runtime/runtime/src/nonEmulatorJvmTest/kotlin/androidx/compose/runtime/JvmCompositionTests.kt b/compose/runtime/runtime/src/nonEmulatorJvmTest/kotlin/androidx/compose/runtime/JvmCompositionTests.kt
index 6e5c2d70..d6b657f 100644
--- a/compose/runtime/runtime/src/nonEmulatorJvmTest/kotlin/androidx/compose/runtime/JvmCompositionTests.kt
+++ b/compose/runtime/runtime/src/nonEmulatorJvmTest/kotlin/androidx/compose/runtime/JvmCompositionTests.kt
@@ -18,22 +18,22 @@
package androidx.compose.runtime
import androidx.compose.runtime.mock.EmptyApplier
-import androidx.compose.runtime.mock.compositionTest
import androidx.compose.runtime.mock.Text
import androidx.compose.runtime.mock.View
import androidx.compose.runtime.mock.ViewApplier
+import androidx.compose.runtime.mock.compositionTest
import androidx.compose.runtime.mock.expectChanges
import androidx.compose.runtime.snapshots.Snapshot
import androidx.compose.runtime.snapshots.SnapshotStateObserver
-import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.test.UnconfinedTestDispatcher
-import kotlinx.coroutines.test.runTest
import kotlin.concurrent.thread
import kotlin.test.AfterTest
import kotlin.test.BeforeTest
-import kotlinx.coroutines.delay
import kotlin.test.Test
import kotlin.test.assertEquals
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.test.UnconfinedTestDispatcher
+import kotlinx.coroutines.test.runTest
@Stable
@OptIn(InternalComposeApi::class)
diff --git a/compose/runtime/runtime/src/nonEmulatorJvmTest/kotlin/androidx/compose/runtime/MonotonicFrameClockTest.kt b/compose/runtime/runtime/src/nonEmulatorJvmTest/kotlin/androidx/compose/runtime/MonotonicFrameClockTest.kt
index b555bea..a9b8eba 100644
--- a/compose/runtime/runtime/src/nonEmulatorJvmTest/kotlin/androidx/compose/runtime/MonotonicFrameClockTest.kt
+++ b/compose/runtime/runtime/src/nonEmulatorJvmTest/kotlin/androidx/compose/runtime/MonotonicFrameClockTest.kt
@@ -16,11 +16,11 @@
package androidx.compose.runtime
-import kotlinx.coroutines.runBlocking
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertFailsWith
import kotlin.test.assertSame
+import kotlinx.coroutines.runBlocking
class MonotonicFrameClockTest {
@ExperimentalComposeApi
diff --git a/compose/ui/ui-geometry/api/current.txt b/compose/ui/ui-geometry/api/current.txt
index 50b3067..5aabfcd 100644
--- a/compose/ui/ui-geometry/api/current.txt
+++ b/compose/ui/ui-geometry/api/current.txt
@@ -129,8 +129,8 @@
method public boolean isFinite();
method public boolean isInfinite();
method public boolean overlaps(androidx.compose.ui.geometry.Rect other);
- method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect translate(long offset);
method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect translate(float translateX, float translateY);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect translate(long offset);
property public final float bottom;
property public final long bottomCenter;
property public final long bottomLeft;
@@ -161,9 +161,9 @@
}
public final class RectKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect Rect(long center, float radius);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect Rect(long offset, long size);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect Rect(long topLeft, long bottomRight);
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect Rect(long center, float radius);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect lerp(androidx.compose.ui.geometry.Rect start, androidx.compose.ui.geometry.Rect stop, float fraction);
}
@@ -210,11 +210,11 @@
}
public final class RoundRectKt {
- method public static androidx.compose.ui.geometry.RoundRect RoundRect(float left, float top, float right, float bottom, float radiusX, float radiusY);
- method public static androidx.compose.ui.geometry.RoundRect RoundRect(float left, float top, float right, float bottom, long cornerRadius);
method public static androidx.compose.ui.geometry.RoundRect RoundRect(androidx.compose.ui.geometry.Rect rect, float radiusX, float radiusY);
method public static androidx.compose.ui.geometry.RoundRect RoundRect(androidx.compose.ui.geometry.Rect rect, long cornerRadius);
method public static androidx.compose.ui.geometry.RoundRect RoundRect(androidx.compose.ui.geometry.Rect rect, optional long topLeft, optional long topRight, optional long bottomRight, optional long bottomLeft);
+ method public static androidx.compose.ui.geometry.RoundRect RoundRect(float left, float top, float right, float bottom, float radiusX, float radiusY);
+ method public static androidx.compose.ui.geometry.RoundRect RoundRect(float left, float top, float right, float bottom, long cornerRadius);
method public static androidx.compose.ui.geometry.Rect getBoundingRect(androidx.compose.ui.geometry.RoundRect);
method public static long getCenter(androidx.compose.ui.geometry.RoundRect);
method public static float getMaxDimension(androidx.compose.ui.geometry.RoundRect);
@@ -262,9 +262,9 @@
method public static inline boolean isUnspecified(long);
method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.geometry.Size> block);
- method @androidx.compose.runtime.Stable public static inline operator long times(int, long size);
method @androidx.compose.runtime.Stable public static inline operator long times(double, long size);
method @androidx.compose.runtime.Stable public static inline operator long times(float, long size);
+ method @androidx.compose.runtime.Stable public static inline operator long times(int, long size);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect toRect(long);
}
diff --git a/compose/ui/ui-geometry/api/public_plus_experimental_current.txt b/compose/ui/ui-geometry/api/public_plus_experimental_current.txt
index 50b3067..5aabfcd 100644
--- a/compose/ui/ui-geometry/api/public_plus_experimental_current.txt
+++ b/compose/ui/ui-geometry/api/public_plus_experimental_current.txt
@@ -129,8 +129,8 @@
method public boolean isFinite();
method public boolean isInfinite();
method public boolean overlaps(androidx.compose.ui.geometry.Rect other);
- method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect translate(long offset);
method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect translate(float translateX, float translateY);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect translate(long offset);
property public final float bottom;
property public final long bottomCenter;
property public final long bottomLeft;
@@ -161,9 +161,9 @@
}
public final class RectKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect Rect(long center, float radius);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect Rect(long offset, long size);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect Rect(long topLeft, long bottomRight);
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect Rect(long center, float radius);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect lerp(androidx.compose.ui.geometry.Rect start, androidx.compose.ui.geometry.Rect stop, float fraction);
}
@@ -210,11 +210,11 @@
}
public final class RoundRectKt {
- method public static androidx.compose.ui.geometry.RoundRect RoundRect(float left, float top, float right, float bottom, float radiusX, float radiusY);
- method public static androidx.compose.ui.geometry.RoundRect RoundRect(float left, float top, float right, float bottom, long cornerRadius);
method public static androidx.compose.ui.geometry.RoundRect RoundRect(androidx.compose.ui.geometry.Rect rect, float radiusX, float radiusY);
method public static androidx.compose.ui.geometry.RoundRect RoundRect(androidx.compose.ui.geometry.Rect rect, long cornerRadius);
method public static androidx.compose.ui.geometry.RoundRect RoundRect(androidx.compose.ui.geometry.Rect rect, optional long topLeft, optional long topRight, optional long bottomRight, optional long bottomLeft);
+ method public static androidx.compose.ui.geometry.RoundRect RoundRect(float left, float top, float right, float bottom, float radiusX, float radiusY);
+ method public static androidx.compose.ui.geometry.RoundRect RoundRect(float left, float top, float right, float bottom, long cornerRadius);
method public static androidx.compose.ui.geometry.Rect getBoundingRect(androidx.compose.ui.geometry.RoundRect);
method public static long getCenter(androidx.compose.ui.geometry.RoundRect);
method public static float getMaxDimension(androidx.compose.ui.geometry.RoundRect);
@@ -262,9 +262,9 @@
method public static inline boolean isUnspecified(long);
method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.geometry.Size> block);
- method @androidx.compose.runtime.Stable public static inline operator long times(int, long size);
method @androidx.compose.runtime.Stable public static inline operator long times(double, long size);
method @androidx.compose.runtime.Stable public static inline operator long times(float, long size);
+ method @androidx.compose.runtime.Stable public static inline operator long times(int, long size);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect toRect(long);
}
diff --git a/compose/ui/ui-geometry/api/restricted_current.txt b/compose/ui/ui-geometry/api/restricted_current.txt
index 50b3067..5aabfcd 100644
--- a/compose/ui/ui-geometry/api/restricted_current.txt
+++ b/compose/ui/ui-geometry/api/restricted_current.txt
@@ -129,8 +129,8 @@
method public boolean isFinite();
method public boolean isInfinite();
method public boolean overlaps(androidx.compose.ui.geometry.Rect other);
- method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect translate(long offset);
method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect translate(float translateX, float translateY);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect translate(long offset);
property public final float bottom;
property public final long bottomCenter;
property public final long bottomLeft;
@@ -161,9 +161,9 @@
}
public final class RectKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect Rect(long center, float radius);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect Rect(long offset, long size);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect Rect(long topLeft, long bottomRight);
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect Rect(long center, float radius);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect lerp(androidx.compose.ui.geometry.Rect start, androidx.compose.ui.geometry.Rect stop, float fraction);
}
@@ -210,11 +210,11 @@
}
public final class RoundRectKt {
- method public static androidx.compose.ui.geometry.RoundRect RoundRect(float left, float top, float right, float bottom, float radiusX, float radiusY);
- method public static androidx.compose.ui.geometry.RoundRect RoundRect(float left, float top, float right, float bottom, long cornerRadius);
method public static androidx.compose.ui.geometry.RoundRect RoundRect(androidx.compose.ui.geometry.Rect rect, float radiusX, float radiusY);
method public static androidx.compose.ui.geometry.RoundRect RoundRect(androidx.compose.ui.geometry.Rect rect, long cornerRadius);
method public static androidx.compose.ui.geometry.RoundRect RoundRect(androidx.compose.ui.geometry.Rect rect, optional long topLeft, optional long topRight, optional long bottomRight, optional long bottomLeft);
+ method public static androidx.compose.ui.geometry.RoundRect RoundRect(float left, float top, float right, float bottom, float radiusX, float radiusY);
+ method public static androidx.compose.ui.geometry.RoundRect RoundRect(float left, float top, float right, float bottom, long cornerRadius);
method public static androidx.compose.ui.geometry.Rect getBoundingRect(androidx.compose.ui.geometry.RoundRect);
method public static long getCenter(androidx.compose.ui.geometry.RoundRect);
method public static float getMaxDimension(androidx.compose.ui.geometry.RoundRect);
@@ -262,9 +262,9 @@
method public static inline boolean isUnspecified(long);
method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.geometry.Size> block);
- method @androidx.compose.runtime.Stable public static inline operator long times(int, long size);
method @androidx.compose.runtime.Stable public static inline operator long times(double, long size);
method @androidx.compose.runtime.Stable public static inline operator long times(float, long size);
+ method @androidx.compose.runtime.Stable public static inline operator long times(int, long size);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect toRect(long);
}
diff --git a/compose/ui/ui-geometry/src/test/kotlin/androidx/compose/ui/geometry/RectTest.kt b/compose/ui/ui-geometry/src/test/kotlin/androidx/compose/ui/geometry/RectTest.kt
index 927b408..a911875 100644
--- a/compose/ui/ui-geometry/src/test/kotlin/androidx/compose/ui/geometry/RectTest.kt
+++ b/compose/ui/ui-geometry/src/test/kotlin/androidx/compose/ui/geometry/RectTest.kt
@@ -16,12 +16,12 @@
package androidx.compose.ui.geometry
+import kotlin.test.assertTrue
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import kotlin.test.assertTrue
@RunWith(JUnit4::class)
class RectTest {
diff --git a/compose/ui/ui-graphics-lint/src/main/java/androidx/compose/ui/graphics/lint/ColorDetector.kt b/compose/ui/ui-graphics-lint/src/main/java/androidx/compose/ui/graphics/lint/ColorDetector.kt
index 16a8216..8e5e6e3 100644
--- a/compose/ui/ui-graphics-lint/src/main/java/androidx/compose/ui/graphics/lint/ColorDetector.kt
+++ b/compose/ui/ui-graphics-lint/src/main/java/androidx/compose/ui/graphics/lint/ColorDetector.kt
@@ -30,9 +30,9 @@
import com.android.tools.lint.detector.api.Severity
import com.android.tools.lint.detector.api.SourceCodeScanner
import com.intellij.psi.PsiMethod
+import java.util.EnumSet
import org.jetbrains.uast.UCallExpression
import org.jetbrains.uast.kotlin.KotlinULiteralExpression
-import java.util.EnumSet
/**
* [Detector] that checks hex Color definitions to ensure that they provide values for all four
diff --git a/compose/ui/ui-graphics/api/current.txt b/compose/ui/ui-graphics/api/current.txt
index 55136ac..ed2ed75 100644
--- a/compose/ui/ui-graphics/api/current.txt
+++ b/compose/ui/ui-graphics/api/current.txt
@@ -26,13 +26,13 @@
}
public final class AndroidMatrixConversions_androidKt {
- method public static void setFrom(float[], android.graphics.Matrix matrix);
method public static void setFrom(android.graphics.Matrix, float[] matrix);
+ method public static void setFrom(float[], android.graphics.Matrix matrix);
}
public final class AndroidPaint implements androidx.compose.ui.graphics.Paint {
- ctor public AndroidPaint(android.graphics.Paint internalPaint);
ctor public AndroidPaint();
+ ctor public AndroidPaint(android.graphics.Paint internalPaint);
method public android.graphics.Paint asFrameworkPaint();
method public float getAlpha();
method public int getBlendMode();
@@ -231,12 +231,12 @@
public static final class Brush.Companion {
method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush horizontalGradient(java.util.List<androidx.compose.ui.graphics.Color> colors, optional float startX, optional float endX, optional int tileMode);
method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush horizontalGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional float startX, optional float endX, optional int tileMode);
- method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush linearGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional long start, optional long end, optional int tileMode);
method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush linearGradient(java.util.List<androidx.compose.ui.graphics.Color> colors, optional long start, optional long end, optional int tileMode);
- method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush radialGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional long center, optional float radius, optional int tileMode);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush linearGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional long start, optional long end, optional int tileMode);
method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush radialGradient(java.util.List<androidx.compose.ui.graphics.Color> colors, optional long center, optional float radius, optional int tileMode);
- method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush sweepGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional long center);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush radialGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional long center, optional float radius, optional int tileMode);
method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush sweepGradient(java.util.List<androidx.compose.ui.graphics.Color> colors, optional long center);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush sweepGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional long center);
method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush verticalGradient(java.util.List<androidx.compose.ui.graphics.Color> colors, optional float startY, optional float endY, optional int tileMode);
method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush verticalGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional float startY, optional float endY, optional int tileMode);
}
@@ -371,8 +371,8 @@
public final class ColorKt {
method @androidx.compose.runtime.Stable public static long Color(float red, float green, float blue, optional float alpha, optional androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace);
method @androidx.compose.runtime.Stable public static long Color(int color);
- method @androidx.compose.runtime.Stable public static long Color(long color);
method @androidx.compose.runtime.Stable public static long Color(int red, int green, int blue, optional int alpha);
+ method @androidx.compose.runtime.Stable public static long Color(long color);
method @androidx.compose.runtime.Stable public static long compositeOver(long, long background);
method public static inline boolean isSpecified(long);
method public static inline boolean isUnspecified(long);
@@ -389,8 +389,8 @@
method public inline operator float get(int row, int column);
method public float[] getValues();
method public void reset();
- method public inline operator void set(int row, int column, float v);
method public void set(float[] src);
+ method public inline operator void set(int row, int column, float v);
method public void setToRotateBlue(float degrees);
method public void setToRotateGreen(float degrees);
method public void setToRotateRed(float degrees);
@@ -474,9 +474,9 @@
method public inline operator float get(int row, int column);
method public float[] getValues();
method public void invert();
- method public long map(long point);
- method public androidx.compose.ui.geometry.Rect map(androidx.compose.ui.geometry.Rect rect);
method public void map(androidx.compose.ui.geometry.MutableRect rect);
+ method public androidx.compose.ui.geometry.Rect map(androidx.compose.ui.geometry.Rect rect);
+ method public long map(long point);
method public void reset();
method public void rotateX(float degrees);
method public void rotateY(float degrees);
@@ -544,9 +544,9 @@
public final class OutlineKt {
method public static void addOutline(androidx.compose.ui.graphics.Path, androidx.compose.ui.graphics.Outline outline);
- method public static void drawOutline(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.graphics.Outline outline, long color, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
- method public static void drawOutline(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.graphics.Outline outline, androidx.compose.ui.graphics.Brush brush, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public static void drawOutline(androidx.compose.ui.graphics.Canvas, androidx.compose.ui.graphics.Outline outline, androidx.compose.ui.graphics.Paint paint);
+ method public static void drawOutline(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.graphics.Outline outline, androidx.compose.ui.graphics.Brush brush, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public static void drawOutline(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.graphics.Outline outline, long color, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
}
public interface Paint {
@@ -944,8 +944,8 @@
}
public final class ColorSpaceKt {
- method public static androidx.compose.ui.graphics.colorspace.ColorSpace adapt(androidx.compose.ui.graphics.colorspace.ColorSpace, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint, optional androidx.compose.ui.graphics.colorspace.Adaptation adaptation);
method public static androidx.compose.ui.graphics.colorspace.ColorSpace adapt(androidx.compose.ui.graphics.colorspace.ColorSpace, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint);
+ method public static androidx.compose.ui.graphics.colorspace.ColorSpace adapt(androidx.compose.ui.graphics.colorspace.ColorSpace, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint, optional androidx.compose.ui.graphics.colorspace.Adaptation adaptation);
method public static androidx.compose.ui.graphics.colorspace.Connector connect(androidx.compose.ui.graphics.colorspace.ColorSpace, optional androidx.compose.ui.graphics.colorspace.ColorSpace destination, optional int intent);
}
@@ -1037,12 +1037,12 @@
}
public final class Rgb extends androidx.compose.ui.graphics.colorspace.ColorSpace {
- ctor public Rgb(String name, float[] toXYZ, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> oetf, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> eotf);
- ctor public Rgb(String name, float[] primaries, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> oetf, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> eotf, float min, float max);
ctor public Rgb(String name, float[] toXYZ, androidx.compose.ui.graphics.colorspace.TransferParameters function);
ctor public Rgb(String name, float[] primaries, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint, androidx.compose.ui.graphics.colorspace.TransferParameters function);
- ctor public Rgb(String name, float[] toXYZ, double gamma);
ctor public Rgb(String name, float[] primaries, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint, double gamma);
+ ctor public Rgb(String name, float[] primaries, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> oetf, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> eotf, float min, float max);
+ ctor public Rgb(String name, float[] toXYZ, double gamma);
+ ctor public Rgb(String name, float[] toXYZ, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> oetf, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> eotf);
method public float[] fromLinear(float r, float g, float b);
method public float[] fromLinear(float[] v);
method public float[] fromXyz(float[] v);
@@ -1125,10 +1125,10 @@
method public void drawLine(long color, long start, long end, float strokeWidth, int cap, androidx.compose.ui.graphics.PathEffect? pathEffect, float alpha, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
method public void drawOval(androidx.compose.ui.graphics.Brush brush, long topLeft, long size, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
method public void drawOval(long color, long topLeft, long size, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
- method public void drawPath(androidx.compose.ui.graphics.Path path, long color, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
method public void drawPath(androidx.compose.ui.graphics.Path path, androidx.compose.ui.graphics.Brush brush, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
- method public void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, int pointMode, long color, float strokeWidth, int cap, androidx.compose.ui.graphics.PathEffect? pathEffect, float alpha, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawPath(androidx.compose.ui.graphics.Path path, long color, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
method public void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, int pointMode, androidx.compose.ui.graphics.Brush brush, float strokeWidth, int cap, androidx.compose.ui.graphics.PathEffect? pathEffect, float alpha, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, int pointMode, long color, float strokeWidth, int cap, androidx.compose.ui.graphics.PathEffect? pathEffect, float alpha, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
method public void drawRect(androidx.compose.ui.graphics.Brush brush, long topLeft, long size, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
method public void drawRect(long color, long topLeft, long size, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
method public void drawRoundRect(androidx.compose.ui.graphics.Brush brush, long topLeft, long size, long cornerRadius, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
@@ -1163,16 +1163,16 @@
method public void drawCircle(androidx.compose.ui.graphics.Brush brush, optional float radius, optional long center, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public void drawCircle(long color, optional float radius, optional long center, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public void drawImage(androidx.compose.ui.graphics.ImageBitmap image, optional long topLeft, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
- method public default void drawImage(androidx.compose.ui.graphics.ImageBitmap image, optional long srcOffset, optional long srcSize, optional long dstOffset, optional long dstSize, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode, optional int filterQuality);
method @Deprecated public void drawImage(androidx.compose.ui.graphics.ImageBitmap image, optional long srcOffset, optional long srcSize, optional long dstOffset, optional long dstSize, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public default void drawImage(androidx.compose.ui.graphics.ImageBitmap image, optional long srcOffset, optional long srcSize, optional long dstOffset, optional long dstSize, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode, optional int filterQuality);
method public void drawLine(androidx.compose.ui.graphics.Brush brush, long start, long end, optional float strokeWidth, optional int cap, optional androidx.compose.ui.graphics.PathEffect? pathEffect, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public void drawLine(long color, long start, long end, optional float strokeWidth, optional int cap, optional androidx.compose.ui.graphics.PathEffect? pathEffect, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public void drawOval(androidx.compose.ui.graphics.Brush brush, optional long topLeft, optional long size, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public void drawOval(long color, optional long topLeft, optional long size, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
- method public void drawPath(androidx.compose.ui.graphics.Path path, long color, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public void drawPath(androidx.compose.ui.graphics.Path path, androidx.compose.ui.graphics.Brush brush, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
- method public void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, int pointMode, long color, optional float strokeWidth, optional int cap, optional androidx.compose.ui.graphics.PathEffect? pathEffect, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawPath(androidx.compose.ui.graphics.Path path, long color, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, int pointMode, androidx.compose.ui.graphics.Brush brush, optional float strokeWidth, optional int cap, optional androidx.compose.ui.graphics.PathEffect? pathEffect, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, int pointMode, long color, optional float strokeWidth, optional int cap, optional androidx.compose.ui.graphics.PathEffect? pathEffect, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public void drawRect(androidx.compose.ui.graphics.Brush brush, optional long topLeft, optional long size, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public void drawRect(long color, optional long topLeft, optional long size, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public void drawRoundRect(androidx.compose.ui.graphics.Brush brush, optional long topLeft, optional long size, optional long cornerRadius, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
@@ -1200,8 +1200,8 @@
method public static inline void clipRect(androidx.compose.ui.graphics.drawscope.DrawScope, optional float left, optional float top, optional float right, optional float bottom, optional int clipOp, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
method public static inline void drawIntoCanvas(androidx.compose.ui.graphics.drawscope.DrawScope, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Canvas,kotlin.Unit> block);
method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawScope, float left, float top, float right, float bottom, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
- method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawScope, float inset, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawScope, optional float horizontal, optional float vertical, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawScope, float inset, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
method public static inline void rotate(androidx.compose.ui.graphics.drawscope.DrawScope, float degrees, optional long pivot, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
method public static inline void rotateRad(androidx.compose.ui.graphics.drawscope.DrawScope, float radians, optional long pivot, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
method public static inline void scale(androidx.compose.ui.graphics.drawscope.DrawScope, float scaleX, float scaleY, optional long pivot, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
@@ -1231,8 +1231,8 @@
}
public final class DrawTransformKt {
- method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawTransform, optional float horizontal, optional float vertical);
method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawTransform, float inset);
+ method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawTransform, optional float horizontal, optional float vertical);
method public static inline void rotateRad(androidx.compose.ui.graphics.drawscope.DrawTransform, float radians, optional long pivot);
method public static inline void scale(androidx.compose.ui.graphics.drawscope.DrawTransform, float scale, optional long pivot);
}
diff --git a/compose/ui/ui-graphics/api/public_plus_experimental_current.txt b/compose/ui/ui-graphics/api/public_plus_experimental_current.txt
index 6ee1568..eb84156 100644
--- a/compose/ui/ui-graphics/api/public_plus_experimental_current.txt
+++ b/compose/ui/ui-graphics/api/public_plus_experimental_current.txt
@@ -26,13 +26,13 @@
}
public final class AndroidMatrixConversions_androidKt {
- method public static void setFrom(float[], android.graphics.Matrix matrix);
method public static void setFrom(android.graphics.Matrix, float[] matrix);
+ method public static void setFrom(float[], android.graphics.Matrix matrix);
}
public final class AndroidPaint implements androidx.compose.ui.graphics.Paint {
- ctor public AndroidPaint(android.graphics.Paint internalPaint);
ctor public AndroidPaint();
+ ctor public AndroidPaint(android.graphics.Paint internalPaint);
method public android.graphics.Paint asFrameworkPaint();
method public float getAlpha();
method public int getBlendMode();
@@ -231,12 +231,12 @@
public static final class Brush.Companion {
method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush horizontalGradient(java.util.List<androidx.compose.ui.graphics.Color> colors, optional float startX, optional float endX, optional int tileMode);
method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush horizontalGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional float startX, optional float endX, optional int tileMode);
- method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush linearGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional long start, optional long end, optional int tileMode);
method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush linearGradient(java.util.List<androidx.compose.ui.graphics.Color> colors, optional long start, optional long end, optional int tileMode);
- method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush radialGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional long center, optional float radius, optional int tileMode);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush linearGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional long start, optional long end, optional int tileMode);
method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush radialGradient(java.util.List<androidx.compose.ui.graphics.Color> colors, optional long center, optional float radius, optional int tileMode);
- method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush sweepGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional long center);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush radialGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional long center, optional float radius, optional int tileMode);
method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush sweepGradient(java.util.List<androidx.compose.ui.graphics.Color> colors, optional long center);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush sweepGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional long center);
method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush verticalGradient(java.util.List<androidx.compose.ui.graphics.Color> colors, optional float startY, optional float endY, optional int tileMode);
method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush verticalGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional float startY, optional float endY, optional int tileMode);
}
@@ -371,8 +371,8 @@
public final class ColorKt {
method @androidx.compose.runtime.Stable public static long Color(float red, float green, float blue, optional float alpha, optional androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace);
method @androidx.compose.runtime.Stable public static long Color(int color);
- method @androidx.compose.runtime.Stable public static long Color(long color);
method @androidx.compose.runtime.Stable public static long Color(int red, int green, int blue, optional int alpha);
+ method @androidx.compose.runtime.Stable public static long Color(long color);
method @androidx.compose.runtime.Stable public static long compositeOver(long, long background);
method public static inline boolean isSpecified(long);
method public static inline boolean isUnspecified(long);
@@ -389,8 +389,8 @@
method public inline operator float get(int row, int column);
method public float[] getValues();
method public void reset();
- method public inline operator void set(int row, int column, float v);
method public void set(float[] src);
+ method public inline operator void set(int row, int column, float v);
method public void setToRotateBlue(float degrees);
method public void setToRotateGreen(float degrees);
method public void setToRotateRed(float degrees);
@@ -477,9 +477,9 @@
method public inline operator float get(int row, int column);
method public float[] getValues();
method public void invert();
- method public long map(long point);
- method public androidx.compose.ui.geometry.Rect map(androidx.compose.ui.geometry.Rect rect);
method public void map(androidx.compose.ui.geometry.MutableRect rect);
+ method public androidx.compose.ui.geometry.Rect map(androidx.compose.ui.geometry.Rect rect);
+ method public long map(long point);
method public void reset();
method public void rotateX(float degrees);
method public void rotateY(float degrees);
@@ -547,9 +547,9 @@
public final class OutlineKt {
method public static void addOutline(androidx.compose.ui.graphics.Path, androidx.compose.ui.graphics.Outline outline);
- method public static void drawOutline(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.graphics.Outline outline, long color, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
- method public static void drawOutline(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.graphics.Outline outline, androidx.compose.ui.graphics.Brush brush, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public static void drawOutline(androidx.compose.ui.graphics.Canvas, androidx.compose.ui.graphics.Outline outline, androidx.compose.ui.graphics.Paint paint);
+ method public static void drawOutline(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.graphics.Outline outline, androidx.compose.ui.graphics.Brush brush, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public static void drawOutline(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.graphics.Outline outline, long color, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
}
public interface Paint {
@@ -947,8 +947,8 @@
}
public final class ColorSpaceKt {
- method public static androidx.compose.ui.graphics.colorspace.ColorSpace adapt(androidx.compose.ui.graphics.colorspace.ColorSpace, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint, optional androidx.compose.ui.graphics.colorspace.Adaptation adaptation);
method public static androidx.compose.ui.graphics.colorspace.ColorSpace adapt(androidx.compose.ui.graphics.colorspace.ColorSpace, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint);
+ method public static androidx.compose.ui.graphics.colorspace.ColorSpace adapt(androidx.compose.ui.graphics.colorspace.ColorSpace, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint, optional androidx.compose.ui.graphics.colorspace.Adaptation adaptation);
method public static androidx.compose.ui.graphics.colorspace.Connector connect(androidx.compose.ui.graphics.colorspace.ColorSpace, optional androidx.compose.ui.graphics.colorspace.ColorSpace destination, optional int intent);
}
@@ -1040,12 +1040,12 @@
}
public final class Rgb extends androidx.compose.ui.graphics.colorspace.ColorSpace {
- ctor public Rgb(String name, float[] toXYZ, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> oetf, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> eotf);
- ctor public Rgb(String name, float[] primaries, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> oetf, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> eotf, float min, float max);
ctor public Rgb(String name, float[] toXYZ, androidx.compose.ui.graphics.colorspace.TransferParameters function);
ctor public Rgb(String name, float[] primaries, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint, androidx.compose.ui.graphics.colorspace.TransferParameters function);
- ctor public Rgb(String name, float[] toXYZ, double gamma);
ctor public Rgb(String name, float[] primaries, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint, double gamma);
+ ctor public Rgb(String name, float[] primaries, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> oetf, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> eotf, float min, float max);
+ ctor public Rgb(String name, float[] toXYZ, double gamma);
+ ctor public Rgb(String name, float[] toXYZ, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> oetf, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> eotf);
method public float[] fromLinear(float r, float g, float b);
method public float[] fromLinear(float[] v);
method public float[] fromXyz(float[] v);
@@ -1128,10 +1128,10 @@
method public void drawLine(long color, long start, long end, float strokeWidth, int cap, androidx.compose.ui.graphics.PathEffect? pathEffect, float alpha, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
method public void drawOval(androidx.compose.ui.graphics.Brush brush, long topLeft, long size, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
method public void drawOval(long color, long topLeft, long size, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
- method public void drawPath(androidx.compose.ui.graphics.Path path, long color, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
method public void drawPath(androidx.compose.ui.graphics.Path path, androidx.compose.ui.graphics.Brush brush, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
- method public void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, int pointMode, long color, float strokeWidth, int cap, androidx.compose.ui.graphics.PathEffect? pathEffect, float alpha, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawPath(androidx.compose.ui.graphics.Path path, long color, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
method public void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, int pointMode, androidx.compose.ui.graphics.Brush brush, float strokeWidth, int cap, androidx.compose.ui.graphics.PathEffect? pathEffect, float alpha, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, int pointMode, long color, float strokeWidth, int cap, androidx.compose.ui.graphics.PathEffect? pathEffect, float alpha, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
method public void drawRect(androidx.compose.ui.graphics.Brush brush, long topLeft, long size, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
method public void drawRect(long color, long topLeft, long size, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
method public void drawRoundRect(androidx.compose.ui.graphics.Brush brush, long topLeft, long size, long cornerRadius, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
@@ -1166,16 +1166,16 @@
method public void drawCircle(androidx.compose.ui.graphics.Brush brush, optional float radius, optional long center, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public void drawCircle(long color, optional float radius, optional long center, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public void drawImage(androidx.compose.ui.graphics.ImageBitmap image, optional long topLeft, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
- method public default void drawImage(androidx.compose.ui.graphics.ImageBitmap image, optional long srcOffset, optional long srcSize, optional long dstOffset, optional long dstSize, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode, optional int filterQuality);
method @Deprecated public void drawImage(androidx.compose.ui.graphics.ImageBitmap image, optional long srcOffset, optional long srcSize, optional long dstOffset, optional long dstSize, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public default void drawImage(androidx.compose.ui.graphics.ImageBitmap image, optional long srcOffset, optional long srcSize, optional long dstOffset, optional long dstSize, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode, optional int filterQuality);
method public void drawLine(androidx.compose.ui.graphics.Brush brush, long start, long end, optional float strokeWidth, optional int cap, optional androidx.compose.ui.graphics.PathEffect? pathEffect, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public void drawLine(long color, long start, long end, optional float strokeWidth, optional int cap, optional androidx.compose.ui.graphics.PathEffect? pathEffect, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public void drawOval(androidx.compose.ui.graphics.Brush brush, optional long topLeft, optional long size, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public void drawOval(long color, optional long topLeft, optional long size, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
- method public void drawPath(androidx.compose.ui.graphics.Path path, long color, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public void drawPath(androidx.compose.ui.graphics.Path path, androidx.compose.ui.graphics.Brush brush, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
- method public void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, int pointMode, long color, optional float strokeWidth, optional int cap, optional androidx.compose.ui.graphics.PathEffect? pathEffect, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawPath(androidx.compose.ui.graphics.Path path, long color, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, int pointMode, androidx.compose.ui.graphics.Brush brush, optional float strokeWidth, optional int cap, optional androidx.compose.ui.graphics.PathEffect? pathEffect, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, int pointMode, long color, optional float strokeWidth, optional int cap, optional androidx.compose.ui.graphics.PathEffect? pathEffect, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public void drawRect(androidx.compose.ui.graphics.Brush brush, optional long topLeft, optional long size, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public void drawRect(long color, optional long topLeft, optional long size, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public void drawRoundRect(androidx.compose.ui.graphics.Brush brush, optional long topLeft, optional long size, optional long cornerRadius, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
@@ -1203,8 +1203,8 @@
method public static inline void clipRect(androidx.compose.ui.graphics.drawscope.DrawScope, optional float left, optional float top, optional float right, optional float bottom, optional int clipOp, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
method public static inline void drawIntoCanvas(androidx.compose.ui.graphics.drawscope.DrawScope, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Canvas,kotlin.Unit> block);
method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawScope, float left, float top, float right, float bottom, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
- method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawScope, float inset, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawScope, optional float horizontal, optional float vertical, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawScope, float inset, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
method public static inline void rotate(androidx.compose.ui.graphics.drawscope.DrawScope, float degrees, optional long pivot, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
method public static inline void rotateRad(androidx.compose.ui.graphics.drawscope.DrawScope, float radians, optional long pivot, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
method public static inline void scale(androidx.compose.ui.graphics.drawscope.DrawScope, float scaleX, float scaleY, optional long pivot, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
@@ -1234,8 +1234,8 @@
}
public final class DrawTransformKt {
- method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawTransform, optional float horizontal, optional float vertical);
method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawTransform, float inset);
+ method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawTransform, optional float horizontal, optional float vertical);
method public static inline void rotateRad(androidx.compose.ui.graphics.drawscope.DrawTransform, float radians, optional long pivot);
method public static inline void scale(androidx.compose.ui.graphics.drawscope.DrawTransform, float scale, optional long pivot);
}
diff --git a/compose/ui/ui-graphics/api/restricted_current.txt b/compose/ui/ui-graphics/api/restricted_current.txt
index 785b8d7..33e27b1 100644
--- a/compose/ui/ui-graphics/api/restricted_current.txt
+++ b/compose/ui/ui-graphics/api/restricted_current.txt
@@ -56,13 +56,13 @@
}
public final class AndroidMatrixConversions_androidKt {
- method public static void setFrom(float[], android.graphics.Matrix matrix);
method public static void setFrom(android.graphics.Matrix, float[] matrix);
+ method public static void setFrom(float[], android.graphics.Matrix matrix);
}
public final class AndroidPaint implements androidx.compose.ui.graphics.Paint {
- ctor public AndroidPaint(android.graphics.Paint internalPaint);
ctor public AndroidPaint();
+ ctor public AndroidPaint(android.graphics.Paint internalPaint);
method public android.graphics.Paint asFrameworkPaint();
method public float getAlpha();
method public int getBlendMode();
@@ -261,12 +261,12 @@
public static final class Brush.Companion {
method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush horizontalGradient(java.util.List<androidx.compose.ui.graphics.Color> colors, optional float startX, optional float endX, optional int tileMode);
method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush horizontalGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional float startX, optional float endX, optional int tileMode);
- method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush linearGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional long start, optional long end, optional int tileMode);
method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush linearGradient(java.util.List<androidx.compose.ui.graphics.Color> colors, optional long start, optional long end, optional int tileMode);
- method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush radialGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional long center, optional float radius, optional int tileMode);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush linearGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional long start, optional long end, optional int tileMode);
method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush radialGradient(java.util.List<androidx.compose.ui.graphics.Color> colors, optional long center, optional float radius, optional int tileMode);
- method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush sweepGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional long center);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush radialGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional long center, optional float radius, optional int tileMode);
method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush sweepGradient(java.util.List<androidx.compose.ui.graphics.Color> colors, optional long center);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush sweepGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional long center);
method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush verticalGradient(java.util.List<androidx.compose.ui.graphics.Color> colors, optional float startY, optional float endY, optional int tileMode);
method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.Brush verticalGradient(kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional float startY, optional float endY, optional int tileMode);
}
@@ -402,8 +402,8 @@
public final class ColorKt {
method @androidx.compose.runtime.Stable public static long Color(float red, float green, float blue, optional float alpha, optional androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace);
method @androidx.compose.runtime.Stable public static long Color(int color);
- method @androidx.compose.runtime.Stable public static long Color(long color);
method @androidx.compose.runtime.Stable public static long Color(int red, int green, int blue, optional int alpha);
+ method @androidx.compose.runtime.Stable public static long Color(long color);
method @androidx.compose.runtime.Stable public static long compositeOver(long, long background);
method public static inline boolean isSpecified(long);
method public static inline boolean isUnspecified(long);
@@ -420,8 +420,8 @@
method public inline operator float get(int row, int column);
method public float[] getValues();
method public void reset();
- method public inline operator void set(int row, int column, float v);
method public void set(float[] src);
+ method public inline operator void set(int row, int column, float v);
method public void setToRotateBlue(float degrees);
method public void setToRotateGreen(float degrees);
method public void setToRotateRed(float degrees);
@@ -509,9 +509,9 @@
method public inline operator float get(int row, int column);
method public float[] getValues();
method public void invert();
- method public long map(long point);
- method public androidx.compose.ui.geometry.Rect map(androidx.compose.ui.geometry.Rect rect);
method public void map(androidx.compose.ui.geometry.MutableRect rect);
+ method public androidx.compose.ui.geometry.Rect map(androidx.compose.ui.geometry.Rect rect);
+ method public long map(long point);
method public void reset();
method public void rotateX(float degrees);
method public void rotateY(float degrees);
@@ -579,9 +579,9 @@
public final class OutlineKt {
method public static void addOutline(androidx.compose.ui.graphics.Path, androidx.compose.ui.graphics.Outline outline);
- method public static void drawOutline(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.graphics.Outline outline, long color, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
- method public static void drawOutline(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.graphics.Outline outline, androidx.compose.ui.graphics.Brush brush, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public static void drawOutline(androidx.compose.ui.graphics.Canvas, androidx.compose.ui.graphics.Outline outline, androidx.compose.ui.graphics.Paint paint);
+ method public static void drawOutline(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.graphics.Outline outline, androidx.compose.ui.graphics.Brush brush, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public static void drawOutline(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.graphics.Outline outline, long color, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
}
public interface Paint {
@@ -979,8 +979,8 @@
}
public final class ColorSpaceKt {
- method public static androidx.compose.ui.graphics.colorspace.ColorSpace adapt(androidx.compose.ui.graphics.colorspace.ColorSpace, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint, optional androidx.compose.ui.graphics.colorspace.Adaptation adaptation);
method public static androidx.compose.ui.graphics.colorspace.ColorSpace adapt(androidx.compose.ui.graphics.colorspace.ColorSpace, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint);
+ method public static androidx.compose.ui.graphics.colorspace.ColorSpace adapt(androidx.compose.ui.graphics.colorspace.ColorSpace, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint, optional androidx.compose.ui.graphics.colorspace.Adaptation adaptation);
method public static androidx.compose.ui.graphics.colorspace.Connector connect(androidx.compose.ui.graphics.colorspace.ColorSpace, optional androidx.compose.ui.graphics.colorspace.ColorSpace destination, optional int intent);
}
@@ -1072,12 +1072,12 @@
}
public final class Rgb extends androidx.compose.ui.graphics.colorspace.ColorSpace {
- ctor public Rgb(String name, float[] toXYZ, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> oetf, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> eotf);
- ctor public Rgb(String name, float[] primaries, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> oetf, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> eotf, float min, float max);
ctor public Rgb(String name, float[] toXYZ, androidx.compose.ui.graphics.colorspace.TransferParameters function);
ctor public Rgb(String name, float[] primaries, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint, androidx.compose.ui.graphics.colorspace.TransferParameters function);
- ctor public Rgb(String name, float[] toXYZ, double gamma);
ctor public Rgb(String name, float[] primaries, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint, double gamma);
+ ctor public Rgb(String name, float[] primaries, androidx.compose.ui.graphics.colorspace.WhitePoint whitePoint, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> oetf, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> eotf, float min, float max);
+ ctor public Rgb(String name, float[] toXYZ, double gamma);
+ ctor public Rgb(String name, float[] toXYZ, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> oetf, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> eotf);
method public float[] fromLinear(float r, float g, float b);
method public float[] fromLinear(float[] v);
method public float[] fromXyz(float[] v);
@@ -1160,10 +1160,10 @@
method public void drawLine(long color, long start, long end, float strokeWidth, int cap, androidx.compose.ui.graphics.PathEffect? pathEffect, float alpha, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
method public void drawOval(androidx.compose.ui.graphics.Brush brush, long topLeft, long size, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
method public void drawOval(long color, long topLeft, long size, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
- method public void drawPath(androidx.compose.ui.graphics.Path path, long color, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
method public void drawPath(androidx.compose.ui.graphics.Path path, androidx.compose.ui.graphics.Brush brush, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
- method public void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, int pointMode, long color, float strokeWidth, int cap, androidx.compose.ui.graphics.PathEffect? pathEffect, float alpha, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawPath(androidx.compose.ui.graphics.Path path, long color, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
method public void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, int pointMode, androidx.compose.ui.graphics.Brush brush, float strokeWidth, int cap, androidx.compose.ui.graphics.PathEffect? pathEffect, float alpha, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
+ method public void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, int pointMode, long color, float strokeWidth, int cap, androidx.compose.ui.graphics.PathEffect? pathEffect, float alpha, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
method public void drawRect(androidx.compose.ui.graphics.Brush brush, long topLeft, long size, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
method public void drawRect(long color, long topLeft, long size, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
method public void drawRoundRect(androidx.compose.ui.graphics.Brush brush, long topLeft, long size, long cornerRadius, float alpha, androidx.compose.ui.graphics.drawscope.DrawStyle style, androidx.compose.ui.graphics.ColorFilter? colorFilter, int blendMode);
@@ -1222,16 +1222,16 @@
method public void drawCircle(androidx.compose.ui.graphics.Brush brush, optional float radius, optional long center, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public void drawCircle(long color, optional float radius, optional long center, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public void drawImage(androidx.compose.ui.graphics.ImageBitmap image, optional long topLeft, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
- method public default void drawImage(androidx.compose.ui.graphics.ImageBitmap image, optional long srcOffset, optional long srcSize, optional long dstOffset, optional long dstSize, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode, optional int filterQuality);
method @Deprecated public void drawImage(androidx.compose.ui.graphics.ImageBitmap image, optional long srcOffset, optional long srcSize, optional long dstOffset, optional long dstSize, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public default void drawImage(androidx.compose.ui.graphics.ImageBitmap image, optional long srcOffset, optional long srcSize, optional long dstOffset, optional long dstSize, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode, optional int filterQuality);
method public void drawLine(androidx.compose.ui.graphics.Brush brush, long start, long end, optional float strokeWidth, optional int cap, optional androidx.compose.ui.graphics.PathEffect? pathEffect, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public void drawLine(long color, long start, long end, optional float strokeWidth, optional int cap, optional androidx.compose.ui.graphics.PathEffect? pathEffect, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public void drawOval(androidx.compose.ui.graphics.Brush brush, optional long topLeft, optional long size, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public void drawOval(long color, optional long topLeft, optional long size, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
- method public void drawPath(androidx.compose.ui.graphics.Path path, long color, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public void drawPath(androidx.compose.ui.graphics.Path path, androidx.compose.ui.graphics.Brush brush, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
- method public void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, int pointMode, long color, optional float strokeWidth, optional int cap, optional androidx.compose.ui.graphics.PathEffect? pathEffect, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawPath(androidx.compose.ui.graphics.Path path, long color, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, int pointMode, androidx.compose.ui.graphics.Brush brush, optional float strokeWidth, optional int cap, optional androidx.compose.ui.graphics.PathEffect? pathEffect, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
+ method public void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, int pointMode, long color, optional float strokeWidth, optional int cap, optional androidx.compose.ui.graphics.PathEffect? pathEffect, optional float alpha, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public void drawRect(androidx.compose.ui.graphics.Brush brush, optional long topLeft, optional long size, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public void drawRect(long color, optional long topLeft, optional long size, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
method public void drawRoundRect(androidx.compose.ui.graphics.Brush brush, optional long topLeft, optional long size, optional long cornerRadius, optional float alpha, optional androidx.compose.ui.graphics.drawscope.DrawStyle style, optional androidx.compose.ui.graphics.ColorFilter? colorFilter, optional int blendMode);
@@ -1259,8 +1259,8 @@
method public static inline void clipRect(androidx.compose.ui.graphics.drawscope.DrawScope, optional float left, optional float top, optional float right, optional float bottom, optional int clipOp, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
method public static inline void drawIntoCanvas(androidx.compose.ui.graphics.drawscope.DrawScope, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Canvas,kotlin.Unit> block);
method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawScope, float left, float top, float right, float bottom, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
- method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawScope, float inset, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawScope, optional float horizontal, optional float vertical, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+ method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawScope, float inset, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
method public static inline void rotate(androidx.compose.ui.graphics.drawscope.DrawScope, float degrees, optional long pivot, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
method public static inline void rotateRad(androidx.compose.ui.graphics.drawscope.DrawScope, float radians, optional long pivot, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
method public static inline void scale(androidx.compose.ui.graphics.drawscope.DrawScope, float scaleX, float scaleY, optional long pivot, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
@@ -1290,8 +1290,8 @@
}
public final class DrawTransformKt {
- method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawTransform, optional float horizontal, optional float vertical);
method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawTransform, float inset);
+ method public static inline void inset(androidx.compose.ui.graphics.drawscope.DrawTransform, optional float horizontal, optional float vertical);
method public static inline void rotateRad(androidx.compose.ui.graphics.drawscope.DrawTransform, float radians, optional long pivot);
method public static inline void scale(androidx.compose.ui.graphics.drawscope.DrawTransform, float scale, optional long pivot);
}
diff --git a/compose/ui/ui-graphics/benchmark/src/main/java/androidx/compose/ui/graphics/benchmark/ImageVectorTestCase.kt b/compose/ui/ui-graphics/benchmark/src/main/java/androidx/compose/ui/graphics/benchmark/ImageVectorTestCase.kt
index 294542e..f635bf3 100644
--- a/compose/ui/ui-graphics/benchmark/src/main/java/androidx/compose/ui/graphics/benchmark/ImageVectorTestCase.kt
+++ b/compose/ui/ui-graphics/benchmark/src/main/java/androidx/compose/ui/graphics/benchmark/ImageVectorTestCase.kt
@@ -16,21 +16,21 @@
package androidx.compose.ui.graphics.benchmark
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.platform.testTag
-import androidx.compose.ui.draw.paint
import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.size
+import androidx.compose.runtime.Composable
+import androidx.compose.testutils.LayeredComposeTestCase
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.paint
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.graphics.StrokeCap
import androidx.compose.ui.graphics.StrokeJoin
import androidx.compose.ui.graphics.painter.Painter
-import androidx.compose.ui.graphics.vector.PathData
import androidx.compose.ui.graphics.vector.ImageVector
-import androidx.compose.foundation.layout.size
-import androidx.compose.testutils.LayeredComposeTestCase
+import androidx.compose.ui.graphics.vector.PathData
import androidx.compose.ui.graphics.vector.rememberVectorPainter
+import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
diff --git a/compose/ui/ui-graphics/benchmark/test/src/androidTest/java/androidx/compose/ui/graphics/benchmark/test/ImageVectorTest.kt b/compose/ui/ui-graphics/benchmark/test/src/androidTest/java/androidx/compose/ui/graphics/benchmark/test/ImageVectorTest.kt
index e7ef620..331886e 100644
--- a/compose/ui/ui-graphics/benchmark/test/src/androidTest/java/androidx/compose/ui/graphics/benchmark/test/ImageVectorTest.kt
+++ b/compose/ui/ui-graphics/benchmark/test/src/androidTest/java/androidx/compose/ui/graphics/benchmark/test/ImageVectorTest.kt
@@ -39,12 +39,12 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import androidx.test.filters.SdkSuppress
+import kotlin.math.roundToInt
import org.junit.Assert
import org.junit.Assert.assertEquals
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.math.roundToInt
/**
* Test to ensure that [XmlVectorTestCase] and [ProgrammaticVectorTestCase] have an identical pixel
diff --git a/compose/ui/ui-graphics/samples/build.gradle b/compose/ui/ui-graphics/samples/build.gradle
index b255806..15643a9 100644
--- a/compose/ui/ui-graphics/samples/build.gradle
+++ b/compose/ui/ui-graphics/samples/build.gradle
@@ -36,7 +36,7 @@
}
androidx {
- name = "AndroidX Compose UI Graphics Components Samples"
+ name = "Compose UI Graphics Components Samples"
type = LibraryType.SAMPLES
inceptionYear = "2019"
description = "Contains the sample code for the Androidx Compose UI Graphics Components"
diff --git a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/AndroidBlendModeTest.kt b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/AndroidBlendModeTest.kt
index e5f71d0..25472a9 100644
--- a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/AndroidBlendModeTest.kt
+++ b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/AndroidBlendModeTest.kt
@@ -18,6 +18,7 @@
import android.graphics.PorterDuff
import android.os.Build
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
import org.junit.Assert.assertEquals
@@ -25,7 +26,6 @@
import org.junit.Assert.assertTrue
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/AndroidCanvasTest.kt b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/AndroidCanvasTest.kt
index c8fcfa2..d849eb1 100644
--- a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/AndroidCanvasTest.kt
+++ b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/AndroidCanvasTest.kt
@@ -36,14 +36,14 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import androidx.test.filters.SdkSuppress
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotEquals
+import org.junit.Assert.assertTrue
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
-import org.junit.Assert.assertTrue
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/AndroidMatrixTest.kt b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/AndroidMatrixTest.kt
index a99ffed..d83241e 100644
--- a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/AndroidMatrixTest.kt
+++ b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/AndroidMatrixTest.kt
@@ -16,13 +16,13 @@
package androidx.compose.ui.graphics
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
+import org.junit.Assert.assertTrue
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import org.junit.Assert.assertTrue
private const val delta = 0.01f
diff --git a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/AndroidTileModeTest.kt b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/AndroidTileModeTest.kt
index 9bf63e5..a08d3dd 100644
--- a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/AndroidTileModeTest.kt
+++ b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/AndroidTileModeTest.kt
@@ -17,14 +17,14 @@
package androidx.compose.ui.graphics
import android.os.Build
-import androidx.test.filters.SmallTest
-import org.junit.Test
-import org.junit.runner.RunWith
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SdkSuppress
+import androidx.test.filters.SmallTest
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
+import org.junit.Test
+import org.junit.runner.RunWith
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/ImageBitmapTest.kt b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/ImageBitmapTest.kt
index ab73407..0d59a3f 100644
--- a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/ImageBitmapTest.kt
+++ b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/ImageBitmapTest.kt
@@ -17,12 +17,12 @@
package androidx.compose.ui.graphics
import androidx.compose.ui.graphics.colorspace.ColorSpaces
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/PaintTest.kt b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/PaintTest.kt
index 659b84e..2c61d09 100644
--- a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/PaintTest.kt
+++ b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/PaintTest.kt
@@ -16,14 +16,14 @@
package androidx.compose.ui.graphics
-import androidx.test.filters.SmallTest
-import org.junit.Assert.assertTrue
-import org.junit.Test
-import org.junit.runner.RunWith
import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
import org.junit.Assert.assertEquals
import org.junit.Assert.assertSame
+import org.junit.Assert.assertTrue
import org.junit.Assert.fail
+import org.junit.Test
+import org.junit.runner.RunWith
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/PathTest.kt b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/PathTest.kt
index def70c3..a51bfb3 100644
--- a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/PathTest.kt
+++ b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/PathTest.kt
@@ -19,14 +19,14 @@
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Rect
import androidx.compose.ui.geometry.Size
-import androidx.test.filters.SmallTest
-import org.junit.Assert.assertEquals
-import org.junit.Test
-import org.junit.runner.RunWith
import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
import kotlin.math.PI
+import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
+import org.junit.Test
+import org.junit.runner.RunWith
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/PixelMapTest.kt b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/PixelMapTest.kt
index a733508..f7cb47c 100644
--- a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/PixelMapTest.kt
+++ b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/PixelMapTest.kt
@@ -17,11 +17,11 @@
package androidx.compose.ui.graphics
import androidx.compose.ui.geometry.Rect
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import org.junit.Assert
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/RectHelperTest.kt b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/RectHelperTest.kt
index 8c20469..51f9188 100644
--- a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/RectHelperTest.kt
+++ b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/RectHelperTest.kt
@@ -18,11 +18,11 @@
import androidx.compose.ui.geometry.Rect
import androidx.compose.ui.unit.IntRect
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import org.junit.Assert.assertEquals
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/RectangleShapeTest.kt b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/RectangleShapeTest.kt
index bc7919f..7ed3e90 100644
--- a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/RectangleShapeTest.kt
+++ b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/RectangleShapeTest.kt
@@ -20,11 +20,11 @@
import androidx.compose.ui.geometry.toRect
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.LayoutDirection
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import org.junit.Assert.assertEquals
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/ShaderTest.kt b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/ShaderTest.kt
index a1c9071..1386ef1 100644
--- a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/ShaderTest.kt
+++ b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/ShaderTest.kt
@@ -24,12 +24,12 @@
import androidx.compose.ui.unit.LayoutDirection
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
-import org.junit.Assert.assertEquals
-import org.junit.Test
-import org.junit.runner.RunWith
import kotlin.math.roundToInt
+import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertNull
+import org.junit.Test
+import org.junit.runner.RunWith
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/drawscope/DrawScopeTest.kt b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/drawscope/DrawScopeTest.kt
index 658f78c..213e383 100644
--- a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/drawscope/DrawScopeTest.kt
+++ b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/drawscope/DrawScopeTest.kt
@@ -44,12 +44,12 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import androidx.test.filters.SmallTest
+import kotlin.math.roundToInt
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Assert.fail
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.math.roundToInt
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/painter/BitmapPainterTest.kt b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/painter/BitmapPainterTest.kt
index 489d888..ca0a142 100644
--- a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/painter/BitmapPainterTest.kt
+++ b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/painter/BitmapPainterTest.kt
@@ -30,13 +30,13 @@
import androidx.compose.ui.graphics.toPixelMap
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.IntSize
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.fail
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/painter/PainterTest.kt b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/painter/PainterTest.kt
index 36e7215..ebd4c8e 100644
--- a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/painter/PainterTest.kt
+++ b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/painter/PainterTest.kt
@@ -29,13 +29,13 @@
import androidx.compose.ui.graphics.drawscope.DrawScope
import androidx.compose.ui.graphics.toPixelMap
import androidx.compose.ui.unit.LayoutDirection
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Canvas.kt b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Canvas.kt
index 9dd8132..64d8783 100644
--- a/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Canvas.kt
+++ b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Canvas.kt
@@ -18,9 +18,9 @@
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Rect
+import androidx.compose.ui.graphics.internal.JvmDefaultWithCompatibility
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.IntSize
-import androidx.compose.ui.graphics.internal.JvmDefaultWithCompatibility
/**
* Create a new Canvas instance that targets its drawing commands
diff --git a/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/ColorFilter.kt b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/ColorFilter.kt
index 91bef45..6d45d4d 100644
--- a/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/ColorFilter.kt
+++ b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/ColorFilter.kt
@@ -59,9 +59,8 @@
* A lighting ColorFilter is defined by two parameters, one used to multiply the source
* color and one used to add to the source color
*
- * @param multiply Color that will be added to the source color when the color
- * filter is applied
- * @param add Color used to multiply the source color when the color filter is applied.
+ * @param multiply Color used to multiply the source color when the color filter is applied.
+ * @param add Color that will be added to the source color when the color filter is applied.
*/
@Stable
fun lighting(multiply: Color, add: Color): ColorFilter =
diff --git a/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/drawscope/DrawScope.kt b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/drawscope/DrawScope.kt
index 5751016..15f30fe 100644
--- a/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/drawscope/DrawScope.kt
+++ b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/drawscope/DrawScope.kt
@@ -16,8 +16,8 @@
package androidx.compose.ui.graphics.drawscope
-import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.CornerRadius
+import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.geometry.center
import androidx.compose.ui.graphics.BlendMode
@@ -35,12 +35,12 @@
import androidx.compose.ui.graphics.StrokeCap
import androidx.compose.ui.graphics.StrokeJoin
import androidx.compose.ui.graphics.degrees
+import androidx.compose.ui.graphics.internal.JvmDefaultWithCompatibility
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.center
-import androidx.compose.ui.graphics.internal.JvmDefaultWithCompatibility
/**
* Simultaneously translate the [DrawScope] coordinate space by [left] and [top] as well as modify
diff --git a/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/drawscope/DrawTransform.kt b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/drawscope/DrawTransform.kt
index 1cfd4d9..0aedc6ff 100644
--- a/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/drawscope/DrawTransform.kt
+++ b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/drawscope/DrawTransform.kt
@@ -19,8 +19,8 @@
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.graphics.ClipOp
-import androidx.compose.ui.graphics.Path
import androidx.compose.ui.graphics.Matrix
+import androidx.compose.ui.graphics.Path
import androidx.compose.ui.graphics.degrees
import androidx.compose.ui.graphics.internal.JvmDefaultWithCompatibility
diff --git a/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/drawscope/EmptyCanvas.kt b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/drawscope/EmptyCanvas.kt
index e09df38..a22662d 100644
--- a/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/drawscope/EmptyCanvas.kt
+++ b/compose/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/drawscope/EmptyCanvas.kt
@@ -22,11 +22,11 @@
import androidx.compose.ui.graphics.Canvas
import androidx.compose.ui.graphics.ClipOp
import androidx.compose.ui.graphics.ImageBitmap
+import androidx.compose.ui.graphics.Matrix
import androidx.compose.ui.graphics.Paint
import androidx.compose.ui.graphics.Path
import androidx.compose.ui.graphics.PointMode
import androidx.compose.ui.graphics.Vertices
-import androidx.compose.ui.graphics.Matrix
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.IntSize
diff --git a/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/BlendModeTest.kt b/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/BlendModeTest.kt
index 08f8bb8..38790bd 100644
--- a/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/BlendModeTest.kt
+++ b/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/BlendModeTest.kt
@@ -16,8 +16,8 @@
package androidx.compose.ui.graphics
-import kotlin.test.assertEquals
import kotlin.test.Test
+import kotlin.test.assertEquals
class BlendModeTest {
diff --git a/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/ClipOpTest.kt b/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/ClipOpTest.kt
index 3377989..da54628 100644
--- a/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/ClipOpTest.kt
+++ b/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/ClipOpTest.kt
@@ -16,8 +16,8 @@
package androidx.compose.ui.graphics
-import kotlin.test.assertEquals
import kotlin.test.Test
+import kotlin.test.assertEquals
class ClipOpTest {
diff --git a/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/ColorMatrixTest.kt b/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/ColorMatrixTest.kt
index 9c0338c..1a2e8fa 100644
--- a/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/ColorMatrixTest.kt
+++ b/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/ColorMatrixTest.kt
@@ -17,8 +17,8 @@
package androidx.compose.ui.graphics
import kotlin.test.BeforeTest
-import kotlin.test.assertEquals
import kotlin.test.Test
+import kotlin.test.assertEquals
import kotlin.test.assertTrue
class ColorMatrixTest {
diff --git a/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/MatrixTest.kt b/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/MatrixTest.kt
index f4b7e7b..957d351 100644
--- a/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/MatrixTest.kt
+++ b/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/MatrixTest.kt
@@ -19,12 +19,12 @@
import androidx.compose.ui.geometry.MutableRect
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Rect
+import kotlin.math.abs
+import kotlin.math.sqrt
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertFalse
import kotlin.test.assertTrue
-import kotlin.math.abs
-import kotlin.math.sqrt
class MatrixTest {
@Test
diff --git a/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/colorspace/ColorModelTest.kt b/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/colorspace/ColorModelTest.kt
index 337146b..914c15f 100644
--- a/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/colorspace/ColorModelTest.kt
+++ b/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/colorspace/ColorModelTest.kt
@@ -17,8 +17,8 @@
package androidx.compose.ui.graphics.colorspace
import androidx.compose.ui.util.packInts
-import kotlin.test.assertEquals
import kotlin.test.Test
+import kotlin.test.assertEquals
class ColorModelTest {
diff --git a/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/vector/PathParserTest.kt b/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/vector/PathParserTest.kt
index 31ff184..fc55c77 100644
--- a/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/vector/PathParserTest.kt
+++ b/compose/ui/ui-graphics/src/commonTest/kotlin/androidx/compose/ui/graphics/vector/PathParserTest.kt
@@ -23,8 +23,8 @@
import androidx.compose.ui.graphics.Path
import androidx.compose.ui.graphics.PathFillType
import androidx.compose.ui.graphics.PathOperation
-import kotlin.test.assertEquals
import kotlin.test.Test
+import kotlin.test.assertEquals
class PathParserTest {
@Test
diff --git a/compose/ui/ui-graphics/src/desktopMain/kotlin/androidx/compose/ui/graphics/DesktopImageAsset.desktop.kt b/compose/ui/ui-graphics/src/desktopMain/kotlin/androidx/compose/ui/graphics/DesktopImageAsset.desktop.kt
index fd0bd46..96e7808 100644
--- a/compose/ui/ui-graphics/src/desktopMain/kotlin/androidx/compose/ui/graphics/DesktopImageAsset.desktop.kt
+++ b/compose/ui/ui-graphics/src/desktopMain/kotlin/androidx/compose/ui/graphics/DesktopImageAsset.desktop.kt
@@ -16,10 +16,10 @@
package androidx.compose.ui.graphics
-import org.jetbrains.skia.Bitmap
-import org.jetbrains.skia.Image
import java.nio.ByteBuffer
import java.nio.ByteOrder
+import org.jetbrains.skia.Bitmap
+import org.jetbrains.skia.Image
/**
* Create an [ImageBitmap] from the given [Bitmap]. Note this does
diff --git a/compose/ui/ui-graphics/src/desktopMain/kotlin/androidx/compose/ui/graphics/DesktopImageConverters.desktop.kt b/compose/ui/ui-graphics/src/desktopMain/kotlin/androidx/compose/ui/graphics/DesktopImageConverters.desktop.kt
index b03678a6..8ead9ef 100644
--- a/compose/ui/ui-graphics/src/desktopMain/kotlin/androidx/compose/ui/graphics/DesktopImageConverters.desktop.kt
+++ b/compose/ui/ui-graphics/src/desktopMain/kotlin/androidx/compose/ui/graphics/DesktopImageConverters.desktop.kt
@@ -25,9 +25,6 @@
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.LayoutDirection
-import org.jetbrains.skia.Bitmap
-import org.jetbrains.skia.ColorAlphaType
-import org.jetbrains.skia.ImageInfo
import java.awt.Graphics
import java.awt.Image
import java.awt.Point
@@ -42,6 +39,9 @@
import java.awt.image.Raster
import java.awt.image.SinglePixelPackedSampleModel
import kotlin.math.roundToInt
+import org.jetbrains.skia.Bitmap
+import org.jetbrains.skia.ColorAlphaType
+import org.jetbrains.skia.ImageInfo
/**
* Convert AWT [BufferedImage] to Compose [Painter], so it would be possible to pass it to Compose
diff --git a/compose/ui/ui-graphics/src/desktopTest/kotlin/androidx/compose/ui/graphics/DesktopPathTest.kt b/compose/ui/ui-graphics/src/desktopTest/kotlin/androidx/compose/ui/graphics/DesktopPathTest.kt
index 4dc92b9..564e422 100644
--- a/compose/ui/ui-graphics/src/desktopTest/kotlin/androidx/compose/ui/graphics/DesktopPathTest.kt
+++ b/compose/ui/ui-graphics/src/desktopTest/kotlin/androidx/compose/ui/graphics/DesktopPathTest.kt
@@ -20,8 +20,8 @@
import androidx.compose.ui.geometry.RoundRect
import androidx.compose.ui.test.InternalTestApi
import org.junit.Assert.assertEquals
-import org.junit.Assert.assertTrue
import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
import org.junit.Test
@OptIn(InternalTestApi::class)
diff --git a/compose/ui/ui-graphics/src/skikoMain/kotlin/androidx/compose/ui/graphics/SkiaBackedCanvas.skiko.kt b/compose/ui/ui-graphics/src/skikoMain/kotlin/androidx/compose/ui/graphics/SkiaBackedCanvas.skiko.kt
index 0e0f06e..9ea4923 100644
--- a/compose/ui/ui-graphics/src/skikoMain/kotlin/androidx/compose/ui/graphics/SkiaBackedCanvas.skiko.kt
+++ b/compose/ui/ui-graphics/src/skikoMain/kotlin/androidx/compose/ui/graphics/SkiaBackedCanvas.skiko.kt
@@ -22,16 +22,16 @@
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.util.fastForEach
+import org.jetbrains.skia.ClipMode as SkClipMode
import org.jetbrains.skia.CubicResampler
import org.jetbrains.skia.FilterMipmap
import org.jetbrains.skia.FilterMode
import org.jetbrains.skia.Image
import org.jetbrains.skia.Matrix44
import org.jetbrains.skia.MipmapMode
-import org.jetbrains.skia.SamplingMode
-import org.jetbrains.skia.ClipMode as SkClipMode
import org.jetbrains.skia.RRect as SkRRect
import org.jetbrains.skia.Rect as SkRect
+import org.jetbrains.skia.SamplingMode
import org.jetbrains.skia.impl.use
actual typealias NativeCanvas = org.jetbrains.skia.Canvas
diff --git a/compose/ui/ui-graphics/src/skikoMain/kotlin/androidx/compose/ui/graphics/SkiaImageAsset.skiko.kt b/compose/ui/ui-graphics/src/skikoMain/kotlin/androidx/compose/ui/graphics/SkiaImageAsset.skiko.kt
index fa11fe8f..3c3b207 100644
--- a/compose/ui/ui-graphics/src/skikoMain/kotlin/androidx/compose/ui/graphics/SkiaImageAsset.skiko.kt
+++ b/compose/ui/ui-graphics/src/skikoMain/kotlin/androidx/compose/ui/graphics/SkiaImageAsset.skiko.kt
@@ -18,13 +18,13 @@
import androidx.compose.ui.graphics.colorspace.ColorSpace
import androidx.compose.ui.graphics.colorspace.ColorSpaces
+import kotlin.math.abs
import org.jetbrains.skia.Bitmap
import org.jetbrains.skia.ColorAlphaType
import org.jetbrains.skia.ColorInfo
import org.jetbrains.skia.ColorType
import org.jetbrains.skia.Image
import org.jetbrains.skia.ImageInfo
-import kotlin.math.abs
/**
* Create an [ImageBitmap] from the given [Bitmap]. Note this does
diff --git a/compose/ui/ui-inspection/build.gradle b/compose/ui/ui-inspection/build.gradle
index d7db14f..9ee96cd9 100644
--- a/compose/ui/ui-inspection/build.gradle
+++ b/compose/ui/ui-inspection/build.gradle
@@ -62,7 +62,7 @@
}
androidx {
- name = "Android Compose Layout Inspector"
+ name = "Compose Layout Inspector"
type = LibraryType.IDE_PLUGIN
inceptionYear = "2021"
description = "Compose layout inspector. Exposes information to our tools for better IDE support."
diff --git a/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/ParametersTest.kt b/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/ParametersTest.kt
index 4e4932e..bc87381 100644
--- a/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/ParametersTest.kt
+++ b/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/ParametersTest.kt
@@ -22,8 +22,8 @@
import androidx.compose.ui.inspection.util.GetComposablesCommand
import androidx.compose.ui.inspection.util.GetParameterDetailsCommand
import androidx.compose.ui.inspection.util.GetParametersByAnchorIdCommand
-import androidx.compose.ui.inspection.util.GetParametersCommand
import androidx.compose.ui.inspection.util.GetParametersByIdCommand
+import androidx.compose.ui.inspection.util.GetParametersCommand
import androidx.compose.ui.inspection.util.GetUpdateSettingsCommand
import androidx.compose.ui.inspection.util.flatten
import androidx.compose.ui.inspection.util.toMap
diff --git a/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/rules/ComposeInspectionRule.kt b/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/rules/ComposeInspectionRule.kt
index 933ee399..7e66fc6 100644
--- a/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/rules/ComposeInspectionRule.kt
+++ b/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/rules/ComposeInspectionRule.kt
@@ -30,15 +30,15 @@
import androidx.compose.ui.platform.ViewRootForTest
import androidx.inspection.testing.InspectorTester
import androidx.test.core.app.ActivityScenario
-import kotlinx.coroutines.runBlocking
-import layoutinspector.compose.inspection.LayoutInspectorComposeProtocol.Command
-import layoutinspector.compose.inspection.LayoutInspectorComposeProtocol.Response
-import org.junit.rules.ExternalResource
import java.util.Collections
import java.util.WeakHashMap
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
import kotlin.reflect.KClass
+import kotlinx.coroutines.runBlocking
+import layoutinspector.compose.inspection.LayoutInspectorComposeProtocol.Command
+import layoutinspector.compose.inspection.LayoutInspectorComposeProtocol.Response
+import org.junit.rules.ExternalResource
/**
* Test rule with common setup for compose inspector's tests:
diff --git a/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/rules/JvmtiRule.kt b/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/rules/JvmtiRule.kt
index f9bf89d..21982eb 100644
--- a/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/rules/JvmtiRule.kt
+++ b/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/rules/JvmtiRule.kt
@@ -17,8 +17,8 @@
package androidx.compose.ui.inspection.rules
import android.os.Debug
-import org.junit.rules.ExternalResource
import java.io.IOException
+import org.junit.rules.ExternalResource
class JvmtiRule : ExternalResource() {
companion object {
diff --git a/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/util/ProtoExtensions.kt b/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/util/ProtoExtensions.kt
index 528b4c1..feba40c 100644
--- a/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/util/ProtoExtensions.kt
+++ b/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/util/ProtoExtensions.kt
@@ -21,8 +21,8 @@
import layoutinspector.compose.inspection.LayoutInspectorComposeProtocol.ComposableNode
import layoutinspector.compose.inspection.LayoutInspectorComposeProtocol.GetAllParametersCommand
import layoutinspector.compose.inspection.LayoutInspectorComposeProtocol.GetComposablesCommand
-import layoutinspector.compose.inspection.LayoutInspectorComposeProtocol.GetParametersCommand
import layoutinspector.compose.inspection.LayoutInspectorComposeProtocol.GetParameterDetailsCommand
+import layoutinspector.compose.inspection.LayoutInspectorComposeProtocol.GetParametersCommand
import layoutinspector.compose.inspection.LayoutInspectorComposeProtocol.ParameterReference
import layoutinspector.compose.inspection.LayoutInspectorComposeProtocol.UpdateSettingsCommand
diff --git a/compose/ui/ui-inspection/src/main/java/androidx/compose/ui/inspection/inspector/ParameterFactory.kt b/compose/ui/ui-inspection/src/main/java/androidx/compose/ui/inspection/inspector/ParameterFactory.kt
index 0ee0076..4e7077f 100644
--- a/compose/ui/ui-inspection/src/main/java/androidx/compose/ui/inspection/inspector/ParameterFactory.kt
+++ b/compose/ui/ui-inspection/src/main/java/androidx/compose/ui/inspection/inspector/ParameterFactory.kt
@@ -16,7 +16,6 @@
package androidx.compose.ui.inspection.inspector
-import java.lang.reflect.Modifier as JavaModifier
import android.util.Log
import android.view.View
import androidx.compose.runtime.internal.ComposableLambda
@@ -46,6 +45,7 @@
import androidx.compose.ui.unit.TextUnit
import androidx.compose.ui.unit.TextUnitType
import java.lang.reflect.Field
+import java.lang.reflect.Modifier as JavaModifier
import java.util.IdentityHashMap
import kotlin.jvm.internal.FunctionReference
import kotlin.jvm.internal.Lambda
diff --git a/compose/ui/ui-lint/src/main/java/androidx/compose/ui/lint/ComposedModifierDetector.kt b/compose/ui/ui-lint/src/main/java/androidx/compose/ui/lint/ComposedModifierDetector.kt
index 557404e..1652ea2 100644
--- a/compose/ui/ui-lint/src/main/java/androidx/compose/ui/lint/ComposedModifierDetector.kt
+++ b/compose/ui/ui-lint/src/main/java/androidx/compose/ui/lint/ComposedModifierDetector.kt
@@ -30,12 +30,12 @@
import com.android.tools.lint.detector.api.Severity
import com.android.tools.lint.detector.api.SourceCodeScanner
import com.intellij.psi.PsiMethod
+import java.util.EnumSet
import org.jetbrains.uast.UCallExpression
import org.jetbrains.uast.USimpleNameReferenceExpression
import org.jetbrains.uast.getParameterForArgument
import org.jetbrains.uast.tryResolve
import org.jetbrains.uast.visitor.AbstractUastVisitor
-import java.util.EnumSet
/**
* [Detector] that checks calls to Modifier.composed to make sure they actually reference a
diff --git a/compose/ui/ui-lint/src/main/java/androidx/compose/ui/lint/ModifierParameterDetector.kt b/compose/ui/ui-lint/src/main/java/androidx/compose/ui/lint/ModifierParameterDetector.kt
index bcc5884..3577db2 100644
--- a/compose/ui/ui-lint/src/main/java/androidx/compose/ui/lint/ModifierParameterDetector.kt
+++ b/compose/ui/ui-lint/src/main/java/androidx/compose/ui/lint/ModifierParameterDetector.kt
@@ -32,12 +32,12 @@
import com.android.tools.lint.detector.api.Scope
import com.android.tools.lint.detector.api.Severity
import com.android.tools.lint.detector.api.SourceCodeScanner
+import java.util.EnumSet
+import java.util.Locale
import org.jetbrains.kotlin.psi.KtNameReferenceExpression
import org.jetbrains.kotlin.psi.KtParameter
import org.jetbrains.uast.UElement
import org.jetbrains.uast.UMethod
-import java.util.EnumSet
-import java.util.Locale
/**
* [Detector] that checks Composable functions with Modifiers parameters for consistency with
diff --git a/compose/ui/ui-lint/src/main/java/androidx/compose/ui/lint/SuspiciousCompositionLocalModifierReadDetector.kt b/compose/ui/ui-lint/src/main/java/androidx/compose/ui/lint/SuspiciousCompositionLocalModifierReadDetector.kt
index 9a3a49a..2c13d25 100644
--- a/compose/ui/ui-lint/src/main/java/androidx/compose/ui/lint/SuspiciousCompositionLocalModifierReadDetector.kt
+++ b/compose/ui/ui-lint/src/main/java/androidx/compose/ui/lint/SuspiciousCompositionLocalModifierReadDetector.kt
@@ -122,10 +122,12 @@
"callbacks are not invoked on every recomposition. If you read a " +
"CompositionLocal in onAttach() or onDetach(), you will only get the " +
"CompositionLocal's value once at the moment of the read, which may lead to " +
- "unexpected behaviors. We recommend instead accessing CompositionLocals in the " +
- "main phase of your Modifier, like measure(), draw(), semanticsConfiguration, " +
- "onKeyEvent(), etc. Accesses to CompositionLocals in any of these main phase " +
- "events will be kept informed ",
+ "unexpected behaviors. We recommend instead reading CompositionLocals at " +
+ "time-of-use in callbacks that apply your Modifier's behavior, like measure() " +
+ "for LayoutModifierNode, draw() for DrawModifierNode, and so on. To observe the " +
+ "value of the CompositionLocal manually, extend from the ObserverNode interface " +
+ "and place the read inside an observeReads {} block within the " +
+ "onObservedReadsChanged() callback.",
Category.CORRECTNESS, 3, Severity.ERROR,
Implementation(
SuspiciousCompositionLocalModifierReadDetector::class.java,
diff --git a/compose/ui/ui-test-junit4/api/current.txt b/compose/ui/ui-test-junit4/api/current.txt
index d860c74..2d6528b 100644
--- a/compose/ui/ui-test-junit4/api/current.txt
+++ b/compose/ui/ui-test-junit4/api/current.txt
@@ -30,8 +30,8 @@
}
public final class AndroidComposeTestRule_androidKt {
- method public static <A extends androidx.activity.ComponentActivity> androidx.compose.ui.test.junit4.AndroidComposeTestRule<androidx.test.ext.junit.rules.ActivityScenarioRule<A>,A> createAndroidComposeRule(Class<A> activityClass);
method public static inline <reified A extends androidx.activity.ComponentActivity> androidx.compose.ui.test.junit4.AndroidComposeTestRule<androidx.test.ext.junit.rules.ActivityScenarioRule<A>,A> createAndroidComposeRule();
+ method public static <A extends androidx.activity.ComponentActivity> androidx.compose.ui.test.junit4.AndroidComposeTestRule<androidx.test.ext.junit.rules.ActivityScenarioRule<A>,A> createAndroidComposeRule(Class<A> activityClass);
method public static androidx.compose.ui.test.junit4.ComposeContentTestRule createComposeRule();
method public static androidx.compose.ui.test.junit4.ComposeTestRule createEmptyComposeRule();
}
diff --git a/compose/ui/ui-test-junit4/api/public_plus_experimental_current.txt b/compose/ui/ui-test-junit4/api/public_plus_experimental_current.txt
index 2dfc3a1..8e48aac 100644
--- a/compose/ui/ui-test-junit4/api/public_plus_experimental_current.txt
+++ b/compose/ui/ui-test-junit4/api/public_plus_experimental_current.txt
@@ -57,8 +57,8 @@
package androidx.compose.ui.test.junit4 {
public final class AndroidComposeTestRule<R extends org.junit.rules.TestRule, A extends androidx.activity.ComponentActivity> implements androidx.compose.ui.test.junit4.ComposeContentTestRule {
- ctor public AndroidComposeTestRule(R activityRule, kotlin.jvm.functions.Function1<? super R,? extends A> activityProvider);
ctor @androidx.compose.ui.test.ExperimentalTestApi public AndroidComposeTestRule(R activityRule, optional kotlin.coroutines.CoroutineContext effectContext, kotlin.jvm.functions.Function1<? super R,? extends A> activityProvider);
+ ctor public AndroidComposeTestRule(R activityRule, kotlin.jvm.functions.Function1<? super R,? extends A> activityProvider);
method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
method public suspend Object? awaitIdle(kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public A getActivity();
@@ -90,9 +90,9 @@
}
public final class AndroidComposeTestRule_androidKt {
+ method public static inline <reified A extends androidx.activity.ComponentActivity> androidx.compose.ui.test.junit4.AndroidComposeTestRule<androidx.test.ext.junit.rules.ActivityScenarioRule<A>,A> createAndroidComposeRule();
method public static <A extends androidx.activity.ComponentActivity> androidx.compose.ui.test.junit4.AndroidComposeTestRule<androidx.test.ext.junit.rules.ActivityScenarioRule<A>,A> createAndroidComposeRule(Class<A> activityClass);
method @androidx.compose.ui.test.ExperimentalTestApi public static <A extends androidx.activity.ComponentActivity> androidx.compose.ui.test.junit4.AndroidComposeTestRule<androidx.test.ext.junit.rules.ActivityScenarioRule<A>,A> createAndroidComposeRule(Class<A> activityClass, optional kotlin.coroutines.CoroutineContext effectContext);
- method public static inline <reified A extends androidx.activity.ComponentActivity> androidx.compose.ui.test.junit4.AndroidComposeTestRule<androidx.test.ext.junit.rules.ActivityScenarioRule<A>,A> createAndroidComposeRule();
method @androidx.compose.ui.test.ExperimentalTestApi public static inline <reified A extends androidx.activity.ComponentActivity> androidx.compose.ui.test.junit4.AndroidComposeTestRule<androidx.test.ext.junit.rules.ActivityScenarioRule<A>,A> createAndroidComposeRule(optional kotlin.coroutines.CoroutineContext effectContext);
method public static androidx.compose.ui.test.junit4.ComposeContentTestRule createComposeRule();
method @androidx.compose.ui.test.ExperimentalTestApi public static androidx.compose.ui.test.junit4.ComposeContentTestRule createComposeRule(kotlin.coroutines.CoroutineContext effectContext);
diff --git a/compose/ui/ui-test-junit4/api/restricted_current.txt b/compose/ui/ui-test-junit4/api/restricted_current.txt
index d860c74..2d6528b 100644
--- a/compose/ui/ui-test-junit4/api/restricted_current.txt
+++ b/compose/ui/ui-test-junit4/api/restricted_current.txt
@@ -30,8 +30,8 @@
}
public final class AndroidComposeTestRule_androidKt {
- method public static <A extends androidx.activity.ComponentActivity> androidx.compose.ui.test.junit4.AndroidComposeTestRule<androidx.test.ext.junit.rules.ActivityScenarioRule<A>,A> createAndroidComposeRule(Class<A> activityClass);
method public static inline <reified A extends androidx.activity.ComponentActivity> androidx.compose.ui.test.junit4.AndroidComposeTestRule<androidx.test.ext.junit.rules.ActivityScenarioRule<A>,A> createAndroidComposeRule();
+ method public static <A extends androidx.activity.ComponentActivity> androidx.compose.ui.test.junit4.AndroidComposeTestRule<androidx.test.ext.junit.rules.ActivityScenarioRule<A>,A> createAndroidComposeRule(Class<A> activityClass);
method public static androidx.compose.ui.test.junit4.ComposeContentTestRule createComposeRule();
method public static androidx.compose.ui.test.junit4.ComposeTestRule createEmptyComposeRule();
}
diff --git a/compose/ui/ui-test-junit4/src/androidAndroidTest/kotlin/androidx/compose/ui/test/junit4/SynchronizationMethodsTest.kt b/compose/ui/ui-test-junit4/src/androidAndroidTest/kotlin/androidx/compose/ui/test/junit4/SynchronizationMethodsTest.kt
index cfce9a0..ca74cd1 100644
--- a/compose/ui/ui-test-junit4/src/androidAndroidTest/kotlin/androidx/compose/ui/test/junit4/SynchronizationMethodsTest.kt
+++ b/compose/ui/ui-test-junit4/src/androidAndroidTest/kotlin/androidx/compose/ui/test/junit4/SynchronizationMethodsTest.kt
@@ -25,15 +25,15 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
-import org.mockito.kotlin.doReturn
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.whenever
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.rules.TestRule
import org.junit.runner.RunWith
import org.junit.runners.model.Statement
+import org.mockito.kotlin.doReturn
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.whenever
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-test-junit4/src/desktopMain/kotlin/androidx/compose/ui/test/junit4/SkiaTest.desktop.kt b/compose/ui/ui-test-junit4/src/desktopMain/kotlin/androidx/compose/ui/test/junit4/SkiaTest.desktop.kt
index bc82a1a..2e6a994 100644
--- a/compose/ui/ui-test-junit4/src/desktopMain/kotlin/androidx/compose/ui/test/junit4/SkiaTest.desktop.kt
+++ b/compose/ui/ui-test-junit4/src/desktopMain/kotlin/androidx/compose/ui/test/junit4/SkiaTest.desktop.kt
@@ -15,15 +15,15 @@
*/
package androidx.compose.ui.test.junit4
-import org.jetbrains.skia.Image
import androidx.compose.ui.test.InternalTestApi
+import java.io.File
+import java.security.MessageDigest
+import java.util.LinkedList
+import org.jetbrains.skia.Image
import org.jetbrains.skia.Surface
import org.junit.rules.TestRule
import org.junit.runner.Description
import org.junit.runners.model.Statement
-import java.io.File
-import java.security.MessageDigest
-import java.util.LinkedList
// TODO(https://github.com/JetBrains/compose-jb/issues/1041): refactor API
diff --git a/compose/ui/ui-test-junit4/src/jvmMain/kotlin/androidx/compose/ui/test/junit4/UncaughtExceptionHandler.jvm.kt b/compose/ui/ui-test-junit4/src/jvmMain/kotlin/androidx/compose/ui/test/junit4/UncaughtExceptionHandler.jvm.kt
index 3a8dda1..9efd549 100644
--- a/compose/ui/ui-test-junit4/src/jvmMain/kotlin/androidx/compose/ui/test/junit4/UncaughtExceptionHandler.jvm.kt
+++ b/compose/ui/ui-test-junit4/src/jvmMain/kotlin/androidx/compose/ui/test/junit4/UncaughtExceptionHandler.jvm.kt
@@ -16,9 +16,9 @@
package androidx.compose.ui.test.junit4
-import kotlinx.coroutines.CoroutineExceptionHandler
import kotlin.coroutines.AbstractCoroutineContextElement
import kotlin.coroutines.CoroutineContext
+import kotlinx.coroutines.CoroutineExceptionHandler
/**
* Similar to [TestCoroutineExceptionHandler], but with clearing all thrown exceptions
diff --git a/compose/ui/ui-test-junit4/src/test/kotlin/androidx/compose/ui/test/junit4/InfiniteAnimationPolicyTest.kt b/compose/ui/ui-test-junit4/src/test/kotlin/androidx/compose/ui/test/junit4/InfiniteAnimationPolicyTest.kt
index c505e085..310bfa7 100644
--- a/compose/ui/ui-test-junit4/src/test/kotlin/androidx/compose/ui/test/junit4/InfiniteAnimationPolicyTest.kt
+++ b/compose/ui/ui-test-junit4/src/test/kotlin/androidx/compose/ui/test/junit4/InfiniteAnimationPolicyTest.kt
@@ -16,8 +16,8 @@
package androidx.compose.ui.test.junit4
-import androidx.compose.animation.core.withInfiniteAnimationFrameNanos
import androidx.compose.animation.core.withInfiniteAnimationFrameMillis
+import androidx.compose.animation.core.withInfiniteAnimationFrameNanos
import androidx.compose.ui.platform.InfiniteAnimationPolicy
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.CancellationException
diff --git a/compose/ui/ui-test/api/current.txt b/compose/ui/ui-test/api/current.txt
index 88c2a89..8f1eda1 100644
--- a/compose/ui/ui-test/api/current.txt
+++ b/compose/ui/ui-test/api/current.txt
@@ -9,10 +9,10 @@
method public static androidx.compose.ui.test.SemanticsNodeInteraction performScrollToIndex(androidx.compose.ui.test.SemanticsNodeInteraction, int index);
method public static androidx.compose.ui.test.SemanticsNodeInteraction performScrollToKey(androidx.compose.ui.test.SemanticsNodeInteraction, Object key);
method public static androidx.compose.ui.test.SemanticsNodeInteraction performScrollToNode(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.test.SemanticsMatcher matcher);
- method public static <T extends kotlin.Function<? extends java.lang.Boolean>> androidx.compose.ui.test.SemanticsNodeInteraction performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<T>> key, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> invocation);
+ method @Deprecated public static void performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<? extends java.lang.Boolean>>> key);
method public static androidx.compose.ui.test.SemanticsNodeInteraction performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> key);
method @Deprecated public static <T extends kotlin.Function<? extends java.lang.Boolean>> void performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<T>> key, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> invocation);
- method @Deprecated public static void performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<? extends java.lang.Boolean>>> key);
+ method public static <T extends kotlin.Function<? extends java.lang.Boolean>> androidx.compose.ui.test.SemanticsNodeInteraction performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<T>> key, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> invocation);
method public static androidx.compose.ui.test.SemanticsNodeInteraction performTouchInput(androidx.compose.ui.test.SemanticsNodeInteraction, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.TouchInjectionScope,kotlin.Unit> block);
}
@@ -311,16 +311,16 @@
}
public final class SemanticsNodeInteraction {
- ctor public SemanticsNodeInteraction(androidx.compose.ui.test.TestContext testContext, boolean useUnmergedTree, androidx.compose.ui.test.SemanticsSelector selector);
ctor public SemanticsNodeInteraction(androidx.compose.ui.test.TestContext testContext, boolean useUnmergedTree, androidx.compose.ui.test.SemanticsMatcher matcher);
+ ctor public SemanticsNodeInteraction(androidx.compose.ui.test.TestContext testContext, boolean useUnmergedTree, androidx.compose.ui.test.SemanticsSelector selector);
method public void assertDoesNotExist();
method public androidx.compose.ui.test.SemanticsNodeInteraction assertExists(optional String? errorMessageOnFail);
method public androidx.compose.ui.semantics.SemanticsNode fetchSemanticsNode(optional String? errorMessageOnFail);
}
public final class SemanticsNodeInteractionCollection {
- ctor public SemanticsNodeInteractionCollection(androidx.compose.ui.test.TestContext testContext, boolean useUnmergedTree, androidx.compose.ui.test.SemanticsSelector selector);
ctor public SemanticsNodeInteractionCollection(androidx.compose.ui.test.TestContext testContext, boolean useUnmergedTree, androidx.compose.ui.test.SemanticsMatcher matcher);
+ ctor public SemanticsNodeInteractionCollection(androidx.compose.ui.test.TestContext testContext, boolean useUnmergedTree, androidx.compose.ui.test.SemanticsSelector selector);
method public java.util.List<androidx.compose.ui.semantics.SemanticsNode> fetchSemanticsNodes(optional boolean atLeastOneRootRequired, optional String? errorMessageOnFail);
method public operator androidx.compose.ui.test.SemanticsNodeInteraction get(int index);
}
@@ -367,8 +367,8 @@
method public static void doubleClick(androidx.compose.ui.test.TouchInjectionScope, optional long position, optional long delayMillis);
method public static void longClick(androidx.compose.ui.test.TouchInjectionScope, optional long position, optional long durationMillis);
method public static void pinch(androidx.compose.ui.test.TouchInjectionScope, long start0, long end0, long start1, long end1, optional long durationMillis);
- method public static void swipe(androidx.compose.ui.test.TouchInjectionScope, long start, long end, optional long durationMillis);
method public static void swipe(androidx.compose.ui.test.TouchInjectionScope, kotlin.jvm.functions.Function1<? super java.lang.Long,androidx.compose.ui.geometry.Offset> curve, long durationMillis, optional java.util.List<java.lang.Long> keyTimes);
+ method public static void swipe(androidx.compose.ui.test.TouchInjectionScope, long start, long end, optional long durationMillis);
method public static void swipeDown(androidx.compose.ui.test.TouchInjectionScope, optional float startY, optional float endY, optional long durationMillis);
method public static void swipeLeft(androidx.compose.ui.test.TouchInjectionScope, optional float startX, optional float endX, optional long durationMillis);
method public static void swipeRight(androidx.compose.ui.test.TouchInjectionScope, optional float startX, optional float endX, optional long durationMillis);
diff --git a/compose/ui/ui-test/api/public_plus_experimental_current.txt b/compose/ui/ui-test/api/public_plus_experimental_current.txt
index 304fcbb..4e9b8d2 100644
--- a/compose/ui/ui-test/api/public_plus_experimental_current.txt
+++ b/compose/ui/ui-test/api/public_plus_experimental_current.txt
@@ -12,10 +12,10 @@
method public static androidx.compose.ui.test.SemanticsNodeInteraction performScrollToIndex(androidx.compose.ui.test.SemanticsNodeInteraction, int index);
method public static androidx.compose.ui.test.SemanticsNodeInteraction performScrollToKey(androidx.compose.ui.test.SemanticsNodeInteraction, Object key);
method public static androidx.compose.ui.test.SemanticsNodeInteraction performScrollToNode(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.test.SemanticsMatcher matcher);
- method public static <T extends kotlin.Function<? extends java.lang.Boolean>> androidx.compose.ui.test.SemanticsNodeInteraction performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<T>> key, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> invocation);
+ method @Deprecated public static void performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<? extends java.lang.Boolean>>> key);
method public static androidx.compose.ui.test.SemanticsNodeInteraction performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> key);
method @Deprecated public static <T extends kotlin.Function<? extends java.lang.Boolean>> void performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<T>> key, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> invocation);
- method @Deprecated public static void performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<? extends java.lang.Boolean>>> key);
+ method public static <T extends kotlin.Function<? extends java.lang.Boolean>> androidx.compose.ui.test.SemanticsNodeInteraction performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<T>> key, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> invocation);
method public static androidx.compose.ui.test.SemanticsNodeInteraction performTouchInput(androidx.compose.ui.test.SemanticsNodeInteraction, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.TouchInjectionScope,kotlin.Unit> block);
}
@@ -390,16 +390,16 @@
}
public final class SemanticsNodeInteraction {
- ctor public SemanticsNodeInteraction(androidx.compose.ui.test.TestContext testContext, boolean useUnmergedTree, androidx.compose.ui.test.SemanticsSelector selector);
ctor public SemanticsNodeInteraction(androidx.compose.ui.test.TestContext testContext, boolean useUnmergedTree, androidx.compose.ui.test.SemanticsMatcher matcher);
+ ctor public SemanticsNodeInteraction(androidx.compose.ui.test.TestContext testContext, boolean useUnmergedTree, androidx.compose.ui.test.SemanticsSelector selector);
method public void assertDoesNotExist();
method public androidx.compose.ui.test.SemanticsNodeInteraction assertExists(optional String? errorMessageOnFail);
method public androidx.compose.ui.semantics.SemanticsNode fetchSemanticsNode(optional String? errorMessageOnFail);
}
public final class SemanticsNodeInteractionCollection {
- ctor public SemanticsNodeInteractionCollection(androidx.compose.ui.test.TestContext testContext, boolean useUnmergedTree, androidx.compose.ui.test.SemanticsSelector selector);
ctor public SemanticsNodeInteractionCollection(androidx.compose.ui.test.TestContext testContext, boolean useUnmergedTree, androidx.compose.ui.test.SemanticsMatcher matcher);
+ ctor public SemanticsNodeInteractionCollection(androidx.compose.ui.test.TestContext testContext, boolean useUnmergedTree, androidx.compose.ui.test.SemanticsSelector selector);
method public java.util.List<androidx.compose.ui.semantics.SemanticsNode> fetchSemanticsNodes(optional boolean atLeastOneRootRequired, optional String? errorMessageOnFail);
method public operator androidx.compose.ui.test.SemanticsNodeInteraction get(int index);
}
@@ -476,8 +476,8 @@
method public static void longClick(androidx.compose.ui.test.TouchInjectionScope, optional long position, optional long durationMillis);
method @androidx.compose.ui.test.ExperimentalTestApi public static void multiTouchSwipe(androidx.compose.ui.test.TouchInjectionScope, java.util.List<? extends kotlin.jvm.functions.Function1<? super java.lang.Long,androidx.compose.ui.geometry.Offset>> curves, long durationMillis, optional java.util.List<java.lang.Long> keyTimes);
method public static void pinch(androidx.compose.ui.test.TouchInjectionScope, long start0, long end0, long start1, long end1, optional long durationMillis);
- method public static void swipe(androidx.compose.ui.test.TouchInjectionScope, long start, long end, optional long durationMillis);
method public static void swipe(androidx.compose.ui.test.TouchInjectionScope, kotlin.jvm.functions.Function1<? super java.lang.Long,androidx.compose.ui.geometry.Offset> curve, long durationMillis, optional java.util.List<java.lang.Long> keyTimes);
+ method public static void swipe(androidx.compose.ui.test.TouchInjectionScope, long start, long end, optional long durationMillis);
method public static void swipeDown(androidx.compose.ui.test.TouchInjectionScope, optional float startY, optional float endY, optional long durationMillis);
method public static void swipeLeft(androidx.compose.ui.test.TouchInjectionScope, optional float startX, optional float endX, optional long durationMillis);
method public static void swipeRight(androidx.compose.ui.test.TouchInjectionScope, optional float startX, optional float endX, optional long durationMillis);
diff --git a/compose/ui/ui-test/api/restricted_current.txt b/compose/ui/ui-test/api/restricted_current.txt
index e62c3ee..020fafb 100644
--- a/compose/ui/ui-test/api/restricted_current.txt
+++ b/compose/ui/ui-test/api/restricted_current.txt
@@ -9,10 +9,10 @@
method public static androidx.compose.ui.test.SemanticsNodeInteraction performScrollToIndex(androidx.compose.ui.test.SemanticsNodeInteraction, int index);
method public static androidx.compose.ui.test.SemanticsNodeInteraction performScrollToKey(androidx.compose.ui.test.SemanticsNodeInteraction, Object key);
method public static androidx.compose.ui.test.SemanticsNodeInteraction performScrollToNode(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.test.SemanticsMatcher matcher);
- method public static <T extends kotlin.Function<? extends java.lang.Boolean>> androidx.compose.ui.test.SemanticsNodeInteraction performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<T>> key, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> invocation);
+ method @Deprecated public static void performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<? extends java.lang.Boolean>>> key);
method public static androidx.compose.ui.test.SemanticsNodeInteraction performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> key);
method @Deprecated public static <T extends kotlin.Function<? extends java.lang.Boolean>> void performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<T>> key, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> invocation);
- method @Deprecated public static void performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<? extends java.lang.Boolean>>> key);
+ method public static <T extends kotlin.Function<? extends java.lang.Boolean>> androidx.compose.ui.test.SemanticsNodeInteraction performSemanticsAction(androidx.compose.ui.test.SemanticsNodeInteraction, androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.semantics.AccessibilityAction<T>> key, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> invocation);
method public static androidx.compose.ui.test.SemanticsNodeInteraction performTouchInput(androidx.compose.ui.test.SemanticsNodeInteraction, kotlin.jvm.functions.Function1<? super androidx.compose.ui.test.TouchInjectionScope,kotlin.Unit> block);
}
@@ -312,16 +312,16 @@
}
public final class SemanticsNodeInteraction {
- ctor public SemanticsNodeInteraction(androidx.compose.ui.test.TestContext testContext, boolean useUnmergedTree, androidx.compose.ui.test.SemanticsSelector selector);
ctor public SemanticsNodeInteraction(androidx.compose.ui.test.TestContext testContext, boolean useUnmergedTree, androidx.compose.ui.test.SemanticsMatcher matcher);
+ ctor public SemanticsNodeInteraction(androidx.compose.ui.test.TestContext testContext, boolean useUnmergedTree, androidx.compose.ui.test.SemanticsSelector selector);
method public void assertDoesNotExist();
method public androidx.compose.ui.test.SemanticsNodeInteraction assertExists(optional String? errorMessageOnFail);
method public androidx.compose.ui.semantics.SemanticsNode fetchSemanticsNode(optional String? errorMessageOnFail);
}
public final class SemanticsNodeInteractionCollection {
- ctor public SemanticsNodeInteractionCollection(androidx.compose.ui.test.TestContext testContext, boolean useUnmergedTree, androidx.compose.ui.test.SemanticsSelector selector);
ctor public SemanticsNodeInteractionCollection(androidx.compose.ui.test.TestContext testContext, boolean useUnmergedTree, androidx.compose.ui.test.SemanticsMatcher matcher);
+ ctor public SemanticsNodeInteractionCollection(androidx.compose.ui.test.TestContext testContext, boolean useUnmergedTree, androidx.compose.ui.test.SemanticsSelector selector);
method public java.util.List<androidx.compose.ui.semantics.SemanticsNode> fetchSemanticsNodes(optional boolean atLeastOneRootRequired, optional String? errorMessageOnFail);
method public operator androidx.compose.ui.test.SemanticsNodeInteraction get(int index);
}
@@ -368,8 +368,8 @@
method public static void doubleClick(androidx.compose.ui.test.TouchInjectionScope, optional long position, optional long delayMillis);
method public static void longClick(androidx.compose.ui.test.TouchInjectionScope, optional long position, optional long durationMillis);
method public static void pinch(androidx.compose.ui.test.TouchInjectionScope, long start0, long end0, long start1, long end1, optional long durationMillis);
- method public static void swipe(androidx.compose.ui.test.TouchInjectionScope, long start, long end, optional long durationMillis);
method public static void swipe(androidx.compose.ui.test.TouchInjectionScope, kotlin.jvm.functions.Function1<? super java.lang.Long,androidx.compose.ui.geometry.Offset> curve, long durationMillis, optional java.util.List<java.lang.Long> keyTimes);
+ method public static void swipe(androidx.compose.ui.test.TouchInjectionScope, long start, long end, optional long durationMillis);
method public static void swipeDown(androidx.compose.ui.test.TouchInjectionScope, optional float startY, optional float endY, optional long durationMillis);
method public static void swipeLeft(androidx.compose.ui.test.TouchInjectionScope, optional float startX, optional float endX, optional long durationMillis);
method public static void swipeRight(androidx.compose.ui.test.TouchInjectionScope, optional float startX, optional float endX, optional long durationMillis);
diff --git a/compose/ui/ui-test/samples/build.gradle b/compose/ui/ui-test/samples/build.gradle
index 668bb91..0845c78 100644
--- a/compose/ui/ui-test/samples/build.gradle
+++ b/compose/ui/ui-test/samples/build.gradle
@@ -38,7 +38,7 @@
}
androidx {
- name = "AndroidX Compose Testing Samples"
+ name = "Compose Testing Samples"
type = LibraryType.SAMPLES
inceptionYear = "2022"
description = "Contains samples for AndroidX Compose Testing."
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/CallSemanticsActionTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/CallSemanticsActionTest.kt
index a354f96..a380a02 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/CallSemanticsActionTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/CallSemanticsActionTest.kt
@@ -27,11 +27,11 @@
import androidx.compose.ui.semantics.contentDescription
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/FindAllTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/FindAllTest.kt
index 0cedb3f..2479e17 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/FindAllTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/FindAllTest.kt
@@ -23,11 +23,11 @@
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/FindInPopupTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/FindInPopupTest.kt
index 835d945..0ce4aaa 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/FindInPopupTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/FindInPopupTest.kt
@@ -22,11 +22,11 @@
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.window.Popup
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
private const val contentTag = "content"
private const val popupTag = "popup"
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/FindersTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/FindersTest.kt
index 5b58bec..0a19723 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/FindersTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/FindersTest.kt
@@ -20,21 +20,21 @@
import androidx.compose.foundation.layout.Column
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
+import androidx.compose.testutils.expectError
import androidx.compose.ui.Modifier
import androidx.compose.ui.semantics.SemanticsPropertyReceiver
+import androidx.compose.ui.semantics.contentDescription
+import androidx.compose.ui.semantics.editableText
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.semantics.testTag
import androidx.compose.ui.semantics.text
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.text.AnnotatedString
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
-import androidx.compose.testutils.expectError
-import androidx.compose.ui.semantics.contentDescription
-import androidx.compose.ui.semantics.editableText
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/TextActionsTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/TextActionsTest.kt
index 54c4bc2..f91c060 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/TextActionsTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/TextActionsTest.kt
@@ -280,7 +280,7 @@
setText { true }
requestFocus { true }
insertTextAtCursor { true }
- performImeAction { false }
+ performImeAction(ImeAction.Done) { false }
})
}
@@ -314,7 +314,7 @@
rule.setContent {
BoundaryNode(testTag = "node", Modifier.semantics {
setText { true }
- performImeAction { true }
+ performImeAction(ImeAction.Done) { true }
})
}
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/assertions/AssertAllTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/assertions/AssertAllTest.kt
index 3ee7a82..8b5f6d9 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/assertions/AssertAllTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/assertions/AssertAllTest.kt
@@ -18,17 +18,17 @@
import androidx.compose.ui.test.assertAll
import androidx.compose.ui.test.assertCountEquals
-import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.hasTestTag
+import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onChildren
import androidx.compose.ui.test.onNodeWithTag
-import androidx.test.filters.MediumTest
import androidx.compose.ui.test.util.BoundaryNode
import androidx.compose.ui.test.util.expectErrorMessageStartsWith
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/assertions/AssertAnyTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/assertions/AssertAnyTest.kt
index 2d6f01c..50a9ca0 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/assertions/AssertAnyTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/assertions/AssertAnyTest.kt
@@ -16,18 +16,18 @@
package androidx.compose.ui.test.assertions
-import androidx.test.filters.MediumTest
import androidx.compose.ui.test.assertAny
-import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.hasTestTag
+import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onChildren
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.util.BoundaryNode
import androidx.compose.ui.test.util.expectErrorMessageStartsWith
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/assertions/AssertContentDescription.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/assertions/AssertContentDescription.kt
index 3076fa0..876c983 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/assertions/AssertContentDescription.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/assertions/AssertContentDescription.kt
@@ -26,11 +26,11 @@
import androidx.compose.ui.test.assertContentDescriptionEquals
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onNodeWithTag
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/assertions/AssertText.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/assertions/AssertText.kt
index 01ee757..2649649 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/assertions/AssertText.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/assertions/AssertText.kt
@@ -31,11 +31,11 @@
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.text.AnnotatedString
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/gesturescope/SendSwipeTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/gesturescope/SendSwipeTest.kt
index ec61d21..e55845f 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/gesturescope/SendSwipeTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/gesturescope/SendSwipeTest.kt
@@ -64,10 +64,10 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
+import kotlin.math.roundToInt
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.math.roundToInt
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/gesturescope/SendSwipeVelocityTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/gesturescope/SendSwipeVelocityTest.kt
index a23987f..42b4dcd 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/gesturescope/SendSwipeVelocityTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/gesturescope/SendSwipeVelocityTest.kt
@@ -37,11 +37,11 @@
import androidx.compose.ui.test.util.recordedDurationMillis
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
+import kotlin.math.max
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import kotlin.math.max
/**
* Tests if we can generate gestures that end with a specific velocity
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/LongClickTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/LongClickTest.kt
index 6ba723d..9a3f36c 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/LongClickTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/LongClickTest.kt
@@ -44,13 +44,13 @@
import androidx.compose.ui.test.util.verify
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
+import kotlin.math.max
+import kotlin.math.roundToInt
+import kotlin.math.roundToLong
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import kotlin.math.max
-import kotlin.math.roundToInt
-import kotlin.math.roundToLong
/**
* Tests [TouchInjectionScope.longClick] with arguments. Verifies that the click is in the middle
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/MoveWithHistoryTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/MoveWithHistoryTest.kt
index 9e60740..ca75c82 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/MoveWithHistoryTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/MoveWithHistoryTest.kt
@@ -39,10 +39,10 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth
+import kotlin.math.roundToInt
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.math.roundToInt
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/SwipeWithTouchSlopTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/SwipeWithTouchSlopTest.kt
index 4c447ad..c1cdadc 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/SwipeWithTouchSlopTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/SwipeWithTouchSlopTest.kt
@@ -32,10 +32,10 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
+import kotlin.math.roundToInt
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.math.roundToInt
/**
* Test to see if we can achieve precise scroll motion when injecting touch events in the
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/SwipeWithVelocityTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/SwipeWithVelocityTest.kt
index 6bf7069..5925354 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/SwipeWithVelocityTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/SwipeWithVelocityTest.kt
@@ -40,11 +40,11 @@
import androidx.compose.ui.test.util.recordedDurationMillis
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
+import kotlin.math.max
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import kotlin.math.max
/**
* Test for [TouchInjectionScope.swipeWithVelocity] to see if we can generate gestures that end
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/VelocityPathFinderCalculateDurationTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/VelocityPathFinderCalculateDurationTest.kt
index aa7c8fd..c6bc9a6 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/VelocityPathFinderCalculateDurationTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/VelocityPathFinderCalculateDurationTest.kt
@@ -26,14 +26,14 @@
import androidx.compose.ui.unit.Velocity
import androidx.compose.ui.util.lerp
import com.google.common.truth.Truth.assertThat
-import org.junit.Assert.fail
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.Parameterized
import java.lang.IllegalArgumentException
import kotlin.math.max
import kotlin.math.roundToInt
import kotlin.math.sqrt
+import org.junit.Assert.fail
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
/**
* Test to check if [VelocityPathFinder.calculateDefaultDuration] calculates a duration for
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/VelocityPathFinderTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/VelocityPathFinderTest.kt
index 87832cc..f213055 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/VelocityPathFinderTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/injectionscope/touch/VelocityPathFinderTest.kt
@@ -26,14 +26,14 @@
import androidx.compose.ui.unit.Velocity
import androidx.compose.ui.util.lerp
import com.google.common.truth.Truth.assertThat
-import org.junit.Assert.fail
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.Parameterized
import kotlin.math.floor
import kotlin.math.max
import kotlin.math.roundToInt
import kotlin.math.sqrt
+import org.junit.Assert.fail
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
/**
* Tests of [VelocityPathFinder] creates paths that will lead to the desired velocity.
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/partialgesturescope/Common.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/partialgesturescope/Common.kt
index e32a432..924b49d 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/partialgesturescope/Common.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/partialgesturescope/Common.kt
@@ -19,8 +19,8 @@
package androidx.compose.ui.test.partialgesturescope
-import androidx.compose.ui.test.junit4.ComposeTestRule
import androidx.compose.ui.test.GestureScope
+import androidx.compose.ui.test.junit4.ComposeTestRule
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.performGesture
import androidx.compose.ui.test.util.ClickableTestBox.defaultTag
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/predicates/HasAnyAncestorTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/predicates/HasAnyAncestorTest.kt
index 40549c6..df67328 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/predicates/HasAnyAncestorTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/predicates/HasAnyAncestorTest.kt
@@ -16,17 +16,17 @@
package androidx.compose.ui.test.predicates
-import androidx.test.filters.MediumTest
import androidx.compose.ui.test.assert
import androidx.compose.ui.test.assertCountEquals
-import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.hasAnyAncestor
import androidx.compose.ui.test.hasTestTag
+import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.util.BoundaryNode
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/predicates/HasAnyChildTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/predicates/HasAnyChildTest.kt
index eaab244..b6c1c80 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/predicates/HasAnyChildTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/predicates/HasAnyChildTest.kt
@@ -16,17 +16,17 @@
package androidx.compose.ui.test.predicates
-import androidx.test.filters.MediumTest
import androidx.compose.ui.test.assert
import androidx.compose.ui.test.assertCountEquals
-import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.hasAnyChild
import androidx.compose.ui.test.hasTestTag
+import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.util.BoundaryNode
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/predicates/HasAnyDescendantTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/predicates/HasAnyDescendantTest.kt
index 6e5483fa..c98ec7f 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/predicates/HasAnyDescendantTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/predicates/HasAnyDescendantTest.kt
@@ -16,17 +16,17 @@
package androidx.compose.ui.test.predicates
-import androidx.test.filters.MediumTest
import androidx.compose.ui.test.assert
import androidx.compose.ui.test.assertCountEquals
-import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.hasAnyDescendant
import androidx.compose.ui.test.hasTestTag
+import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.util.BoundaryNode
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/predicates/HasAnySiblingTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/predicates/HasAnySiblingTest.kt
index 9f760a7..5178fee 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/predicates/HasAnySiblingTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/predicates/HasAnySiblingTest.kt
@@ -16,18 +16,18 @@
package androidx.compose.ui.test.predicates
-import androidx.test.filters.MediumTest
import androidx.compose.ui.test.assert
import androidx.compose.ui.test.assertCountEquals
-import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.hasAnySibling
import androidx.compose.ui.test.hasParent
import androidx.compose.ui.test.hasTestTag
+import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.util.BoundaryNode
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/predicates/HasParentTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/predicates/HasParentTest.kt
index 3c3a2ae..0ecda22 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/predicates/HasParentTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/predicates/HasParentTest.kt
@@ -16,17 +16,17 @@
package androidx.compose.ui.test.predicates
-import androidx.test.filters.MediumTest
import androidx.compose.ui.test.assert
import androidx.compose.ui.test.assertCountEquals
-import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.hasParent
import androidx.compose.ui.test.hasTestTag
+import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.util.BoundaryNode
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/AddIndexSelectorTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/AddIndexSelectorTest.kt
index f7f6aba..faef8f6 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/AddIndexSelectorTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/AddIndexSelectorTest.kt
@@ -16,20 +16,20 @@
package androidx.compose.ui.test.selectors
-import androidx.test.filters.MediumTest
import androidx.compose.ui.test.assert
-import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.hasTestTag
+import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onChildAt
import androidx.compose.ui.test.onChildren
import androidx.compose.ui.test.onFirst
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.util.BoundaryNode
import androidx.compose.ui.test.util.expectErrorMessageStartsWith
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/AncestorsSelectorTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/AncestorsSelectorTest.kt
index cb28f4c..8b35a6e 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/AncestorsSelectorTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/AncestorsSelectorTest.kt
@@ -16,20 +16,20 @@
package androidx.compose.ui.test.selectors
-import androidx.test.filters.MediumTest
import androidx.compose.ui.test.assert
import androidx.compose.ui.test.assertCountEquals
-import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.hasTestTag
+import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onAncestors
import androidx.compose.ui.test.onFirst
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.onParent
import androidx.compose.ui.test.util.BoundaryNode
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/ChildSelectorTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/ChildSelectorTest.kt
index b1ca854..22e9c6a 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/ChildSelectorTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/ChildSelectorTest.kt
@@ -16,18 +16,18 @@
package androidx.compose.ui.test.selectors
-import androidx.test.filters.MediumTest
import androidx.compose.ui.test.assert
-import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.hasTestTag
+import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onChild
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.util.BoundaryNode
import androidx.compose.ui.test.util.expectErrorMessageStartsWith
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/ChildrenSelectorTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/ChildrenSelectorTest.kt
index 1c10a00..0403487 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/ChildrenSelectorTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/ChildrenSelectorTest.kt
@@ -16,18 +16,18 @@
package androidx.compose.ui.test.selectors
-import androidx.test.filters.MediumTest
import androidx.compose.ui.test.assert
import androidx.compose.ui.test.assertCountEquals
-import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.hasTestTag
+import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onChildren
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.util.BoundaryNode
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/FilterSelectorTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/FilterSelectorTest.kt
index e934f88..4a78db7 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/FilterSelectorTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/FilterSelectorTest.kt
@@ -16,19 +16,19 @@
package androidx.compose.ui.test.selectors
-import androidx.test.filters.MediumTest
import androidx.compose.ui.test.assert
import androidx.compose.ui.test.assertCountEquals
-import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.filter
import androidx.compose.ui.test.hasTestTag
+import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onChildren
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.util.BoundaryNode
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/FilterToOneSelectorTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/FilterToOneSelectorTest.kt
index a5f8fa1..129c653 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/FilterToOneSelectorTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/FilterToOneSelectorTest.kt
@@ -16,19 +16,19 @@
package androidx.compose.ui.test.selectors
-import androidx.test.filters.MediumTest
import androidx.compose.ui.test.assert
-import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.filterToOne
import androidx.compose.ui.test.hasTestTag
+import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onChildren
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.util.BoundaryNode
import androidx.compose.ui.test.util.expectErrorMessageStartsWith
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/LastNodeSelectorTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/LastNodeSelectorTest.kt
index 61f4fb0..a78777d 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/LastNodeSelectorTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/LastNodeSelectorTest.kt
@@ -16,19 +16,19 @@
package androidx.compose.ui.test.selectors
-import androidx.test.filters.MediumTest
import androidx.compose.ui.test.assert
-import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.hasTestTag
+import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onChildren
import androidx.compose.ui.test.onLast
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.util.BoundaryNode
import androidx.compose.ui.test.util.expectErrorMessageStartsWith
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/ParentSelectorTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/ParentSelectorTest.kt
index b110fae..1733f78 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/ParentSelectorTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/ParentSelectorTest.kt
@@ -16,18 +16,18 @@
package androidx.compose.ui.test.selectors
-import androidx.test.filters.MediumTest
import androidx.compose.ui.test.assert
-import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.hasTestTag
+import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.onParent
import androidx.compose.ui.test.util.BoundaryNode
import androidx.compose.ui.test.util.expectErrorMessage
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/SiblingSelectorTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/SiblingSelectorTest.kt
index e88d44a..aeefb12 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/SiblingSelectorTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/SiblingSelectorTest.kt
@@ -16,18 +16,18 @@
package androidx.compose.ui.test.selectors
-import androidx.test.filters.MediumTest
import androidx.compose.ui.test.assert
-import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.hasTestTag
+import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.onSibling
import androidx.compose.ui.test.util.BoundaryNode
import androidx.compose.ui.test.util.expectErrorMessageStartsWith
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/SiblingsSelectorTest.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/SiblingsSelectorTest.kt
index f054b8f..7332ead 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/SiblingsSelectorTest.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/selectors/SiblingsSelectorTest.kt
@@ -16,18 +16,18 @@
package androidx.compose.ui.test.selectors
-import androidx.test.filters.MediumTest
import androidx.compose.ui.test.assert
import androidx.compose.ui.test.assertCountEquals
-import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.hasTestTag
+import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.onSiblings
import androidx.compose.ui.test.util.BoundaryNode
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/util/ClickableTestBox.kt b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/util/ClickableTestBox.kt
index 8c40101..69d84dc 100644
--- a/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/util/ClickableTestBox.kt
+++ b/compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/util/ClickableTestBox.kt
@@ -16,8 +16,8 @@
package androidx.compose.ui.test.util
-import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.requiredSize
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
diff --git a/compose/ui/ui-test/src/androidMain/kotlin/androidx/compose/ui/test/AndroidAssertions.android.kt b/compose/ui/ui-test/src/androidMain/kotlin/androidx/compose/ui/test/AndroidAssertions.android.kt
index 2f13281..d354263 100644
--- a/compose/ui/ui-test/src/androidMain/kotlin/androidx/compose/ui/test/AndroidAssertions.android.kt
+++ b/compose/ui/ui-test/src/androidMain/kotlin/androidx/compose/ui/test/AndroidAssertions.android.kt
@@ -16,12 +16,12 @@
package androidx.compose.ui.test
-import androidx.test.espresso.matcher.ViewMatchers
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Rect
import androidx.compose.ui.layout.LayoutInfo
import androidx.compose.ui.platform.ViewRootForTest
import androidx.compose.ui.semantics.SemanticsNode
+import androidx.test.espresso.matcher.ViewMatchers
internal actual fun SemanticsNodeInteraction.checkIsDisplayed(): Boolean {
// hierarchy check - check layout nodes are visible
diff --git a/compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/InjectionScope.kt b/compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/InjectionScope.kt
index fb0f6a7..86b9c7c 100644
--- a/compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/InjectionScope.kt
+++ b/compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/InjectionScope.kt
@@ -18,9 +18,9 @@
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.platform.ViewConfiguration
+import androidx.compose.ui.test.internal.JvmDefaultWithCompatibility
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.IntSize
-import androidx.compose.ui.test.internal.JvmDefaultWithCompatibility
/**
* The receiver scope of all input injection lambdas offered in `ui-test`, such as
diff --git a/compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/TouchInjectionScope.kt b/compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/TouchInjectionScope.kt
index 3bcf792..d1f5822 100644
--- a/compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/TouchInjectionScope.kt
+++ b/compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/TouchInjectionScope.kt
@@ -19,12 +19,12 @@
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.lerp
import androidx.compose.ui.platform.ViewConfiguration
+import androidx.compose.ui.test.internal.JvmDefaultWithCompatibility
import androidx.compose.ui.util.lerp
import kotlin.math.ceil
import kotlin.math.max
import kotlin.math.roundToInt
import kotlin.math.roundToLong
-import androidx.compose.ui.test.internal.JvmDefaultWithCompatibility
/**
* The receiver scope of the touch input injection lambda from [performTouchInput].
diff --git a/compose/ui/ui-test/src/desktopMain/kotlin/androidx/compose/ui/test/DesktopInputDispatcher.desktop.kt b/compose/ui/ui-test/src/desktopMain/kotlin/androidx/compose/ui/test/DesktopInputDispatcher.desktop.kt
index 80c5334..1d82eff 100644
--- a/compose/ui/ui-test/src/desktopMain/kotlin/androidx/compose/ui/test/DesktopInputDispatcher.desktop.kt
+++ b/compose/ui/ui-test/src/desktopMain/kotlin/androidx/compose/ui/test/DesktopInputDispatcher.desktop.kt
@@ -19,10 +19,10 @@
package androidx.compose.ui.test
import androidx.compose.ui.InternalComposeUiApi
+import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.input.key.Key
import androidx.compose.ui.input.pointer.PointerId
import androidx.compose.ui.input.pointer.TestPointerInputEventData
-import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.node.RootForTest
import androidx.compose.ui.platform.SkiaRootForTest
diff --git a/compose/ui/ui-test/src/test/kotlin/androidx/compose/ui/test/inputdispatcher/InputDispatcherTest.kt b/compose/ui/ui-test/src/test/kotlin/androidx/compose/ui/test/inputdispatcher/InputDispatcherTest.kt
index a86efdb..30174dd 100644
--- a/compose/ui/ui-test/src/test/kotlin/androidx/compose/ui/test/inputdispatcher/InputDispatcherTest.kt
+++ b/compose/ui/ui-test/src/test/kotlin/androidx/compose/ui/test/inputdispatcher/InputDispatcherTest.kt
@@ -31,10 +31,10 @@
import androidx.compose.ui.test.util.InputEventRecorder
import androidx.compose.ui.test.util.assertNoTouchGestureInProgress
import com.google.common.truth.Truth.assertThat
+import org.junit.After
import org.mockito.kotlin.any
import org.mockito.kotlin.doReturn
import org.mockito.kotlin.mock
-import org.junit.After
@OptIn(InternalTestApi::class)
open class InputDispatcherTest {
diff --git a/compose/ui/ui-text-google-fonts/api/current.txt b/compose/ui/ui-text-google-fonts/api/current.txt
index b93d5c2..0321970 100644
--- a/compose/ui/ui-text-google-fonts/api/current.txt
+++ b/compose/ui/ui-text-google-fonts/api/current.txt
@@ -10,8 +10,8 @@
}
public static final class GoogleFont.Provider {
- ctor public GoogleFont.Provider(String providerAuthority, String providerPackage, java.util.List<? extends java.util.List<byte[]>> certificates);
ctor public GoogleFont.Provider(String providerAuthority, String providerPackage, @ArrayRes int certificates);
+ ctor public GoogleFont.Provider(String providerAuthority, String providerPackage, java.util.List<? extends java.util.List<byte[]>> certificates);
}
public final class GoogleFontKt {
diff --git a/compose/ui/ui-text-google-fonts/api/public_plus_experimental_current.txt b/compose/ui/ui-text-google-fonts/api/public_plus_experimental_current.txt
index b93d5c2..0321970 100644
--- a/compose/ui/ui-text-google-fonts/api/public_plus_experimental_current.txt
+++ b/compose/ui/ui-text-google-fonts/api/public_plus_experimental_current.txt
@@ -10,8 +10,8 @@
}
public static final class GoogleFont.Provider {
- ctor public GoogleFont.Provider(String providerAuthority, String providerPackage, java.util.List<? extends java.util.List<byte[]>> certificates);
ctor public GoogleFont.Provider(String providerAuthority, String providerPackage, @ArrayRes int certificates);
+ ctor public GoogleFont.Provider(String providerAuthority, String providerPackage, java.util.List<? extends java.util.List<byte[]>> certificates);
}
public final class GoogleFontKt {
diff --git a/compose/ui/ui-text-google-fonts/api/restricted_current.txt b/compose/ui/ui-text-google-fonts/api/restricted_current.txt
index b93d5c2..0321970 100644
--- a/compose/ui/ui-text-google-fonts/api/restricted_current.txt
+++ b/compose/ui/ui-text-google-fonts/api/restricted_current.txt
@@ -10,8 +10,8 @@
}
public static final class GoogleFont.Provider {
- ctor public GoogleFont.Provider(String providerAuthority, String providerPackage, java.util.List<? extends java.util.List<byte[]>> certificates);
ctor public GoogleFont.Provider(String providerAuthority, String providerPackage, @ArrayRes int certificates);
+ ctor public GoogleFont.Provider(String providerAuthority, String providerPackage, java.util.List<? extends java.util.List<byte[]>> certificates);
}
public final class GoogleFontKt {
diff --git a/compose/ui/ui-text-google-fonts/build.gradle b/compose/ui/ui-text-google-fonts/build.gradle
index d8c49be..f557000 100644
--- a/compose/ui/ui-text-google-fonts/build.gradle
+++ b/compose/ui/ui-text-google-fonts/build.gradle
@@ -42,7 +42,7 @@
}
androidx {
- name = "AndroidX Compose Google Fonts integration"
+ name = "Compose Google Fonts integration"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2022"
description = "Compose Downloadable Fonts integration for Google Fonts"
diff --git a/compose/ui/ui-text/api/current.txt b/compose/ui/ui-text/api/current.txt
index 09ac6ba..4a40acd 100644
--- a/compose/ui/ui-text/api/current.txt
+++ b/compose/ui/ui-text/api/current.txt
@@ -12,8 +12,8 @@
method public int getLength();
method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> getParagraphStyles();
method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> getSpanStyles();
- method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(String tag, int start, int end);
method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(int start, int end);
+ method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(String tag, int start, int end);
method public String getText();
method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.TtsAnnotation>> getTtsAnnotations(int start, int end);
method public boolean hasStringAnnotations(String tag, int start, int end);
@@ -27,33 +27,33 @@
}
public static final class AnnotatedString.Builder implements java.lang.Appendable {
+ ctor public AnnotatedString.Builder(androidx.compose.ui.text.AnnotatedString text);
ctor public AnnotatedString.Builder(optional int capacity);
ctor public AnnotatedString.Builder(String text);
- ctor public AnnotatedString.Builder(androidx.compose.ui.text.AnnotatedString text);
method public void addStringAnnotation(String tag, String annotation, int start, int end);
- method public void addStyle(androidx.compose.ui.text.SpanStyle style, int start, int end);
method public void addStyle(androidx.compose.ui.text.ParagraphStyle style, int start, int end);
- method public void append(String text);
- method public androidx.compose.ui.text.AnnotatedString.Builder append(CharSequence? text);
- method public androidx.compose.ui.text.AnnotatedString.Builder append(CharSequence? text, int start, int end);
- method public androidx.compose.ui.text.AnnotatedString.Builder append(char char);
+ method public void addStyle(androidx.compose.ui.text.SpanStyle style, int start, int end);
method public void append(androidx.compose.ui.text.AnnotatedString text);
method public void append(androidx.compose.ui.text.AnnotatedString text, int start, int end);
+ method public androidx.compose.ui.text.AnnotatedString.Builder append(char char);
method @Deprecated public void append(char char);
+ method public androidx.compose.ui.text.AnnotatedString.Builder append(CharSequence? text);
+ method public androidx.compose.ui.text.AnnotatedString.Builder append(CharSequence? text, int start, int end);
+ method public void append(String text);
method public int getLength();
method public void pop();
method public void pop(int index);
method public int pushStringAnnotation(String tag, String annotation);
- method public int pushStyle(androidx.compose.ui.text.SpanStyle style);
method public int pushStyle(androidx.compose.ui.text.ParagraphStyle style);
+ method public int pushStyle(androidx.compose.ui.text.SpanStyle style);
method public int pushTtsAnnotation(androidx.compose.ui.text.TtsAnnotation ttsAnnotation);
method public androidx.compose.ui.text.AnnotatedString toAnnotatedString();
property public final int length;
}
@androidx.compose.runtime.Immutable public static final class AnnotatedString.Range<T> {
- ctor public AnnotatedString.Range(T item, int start, int end, String tag);
ctor public AnnotatedString.Range(T item, int start, int end);
+ ctor public AnnotatedString.Range(T item, int start, int end, String tag);
method public T component1();
method public int component2();
method public int component3();
@@ -70,15 +70,15 @@
}
public final class AnnotatedStringKt {
- method public static androidx.compose.ui.text.AnnotatedString AnnotatedString(String text, androidx.compose.ui.text.SpanStyle spanStyle, optional androidx.compose.ui.text.ParagraphStyle? paragraphStyle);
method public static androidx.compose.ui.text.AnnotatedString AnnotatedString(String text, androidx.compose.ui.text.ParagraphStyle paragraphStyle);
+ method public static androidx.compose.ui.text.AnnotatedString AnnotatedString(String text, androidx.compose.ui.text.SpanStyle spanStyle, optional androidx.compose.ui.text.ParagraphStyle? paragraphStyle);
method public static inline androidx.compose.ui.text.AnnotatedString buildAnnotatedString(kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,kotlin.Unit> builder);
method public static androidx.compose.ui.text.AnnotatedString capitalize(androidx.compose.ui.text.AnnotatedString, optional androidx.compose.ui.text.intl.LocaleList localeList);
method public static androidx.compose.ui.text.AnnotatedString decapitalize(androidx.compose.ui.text.AnnotatedString, optional androidx.compose.ui.text.intl.LocaleList localeList);
method public static androidx.compose.ui.text.AnnotatedString toLowerCase(androidx.compose.ui.text.AnnotatedString, optional androidx.compose.ui.text.intl.LocaleList localeList);
method public static androidx.compose.ui.text.AnnotatedString toUpperCase(androidx.compose.ui.text.AnnotatedString, optional androidx.compose.ui.text.intl.LocaleList localeList);
- method public static inline <R> R withStyle(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.SpanStyle style, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
method public static inline <R> R withStyle(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.ParagraphStyle style, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
+ method public static inline <R> R withStyle(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.SpanStyle style, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
}
@kotlin.jvm.JvmInline public final value class EmojiSupportMatch {
@@ -93,11 +93,11 @@
}
public final class MultiParagraph {
- ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, long constraints, optional int maxLines, optional boolean ellipsis);
- ctor @Deprecated public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, optional int maxLines, optional boolean ellipsis, float width);
- ctor @Deprecated public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
ctor @Deprecated public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis);
+ ctor @Deprecated public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, long constraints, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis);
+ ctor @Deprecated public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, optional int maxLines, optional boolean ellipsis, float width);
+ ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, long constraints, optional int maxLines, optional boolean ellipsis);
method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
@@ -128,9 +128,9 @@
method public float getWidth();
method public long getWordBoundary(int offset);
method public boolean isLineEllipsized(int lineIndex);
- method public void paint(androidx.compose.ui.graphics.Canvas canvas, optional long color, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? decoration, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional int blendMode);
method public void paint(androidx.compose.ui.graphics.Canvas canvas, androidx.compose.ui.graphics.Brush brush, optional float alpha, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? decoration, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional int blendMode);
method @Deprecated public void paint(androidx.compose.ui.graphics.Canvas canvas, optional long color, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? decoration);
+ method public void paint(androidx.compose.ui.graphics.Canvas canvas, optional long color, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? decoration, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional int blendMode);
property public final boolean didExceedMaxLines;
property public final float firstBaseline;
property public final float height;
@@ -145,8 +145,8 @@
}
public final class MultiParagraphIntrinsics implements androidx.compose.ui.text.ParagraphIntrinsics {
- ctor public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver);
ctor @Deprecated public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+ ctor public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver);
method public androidx.compose.ui.text.AnnotatedString getAnnotatedString();
method public float getMaxIntrinsicWidth();
method public float getMinIntrinsicWidth();
@@ -187,9 +187,9 @@
method public float getWidth();
method public long getWordBoundary(int offset);
method public boolean isLineEllipsized(int lineIndex);
+ method public void paint(androidx.compose.ui.graphics.Canvas canvas, androidx.compose.ui.graphics.Brush brush, float alpha, androidx.compose.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, int blendMode);
method public void paint(androidx.compose.ui.graphics.Canvas canvas, long color, androidx.compose.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextDecoration? textDecoration);
method public void paint(androidx.compose.ui.graphics.Canvas canvas, long color, androidx.compose.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, int blendMode);
- method public void paint(androidx.compose.ui.graphics.Canvas canvas, androidx.compose.ui.graphics.Brush brush, float alpha, androidx.compose.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, int blendMode);
property public abstract boolean didExceedMaxLines;
property public abstract float firstBaseline;
property public abstract float height;
@@ -216,22 +216,22 @@
}
public final class ParagraphKt {
- method @Deprecated public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
- method @Deprecated public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis);
- method public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, long constraints, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis);
method @Deprecated public static androidx.compose.ui.text.Paragraph Paragraph(androidx.compose.ui.text.ParagraphIntrinsics paragraphIntrinsics, optional int maxLines, optional boolean ellipsis, float width);
method public static androidx.compose.ui.text.Paragraph Paragraph(androidx.compose.ui.text.ParagraphIntrinsics paragraphIntrinsics, long constraints, optional int maxLines, optional boolean ellipsis);
+ method @Deprecated public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis);
+ method @Deprecated public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+ method public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, long constraints, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis);
}
@androidx.compose.runtime.Immutable public final class ParagraphStyle {
- ctor public ParagraphStyle(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
ctor @Deprecated public ParagraphStyle(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent);
ctor @Deprecated public ParagraphStyle(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle);
ctor @Deprecated public ParagraphStyle(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
- method public androidx.compose.ui.text.ParagraphStyle copy(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
+ ctor public ParagraphStyle(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
method @Deprecated public androidx.compose.ui.text.ParagraphStyle copy(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent);
method @Deprecated public androidx.compose.ui.text.ParagraphStyle copy(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle);
method @Deprecated public androidx.compose.ui.text.ParagraphStyle copy(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
+ method public androidx.compose.ui.text.ParagraphStyle copy(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
method public androidx.compose.ui.text.style.Hyphens? getHyphens();
method public androidx.compose.ui.text.style.LineBreak? getLineBreak();
method public long getLineHeight();
@@ -292,8 +292,8 @@
public final class PlatformParagraphStyle {
ctor public PlatformParagraphStyle(optional boolean includeFontPadding);
- ctor public PlatformParagraphStyle(optional int emojiSupportMatch, optional boolean includeFontPadding);
ctor public PlatformParagraphStyle(optional int emojiSupportMatch);
+ ctor public PlatformParagraphStyle(optional int emojiSupportMatch, optional boolean includeFontPadding);
method public int getEmojiSupportMatch();
method public boolean getIncludeFontPadding();
method public androidx.compose.ui.text.PlatformParagraphStyle merge(androidx.compose.ui.text.PlatformParagraphStyle? other);
@@ -329,14 +329,14 @@
}
@androidx.compose.runtime.Immutable public final class SpanStyle {
- ctor public SpanStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle);
ctor public SpanStyle(androidx.compose.ui.graphics.Brush? brush, optional float alpha, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle);
ctor @Deprecated public SpanStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow);
ctor @Deprecated public SpanStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle);
- method public androidx.compose.ui.text.SpanStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle);
+ ctor public SpanStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle);
method public androidx.compose.ui.text.SpanStyle copy(androidx.compose.ui.graphics.Brush? brush, optional float alpha, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle);
method @Deprecated public androidx.compose.ui.text.SpanStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow);
method @Deprecated public androidx.compose.ui.text.SpanStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle);
+ method public androidx.compose.ui.text.SpanStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle);
method public float getAlpha();
method public long getBackground();
method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
@@ -474,15 +474,15 @@
}
public final class TextPainterKt {
+ method public static void drawText(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.text.TextLayoutResult textLayoutResult, androidx.compose.ui.graphics.Brush brush, optional long topLeft, optional float alpha, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional int blendMode);
+ method public static void drawText(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.text.TextLayoutResult textLayoutResult, optional long color, optional long topLeft, optional float alpha, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional int blendMode);
method public static void drawText(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.text.TextMeasurer textMeasurer, androidx.compose.ui.text.AnnotatedString text, optional long topLeft, optional androidx.compose.ui.text.TextStyle style, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional long size, optional int blendMode);
method public static void drawText(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.text.TextMeasurer textMeasurer, String text, optional long topLeft, optional androidx.compose.ui.text.TextStyle style, optional int overflow, optional boolean softWrap, optional int maxLines, optional long size, optional int blendMode);
- method public static void drawText(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.text.TextLayoutResult textLayoutResult, optional long color, optional long topLeft, optional float alpha, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional int blendMode);
- method public static void drawText(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.text.TextLayoutResult textLayoutResult, androidx.compose.ui.graphics.Brush brush, optional long topLeft, optional float alpha, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional int blendMode);
}
@androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class TextRange {
- method public operator boolean contains(long other);
method public operator boolean contains(int offset);
+ method public operator boolean contains(long other);
method public boolean getCollapsed();
method public int getEnd();
method public int getLength();
@@ -507,20 +507,20 @@
}
public final class TextRangeKt {
- method public static long TextRange(int start, int end);
method public static long TextRange(int index);
+ method public static long TextRange(int start, int end);
method public static long coerceIn(long, int minimumValue, int maximumValue);
method public static String substring(CharSequence, long range);
}
@androidx.compose.runtime.Immutable public final class TextStyle {
- ctor public TextStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
ctor public TextStyle(androidx.compose.ui.graphics.Brush? brush, optional float alpha, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
+ ctor public TextStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
ctor @Deprecated public TextStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent);
ctor @Deprecated public TextStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle);
ctor @Deprecated public TextStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
- method public androidx.compose.ui.text.TextStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
method public androidx.compose.ui.text.TextStyle copy(androidx.compose.ui.graphics.Brush? brush, optional float alpha, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
+ method public androidx.compose.ui.text.TextStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
method @Deprecated public androidx.compose.ui.text.TextStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent);
method @Deprecated public androidx.compose.ui.text.TextStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle);
method @Deprecated public androidx.compose.ui.text.TextStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
@@ -552,13 +552,13 @@
method public androidx.compose.ui.text.style.TextMotion? getTextMotion();
method public boolean hasSameDrawAffectingAttributes(androidx.compose.ui.text.TextStyle other);
method public boolean hasSameLayoutAffectingAttributes(androidx.compose.ui.text.TextStyle other);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.ParagraphStyle other);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.SpanStyle other);
method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(optional androidx.compose.ui.text.TextStyle? other);
method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.TextMotion? textMotion);
- method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.SpanStyle other);
- method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.ParagraphStyle other);
- method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.TextStyle other);
method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.ParagraphStyle other);
method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.SpanStyle other);
+ method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.TextStyle other);
method @androidx.compose.runtime.Stable public androidx.compose.ui.text.ParagraphStyle toParagraphStyle();
method @androidx.compose.runtime.Stable public androidx.compose.ui.text.SpanStyle toSpanStyle();
property public final float alpha;
@@ -614,8 +614,8 @@
package androidx.compose.ui.text.font {
public abstract class AndroidFont implements androidx.compose.ui.text.font.Font {
- ctor public AndroidFont(int loadingStrategy, androidx.compose.ui.text.font.AndroidFont.TypefaceLoader typefaceLoader, androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
ctor @Deprecated public AndroidFont(int loadingStrategy, androidx.compose.ui.text.font.AndroidFont.TypefaceLoader typefaceLoader);
+ ctor public AndroidFont(int loadingStrategy, androidx.compose.ui.text.font.AndroidFont.TypefaceLoader typefaceLoader, androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
method public final int getLoadingStrategy();
method public final androidx.compose.ui.text.font.AndroidFont.TypefaceLoader getTypefaceLoader();
method public final androidx.compose.ui.text.font.FontVariation.Settings getVariationSettings();
@@ -630,9 +630,9 @@
}
public final class AndroidFontKt {
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(String path, android.content.res.AssetManager assetManager, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(java.io.File file, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
method @RequiresApi(26) @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(android.os.ParcelFileDescriptor fileDescriptor, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(java.io.File file, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(String path, android.content.res.AssetManager assetManager, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
}
public final class AndroidTypeface_androidKt {
@@ -702,9 +702,9 @@
}
public final class FontFamilyKt {
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontFamily FontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontFamily FontFamily(androidx.compose.ui.text.font.Font... fonts);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontFamily FontFamily(androidx.compose.ui.text.font.Typeface typeface);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontFamily FontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
}
public final class FontFamilyResolver_androidKt {
@@ -714,8 +714,8 @@
}
public final class FontKt {
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(int resId, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional int loadingStrategy);
method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(int resId, optional androidx.compose.ui.text.font.FontWeight weight, optional int style);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(int resId, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional int loadingStrategy);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontFamily toFontFamily(androidx.compose.ui.text.font.Font);
}
@@ -1177,9 +1177,9 @@
}
@androidx.compose.runtime.Immutable public final class LocaleList implements java.util.Collection<androidx.compose.ui.text.intl.Locale> kotlin.jvm.internal.markers.KMappedMarker {
- ctor public LocaleList(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
- ctor public LocaleList(String languageTags);
ctor public LocaleList(androidx.compose.ui.text.intl.Locale... locales);
+ ctor public LocaleList(String languageTags);
+ ctor public LocaleList(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
method public operator boolean contains(androidx.compose.ui.text.intl.Locale element);
method public boolean containsAll(java.util.Collection<E!> elements);
method public operator androidx.compose.ui.text.intl.Locale get(int i);
diff --git a/compose/ui/ui-text/api/public_plus_experimental_current.txt b/compose/ui/ui-text/api/public_plus_experimental_current.txt
index 4299328..b203bb5 100644
--- a/compose/ui/ui-text/api/public_plus_experimental_current.txt
+++ b/compose/ui/ui-text/api/public_plus_experimental_current.txt
@@ -12,8 +12,8 @@
method public int getLength();
method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> getParagraphStyles();
method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> getSpanStyles();
- method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(String tag, int start, int end);
method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(int start, int end);
+ method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(String tag, int start, int end);
method public String getText();
method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.TtsAnnotation>> getTtsAnnotations(int start, int end);
method @androidx.compose.ui.text.ExperimentalTextApi public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.UrlAnnotation>> getUrlAnnotations(int start, int end);
@@ -28,27 +28,27 @@
}
public static final class AnnotatedString.Builder implements java.lang.Appendable {
+ ctor public AnnotatedString.Builder(androidx.compose.ui.text.AnnotatedString text);
ctor public AnnotatedString.Builder(optional int capacity);
ctor public AnnotatedString.Builder(String text);
- ctor public AnnotatedString.Builder(androidx.compose.ui.text.AnnotatedString text);
method public void addStringAnnotation(String tag, String annotation, int start, int end);
- method public void addStyle(androidx.compose.ui.text.SpanStyle style, int start, int end);
method public void addStyle(androidx.compose.ui.text.ParagraphStyle style, int start, int end);
+ method public void addStyle(androidx.compose.ui.text.SpanStyle style, int start, int end);
method @androidx.compose.ui.text.ExperimentalTextApi public void addTtsAnnotation(androidx.compose.ui.text.TtsAnnotation ttsAnnotation, int start, int end);
method @androidx.compose.ui.text.ExperimentalTextApi public void addUrlAnnotation(androidx.compose.ui.text.UrlAnnotation urlAnnotation, int start, int end);
- method public void append(String text);
- method public androidx.compose.ui.text.AnnotatedString.Builder append(CharSequence? text);
- method public androidx.compose.ui.text.AnnotatedString.Builder append(CharSequence? text, int start, int end);
- method public androidx.compose.ui.text.AnnotatedString.Builder append(char char);
method public void append(androidx.compose.ui.text.AnnotatedString text);
method public void append(androidx.compose.ui.text.AnnotatedString text, int start, int end);
+ method public androidx.compose.ui.text.AnnotatedString.Builder append(char char);
method @Deprecated public void append(char char);
+ method public androidx.compose.ui.text.AnnotatedString.Builder append(CharSequence? text);
+ method public androidx.compose.ui.text.AnnotatedString.Builder append(CharSequence? text, int start, int end);
+ method public void append(String text);
method public int getLength();
method public void pop();
method public void pop(int index);
method public int pushStringAnnotation(String tag, String annotation);
- method public int pushStyle(androidx.compose.ui.text.SpanStyle style);
method public int pushStyle(androidx.compose.ui.text.ParagraphStyle style);
+ method public int pushStyle(androidx.compose.ui.text.SpanStyle style);
method public int pushTtsAnnotation(androidx.compose.ui.text.TtsAnnotation ttsAnnotation);
method @androidx.compose.ui.text.ExperimentalTextApi public int pushUrlAnnotation(androidx.compose.ui.text.UrlAnnotation urlAnnotation);
method public androidx.compose.ui.text.AnnotatedString toAnnotatedString();
@@ -56,8 +56,8 @@
}
@androidx.compose.runtime.Immutable public static final class AnnotatedString.Range<T> {
- ctor public AnnotatedString.Range(T item, int start, int end, String tag);
ctor public AnnotatedString.Range(T item, int start, int end);
+ ctor public AnnotatedString.Range(T item, int start, int end, String tag);
method public T component1();
method public int component2();
method public int component3();
@@ -74,18 +74,18 @@
}
public final class AnnotatedStringKt {
- method public static androidx.compose.ui.text.AnnotatedString AnnotatedString(String text, androidx.compose.ui.text.SpanStyle spanStyle, optional androidx.compose.ui.text.ParagraphStyle? paragraphStyle);
method public static androidx.compose.ui.text.AnnotatedString AnnotatedString(String text, androidx.compose.ui.text.ParagraphStyle paragraphStyle);
+ method public static androidx.compose.ui.text.AnnotatedString AnnotatedString(String text, androidx.compose.ui.text.SpanStyle spanStyle, optional androidx.compose.ui.text.ParagraphStyle? paragraphStyle);
method public static inline androidx.compose.ui.text.AnnotatedString buildAnnotatedString(kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,kotlin.Unit> builder);
method public static androidx.compose.ui.text.AnnotatedString capitalize(androidx.compose.ui.text.AnnotatedString, optional androidx.compose.ui.text.intl.LocaleList localeList);
method public static androidx.compose.ui.text.AnnotatedString decapitalize(androidx.compose.ui.text.AnnotatedString, optional androidx.compose.ui.text.intl.LocaleList localeList);
method public static androidx.compose.ui.text.AnnotatedString toLowerCase(androidx.compose.ui.text.AnnotatedString, optional androidx.compose.ui.text.intl.LocaleList localeList);
method public static androidx.compose.ui.text.AnnotatedString toUpperCase(androidx.compose.ui.text.AnnotatedString, optional androidx.compose.ui.text.intl.LocaleList localeList);
- method @androidx.compose.ui.text.ExperimentalTextApi public static inline <R> R withAnnotation(androidx.compose.ui.text.AnnotatedString.Builder, String tag, String annotation, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
method @androidx.compose.ui.text.ExperimentalTextApi public static inline <R> R withAnnotation(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.TtsAnnotation ttsAnnotation, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
method @androidx.compose.ui.text.ExperimentalTextApi public static inline <R> R withAnnotation(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.UrlAnnotation urlAnnotation, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
- method public static inline <R> R withStyle(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.SpanStyle style, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
+ method @androidx.compose.ui.text.ExperimentalTextApi public static inline <R> R withAnnotation(androidx.compose.ui.text.AnnotatedString.Builder, String tag, String annotation, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
method public static inline <R> R withStyle(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.ParagraphStyle style, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
+ method public static inline <R> R withStyle(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.SpanStyle style, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
}
@kotlin.jvm.JvmInline public final value class EmojiSupportMatch {
@@ -106,11 +106,11 @@
}
public final class MultiParagraph {
- ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, long constraints, optional int maxLines, optional boolean ellipsis);
- ctor @Deprecated public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, optional int maxLines, optional boolean ellipsis, float width);
- ctor @Deprecated public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
ctor @Deprecated public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis);
+ ctor @Deprecated public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, long constraints, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis);
+ ctor @Deprecated public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, optional int maxLines, optional boolean ellipsis, float width);
+ ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, long constraints, optional int maxLines, optional boolean ellipsis);
method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
@@ -141,9 +141,9 @@
method public float getWidth();
method public long getWordBoundary(int offset);
method public boolean isLineEllipsized(int lineIndex);
- method public void paint(androidx.compose.ui.graphics.Canvas canvas, optional long color, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? decoration, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional int blendMode);
method public void paint(androidx.compose.ui.graphics.Canvas canvas, androidx.compose.ui.graphics.Brush brush, optional float alpha, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? decoration, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional int blendMode);
method @Deprecated public void paint(androidx.compose.ui.graphics.Canvas canvas, optional long color, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? decoration);
+ method public void paint(androidx.compose.ui.graphics.Canvas canvas, optional long color, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? decoration, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional int blendMode);
property public final boolean didExceedMaxLines;
property public final float firstBaseline;
property public final float height;
@@ -158,8 +158,8 @@
}
public final class MultiParagraphIntrinsics implements androidx.compose.ui.text.ParagraphIntrinsics {
- ctor public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver);
ctor @Deprecated public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+ ctor public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver);
method public androidx.compose.ui.text.AnnotatedString getAnnotatedString();
method public float getMaxIntrinsicWidth();
method public float getMinIntrinsicWidth();
@@ -200,9 +200,9 @@
method public float getWidth();
method public long getWordBoundary(int offset);
method public boolean isLineEllipsized(int lineIndex);
+ method public void paint(androidx.compose.ui.graphics.Canvas canvas, androidx.compose.ui.graphics.Brush brush, float alpha, androidx.compose.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, int blendMode);
method public void paint(androidx.compose.ui.graphics.Canvas canvas, long color, androidx.compose.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextDecoration? textDecoration);
method public void paint(androidx.compose.ui.graphics.Canvas canvas, long color, androidx.compose.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, int blendMode);
- method public void paint(androidx.compose.ui.graphics.Canvas canvas, androidx.compose.ui.graphics.Brush brush, float alpha, androidx.compose.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, int blendMode);
property public abstract boolean didExceedMaxLines;
property public abstract float firstBaseline;
property public abstract float height;
@@ -229,22 +229,22 @@
}
public final class ParagraphKt {
- method @Deprecated public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
- method @Deprecated public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis);
- method public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, long constraints, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis);
method @Deprecated public static androidx.compose.ui.text.Paragraph Paragraph(androidx.compose.ui.text.ParagraphIntrinsics paragraphIntrinsics, optional int maxLines, optional boolean ellipsis, float width);
method public static androidx.compose.ui.text.Paragraph Paragraph(androidx.compose.ui.text.ParagraphIntrinsics paragraphIntrinsics, long constraints, optional int maxLines, optional boolean ellipsis);
+ method @Deprecated public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis);
+ method @Deprecated public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+ method public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, long constraints, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis);
}
@androidx.compose.runtime.Immutable public final class ParagraphStyle {
- ctor public ParagraphStyle(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
ctor @Deprecated public ParagraphStyle(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent);
ctor @Deprecated public ParagraphStyle(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle);
ctor @Deprecated public ParagraphStyle(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
- method public androidx.compose.ui.text.ParagraphStyle copy(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
+ ctor public ParagraphStyle(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
method @Deprecated public androidx.compose.ui.text.ParagraphStyle copy(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent);
method @Deprecated public androidx.compose.ui.text.ParagraphStyle copy(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle);
method @Deprecated public androidx.compose.ui.text.ParagraphStyle copy(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
+ method public androidx.compose.ui.text.ParagraphStyle copy(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
method public androidx.compose.ui.text.style.Hyphens? getHyphens();
method public androidx.compose.ui.text.style.LineBreak? getLineBreak();
method public long getLineHeight();
@@ -305,8 +305,8 @@
public final class PlatformParagraphStyle {
ctor public PlatformParagraphStyle(optional boolean includeFontPadding);
- ctor public PlatformParagraphStyle(optional int emojiSupportMatch, optional boolean includeFontPadding);
ctor public PlatformParagraphStyle(optional int emojiSupportMatch);
+ ctor public PlatformParagraphStyle(optional int emojiSupportMatch, optional boolean includeFontPadding);
method public int getEmojiSupportMatch();
method public boolean getIncludeFontPadding();
method public androidx.compose.ui.text.PlatformParagraphStyle merge(androidx.compose.ui.text.PlatformParagraphStyle? other);
@@ -342,14 +342,14 @@
}
@androidx.compose.runtime.Immutable public final class SpanStyle {
- ctor public SpanStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle);
ctor public SpanStyle(androidx.compose.ui.graphics.Brush? brush, optional float alpha, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle);
ctor @Deprecated public SpanStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow);
ctor @Deprecated public SpanStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle);
- method public androidx.compose.ui.text.SpanStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle);
+ ctor public SpanStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle);
method public androidx.compose.ui.text.SpanStyle copy(androidx.compose.ui.graphics.Brush? brush, optional float alpha, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle);
method @Deprecated public androidx.compose.ui.text.SpanStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow);
method @Deprecated public androidx.compose.ui.text.SpanStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle);
+ method public androidx.compose.ui.text.SpanStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle);
method public float getAlpha();
method public long getBackground();
method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
@@ -487,15 +487,15 @@
}
public final class TextPainterKt {
+ method public static void drawText(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.text.TextLayoutResult textLayoutResult, androidx.compose.ui.graphics.Brush brush, optional long topLeft, optional float alpha, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional int blendMode);
+ method public static void drawText(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.text.TextLayoutResult textLayoutResult, optional long color, optional long topLeft, optional float alpha, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional int blendMode);
method public static void drawText(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.text.TextMeasurer textMeasurer, androidx.compose.ui.text.AnnotatedString text, optional long topLeft, optional androidx.compose.ui.text.TextStyle style, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional long size, optional int blendMode);
method public static void drawText(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.text.TextMeasurer textMeasurer, String text, optional long topLeft, optional androidx.compose.ui.text.TextStyle style, optional int overflow, optional boolean softWrap, optional int maxLines, optional long size, optional int blendMode);
- method public static void drawText(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.text.TextLayoutResult textLayoutResult, optional long color, optional long topLeft, optional float alpha, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional int blendMode);
- method public static void drawText(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.text.TextLayoutResult textLayoutResult, androidx.compose.ui.graphics.Brush brush, optional long topLeft, optional float alpha, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional int blendMode);
}
@androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class TextRange {
- method public operator boolean contains(long other);
method public operator boolean contains(int offset);
+ method public operator boolean contains(long other);
method public boolean getCollapsed();
method public int getEnd();
method public int getLength();
@@ -520,20 +520,20 @@
}
public final class TextRangeKt {
- method public static long TextRange(int start, int end);
method public static long TextRange(int index);
+ method public static long TextRange(int start, int end);
method public static long coerceIn(long, int minimumValue, int maximumValue);
method public static String substring(CharSequence, long range);
}
@androidx.compose.runtime.Immutable public final class TextStyle {
- ctor public TextStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
ctor public TextStyle(androidx.compose.ui.graphics.Brush? brush, optional float alpha, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
+ ctor public TextStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
ctor @Deprecated public TextStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent);
ctor @Deprecated public TextStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle);
ctor @Deprecated public TextStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
- method public androidx.compose.ui.text.TextStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
method public androidx.compose.ui.text.TextStyle copy(androidx.compose.ui.graphics.Brush? brush, optional float alpha, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
+ method public androidx.compose.ui.text.TextStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
method @Deprecated public androidx.compose.ui.text.TextStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent);
method @Deprecated public androidx.compose.ui.text.TextStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle);
method @Deprecated public androidx.compose.ui.text.TextStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
@@ -565,13 +565,13 @@
method public androidx.compose.ui.text.style.TextMotion? getTextMotion();
method public boolean hasSameDrawAffectingAttributes(androidx.compose.ui.text.TextStyle other);
method public boolean hasSameLayoutAffectingAttributes(androidx.compose.ui.text.TextStyle other);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.ParagraphStyle other);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.SpanStyle other);
method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(optional androidx.compose.ui.text.TextStyle? other);
method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.TextMotion? textMotion);
- method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.SpanStyle other);
- method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.ParagraphStyle other);
- method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.TextStyle other);
method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.ParagraphStyle other);
method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.SpanStyle other);
+ method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.TextStyle other);
method @androidx.compose.runtime.Stable public androidx.compose.ui.text.ParagraphStyle toParagraphStyle();
method @androidx.compose.runtime.Stable public androidx.compose.ui.text.SpanStyle toSpanStyle();
property public final float alpha;
@@ -640,8 +640,8 @@
package androidx.compose.ui.text.font {
public abstract class AndroidFont implements androidx.compose.ui.text.font.Font {
- ctor public AndroidFont(int loadingStrategy, androidx.compose.ui.text.font.AndroidFont.TypefaceLoader typefaceLoader, androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
ctor @Deprecated public AndroidFont(int loadingStrategy, androidx.compose.ui.text.font.AndroidFont.TypefaceLoader typefaceLoader);
+ ctor public AndroidFont(int loadingStrategy, androidx.compose.ui.text.font.AndroidFont.TypefaceLoader typefaceLoader, androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
method public final int getLoadingStrategy();
method public final androidx.compose.ui.text.font.AndroidFont.TypefaceLoader getTypefaceLoader();
method public final androidx.compose.ui.text.font.FontVariation.Settings getVariationSettings();
@@ -656,9 +656,9 @@
}
public final class AndroidFontKt {
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(String path, android.content.res.AssetManager assetManager, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(java.io.File file, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
method @RequiresApi(26) @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(android.os.ParcelFileDescriptor fileDescriptor, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(java.io.File file, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(String path, android.content.res.AssetManager assetManager, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
}
public final class AndroidTypeface_androidKt {
@@ -728,9 +728,9 @@
}
public final class FontFamilyKt {
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontFamily FontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontFamily FontFamily(androidx.compose.ui.text.font.Font... fonts);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontFamily FontFamily(androidx.compose.ui.text.font.Typeface typeface);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontFamily FontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
}
public final class FontFamilyResolver_androidKt {
@@ -740,9 +740,9 @@
}
public final class FontKt {
+ method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(int resId, optional androidx.compose.ui.text.font.FontWeight weight, optional int style);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(int resId, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional int loadingStrategy);
method @androidx.compose.ui.text.ExperimentalTextApi public static androidx.compose.ui.text.font.Font Font(int resId, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional int loadingStrategy, optional androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
- method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(int resId, optional androidx.compose.ui.text.font.FontWeight weight, optional int style);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontFamily toFontFamily(androidx.compose.ui.text.font.Font);
}
@@ -1241,9 +1241,9 @@
}
@androidx.compose.runtime.Immutable public final class LocaleList implements java.util.Collection<androidx.compose.ui.text.intl.Locale> kotlin.jvm.internal.markers.KMappedMarker {
- ctor public LocaleList(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
- ctor public LocaleList(String languageTags);
ctor public LocaleList(androidx.compose.ui.text.intl.Locale... locales);
+ ctor public LocaleList(String languageTags);
+ ctor public LocaleList(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
method public operator boolean contains(androidx.compose.ui.text.intl.Locale element);
method public boolean containsAll(java.util.Collection<E!> elements);
method public operator androidx.compose.ui.text.intl.Locale get(int i);
diff --git a/compose/ui/ui-text/api/restricted_current.txt b/compose/ui/ui-text/api/restricted_current.txt
index 09ac6ba..4a40acd 100644
--- a/compose/ui/ui-text/api/restricted_current.txt
+++ b/compose/ui/ui-text/api/restricted_current.txt
@@ -12,8 +12,8 @@
method public int getLength();
method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> getParagraphStyles();
method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> getSpanStyles();
- method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(String tag, int start, int end);
method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(int start, int end);
+ method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(String tag, int start, int end);
method public String getText();
method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.TtsAnnotation>> getTtsAnnotations(int start, int end);
method public boolean hasStringAnnotations(String tag, int start, int end);
@@ -27,33 +27,33 @@
}
public static final class AnnotatedString.Builder implements java.lang.Appendable {
+ ctor public AnnotatedString.Builder(androidx.compose.ui.text.AnnotatedString text);
ctor public AnnotatedString.Builder(optional int capacity);
ctor public AnnotatedString.Builder(String text);
- ctor public AnnotatedString.Builder(androidx.compose.ui.text.AnnotatedString text);
method public void addStringAnnotation(String tag, String annotation, int start, int end);
- method public void addStyle(androidx.compose.ui.text.SpanStyle style, int start, int end);
method public void addStyle(androidx.compose.ui.text.ParagraphStyle style, int start, int end);
- method public void append(String text);
- method public androidx.compose.ui.text.AnnotatedString.Builder append(CharSequence? text);
- method public androidx.compose.ui.text.AnnotatedString.Builder append(CharSequence? text, int start, int end);
- method public androidx.compose.ui.text.AnnotatedString.Builder append(char char);
+ method public void addStyle(androidx.compose.ui.text.SpanStyle style, int start, int end);
method public void append(androidx.compose.ui.text.AnnotatedString text);
method public void append(androidx.compose.ui.text.AnnotatedString text, int start, int end);
+ method public androidx.compose.ui.text.AnnotatedString.Builder append(char char);
method @Deprecated public void append(char char);
+ method public androidx.compose.ui.text.AnnotatedString.Builder append(CharSequence? text);
+ method public androidx.compose.ui.text.AnnotatedString.Builder append(CharSequence? text, int start, int end);
+ method public void append(String text);
method public int getLength();
method public void pop();
method public void pop(int index);
method public int pushStringAnnotation(String tag, String annotation);
- method public int pushStyle(androidx.compose.ui.text.SpanStyle style);
method public int pushStyle(androidx.compose.ui.text.ParagraphStyle style);
+ method public int pushStyle(androidx.compose.ui.text.SpanStyle style);
method public int pushTtsAnnotation(androidx.compose.ui.text.TtsAnnotation ttsAnnotation);
method public androidx.compose.ui.text.AnnotatedString toAnnotatedString();
property public final int length;
}
@androidx.compose.runtime.Immutable public static final class AnnotatedString.Range<T> {
- ctor public AnnotatedString.Range(T item, int start, int end, String tag);
ctor public AnnotatedString.Range(T item, int start, int end);
+ ctor public AnnotatedString.Range(T item, int start, int end, String tag);
method public T component1();
method public int component2();
method public int component3();
@@ -70,15 +70,15 @@
}
public final class AnnotatedStringKt {
- method public static androidx.compose.ui.text.AnnotatedString AnnotatedString(String text, androidx.compose.ui.text.SpanStyle spanStyle, optional androidx.compose.ui.text.ParagraphStyle? paragraphStyle);
method public static androidx.compose.ui.text.AnnotatedString AnnotatedString(String text, androidx.compose.ui.text.ParagraphStyle paragraphStyle);
+ method public static androidx.compose.ui.text.AnnotatedString AnnotatedString(String text, androidx.compose.ui.text.SpanStyle spanStyle, optional androidx.compose.ui.text.ParagraphStyle? paragraphStyle);
method public static inline androidx.compose.ui.text.AnnotatedString buildAnnotatedString(kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,kotlin.Unit> builder);
method public static androidx.compose.ui.text.AnnotatedString capitalize(androidx.compose.ui.text.AnnotatedString, optional androidx.compose.ui.text.intl.LocaleList localeList);
method public static androidx.compose.ui.text.AnnotatedString decapitalize(androidx.compose.ui.text.AnnotatedString, optional androidx.compose.ui.text.intl.LocaleList localeList);
method public static androidx.compose.ui.text.AnnotatedString toLowerCase(androidx.compose.ui.text.AnnotatedString, optional androidx.compose.ui.text.intl.LocaleList localeList);
method public static androidx.compose.ui.text.AnnotatedString toUpperCase(androidx.compose.ui.text.AnnotatedString, optional androidx.compose.ui.text.intl.LocaleList localeList);
- method public static inline <R> R withStyle(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.SpanStyle style, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
method public static inline <R> R withStyle(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.ParagraphStyle style, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
+ method public static inline <R> R withStyle(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.SpanStyle style, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
}
@kotlin.jvm.JvmInline public final value class EmojiSupportMatch {
@@ -93,11 +93,11 @@
}
public final class MultiParagraph {
- ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, long constraints, optional int maxLines, optional boolean ellipsis);
- ctor @Deprecated public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, optional int maxLines, optional boolean ellipsis, float width);
- ctor @Deprecated public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
ctor @Deprecated public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis);
+ ctor @Deprecated public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, long constraints, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis);
+ ctor @Deprecated public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, optional int maxLines, optional boolean ellipsis, float width);
+ ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, long constraints, optional int maxLines, optional boolean ellipsis);
method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
@@ -128,9 +128,9 @@
method public float getWidth();
method public long getWordBoundary(int offset);
method public boolean isLineEllipsized(int lineIndex);
- method public void paint(androidx.compose.ui.graphics.Canvas canvas, optional long color, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? decoration, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional int blendMode);
method public void paint(androidx.compose.ui.graphics.Canvas canvas, androidx.compose.ui.graphics.Brush brush, optional float alpha, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? decoration, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional int blendMode);
method @Deprecated public void paint(androidx.compose.ui.graphics.Canvas canvas, optional long color, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? decoration);
+ method public void paint(androidx.compose.ui.graphics.Canvas canvas, optional long color, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? decoration, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional int blendMode);
property public final boolean didExceedMaxLines;
property public final float firstBaseline;
property public final float height;
@@ -145,8 +145,8 @@
}
public final class MultiParagraphIntrinsics implements androidx.compose.ui.text.ParagraphIntrinsics {
- ctor public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver);
ctor @Deprecated public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+ ctor public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver);
method public androidx.compose.ui.text.AnnotatedString getAnnotatedString();
method public float getMaxIntrinsicWidth();
method public float getMinIntrinsicWidth();
@@ -187,9 +187,9 @@
method public float getWidth();
method public long getWordBoundary(int offset);
method public boolean isLineEllipsized(int lineIndex);
+ method public void paint(androidx.compose.ui.graphics.Canvas canvas, androidx.compose.ui.graphics.Brush brush, float alpha, androidx.compose.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, int blendMode);
method public void paint(androidx.compose.ui.graphics.Canvas canvas, long color, androidx.compose.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextDecoration? textDecoration);
method public void paint(androidx.compose.ui.graphics.Canvas canvas, long color, androidx.compose.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, int blendMode);
- method public void paint(androidx.compose.ui.graphics.Canvas canvas, androidx.compose.ui.graphics.Brush brush, float alpha, androidx.compose.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, int blendMode);
property public abstract boolean didExceedMaxLines;
property public abstract float firstBaseline;
property public abstract float height;
@@ -216,22 +216,22 @@
}
public final class ParagraphKt {
- method @Deprecated public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
- method @Deprecated public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis);
- method public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, long constraints, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis);
method @Deprecated public static androidx.compose.ui.text.Paragraph Paragraph(androidx.compose.ui.text.ParagraphIntrinsics paragraphIntrinsics, optional int maxLines, optional boolean ellipsis, float width);
method public static androidx.compose.ui.text.Paragraph Paragraph(androidx.compose.ui.text.ParagraphIntrinsics paragraphIntrinsics, long constraints, optional int maxLines, optional boolean ellipsis);
+ method @Deprecated public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis);
+ method @Deprecated public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+ method public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, long constraints, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.FontFamily.Resolver fontFamilyResolver, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis);
}
@androidx.compose.runtime.Immutable public final class ParagraphStyle {
- ctor public ParagraphStyle(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
ctor @Deprecated public ParagraphStyle(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent);
ctor @Deprecated public ParagraphStyle(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle);
ctor @Deprecated public ParagraphStyle(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
- method public androidx.compose.ui.text.ParagraphStyle copy(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
+ ctor public ParagraphStyle(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
method @Deprecated public androidx.compose.ui.text.ParagraphStyle copy(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent);
method @Deprecated public androidx.compose.ui.text.ParagraphStyle copy(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle);
method @Deprecated public androidx.compose.ui.text.ParagraphStyle copy(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
+ method public androidx.compose.ui.text.ParagraphStyle copy(optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformParagraphStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
method public androidx.compose.ui.text.style.Hyphens? getHyphens();
method public androidx.compose.ui.text.style.LineBreak? getLineBreak();
method public long getLineHeight();
@@ -292,8 +292,8 @@
public final class PlatformParagraphStyle {
ctor public PlatformParagraphStyle(optional boolean includeFontPadding);
- ctor public PlatformParagraphStyle(optional int emojiSupportMatch, optional boolean includeFontPadding);
ctor public PlatformParagraphStyle(optional int emojiSupportMatch);
+ ctor public PlatformParagraphStyle(optional int emojiSupportMatch, optional boolean includeFontPadding);
method public int getEmojiSupportMatch();
method public boolean getIncludeFontPadding();
method public androidx.compose.ui.text.PlatformParagraphStyle merge(androidx.compose.ui.text.PlatformParagraphStyle? other);
@@ -329,14 +329,14 @@
}
@androidx.compose.runtime.Immutable public final class SpanStyle {
- ctor public SpanStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle);
ctor public SpanStyle(androidx.compose.ui.graphics.Brush? brush, optional float alpha, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle);
ctor @Deprecated public SpanStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow);
ctor @Deprecated public SpanStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle);
- method public androidx.compose.ui.text.SpanStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle);
+ ctor public SpanStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle);
method public androidx.compose.ui.text.SpanStyle copy(androidx.compose.ui.graphics.Brush? brush, optional float alpha, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle);
method @Deprecated public androidx.compose.ui.text.SpanStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow);
method @Deprecated public androidx.compose.ui.text.SpanStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle);
+ method public androidx.compose.ui.text.SpanStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle);
method public float getAlpha();
method public long getBackground();
method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
@@ -474,15 +474,15 @@
}
public final class TextPainterKt {
+ method public static void drawText(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.text.TextLayoutResult textLayoutResult, androidx.compose.ui.graphics.Brush brush, optional long topLeft, optional float alpha, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional int blendMode);
+ method public static void drawText(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.text.TextLayoutResult textLayoutResult, optional long color, optional long topLeft, optional float alpha, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional int blendMode);
method public static void drawText(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.text.TextMeasurer textMeasurer, androidx.compose.ui.text.AnnotatedString text, optional long topLeft, optional androidx.compose.ui.text.TextStyle style, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional long size, optional int blendMode);
method public static void drawText(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.text.TextMeasurer textMeasurer, String text, optional long topLeft, optional androidx.compose.ui.text.TextStyle style, optional int overflow, optional boolean softWrap, optional int maxLines, optional long size, optional int blendMode);
- method public static void drawText(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.text.TextLayoutResult textLayoutResult, optional long color, optional long topLeft, optional float alpha, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional int blendMode);
- method public static void drawText(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.text.TextLayoutResult textLayoutResult, androidx.compose.ui.graphics.Brush brush, optional long topLeft, optional float alpha, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional int blendMode);
}
@androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class TextRange {
- method public operator boolean contains(long other);
method public operator boolean contains(int offset);
+ method public operator boolean contains(long other);
method public boolean getCollapsed();
method public int getEnd();
method public int getLength();
@@ -507,20 +507,20 @@
}
public final class TextRangeKt {
- method public static long TextRange(int start, int end);
method public static long TextRange(int index);
+ method public static long TextRange(int start, int end);
method public static long coerceIn(long, int minimumValue, int maximumValue);
method public static String substring(CharSequence, long range);
}
@androidx.compose.runtime.Immutable public final class TextStyle {
- ctor public TextStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
ctor public TextStyle(androidx.compose.ui.graphics.Brush? brush, optional float alpha, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
+ ctor public TextStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
ctor @Deprecated public TextStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent);
ctor @Deprecated public TextStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle);
ctor @Deprecated public TextStyle(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
- method public androidx.compose.ui.text.TextStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
method public androidx.compose.ui.text.TextStyle copy(androidx.compose.ui.graphics.Brush? brush, optional float alpha, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
+ method public androidx.compose.ui.text.TextStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.style.TextMotion? textMotion);
method @Deprecated public androidx.compose.ui.text.TextStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent);
method @Deprecated public androidx.compose.ui.text.TextStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle);
method @Deprecated public androidx.compose.ui.text.TextStyle copy(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
@@ -552,13 +552,13 @@
method public androidx.compose.ui.text.style.TextMotion? getTextMotion();
method public boolean hasSameDrawAffectingAttributes(androidx.compose.ui.text.TextStyle other);
method public boolean hasSameLayoutAffectingAttributes(androidx.compose.ui.text.TextStyle other);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.ParagraphStyle other);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.SpanStyle other);
method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(optional androidx.compose.ui.text.TextStyle? other);
method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.TextMotion? textMotion);
- method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.SpanStyle other);
- method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.ParagraphStyle other);
- method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.TextStyle other);
method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.ParagraphStyle other);
method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.SpanStyle other);
+ method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.TextStyle other);
method @androidx.compose.runtime.Stable public androidx.compose.ui.text.ParagraphStyle toParagraphStyle();
method @androidx.compose.runtime.Stable public androidx.compose.ui.text.SpanStyle toSpanStyle();
property public final float alpha;
@@ -614,8 +614,8 @@
package androidx.compose.ui.text.font {
public abstract class AndroidFont implements androidx.compose.ui.text.font.Font {
- ctor public AndroidFont(int loadingStrategy, androidx.compose.ui.text.font.AndroidFont.TypefaceLoader typefaceLoader, androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
ctor @Deprecated public AndroidFont(int loadingStrategy, androidx.compose.ui.text.font.AndroidFont.TypefaceLoader typefaceLoader);
+ ctor public AndroidFont(int loadingStrategy, androidx.compose.ui.text.font.AndroidFont.TypefaceLoader typefaceLoader, androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
method public final int getLoadingStrategy();
method public final androidx.compose.ui.text.font.AndroidFont.TypefaceLoader getTypefaceLoader();
method public final androidx.compose.ui.text.font.FontVariation.Settings getVariationSettings();
@@ -630,9 +630,9 @@
}
public final class AndroidFontKt {
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(String path, android.content.res.AssetManager assetManager, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(java.io.File file, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
method @RequiresApi(26) @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(android.os.ParcelFileDescriptor fileDescriptor, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(java.io.File file, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(String path, android.content.res.AssetManager assetManager, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional androidx.compose.ui.text.font.FontVariation.Settings variationSettings);
}
public final class AndroidTypeface_androidKt {
@@ -702,9 +702,9 @@
}
public final class FontFamilyKt {
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontFamily FontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontFamily FontFamily(androidx.compose.ui.text.font.Font... fonts);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontFamily FontFamily(androidx.compose.ui.text.font.Typeface typeface);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontFamily FontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
}
public final class FontFamilyResolver_androidKt {
@@ -714,8 +714,8 @@
}
public final class FontKt {
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(int resId, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional int loadingStrategy);
method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(int resId, optional androidx.compose.ui.text.font.FontWeight weight, optional int style);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font Font(int resId, optional androidx.compose.ui.text.font.FontWeight weight, optional int style, optional int loadingStrategy);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontFamily toFontFamily(androidx.compose.ui.text.font.Font);
}
@@ -1177,9 +1177,9 @@
}
@androidx.compose.runtime.Immutable public final class LocaleList implements java.util.Collection<androidx.compose.ui.text.intl.Locale> kotlin.jvm.internal.markers.KMappedMarker {
- ctor public LocaleList(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
- ctor public LocaleList(String languageTags);
ctor public LocaleList(androidx.compose.ui.text.intl.Locale... locales);
+ ctor public LocaleList(String languageTags);
+ ctor public LocaleList(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
method public operator boolean contains(androidx.compose.ui.text.intl.Locale element);
method public boolean containsAll(java.util.Collection<E!> elements);
method public operator androidx.compose.ui.text.intl.Locale get(int i);
diff --git a/compose/ui/ui-text/benchmark/src/androidTest/java/androidx/compose/ui/text/benchmark/FrameworkTextLayoutBenchmark.kt b/compose/ui/ui-text/benchmark/src/androidTest/java/androidx/compose/ui/text/benchmark/FrameworkTextLayoutBenchmark.kt
index 2872b3d..2765fb0 100644
--- a/compose/ui/ui-text/benchmark/src/androidTest/java/androidx/compose/ui/text/benchmark/FrameworkTextLayoutBenchmark.kt
+++ b/compose/ui/ui-text/benchmark/src/androidTest/java/androidx/compose/ui/text/benchmark/FrameworkTextLayoutBenchmark.kt
@@ -29,12 +29,12 @@
import androidx.benchmark.junit4.measureRepeated
import androidx.test.filters.LargeTest
import androidx.test.platform.app.InstrumentationRegistry
+import kotlin.math.roundToInt
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import kotlin.math.roundToInt
@LargeTest
@RunWith(Parameterized::class)
diff --git a/compose/ui/ui-text/benchmark/src/androidTest/java/androidx/compose/ui/text/benchmark/ParagraphBenchmark.kt b/compose/ui/ui-text/benchmark/src/androidTest/java/androidx/compose/ui/text/benchmark/ParagraphBenchmark.kt
index 7c217b8..02c2151 100644
--- a/compose/ui/ui-text/benchmark/src/androidTest/java/androidx/compose/ui/text/benchmark/ParagraphBenchmark.kt
+++ b/compose/ui/ui-text/benchmark/src/androidTest/java/androidx/compose/ui/text/benchmark/ParagraphBenchmark.kt
@@ -34,12 +34,12 @@
import androidx.test.filters.LargeTest
import androidx.test.platform.app.InstrumentationRegistry
import kotlin.math.ceil
+import kotlin.math.roundToInt
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import kotlin.math.roundToInt
@LargeTest
@RunWith(Parameterized::class)
diff --git a/compose/ui/ui-text/benchmark/src/androidTest/java/androidx/compose/ui/text/benchmark/input/EditProcessorBenchmark.kt b/compose/ui/ui-text/benchmark/src/androidTest/java/androidx/compose/ui/text/benchmark/input/EditProcessorBenchmark.kt
index d9549db..da8dcd1 100644
--- a/compose/ui/ui-text/benchmark/src/androidTest/java/androidx/compose/ui/text/benchmark/input/EditProcessorBenchmark.kt
+++ b/compose/ui/ui-text/benchmark/src/androidTest/java/androidx/compose/ui/text/benchmark/input/EditProcessorBenchmark.kt
@@ -18,8 +18,8 @@
import androidx.benchmark.junit4.BenchmarkRule
import androidx.benchmark.junit4.measureRepeated
-import androidx.compose.ui.text.benchmark.RandomTextGenerator
import androidx.compose.ui.text.TextRange
+import androidx.compose.ui.text.benchmark.RandomTextGenerator
import androidx.compose.ui.text.benchmark.cartesian
import androidx.compose.ui.text.input.BackspaceCommand
import androidx.compose.ui.text.input.CommitTextCommand
diff --git a/compose/ui/ui-text/benchmark/src/main/java/androidx/compose/ui/text/benchmark/TextBenchmarkHelper.kt b/compose/ui/ui-text/benchmark/src/main/java/androidx/compose/ui/text/benchmark/TextBenchmarkHelper.kt
index c83992d0..707ffb3 100644
--- a/compose/ui/ui-text/benchmark/src/main/java/androidx/compose/ui/text/benchmark/TextBenchmarkHelper.kt
+++ b/compose/ui/ui-text/benchmark/src/main/java/androidx/compose/ui/text/benchmark/TextBenchmarkHelper.kt
@@ -21,9 +21,9 @@
import androidx.compose.ui.graphics.Shadow
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.SpanStyle
-import androidx.compose.ui.text.intl.LocaleList
import androidx.compose.ui.text.font.FontStyle
import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.intl.LocaleList
import androidx.compose.ui.text.style.BaselineShift
import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.text.style.TextGeometricTransform
diff --git a/compose/ui/ui-text/benchmark/src/main/java/androidx/compose/ui/text/benchmark/TextBenchmarkTestRule.kt b/compose/ui/ui-text/benchmark/src/main/java/androidx/compose/ui/text/benchmark/TextBenchmarkTestRule.kt
index d8ac939..6f7f876 100644
--- a/compose/ui/ui-text/benchmark/src/main/java/androidx/compose/ui/text/benchmark/TextBenchmarkTestRule.kt
+++ b/compose/ui/ui-text/benchmark/src/main/java/androidx/compose/ui/text/benchmark/TextBenchmarkTestRule.kt
@@ -17,11 +17,11 @@
import android.graphics.Canvas
import android.util.Log
+import kotlin.random.Random
import org.junit.rules.RuleChain
import org.junit.rules.TestRule
import org.junit.runner.Description
import org.junit.runners.model.Statement
-import kotlin.random.Random
/**
* Collection of text benchmark utilities. It tries to
diff --git a/compose/ui/ui-text/samples/build.gradle b/compose/ui/ui-text/samples/build.gradle
index 507a2ddb..a6d5aa4 100644
--- a/compose/ui/ui-text/samples/build.gradle
+++ b/compose/ui/ui-text/samples/build.gradle
@@ -37,7 +37,7 @@
}
androidx {
- name = "AndroidX Compose UI Text Core Samples"
+ name = "Compose UI Text Core Samples"
type = LibraryType.SAMPLES
inceptionYear = "2019"
description = "Contains sample code for the Androidx Compose UI Text Core APIs and Utilities"
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/AndroidParagraphTextDirectionTest.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/AndroidParagraphTextDirectionTest.kt
index c9dcbb7..1268ee3 100644
--- a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/AndroidParagraphTextDirectionTest.kt
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/AndroidParagraphTextDirectionTest.kt
@@ -21,14 +21,14 @@
import androidx.compose.ui.text.intl.LocaleList
import androidx.compose.ui.text.platform.resolveTextDirectionHeuristics
import androidx.compose.ui.text.style.TextDirection
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
+import java.util.Locale
import org.junit.After
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import java.util.Locale
@RunWith(AndroidJUnit4::class)
@SmallTest
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/MultiParagraphIntegrationTextDirectionTest.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/MultiParagraphIntegrationTextDirectionTest.kt
index f86a193..fd2538f 100644
--- a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/MultiParagraphIntegrationTextDirectionTest.kt
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/MultiParagraphIntegrationTextDirectionTest.kt
@@ -24,15 +24,15 @@
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.TextUnit
import androidx.compose.ui.unit.sp
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
import com.google.common.truth.Truth.assertThat
+import java.util.Locale
import org.junit.After
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import java.util.Locale
@RunWith(AndroidJUnit4::class)
@SmallTest
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphFillBoundingBoxesTest.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphFillBoundingBoxesTest.kt
index 94f081a..d802b37 100644
--- a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphFillBoundingBoxesTest.kt
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphFillBoundingBoxesTest.kt
@@ -19,11 +19,16 @@
import androidx.compose.ui.geometry.Rect
import androidx.compose.ui.text.font.createFontFamilyResolver
import androidx.compose.ui.text.font.toFontFamily
+import androidx.compose.ui.text.matchers.assertThat
import androidx.compose.ui.text.style.BaselineShift
+import androidx.compose.ui.text.style.LineHeightStyle
+import androidx.compose.ui.text.style.LineHeightStyle.Alignment
+import androidx.compose.ui.text.style.LineHeightStyle.Trim
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextDirection
import androidx.compose.ui.text.style.TextGeometricTransform
import androidx.compose.ui.text.style.TextIndent
+import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.em
import androidx.compose.ui.unit.sp
@@ -32,11 +37,6 @@
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
import com.google.common.truth.Truth.assertThat
-import androidx.compose.ui.text.matchers.assertThat
-import androidx.compose.ui.text.style.LineHeightStyle
-import androidx.compose.ui.text.style.LineHeightStyle.Trim
-import androidx.compose.ui.text.style.LineHeightStyle.Alignment
-import androidx.compose.ui.unit.Constraints
import org.junit.Test
import org.junit.runner.RunWith
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationBoundingBoxTest.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationBoundingBoxTest.kt
new file mode 100644
index 0000000..c72f952
--- /dev/null
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationBoundingBoxTest.kt
@@ -0,0 +1,436 @@
+/*
+ * 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
+ *
+ * http://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.
+ */
+
+package androidx.compose.ui.text
+
+import androidx.compose.ui.text.font.toFontFamily
+import androidx.compose.ui.text.style.TextDirection
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.sp
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SdkSuppress
+import androidx.test.filters.SmallTest
+import androidx.test.platform.app.InstrumentationRegistry
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+@SdkSuppress(minSdkVersion = 23)
+@SmallTest
+class ParagraphIntegrationBoundingBoxTest {
+ private val fontFamilyMeasureFont = FontTestData.BASIC_MEASURE_FONT.toFontFamily()
+ private val context = InstrumentationRegistry.getInstrumentation().context
+ private val fontFamilyResolver = UncachedFontFamilyResolver(context)
+ private val defaultDensity = Density(density = 1f)
+ private val fontSize = 10.sp
+ private val fontSizeInPx = with(defaultDensity) { fontSize.roundToPx() }
+
+ @Test
+ fun ltr_noBreak_noMaxLines_smallWidth_noHeight() {
+ testParagraph(TextDirection.Ltr, LineBreakFrom.No, widthInFontSize = 3)
+ .assertBoxLRTB(
+ offset = 5,
+ left = fontSizeInPx * 1,
+ right = fontSizeInPx * 2,
+ top = fontSizeInPx,
+ bottom = fontSizeInPx * 2
+ )
+ }
+
+ @Test
+ fun ltr_noBreak_noMaxLines_smallWidth_smallHeight() {
+ testParagraph(
+ textDirection = TextDirection.Ltr,
+ lineBreakFrom = LineBreakFrom.No,
+ widthInFontSize = 3,
+ heightIntFontSize = 1
+ ).assertBoxLRTB(
+ offset = 5,
+ left = fontSizeInPx * 3,
+ right = fontSizeInPx * 3,
+ top = 0,
+ bottom = fontSizeInPx
+ )
+ }
+
+ @Test
+ fun ltr_noBreak_noMaxLines_largeWidth_noHeight() {
+ testParagraph(TextDirection.Ltr, LineBreakFrom.No, widthInFontSize = 7)
+ .assertBoxLRTB(
+ offset = 5,
+ left = fontSizeInPx * 5,
+ right = fontSizeInPx * 6,
+ top = 0,
+ bottom = fontSizeInPx
+ )
+ }
+
+ @Test
+ fun ltr_noBreak_1MaxLines_smallWidth_noHeight() {
+ testParagraph(TextDirection.Ltr, LineBreakFrom.No, widthInFontSize = 3, maxLines = 1)
+ .assertBoxLRTB(
+ offset = 5,
+ left = fontSizeInPx * 3,
+ right = fontSizeInPx * 3,
+ top = 0,
+ bottom = fontSizeInPx
+ )
+ }
+
+ @Test
+ fun ltr_noBreak_1MaxLines_smallWidth_smallHeight() {
+ testParagraph(
+ TextDirection.Ltr,
+ LineBreakFrom.No,
+ widthInFontSize = 3,
+ heightIntFontSize = 1,
+ maxLines = 1
+ )
+ .assertBoxLRTB(
+ offset = 5,
+ left = fontSizeInPx * 3,
+ right = fontSizeInPx * 3,
+ top = 0,
+ bottom = fontSizeInPx
+ )
+ }
+
+ @Test
+ fun ltr_firstBreak_noMaxLines_smallWidth_noHeight() {
+ testParagraph(TextDirection.Ltr, LineBreakFrom.First, widthInFontSize = 3)
+ .assertBoxLRTB(
+ offset = 5,
+ left = fontSizeInPx * 1,
+ right = fontSizeInPx * 2,
+ top = fontSizeInPx,
+ bottom = fontSizeInPx * 2
+ )
+ }
+
+ @Test
+ fun ltr_firstBreak_noMaxLines_smallWidth_smallHeight() {
+ testParagraph(
+ TextDirection.Ltr,
+ LineBreakFrom.First,
+ widthInFontSize = 3,
+ heightIntFontSize = 1
+ )
+ .assertBoxLRTB(
+ offset = 5,
+ left = fontSizeInPx * 3,
+ right = fontSizeInPx * 3,
+ top = 0,
+ bottom = fontSizeInPx
+ )
+ }
+
+ @Test
+ fun ltr_firstBreak_noMaxLines_largeWidth_noHeight() {
+ testParagraph(TextDirection.Ltr, LineBreakFrom.First, widthInFontSize = 7)
+ .assertBoxLRTB(
+ offset = 5,
+ left = fontSizeInPx * 1,
+ right = fontSizeInPx * 2,
+ top = fontSizeInPx,
+ bottom = fontSizeInPx * 2
+ )
+ }
+
+ @Test
+ fun ltr_firstBreak_1MaxLines_smallWidth_noHeight() {
+ testParagraph(TextDirection.Ltr, LineBreakFrom.First, widthInFontSize = 3, maxLines = 1)
+ .assertBoxLRTB(
+ offset = 5,
+ left = fontSizeInPx * 3,
+ right = fontSizeInPx * 3,
+ top = 0,
+ bottom = fontSizeInPx
+ )
+ }
+
+ @Test
+ fun ltr_firstBreak_1MaxLines_smallWidth_smallHeight() {
+ testParagraph(
+ TextDirection.Ltr,
+ LineBreakFrom.First,
+ widthInFontSize = 3,
+ heightIntFontSize = 1,
+ maxLines = 1
+ )
+ .assertBoxLRTB(
+ offset = 5,
+ left = fontSizeInPx * 3,
+ right = fontSizeInPx * 3,
+ top = 0,
+ bottom = fontSizeInPx
+ )
+ }
+
+ @Test
+ fun ltr_secondBreak_noMaxLines_smallWidth_smallHeight() {
+ testParagraph(
+ TextDirection.Ltr,
+ LineBreakFrom.Second,
+ widthInFontSize = 3,
+ heightIntFontSize = 1
+ )
+ .assertBoxLRTB(
+ offset = 9,
+ left = fontSizeInPx * 3,
+ right = fontSizeInPx * 3,
+ top = 0,
+ bottom = fontSizeInPx
+ )
+ }
+
+ @Test
+ fun ltr_secondBreak_noMaxLines_largeWidth_noHeight() {
+ testParagraph(TextDirection.Ltr, LineBreakFrom.Second, widthInFontSize = 7)
+ .assertBoxLRTB(
+ offset = 9,
+ left = fontSizeInPx * 1,
+ right = fontSizeInPx * 2,
+ top = fontSizeInPx,
+ bottom = fontSizeInPx * 2
+ )
+ }
+
+ @Test
+ fun ltr_secondBreak_1MaxLines_smallWidth_noHeight() {
+ testParagraph(TextDirection.Ltr, LineBreakFrom.Second, widthInFontSize = 3, maxLines = 1)
+ .assertBoxLRTB(
+ offset = 9,
+ left = fontSizeInPx * 3,
+ right = fontSizeInPx * 3,
+ top = 0,
+ bottom = fontSizeInPx
+ )
+ }
+
+ @Test
+ fun ltr_secondBreak_1MaxLines_smallWidth_smallHeight() {
+ testParagraph(
+ TextDirection.Ltr,
+ LineBreakFrom.Second,
+ widthInFontSize = 3,
+ heightIntFontSize = 1,
+ maxLines = 1
+ )
+ .assertBoxLRTB(
+ offset = 9,
+ left = fontSizeInPx * 3,
+ right = fontSizeInPx * 3,
+ top = 0,
+ bottom = fontSizeInPx
+ )
+ }
+
+ @Test
+ fun rtl_noBreak_noMaxLines_smallWidth_noHeight() {
+ testParagraph(TextDirection.Rtl, LineBreakFrom.No, widthInFontSize = 3)
+ .assertBoxLRTB(
+ offset = 5,
+ left = fontSizeInPx * 1,
+ right = fontSizeInPx * 2,
+ top = fontSizeInPx,
+ bottom = fontSizeInPx * 2
+ )
+ }
+
+ @Test
+ fun rtl_noBreak_noMaxLines_smallWidth_smallHeight() {
+ testParagraph(
+ textDirection = TextDirection.Rtl,
+ lineBreakFrom = LineBreakFrom.No,
+ widthInFontSize = 3,
+ heightIntFontSize = 1
+ )
+ .assertBoxLRTB(
+ offset = 5,
+ left = 0,
+ right = 0,
+ top = 0,
+ bottom = fontSizeInPx
+ )
+ }
+
+ @Test
+ fun rtl_noBreak_noMaxLines_largeWidth_noHeight() {
+ testParagraph(TextDirection.Rtl, LineBreakFrom.No, widthInFontSize = 7)
+ .assertBoxLRTB(
+ offset = 5,
+ left = fontSizeInPx,
+ right = fontSizeInPx * 2,
+ top = 0,
+ bottom = fontSizeInPx
+ )
+ }
+
+ @Test
+ fun rtl_noBreak_1MaxLines_smallWidth_noHeight() {
+ testParagraph(TextDirection.Rtl, LineBreakFrom.No, widthInFontSize = 3, maxLines = 1)
+ .assertBoxLRTB(
+ offset = 5,
+ left = 0,
+ right = 0,
+ top = 0,
+ bottom = fontSizeInPx
+ )
+ }
+
+ @Test
+ fun rtl_noBreak_1MaxLines_smallWidth_smallHeight() {
+ testParagraph(
+ TextDirection.Rtl,
+ LineBreakFrom.No,
+ widthInFontSize = 3,
+ heightIntFontSize = 1,
+ maxLines = 1
+ )
+ .assertBoxLRTB(
+ offset = 5,
+ left = 0,
+ right = 0,
+ top = 0,
+ bottom = fontSizeInPx
+ )
+ }
+
+ @Test
+ fun rtl_firstBreak_noMaxLines_smallWidth_noHeight() {
+ testParagraph(TextDirection.Rtl, LineBreakFrom.First, widthInFontSize = 3)
+ .assertBoxLRTB(
+ offset = 5,
+ left = fontSizeInPx * 1,
+ right = fontSizeInPx * 2,
+ top = fontSizeInPx,
+ bottom = fontSizeInPx * 2
+ )
+ }
+
+ @Test
+ fun rtl_firstBreak_noMaxLines_smallWidth_smallHeight() {
+ testParagraph(
+ TextDirection.Rtl,
+ LineBreakFrom.First,
+ widthInFontSize = 3,
+ heightIntFontSize = 1
+ )
+ .assertBoxLRTB(
+ offset = 5,
+ left = 0,
+ right = 0,
+ top = 0,
+ bottom = fontSizeInPx
+ )
+ }
+
+ @Test
+ fun rtl_firstBreak_noMaxLines_largeWidth_noHeight() {
+ testParagraph(TextDirection.Rtl, LineBreakFrom.First, widthInFontSize = 7)
+ .assertBoxLRTB(
+ offset = 5,
+ left = fontSizeInPx * 5,
+ right = fontSizeInPx * 6,
+ top = fontSizeInPx,
+ bottom = fontSizeInPx * 2
+ )
+ }
+
+ @Test
+ fun rtl_firstBreak_1MaxLines_smallWidth_noHeight() {
+ testParagraph(TextDirection.Rtl, LineBreakFrom.First, widthInFontSize = 3, maxLines = 1)
+ .assertBoxLRTB(
+ offset = 5,
+ left = 0,
+ right = 0,
+ top = 0,
+ bottom = fontSizeInPx
+ )
+ }
+
+ @Test
+ fun rtl_firstBreak_1MaxLines_smallWidth_smallHeight() {
+ testParagraph(
+ TextDirection.Rtl,
+ LineBreakFrom.First,
+ widthInFontSize = 3,
+ heightIntFontSize = 1,
+ maxLines = 1
+ )
+ .assertBoxLRTB(
+ offset = 5,
+ left = 0,
+ right = 0,
+ top = 0,
+ bottom = fontSizeInPx
+ )
+ }
+
+ private fun testParagraph(
+ textDirection: TextDirection,
+ lineBreakFrom: LineBreakFrom,
+ widthInFontSize: Int,
+ heightIntFontSize: Int? = null,
+ maxLines: Int = Int.MAX_VALUE
+ ) = Paragraph(
+ text = TEST_CONTENT_MAP[textDirection]!![lineBreakFrom]!!,
+ style = TextStyle(fontFamily = fontFamilyMeasureFont, fontSize = fontSize),
+ maxLines = maxLines,
+ ellipsis = true,
+ constraints = Constraints(
+ maxWidth = (widthInFontSize * fontSizeInPx),
+ maxHeight = (heightIntFontSize?.times(fontSizeInPx)) ?: Constraints.Infinity,
+ ),
+ density = defaultDensity,
+ fontFamilyResolver = fontFamilyResolver
+ )
+
+ private fun Paragraph.assertBoxLRTB(
+ offset: Int,
+ left: Int,
+ right: Int,
+ top: Int,
+ bottom: Int
+ ) {
+ val box = getBoundingBox(offset)
+ assertThat(box.left).isEqualTo(left)
+ assertThat(box.right).isEqualTo(right)
+ assertThat(box.top).isEqualTo(top)
+ assertThat(box.bottom).isEqualTo(bottom)
+ }
+}
+
+private enum class LineBreakFrom {
+ No,
+ First,
+ Second
+}
+
+private val TEST_CONTENT_MAP = mapOf(
+ TextDirection.Ltr to mapOf(
+ LineBreakFrom.No to "abc def abc",
+ LineBreakFrom.First to "abc\ndef abc",
+ LineBreakFrom.Second to "abc def\nabc",
+ ),
+ TextDirection.Rtl to mapOf(
+ LineBreakFrom.No to "\u05D0\u05D2\u05D2 \u05D3\u05D4\u05D5 \u05D0\u05D2\u05D2",
+ LineBreakFrom.First to "\u05D0\u05D2\u05D2\n\u05D3\u05D4\u05D5 \u05D0\u05D2\u05D2",
+ LineBreakFrom.Second to "\u05D0\u05D2\u05D2 \u05D3\u05D4\u05D5\n\u05D0\u05D2\u05D2",
+ )
+)
\ No newline at end of file
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationIndentationFixTest.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationIndentationFixTest.kt
index 20fe4e3..91547fd 100644
--- a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationIndentationFixTest.kt
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationIndentationFixTest.kt
@@ -25,13 +25,13 @@
import androidx.compose.ui.unit.TextUnit
import androidx.compose.ui.unit.em
import androidx.compose.ui.unit.sp
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@RunWith(AndroidJUnit4::class)
@SmallTest
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationLineHeightStyleTest.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationLineHeightStyleTest.kt
index d68bd57..61ce517 100644
--- a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationLineHeightStyleTest.kt
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationLineHeightStyleTest.kt
@@ -20,19 +20,19 @@
import androidx.compose.ui.text.android.style.lineHeight
import androidx.compose.ui.text.font.toFontFamily
import androidx.compose.ui.text.style.LineHeightStyle
-import androidx.compose.ui.text.style.LineHeightStyle.Trim
import androidx.compose.ui.text.style.LineHeightStyle.Alignment
+import androidx.compose.ui.text.style.LineHeightStyle.Trim
import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.sp
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
import com.google.common.truth.Truth.assertThat
-import org.junit.Test
-import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
import kotlin.math.abs
import kotlin.math.ceil
+import org.junit.Test
+import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
@SmallTest
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationTest.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationTest.kt
index 1b3119b..0649f7f 100644
--- a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationTest.kt
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationTest.kt
@@ -677,7 +677,139 @@
}
@Test
- fun getBoundingBox_ltr_textPosition_negative() {
+ fun getBoundingBox_ltr_multiLines_lineFeedEllipsized_maxLines() {
+ with(defaultDensity) {
+ val text = "abc def\ndef"
+ val fontSize = 50.sp
+ val fontSizeInPx = fontSize.toPx()
+ val paragraph = simpleParagraph(
+ text = text,
+ style = TextStyle(fontSize = fontSize),
+ width = 3 * fontSizeInPx,
+ ellipsis = true,
+ maxLines = 1
+ )
+
+ val box = paragraph.getBoundingBox(9)
+ assertThat(box.left).isEqualTo(3 * fontSizeInPx)
+ assertThat(box.right).isEqualTo(3 * fontSizeInPx)
+ assertThat(box.top).isEqualTo(0)
+ assertThat(box.bottom).isEqualTo(fontSizeInPx)
+ }
+ }
+
+ @Test
+ fun getBoundingBox_bidi_singleLineHeight_softWrap_ellipsized() {
+ with(defaultDensity) {
+ val text = "abc \u05D0\u05D1\u05D2"
+ val fontSize = 50.sp
+ val fontSizeInPx = fontSize.toPx()
+ val paragraph = simpleParagraph(
+ text = text,
+ style = TextStyle(fontSize = fontSize),
+ width = 3 * fontSizeInPx,
+ height = fontSizeInPx,
+ ellipsis = true
+ )
+
+ val box = paragraph.getBoundingBox(5)
+ assertThat(box.left).isEqualTo(3 * fontSizeInPx)
+ assertThat(box.right).isEqualTo(3 * fontSizeInPx)
+ assertThat(box.top).isEqualTo(0)
+ assertThat(box.bottom).isEqualTo(fontSizeInPx)
+ }
+ }
+
+ @Test
+ fun getBoundingBox_bidi_singleLineHeight_softWrap_ellipsized_beforeLineFeed() {
+ with(defaultDensity) {
+ val text = "abc \u05D0\n\u05D1\u05D2"
+ val fontSize = 50.sp
+ val fontSizeInPx = fontSize.toPx()
+ val paragraph = simpleParagraph(
+ text = text,
+ style = TextStyle(fontSize = fontSize),
+ width = 3 * fontSizeInPx,
+ height = fontSizeInPx,
+ ellipsis = true
+ )
+
+ val box = paragraph.getBoundingBox(4)
+ assertThat(box.left).isEqualTo(3 * fontSizeInPx)
+ assertThat(box.right).isEqualTo(3 * fontSizeInPx)
+ assertThat(box.top).isEqualTo(0)
+ assertThat(box.bottom).isEqualTo(fontSizeInPx)
+ }
+ }
+
+ @Test
+ fun getBoundingBox_rtl_multiLines_lineFeedEllipsized_maxLines() {
+ with(defaultDensity) {
+ val text = "\u05D0\u05D1\u05D2 \u05D3\u05D4\u05D5\n\u05D0\u05D1\u05D2"
+ val fontSize = 50.sp
+ val fontSizeInPx = fontSize.toPx()
+ val paragraph = simpleParagraph(
+ text = text,
+ style = TextStyle(fontSize = fontSize),
+ width = 3 * fontSizeInPx,
+ ellipsis = true,
+ maxLines = 1
+ )
+
+ val box = paragraph.getBoundingBox(9)
+ assertThat(box.left).isEqualTo(0)
+ assertThat(box.right).isEqualTo(0)
+ assertThat(box.top).isEqualTo(0)
+ assertThat(box.bottom).isEqualTo(fontSizeInPx)
+ }
+ }
+
+ @Test
+ fun getBoundingBox_ltr_multiLines_lineFeedEllipsized_maxHeight() {
+ with(defaultDensity) {
+ val text = "abc def\ndef"
+ val fontSize = 50.sp
+ val fontSizeInPx = fontSize.toPx()
+ val paragraph = simpleParagraph(
+ text = text,
+ style = TextStyle(fontSize = fontSize),
+ width = 3 * fontSizeInPx,
+ ellipsis = true,
+ height = fontSizeInPx
+ )
+
+ val box = paragraph.getBoundingBox(9)
+ assertThat(box.left).isEqualTo(3 * fontSizeInPx)
+ assertThat(box.right).isEqualTo(3 * fontSizeInPx)
+ assertThat(box.top).isEqualTo(0)
+ assertThat(box.bottom).isEqualTo(fontSizeInPx)
+ }
+ }
+
+ @Test
+ fun getBoundingBox_rtl_multiLines_lineFeedEllipsized_maxHeight() {
+ with(defaultDensity) {
+ val text = "\u05D0\u05D1\u05D2 \u05D3\u05D4\u05D5\n\u05D0\u05D1\u05D2"
+ val fontSize = 50.sp
+ val fontSizeInPx = fontSize.toPx()
+ val paragraph = simpleParagraph(
+ text = text,
+ style = TextStyle(fontSize = fontSize),
+ width = 3 * fontSizeInPx,
+ ellipsis = true,
+ height = fontSizeInPx
+ )
+
+ val box = paragraph.getBoundingBox(9)
+ assertThat(box.left).isEqualTo(0)
+ assertThat(box.right).isEqualTo(0)
+ assertThat(box.top).isEqualTo(0)
+ assertThat(box.bottom).isEqualTo(fontSizeInPx)
+ }
+ }
+
+ @Test(expected = java.lang.IllegalArgumentException::class)
+ fun getBoundingBox_ltr_textPosition_negative_throws_exception() {
with(defaultDensity) {
val text = "abc"
val fontSize = 50.sp
@@ -697,8 +829,7 @@
}
}
- @Test(expected = java.lang.IndexOutOfBoundsException::class)
- @SdkSuppress(minSdkVersion = 26)
+ @Test(expected = java.lang.IllegalArgumentException::class)
fun getBoundingBox_ltr_textPosition_larger_than_length_throw_exception() {
with(defaultDensity) {
val text = "abc"
@@ -715,7 +846,7 @@
}
}
- @Test(expected = java.lang.AssertionError::class)
+ @Test(expected = java.lang.IllegalArgumentException::class)
fun getCursorRect_larger_than_length_throw_exception() {
with(defaultDensity) {
val text = "abc"
@@ -731,7 +862,7 @@
}
}
- @Test(expected = java.lang.AssertionError::class)
+ @Test(expected = java.lang.IllegalArgumentException::class)
fun getCursorRect_negative_throw_exception() {
with(defaultDensity) {
val text = "abc"
@@ -4288,7 +4419,7 @@
}
}
- @Test(expected = AssertionError::class)
+ @Test(expected = IllegalArgumentException::class)
fun getPathForRange_throws_exception_if_start_larger_than_end() {
val text = "ab"
val textStart = 0
@@ -4298,7 +4429,7 @@
paragraph.getPathForRange(textEnd, textStart)
}
- @Test(expected = AssertionError::class)
+ @Test(expected = IllegalArgumentException::class)
fun getPathForRange_throws_exception_if_start_is_smaller_than_zero() {
val text = "ab"
val textStart = 0
@@ -4308,7 +4439,7 @@
paragraph.getPathForRange(textStart - 2, textEnd - 1)
}
- @Test(expected = AssertionError::class)
+ @Test(expected = IllegalArgumentException::class)
fun getPathForRange_throws_exception_if_end_is_larger_than_text_length() {
val text = "ab"
val textStart = 0
@@ -4589,7 +4720,8 @@
ellipsis: Boolean = false,
spanStyles: List<AnnotatedString.Range<SpanStyle>> = listOf(),
density: Density? = null,
- width: Float = Float.MAX_VALUE
+ width: Float = Float.MAX_VALUE,
+ height: Float = Float.MAX_VALUE
): Paragraph {
return Paragraph(
text = text,
@@ -4599,7 +4731,7 @@
).merge(style),
maxLines = maxLines,
ellipsis = ellipsis,
- constraints = Constraints(maxWidth = width.ceilToInt()),
+ constraints = Constraints(maxWidth = width.ceilToInt(), maxHeight = height.ceilToInt()),
density = density ?: defaultDensity,
fontFamilyResolver = UncachedFontFamilyResolver(context)
)
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationTextDirectionTest.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationTextDirectionTest.kt
index c41aea5..6416362 100644
--- a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationTextDirectionTest.kt
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationTextDirectionTest.kt
@@ -20,15 +20,15 @@
import androidx.compose.ui.text.style.ResolvedTextDirection
import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.Density
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
import com.google.common.truth.Truth.assertThat
+import java.util.Locale
import org.junit.After
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import java.util.Locale
@RunWith(AndroidJUnit4::class)
@SmallTest
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntrinsicIntegrationTest.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntrinsicIntegrationTest.kt
index 322fee0..aa8e859 100644
--- a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntrinsicIntegrationTest.kt
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntrinsicIntegrationTest.kt
@@ -21,12 +21,12 @@
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.TextUnit
import androidx.compose.ui.unit.sp
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@RunWith(AndroidJUnit4::class)
@SmallTest
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/StringTest.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/StringTest.kt
index d151b1e..87f155b 100644
--- a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/StringTest.kt
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/StringTest.kt
@@ -17,12 +17,12 @@
package androidx.compose.ui.text
import androidx.compose.ui.text.intl.LocaleList
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
+import java.util.Locale
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import java.util.Locale
@RunWith(AndroidJUnit4::class)
@SmallTest
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/font/AndroidFontTest.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/font/AndroidFontTest.kt
index 21b13dd..d5390c5 100644
--- a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/font/AndroidFontTest.kt
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/font/AndroidFontTest.kt
@@ -25,11 +25,11 @@
import androidx.test.filters.SdkSuppress
import androidx.test.platform.app.InstrumentationRegistry
import com.google.common.truth.Truth.assertThat
+import java.io.File
import org.junit.After
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import java.io.File
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/font/DelegatingFontLoaderForDeprecatedUsageTest.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/font/DelegatingFontLoaderForDeprecatedUsageTest.kt
index 8d69e3a..d42258b 100644
--- a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/font/DelegatingFontLoaderForDeprecatedUsageTest.kt
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/font/DelegatingFontLoaderForDeprecatedUsageTest.kt
@@ -25,9 +25,9 @@
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
import com.google.common.truth.Truth.assertThat
-import org.mockito.kotlin.mock
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.kotlin.mock
@RunWith(AndroidJUnit4::class)
@SmallTest
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/font/FontFamilyResolverFileTest.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/font/FontFamilyResolverFileTest.kt
index d0c931e..daf1c07 100644
--- a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/font/FontFamilyResolverFileTest.kt
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/font/FontFamilyResolverFileTest.kt
@@ -26,11 +26,11 @@
import androidx.test.filters.MediumTest
import androidx.test.filters.SdkSuppress
import androidx.test.platform.app.InstrumentationRegistry
+import java.io.File
import org.junit.After
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import java.io.File
@RunWith(AndroidJUnit4::class)
@MediumTest
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapterTest.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapterTest.kt
index b6168c47..e5de0d1 100644
--- a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapterTest.kt
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapterTest.kt
@@ -29,6 +29,9 @@
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import kotlin.coroutines.coroutineContext
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.CoroutineExceptionHandler
@@ -39,19 +42,16 @@
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.TestCoroutineDispatcher
import kotlinx.coroutines.test.TestCoroutineScope
+import kotlinx.coroutines.test.advanceTimeBy
+import kotlinx.coroutines.test.advanceUntilIdle
import kotlinx.coroutines.test.runBlockingTest
+import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.withTimeout
import kotlinx.coroutines.yield
import org.junit.After
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
-import kotlin.coroutines.coroutineContext
-import kotlinx.coroutines.test.advanceTimeBy
-import kotlinx.coroutines.test.advanceUntilIdle
-import kotlinx.coroutines.test.runCurrent
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/input/BackspaceCommandTest.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/input/BackspaceCommandTest.kt
index abce9eb..9d05c2b 100644
--- a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/input/BackspaceCommandTest.kt
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/input/BackspaceCommandTest.kt
@@ -16,12 +16,12 @@
package androidx.compose.ui.text.input
import androidx.compose.ui.text.TextRange
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/input/MoveCursorCommandTest.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/input/MoveCursorCommandTest.kt
index fa563af..849d7f8 100644
--- a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/input/MoveCursorCommandTest.kt
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/input/MoveCursorCommandTest.kt
@@ -17,12 +17,12 @@
package androidx.compose.ui.text.input
import androidx.compose.ui.text.TextRange
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/intl/LocaleListTest.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/intl/LocaleListTest.kt
index f7e356c..d43cf4e 100644
--- a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/intl/LocaleListTest.kt
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/intl/LocaleListTest.kt
@@ -16,11 +16,11 @@
package androidx.compose.ui.text.intl
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@RunWith(AndroidJUnit4::class)
@SmallTest
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/intl/LocaleTest.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/intl/LocaleTest.kt
index a054588..44ecab1 100644
--- a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/intl/LocaleTest.kt
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/intl/LocaleTest.kt
@@ -16,11 +16,11 @@
package androidx.compose.ui.text.intl
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@RunWith(AndroidJUnit4::class)
@SmallTest
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/matchers/ComposeMatchers.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/matchers/ComposeMatchers.kt
index c377578..90b4e7c 100644
--- a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/matchers/ComposeMatchers.kt
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/matchers/ComposeMatchers.kt
@@ -18,8 +18,8 @@
import android.graphics.Bitmap
import android.graphics.Typeface
-import androidx.compose.ui.text.font.TypefaceResult
import androidx.compose.ui.geometry.Rect
+import androidx.compose.ui.text.font.TypefaceResult
import com.google.common.truth.IntegerSubject
import com.google.common.truth.Truth.assertAbout
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/matchers/RectSubject.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/matchers/RectSubject.kt
index 4275a98..d253cae 100644
--- a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/matchers/RectSubject.kt
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/matchers/RectSubject.kt
@@ -17,11 +17,11 @@
package androidx.compose.ui.text.matchers
import androidx.compose.ui.geometry.Rect
-import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Fact.simpleFact
import com.google.common.truth.FailureMetadata
import com.google.common.truth.Subject
import com.google.common.truth.Subject.Factory
+import com.google.common.truth.Truth.assertThat
internal class RectSubject private constructor(
failureMetadata: FailureMetadata?,
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidTypefaceCacheTest.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidTypefaceCacheTest.kt
index 2f01f2f..162b8b0 100644
--- a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidTypefaceCacheTest.kt
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidTypefaceCacheTest.kt
@@ -18,11 +18,11 @@
import androidx.compose.ui.text.FontTestData
import androidx.compose.ui.text.matchers.assertThat
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@RunWith(AndroidJUnit4::class)
@SmallTest
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidTypefaceSubsetTest.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidTypefaceSubsetTest.kt
index 8667cf4..0410d86 100644
--- a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidTypefaceSubsetTest.kt
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidTypefaceSubsetTest.kt
@@ -24,11 +24,11 @@
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.font.Typeface
import androidx.compose.ui.text.matchers.assertThat
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@RunWith(AndroidJUnit4::class)
@SmallTest
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/GenericFontFamilyCacheTest.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/GenericFontFamilyCacheTest.kt
index 7852e76..121461be 100644
--- a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/GenericFontFamilyCacheTest.kt
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/GenericFontFamilyCacheTest.kt
@@ -21,10 +21,10 @@
import androidx.compose.ui.text.font.FontSynthesis
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.matchers.assertThat
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@RunWith(AndroidJUnit4::class)
@SmallTest
diff --git a/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/AndroidParagraph.android.kt b/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/AndroidParagraph.android.kt
index cc2ed1d..677b664 100644
--- a/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/AndroidParagraph.android.kt
+++ b/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/AndroidParagraph.android.kt
@@ -16,7 +16,6 @@
package androidx.compose.ui.text
-import java.util.Locale as JavaLocale
import android.os.Build
import android.text.Spannable
import android.text.SpannableString
@@ -45,15 +44,15 @@
import androidx.compose.ui.text.android.LayoutCompat.BREAK_STRATEGY_HIGH_QUALITY
import androidx.compose.ui.text.android.LayoutCompat.BREAK_STRATEGY_SIMPLE
import androidx.compose.ui.text.android.LayoutCompat.DEFAULT_ALIGNMENT
-import androidx.compose.ui.text.android.LayoutCompat.DEFAULT_HYPHENATION_FREQUENCY
import androidx.compose.ui.text.android.LayoutCompat.DEFAULT_BREAK_STRATEGY
+import androidx.compose.ui.text.android.LayoutCompat.DEFAULT_HYPHENATION_FREQUENCY
import androidx.compose.ui.text.android.LayoutCompat.DEFAULT_JUSTIFICATION_MODE
import androidx.compose.ui.text.android.LayoutCompat.DEFAULT_LINESPACING_MULTIPLIER
-import androidx.compose.ui.text.android.LayoutCompat.HYPHENATION_FREQUENCY_NONE
-import androidx.compose.ui.text.android.LayoutCompat.HYPHENATION_FREQUENCY_FULL
-import androidx.compose.ui.text.android.LayoutCompat.HYPHENATION_FREQUENCY_FULL_FAST
import androidx.compose.ui.text.android.LayoutCompat.DEFAULT_LINE_BREAK_STYLE
import androidx.compose.ui.text.android.LayoutCompat.DEFAULT_LINE_BREAK_WORD_STYLE
+import androidx.compose.ui.text.android.LayoutCompat.HYPHENATION_FREQUENCY_FULL
+import androidx.compose.ui.text.android.LayoutCompat.HYPHENATION_FREQUENCY_FULL_FAST
+import androidx.compose.ui.text.android.LayoutCompat.HYPHENATION_FREQUENCY_NONE
import androidx.compose.ui.text.android.LayoutCompat.JUSTIFICATION_MODE_INTER_WORD
import androidx.compose.ui.text.android.LayoutCompat.LINE_BREAK_STYLE_LOOSE
import androidx.compose.ui.text.android.LayoutCompat.LINE_BREAK_STYLE_NONE
@@ -80,6 +79,7 @@
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.TextUnit
import androidx.compose.ui.unit.sp
+import java.util.Locale as JavaLocale
/**
* Android specific implementation for [Paragraph]
@@ -310,6 +310,9 @@
* the top, bottom, left and right of a character.
*/
override fun getBoundingBox(offset: Int): Rect {
+ require(offset in charSequence.indices) {
+ "offset($offset) is out of bounds [0,${charSequence.length})"
+ }
val rectF = layout.getBoundingBox(offset)
return with(rectF) { Rect(left = left, top = top, right = right, bottom = bottom) }
}
@@ -348,11 +351,9 @@
}
override fun getPathForRange(start: Int, end: Int): Path {
- if (start !in 0..end || end > charSequence.length) {
- throw AssertionError(
- "Start($start) or End($end) is out of Range(0..${charSequence.length})," +
- " or start > end!"
- )
+ require(start in 0..end && end <= charSequence.length) {
+ "start($start) or end($end) is out of range [0..${charSequence.length}]," +
+ " or start > end!"
}
val path = android.graphics.Path()
layout.getSelectionPath(start, end, path)
@@ -360,8 +361,8 @@
}
override fun getCursorRect(offset: Int): Rect {
- if (offset !in 0..charSequence.length) {
- throw AssertionError("offset($offset) is out of bounds (0,${charSequence.length}")
+ require(offset in 0..charSequence.length) {
+ "offset($offset) is out of bounds [0,${charSequence.length}]"
}
val horizontal = layout.getPrimaryHorizontal(offset)
val line = layout.getLineForOffset(offset)
diff --git a/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/intl/AndroidLocaleDelegate.android.kt b/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/intl/AndroidLocaleDelegate.android.kt
index 0f87b74..8c3d370 100644
--- a/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/intl/AndroidLocaleDelegate.android.kt
+++ b/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/intl/AndroidLocaleDelegate.android.kt
@@ -16,10 +16,10 @@
package androidx.compose.ui.text.intl
-import androidx.annotation.RequiresApi
import android.os.LocaleList as AndroidLocaleList
-import java.util.Locale as JavaLocale
+import androidx.annotation.RequiresApi
import androidx.compose.ui.text.platform.createSynchronizedObject
+import java.util.Locale as JavaLocale
/**
* An Android implementation of Locale object
diff --git a/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidTypeface.android.kt b/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidTypeface.android.kt
index e525241..f5fd858 100644
--- a/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidTypeface.android.kt
+++ b/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidTypeface.android.kt
@@ -16,11 +16,11 @@
package androidx.compose.ui.text.platform
-import androidx.compose.ui.text.font.Typeface
+import android.graphics.Typeface as NativeTypeface
import androidx.compose.ui.text.font.FontStyle
import androidx.compose.ui.text.font.FontSynthesis
import androidx.compose.ui.text.font.FontWeight
-import android.graphics.Typeface as NativeTypeface
+import androidx.compose.ui.text.font.Typeface
/**
* An interface of Android specific Typeface.
diff --git a/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/caches/LruCache.kt b/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/caches/LruCache.kt
index abf9bea..7cbb111 100644
--- a/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/caches/LruCache.kt
+++ b/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/caches/LruCache.kt
@@ -18,7 +18,6 @@
import androidx.compose.ui.text.platform.createSynchronizedObject
import androidx.compose.ui.text.platform.synchronized
-
import kotlin.jvm.JvmName
/**
diff --git a/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter.kt b/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter.kt
index 10b9df2..783254f 100644
--- a/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter.kt
+++ b/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter.kt
@@ -28,6 +28,9 @@
import androidx.compose.ui.text.platform.synchronized
import androidx.compose.ui.util.fastForEach
import androidx.compose.ui.util.fastMap
+import kotlin.coroutines.CoroutineContext
+import kotlin.coroutines.EmptyCoroutineContext
+import kotlin.coroutines.coroutineContext
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.CoroutineExceptionHandler
import kotlinx.coroutines.CoroutineScope
@@ -42,9 +45,6 @@
import kotlinx.coroutines.withTimeout
import kotlinx.coroutines.withTimeoutOrNull
import kotlinx.coroutines.yield
-import kotlin.coroutines.CoroutineContext
-import kotlin.coroutines.EmptyCoroutineContext
-import kotlin.coroutines.coroutineContext
internal class FontListFontFamilyTypefaceAdapter(
private val asyncTypefaceCache: AsyncTypefaceCache = AsyncTypefaceCache(),
diff --git a/compose/ui/ui-text/src/desktopMain/kotlin/androidx/compose/ui/text/platform/DesktopFont.desktop.kt b/compose/ui/ui-text/src/desktopMain/kotlin/androidx/compose/ui/text/platform/DesktopFont.desktop.kt
index 4a7a9f2..9471053 100644
--- a/compose/ui/ui-text/src/desktopMain/kotlin/androidx/compose/ui/text/platform/DesktopFont.desktop.kt
+++ b/compose/ui/ui-text/src/desktopMain/kotlin/androidx/compose/ui/text/platform/DesktopFont.desktop.kt
@@ -28,8 +28,8 @@
import java.io.File
import java.security.MessageDigest
import org.jetbrains.skia.Data
-import org.jetbrains.skia.makeFromFile
import org.jetbrains.skia.Typeface as SkTypeface
+import org.jetbrains.skia.makeFromFile
actual sealed class PlatformFont : Font {
actual abstract val identity: String
diff --git a/compose/ui/ui-text/src/desktopTest/kotlin/androidx/compose/ui/text/DesktopParagraphTest.kt b/compose/ui/ui-text/src/desktopTest/kotlin/androidx/compose/ui/text/DesktopParagraphTest.kt
index b772c2f..f9c9607 100644
--- a/compose/ui/ui-text/src/desktopTest/kotlin/androidx/compose/ui/text/DesktopParagraphTest.kt
+++ b/compose/ui/ui-text/src/desktopTest/kotlin/androidx/compose/ui/text/DesktopParagraphTest.kt
@@ -21,10 +21,10 @@
import androidx.compose.ui.graphics.Canvas
import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.test.junit4.createComposeRule
-import androidx.compose.ui.text.font.createFontFamilyResolver
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontStyle
import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.font.createFontFamilyResolver
import androidx.compose.ui.text.platform.Font
import androidx.compose.ui.text.style.TextDirection
import androidx.compose.ui.unit.Constraints
diff --git a/compose/ui/ui-text/src/jvmMain/kotlin/androidx/compose/ui/text/JvmAnnotatedString.jvm.kt b/compose/ui/ui-text/src/jvmMain/kotlin/androidx/compose/ui/text/JvmAnnotatedString.jvm.kt
index 09a611f..62a82c2 100644
--- a/compose/ui/ui-text/src/jvmMain/kotlin/androidx/compose/ui/text/JvmAnnotatedString.jvm.kt
+++ b/compose/ui/ui-text/src/jvmMain/kotlin/androidx/compose/ui/text/JvmAnnotatedString.jvm.kt
@@ -18,7 +18,6 @@
import androidx.compose.ui.text.AnnotatedString.Range
import androidx.compose.ui.util.fastMap
-
import java.util.SortedSet
/**
diff --git a/compose/ui/ui-text/src/skikoMain/kotlin/androidx/compose/ui/text/SkiaParagraph.skiko.kt b/compose/ui/ui-text/src/skikoMain/kotlin/androidx/compose/ui/text/SkiaParagraph.skiko.kt
index b91bd0f..1dde5de 100644
--- a/compose/ui/ui-text/src/skikoMain/kotlin/androidx/compose/ui/text/SkiaParagraph.skiko.kt
+++ b/compose/ui/ui-text/src/skikoMain/kotlin/androidx/compose/ui/text/SkiaParagraph.skiko.kt
@@ -16,7 +16,6 @@
package androidx.compose.ui.text
-import org.jetbrains.skia.Rect as SkRect
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Rect
import androidx.compose.ui.graphics.BlendMode
@@ -35,6 +34,7 @@
import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.unit.Constraints
import kotlin.math.floor
+import org.jetbrains.skia.Rect as SkRect
import org.jetbrains.skia.paragraph.LineMetrics
import org.jetbrains.skia.paragraph.RectHeightMode
import org.jetbrains.skia.paragraph.RectWidthMode
diff --git a/compose/ui/ui-text/src/skikoMain/kotlin/androidx/compose/ui/text/font/FontFamilyResolver.sikio.kt b/compose/ui/ui-text/src/skikoMain/kotlin/androidx/compose/ui/text/font/FontFamilyResolver.sikio.kt
index 5be43e1f..73d9583 100644
--- a/compose/ui/ui-text/src/skikoMain/kotlin/androidx/compose/ui/text/font/FontFamilyResolver.sikio.kt
+++ b/compose/ui/ui-text/src/skikoMain/kotlin/androidx/compose/ui/text/font/FontFamilyResolver.sikio.kt
@@ -16,8 +16,8 @@
package androidx.compose.ui.text.font
-import androidx.compose.ui.text.platform.FontCache
import androidx.compose.ui.text.ExperimentalTextApi
+import androidx.compose.ui.text.platform.FontCache
import kotlin.coroutines.CoroutineContext
/**
diff --git a/compose/ui/ui-text/src/skikoMain/kotlin/androidx/compose/ui/text/platform/PlatformFont.skiko.kt b/compose/ui/ui-text/src/skikoMain/kotlin/androidx/compose/ui/text/platform/PlatformFont.skiko.kt
index c8a98c8..9eb93ef 100644
--- a/compose/ui/ui-text/src/skikoMain/kotlin/androidx/compose/ui/text/platform/PlatformFont.skiko.kt
+++ b/compose/ui/ui-text/src/skikoMain/kotlin/androidx/compose/ui/text/platform/PlatformFont.skiko.kt
@@ -17,6 +17,7 @@
import androidx.compose.ui.text.Cache
import androidx.compose.ui.text.ExperimentalTextApi
+import androidx.compose.ui.text.font.Font
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontListFontFamily
import androidx.compose.ui.text.font.FontLoadingStrategy
@@ -24,13 +25,12 @@
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.font.GenericFontFamily
import androidx.compose.ui.text.font.LoadedFontFamily
+import androidx.compose.ui.text.font.Typeface
+import androidx.compose.ui.text.font.createFontFamilyResolver
import org.jetbrains.skia.FontMgr
import org.jetbrains.skia.Typeface as SkTypeface
import org.jetbrains.skia.paragraph.FontCollection
import org.jetbrains.skia.paragraph.TypefaceFontProvider
-import androidx.compose.ui.text.font.Font
-import androidx.compose.ui.text.font.Typeface
-import androidx.compose.ui.text.font.createFontFamilyResolver
expect sealed class PlatformFont : Font {
abstract val identity: String
diff --git a/compose/ui/ui-text/src/skikoMain/kotlin/androidx/compose/ui/text/platform/SkiaParagraph.skiko.kt b/compose/ui/ui-text/src/skikoMain/kotlin/androidx/compose/ui/text/platform/SkiaParagraph.skiko.kt
index bf56205..58f1b98 100644
--- a/compose/ui/ui-text/src/skikoMain/kotlin/androidx/compose/ui/text/platform/SkiaParagraph.skiko.kt
+++ b/compose/ui/ui-text/src/skikoMain/kotlin/androidx/compose/ui/text/platform/SkiaParagraph.skiko.kt
@@ -15,22 +15,6 @@
*/
package androidx.compose.ui.text.platform
-import org.jetbrains.skia.Font as SkFont
-import org.jetbrains.skia.FontStyle as SkFontStyle
-import org.jetbrains.skia.paragraph.Alignment as SkAlignment
-import org.jetbrains.skia.paragraph.BaselineMode
-import org.jetbrains.skia.paragraph.DecorationLineStyle as SkDecorationLineStyle
-import org.jetbrains.skia.paragraph.DecorationStyle as SkDecorationStyle
-import org.jetbrains.skia.paragraph.Direction as SkDirection
-import org.jetbrains.skia.paragraph.Paragraph as SkParagraph
-import org.jetbrains.skia.paragraph.ParagraphBuilder as SkParagraphBuilder
-import org.jetbrains.skia.paragraph.ParagraphStyle
-import org.jetbrains.skia.paragraph.PlaceholderAlignment
-import org.jetbrains.skia.paragraph.PlaceholderStyle
-import org.jetbrains.skia.paragraph.Shadow as SkShadow
-import org.jetbrains.skia.paragraph.StrutStyle
-import org.jetbrains.skia.paragraph.TextBox
-import org.jetbrains.skia.paragraph.TextStyle as SkTextStyle
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Shadow
import androidx.compose.ui.graphics.isSpecified
@@ -65,7 +49,23 @@
import androidx.compose.ui.unit.isSpecified
import androidx.compose.ui.unit.isUnspecified
import androidx.compose.ui.unit.sp
+import org.jetbrains.skia.Font as SkFont
+import org.jetbrains.skia.FontStyle as SkFontStyle
import org.jetbrains.skia.Paint
+import org.jetbrains.skia.paragraph.Alignment as SkAlignment
+import org.jetbrains.skia.paragraph.BaselineMode
+import org.jetbrains.skia.paragraph.DecorationLineStyle as SkDecorationLineStyle
+import org.jetbrains.skia.paragraph.DecorationStyle as SkDecorationStyle
+import org.jetbrains.skia.paragraph.Direction as SkDirection
+import org.jetbrains.skia.paragraph.Paragraph as SkParagraph
+import org.jetbrains.skia.paragraph.ParagraphBuilder as SkParagraphBuilder
+import org.jetbrains.skia.paragraph.ParagraphStyle
+import org.jetbrains.skia.paragraph.PlaceholderAlignment
+import org.jetbrains.skia.paragraph.PlaceholderStyle
+import org.jetbrains.skia.paragraph.Shadow as SkShadow
+import org.jetbrains.skia.paragraph.StrutStyle
+import org.jetbrains.skia.paragraph.TextBox
+import org.jetbrains.skia.paragraph.TextStyle as SkTextStyle
private val DefaultFontSize = 16.sp
diff --git a/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/AnnotatedStringTransformTest.kt b/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/AnnotatedStringTransformTest.kt
index a510bfb..2f4bc88 100644
--- a/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/AnnotatedStringTransformTest.kt
+++ b/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/AnnotatedStringTransformTest.kt
@@ -19,10 +19,10 @@
import androidx.compose.ui.text.intl.LocaleList
import androidx.compose.ui.unit.sp
import com.google.common.truth.Truth.assertThat
+import java.util.Locale
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import java.util.Locale
@RunWith(JUnit4::class)
class AnnotatedStringTransformTest {
diff --git a/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/MultiParagraphTest.kt b/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/MultiParagraphTest.kt
index 01b844a..469aa3f 100644
--- a/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/MultiParagraphTest.kt
+++ b/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/MultiParagraphTest.kt
@@ -17,10 +17,10 @@
package androidx.compose.ui.text
import com.google.common.truth.Truth.assertThat
-import org.mockito.kotlin.mock
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
+import org.mockito.kotlin.mock
@RunWith(JUnit4::class)
class MultiParagraphTest {
diff --git a/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/ParagraphStyleTest.kt b/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/ParagraphStyleTest.kt
index 00d130c..1d3f964 100644
--- a/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/ParagraphStyleTest.kt
+++ b/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/ParagraphStyleTest.kt
@@ -19,8 +19,8 @@
import androidx.compose.ui.text.style.Hyphens
import androidx.compose.ui.text.style.LineBreak
import androidx.compose.ui.text.style.LineHeightStyle
-import androidx.compose.ui.text.style.LineHeightStyle.Trim
import androidx.compose.ui.text.style.LineHeightStyle.Alignment
+import androidx.compose.ui.text.style.LineHeightStyle.Trim
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextDirection
import androidx.compose.ui.text.style.TextIndent
diff --git a/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/TextInputServiceTest.kt b/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/TextInputServiceTest.kt
index 998ac9c..f5576cf 100644
--- a/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/TextInputServiceTest.kt
+++ b/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/TextInputServiceTest.kt
@@ -24,15 +24,15 @@
import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.text.input.TextInputService
import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
import org.mockito.kotlin.any
import org.mockito.kotlin.eq
import org.mockito.kotlin.mock
import org.mockito.kotlin.never
import org.mockito.kotlin.times
import org.mockito.kotlin.verify
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
@Suppress("DEPRECATION")
@RunWith(JUnit4::class)
diff --git a/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/TextStyleLayoutAttributesTest.kt b/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/TextStyleLayoutAttributesTest.kt
index d6376fd..7b894df 100644
--- a/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/TextStyleLayoutAttributesTest.kt
+++ b/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/TextStyleLayoutAttributesTest.kt
@@ -27,8 +27,8 @@
import androidx.compose.ui.text.style.BaselineShift
import androidx.compose.ui.text.style.LineBreak
import androidx.compose.ui.text.style.LineHeightStyle
-import androidx.compose.ui.text.style.LineHeightStyle.Trim
import androidx.compose.ui.text.style.LineHeightStyle.Alignment
+import androidx.compose.ui.text.style.LineHeightStyle.Trim
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.text.style.TextDirection
diff --git a/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/font/AsyncFontListLoaderTest.kt b/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/font/AsyncFontListLoaderTest.kt
index 61855e3f..89883bd 100644
--- a/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/font/AsyncFontListLoaderTest.kt
+++ b/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/font/AsyncFontListLoaderTest.kt
@@ -18,6 +18,9 @@
import androidx.compose.ui.text.ExperimentalTextApi
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import kotlin.coroutines.coroutineContext
import kotlinx.coroutines.CoroutineExceptionHandler
import kotlinx.coroutines.cancel
import kotlinx.coroutines.runBlocking
@@ -25,9 +28,6 @@
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
import org.mockito.Mockito.mock
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
-import kotlin.coroutines.coroutineContext
@ExperimentalTextApi
@RunWith(JUnit4::class)
diff --git a/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/input/EditProcessorTest.kt b/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/input/EditProcessorTest.kt
index dc71dd4..64bd8a4 100644
--- a/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/input/EditProcessorTest.kt
+++ b/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/input/EditProcessorTest.kt
@@ -19,6 +19,10 @@
import androidx.compose.ui.text.InternalTextApi
import androidx.compose.ui.text.TextRange
import com.google.common.truth.Truth.assertThat
+import kotlin.test.assertFailsWith
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
import org.mockito.kotlin.any
import org.mockito.kotlin.argumentCaptor
import org.mockito.kotlin.eq
@@ -27,10 +31,6 @@
import org.mockito.kotlin.reset
import org.mockito.kotlin.times
import org.mockito.kotlin.verify
-import kotlin.test.assertFailsWith
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
@OptIn(InternalTextApi::class)
@RunWith(JUnit4::class)
diff --git a/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/matchers/EditBufferSubject.kt b/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/matchers/EditBufferSubject.kt
index 2505dfe..fcb894e 100644
--- a/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/matchers/EditBufferSubject.kt
+++ b/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/matchers/EditBufferSubject.kt
@@ -21,8 +21,8 @@
import androidx.compose.ui.text.input.PartialGapBuffer
import com.google.common.truth.FailureMetadata
import com.google.common.truth.Subject
-import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertAbout
+import com.google.common.truth.Truth.assertThat
@OptIn(InternalTextApi::class)
internal fun assertThat(buffer: PartialGapBuffer): EditBufferSubject {
diff --git a/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/style/LineHeightStyleTest.kt b/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/style/LineHeightStyleTest.kt
index 46c7cfd..1aeef097 100644
--- a/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/style/LineHeightStyleTest.kt
+++ b/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/style/LineHeightStyleTest.kt
@@ -18,8 +18,8 @@
package androidx.compose.ui.text.style
import androidx.compose.ui.text.ExperimentalTextApi
-import androidx.compose.ui.text.style.LineHeightStyle.Trim
import androidx.compose.ui.text.style.LineHeightStyle.Alignment
+import androidx.compose.ui.text.style.LineHeightStyle.Trim
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
diff --git a/compose/ui/ui-tooling-data/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/data/BoundsTest.kt b/compose/ui/ui-tooling-data/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/data/BoundsTest.kt
index a8d4eee..1ade585 100644
--- a/compose/ui/ui-tooling-data/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/data/BoundsTest.kt
+++ b/compose/ui/ui-tooling-data/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/data/BoundsTest.kt
@@ -34,11 +34,11 @@
import androidx.test.filters.LargeTest
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Assert
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@UiToolingDataApi
@MediumTest
diff --git a/compose/ui/ui-tooling-data/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/data/Inspectable.kt b/compose/ui/ui-tooling-data/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/data/Inspectable.kt
index cd30be8..b10d6135 100644
--- a/compose/ui/ui-tooling-data/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/data/Inspectable.kt
+++ b/compose/ui/ui-tooling-data/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/data/Inspectable.kt
@@ -17,10 +17,10 @@
package androidx.compose.ui.tooling.data
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.tooling.CompositionData
-import androidx.compose.runtime.InternalComposeApi
import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.InternalComposeApi
import androidx.compose.runtime.currentComposer
+import androidx.compose.runtime.tooling.CompositionData
import androidx.compose.runtime.tooling.LocalInspectionTables
import androidx.compose.ui.platform.LocalInspectionMode
import java.util.Collections
diff --git a/compose/ui/ui-tooling-data/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/data/InspectableTests.kt b/compose/ui/ui-tooling-data/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/data/InspectableTests.kt
index 5f18bd8..a0802ab 100644
--- a/compose/ui/ui-tooling-data/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/data/InspectableTests.kt
+++ b/compose/ui/ui-tooling-data/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/data/InspectableTests.kt
@@ -35,6 +35,8 @@
import androidx.compose.ui.unit.dp
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertNotEquals
@@ -42,8 +44,6 @@
import org.junit.Assert.assertTrue
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@UiToolingDataApi
@MediumTest
diff --git a/compose/ui/ui-tooling-data/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/data/ToolingTest.kt b/compose/ui/ui-tooling-data/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/data/ToolingTest.kt
index cf7783c..96411de 100644
--- a/compose/ui/ui-tooling-data/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/data/ToolingTest.kt
+++ b/compose/ui/ui-tooling-data/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/data/ToolingTest.kt
@@ -27,12 +27,12 @@
import androidx.compose.ui.R
import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.platform.ViewRootForTest
-import org.junit.Before
-import org.junit.Rule
import java.util.Collections
import java.util.WeakHashMap
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
+import org.junit.Before
+import org.junit.Rule
open class ToolingTest {
@Suppress("DEPRECATION")
diff --git a/compose/ui/ui-tooling-preview/api/current.txt b/compose/ui/ui-tooling-preview/api/current.txt
index 9d09eb2..ed0685d9 100644
--- a/compose/ui/ui-tooling-preview/api/current.txt
+++ b/compose/ui/ui-tooling-preview/api/current.txt
@@ -103,8 +103,8 @@
}
public final class LoremIpsum implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<java.lang.String> {
- ctor public LoremIpsum(int words);
ctor public LoremIpsum();
+ ctor public LoremIpsum(int words);
method public kotlin.sequences.Sequence<java.lang.String> getValues();
property public kotlin.sequences.Sequence<java.lang.String> values;
}
diff --git a/compose/ui/ui-tooling-preview/api/public_plus_experimental_current.txt b/compose/ui/ui-tooling-preview/api/public_plus_experimental_current.txt
index 9d09eb2..ed0685d9 100644
--- a/compose/ui/ui-tooling-preview/api/public_plus_experimental_current.txt
+++ b/compose/ui/ui-tooling-preview/api/public_plus_experimental_current.txt
@@ -103,8 +103,8 @@
}
public final class LoremIpsum implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<java.lang.String> {
- ctor public LoremIpsum(int words);
ctor public LoremIpsum();
+ ctor public LoremIpsum(int words);
method public kotlin.sequences.Sequence<java.lang.String> getValues();
property public kotlin.sequences.Sequence<java.lang.String> values;
}
diff --git a/compose/ui/ui-tooling-preview/api/restricted_current.txt b/compose/ui/ui-tooling-preview/api/restricted_current.txt
index 9d09eb2..ed0685d9 100644
--- a/compose/ui/ui-tooling-preview/api/restricted_current.txt
+++ b/compose/ui/ui-tooling-preview/api/restricted_current.txt
@@ -103,8 +103,8 @@
}
public final class LoremIpsum implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<java.lang.String> {
- ctor public LoremIpsum(int words);
ctor public LoremIpsum();
+ ctor public LoremIpsum(int words);
method public kotlin.sequences.Sequence<java.lang.String> getValues();
property public kotlin.sequences.Sequence<java.lang.String> values;
}
diff --git a/compose/ui/ui-tooling-preview/build.gradle b/compose/ui/ui-tooling-preview/build.gradle
index d6d3a42..a2aa077 100644
--- a/compose/ui/ui-tooling-preview/build.gradle
+++ b/compose/ui/ui-tooling-preview/build.gradle
@@ -109,7 +109,7 @@
}
androidx {
- name = "Compose Tooling API"
+ name = "Compose UI Preview Tooling"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2021"
description = "Compose tooling library API. This library provides the API required to declare" +
diff --git a/compose/ui/ui-tooling-preview/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/PreviewParameter.kt b/compose/ui/ui-tooling-preview/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/PreviewParameter.kt
index ba55dd6..348cc14 100644
--- a/compose/ui/ui-tooling-preview/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/PreviewParameter.kt
+++ b/compose/ui/ui-tooling-preview/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/PreviewParameter.kt
@@ -16,8 +16,8 @@
package androidx.compose.ui.tooling.preview
-import kotlin.reflect.KClass
import kotlin.jvm.JvmDefaultWithCompatibility
+import kotlin.reflect.KClass
/**
* Interface to be implemented by any provider of values that you want to be injected as @[Preview]
diff --git a/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/LazyColumnPreview.kt b/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/LazyColumnPreview.kt
index a9252ae..03e6561 100644
--- a/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/LazyColumnPreview.kt
+++ b/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/LazyColumnPreview.kt
@@ -18,12 +18,12 @@
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyRow
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.material.Button
import androidx.compose.material.Surface
import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.tooling.preview.Preview
@Preview
@Composable
diff --git a/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/ToolingTest.kt b/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/ToolingTest.kt
index 5bf2e09..b895328 100644
--- a/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/ToolingTest.kt
+++ b/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/ToolingTest.kt
@@ -24,10 +24,10 @@
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.onGloballyPositioned
-import org.junit.Before
-import org.junit.Rule
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
+import org.junit.Before
+import org.junit.Rule
open class ToolingTest {
@Suppress("DEPRECATION")
diff --git a/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/Inspectable.kt b/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/Inspectable.kt
index f859c89..9014cde 100644
--- a/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/Inspectable.kt
+++ b/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/Inspectable.kt
@@ -17,9 +17,9 @@
package androidx.compose.ui.tooling
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.tooling.CompositionData
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.currentComposer
+import androidx.compose.runtime.tooling.CompositionData
import androidx.compose.runtime.tooling.LocalInspectionTables
import androidx.compose.ui.platform.LocalInspectionMode
import java.util.Collections
diff --git a/compose/ui/ui-unit/api/current.txt b/compose/ui/ui-unit/api/current.txt
index d2fa594..b58f3eb 100644
--- a/compose/ui/ui-unit/api/current.txt
+++ b/compose/ui/ui-unit/api/current.txt
@@ -51,17 +51,17 @@
method public float getFontScale();
method @androidx.compose.runtime.Stable public default int roundToPx(float);
method @androidx.compose.runtime.Stable public default int roundToPx(long);
- method @androidx.compose.runtime.Stable public default float toDp(long);
- method @androidx.compose.runtime.Stable public default float toDp(int);
method @androidx.compose.runtime.Stable public default float toDp(float);
+ method @androidx.compose.runtime.Stable public default float toDp(int);
+ method @androidx.compose.runtime.Stable public default float toDp(long);
method @androidx.compose.runtime.Stable public default long toDpSize(long);
method @androidx.compose.runtime.Stable public default float toPx(float);
method @androidx.compose.runtime.Stable public default float toPx(long);
method @androidx.compose.runtime.Stable public default androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.DpRect);
method @androidx.compose.runtime.Stable public default long toSize(long);
method @androidx.compose.runtime.Stable public default long toSp(float);
- method @androidx.compose.runtime.Stable public default long toSp(int);
method @androidx.compose.runtime.Stable public default long toSp(float);
+ method @androidx.compose.runtime.Stable public default long toSp(int);
property public abstract float density;
property public abstract float fontScale;
}
@@ -74,8 +74,8 @@
ctor public Dp(float value);
method @androidx.compose.runtime.Stable public operator int compareTo(float other);
method @androidx.compose.runtime.Stable public inline operator float div(float other);
- method @androidx.compose.runtime.Stable public inline operator float div(int other);
method @androidx.compose.runtime.Stable public inline operator float div(float other);
+ method @androidx.compose.runtime.Stable public inline operator float div(int other);
method public float getValue();
method @androidx.compose.runtime.Stable public inline operator float minus(float other);
method @androidx.compose.runtime.Stable public inline operator float plus(float other);
@@ -102,9 +102,9 @@
method @androidx.compose.runtime.Stable public static inline float coerceAtMost(float, float maximumValue);
method @androidx.compose.runtime.Stable public static inline float coerceIn(float, float minimumValue, float maximumValue);
method public static long getCenter(long);
- method public static inline float getDp(int);
method public static inline float getDp(double);
method public static inline float getDp(float);
+ method public static inline float getDp(int);
method public static inline float getHeight(androidx.compose.ui.unit.DpRect);
method public static inline long getSize(androidx.compose.ui.unit.DpRect);
method public static inline float getWidth(androidx.compose.ui.unit.DpRect);
@@ -123,11 +123,11 @@
method public static inline float takeOrElse(float, kotlin.jvm.functions.Function0<androidx.compose.ui.unit.Dp> block);
method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.unit.DpOffset> block);
method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.unit.DpSize> block);
- method @androidx.compose.runtime.Stable public static inline operator float times(float, float other);
method @androidx.compose.runtime.Stable public static inline operator float times(double, float other);
+ method @androidx.compose.runtime.Stable public static inline operator float times(float, float other);
+ method @androidx.compose.runtime.Stable public static inline operator long times(float, long size);
method @androidx.compose.runtime.Stable public static inline operator float times(int, float other);
method @androidx.compose.runtime.Stable public static inline operator long times(int, long size);
- method @androidx.compose.runtime.Stable public static inline operator long times(float, long size);
}
@androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class DpOffset {
@@ -174,14 +174,14 @@
method @androidx.compose.runtime.Stable public inline operator float component1();
method @androidx.compose.runtime.Stable public inline operator float component2();
method public long copy(optional float width, optional float height);
- method @androidx.compose.runtime.Stable public operator long div(int other);
method @androidx.compose.runtime.Stable public operator long div(float other);
+ method @androidx.compose.runtime.Stable public operator long div(int other);
method public float getHeight();
method public float getWidth();
method @androidx.compose.runtime.Stable public inline operator long minus(long other);
method @androidx.compose.runtime.Stable public inline operator long plus(long other);
- method @androidx.compose.runtime.Stable public operator long times(int other);
method @androidx.compose.runtime.Stable public operator long times(float other);
+ method @androidx.compose.runtime.Stable public operator long times(int other);
property @androidx.compose.runtime.Stable public final float height;
property @androidx.compose.runtime.Stable public final float width;
field public static final androidx.compose.ui.unit.DpSize.Companion Companion;
@@ -258,8 +258,8 @@
method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.IntRect intersect(androidx.compose.ui.unit.IntRect other);
method public boolean isEmpty();
method public boolean overlaps(androidx.compose.ui.unit.IntRect other);
- method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.IntRect translate(long offset);
method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.IntRect translate(int translateX, int translateY);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.IntRect translate(long offset);
property public final int bottom;
property public final long bottomCenter;
property public final long bottomLeft;
@@ -288,9 +288,9 @@
}
public final class IntRectKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect IntRect(long center, int radius);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect IntRect(long offset, long size);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect IntRect(long topLeft, long bottomRight);
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect IntRect(long center, int radius);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect lerp(androidx.compose.ui.unit.IntRect start, androidx.compose.ui.unit.IntRect stop, float fraction);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect roundToIntRect(androidx.compose.ui.geometry.Rect);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.IntRect);
@@ -330,15 +330,15 @@
@androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class TextUnit {
method public inline operator int compareTo(long other);
- method public inline operator long div(float other);
method public inline operator long div(double other);
+ method public inline operator long div(float other);
method public inline operator long div(int other);
method public long getType();
method public float getValue();
method public boolean isEm();
method public boolean isSp();
- method public inline operator long times(float other);
method public inline operator long times(double other);
+ method public inline operator long times(float other);
method public inline operator long times(int other);
method public inline operator long unaryMinus();
property public final boolean isEm;
@@ -355,18 +355,18 @@
public final class TextUnitKt {
method public static long TextUnit(float value, long type);
- method public static long getEm(float);
method public static long getEm(double);
+ method public static long getEm(float);
method public static long getEm(int);
- method public static long getSp(float);
method public static long getSp(double);
+ method public static long getSp(float);
method public static long getSp(int);
method public static inline boolean isSpecified(long);
method public static boolean isUnspecified(long);
method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.unit.TextUnit> block);
- method @androidx.compose.runtime.Stable public static inline operator long times(float, long other);
method @androidx.compose.runtime.Stable public static inline operator long times(double, long other);
+ method @androidx.compose.runtime.Stable public static inline operator long times(float, long other);
method @androidx.compose.runtime.Stable public static inline operator long times(int, long other);
}
diff --git a/compose/ui/ui-unit/api/public_plus_experimental_current.txt b/compose/ui/ui-unit/api/public_plus_experimental_current.txt
index 1c3e781..bc439ae 100644
--- a/compose/ui/ui-unit/api/public_plus_experimental_current.txt
+++ b/compose/ui/ui-unit/api/public_plus_experimental_current.txt
@@ -51,17 +51,17 @@
method public float getFontScale();
method @androidx.compose.runtime.Stable public default int roundToPx(float);
method @androidx.compose.runtime.Stable public default int roundToPx(long);
- method @androidx.compose.runtime.Stable public default float toDp(long);
- method @androidx.compose.runtime.Stable public default float toDp(int);
method @androidx.compose.runtime.Stable public default float toDp(float);
+ method @androidx.compose.runtime.Stable public default float toDp(int);
+ method @androidx.compose.runtime.Stable public default float toDp(long);
method @androidx.compose.runtime.Stable public default long toDpSize(long);
method @androidx.compose.runtime.Stable public default float toPx(float);
method @androidx.compose.runtime.Stable public default float toPx(long);
method @androidx.compose.runtime.Stable public default androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.DpRect);
method @androidx.compose.runtime.Stable public default long toSize(long);
method @androidx.compose.runtime.Stable public default long toSp(float);
- method @androidx.compose.runtime.Stable public default long toSp(int);
method @androidx.compose.runtime.Stable public default long toSp(float);
+ method @androidx.compose.runtime.Stable public default long toSp(int);
property public abstract float density;
property public abstract float fontScale;
}
@@ -74,8 +74,8 @@
ctor public Dp(float value);
method @androidx.compose.runtime.Stable public operator int compareTo(float other);
method @androidx.compose.runtime.Stable public inline operator float div(float other);
- method @androidx.compose.runtime.Stable public inline operator float div(int other);
method @androidx.compose.runtime.Stable public inline operator float div(float other);
+ method @androidx.compose.runtime.Stable public inline operator float div(int other);
method public float getValue();
method @androidx.compose.runtime.Stable public inline operator float minus(float other);
method @androidx.compose.runtime.Stable public inline operator float plus(float other);
@@ -102,9 +102,9 @@
method @androidx.compose.runtime.Stable public static inline float coerceAtMost(float, float maximumValue);
method @androidx.compose.runtime.Stable public static inline float coerceIn(float, float minimumValue, float maximumValue);
method public static long getCenter(long);
- method public static inline float getDp(int);
method public static inline float getDp(double);
method public static inline float getDp(float);
+ method public static inline float getDp(int);
method public static inline float getHeight(androidx.compose.ui.unit.DpRect);
method public static inline long getSize(androidx.compose.ui.unit.DpRect);
method public static inline float getWidth(androidx.compose.ui.unit.DpRect);
@@ -123,11 +123,11 @@
method public static inline float takeOrElse(float, kotlin.jvm.functions.Function0<androidx.compose.ui.unit.Dp> block);
method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.unit.DpOffset> block);
method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.unit.DpSize> block);
- method @androidx.compose.runtime.Stable public static inline operator float times(float, float other);
method @androidx.compose.runtime.Stable public static inline operator float times(double, float other);
+ method @androidx.compose.runtime.Stable public static inline operator float times(float, float other);
+ method @androidx.compose.runtime.Stable public static inline operator long times(float, long size);
method @androidx.compose.runtime.Stable public static inline operator float times(int, float other);
method @androidx.compose.runtime.Stable public static inline operator long times(int, long size);
- method @androidx.compose.runtime.Stable public static inline operator long times(float, long size);
}
@androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class DpOffset {
@@ -174,14 +174,14 @@
method @androidx.compose.runtime.Stable public inline operator float component1();
method @androidx.compose.runtime.Stable public inline operator float component2();
method public long copy(optional float width, optional float height);
- method @androidx.compose.runtime.Stable public operator long div(int other);
method @androidx.compose.runtime.Stable public operator long div(float other);
+ method @androidx.compose.runtime.Stable public operator long div(int other);
method public float getHeight();
method public float getWidth();
method @androidx.compose.runtime.Stable public inline operator long minus(long other);
method @androidx.compose.runtime.Stable public inline operator long plus(long other);
- method @androidx.compose.runtime.Stable public operator long times(int other);
method @androidx.compose.runtime.Stable public operator long times(float other);
+ method @androidx.compose.runtime.Stable public operator long times(int other);
property @androidx.compose.runtime.Stable public final float height;
property @androidx.compose.runtime.Stable public final float width;
field public static final androidx.compose.ui.unit.DpSize.Companion Companion;
@@ -261,8 +261,8 @@
method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.IntRect intersect(androidx.compose.ui.unit.IntRect other);
method public boolean isEmpty();
method public boolean overlaps(androidx.compose.ui.unit.IntRect other);
- method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.IntRect translate(long offset);
method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.IntRect translate(int translateX, int translateY);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.IntRect translate(long offset);
property public final int bottom;
property public final long bottomCenter;
property public final long bottomLeft;
@@ -291,9 +291,9 @@
}
public final class IntRectKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect IntRect(long center, int radius);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect IntRect(long offset, long size);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect IntRect(long topLeft, long bottomRight);
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect IntRect(long center, int radius);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect lerp(androidx.compose.ui.unit.IntRect start, androidx.compose.ui.unit.IntRect stop, float fraction);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect roundToIntRect(androidx.compose.ui.geometry.Rect);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.IntRect);
@@ -333,15 +333,15 @@
@androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class TextUnit {
method public inline operator int compareTo(long other);
- method public inline operator long div(float other);
method public inline operator long div(double other);
+ method public inline operator long div(float other);
method public inline operator long div(int other);
method public long getType();
method public float getValue();
method public boolean isEm();
method public boolean isSp();
- method public inline operator long times(float other);
method public inline operator long times(double other);
+ method public inline operator long times(float other);
method public inline operator long times(int other);
method public inline operator long unaryMinus();
property public final boolean isEm;
@@ -358,18 +358,18 @@
public final class TextUnitKt {
method public static long TextUnit(float value, long type);
- method public static long getEm(float);
method public static long getEm(double);
+ method public static long getEm(float);
method public static long getEm(int);
- method public static long getSp(float);
method public static long getSp(double);
+ method public static long getSp(float);
method public static long getSp(int);
method public static inline boolean isSpecified(long);
method public static boolean isUnspecified(long);
method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.unit.TextUnit> block);
- method @androidx.compose.runtime.Stable public static inline operator long times(float, long other);
method @androidx.compose.runtime.Stable public static inline operator long times(double, long other);
+ method @androidx.compose.runtime.Stable public static inline operator long times(float, long other);
method @androidx.compose.runtime.Stable public static inline operator long times(int, long other);
}
diff --git a/compose/ui/ui-unit/api/restricted_current.txt b/compose/ui/ui-unit/api/restricted_current.txt
index 8e27b25..c076a0f 100644
--- a/compose/ui/ui-unit/api/restricted_current.txt
+++ b/compose/ui/ui-unit/api/restricted_current.txt
@@ -51,17 +51,17 @@
method public float getFontScale();
method @androidx.compose.runtime.Stable public default int roundToPx(float);
method @androidx.compose.runtime.Stable public default int roundToPx(long);
- method @androidx.compose.runtime.Stable public default float toDp(long);
- method @androidx.compose.runtime.Stable public default float toDp(int);
method @androidx.compose.runtime.Stable public default float toDp(float);
+ method @androidx.compose.runtime.Stable public default float toDp(int);
+ method @androidx.compose.runtime.Stable public default float toDp(long);
method @androidx.compose.runtime.Stable public default long toDpSize(long);
method @androidx.compose.runtime.Stable public default float toPx(float);
method @androidx.compose.runtime.Stable public default float toPx(long);
method @androidx.compose.runtime.Stable public default androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.DpRect);
method @androidx.compose.runtime.Stable public default long toSize(long);
method @androidx.compose.runtime.Stable public default long toSp(float);
- method @androidx.compose.runtime.Stable public default long toSp(int);
method @androidx.compose.runtime.Stable public default long toSp(float);
+ method @androidx.compose.runtime.Stable public default long toSp(int);
property public abstract float density;
property public abstract float fontScale;
}
@@ -74,8 +74,8 @@
ctor public Dp(float value);
method @androidx.compose.runtime.Stable public operator int compareTo(float other);
method @androidx.compose.runtime.Stable public inline operator float div(float other);
- method @androidx.compose.runtime.Stable public inline operator float div(int other);
method @androidx.compose.runtime.Stable public inline operator float div(float other);
+ method @androidx.compose.runtime.Stable public inline operator float div(int other);
method public float getValue();
method @androidx.compose.runtime.Stable public inline operator float minus(float other);
method @androidx.compose.runtime.Stable public inline operator float plus(float other);
@@ -102,9 +102,9 @@
method @androidx.compose.runtime.Stable public static inline float coerceAtMost(float, float maximumValue);
method @androidx.compose.runtime.Stable public static inline float coerceIn(float, float minimumValue, float maximumValue);
method public static long getCenter(long);
- method public static inline float getDp(int);
method public static inline float getDp(double);
method public static inline float getDp(float);
+ method public static inline float getDp(int);
method public static inline float getHeight(androidx.compose.ui.unit.DpRect);
method public static inline long getSize(androidx.compose.ui.unit.DpRect);
method public static inline float getWidth(androidx.compose.ui.unit.DpRect);
@@ -123,11 +123,11 @@
method public static inline float takeOrElse(float, kotlin.jvm.functions.Function0<androidx.compose.ui.unit.Dp> block);
method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.unit.DpOffset> block);
method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.unit.DpSize> block);
- method @androidx.compose.runtime.Stable public static inline operator float times(float, float other);
method @androidx.compose.runtime.Stable public static inline operator float times(double, float other);
+ method @androidx.compose.runtime.Stable public static inline operator float times(float, float other);
+ method @androidx.compose.runtime.Stable public static inline operator long times(float, long size);
method @androidx.compose.runtime.Stable public static inline operator float times(int, float other);
method @androidx.compose.runtime.Stable public static inline operator long times(int, long size);
- method @androidx.compose.runtime.Stable public static inline operator long times(float, long size);
}
@androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class DpOffset {
@@ -174,14 +174,14 @@
method @androidx.compose.runtime.Stable public inline operator float component1();
method @androidx.compose.runtime.Stable public inline operator float component2();
method public long copy(optional float width, optional float height);
- method @androidx.compose.runtime.Stable public operator long div(int other);
method @androidx.compose.runtime.Stable public operator long div(float other);
+ method @androidx.compose.runtime.Stable public operator long div(int other);
method public float getHeight();
method public float getWidth();
method @androidx.compose.runtime.Stable public inline operator long minus(long other);
method @androidx.compose.runtime.Stable public inline operator long plus(long other);
- method @androidx.compose.runtime.Stable public operator long times(int other);
method @androidx.compose.runtime.Stable public operator long times(float other);
+ method @androidx.compose.runtime.Stable public operator long times(int other);
property @androidx.compose.runtime.Stable public final float height;
property @androidx.compose.runtime.Stable public final float width;
field public static final androidx.compose.ui.unit.DpSize.Companion Companion;
@@ -258,8 +258,8 @@
method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.IntRect intersect(androidx.compose.ui.unit.IntRect other);
method public boolean isEmpty();
method public boolean overlaps(androidx.compose.ui.unit.IntRect other);
- method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.IntRect translate(long offset);
method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.IntRect translate(int translateX, int translateY);
+ method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.IntRect translate(long offset);
property public final int bottom;
property public final long bottomCenter;
property public final long bottomLeft;
@@ -288,9 +288,9 @@
}
public final class IntRectKt {
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect IntRect(long center, int radius);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect IntRect(long offset, long size);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect IntRect(long topLeft, long bottomRight);
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect IntRect(long center, int radius);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect lerp(androidx.compose.ui.unit.IntRect start, androidx.compose.ui.unit.IntRect stop, float fraction);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntRect roundToIntRect(androidx.compose.ui.geometry.Rect);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.IntRect);
@@ -330,15 +330,15 @@
@androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class TextUnit {
method public inline operator int compareTo(long other);
- method public inline operator long div(float other);
method public inline operator long div(double other);
+ method public inline operator long div(float other);
method public inline operator long div(int other);
method public long getType();
method public float getValue();
method public boolean isEm();
method public boolean isSp();
- method public inline operator long times(float other);
method public inline operator long times(double other);
+ method public inline operator long times(float other);
method public inline operator long times(int other);
method public inline operator long unaryMinus();
property public final boolean isEm;
@@ -359,19 +359,19 @@
method @kotlin.PublishedApi internal static void checkArithmetic(long a);
method @kotlin.PublishedApi internal static void checkArithmetic(long a, long b);
method @kotlin.PublishedApi internal static void checkArithmetic(long a, long b, long c);
- method public static long getEm(float);
method public static long getEm(double);
+ method public static long getEm(float);
method public static long getEm(int);
- method public static long getSp(float);
method public static long getSp(double);
+ method public static long getSp(float);
method public static long getSp(int);
method public static inline boolean isSpecified(long);
method public static boolean isUnspecified(long);
method @androidx.compose.runtime.Stable public static long lerp(long start, long stop, float fraction);
method @kotlin.PublishedApi internal static long pack(long unitType, float v);
method public static inline long takeOrElse(long, kotlin.jvm.functions.Function0<androidx.compose.ui.unit.TextUnit> block);
- method @androidx.compose.runtime.Stable public static inline operator long times(float, long other);
method @androidx.compose.runtime.Stable public static inline operator long times(double, long other);
+ method @androidx.compose.runtime.Stable public static inline operator long times(float, long other);
method @androidx.compose.runtime.Stable public static inline operator long times(int, long other);
}
diff --git a/compose/ui/ui-unit/samples/build.gradle b/compose/ui/ui-unit/samples/build.gradle
index a1409de..45bec6c 100644
--- a/compose/ui/ui-unit/samples/build.gradle
+++ b/compose/ui/ui-unit/samples/build.gradle
@@ -37,7 +37,7 @@
}
androidx {
- name = "AndroidX Compose UI Simple Unit Classes Samples"
+ name = "Compose UI Simple Unit Classes Samples"
type = LibraryType.SAMPLES
inceptionYear = "2019"
description = "Contains the sample code for the Androidx Compose UI Simple Unit Classes"
diff --git a/compose/ui/ui-unit/src/androidAndroidTest/kotlin/androidx/compose/ui/unit/DpDeviceTest.kt b/compose/ui/ui-unit/src/androidAndroidTest/kotlin/androidx/compose/ui/unit/DpDeviceTest.kt
index 29722d3..dc7c3ea 100644
--- a/compose/ui/ui-unit/src/androidAndroidTest/kotlin/androidx/compose/ui/unit/DpDeviceTest.kt
+++ b/compose/ui/ui-unit/src/androidAndroidTest/kotlin/androidx/compose/ui/unit/DpDeviceTest.kt
@@ -18,13 +18,13 @@
import android.app.Activity
import android.util.TypedValue
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-unit/src/androidAndroidTest/kotlin/androidx/compose/ui/unit/SpDeviceTest.kt b/compose/ui/ui-unit/src/androidAndroidTest/kotlin/androidx/compose/ui/unit/SpDeviceTest.kt
index c7ed473..8c08f71 100644
--- a/compose/ui/ui-unit/src/androidAndroidTest/kotlin/androidx/compose/ui/unit/SpDeviceTest.kt
+++ b/compose/ui/ui-unit/src/androidAndroidTest/kotlin/androidx/compose/ui/unit/SpDeviceTest.kt
@@ -18,13 +18,13 @@
import android.app.Activity
import android.util.TypedValue
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Density.kt b/compose/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Density.kt
index c173679..bd1d343 100644
--- a/compose/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Density.kt
+++ b/compose/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Density.kt
@@ -21,8 +21,8 @@
import androidx.compose.ui.geometry.Rect
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.geometry.isSpecified
-import kotlin.math.roundToInt
import androidx.compose.ui.unit.internal.JvmDefaultWithCompatibility
+import kotlin.math.roundToInt
/**
* A density of the screen. Used for convert [Dp] to pixels.
diff --git a/compose/ui/ui-viewbinding/samples/build.gradle b/compose/ui/ui-viewbinding/samples/build.gradle
index 29fab3b..88219c6 100644
--- a/compose/ui/ui-viewbinding/samples/build.gradle
+++ b/compose/ui/ui-viewbinding/samples/build.gradle
@@ -44,7 +44,7 @@
}
androidx {
- name = "AndroidX Compose UI Simple Unit Classes Samples"
+ name = "Compose UI Simple Unit Classes Samples"
type = LibraryType.SAMPLES
inceptionYear = "2019"
description = "Contains the sample code for the Androidx Compose UI Simple Unit Classes"
diff --git a/compose/ui/ui-viewbinding/samples/src/androidTest/java/androidx/compose/ui/samples/AndroidViewBindingTest.kt b/compose/ui/ui-viewbinding/samples/src/androidTest/java/androidx/compose/ui/samples/AndroidViewBindingTest.kt
index f1b25c9..908b85a 100644
--- a/compose/ui/ui-viewbinding/samples/src/androidTest/java/androidx/compose/ui/samples/AndroidViewBindingTest.kt
+++ b/compose/ui/ui-viewbinding/samples/src/androidTest/java/androidx/compose/ui/samples/AndroidViewBindingTest.kt
@@ -33,8 +33,8 @@
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.dp
-import androidx.compose.ui.viewinterop.AndroidViewBinding
import androidx.compose.ui.viewbinding.samples.databinding.SampleLayoutBinding
+import androidx.compose.ui.viewinterop.AndroidViewBinding
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import androidx.test.filters.MediumTest
diff --git a/compose/ui/ui-viewbinding/samples/src/androidTest/java/androidx/compose/ui/samples/FragmentRecreateTest.kt b/compose/ui/ui-viewbinding/samples/src/androidTest/java/androidx/compose/ui/samples/FragmentRecreateTest.kt
index 8dea4a0..1439a9b 100644
--- a/compose/ui/ui-viewbinding/samples/src/androidTest/java/androidx/compose/ui/samples/FragmentRecreateTest.kt
+++ b/compose/ui/ui-viewbinding/samples/src/androidTest/java/androidx/compose/ui/samples/FragmentRecreateTest.kt
@@ -20,10 +20,10 @@
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.activity.compose.setContent
+import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.viewbinding.samples.R
import androidx.compose.ui.viewbinding.samples.databinding.TestFragmentLayoutBinding
import androidx.compose.ui.viewinterop.AndroidViewBinding
-import androidx.compose.ui.platform.ComposeView
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.fragment.app.FragmentContainerView
diff --git a/compose/ui/ui/api/current.txt b/compose/ui/ui/api/current.txt
index 39aa37f..ace5b6e 100644
--- a/compose/ui/ui/api/current.txt
+++ b/compose/ui/ui/api/current.txt
@@ -182,8 +182,8 @@
}
public final class BlurKt {
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier blur(androidx.compose.ui.Modifier, float radiusX, float radiusY, optional androidx.compose.ui.graphics.Shape edgeTreatment);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier blur(androidx.compose.ui.Modifier, float radius, optional androidx.compose.ui.graphics.Shape edgeTreatment);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier blur(androidx.compose.ui.Modifier, float radiusX, float radiusY, optional androidx.compose.ui.graphics.Shape edgeTreatment);
}
@androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class BlurredEdgeTreatment {
@@ -254,13 +254,13 @@
}
public final class ScaleKt {
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier scale(androidx.compose.ui.Modifier, float scaleX, float scaleY);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier scale(androidx.compose.ui.Modifier, float scale);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier scale(androidx.compose.ui.Modifier, float scaleX, float scaleY);
}
public final class ShadowKt {
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier shadow(androidx.compose.ui.Modifier, float elevation, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional long ambientColor, optional long spotColor);
method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! shadow(androidx.compose.ui.Modifier, float elevation, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier shadow(androidx.compose.ui.Modifier, float elevation, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional long ambientColor, optional long spotColor);
}
}
@@ -345,9 +345,9 @@
}
public final class FocusOrderModifierKt {
- method @Deprecated public static androidx.compose.ui.Modifier focusOrder(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.focus.FocusOrder,kotlin.Unit> focusOrderReceiver);
method @Deprecated public static androidx.compose.ui.Modifier focusOrder(androidx.compose.ui.Modifier, androidx.compose.ui.focus.FocusRequester focusRequester);
method @Deprecated public static androidx.compose.ui.Modifier focusOrder(androidx.compose.ui.Modifier, androidx.compose.ui.focus.FocusRequester focusRequester, kotlin.jvm.functions.Function1<? super androidx.compose.ui.focus.FocusOrder,kotlin.Unit> focusOrderReceiver);
+ method @Deprecated public static androidx.compose.ui.Modifier focusOrder(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.focus.FocusOrder,kotlin.Unit> focusOrderReceiver);
}
public interface FocusProperties {
@@ -457,11 +457,11 @@
}
public final class GraphicsLayerModifierKt {
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect, optional long ambientShadowColor, optional long spotShadowColor, optional int compositingStrategy);
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> block);
method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip);
method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect);
method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect, optional long ambientShadowColor, optional long spotShadowColor);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect, optional long ambientShadowColor, optional long spotShadowColor, optional int compositingStrategy);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> block);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier toolingGraphicsLayer(androidx.compose.ui.Modifier);
}
@@ -575,8 +575,8 @@
}
public static final class ImageVector.Builder {
- ctor public ImageVector.Builder(optional String name, float defaultWidth, float defaultHeight, float viewportWidth, float viewportHeight, optional long tintColor, optional int tintBlendMode, optional boolean autoMirror);
ctor @Deprecated public ImageVector.Builder(optional String name, float defaultWidth, float defaultHeight, float viewportWidth, float viewportHeight, optional long tintColor, optional int tintBlendMode);
+ ctor public ImageVector.Builder(optional String name, float defaultWidth, float defaultHeight, float viewportWidth, float viewportHeight, optional long tintColor, optional int tintBlendMode, optional boolean autoMirror);
method public androidx.compose.ui.graphics.vector.ImageVector.Builder addGroup(optional String name, optional float rotate, optional float pivotX, optional float pivotY, optional float scaleX, optional float scaleY, optional float translationX, optional float translationY, optional java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> clipPathData);
method public androidx.compose.ui.graphics.vector.ImageVector.Builder addPath(java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> pathData, optional int pathFillType, optional String name, optional androidx.compose.ui.graphics.Brush? fill, optional float fillAlpha, optional androidx.compose.ui.graphics.Brush? stroke, optional float strokeAlpha, optional float strokeLineWidth, optional int strokeLineCap, optional int strokeLineJoin, optional float strokeLineMiter, optional float trimPathStart, optional float trimPathEnd, optional float trimPathOffset);
method public androidx.compose.ui.graphics.vector.ImageVector build();
@@ -684,9 +684,9 @@
public final class VectorPainterKt {
method @androidx.compose.runtime.Composable public static void RenderVectorGroup(androidx.compose.ui.graphics.vector.VectorGroup group, optional java.util.Map<java.lang.String,? extends androidx.compose.ui.graphics.vector.VectorConfig> configs);
- method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.runtime.ComposableOpenTarget(index=0xffffffff) public static androidx.compose.ui.graphics.vector.VectorPainter rememberVectorPainter(float defaultWidth, float defaultHeight, optional float viewportWidth, optional float viewportHeight, optional String name, optional long tintColor, optional int tintBlendMode, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable @androidx.compose.runtime.ComposableOpenTarget(index=0xffffffff) public static androidx.compose.ui.graphics.vector.VectorPainter rememberVectorPainter(float defaultWidth, float defaultHeight, optional float viewportWidth, optional float viewportHeight, optional String name, optional long tintColor, optional int tintBlendMode, optional boolean autoMirror, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.vector.VectorPainter rememberVectorPainter(androidx.compose.ui.graphics.vector.ImageVector image);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ComposableOpenTarget(index=0xffffffff) public static androidx.compose.ui.graphics.vector.VectorPainter rememberVectorPainter(float defaultWidth, float defaultHeight, optional float viewportWidth, optional float viewportHeight, optional String name, optional long tintColor, optional int tintBlendMode, optional boolean autoMirror, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> content);
+ method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.runtime.ComposableOpenTarget(index=0xffffffff) public static androidx.compose.ui.graphics.vector.VectorPainter rememberVectorPainter(float defaultWidth, float defaultHeight, optional float viewportWidth, optional float viewportHeight, optional String name, optional long tintColor, optional int tintBlendMode, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> content);
field public static final String RootGroupName = "VectorRootGroup";
}
@@ -1655,13 +1655,13 @@
@androidx.compose.runtime.Immutable public final class PointerInputChange {
ctor public PointerInputChange(long id, long uptimeMillis, long position, boolean pressed, float pressure, long previousUptimeMillis, long previousPosition, boolean previousPressed, boolean isInitiallyConsumed, optional int type, optional long scrollDelta);
- ctor public PointerInputChange(long id, long uptimeMillis, long position, boolean pressed, long previousUptimeMillis, long previousPosition, boolean previousPressed, boolean isInitiallyConsumed, optional int type, optional long scrollDelta);
ctor @Deprecated public PointerInputChange(long id, long uptimeMillis, long position, boolean pressed, long previousUptimeMillis, long previousPosition, boolean previousPressed, androidx.compose.ui.input.pointer.ConsumedData consumed, optional int type);
+ ctor public PointerInputChange(long id, long uptimeMillis, long position, boolean pressed, long previousUptimeMillis, long previousPosition, boolean previousPressed, boolean isInitiallyConsumed, optional int type, optional long scrollDelta);
method public void consume();
- method public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional long previousTime, optional long previousPosition, optional boolean previousPressed, optional int type, optional long scrollDelta);
- method @Deprecated public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional long previousTime, optional long previousPosition, optional boolean previousPressed, androidx.compose.ui.input.pointer.ConsumedData consumed, optional int type, optional long scrollDelta);
method public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional float pressure, optional long previousTime, optional long previousPosition, optional boolean previousPressed, optional int type, optional long scrollDelta);
method @Deprecated public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional long previousTime, optional long previousPosition, optional boolean previousPressed, optional androidx.compose.ui.input.pointer.ConsumedData consumed, optional int type);
+ method @Deprecated public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional long previousTime, optional long previousPosition, optional boolean previousPressed, androidx.compose.ui.input.pointer.ConsumedData consumed, optional int type, optional long scrollDelta);
+ method public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional long previousTime, optional long previousPosition, optional boolean previousPressed, optional int type, optional long scrollDelta);
method @Deprecated public androidx.compose.ui.input.pointer.ConsumedData getConsumed();
method public long getId();
method public long getPosition();
@@ -1718,10 +1718,6 @@
property public abstract androidx.compose.ui.platform.ViewConfiguration viewConfiguration;
}
- public final class PointerInteropFilter_androidKt {
- method public static androidx.compose.ui.Modifier motionEventSpy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super android.view.MotionEvent,kotlin.Unit> watcher);
- }
-
@kotlin.jvm.JvmInline public final value class PointerKeyboardModifiers {
ctor public PointerKeyboardModifiers(int packedValue);
}
@@ -1745,10 +1741,10 @@
public final class SuspendingPointerInputFilterKt {
method public static androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNode SuspendingPointerInputModifierNode(kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> pointerInputHandler);
- method @Deprecated public static androidx.compose.ui.Modifier pointerInput(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
- method public static androidx.compose.ui.Modifier pointerInput(androidx.compose.ui.Modifier, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
method public static androidx.compose.ui.Modifier pointerInput(androidx.compose.ui.Modifier, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method public static androidx.compose.ui.Modifier pointerInput(androidx.compose.ui.Modifier, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
method public static androidx.compose.ui.Modifier pointerInput(androidx.compose.ui.Modifier, Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method @Deprecated public static androidx.compose.ui.Modifier pointerInput(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
}
public sealed interface SuspendingPointerInputModifierNode extends androidx.compose.ui.node.PointerInputModifierNode {
@@ -1978,9 +1974,9 @@
}
public final class LayoutKt {
- method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static inline void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> content, optional androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.MeasurePolicy measurePolicy);
method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static inline void Layout(optional androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.MeasurePolicy measurePolicy);
method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static inline void Layout(java.util.List<? extends kotlin.jvm.functions.Function0<kotlin.Unit>> contents, optional androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.MultiContentMeasurePolicy measurePolicy);
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static inline void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> content, optional androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.MeasurePolicy measurePolicy);
method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static void MultiMeasureLayout(optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content, androidx.compose.ui.layout.MeasurePolicy measurePolicy);
}
@@ -2119,10 +2115,10 @@
method protected abstract int getParentWidth();
method public final void place(androidx.compose.ui.layout.Placeable, int x, int y, optional float zIndex);
method public final void place(androidx.compose.ui.layout.Placeable, long position, optional float zIndex);
- method public final void placeRelative(androidx.compose.ui.layout.Placeable, long position, optional float zIndex);
method public final void placeRelative(androidx.compose.ui.layout.Placeable, int x, int y, optional float zIndex);
- method public final void placeRelativeWithLayer(androidx.compose.ui.layout.Placeable, long position, optional float zIndex, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> layerBlock);
+ method public final void placeRelative(androidx.compose.ui.layout.Placeable, long position, optional float zIndex);
method public final void placeRelativeWithLayer(androidx.compose.ui.layout.Placeable, int x, int y, optional float zIndex, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> layerBlock);
+ method public final void placeRelativeWithLayer(androidx.compose.ui.layout.Placeable, long position, optional float zIndex, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> layerBlock);
method public final void placeWithLayer(androidx.compose.ui.layout.Placeable, int x, int y, optional float zIndex, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> layerBlock);
method public final void placeWithLayer(androidx.compose.ui.layout.Placeable, long position, optional float zIndex, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> layerBlock);
property public androidx.compose.ui.layout.LayoutCoordinates? coordinates;
@@ -2168,14 +2164,14 @@
}
public final class SubcomposeLayoutKt {
- method @androidx.compose.runtime.Composable public static void SubcomposeLayout(optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function2<? super androidx.compose.ui.layout.SubcomposeMeasureScope,? super androidx.compose.ui.unit.Constraints,? extends androidx.compose.ui.layout.MeasureResult> measurePolicy);
method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static void SubcomposeLayout(androidx.compose.ui.layout.SubcomposeLayoutState state, optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function2<? super androidx.compose.ui.layout.SubcomposeMeasureScope,? super androidx.compose.ui.unit.Constraints,? extends androidx.compose.ui.layout.MeasureResult> measurePolicy);
+ method @androidx.compose.runtime.Composable public static void SubcomposeLayout(optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function2<? super androidx.compose.ui.layout.SubcomposeMeasureScope,? super androidx.compose.ui.unit.Constraints,? extends androidx.compose.ui.layout.MeasureResult> measurePolicy);
method public static androidx.compose.ui.layout.SubcomposeSlotReusePolicy SubcomposeSlotReusePolicy(int maxSlotsToRetainForReuse);
}
public final class SubcomposeLayoutState {
- ctor public SubcomposeLayoutState(androidx.compose.ui.layout.SubcomposeSlotReusePolicy slotReusePolicy);
ctor public SubcomposeLayoutState();
+ ctor public SubcomposeLayoutState(androidx.compose.ui.layout.SubcomposeSlotReusePolicy slotReusePolicy);
ctor @Deprecated public SubcomposeLayoutState(int maxSlotsToRetainForReuse);
method public androidx.compose.ui.layout.SubcomposeLayoutState.PrecomposedSlotHandle precompose(Object? slotId, kotlin.jvm.functions.Function0<kotlin.Unit> content);
}
@@ -2240,10 +2236,10 @@
public final class ModifierLocalModifierNodeKt {
method public static androidx.compose.ui.modifier.ModifierLocalMap modifierLocalMapOf();
- method public static <T> androidx.compose.ui.modifier.ModifierLocalMap modifierLocalMapOf(androidx.compose.ui.modifier.ModifierLocal<T> key);
- method public static <T> androidx.compose.ui.modifier.ModifierLocalMap modifierLocalMapOf(kotlin.Pair<? extends androidx.compose.ui.modifier.ModifierLocal<T>,? extends T> entry);
method public static androidx.compose.ui.modifier.ModifierLocalMap modifierLocalMapOf(androidx.compose.ui.modifier.ModifierLocal<?>... keys);
+ method public static <T> androidx.compose.ui.modifier.ModifierLocalMap modifierLocalMapOf(androidx.compose.ui.modifier.ModifierLocal<T> key);
method public static androidx.compose.ui.modifier.ModifierLocalMap modifierLocalMapOf(kotlin.Pair<? extends androidx.compose.ui.modifier.ModifierLocal<?>,?>... entries);
+ method public static <T> androidx.compose.ui.modifier.ModifierLocalMap modifierLocalMapOf(kotlin.Pair<? extends androidx.compose.ui.modifier.ModifierLocal<T>,? extends T> entry);
}
@androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public interface ModifierLocalProvider<T> extends androidx.compose.ui.Modifier.Element {
@@ -2400,9 +2396,9 @@
package androidx.compose.ui.platform {
public abstract class AbstractComposeView extends android.view.ViewGroup {
- ctor public AbstractComposeView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
- ctor public AbstractComposeView(android.content.Context context, optional android.util.AttributeSet? attrs);
ctor public AbstractComposeView(android.content.Context context);
+ ctor public AbstractComposeView(android.content.Context context, optional android.util.AttributeSet? attrs);
+ ctor public AbstractComposeView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public abstract void Content();
method public final void createComposition();
method public final void disposeComposition();
@@ -2483,9 +2479,9 @@
}
public final class ComposeView extends androidx.compose.ui.platform.AbstractComposeView {
- ctor public ComposeView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
- ctor public ComposeView(android.content.Context context, optional android.util.AttributeSet? attrs);
ctor public ComposeView(android.content.Context context);
+ ctor public ComposeView(android.content.Context context, optional android.util.AttributeSet? attrs);
+ ctor public ComposeView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
method @androidx.compose.runtime.Composable public void Content();
method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> content);
property protected boolean shouldCreateCompositionOnAttachedToWindow;
@@ -2742,8 +2738,8 @@
}
public final class VectorResources_androidKt {
- method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.vector.ImageVector vectorResource(androidx.compose.ui.graphics.vector.ImageVector.Companion, @DrawableRes int id);
method @kotlin.jvm.Throws(exceptionClasses=XmlPullParserException::class) public static androidx.compose.ui.graphics.vector.ImageVector vectorResource(androidx.compose.ui.graphics.vector.ImageVector.Companion, optional android.content.res.Resources.Theme? theme, android.content.res.Resources res, int resId) throws org.xmlpull.v1.XmlPullParserException;
+ method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.vector.ImageVector vectorResource(androidx.compose.ui.graphics.vector.ImageVector.Companion, @DrawableRes int id);
}
}
@@ -3048,7 +3044,7 @@
method public static androidx.compose.ui.text.AnnotatedString getEditableText(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
method public static boolean getFocused(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
method public static androidx.compose.ui.semantics.ScrollAxisRange getHorizontalScrollAxisRange(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
- method public static int getImeAction(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method @Deprecated public static int getImeAction(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
method public static int getLiveRegion(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
method public static String getPaneTitle(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
method public static androidx.compose.ui.semantics.ProgressBarRangeInfo getProgressBarRangeInfo(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
@@ -3075,7 +3071,7 @@
method public static void pageUp(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
method public static void password(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
method public static void pasteText(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
- method public static void performImeAction(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void performImeAction(androidx.compose.ui.semantics.SemanticsPropertyReceiver, int imeActionType, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
method public static void popup(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
method public static void requestFocus(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
method public static void scrollBy(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,java.lang.Boolean>? action);
@@ -3089,7 +3085,7 @@
method public static void setEditableText(androidx.compose.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.text.AnnotatedString);
method public static void setFocused(androidx.compose.ui.semantics.SemanticsPropertyReceiver, boolean);
method public static void setHorizontalScrollAxisRange(androidx.compose.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.semantics.ScrollAxisRange);
- method public static void setImeAction(androidx.compose.ui.semantics.SemanticsPropertyReceiver, int);
+ method @Deprecated public static void setImeAction(androidx.compose.ui.semantics.SemanticsPropertyReceiver, int);
method public static void setLiveRegion(androidx.compose.ui.semantics.SemanticsPropertyReceiver, int);
method public static void setPaneTitle(androidx.compose.ui.semantics.SemanticsPropertyReceiver, String);
method public static void setProgress(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Boolean>? action);
@@ -3171,8 +3167,8 @@
}
@androidx.compose.runtime.Immutable public final class DialogProperties {
- ctor public DialogProperties(optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy, optional boolean usePlatformDefaultWidth, optional boolean decorFitsSystemWindows);
ctor public DialogProperties(optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy);
+ ctor public DialogProperties(optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy, optional boolean usePlatformDefaultWidth, optional boolean decorFitsSystemWindows);
method public boolean getDecorFitsSystemWindows();
method public boolean getDismissOnBackPress();
method public boolean getDismissOnClickOutside();
diff --git a/compose/ui/ui/api/public_plus_experimental_current.txt b/compose/ui/ui/api/public_plus_experimental_current.txt
index baaa2b1..88c529e6 100644
--- a/compose/ui/ui/api/public_plus_experimental_current.txt
+++ b/compose/ui/ui/api/public_plus_experimental_current.txt
@@ -112,11 +112,11 @@
}
public final class ComposedModifierKt {
- method public static androidx.compose.ui.Modifier composed(androidx.compose.ui.Modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> inspectorInfo, kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier,? extends androidx.compose.ui.Modifier> factory);
- method @androidx.compose.ui.ExperimentalComposeUiApi public static androidx.compose.ui.Modifier composed(androidx.compose.ui.Modifier, String fullyQualifiedName, Object? key1, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> inspectorInfo, kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier,? extends androidx.compose.ui.Modifier> factory);
- method @androidx.compose.ui.ExperimentalComposeUiApi public static androidx.compose.ui.Modifier composed(androidx.compose.ui.Modifier, String fullyQualifiedName, Object? key1, Object? key2, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> inspectorInfo, kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier,? extends androidx.compose.ui.Modifier> factory);
method @androidx.compose.ui.ExperimentalComposeUiApi public static androidx.compose.ui.Modifier composed(androidx.compose.ui.Modifier, String fullyQualifiedName, Object? key1, Object? key2, Object? key3, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> inspectorInfo, kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier,? extends androidx.compose.ui.Modifier> factory);
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static androidx.compose.ui.Modifier composed(androidx.compose.ui.Modifier, String fullyQualifiedName, Object? key1, Object? key2, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> inspectorInfo, kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier,? extends androidx.compose.ui.Modifier> factory);
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static androidx.compose.ui.Modifier composed(androidx.compose.ui.Modifier, String fullyQualifiedName, Object? key1, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> inspectorInfo, kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier,? extends androidx.compose.ui.Modifier> factory);
method @androidx.compose.ui.ExperimentalComposeUiApi public static androidx.compose.ui.Modifier composed(androidx.compose.ui.Modifier, String fullyQualifiedName, Object![]? keys, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> inspectorInfo, kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier,? extends androidx.compose.ui.Modifier> factory);
+ method public static androidx.compose.ui.Modifier composed(androidx.compose.ui.Modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.platform.InspectorInfo,kotlin.Unit> inspectorInfo, kotlin.jvm.functions.Function1<? super androidx.compose.ui.Modifier,? extends androidx.compose.ui.Modifier> factory);
method @Deprecated public static androidx.compose.ui.Modifier materialize(androidx.compose.runtime.Composer, androidx.compose.ui.Modifier modifier);
method public static androidx.compose.ui.Modifier materializeModifier(androidx.compose.runtime.Composer, androidx.compose.ui.Modifier modifier);
}
@@ -264,8 +264,8 @@
}
public final class BlurKt {
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier blur(androidx.compose.ui.Modifier, float radiusX, float radiusY, optional androidx.compose.ui.graphics.Shape edgeTreatment);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier blur(androidx.compose.ui.Modifier, float radius, optional androidx.compose.ui.graphics.Shape edgeTreatment);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier blur(androidx.compose.ui.Modifier, float radiusX, float radiusY, optional androidx.compose.ui.graphics.Shape edgeTreatment);
}
@androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class BlurredEdgeTreatment {
@@ -336,13 +336,13 @@
}
public final class ScaleKt {
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier scale(androidx.compose.ui.Modifier, float scaleX, float scaleY);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier scale(androidx.compose.ui.Modifier, float scale);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier scale(androidx.compose.ui.Modifier, float scaleX, float scaleY);
}
public final class ShadowKt {
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier shadow(androidx.compose.ui.Modifier, float elevation, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional long ambientColor, optional long spotColor);
method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! shadow(androidx.compose.ui.Modifier, float elevation, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier shadow(androidx.compose.ui.Modifier, float elevation, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional long ambientColor, optional long spotColor);
}
}
@@ -435,9 +435,9 @@
}
public final class FocusOrderModifierKt {
- method @Deprecated public static androidx.compose.ui.Modifier focusOrder(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.focus.FocusOrder,kotlin.Unit> focusOrderReceiver);
method @Deprecated public static androidx.compose.ui.Modifier focusOrder(androidx.compose.ui.Modifier, androidx.compose.ui.focus.FocusRequester focusRequester);
method @Deprecated public static androidx.compose.ui.Modifier focusOrder(androidx.compose.ui.Modifier, androidx.compose.ui.focus.FocusRequester focusRequester, kotlin.jvm.functions.Function1<? super androidx.compose.ui.focus.FocusOrder,kotlin.Unit> focusOrderReceiver);
+ method @Deprecated public static androidx.compose.ui.Modifier focusOrder(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.focus.FocusOrder,kotlin.Unit> focusOrderReceiver);
}
public interface FocusProperties {
@@ -576,11 +576,11 @@
}
public final class GraphicsLayerModifierKt {
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect, optional long ambientShadowColor, optional long spotShadowColor, optional int compositingStrategy);
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> block);
method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip);
method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect);
method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect, optional long ambientShadowColor, optional long spotShadowColor);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect, optional long ambientShadowColor, optional long spotShadowColor, optional int compositingStrategy);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> block);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier toolingGraphicsLayer(androidx.compose.ui.Modifier);
}
@@ -694,8 +694,8 @@
}
public static final class ImageVector.Builder {
- ctor public ImageVector.Builder(optional String name, float defaultWidth, float defaultHeight, float viewportWidth, float viewportHeight, optional long tintColor, optional int tintBlendMode, optional boolean autoMirror);
ctor @Deprecated public ImageVector.Builder(optional String name, float defaultWidth, float defaultHeight, float viewportWidth, float viewportHeight, optional long tintColor, optional int tintBlendMode);
+ ctor public ImageVector.Builder(optional String name, float defaultWidth, float defaultHeight, float viewportWidth, float viewportHeight, optional long tintColor, optional int tintBlendMode, optional boolean autoMirror);
method public androidx.compose.ui.graphics.vector.ImageVector.Builder addGroup(optional String name, optional float rotate, optional float pivotX, optional float pivotY, optional float scaleX, optional float scaleY, optional float translationX, optional float translationY, optional java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> clipPathData);
method public androidx.compose.ui.graphics.vector.ImageVector.Builder addPath(java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> pathData, optional int pathFillType, optional String name, optional androidx.compose.ui.graphics.Brush? fill, optional float fillAlpha, optional androidx.compose.ui.graphics.Brush? stroke, optional float strokeAlpha, optional float strokeLineWidth, optional int strokeLineCap, optional int strokeLineJoin, optional float strokeLineMiter, optional float trimPathStart, optional float trimPathEnd, optional float trimPathOffset);
method public androidx.compose.ui.graphics.vector.ImageVector build();
@@ -803,9 +803,9 @@
public final class VectorPainterKt {
method @androidx.compose.runtime.Composable public static void RenderVectorGroup(androidx.compose.ui.graphics.vector.VectorGroup group, optional java.util.Map<java.lang.String,? extends androidx.compose.ui.graphics.vector.VectorConfig> configs);
- method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.runtime.ComposableOpenTarget(index=0xffffffff) public static androidx.compose.ui.graphics.vector.VectorPainter rememberVectorPainter(float defaultWidth, float defaultHeight, optional float viewportWidth, optional float viewportHeight, optional String name, optional long tintColor, optional int tintBlendMode, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable @androidx.compose.runtime.ComposableOpenTarget(index=0xffffffff) public static androidx.compose.ui.graphics.vector.VectorPainter rememberVectorPainter(float defaultWidth, float defaultHeight, optional float viewportWidth, optional float viewportHeight, optional String name, optional long tintColor, optional int tintBlendMode, optional boolean autoMirror, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.vector.VectorPainter rememberVectorPainter(androidx.compose.ui.graphics.vector.ImageVector image);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ComposableOpenTarget(index=0xffffffff) public static androidx.compose.ui.graphics.vector.VectorPainter rememberVectorPainter(float defaultWidth, float defaultHeight, optional float viewportWidth, optional float viewportHeight, optional String name, optional long tintColor, optional int tintBlendMode, optional boolean autoMirror, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> content);
+ method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.runtime.ComposableOpenTarget(index=0xffffffff) public static androidx.compose.ui.graphics.vector.VectorPainter rememberVectorPainter(float defaultWidth, float defaultHeight, optional float viewportWidth, optional float viewportHeight, optional String name, optional long tintColor, optional int tintBlendMode, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> content);
field public static final String RootGroupName = "VectorRootGroup";
}
@@ -1795,15 +1795,15 @@
@androidx.compose.runtime.Immutable public final class PointerInputChange {
ctor public PointerInputChange(long id, long uptimeMillis, long position, boolean pressed, float pressure, long previousUptimeMillis, long previousPosition, boolean previousPressed, boolean isInitiallyConsumed, optional int type, optional long scrollDelta);
- ctor public PointerInputChange(long id, long uptimeMillis, long position, boolean pressed, long previousUptimeMillis, long previousPosition, boolean previousPressed, boolean isInitiallyConsumed, optional int type, optional long scrollDelta);
ctor @Deprecated public PointerInputChange(long id, long uptimeMillis, long position, boolean pressed, long previousUptimeMillis, long previousPosition, boolean previousPressed, androidx.compose.ui.input.pointer.ConsumedData consumed, optional int type);
+ ctor public PointerInputChange(long id, long uptimeMillis, long position, boolean pressed, long previousUptimeMillis, long previousPosition, boolean previousPressed, boolean isInitiallyConsumed, optional int type, optional long scrollDelta);
method public void consume();
- method public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional long previousTime, optional long previousPosition, optional boolean previousPressed, optional int type, optional long scrollDelta);
- method @Deprecated public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional long previousTime, optional long previousPosition, optional boolean previousPressed, androidx.compose.ui.input.pointer.ConsumedData consumed, optional int type, optional long scrollDelta);
- method public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional float pressure, optional long previousTime, optional long previousPosition, optional boolean previousPressed, optional int type, optional long scrollDelta);
- method @androidx.compose.ui.ExperimentalComposeUiApi public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional long previousTime, optional long previousPosition, optional boolean previousPressed, optional int type, java.util.List<androidx.compose.ui.input.pointer.HistoricalChange> historical, optional long scrollDelta);
method @androidx.compose.ui.ExperimentalComposeUiApi public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional float pressure, optional long previousTime, optional long previousPosition, optional boolean previousPressed, optional int type, optional java.util.List<androidx.compose.ui.input.pointer.HistoricalChange> historical, optional long scrollDelta);
+ method public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional float pressure, optional long previousTime, optional long previousPosition, optional boolean previousPressed, optional int type, optional long scrollDelta);
method @Deprecated public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional long previousTime, optional long previousPosition, optional boolean previousPressed, optional androidx.compose.ui.input.pointer.ConsumedData consumed, optional int type);
+ method @Deprecated public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional long previousTime, optional long previousPosition, optional boolean previousPressed, androidx.compose.ui.input.pointer.ConsumedData consumed, optional int type, optional long scrollDelta);
+ method @androidx.compose.ui.ExperimentalComposeUiApi public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional long previousTime, optional long previousPosition, optional boolean previousPressed, optional int type, java.util.List<androidx.compose.ui.input.pointer.HistoricalChange> historical, optional long scrollDelta);
+ method public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional long previousTime, optional long previousPosition, optional boolean previousPressed, optional int type, optional long scrollDelta);
method @Deprecated public androidx.compose.ui.input.pointer.ConsumedData getConsumed();
method @androidx.compose.ui.ExperimentalComposeUiApi public java.util.List<androidx.compose.ui.input.pointer.HistoricalChange> getHistorical();
method public long getId();
@@ -1863,7 +1863,7 @@
}
public final class PointerInteropFilter_androidKt {
- method public static androidx.compose.ui.Modifier motionEventSpy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super android.view.MotionEvent,kotlin.Unit> watcher);
+ method @androidx.compose.ui.ExperimentalComposeUiApi public static androidx.compose.ui.Modifier motionEventSpy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super android.view.MotionEvent,kotlin.Unit> watcher);
method @androidx.compose.ui.ExperimentalComposeUiApi public static androidx.compose.ui.Modifier pointerInteropFilter(androidx.compose.ui.Modifier, optional androidx.compose.ui.input.pointer.RequestDisallowInterceptTouchEvent? requestDisallowInterceptTouchEvent, kotlin.jvm.functions.Function1<? super android.view.MotionEvent,java.lang.Boolean> onTouchEvent);
}
@@ -1895,10 +1895,10 @@
public final class SuspendingPointerInputFilterKt {
method public static androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNode SuspendingPointerInputModifierNode(kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> pointerInputHandler);
- method @Deprecated public static androidx.compose.ui.Modifier pointerInput(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
- method public static androidx.compose.ui.Modifier pointerInput(androidx.compose.ui.Modifier, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
method public static androidx.compose.ui.Modifier pointerInput(androidx.compose.ui.Modifier, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method public static androidx.compose.ui.Modifier pointerInput(androidx.compose.ui.Modifier, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
method public static androidx.compose.ui.Modifier pointerInput(androidx.compose.ui.Modifier, Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method @Deprecated public static androidx.compose.ui.Modifier pointerInput(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
}
public sealed interface SuspendingPointerInputModifierNode extends androidx.compose.ui.node.PointerInputModifierNode {
@@ -2135,9 +2135,9 @@
}
public final class LayoutKt {
- method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static inline void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> content, optional androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.MeasurePolicy measurePolicy);
method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static inline void Layout(optional androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.MeasurePolicy measurePolicy);
method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static inline void Layout(java.util.List<? extends kotlin.jvm.functions.Function0<kotlin.Unit>> contents, optional androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.MultiContentMeasurePolicy measurePolicy);
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static inline void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> content, optional androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.MeasurePolicy measurePolicy);
method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static void MultiMeasureLayout(optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content, androidx.compose.ui.layout.MeasurePolicy measurePolicy);
}
@@ -2297,10 +2297,10 @@
method protected abstract int getParentWidth();
method public final void place(androidx.compose.ui.layout.Placeable, int x, int y, optional float zIndex);
method public final void place(androidx.compose.ui.layout.Placeable, long position, optional float zIndex);
- method public final void placeRelative(androidx.compose.ui.layout.Placeable, long position, optional float zIndex);
method public final void placeRelative(androidx.compose.ui.layout.Placeable, int x, int y, optional float zIndex);
- method public final void placeRelativeWithLayer(androidx.compose.ui.layout.Placeable, long position, optional float zIndex, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> layerBlock);
+ method public final void placeRelative(androidx.compose.ui.layout.Placeable, long position, optional float zIndex);
method public final void placeRelativeWithLayer(androidx.compose.ui.layout.Placeable, int x, int y, optional float zIndex, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> layerBlock);
+ method public final void placeRelativeWithLayer(androidx.compose.ui.layout.Placeable, long position, optional float zIndex, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> layerBlock);
method public final void placeWithLayer(androidx.compose.ui.layout.Placeable, int x, int y, optional float zIndex, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> layerBlock);
method public final void placeWithLayer(androidx.compose.ui.layout.Placeable, long position, optional float zIndex, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> layerBlock);
property public androidx.compose.ui.layout.LayoutCoordinates? coordinates;
@@ -2363,32 +2363,17 @@
method @androidx.compose.runtime.Stable public static operator long times(long, long size);
}
- @androidx.compose.ui.ExperimentalComposeUiApi public sealed interface SubcomposeIntermediateMeasureScope extends androidx.compose.ui.layout.SubcomposeMeasureScope {
- method public long getLookaheadConstraints();
- method public kotlin.jvm.functions.Function2<androidx.compose.ui.layout.SubcomposeMeasureScope,androidx.compose.ui.unit.Constraints,androidx.compose.ui.layout.MeasureResult> getLookaheadMeasurePolicy();
- method public long getLookaheadSize();
- method public java.util.List<androidx.compose.ui.layout.Measurable> measurablesForSlot(Object? slotId);
- method public default java.util.List<androidx.compose.ui.layout.Measurable> subcompose(Object? slotId, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- property public abstract long lookaheadConstraints;
- property public abstract kotlin.jvm.functions.Function2<androidx.compose.ui.layout.SubcomposeMeasureScope,androidx.compose.ui.unit.Constraints,androidx.compose.ui.layout.MeasureResult> lookaheadMeasurePolicy;
- property public abstract long lookaheadSize;
- }
-
public final class SubcomposeLayoutKt {
- method @androidx.compose.runtime.Composable public static void SubcomposeLayout(optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function2<? super androidx.compose.ui.layout.SubcomposeMeasureScope,? super androidx.compose.ui.unit.Constraints,? extends androidx.compose.ui.layout.MeasureResult> measurePolicy);
- method @androidx.compose.runtime.Composable @androidx.compose.ui.ExperimentalComposeUiApi public static void SubcomposeLayout(optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function2<? super androidx.compose.ui.layout.SubcomposeIntermediateMeasureScope,? super androidx.compose.ui.unit.Constraints,? extends androidx.compose.ui.layout.MeasureResult> intermediateMeasurePolicy, kotlin.jvm.functions.Function2<? super androidx.compose.ui.layout.SubcomposeMeasureScope,? super androidx.compose.ui.unit.Constraints,? extends androidx.compose.ui.layout.MeasureResult> measurePolicy);
method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static void SubcomposeLayout(androidx.compose.ui.layout.SubcomposeLayoutState state, optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function2<? super androidx.compose.ui.layout.SubcomposeMeasureScope,? super androidx.compose.ui.unit.Constraints,? extends androidx.compose.ui.layout.MeasureResult> measurePolicy);
- method @androidx.compose.runtime.Composable @androidx.compose.ui.ExperimentalComposeUiApi @androidx.compose.ui.UiComposable public static void SubcomposeLayout(androidx.compose.ui.layout.SubcomposeLayoutState state, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function2<? super androidx.compose.ui.layout.SubcomposeIntermediateMeasureScope,? super androidx.compose.ui.unit.Constraints,? extends androidx.compose.ui.layout.MeasureResult> intermediateMeasurePolicy, kotlin.jvm.functions.Function2<? super androidx.compose.ui.layout.SubcomposeMeasureScope,? super androidx.compose.ui.unit.Constraints,? extends androidx.compose.ui.layout.MeasureResult> measurePolicy);
+ method @androidx.compose.runtime.Composable public static void SubcomposeLayout(optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function2<? super androidx.compose.ui.layout.SubcomposeMeasureScope,? super androidx.compose.ui.unit.Constraints,? extends androidx.compose.ui.layout.MeasureResult> measurePolicy);
method public static androidx.compose.ui.layout.SubcomposeSlotReusePolicy SubcomposeSlotReusePolicy(int maxSlotsToRetainForReuse);
}
public final class SubcomposeLayoutState {
- ctor public SubcomposeLayoutState(androidx.compose.ui.layout.SubcomposeSlotReusePolicy slotReusePolicy);
ctor public SubcomposeLayoutState();
+ ctor public SubcomposeLayoutState(androidx.compose.ui.layout.SubcomposeSlotReusePolicy slotReusePolicy);
ctor @Deprecated public SubcomposeLayoutState(int maxSlotsToRetainForReuse);
- method @androidx.compose.ui.ExperimentalComposeUiApi public boolean isInLookaheadScope();
method public androidx.compose.ui.layout.SubcomposeLayoutState.PrecomposedSlotHandle precompose(Object? slotId, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- property @androidx.compose.ui.ExperimentalComposeUiApi public final boolean isInLookaheadScope;
}
public static interface SubcomposeLayoutState.PrecomposedSlotHandle {
@@ -2455,10 +2440,10 @@
public final class ModifierLocalModifierNodeKt {
method public static androidx.compose.ui.modifier.ModifierLocalMap modifierLocalMapOf();
- method public static <T> androidx.compose.ui.modifier.ModifierLocalMap modifierLocalMapOf(androidx.compose.ui.modifier.ModifierLocal<T> key);
- method public static <T> androidx.compose.ui.modifier.ModifierLocalMap modifierLocalMapOf(kotlin.Pair<? extends androidx.compose.ui.modifier.ModifierLocal<T>,? extends T> entry);
method public static androidx.compose.ui.modifier.ModifierLocalMap modifierLocalMapOf(androidx.compose.ui.modifier.ModifierLocal<?>... keys);
+ method public static <T> androidx.compose.ui.modifier.ModifierLocalMap modifierLocalMapOf(androidx.compose.ui.modifier.ModifierLocal<T> key);
method public static androidx.compose.ui.modifier.ModifierLocalMap modifierLocalMapOf(kotlin.Pair<? extends androidx.compose.ui.modifier.ModifierLocal<?>,?>... entries);
+ method public static <T> androidx.compose.ui.modifier.ModifierLocalMap modifierLocalMapOf(kotlin.Pair<? extends androidx.compose.ui.modifier.ModifierLocal<T>,? extends T> entry);
}
@androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public interface ModifierLocalProvider<T> extends androidx.compose.ui.Modifier.Element {
@@ -2627,9 +2612,9 @@
package androidx.compose.ui.platform {
public abstract class AbstractComposeView extends android.view.ViewGroup {
- ctor public AbstractComposeView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
- ctor public AbstractComposeView(android.content.Context context, optional android.util.AttributeSet? attrs);
ctor public AbstractComposeView(android.content.Context context);
+ ctor public AbstractComposeView(android.content.Context context, optional android.util.AttributeSet? attrs);
+ ctor public AbstractComposeView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public abstract void Content();
method public final void createComposition();
method public final void disposeComposition();
@@ -2710,9 +2695,9 @@
}
public final class ComposeView extends androidx.compose.ui.platform.AbstractComposeView {
- ctor public ComposeView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
- ctor public ComposeView(android.content.Context context, optional android.util.AttributeSet? attrs);
ctor public ComposeView(android.content.Context context);
+ ctor public ComposeView(android.content.Context context, optional android.util.AttributeSet? attrs);
+ ctor public ComposeView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
method @androidx.compose.runtime.Composable public void Content();
method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> content);
property protected boolean shouldCreateCompositionOnAttachedToWindow;
@@ -3008,8 +2993,8 @@
}
public final class VectorResources_androidKt {
- method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.vector.ImageVector vectorResource(androidx.compose.ui.graphics.vector.ImageVector.Companion, @DrawableRes int id);
method @kotlin.jvm.Throws(exceptionClasses=XmlPullParserException::class) public static androidx.compose.ui.graphics.vector.ImageVector vectorResource(androidx.compose.ui.graphics.vector.ImageVector.Companion, optional android.content.res.Resources.Theme? theme, android.content.res.Resources res, int resId) throws org.xmlpull.v1.XmlPullParserException;
+ method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.vector.ImageVector vectorResource(androidx.compose.ui.graphics.vector.ImageVector.Companion, @DrawableRes int id);
}
}
@@ -3320,7 +3305,7 @@
method public static androidx.compose.ui.text.AnnotatedString getEditableText(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
method public static boolean getFocused(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
method public static androidx.compose.ui.semantics.ScrollAxisRange getHorizontalScrollAxisRange(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
- method public static int getImeAction(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method @Deprecated public static int getImeAction(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
method public static int getLiveRegion(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
method public static String getPaneTitle(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
method public static androidx.compose.ui.semantics.ProgressBarRangeInfo getProgressBarRangeInfo(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
@@ -3348,7 +3333,7 @@
method public static void pageUp(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
method public static void password(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
method public static void pasteText(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
- method public static void performImeAction(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void performImeAction(androidx.compose.ui.semantics.SemanticsPropertyReceiver, int imeActionType, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
method public static void popup(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
method public static void requestFocus(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
method public static void scrollBy(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,java.lang.Boolean>? action);
@@ -3362,7 +3347,7 @@
method public static void setEditableText(androidx.compose.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.text.AnnotatedString);
method public static void setFocused(androidx.compose.ui.semantics.SemanticsPropertyReceiver, boolean);
method public static void setHorizontalScrollAxisRange(androidx.compose.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.semantics.ScrollAxisRange);
- method public static void setImeAction(androidx.compose.ui.semantics.SemanticsPropertyReceiver, int);
+ method @Deprecated public static void setImeAction(androidx.compose.ui.semantics.SemanticsPropertyReceiver, int);
method public static void setLiveRegion(androidx.compose.ui.semantics.SemanticsPropertyReceiver, int);
method public static void setPaneTitle(androidx.compose.ui.semantics.SemanticsPropertyReceiver, String);
method public static void setProgress(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Boolean>? action);
@@ -3449,8 +3434,8 @@
}
@androidx.compose.runtime.Immutable public final class DialogProperties {
- ctor public DialogProperties(optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy, optional boolean usePlatformDefaultWidth, optional boolean decorFitsSystemWindows);
ctor public DialogProperties(optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy);
+ ctor public DialogProperties(optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy, optional boolean usePlatformDefaultWidth, optional boolean decorFitsSystemWindows);
method public boolean getDecorFitsSystemWindows();
method public boolean getDismissOnBackPress();
method public boolean getDismissOnClickOutside();
@@ -3473,8 +3458,8 @@
}
@androidx.compose.runtime.Immutable public final class PopupProperties {
- ctor @androidx.compose.ui.ExperimentalComposeUiApi public PopupProperties(optional boolean focusable, optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy, optional boolean excludeFromSystemGesture, optional boolean clippingEnabled, optional boolean usePlatformDefaultWidth);
ctor public PopupProperties(optional boolean focusable, optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy, optional boolean excludeFromSystemGesture, optional boolean clippingEnabled);
+ ctor @androidx.compose.ui.ExperimentalComposeUiApi public PopupProperties(optional boolean focusable, optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy, optional boolean excludeFromSystemGesture, optional boolean clippingEnabled, optional boolean usePlatformDefaultWidth);
method public boolean getClippingEnabled();
method public boolean getDismissOnBackPress();
method public boolean getDismissOnClickOutside();
diff --git a/compose/ui/ui/api/restricted_current.txt b/compose/ui/ui/api/restricted_current.txt
index 7ce042d..002ce11 100644
--- a/compose/ui/ui/api/restricted_current.txt
+++ b/compose/ui/ui/api/restricted_current.txt
@@ -182,8 +182,8 @@
}
public final class BlurKt {
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier blur(androidx.compose.ui.Modifier, float radiusX, float radiusY, optional androidx.compose.ui.graphics.Shape edgeTreatment);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier blur(androidx.compose.ui.Modifier, float radius, optional androidx.compose.ui.graphics.Shape edgeTreatment);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier blur(androidx.compose.ui.Modifier, float radiusX, float radiusY, optional androidx.compose.ui.graphics.Shape edgeTreatment);
}
@androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class BlurredEdgeTreatment {
@@ -254,13 +254,13 @@
}
public final class ScaleKt {
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier scale(androidx.compose.ui.Modifier, float scaleX, float scaleY);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier scale(androidx.compose.ui.Modifier, float scale);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier scale(androidx.compose.ui.Modifier, float scaleX, float scaleY);
}
public final class ShadowKt {
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier shadow(androidx.compose.ui.Modifier, float elevation, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional long ambientColor, optional long spotColor);
method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! shadow(androidx.compose.ui.Modifier, float elevation, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier shadow(androidx.compose.ui.Modifier, float elevation, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional long ambientColor, optional long spotColor);
}
}
@@ -345,9 +345,9 @@
}
public final class FocusOrderModifierKt {
- method @Deprecated public static androidx.compose.ui.Modifier focusOrder(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.focus.FocusOrder,kotlin.Unit> focusOrderReceiver);
method @Deprecated public static androidx.compose.ui.Modifier focusOrder(androidx.compose.ui.Modifier, androidx.compose.ui.focus.FocusRequester focusRequester);
method @Deprecated public static androidx.compose.ui.Modifier focusOrder(androidx.compose.ui.Modifier, androidx.compose.ui.focus.FocusRequester focusRequester, kotlin.jvm.functions.Function1<? super androidx.compose.ui.focus.FocusOrder,kotlin.Unit> focusOrderReceiver);
+ method @Deprecated public static androidx.compose.ui.Modifier focusOrder(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.focus.FocusOrder,kotlin.Unit> focusOrderReceiver);
}
public interface FocusProperties {
@@ -457,11 +457,11 @@
}
public final class GraphicsLayerModifierKt {
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect, optional long ambientShadowColor, optional long spotShadowColor, optional int compositingStrategy);
- method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> block);
method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip);
method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect);
method @Deprecated @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier! graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect, optional long ambientShadowColor, optional long spotShadowColor);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, optional float scaleX, optional float scaleY, optional float alpha, optional float translationX, optional float translationY, optional float shadowElevation, optional float rotationX, optional float rotationY, optional float rotationZ, optional float cameraDistance, optional long transformOrigin, optional androidx.compose.ui.graphics.Shape shape, optional boolean clip, optional androidx.compose.ui.graphics.RenderEffect? renderEffect, optional long ambientShadowColor, optional long spotShadowColor, optional int compositingStrategy);
+ method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier graphicsLayer(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> block);
method @androidx.compose.runtime.Stable public static androidx.compose.ui.Modifier toolingGraphicsLayer(androidx.compose.ui.Modifier);
}
@@ -575,8 +575,8 @@
}
public static final class ImageVector.Builder {
- ctor public ImageVector.Builder(optional String name, float defaultWidth, float defaultHeight, float viewportWidth, float viewportHeight, optional long tintColor, optional int tintBlendMode, optional boolean autoMirror);
ctor @Deprecated public ImageVector.Builder(optional String name, float defaultWidth, float defaultHeight, float viewportWidth, float viewportHeight, optional long tintColor, optional int tintBlendMode);
+ ctor public ImageVector.Builder(optional String name, float defaultWidth, float defaultHeight, float viewportWidth, float viewportHeight, optional long tintColor, optional int tintBlendMode, optional boolean autoMirror);
method public androidx.compose.ui.graphics.vector.ImageVector.Builder addGroup(optional String name, optional float rotate, optional float pivotX, optional float pivotY, optional float scaleX, optional float scaleY, optional float translationX, optional float translationY, optional java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> clipPathData);
method public androidx.compose.ui.graphics.vector.ImageVector.Builder addPath(java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> pathData, optional int pathFillType, optional String name, optional androidx.compose.ui.graphics.Brush? fill, optional float fillAlpha, optional androidx.compose.ui.graphics.Brush? stroke, optional float strokeAlpha, optional float strokeLineWidth, optional int strokeLineCap, optional int strokeLineJoin, optional float strokeLineMiter, optional float trimPathStart, optional float trimPathEnd, optional float trimPathOffset);
method public androidx.compose.ui.graphics.vector.ImageVector build();
@@ -684,9 +684,9 @@
public final class VectorPainterKt {
method @androidx.compose.runtime.Composable public static void RenderVectorGroup(androidx.compose.ui.graphics.vector.VectorGroup group, optional java.util.Map<java.lang.String,? extends androidx.compose.ui.graphics.vector.VectorConfig> configs);
- method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.runtime.ComposableOpenTarget(index=0xffffffff) public static androidx.compose.ui.graphics.vector.VectorPainter rememberVectorPainter(float defaultWidth, float defaultHeight, optional float viewportWidth, optional float viewportHeight, optional String name, optional long tintColor, optional int tintBlendMode, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable @androidx.compose.runtime.ComposableOpenTarget(index=0xffffffff) public static androidx.compose.ui.graphics.vector.VectorPainter rememberVectorPainter(float defaultWidth, float defaultHeight, optional float viewportWidth, optional float viewportHeight, optional String name, optional long tintColor, optional int tintBlendMode, optional boolean autoMirror, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.vector.VectorPainter rememberVectorPainter(androidx.compose.ui.graphics.vector.ImageVector image);
+ method @androidx.compose.runtime.Composable @androidx.compose.runtime.ComposableOpenTarget(index=0xffffffff) public static androidx.compose.ui.graphics.vector.VectorPainter rememberVectorPainter(float defaultWidth, float defaultHeight, optional float viewportWidth, optional float viewportHeight, optional String name, optional long tintColor, optional int tintBlendMode, optional boolean autoMirror, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> content);
+ method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.runtime.ComposableOpenTarget(index=0xffffffff) public static androidx.compose.ui.graphics.vector.VectorPainter rememberVectorPainter(float defaultWidth, float defaultHeight, optional float viewportWidth, optional float viewportHeight, optional String name, optional long tintColor, optional int tintBlendMode, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> content);
field public static final String RootGroupName = "VectorRootGroup";
}
@@ -1655,13 +1655,13 @@
@androidx.compose.runtime.Immutable public final class PointerInputChange {
ctor public PointerInputChange(long id, long uptimeMillis, long position, boolean pressed, float pressure, long previousUptimeMillis, long previousPosition, boolean previousPressed, boolean isInitiallyConsumed, optional int type, optional long scrollDelta);
- ctor public PointerInputChange(long id, long uptimeMillis, long position, boolean pressed, long previousUptimeMillis, long previousPosition, boolean previousPressed, boolean isInitiallyConsumed, optional int type, optional long scrollDelta);
ctor @Deprecated public PointerInputChange(long id, long uptimeMillis, long position, boolean pressed, long previousUptimeMillis, long previousPosition, boolean previousPressed, androidx.compose.ui.input.pointer.ConsumedData consumed, optional int type);
+ ctor public PointerInputChange(long id, long uptimeMillis, long position, boolean pressed, long previousUptimeMillis, long previousPosition, boolean previousPressed, boolean isInitiallyConsumed, optional int type, optional long scrollDelta);
method public void consume();
- method public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional long previousTime, optional long previousPosition, optional boolean previousPressed, optional int type, optional long scrollDelta);
- method @Deprecated public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional long previousTime, optional long previousPosition, optional boolean previousPressed, androidx.compose.ui.input.pointer.ConsumedData consumed, optional int type, optional long scrollDelta);
method public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional float pressure, optional long previousTime, optional long previousPosition, optional boolean previousPressed, optional int type, optional long scrollDelta);
method @Deprecated public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional long previousTime, optional long previousPosition, optional boolean previousPressed, optional androidx.compose.ui.input.pointer.ConsumedData consumed, optional int type);
+ method @Deprecated public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional long previousTime, optional long previousPosition, optional boolean previousPressed, androidx.compose.ui.input.pointer.ConsumedData consumed, optional int type, optional long scrollDelta);
+ method public androidx.compose.ui.input.pointer.PointerInputChange copy(optional long id, optional long currentTime, optional long currentPosition, optional boolean currentPressed, optional long previousTime, optional long previousPosition, optional boolean previousPressed, optional int type, optional long scrollDelta);
method @Deprecated public androidx.compose.ui.input.pointer.ConsumedData getConsumed();
method public long getId();
method public long getPosition();
@@ -1718,10 +1718,6 @@
property public abstract androidx.compose.ui.platform.ViewConfiguration viewConfiguration;
}
- public final class PointerInteropFilter_androidKt {
- method public static androidx.compose.ui.Modifier motionEventSpy(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function1<? super android.view.MotionEvent,kotlin.Unit> watcher);
- }
-
@kotlin.jvm.JvmInline public final value class PointerKeyboardModifiers {
ctor public PointerKeyboardModifiers(int packedValue);
}
@@ -1745,10 +1741,10 @@
public final class SuspendingPointerInputFilterKt {
method public static androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNode SuspendingPointerInputModifierNode(kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> pointerInputHandler);
- method @Deprecated public static androidx.compose.ui.Modifier pointerInput(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
- method public static androidx.compose.ui.Modifier pointerInput(androidx.compose.ui.Modifier, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
method public static androidx.compose.ui.Modifier pointerInput(androidx.compose.ui.Modifier, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method public static androidx.compose.ui.Modifier pointerInput(androidx.compose.ui.Modifier, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
method public static androidx.compose.ui.Modifier pointerInput(androidx.compose.ui.Modifier, Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method @Deprecated public static androidx.compose.ui.Modifier pointerInput(androidx.compose.ui.Modifier, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
}
public sealed interface SuspendingPointerInputModifierNode extends androidx.compose.ui.node.PointerInputModifierNode {
@@ -1978,9 +1974,9 @@
}
public final class LayoutKt {
- method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static inline void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> content, optional androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.MeasurePolicy measurePolicy);
method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static inline void Layout(optional androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.MeasurePolicy measurePolicy);
method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static inline void Layout(java.util.List<? extends kotlin.jvm.functions.Function0<kotlin.Unit>> contents, optional androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.MultiContentMeasurePolicy measurePolicy);
+ method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static inline void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> content, optional androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.MeasurePolicy measurePolicy);
method @Deprecated @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static void MultiMeasureLayout(optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content, androidx.compose.ui.layout.MeasurePolicy measurePolicy);
method @kotlin.PublishedApi internal static kotlin.jvm.functions.Function0<kotlin.Unit> combineAsVirtualLayouts(java.util.List<? extends kotlin.jvm.functions.Function0<kotlin.Unit>> contents);
method @Deprecated @kotlin.PublishedApi internal static kotlin.jvm.functions.Function1<androidx.compose.runtime.SkippableUpdater<androidx.compose.ui.node.ComposeUiNode>,kotlin.Unit> materializerOf(androidx.compose.ui.Modifier modifier);
@@ -2126,10 +2122,10 @@
method protected abstract int getParentWidth();
method public final void place(androidx.compose.ui.layout.Placeable, int x, int y, optional float zIndex);
method public final void place(androidx.compose.ui.layout.Placeable, long position, optional float zIndex);
- method public final void placeRelative(androidx.compose.ui.layout.Placeable, long position, optional float zIndex);
method public final void placeRelative(androidx.compose.ui.layout.Placeable, int x, int y, optional float zIndex);
- method public final void placeRelativeWithLayer(androidx.compose.ui.layout.Placeable, long position, optional float zIndex, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> layerBlock);
+ method public final void placeRelative(androidx.compose.ui.layout.Placeable, long position, optional float zIndex);
method public final void placeRelativeWithLayer(androidx.compose.ui.layout.Placeable, int x, int y, optional float zIndex, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> layerBlock);
+ method public final void placeRelativeWithLayer(androidx.compose.ui.layout.Placeable, long position, optional float zIndex, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> layerBlock);
method public final void placeWithLayer(androidx.compose.ui.layout.Placeable, int x, int y, optional float zIndex, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> layerBlock);
method public final void placeWithLayer(androidx.compose.ui.layout.Placeable, long position, optional float zIndex, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.GraphicsLayerScope,kotlin.Unit> layerBlock);
property public androidx.compose.ui.layout.LayoutCoordinates? coordinates;
@@ -2175,14 +2171,14 @@
}
public final class SubcomposeLayoutKt {
- method @androidx.compose.runtime.Composable public static void SubcomposeLayout(optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function2<? super androidx.compose.ui.layout.SubcomposeMeasureScope,? super androidx.compose.ui.unit.Constraints,? extends androidx.compose.ui.layout.MeasureResult> measurePolicy);
method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public static void SubcomposeLayout(androidx.compose.ui.layout.SubcomposeLayoutState state, optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function2<? super androidx.compose.ui.layout.SubcomposeMeasureScope,? super androidx.compose.ui.unit.Constraints,? extends androidx.compose.ui.layout.MeasureResult> measurePolicy);
+ method @androidx.compose.runtime.Composable public static void SubcomposeLayout(optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function2<? super androidx.compose.ui.layout.SubcomposeMeasureScope,? super androidx.compose.ui.unit.Constraints,? extends androidx.compose.ui.layout.MeasureResult> measurePolicy);
method public static androidx.compose.ui.layout.SubcomposeSlotReusePolicy SubcomposeSlotReusePolicy(int maxSlotsToRetainForReuse);
}
public final class SubcomposeLayoutState {
- ctor public SubcomposeLayoutState(androidx.compose.ui.layout.SubcomposeSlotReusePolicy slotReusePolicy);
ctor public SubcomposeLayoutState();
+ ctor public SubcomposeLayoutState(androidx.compose.ui.layout.SubcomposeSlotReusePolicy slotReusePolicy);
ctor @Deprecated public SubcomposeLayoutState(int maxSlotsToRetainForReuse);
method public androidx.compose.ui.layout.SubcomposeLayoutState.PrecomposedSlotHandle precompose(Object? slotId, kotlin.jvm.functions.Function0<kotlin.Unit> content);
}
@@ -2247,10 +2243,10 @@
public final class ModifierLocalModifierNodeKt {
method public static androidx.compose.ui.modifier.ModifierLocalMap modifierLocalMapOf();
- method public static <T> androidx.compose.ui.modifier.ModifierLocalMap modifierLocalMapOf(androidx.compose.ui.modifier.ModifierLocal<T> key);
- method public static <T> androidx.compose.ui.modifier.ModifierLocalMap modifierLocalMapOf(kotlin.Pair<? extends androidx.compose.ui.modifier.ModifierLocal<T>,? extends T> entry);
method public static androidx.compose.ui.modifier.ModifierLocalMap modifierLocalMapOf(androidx.compose.ui.modifier.ModifierLocal<?>... keys);
+ method public static <T> androidx.compose.ui.modifier.ModifierLocalMap modifierLocalMapOf(androidx.compose.ui.modifier.ModifierLocal<T> key);
method public static androidx.compose.ui.modifier.ModifierLocalMap modifierLocalMapOf(kotlin.Pair<? extends androidx.compose.ui.modifier.ModifierLocal<?>,?>... entries);
+ method public static <T> androidx.compose.ui.modifier.ModifierLocalMap modifierLocalMapOf(kotlin.Pair<? extends androidx.compose.ui.modifier.ModifierLocal<T>,? extends T> entry);
}
@androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public interface ModifierLocalProvider<T> extends androidx.compose.ui.Modifier.Element {
@@ -2448,9 +2444,9 @@
package androidx.compose.ui.platform {
public abstract class AbstractComposeView extends android.view.ViewGroup {
- ctor public AbstractComposeView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
- ctor public AbstractComposeView(android.content.Context context, optional android.util.AttributeSet? attrs);
ctor public AbstractComposeView(android.content.Context context);
+ ctor public AbstractComposeView(android.content.Context context, optional android.util.AttributeSet? attrs);
+ ctor public AbstractComposeView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
method @androidx.compose.runtime.Composable @androidx.compose.ui.UiComposable public abstract void Content();
method public final void createComposition();
method public final void disposeComposition();
@@ -2531,9 +2527,9 @@
}
public final class ComposeView extends androidx.compose.ui.platform.AbstractComposeView {
- ctor public ComposeView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
- ctor public ComposeView(android.content.Context context, optional android.util.AttributeSet? attrs);
ctor public ComposeView(android.content.Context context);
+ ctor public ComposeView(android.content.Context context, optional android.util.AttributeSet? attrs);
+ ctor public ComposeView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
method @androidx.compose.runtime.Composable public void Content();
method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> content);
property protected boolean shouldCreateCompositionOnAttachedToWindow;
@@ -2791,8 +2787,8 @@
}
public final class VectorResources_androidKt {
- method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.vector.ImageVector vectorResource(androidx.compose.ui.graphics.vector.ImageVector.Companion, @DrawableRes int id);
method @kotlin.jvm.Throws(exceptionClasses=XmlPullParserException::class) public static androidx.compose.ui.graphics.vector.ImageVector vectorResource(androidx.compose.ui.graphics.vector.ImageVector.Companion, optional android.content.res.Resources.Theme? theme, android.content.res.Resources res, int resId) throws org.xmlpull.v1.XmlPullParserException;
+ method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.vector.ImageVector vectorResource(androidx.compose.ui.graphics.vector.ImageVector.Companion, @DrawableRes int id);
}
}
@@ -3097,7 +3093,7 @@
method public static androidx.compose.ui.text.AnnotatedString getEditableText(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
method public static boolean getFocused(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
method public static androidx.compose.ui.semantics.ScrollAxisRange getHorizontalScrollAxisRange(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
- method public static int getImeAction(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
+ method @Deprecated public static int getImeAction(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
method public static int getLiveRegion(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
method public static String getPaneTitle(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
method public static androidx.compose.ui.semantics.ProgressBarRangeInfo getProgressBarRangeInfo(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
@@ -3124,7 +3120,7 @@
method public static void pageUp(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
method public static void password(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
method public static void pasteText(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
- method public static void performImeAction(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
+ method public static void performImeAction(androidx.compose.ui.semantics.SemanticsPropertyReceiver, int imeActionType, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
method public static void popup(androidx.compose.ui.semantics.SemanticsPropertyReceiver);
method public static void requestFocus(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function0<java.lang.Boolean>? action);
method public static void scrollBy(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,java.lang.Boolean>? action);
@@ -3138,7 +3134,7 @@
method public static void setEditableText(androidx.compose.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.text.AnnotatedString);
method public static void setFocused(androidx.compose.ui.semantics.SemanticsPropertyReceiver, boolean);
method public static void setHorizontalScrollAxisRange(androidx.compose.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.semantics.ScrollAxisRange);
- method public static void setImeAction(androidx.compose.ui.semantics.SemanticsPropertyReceiver, int);
+ method @Deprecated public static void setImeAction(androidx.compose.ui.semantics.SemanticsPropertyReceiver, int);
method public static void setLiveRegion(androidx.compose.ui.semantics.SemanticsPropertyReceiver, int);
method public static void setPaneTitle(androidx.compose.ui.semantics.SemanticsPropertyReceiver, String);
method public static void setProgress(androidx.compose.ui.semantics.SemanticsPropertyReceiver, optional String? label, kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Boolean>? action);
@@ -3220,8 +3216,8 @@
}
@androidx.compose.runtime.Immutable public final class DialogProperties {
- ctor public DialogProperties(optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy, optional boolean usePlatformDefaultWidth, optional boolean decorFitsSystemWindows);
ctor public DialogProperties(optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy);
+ ctor public DialogProperties(optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy, optional boolean usePlatformDefaultWidth, optional boolean decorFitsSystemWindows);
method public boolean getDecorFitsSystemWindows();
method public boolean getDismissOnBackPress();
method public boolean getDismissOnClickOutside();
diff --git a/compose/ui/ui/benchmark/src/androidTest/java/androidx/compose/ui/benchmark/OnPositionedBenchmark.kt b/compose/ui/ui/benchmark/src/androidTest/java/androidx/compose/ui/benchmark/OnPositionedBenchmark.kt
index b14c52c..564fce8a 100644
--- a/compose/ui/ui/benchmark/src/androidTest/java/androidx/compose/ui/benchmark/OnPositionedBenchmark.kt
+++ b/compose/ui/ui/benchmark/src/androidTest/java/androidx/compose/ui/benchmark/OnPositionedBenchmark.kt
@@ -29,11 +29,11 @@
import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@LargeTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/benchmark/src/androidTest/java/androidx/compose/ui/benchmark/input/pointer/AndroidTapIntegrationBenchmark.kt b/compose/ui/ui/benchmark/src/androidTest/java/androidx/compose/ui/benchmark/input/pointer/AndroidTapIntegrationBenchmark.kt
index c6c0d53..87a6eab 100644
--- a/compose/ui/ui/benchmark/src/androidTest/java/androidx/compose/ui/benchmark/input/pointer/AndroidTapIntegrationBenchmark.kt
+++ b/compose/ui/ui/benchmark/src/androidTest/java/androidx/compose/ui/benchmark/input/pointer/AndroidTapIntegrationBenchmark.kt
@@ -32,13 +32,13 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.TimeUnit
import org.junit.Assert
import org.junit.Before
import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.TimeUnit
/**
* Benchmark for simply tapping on an item in Android.
diff --git a/compose/ui/ui/benchmark/src/androidTest/java/androidx/compose/ui/benchmark/input/pointer/VelocityTrackerBenchmark.kt b/compose/ui/ui/benchmark/src/androidTest/java/androidx/compose/ui/benchmark/input/pointer/VelocityTrackerBenchmark.kt
index eb56a62..058b533 100644
--- a/compose/ui/ui/benchmark/src/androidTest/java/androidx/compose/ui/benchmark/input/pointer/VelocityTrackerBenchmark.kt
+++ b/compose/ui/ui/benchmark/src/androidTest/java/androidx/compose/ui/benchmark/input/pointer/VelocityTrackerBenchmark.kt
@@ -17,10 +17,8 @@
import androidx.compose.testutils.benchmark.ComposeBenchmarkRule
import androidx.compose.ui.input.pointer.util.VelocityTracker1D
-
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
-
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
diff --git a/compose/ui/ui/build.gradle b/compose/ui/ui/build.gradle
index 3beea81..caff544 100644
--- a/compose/ui/ui/build.gradle
+++ b/compose/ui/ui/build.gradle
@@ -217,7 +217,7 @@
}
androidx {
- name = "Compose UI primitives"
+ name = "Compose UI"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2019"
description = "Compose UI primitives. This library contains the primitives that form the Compose UI Toolkit, such as drawing, measurement and layout."
diff --git a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/MultipleCollect.kt b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/MultipleCollect.kt
index 0496cc5..a6a1c30 100644
--- a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/MultipleCollect.kt
+++ b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/MultipleCollect.kt
@@ -18,13 +18,13 @@
package androidx.compose.ui.demos
-import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable
-import androidx.compose.ui.layout.Layout
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.layout.Layout
import androidx.compose.ui.layout.layoutId
import androidx.compose.ui.unit.Constraints
diff --git a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/PopupDemo.kt b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/PopupDemo.kt
index c656ad0..b5cc1be 100644
--- a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/PopupDemo.kt
+++ b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/PopupDemo.kt
@@ -27,9 +27,9 @@
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.requiredHeight
-import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.requiredHeight
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.rememberScrollState
diff --git a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/UiDemos.kt b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/UiDemos.kt
index 4e65849..7576a5607 100644
--- a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/UiDemos.kt
+++ b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/UiDemos.kt
@@ -33,12 +33,12 @@
import androidx.compose.ui.demos.focus.FocusInPopupDemo
import androidx.compose.ui.demos.focus.FocusManagerMoveFocusDemo
import androidx.compose.ui.demos.focus.FocusableDemo
+import androidx.compose.ui.demos.focus.LazyListChildFocusDemos
+import androidx.compose.ui.demos.focus.NestedLazyListFocusSearchDemo
import androidx.compose.ui.demos.focus.OneDimensionalFocusSearchDemo
import androidx.compose.ui.demos.focus.ReuseFocusRequesterDemo
import androidx.compose.ui.demos.focus.ScrollableLazyRowFocusDemo
import androidx.compose.ui.demos.focus.ScrollableRowFocusDemo
-import androidx.compose.ui.demos.focus.LazyListChildFocusDemos
-import androidx.compose.ui.demos.focus.NestedLazyListFocusSearchDemo
import androidx.compose.ui.demos.focus.TwoDimensionalFocusSearchDemo
import androidx.compose.ui.demos.gestures.ButtonMetaStateDemo
import androidx.compose.ui.demos.gestures.DetectTapGesturesDemo
diff --git a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/DragSlopExceededGestureFilterDemo.kt b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/DragSlopExceededGestureFilterDemo.kt
index 4ffbac4..9834a47 100644
--- a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/DragSlopExceededGestureFilterDemo.kt
+++ b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/DragSlopExceededGestureFilterDemo.kt
@@ -17,9 +17,9 @@
package androidx.compose.ui.demos.gestures
import androidx.compose.foundation.background
+import androidx.compose.foundation.gestures.awaitEachGesture
import androidx.compose.foundation.gestures.awaitFirstDown
import androidx.compose.foundation.gestures.awaitTouchSlopOrCancellation
-import androidx.compose.foundation.gestures.awaitEachGesture
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
diff --git a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/HorizontalScrollersInVerticalScrollerDemo.kt b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/HorizontalScrollersInVerticalScrollerDemo.kt
index e79abb8..f6aa708 100644
--- a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/HorizontalScrollersInVerticalScrollerDemo.kt
+++ b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/HorizontalScrollersInVerticalScrollerDemo.kt
@@ -18,6 +18,7 @@
import androidx.compose.foundation.background
import androidx.compose.foundation.border
+import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.gestures.detectTapGestures
import androidx.compose.foundation.gestures.rememberScrollableState
import androidx.compose.foundation.gestures.scrollable
@@ -28,15 +29,14 @@
import androidx.compose.foundation.layout.size
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableFloatStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.DrawModifier
import androidx.compose.ui.geometry.Offset
-import androidx.compose.foundation.gestures.Orientation
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableFloatStateOf
-import androidx.compose.runtime.setValue
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.drawscope.ContentDrawScope
import androidx.compose.ui.graphics.drawscope.clipRect
diff --git a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/NestedScrollingDemo.kt b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/NestedScrollingDemo.kt
index a6af47f..213634a 100644
--- a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/NestedScrollingDemo.kt
+++ b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/NestedScrollingDemo.kt
@@ -19,26 +19,26 @@
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.background
import androidx.compose.foundation.border
-import androidx.compose.foundation.gestures.rememberScrollableState
+import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.gestures.detectTapGestures
+import androidx.compose.foundation.gestures.rememberScrollableState
import androidx.compose.foundation.gestures.scrollable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableFloatStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clipToBounds
import androidx.compose.ui.geometry.Offset
-import androidx.compose.foundation.gestures.Orientation
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableFloatStateOf
-import androidx.compose.runtime.setValue
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.layout.Layout
diff --git a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/RawDragGestureDetectorDemo.kt b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/RawDragGestureDetectorDemo.kt
index 004e2b7..e1ec630 100644
--- a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/RawDragGestureDetectorDemo.kt
+++ b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/RawDragGestureDetectorDemo.kt
@@ -17,8 +17,8 @@
package androidx.compose.ui.demos.gestures
import androidx.compose.foundation.background
-import androidx.compose.foundation.gestures.awaitFirstDown
import androidx.compose.foundation.gestures.awaitEachGesture
+import androidx.compose.foundation.gestures.awaitFirstDown
import androidx.compose.foundation.gestures.drag
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
diff --git a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/ScrollGestureFilterDemo.kt b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/ScrollGestureFilterDemo.kt
index 6d9fc2f..695fb40 100644
--- a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/ScrollGestureFilterDemo.kt
+++ b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/ScrollGestureFilterDemo.kt
@@ -16,10 +16,11 @@
package androidx.compose.ui.demos.gestures
-import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.background
+import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.gestures.rememberScrollableState
import androidx.compose.foundation.gestures.scrollable
+import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.interaction.collectIsDraggedAsState
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
@@ -29,13 +30,12 @@
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.remember
-import androidx.compose.ui.Alignment
-import androidx.compose.ui.Modifier
-import androidx.compose.foundation.gestures.Orientation
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableFloatStateOf
+import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.Dp
diff --git a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/VerticalScrollerInDrawerLayoutDemo.kt b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/VerticalScrollerInDrawerLayoutDemo.kt
index 206cbf3..f755807 100644
--- a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/VerticalScrollerInDrawerLayoutDemo.kt
+++ b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/VerticalScrollerInDrawerLayoutDemo.kt
@@ -18,6 +18,7 @@
import androidx.compose.foundation.background
import androidx.compose.foundation.border
+import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.gestures.detectTapGestures
import androidx.compose.foundation.gestures.rememberScrollableState
import androidx.compose.foundation.gestures.scrollable
@@ -28,22 +29,21 @@
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.requiredWidth
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableFloatStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.DrawModifier
import androidx.compose.ui.geometry.Offset
-import androidx.compose.foundation.gestures.Orientation
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableFloatStateOf
-import androidx.compose.runtime.setValue
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.drawscope.ContentDrawScope
import androidx.compose.ui.graphics.drawscope.clipRect
diff --git a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/modifier/CommunicatingModifierDemo.kt b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/modifier/CommunicatingModifierDemo.kt
index 6e04d4c..80b0d2e 100644
--- a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/modifier/CommunicatingModifierDemo.kt
+++ b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/modifier/CommunicatingModifierDemo.kt
@@ -38,8 +38,8 @@
import androidx.compose.ui.graphics.Color.Companion.Gray
import androidx.compose.ui.graphics.Color.Companion.Red
import androidx.compose.ui.modifier.modifierLocalConsumer
-import androidx.compose.ui.modifier.modifierLocalProvider
import androidx.compose.ui.modifier.modifierLocalOf
+import androidx.compose.ui.modifier.modifierLocalProvider
import androidx.compose.ui.unit.dp
import kotlinx.coroutines.launch
diff --git a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/viewinterop/FocusTransferDemo.kt b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/viewinterop/FocusTransferDemo.kt
index b412aa6..61c2a44 100644
--- a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/viewinterop/FocusTransferDemo.kt
+++ b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/viewinterop/FocusTransferDemo.kt
@@ -24,24 +24,24 @@
import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
+import androidx.compose.ui.focus.focusTarget
+import androidx.compose.ui.focus.onFocusEvent
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.platform.ComposeView
+import androidx.compose.ui.unit.sp
import androidx.compose.ui.viewinterop.AndroidView
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.Adapter
-import androidx.recyclerview.widget.RecyclerView.ViewHolder
import androidx.recyclerview.widget.RecyclerView.VERTICAL
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.ui.focus.focusTarget
-import androidx.compose.ui.focus.onFocusEvent
-import androidx.compose.ui.unit.sp
+import androidx.recyclerview.widget.RecyclerView.ViewHolder
@Composable
fun FocusTransferDemo() {
diff --git a/compose/ui/ui/samples/build.gradle b/compose/ui/ui/samples/build.gradle
index f2675f6..d201f40 100644
--- a/compose/ui/ui/samples/build.gradle
+++ b/compose/ui/ui/samples/build.gradle
@@ -39,7 +39,7 @@
}
androidx {
- name = "AndroidX Compose UI Core Classes Samples"
+ name = "Compose UI Core Classes Samples"
type = LibraryType.SAMPLES
inceptionYear = "2019"
description = "Contains the sample code for the Androidx Compose UI Core Classes"
diff --git a/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/AlphaSample.kt b/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/AlphaSample.kt
index 0eda2b2..8dab4ab 100644
--- a/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/AlphaSample.kt
+++ b/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/AlphaSample.kt
@@ -17,8 +17,8 @@
package androidx.compose.ui.samples
import androidx.annotation.Sampled
-import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.size
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
diff --git a/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/BlurSample.kt b/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/BlurSample.kt
index c97aec8..4ecd92c 100644
--- a/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/BlurSample.kt
+++ b/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/BlurSample.kt
@@ -18,8 +18,8 @@
import androidx.annotation.Sampled
import androidx.compose.foundation.Image
-import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
diff --git a/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/DialogSample.kt b/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/DialogSample.kt
index b5508de..d66efbd 100644
--- a/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/DialogSample.kt
+++ b/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/DialogSample.kt
@@ -17,8 +17,8 @@
package androidx.compose.ui.samples
import androidx.annotation.Sampled
-import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.size
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
diff --git a/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/LayoutSample.kt b/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/LayoutSample.kt
index 6c41b9f8..6908017 100644
--- a/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/LayoutSample.kt
+++ b/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/LayoutSample.kt
@@ -22,11 +22,11 @@
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable
import androidx.compose.ui.ExperimentalComposeUiApi
-import androidx.compose.ui.layout.Layout
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.IntrinsicMeasurable
import androidx.compose.ui.layout.IntrinsicMeasureScope
+import androidx.compose.ui.layout.Layout
import androidx.compose.ui.layout.LayoutModifier
import androidx.compose.ui.layout.Measurable
import androidx.compose.ui.layout.MeasurePolicy
diff --git a/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/ModifierCompositionLocalSample.kt b/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/ModifierCompositionLocalSample.kt
index 8245a01..108ffc5 100644
--- a/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/ModifierCompositionLocalSample.kt
+++ b/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/ModifierCompositionLocalSample.kt
@@ -27,7 +27,9 @@
import androidx.compose.ui.node.CompositionLocalConsumerModifierNode
import androidx.compose.ui.node.DrawModifierNode
import androidx.compose.ui.node.ModifierNodeElement
+import androidx.compose.ui.node.ObserverModifierNode
import androidx.compose.ui.node.currentValueOf
+import androidx.compose.ui.node.observeReads
import androidx.compose.ui.platform.InspectorInfo
@Sampled
@@ -55,4 +57,26 @@
Box(Modifier.backgroundColor()) {
Text("Hello, world!")
}
+}
+
+@Sampled
+@Composable
+fun CompositionLocalConsumingModifierObserverNodeSample() {
+ val LocalValue = compositionLocalOf { "abc123" }
+ class ValueObserverModifierNode : Modifier.Node(),
+ CompositionLocalConsumerModifierNode, ObserverModifierNode {
+ private var observedValue: String? = null
+ override fun onAttach() {
+ onObservedReadsChanged()
+ }
+ override fun onDetach() {
+ observedValue = null
+ }
+ override fun onObservedReadsChanged() {
+ observeReads {
+ observedValue = currentValueOf(LocalValue)
+ // Do something with the new value
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/ModifierLocalSamples.kt b/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/ModifierLocalSamples.kt
index 0db443d..d1869e6 100644
--- a/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/ModifierLocalSamples.kt
+++ b/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/ModifierLocalSamples.kt
@@ -28,8 +28,8 @@
import androidx.compose.ui.Modifier
import androidx.compose.ui.composed
import androidx.compose.ui.modifier.modifierLocalConsumer
-import androidx.compose.ui.modifier.modifierLocalProvider
import androidx.compose.ui.modifier.modifierLocalOf
+import androidx.compose.ui.modifier.modifierLocalProvider
@OptIn(ExperimentalComposeUiApi::class)
@Sampled
diff --git a/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/OnGloballyPositionedSamples.kt b/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/OnGloballyPositionedSamples.kt
index 479029d..1b414e9 100644
--- a/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/OnGloballyPositionedSamples.kt
+++ b/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/OnGloballyPositionedSamples.kt
@@ -17,15 +17,15 @@
package androidx.compose.ui.samples
import androidx.annotation.Sampled
-import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.size
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.layout.positionInRoot
import androidx.compose.ui.layout.onGloballyPositioned
+import androidx.compose.ui.layout.positionInRoot
import androidx.compose.ui.layout.positionInWindow
import androidx.compose.ui.unit.dp
diff --git a/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/PainterSample.kt b/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/PainterSample.kt
index cbfcaea..f39a660 100644
--- a/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/PainterSample.kt
+++ b/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/PainterSample.kt
@@ -18,8 +18,8 @@
import androidx.annotation.Sampled
import androidx.compose.foundation.Image
-import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.requiredSize
import androidx.compose.runtime.Composable
diff --git a/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/PopupSample.kt b/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/PopupSample.kt
index 5939d56..7d311d3 100644
--- a/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/PopupSample.kt
+++ b/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/PopupSample.kt
@@ -17,8 +17,8 @@
package androidx.compose.ui.samples
import androidx.annotation.Sampled
-import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.runtime.Composable
diff --git a/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/SubcomposeLayoutSample.kt b/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/SubcomposeLayoutSample.kt
index 9c932f2..b116741 100644
--- a/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/SubcomposeLayoutSample.kt
+++ b/compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/SubcomposeLayoutSample.kt
@@ -17,27 +17,9 @@
package androidx.compose.ui.samples
import androidx.annotation.Sampled
-import androidx.compose.animation.core.Animatable
-import androidx.compose.animation.core.AnimationVector2D
-import androidx.compose.animation.core.VectorConverter
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.requiredSize
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
-import androidx.compose.runtime.setValue
-import androidx.compose.ui.ExperimentalComposeUiApi
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.UiComposable
-import androidx.compose.ui.composed
-import androidx.compose.ui.layout.MeasurePolicy
import androidx.compose.ui.layout.SubcomposeLayout
-import androidx.compose.ui.layout.intermediateLayout
-import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.IntSize
-import androidx.compose.ui.unit.dp
-import kotlinx.coroutines.launch
@Sampled
@Composable
@@ -67,97 +49,4 @@
}
}
-enum class SlotsEnum { Main, Dependent }
-
-@OptIn(ExperimentalComposeUiApi::class)
-@Sampled
-fun SubcomposeLayoutWithIntermediateMeasurePolicySample() {
- // In this example, there is a custom modifier that animates the constraints and measures
- // child with the animated constraints, as defined below.
- // This modifier is built on top of `Modifier.intermediateLayout`, which
- // allows access to the lookahead size of the layout. A resize animation will be kicked off
- // whenever the lookahead size changes, to animate children from current size to lookahead size.
- // Fixed constraints created based on the animation value will be used to measure
- // child, so the child layout gradually changes its size and potentially its child's placement
- // to fit within the animated constraints.
- fun Modifier.animateConstraints() = composed {
- // Creates a size animation
- var sizeAnimation: Animatable<IntSize, AnimationVector2D>? by remember {
- mutableStateOf(null)
- }
-
- this.intermediateLayout { measurable, _ ->
- // When layout changes, the lookahead pass will calculate a new final size for the
- // child layout. This lookahead size can be used to animate the size
- // change, such that the animation starts from the current size and gradually
- // change towards `lookaheadSize`.
- if (lookaheadSize != sizeAnimation?.targetValue) {
- sizeAnimation?.run {
- launch { animateTo(lookaheadSize) }
- } ?: Animatable(lookaheadSize, IntSize.VectorConverter).let {
- sizeAnimation = it
- }
- }
- val (width, height) = sizeAnimation!!.value
- // Creates a fixed set of constraints using the animated size
- val animatedConstraints = Constraints.fixed(width, height)
- // Measure child with animated constraints.
- val placeable = measurable.measure(animatedConstraints)
- layout(placeable.width, placeable.height) {
- placeable.place(0, 0)
- }
- }
- }
-
- // In the example below, the SubcomposeLayout has a parent layout that animates its width
- // between two fixed sizes using the `animateConstraints` modifier we created above.
- @Composable
- fun SubcomposeLayoutWithAnimatingParentLayout(
- isWide: Boolean,
- modifier: Modifier = Modifier,
- content: @Composable @UiComposable () -> Unit
- ) {
- // Create a MeasurePolicy to measure all children with incoming constraints and return the
- // largest width & height.
- val myMeasurePolicy = MeasurePolicy { measurables, constraints ->
- val placeables = measurables.map { it.measure(constraints) }
- val maxWidth = placeables.maxOf { it.width }
- val maxHeight = placeables.maxOf { it.height }
- layout(maxWidth, maxHeight) {
- placeables.forEach { it.place(0, 0) }
- }
- }
- Box(
- Modifier
- .requiredSize(if (isWide) 400.dp else 200.dp)
- .animateConstraints()
- ) {
- // SubcomposeLayout's measurePolicy will only be invoked with lookahead constraints.
- // The parent layout in this example is animating between two fixed widths. The
- // [measurePolicy] parameter will only be called with lookahead constraints
- // (i.e. constraints for 400.dp x 400.dp or 200.dp x 200.dp depending on the state.)
- // This may cause content lambda to jump to its final size. To create a smooth
- // experience, we need to remeasure the content with the intermediate
- // constraints created by the `animateConstraints` that we built above. Therefore, we
- // need to provide a [intermediateMeasurePolicy] to define how to measure the
- // content (using the measureables of the content that was composed in [measurePolicy])
- // with intermediate constraints.
- SubcomposeLayout(
- modifier,
- intermediateMeasurePolicy = { intermediateConstraints ->
- // Retrieve the measureables for slotId = Unit, and measure them with
- // intermediate constraints using the measurePolicy we created above.
- with(myMeasurePolicy) {
- measure(
- measurablesForSlot(Unit),
- intermediateConstraints
- )
- }
- },
- measurePolicy = { constraints ->
- val measurables = subcompose(Unit) { content() }
- with(myMeasurePolicy) { measure(measurables, constraints) }
- })
- }
- }
-}
\ No newline at end of file
+enum class SlotsEnum { Main, Dependent }
\ No newline at end of file
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AccessibilityIteratorsTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AccessibilityIteratorsTest.kt
index ffa6615..bd38fe1 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AccessibilityIteratorsTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AccessibilityIteratorsTest.kt
@@ -42,11 +42,11 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import com.google.common.truth.Truth
+import java.util.Locale
+import kotlin.math.abs
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.Locale
-import kotlin.math.abs
@LargeTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidAccessibilityTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidAccessibilityTest.kt
index 5d49476..67b261a 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidAccessibilityTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidAccessibilityTest.kt
@@ -43,8 +43,8 @@
import androidx.compose.foundation.Image
import androidx.compose.foundation.ScrollState
import androidx.compose.foundation.clickable
-import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.focusable
+import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.gestures.scrollBy
import androidx.compose.foundation.gestures.scrollable
import androidx.compose.foundation.layout.Arrangement
@@ -57,8 +57,8 @@
import androidx.compose.foundation.layout.requiredSize
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn
-import androidx.compose.foundation.lazy.LazyRow
import androidx.compose.foundation.lazy.LazyListState
+import androidx.compose.foundation.lazy.LazyRow
import androidx.compose.foundation.progressSemantics
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.selection.selectable
@@ -158,8 +158,8 @@
import androidx.compose.ui.text.toUpperCase
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.DpOffset
-import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.LayoutDirection
+import androidx.compose.ui.unit.dp
import androidx.compose.ui.util.fastForEach
import androidx.compose.ui.util.fastMap
import androidx.compose.ui.viewinterop.AndroidView
@@ -171,13 +171,8 @@
import androidx.test.filters.SdkSuppress
import androidx.test.platform.app.InstrumentationRegistry
import com.google.common.truth.Truth.assertThat
-import org.mockito.kotlin.argThat
-import org.mockito.kotlin.atLeastOnce
-import org.mockito.kotlin.doReturn
-import org.mockito.kotlin.eq
-import org.mockito.kotlin.spy
-import org.mockito.kotlin.times
-import org.mockito.kotlin.verify
+import java.lang.reflect.Method
+import kotlin.math.max
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import org.junit.Assert.assertEquals
@@ -195,8 +190,13 @@
import org.mockito.ArgumentMatcher
import org.mockito.ArgumentMatchers.any
import org.mockito.internal.matchers.apachecommons.ReflectionEquals
-import java.lang.reflect.Method
-import kotlin.math.max
+import org.mockito.kotlin.argThat
+import org.mockito.kotlin.atLeastOnce
+import org.mockito.kotlin.doReturn
+import org.mockito.kotlin.eq
+import org.mockito.kotlin.spy
+import org.mockito.kotlin.times
+import org.mockito.kotlin.verify
@LargeTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidComposeViewAccessibilityDelegateCompatTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidComposeViewAccessibilityDelegateCompatTest.kt
index 337f866..5a160ba 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidComposeViewAccessibilityDelegateCompatTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidComposeViewAccessibilityDelegateCompatTest.kt
@@ -135,17 +135,6 @@
import androidx.test.filters.SdkSuppress
import androidx.test.platform.app.InstrumentationRegistry
import com.google.common.truth.Truth.assertThat
-import org.mockito.kotlin.any
-import org.mockito.kotlin.argThat
-import org.mockito.kotlin.argumentCaptor
-import org.mockito.kotlin.doReturn
-import org.mockito.kotlin.eq
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.never
-import org.mockito.kotlin.spy
-import org.mockito.kotlin.times
-import org.mockito.kotlin.verify
-import org.mockito.kotlin.whenever
import java.util.concurrent.Executors
import kotlin.coroutines.CoroutineContext
import kotlinx.coroutines.asCoroutineDispatcher
@@ -158,6 +147,17 @@
import org.junit.runner.RunWith
import org.mockito.ArgumentMatcher
import org.mockito.ArgumentMatchers
+import org.mockito.kotlin.any
+import org.mockito.kotlin.argThat
+import org.mockito.kotlin.argumentCaptor
+import org.mockito.kotlin.doReturn
+import org.mockito.kotlin.eq
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.never
+import org.mockito.kotlin.spy
+import org.mockito.kotlin.times
+import org.mockito.kotlin.verify
+import org.mockito.kotlin.whenever
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/MemoryLeakTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/MemoryLeakTest.kt
index 9610e78..c6d3e83 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/MemoryLeakTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/MemoryLeakTest.kt
@@ -32,6 +32,8 @@
import androidx.test.filters.LargeTest
import androidx.test.filters.SdkSuppress
import com.google.common.truth.Truth.assertThat
+import java.text.NumberFormat
+import java.util.Locale
import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withContext
@@ -39,8 +41,6 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.text.NumberFormat
-import java.util.Locale
@LargeTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/ParentDataModifierTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/ParentDataModifierTest.kt
index adf79b7..9f8bae1 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/ParentDataModifierTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/ParentDataModifierTest.kt
@@ -37,6 +37,8 @@
import androidx.compose.ui.unit.Density
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNull
import org.junit.Assert.assertTrue
@@ -44,8 +46,6 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/RecyclerViewIntegrationTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/RecyclerViewIntegrationTest.kt
index 380b9b7..5d1a315 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/RecyclerViewIntegrationTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/RecyclerViewIntegrationTest.kt
@@ -34,10 +34,10 @@
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
-import org.junit.Test
-import org.junit.runner.RunWith
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
+import org.junit.Test
+import org.junit.runner.RunWith
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/draw/AlphaTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/draw/AlphaTest.kt
index d21fe8b..d67a405 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/draw/AlphaTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/draw/AlphaTest.kt
@@ -37,15 +37,15 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import androidx.test.filters.SdkSuppress
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import kotlin.math.max
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
-import kotlin.math.max
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/draw/DrawReorderingTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/draw/DrawReorderingTest.kt
index 568809a..57531e5 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/draw/DrawReorderingTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/draw/DrawReorderingTest.kt
@@ -43,14 +43,14 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import androidx.test.filters.SdkSuppress
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/draw/GraphicsLayerModifierTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/draw/GraphicsLayerModifierTest.kt
index 618ceb7..78b3042 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/draw/GraphicsLayerModifierTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/draw/GraphicsLayerModifierTest.kt
@@ -20,10 +20,10 @@
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.CompositingStrategy
-import androidx.compose.ui.graphics.TransformOrigin
import androidx.compose.ui.graphics.DefaultCameraDistance
import androidx.compose.ui.graphics.DefaultShadowColor
import androidx.compose.ui.graphics.RectangleShape
+import androidx.compose.ui.graphics.TransformOrigin
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.platform.InspectableValue
import androidx.compose.ui.platform.ValueElement
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/draw/PainterModifierTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/draw/PainterModifierTest.kt
index 3d6683e..e49c957 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/draw/PainterModifierTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/draw/PainterModifierTest.kt
@@ -94,6 +94,8 @@
import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
+import kotlin.math.max
+import kotlin.math.roundToInt
import org.junit.After
import org.junit.Assert.assertEquals
import org.junit.Before
@@ -101,8 +103,6 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.math.max
-import kotlin.math.roundToInt
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/draw/ShadowTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/draw/ShadowTest.kt
index f9d9136d..8f23d70 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/draw/ShadowTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/draw/ShadowTest.kt
@@ -50,6 +50,8 @@
import androidx.test.filters.MediumTest
import androidx.test.filters.SdkSuppress
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.After
import org.junit.Assert
import org.junit.Assert.assertEquals
@@ -60,8 +62,6 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/focus/CustomFocusTraversalTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/focus/CustomFocusTraversalTest.kt
index e3749d3..d3eccf4 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/focus/CustomFocusTraversalTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/focus/CustomFocusTraversalTest.kt
@@ -27,12 +27,12 @@
import androidx.compose.runtime.setValue
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
-import androidx.compose.ui.input.key.Key.Companion.Tab
-import androidx.compose.ui.input.key.Key.Companion.DirectionUp
import androidx.compose.ui.input.key.Key.Companion.DirectionDown
import androidx.compose.ui.input.key.Key.Companion.DirectionLeft
import androidx.compose.ui.input.key.Key.Companion.DirectionRight
+import androidx.compose.ui.input.key.Key.Companion.DirectionUp
import androidx.compose.ui.input.key.Key.Companion.Enter
+import androidx.compose.ui.input.key.Key.Companion.Tab
import androidx.compose.ui.input.key.KeyEvent
import androidx.compose.ui.input.key.nativeKeyCode
import androidx.compose.ui.platform.LocalFocusManager
@@ -40,10 +40,10 @@
import androidx.compose.ui.test.onRoot
import androidx.compose.ui.test.performKeyPress
import androidx.test.filters.MediumTest
+import com.google.common.truth.Truth.assertThat
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import com.google.common.truth.Truth.assertThat
import org.junit.runners.Parameterized
import org.junit.runners.Parameterized.Parameters
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/focus/FocusChangedCountTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/focus/FocusChangedCountTest.kt
index f7b0dad..d1b5b2d 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/focus/FocusChangedCountTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/focus/FocusChangedCountTest.kt
@@ -21,8 +21,8 @@
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
-import androidx.compose.ui.focus.FocusStateImpl.Inactive
import androidx.compose.ui.focus.FocusStateImpl.Active
+import androidx.compose.ui.focus.FocusStateImpl.Inactive
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.test.ext.junit.runners.AndroidJUnit4
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/focus/FocusRequesterTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/focus/FocusRequesterTest.kt
index 7f44c86..faa13ae 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/focus/FocusRequesterTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/focus/FocusRequesterTest.kt
@@ -28,11 +28,11 @@
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
import androidx.compose.ui.composed
+import androidx.compose.ui.focus.focusRequester as modifierNodeFocusRequester
import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.platform.debugInspectorInfo
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.unit.dp
-import androidx.compose.ui.focus.focusRequester as modifierNodeFocusRequester
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
import org.junit.Rule
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/focus/KeyEventToFocusDirectionTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/focus/KeyEventToFocusDirectionTest.kt
index 9cce01f..94dce03 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/focus/KeyEventToFocusDirectionTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/focus/KeyEventToFocusDirectionTest.kt
@@ -16,8 +16,13 @@
package androidx.compose.ui.focus
+import android.view.KeyEvent as AndroidKeyEvent
+import android.view.KeyEvent.ACTION_DOWN as KeyDown
+import android.view.KeyEvent.META_SHIFT_ON as Shift
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.focus.FocusDirection.Companion.Down
+import androidx.compose.ui.focus.FocusDirection.Companion.Enter
+import androidx.compose.ui.focus.FocusDirection.Companion.Exit
import androidx.compose.ui.focus.FocusDirection.Companion.Left
import androidx.compose.ui.focus.FocusDirection.Companion.Next
import androidx.compose.ui.focus.FocusDirection.Companion.Previous
@@ -36,11 +41,6 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import android.view.KeyEvent as AndroidKeyEvent
-import android.view.KeyEvent.ACTION_DOWN as KeyDown
-import android.view.KeyEvent.META_SHIFT_ON as Shift
-import androidx.compose.ui.focus.FocusDirection.Companion.Enter
-import androidx.compose.ui.focus.FocusDirection.Companion.Exit
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/CursorAnchorInfoBuilderTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/CursorAnchorInfoBuilderTest.kt
index 0a383f3..190fd50 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/CursorAnchorInfoBuilderTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/CursorAnchorInfoBuilderTest.kt
@@ -20,10 +20,10 @@
import android.view.inputmethod.CursorAnchorInfo
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.MultiParagraph
-import androidx.compose.ui.text.TextRange
-import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.TextLayoutInput
import androidx.compose.ui.text.TextLayoutResult
+import androidx.compose.ui.text.TextRange
+import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.Font
import androidx.compose.ui.text.font.FontStyle
import androidx.compose.ui.text.font.FontWeight
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/RecordingInputConnectionTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/RecordingInputConnectionTest.kt
index 9028277..ed4776e 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/RecordingInputConnectionTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/RecordingInputConnectionTest.kt
@@ -33,16 +33,16 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
import org.mockito.kotlin.any
import org.mockito.kotlin.argumentCaptor
import org.mockito.kotlin.mock
import org.mockito.kotlin.never
import org.mockito.kotlin.times
import org.mockito.kotlin.verify
-import org.junit.Assert.assertTrue
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/TextInputServiceAndroidEmojiTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/TextInputServiceAndroidEmojiTest.kt
index 0aff99c..2bec941 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/TextInputServiceAndroidEmojiTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/TextInputServiceAndroidEmojiTest.kt
@@ -29,12 +29,12 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
-import org.mockito.kotlin.eq
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.verify
import org.junit.After
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.kotlin.eq
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.verify
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/TextInputServiceAndroidOnStateUpdateTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/TextInputServiceAndroidOnStateUpdateTest.kt
index 73c44e6..9d383b7 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/TextInputServiceAndroidOnStateUpdateTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/TextInputServiceAndroidOnStateUpdateTest.kt
@@ -31,6 +31,9 @@
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
import com.google.common.truth.Truth.assertThat
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
import org.mockito.kotlin.any
import org.mockito.kotlin.eq
import org.mockito.kotlin.mock
@@ -38,9 +41,6 @@
import org.mockito.kotlin.reset
import org.mockito.kotlin.times
import org.mockito.kotlin.verify
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/focus/FocusAwareEventPropagationTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/focus/FocusAwareEventPropagationTest.kt
index 3baf4aa..6d7da47 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/focus/FocusAwareEventPropagationTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/focus/FocusAwareEventPropagationTest.kt
@@ -31,8 +31,8 @@
import androidx.compose.ui.input.focus.FocusAwareEventPropagationTest.NodeType.KeyInput
import androidx.compose.ui.input.focus.FocusAwareEventPropagationTest.NodeType.RotaryInput
import androidx.compose.ui.input.key.KeyEvent
-import androidx.compose.ui.input.key.onKeyEvent
import androidx.compose.ui.input.key.onInterceptKeyBeforeSoftKeyboard
+import androidx.compose.ui.input.key.onKeyEvent
import androidx.compose.ui.input.key.onPreInterceptKeyBeforeSoftKeyboard
import androidx.compose.ui.input.key.onPreviewKeyEvent
import androidx.compose.ui.input.rotary.RotaryScrollEvent
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/key/AndroidProcessKeyInputTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/key/AndroidProcessKeyInputTest.kt
index f17a1a2..f88a7ed 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/key/AndroidProcessKeyInputTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/key/AndroidProcessKeyInputTest.kt
@@ -16,6 +16,7 @@
package androidx.compose.ui.input.key
+import android.view.KeyEvent as AndroidKeyEvent
import android.view.KeyEvent.ACTION_DOWN as ActionDown
import android.view.KeyEvent.ACTION_UP as ActionUp
import android.view.KeyEvent.KEYCODE_A as KeyCodeA
@@ -30,18 +31,17 @@
import androidx.compose.ui.input.key.Key.Companion.A
import androidx.compose.ui.input.key.KeyEventType.Companion.KeyDown
import androidx.compose.ui.input.key.KeyEventType.Companion.KeyUp
+import androidx.compose.ui.node.DelegatingNode
import androidx.compose.ui.platform.LocalView
+import androidx.compose.ui.semantics.elementFor
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
+import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import android.view.KeyEvent as AndroidKeyEvent
-import androidx.compose.ui.node.DelegatingNode
-import androidx.compose.ui.semantics.elementFor
-import org.junit.Ignore
import org.mockito.kotlin.inOrder
/**
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/key/HardwareKeyInputTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/key/HardwareKeyInputTest.kt
index 5b4c1ba..262aaa7 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/key/HardwareKeyInputTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/key/HardwareKeyInputTest.kt
@@ -17,9 +17,9 @@
package androidx.compose.ui.input.key
import android.view.KeyEvent as AndroidKeyEvent
-import android.view.KeyEvent.KEYCODE_A as KeyCodeA
import android.view.KeyEvent.ACTION_DOWN
import android.view.KeyEvent.ACTION_UP
+import android.view.KeyEvent.KEYCODE_A as KeyCodeA
import androidx.compose.foundation.focusable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.requiredSize
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/key/KeyTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/key/KeyTest.kt
index 6358175..3e73445 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/key/KeyTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/key/KeyTest.kt
@@ -16,8 +16,8 @@
package androidx.compose.ui.input.key
-import androidx.compose.ui.ExperimentalComposeUiApi
import android.view.KeyEvent.KEYCODE_A as KeyCodeA
+import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/key/MetaKeyTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/key/MetaKeyTest.kt
index 5acd3bb..f4e78eb 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/key/MetaKeyTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/key/MetaKeyTest.kt
@@ -16,9 +16,9 @@
package androidx.compose.ui.input.key
-import android.view.KeyEvent.KEYCODE_A as KeyCodeA
-import android.view.KeyEvent.ACTION_DOWN as KeyDown
import android.view.KeyEvent as AndroidKeyEvent
+import android.view.KeyEvent.ACTION_DOWN as KeyDown
+import android.view.KeyEvent.KEYCODE_A as KeyCodeA
import android.view.KeyEvent.META_ALT_ON
import android.view.KeyEvent.META_CTRL_ON
import android.view.KeyEvent.META_META_ON
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/key/ProcessKeyInputTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/key/ProcessKeyInputTest.kt
index 0c88d69..b085af2 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/key/ProcessKeyInputTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/key/ProcessKeyInputTest.kt
@@ -17,9 +17,9 @@
package androidx.compose.ui.input.key
import android.view.KeyEvent as AndroidKeyEvent
-import android.view.KeyEvent.KEYCODE_A as KeyCodeA
import android.view.KeyEvent.ACTION_DOWN
import android.view.KeyEvent.ACTION_UP
+import android.view.KeyEvent.KEYCODE_A as KeyCodeA
import androidx.compose.foundation.layout.Box
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/AndroidPointerInputTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/AndroidPointerInputTest.kt
index 6470495..46f9946 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/AndroidPointerInputTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/AndroidPointerInputTest.kt
@@ -80,10 +80,8 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
-import org.mockito.kotlin.any
-import org.mockito.kotlin.never
-import org.mockito.kotlin.spy
-import org.mockito.kotlin.verify
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
@@ -92,8 +90,10 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
+import org.mockito.kotlin.any
+import org.mockito.kotlin.never
+import org.mockito.kotlin.spy
+import org.mockito.kotlin.verify
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/ClipPointerInputTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/ClipPointerInputTest.kt
index 905cbb2..0777bc1 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/ClipPointerInputTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/ClipPointerInputTest.kt
@@ -46,12 +46,12 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/LayerTouchTransformTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/LayerTouchTransformTest.kt
index e065521..7f69a0d 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/LayerTouchTransformTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/LayerTouchTransformTest.kt
@@ -43,14 +43,14 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import androidx.test.filters.SdkSuppress
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import kotlin.math.max
import org.junit.Assert
import org.junit.Assert.assertTrue
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
-import kotlin.math.max
@LargeTest
@SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/MouseEventTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/MouseEventTest.kt
index 1899a3c..9f9ade5 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/MouseEventTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/MouseEventTest.kt
@@ -35,10 +35,10 @@
import androidx.compose.ui.unit.dp
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
-import org.junit.Rule
-import org.junit.Test
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
+import org.junit.Rule
+import org.junit.Test
@MediumTest
@OptIn(ExperimentalTestApi::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/PointerInteropFilterAndroidViewOffsetsTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/PointerInteropFilterAndroidViewOffsetsTest.kt
index 849c2b9..877e911 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/PointerInteropFilterAndroidViewOffsetsTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/PointerInteropFilterAndroidViewOffsetsTest.kt
@@ -34,15 +34,15 @@
import androidx.compose.ui.viewinterop.AndroidView
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
import org.mockito.kotlin.clearInvocations
import org.mockito.kotlin.mock
import org.mockito.kotlin.never
import org.mockito.kotlin.times
import org.mockito.kotlin.verify
-import org.junit.Before
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
// Tests that pointer offsets are correct when a pointer is dispatched from Android through
// Compose and back into Android and each layer offsets the pointer during dispatch.
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/SuspendingPointerInputFilterTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/SuspendingPointerInputFilterTest.kt
index c521919..6a82429 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/SuspendingPointerInputFilterTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/SuspendingPointerInputFilterTest.kt
@@ -52,9 +52,9 @@
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Assert.fail
+import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import org.junit.Rule
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/AlignmentLineTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/AlignmentLineTest.kt
index b3b3736..5714cc7 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/AlignmentLineTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/AlignmentLineTest.kt
@@ -22,8 +22,8 @@
import androidx.compose.foundation.layout.requiredSize
import androidx.compose.foundation.layout.size
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.mutableStateMapOf
import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateMapOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
@@ -33,8 +33,8 @@
import androidx.compose.ui.unit.dp
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
-import org.junit.Assert.assertEquals
import kotlin.math.min
+import org.junit.Assert.assertEquals
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/LookaheadScopeTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/LookaheadScopeTest.kt
index 378d5b7..942c141 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/LookaheadScopeTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/LookaheadScopeTest.kt
@@ -196,7 +196,7 @@
Box(Modifier.fillMaxSize())
}[0].measure(constraints)
val size = placeable.run { IntSize(width, height) }
- if (this is SubcomposeIntermediateMeasureScope) {
+ if (!isLookingAhead) {
actualSize = size
} else {
actualTargetSize = size
@@ -589,30 +589,12 @@
@Test
fun defaultMeasurePolicyInSubcomposeLayout() {
- var actualLookaheadSize by mutableStateOf(IntSize.Zero)
var defaultIntermediateMeasureSize by mutableStateOf(IntSize.Zero)
rule.setContent {
CompositionLocalProvider(LocalDensity provides Density(1f)) {
LookaheadScope {
SubcomposeLayout(
Modifier
- .fillMaxSize()
- .requiredSize(200.dp),
- intermediateMeasurePolicy = { constraints ->
- measurablesForSlot(Unit)[0].measure(constraints)
- actualLookaheadSize = this.lookaheadSize
- layout(0, 0) {}
- }
- ) { constraints ->
- val placeable = subcompose(Unit) {
- Box(Modifier.requiredSize(400.dp, 600.dp))
- }[0].measure(constraints)
- layout(500, 300) {
- placeable.place(0, 0)
- }
- }
- SubcomposeLayout(
- Modifier
.size(150.dp)
.intermediateLayout { measurable, _ ->
measurable
@@ -636,7 +618,6 @@
}
}
rule.runOnIdle {
- assertEquals(IntSize(500, 300), actualLookaheadSize)
assertEquals(IntSize(500, 300), defaultIntermediateMeasureSize)
}
}
@@ -1719,12 +1700,18 @@
mutableStateListOf<Int>().apply { addAll(expectedPlacementOrder1) }
var iteration by mutableStateOf(0)
+ var lookaheadConstraints by mutableStateOf<Constraints?>(null)
// Expect the default placement to be the same as lookahead
rule.setContent {
LookaheadScope {
- SubcomposeLayout(
- intermediateMeasurePolicy = { lookaheadMeasurePolicy(lookaheadConstraints) }
- ) { constraints ->
+ SubcomposeLayout { incomingConstraints ->
+ val constraints = if (isLookingAhead) {
+ lookaheadConstraints = incomingConstraints
+ incomingConstraints
+ } else {
+ lookaheadConstraints!!
+ }
+
val placeables = mutableListOf<Placeable>()
repeat(3) { id ->
subcompose(id) {
@@ -1975,20 +1962,32 @@
}
SubcomposeLayout(
Modifier
- .fillMaxSize()
- .requiredSize(200.dp),
- intermediateMeasurePolicy = { constraints ->
- assertFalse(isLookingAhead)
- measurablesForSlot(Unit)[0].measure(constraints)
- layout(0, 0) {}
- }
+ .layout { measurable, constraints ->
+ measurable.measure(constraints).run {
+ if (isLookingAhead) {
+ assertEquals(500, width)
+ assertEquals(300, height)
+ } else {
+ assertEquals(100, width)
+ assertEquals(120, height)
+ }
+ layout(width, height) {
+ place(0, 0)
+ }
+ }
+ }
) { constraints ->
- assertTrue(isLookingAhead)
val placeable = subcompose(Unit) {
Box(Modifier.requiredSize(400.dp, 600.dp))
}[0].measure(constraints)
- layout(500, 300) {
- placeable.place(0, 0)
+ if (isLookingAhead) {
+ layout(500, 300) {
+ placeable.place(0, 0)
+ }
+ } else {
+ layout(100, 120) {
+ placeable.place(0, 0)
+ }
}
}
}
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/MeasureInPlacementTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/MeasureInPlacementTest.kt
index d272794..6f18534 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/MeasureInPlacementTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/MeasureInPlacementTest.kt
@@ -38,11 +38,11 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.TimeUnit
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.TimeUnit
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/OnSizeChangedTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/OnSizeChangedTest.kt
index b825a77..cadfde0 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/OnSizeChangedTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/OnSizeChangedTest.kt
@@ -35,6 +35,8 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import androidx.test.filters.SmallTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertNotEquals
@@ -43,8 +45,6 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/RootNodeLayoutTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/RootNodeLayoutTest.kt
index 26569b5..d850fd8 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/RootNodeLayoutTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/RootNodeLayoutTest.kt
@@ -27,6 +27,8 @@
import androidx.compose.ui.unit.Constraints
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotEquals
import org.junit.Assert.assertNotNull
@@ -35,8 +37,6 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/RtlLayoutTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/RtlLayoutTest.kt
index 038a111..37fe213 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/RtlLayoutTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/RtlLayoutTest.kt
@@ -43,6 +43,10 @@
import androidx.compose.ui.unit.dp
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import kotlin.math.abs
+import kotlin.math.roundToInt
import org.junit.Assert
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
@@ -50,10 +54,6 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
-import kotlin.math.abs
-import kotlin.math.roundToInt
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/node/HotReloadTests.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/node/HotReloadTests.kt
index b84b840..f9326295 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/node/HotReloadTests.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/node/HotReloadTests.kt
@@ -33,12 +33,12 @@
import androidx.compose.ui.test.onNodeWithTag
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Assert.assertTrue
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/node/ModelReadsTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/node/ModelReadsTest.kt
index 08c37a0..42dc17d 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/node/ModelReadsTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/node/ModelReadsTest.kt
@@ -32,6 +32,8 @@
import androidx.compose.ui.test.TestActivity
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
@@ -39,8 +41,6 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/owners/LifecycleOwnerInAppCompatActivityTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/owners/LifecycleOwnerInAppCompatActivityTest.kt
index 9bfe97c..6c8d88b 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/owners/LifecycleOwnerInAppCompatActivityTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/owners/LifecycleOwnerInAppCompatActivityTest.kt
@@ -23,14 +23,14 @@
import androidx.lifecycle.LifecycleOwner
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/owners/LifecycleOwnerInComponentActivityTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/owners/LifecycleOwnerInComponentActivityTest.kt
index 336d599..9d79d60 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/owners/LifecycleOwnerInComponentActivityTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/owners/LifecycleOwnerInComponentActivityTest.kt
@@ -23,14 +23,14 @@
import androidx.lifecycle.LifecycleOwner
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/owners/LifecycleOwnerInFragmentTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/owners/LifecycleOwnerInFragmentTest.kt
index 44fb3a0..497f8be 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/owners/LifecycleOwnerInFragmentTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/owners/LifecycleOwnerInFragmentTest.kt
@@ -29,14 +29,14 @@
import androidx.lifecycle.LifecycleOwner
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/owners/SavedStateRegistryOwnerInAppCompatActivityTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/owners/SavedStateRegistryOwnerInAppCompatActivityTest.kt
index 2594fa9..f548965 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/owners/SavedStateRegistryOwnerInAppCompatActivityTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/owners/SavedStateRegistryOwnerInAppCompatActivityTest.kt
@@ -23,14 +23,14 @@
import androidx.savedstate.SavedStateRegistryOwner
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/owners/SavedStateRegistryOwnerInComponentActivityTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/owners/SavedStateRegistryOwnerInComponentActivityTest.kt
index d78a893..648ac1d 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/owners/SavedStateRegistryOwnerInComponentActivityTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/owners/SavedStateRegistryOwnerInComponentActivityTest.kt
@@ -23,14 +23,14 @@
import androidx.savedstate.SavedStateRegistryOwner
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/owners/SavedStateRegistryOwnerInFragmentTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/owners/SavedStateRegistryOwnerInFragmentTest.kt
index 0a290e5..9f5f371 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/owners/SavedStateRegistryOwnerInFragmentTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/owners/SavedStateRegistryOwnerInFragmentTest.kt
@@ -28,14 +28,14 @@
import androidx.savedstate.findViewTreeSavedStateRegistryOwner
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/AndroidClipboardManagerTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/AndroidClipboardManagerTest.kt
index d9a4bc8..f35c3e2 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/AndroidClipboardManagerTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/AndroidClipboardManagerTest.kt
@@ -32,15 +32,14 @@
import androidx.compose.ui.text.style.TextGeometricTransform
import androidx.compose.ui.text.withStyle
import androidx.compose.ui.unit.sp
-
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
import com.google.common.truth.Truth.assertThat
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.whenever
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.whenever
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/AndroidViewCompatTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/AndroidViewCompatTest.kt
index 54db114..432b2fe 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/AndroidViewCompatTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/AndroidViewCompatTest.kt
@@ -94,11 +94,14 @@
import androidx.test.filters.MediumTest
import androidx.test.filters.SdkSuppress
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import junit.framework.TestCase.assertNotNull
-import org.hamcrest.CoreMatchers.`is`
+import kotlin.math.roundToInt
import org.hamcrest.CoreMatchers.allOf
import org.hamcrest.CoreMatchers.endsWith
import org.hamcrest.CoreMatchers.instanceOf
+import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.CoreMatchers.not
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
@@ -107,9 +110,6 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
-import kotlin.math.roundToInt
/**
* Testing the support for Android Views in Compose UI.
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/DepthSortedSetTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/DepthSortedSetTest.kt
index 3893b7b..7de34c5 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/DepthSortedSetTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/DepthSortedSetTest.kt
@@ -23,11 +23,11 @@
import androidx.compose.ui.node.add
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
-import org.mockito.kotlin.spy
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.kotlin.spy
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/DisposableSaveableStateRegistryTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/DisposableSaveableStateRegistryTest.kt
index e6e19a8..e5e4927 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/DisposableSaveableStateRegistryTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/DisposableSaveableStateRegistryTest.kt
@@ -34,12 +34,12 @@
import androidx.test.annotation.UiThreadTest
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
+import java.io.Serializable
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Test
import org.junit.runner.RunWith
-import java.io.Serializable
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/LayoutIdTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/LayoutIdTest.kt
index 81dbca9..6cc5157 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/LayoutIdTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/LayoutIdTest.kt
@@ -27,6 +27,8 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.After
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
@@ -34,8 +36,6 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/LocalSoftwareKeyboardControllerTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/LocalSoftwareKeyboardControllerTest.kt
index 0b6e22c..f3c9189 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/LocalSoftwareKeyboardControllerTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/LocalSoftwareKeyboardControllerTest.kt
@@ -31,13 +31,13 @@
import androidx.compose.ui.text.input.TextInputService
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
import org.mockito.kotlin.mock
import org.mockito.kotlin.never
import org.mockito.kotlin.times
import org.mockito.kotlin.verify
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
@ExperimentalComposeUiApi
@LargeTest
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/WindowInfoCompositionLocalTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/WindowInfoCompositionLocalTest.kt
index 8b828ae..2a2d199 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/WindowInfoCompositionLocalTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/WindowInfoCompositionLocalTest.kt
@@ -31,12 +31,12 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit.SECONDS
import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit.SECONDS
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/WindowRecomposerTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/WindowRecomposerTest.kt
index b4d9bbe..44ebf7c 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/WindowRecomposerTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/WindowRecomposerTest.kt
@@ -43,6 +43,8 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import androidx.test.filters.MediumTest
+import java.lang.ref.WeakReference
+import kotlin.coroutines.CoroutineContext
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.Dispatchers
@@ -62,8 +64,6 @@
import org.junit.Assert.fail
import org.junit.Test
import org.junit.runner.RunWith
-import java.lang.ref.WeakReference
-import kotlin.coroutines.CoroutineContext
@RunWith(AndroidJUnit4::class)
class WindowRecomposerTest {
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/WrapperTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/WrapperTest.kt
index c4f9bbc..f6d5329 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/WrapperTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/WrapperTest.kt
@@ -32,13 +32,13 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import androidx.test.filters.SdkSuppress
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@Composable private fun Recompose(body: @Composable (recompose: () -> Unit) -> Unit) {
val scope = currentRecomposeScope
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/res/StringResourcesTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/res/StringResourcesTest.kt
index 9751449..89b9648 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/res/StringResourcesTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/res/StringResourcesTest.kt
@@ -25,10 +25,10 @@
import androidx.test.filters.MediumTest
import androidx.test.platform.app.InstrumentationRegistry
import com.google.common.truth.Truth.assertThat
+import java.util.Locale
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.Locale
@RunWith(AndroidJUnit4::class)
@MediumTest
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/semantics/SemanticsTests.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/semantics/SemanticsTests.kt
index 2c1d8dd..d8504fad 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/semantics/SemanticsTests.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/semantics/SemanticsTests.kt
@@ -26,9 +26,12 @@
import androidx.compose.material.Surface
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.ReusableContent
import androidx.compose.runtime.Stable
+import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Rect
@@ -44,8 +47,8 @@
import androidx.compose.ui.test.SemanticsMatcher
import androidx.compose.ui.test.SemanticsNodeInteraction
import androidx.compose.ui.test.assert
-import androidx.compose.ui.test.assertCountEquals
import androidx.compose.ui.test.assertContentDescriptionEquals
+import androidx.compose.ui.test.assertCountEquals
import androidx.compose.ui.test.assertTextEquals
import androidx.compose.ui.test.assertValueEquals
import androidx.compose.ui.test.junit4.createComposeRule
@@ -62,14 +65,15 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
+import kotlin.math.max
import org.junit.After
import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNotEquals
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.math.max
@MediumTest
@RunWith(AndroidJUnit4::class)
@@ -953,6 +957,25 @@
.assertContentDescriptionEquals("hello world")
.assertTestPropertyEquals("bar")
}
+
+ @Test
+ fun testRegenerateSemanticsId() {
+ var reuseKey by mutableStateOf(0)
+ rule.setContent {
+ ReusableContent(reuseKey) {
+ Box(
+ Modifier.testTag(TestTag)
+ )
+ }
+ }
+ val oldId = rule.onNodeWithTag(TestTag).fetchSemanticsNode().id
+ rule.runOnIdle {
+ reuseKey = 1
+ }
+ val newId = rule.onNodeWithTag(TestTag).fetchSemanticsNode().id
+
+ assertNotEquals(oldId, newId)
+ }
}
private fun SemanticsNodeInteraction.assertDoesNotHaveProperty(property: SemanticsPropertyKey<*>) {
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/text/input/PlatformTextInputEditTextIntegrationTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/text/input/PlatformTextInputEditTextIntegrationTest.kt
index f8fdabb..706dc6d 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/text/input/PlatformTextInputEditTextIntegrationTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/text/input/PlatformTextInputEditTextIntegrationTest.kt
@@ -195,7 +195,7 @@
}
return@setSelection false
}
- performImeAction {
+ performImeAction(ImeAction.Go) {
editText.onEditorAction(ExpectedActionCode)
true
}
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/viewinterop/ComposeViewTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/viewinterop/ComposeViewTest.kt
index 0fe1ac4..8cef97d 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/viewinterop/ComposeViewTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/viewinterop/ComposeViewTest.kt
@@ -73,6 +73,9 @@
import androidx.test.filters.FlakyTest
import androidx.test.filters.MediumTest
import androidx.test.filters.SmallTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import kotlin.math.roundToInt
import org.hamcrest.CoreMatchers.instanceOf
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
@@ -83,9 +86,6 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
-import kotlin.math.roundToInt
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/DialogTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/DialogTest.kt
index b6579e5..1dec8ea 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/DialogTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/DialogTest.kt
@@ -45,12 +45,12 @@
import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
import androidx.test.uiautomator.UiDevice
import com.google.common.truth.Truth
+import kotlin.math.roundToInt
import org.junit.Assert.assertEquals
import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.math.roundToInt
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PopupAlignmentTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PopupAlignmentTest.kt
index 537c3fc..b9949ca 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PopupAlignmentTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PopupAlignmentTest.kt
@@ -26,8 +26,8 @@
import androidx.compose.ui.platform.LocalLayoutDirection
import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.test.junit4.createComposeRule
-import androidx.compose.ui.unit.IntRect
import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntRect
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.height
@@ -35,12 +35,12 @@
import androidx.test.espresso.matcher.BoundedMatcher
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.hamcrest.Description
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PopupDismissTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PopupDismissTest.kt
index fc01d13..edf32cd 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PopupDismissTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PopupDismissTest.kt
@@ -18,11 +18,11 @@
import android.os.Build
import android.view.View
-import androidx.compose.foundation.text.ClickableText
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.text.BasicText
+import androidx.compose.foundation.text.ClickableText
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
@@ -41,13 +41,13 @@
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.UiDevice
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Assume
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@LargeTest
@RunWith(Parameterized::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PopupLayoutTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PopupLayoutTest.kt
index 1183a84..bcd39c1 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PopupLayoutTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PopupLayoutTest.kt
@@ -34,10 +34,10 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
+import java.util.UUID
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.UUID
/**
* Tests for the internal [PopupLayout] view used by [Popup].
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PopupTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PopupTest.kt
index 252b19d..36d5ef1 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PopupTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PopupTest.kt
@@ -23,8 +23,8 @@
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.requiredHeight
-import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.requiredWidth
+import androidx.compose.foundation.layout.size
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.compositionLocalOf
import androidx.compose.runtime.getValue
@@ -64,15 +64,15 @@
import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
import androidx.test.uiautomator.UiDevice
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import kotlin.math.roundToInt
import org.hamcrest.CoreMatchers.instanceOf
import org.hamcrest.Description
import org.hamcrest.TypeSafeMatcher
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
-import kotlin.math.roundToInt
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PopupTestUtils.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PopupTestUtils.kt
index d37dd10..b6cbe5c 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PopupTestUtils.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PopupTestUtils.kt
@@ -34,11 +34,11 @@
import androidx.test.espresso.Espresso
import androidx.test.espresso.Root
import androidx.test.espresso.assertion.ViewAssertions
+import kotlin.math.max
import org.hamcrest.CoreMatchers
import org.hamcrest.Description
import org.hamcrest.Matcher
import org.hamcrest.TypeSafeMatcher
-import kotlin.math.max
// TODO(b/139861182): Remove all of this and provide helpers on rule
internal fun ComposeTestRule.popupMatches(popupTestTag: String, viewMatcher: Matcher<in View>) {
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PositionInWindowTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PositionInWindowTest.kt
index 5952258..960ddd4 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PositionInWindowTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PositionInWindowTest.kt
@@ -19,8 +19,8 @@
import android.view.ViewGroup
import androidx.activity.ComponentActivity
import androidx.compose.foundation.background
-import androidx.compose.foundation.gestures.awaitFirstDown
import androidx.compose.foundation.gestures.awaitEachGesture
+import androidx.compose.foundation.gestures.awaitFirstDown
import androidx.compose.foundation.gestures.drag
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
@@ -52,13 +52,13 @@
import androidx.test.filters.MediumTest
import androidx.test.filters.SdkSuppress
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/input/pointer/PointerIcon.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/input/pointer/PointerIcon.android.kt
index 054ec2b..c2c1350 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/input/pointer/PointerIcon.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/input/pointer/PointerIcon.android.kt
@@ -17,8 +17,8 @@
package androidx.compose.ui.input.pointer
import android.view.PointerIcon.TYPE_CROSSHAIR
-import android.view.PointerIcon.TYPE_HAND
import android.view.PointerIcon.TYPE_DEFAULT
+import android.view.PointerIcon.TYPE_HAND
import android.view.PointerIcon.TYPE_TEXT
internal class AndroidPointerIconType(val type: Int) :
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/input/pointer/PointerInteropFilter.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/input/pointer/PointerInteropFilter.android.kt
index 1508e04..8d5b474 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/input/pointer/PointerInteropFilter.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/input/pointer/PointerInteropFilter.android.kt
@@ -335,7 +335,10 @@
*
* Developers should use [pointerInput] to handle pointer input processing within Compose.
* [motionEventSpy] is only useful as part of Android View interoperability.
+ *
+ * If you need to handle and consume [MotionEvent]s, use [pointerInteropFilter].
*/
+@ExperimentalComposeUiApi
fun Modifier.motionEventSpy(watcher: (motionEvent: MotionEvent) -> Unit): Modifier =
this.pointerInput(watcher) {
interceptOutOfBoundsChildEvents = true
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeView.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeView.android.kt
index 087323c..553e319 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeView.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeView.android.kt
@@ -16,7 +16,6 @@
package androidx.compose.ui.platform
-import android.view.KeyEvent as AndroidKeyEvent
import android.annotation.SuppressLint
import android.content.Context
import android.content.res.Configuration
@@ -26,6 +25,7 @@
import android.os.SystemClock
import android.util.Log
import android.util.SparseArray
+import android.view.KeyEvent as AndroidKeyEvent
import android.view.MotionEvent
import android.view.MotionEvent.ACTION_CANCEL
import android.view.MotionEvent.ACTION_DOWN
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidUiDispatcher.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidUiDispatcher.android.kt
index 7dce6f5..387b2244 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidUiDispatcher.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidUiDispatcher.android.kt
@@ -20,10 +20,10 @@
import android.view.Choreographer
import androidx.compose.runtime.MonotonicFrameClock
import androidx.core.os.HandlerCompat
+import kotlin.coroutines.CoroutineContext
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.runBlocking
-import kotlin.coroutines.CoroutineContext
/**
* A [CoroutineDispatcher] that will perform dispatch during a [handler] callback or
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidUiFrameClock.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidUiFrameClock.android.kt
index a9fd7ed..1f96ec4 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidUiFrameClock.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidUiFrameClock.android.kt
@@ -17,9 +17,9 @@
package androidx.compose.ui.platform
import android.view.Choreographer
-import kotlinx.coroutines.suspendCancellableCoroutine
import kotlin.coroutines.ContinuationInterceptor
import kotlin.coroutines.coroutineContext
+import kotlinx.coroutines.suspendCancellableCoroutine
class AndroidUiFrameClock internal constructor(
val choreographer: Choreographer,
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/ComposeView.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/ComposeView.android.kt
index 0ec62b8..0b898b5 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/ComposeView.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/ComposeView.android.kt
@@ -30,9 +30,9 @@
import androidx.compose.ui.UiComposable
import androidx.compose.ui.node.InternalCoreApi
import androidx.compose.ui.node.Owner
-import androidx.lifecycle.findViewTreeLifecycleOwner
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
+import androidx.lifecycle.findViewTreeLifecycleOwner
import java.lang.ref.WeakReference
/**
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/GlobalSnapshotManager.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/GlobalSnapshotManager.android.kt
index 8663ca3..4dd7ef3 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/GlobalSnapshotManager.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/GlobalSnapshotManager.android.kt
@@ -18,11 +18,11 @@
import androidx.compose.runtime.snapshots.Snapshot
import androidx.compose.ui.platform.GlobalSnapshotManager.ensureStarted
+import java.util.concurrent.atomic.AtomicBoolean
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.channels.consumeEach
import kotlinx.coroutines.launch
-import java.util.concurrent.atomic.AtomicBoolean
/**
* Platform-specific mechanism for starting a monitor of global snapshot state writes
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/OutlineResolver.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/OutlineResolver.android.kt
index 6050279..090242b 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/OutlineResolver.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/OutlineResolver.android.kt
@@ -16,6 +16,7 @@
package androidx.compose.ui.platform
+import android.graphics.Outline as AndroidOutline
import android.os.Build
import androidx.compose.ui.geometry.CornerRadius
import androidx.compose.ui.geometry.Offset
@@ -32,7 +33,6 @@
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.LayoutDirection
import kotlin.math.roundToInt
-import android.graphics.Outline as AndroidOutline
/**
* Resolves the [AndroidOutline] from the [Shape] of an [OwnedLayer].
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/RenderNodeApi23.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/RenderNodeApi23.android.kt
index 8b27e39..681b0c5 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/RenderNodeApi23.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/RenderNodeApi23.android.kt
@@ -18,9 +18,9 @@
import android.graphics.Color
import android.graphics.Outline
-import android.view.RenderNode
-import android.view.DisplayListCanvas
import android.os.Build
+import android.view.DisplayListCanvas
+import android.view.RenderNode
import android.view.View
import androidx.annotation.RequiresApi
import androidx.compose.ui.graphics.Canvas
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/res/FontResources.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/res/FontResources.android.kt
index 58262b0..9203d2b 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/res/FontResources.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/res/FontResources.android.kt
@@ -21,10 +21,10 @@
import androidx.compose.runtime.Composable
import androidx.compose.runtime.ReadOnlyComposable
import androidx.compose.ui.platform.LocalContext
-import androidx.compose.ui.text.font.Typeface
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.LoadedFontFamily
import androidx.compose.ui.text.font.SystemFontFamily
+import androidx.compose.ui.text.font.Typeface
private val cacheLock = Object()
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/res/ImageResources.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/res/ImageResources.android.kt
index 5e7f956..e679a116 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/res/ImageResources.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/res/ImageResources.android.kt
@@ -17,14 +17,14 @@
package androidx.compose.ui.res
import android.content.res.Resources
+import android.graphics.drawable.BitmapDrawable
import android.util.TypedValue
import androidx.annotation.DrawableRes
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
-import androidx.compose.ui.platform.LocalContext
-import android.graphics.drawable.BitmapDrawable
import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.graphics.asImageBitmap
+import androidx.compose.ui.platform.LocalContext
/**
* Load an ImageBitmap from an image resource.
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/res/VectorResources.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/res/VectorResources.android.kt
index e484aff..136a23c 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/res/VectorResources.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/res/VectorResources.android.kt
@@ -31,8 +31,8 @@
import androidx.compose.ui.graphics.vector.compat.parseCurrentVectorNode
import androidx.compose.ui.graphics.vector.compat.seekToStartTag
import androidx.compose.ui.platform.LocalContext
-import org.xmlpull.v1.XmlPullParserException
import java.lang.ref.WeakReference
+import org.xmlpull.v1.XmlPullParserException
/**
* Load an ImageVector from a vector resource.
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/window/AndroidPopup.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/window/AndroidPopup.android.kt
index 75b727e8..08611787 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/window/AndroidPopup.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/window/AndroidPopup.android.kt
@@ -75,8 +75,8 @@
import androidx.compose.ui.unit.dp
import androidx.compose.ui.util.fastMap
import androidx.lifecycle.findViewTreeLifecycleOwner
-import androidx.lifecycle.setViewTreeLifecycleOwner
import androidx.lifecycle.findViewTreeViewModelStoreOwner
+import androidx.lifecycle.setViewTreeLifecycleOwner
import androidx.lifecycle.setViewTreeViewModelStoreOwner
import androidx.savedstate.findViewTreeSavedStateRegistryOwner
import androidx.savedstate.setViewTreeSavedStateRegistryOwner
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/Modifier.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/Modifier.kt
index 440914e..1868f44 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/Modifier.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/Modifier.kt
@@ -20,16 +20,32 @@
import androidx.compose.ui.internal.JvmDefaultWithCompatibility
import androidx.compose.ui.node.DelegatableNode
import androidx.compose.ui.node.DrawModifierNode
-import androidx.compose.ui.node.ObserverNodeOwnerScope
import androidx.compose.ui.node.NodeCoordinator
import androidx.compose.ui.node.NodeKind
+import androidx.compose.ui.node.ObserverNodeOwnerScope
import androidx.compose.ui.node.invalidateDraw
import androidx.compose.ui.node.requireOwner
+import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.cancel
/**
+ * Used in place of the standard Job cancellation pathway to avoid reflective
+ * javaClass.simpleName lookups to build the exception message and stack trace collection.
+ * Remove if these are changed in kotlinx.coroutines.
+ */
+private class ModifierNodeDetachedCancellationException : CancellationException(
+ "The Modifier.Node was detached"
+) {
+ override fun fillInStackTrace(): Throwable {
+ // Avoid null.clone() on Android <= 6.0 when accessing stackTrace
+ stackTrace = emptyArray()
+ return this
+ }
+}
+
+/**
* An ordered, immutable collection of [modifier elements][Modifier.Element] that decorate or add
* behavior to Compose UI elements. For example, backgrounds, padding and click event listeners
* decorate or add behavior to rows, text or buttons.
@@ -255,7 +271,7 @@
isAttached = false
scope?.let {
- it.cancel()
+ it.cancel(ModifierNodeDetachedCancellationException())
scope = null
}
}
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draw/DrawModifier.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draw/DrawModifier.kt
index 165c0fc..0408729 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draw/DrawModifier.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draw/DrawModifier.kt
@@ -22,8 +22,8 @@
import androidx.compose.ui.graphics.drawscope.ContentDrawScope
import androidx.compose.ui.graphics.drawscope.DrawScope
import androidx.compose.ui.internal.JvmDefaultWithCompatibility
-import androidx.compose.ui.node.DrawModifierNode
import androidx.compose.ui.node.CacheDrawModifierNode
+import androidx.compose.ui.node.DrawModifierNode
import androidx.compose.ui.node.ModifierNodeElement
import androidx.compose.ui.node.Nodes
import androidx.compose.ui.node.ObserverModifierNode
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draw/PainterModifier.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draw/PainterModifier.kt
index e4eaeb0..f251943 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draw/PainterModifier.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/draw/PainterModifier.kt
@@ -17,21 +17,21 @@
package androidx.compose.ui.draw
import androidx.compose.ui.Alignment
-import androidx.compose.ui.graphics.drawscope.ContentDrawScope
-import androidx.compose.ui.layout.MeasureScope
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.geometry.isSpecified
import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.graphics.DefaultAlpha
+import androidx.compose.ui.graphics.drawscope.ContentDrawScope
import androidx.compose.ui.graphics.drawscope.translate
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.layout.ContentScale
-import androidx.compose.ui.layout.times
import androidx.compose.ui.layout.IntrinsicMeasurable
import androidx.compose.ui.layout.IntrinsicMeasureScope
import androidx.compose.ui.layout.Measurable
import androidx.compose.ui.layout.MeasureResult
+import androidx.compose.ui.layout.MeasureScope
+import androidx.compose.ui.layout.times
import androidx.compose.ui.node.DrawModifierNode
import androidx.compose.ui.node.LayoutModifierNode
import androidx.compose.ui.node.ModifierNodeElement
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/GraphicsLayerScope.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/GraphicsLayerScope.kt
index 4241f32..783a2c3 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/GraphicsLayerScope.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/GraphicsLayerScope.kt
@@ -17,8 +17,8 @@
package androidx.compose.ui.graphics
import androidx.compose.ui.geometry.Size
-import androidx.compose.ui.unit.Density
import androidx.compose.ui.internal.JvmDefaultWithCompatibility
+import androidx.compose.ui.unit.Density
/**
* Default camera distance for all layers
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/Vector.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/Vector.kt
index 0e155ef..9c256c7 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/Vector.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/Vector.kt
@@ -24,6 +24,7 @@
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.ColorFilter
+import androidx.compose.ui.graphics.Matrix
import androidx.compose.ui.graphics.Path
import androidx.compose.ui.graphics.PathFillType
import androidx.compose.ui.graphics.PathMeasure
@@ -32,7 +33,6 @@
import androidx.compose.ui.graphics.drawscope.DrawScope
import androidx.compose.ui.graphics.drawscope.Stroke
import androidx.compose.ui.graphics.drawscope.withTransform
-import androidx.compose.ui.graphics.Matrix
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.util.fastForEach
import kotlin.math.ceil
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorPainter.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorPainter.kt
index 3963cc0..58b3cd3 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorPainter.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorPainter.kt
@@ -34,10 +34,10 @@
import androidx.compose.ui.graphics.drawscope.DrawScope
import androidx.compose.ui.graphics.drawscope.scale
import androidx.compose.ui.graphics.painter.Painter
+import androidx.compose.ui.internal.JvmDefaultWithCompatibility
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.LayoutDirection
-import androidx.compose.ui.internal.JvmDefaultWithCompatibility
/**
* Default identifier for the root group if a Vector graphic
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/PointerEvent.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/PointerEvent.kt
index b1671c9..7a6010a 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/PointerEvent.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/PointerEvent.kt
@@ -24,9 +24,9 @@
import androidx.compose.ui.input.pointer.PointerEventPass.Final
import androidx.compose.ui.input.pointer.PointerEventPass.Initial
import androidx.compose.ui.input.pointer.PointerEventPass.Main
+import androidx.compose.ui.internal.JvmDefaultWithCompatibility
import androidx.compose.ui.layout.LayoutCoordinates
import androidx.compose.ui.unit.IntSize
-import androidx.compose.ui.internal.JvmDefaultWithCompatibility
/**
* A [Modifier.Element] that can interact with pointer input.
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/SuspendingPointerInputFilter.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/SuspendingPointerInputFilter.kt
index eab488c..ddf5d9e 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/SuspendingPointerInputFilter.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/SuspendingPointerInputFilter.kt
@@ -20,6 +20,11 @@
import androidx.compose.ui.Modifier
import androidx.compose.ui.fastMapNotNull
import androidx.compose.ui.geometry.Size
+import androidx.compose.ui.internal.JvmDefaultWithCompatibility
+import androidx.compose.ui.node.ModifierNodeElement
+import androidx.compose.ui.node.PointerInputModifierNode
+import androidx.compose.ui.node.requireLayoutNode
+import androidx.compose.ui.platform.InspectorInfo
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.ViewConfiguration
import androidx.compose.ui.platform.synchronized
@@ -37,16 +42,11 @@
import kotlin.math.max
import kotlinx.coroutines.CancellableContinuation
import kotlinx.coroutines.CancellationException
+import kotlinx.coroutines.CoroutineStart
+import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.suspendCancellableCoroutine
-import androidx.compose.ui.internal.JvmDefaultWithCompatibility
-import androidx.compose.ui.node.ModifierNodeElement
-import androidx.compose.ui.node.PointerInputModifierNode
-import androidx.compose.ui.node.requireLayoutNode
-import androidx.compose.ui.platform.InspectorInfo
-import kotlinx.coroutines.CoroutineStart
-import kotlinx.coroutines.Job
/**
* Receiver scope for awaiting pointer events in a call to
@@ -497,7 +497,7 @@
override fun resetPointerInputHandler() {
val localJob = pointerInputJob
if (localJob != null) {
- localJob.cancel()
+ localJob.cancel(PointerInputResetException())
pointerInputJob = null
}
}
@@ -727,7 +727,7 @@
try {
return block()
} finally {
- job.cancel()
+ job.cancel(CancelTimeoutCancellationException)
}
}
}
@@ -739,4 +739,36 @@
*/
class PointerEventTimeoutCancellationException(
time: Long
-) : CancellationException("Timed out waiting for $time ms")
+) : CancellationException("Timed out waiting for $time ms") {
+ override fun fillInStackTrace(): Throwable {
+ // Avoid null.clone() on Android <= 6.0 when accessing stackTrace
+ stackTrace = emptyArray()
+ return this
+ }
+}
+
+/**
+ * Used in place of the standard Job cancellation pathway to avoid reflective
+ * javaClass.simpleName lookups to build the exception message and stack trace collection.
+ * Remove if these are changed in kotlinx.coroutines.
+ */
+private class PointerInputResetException : CancellationException("Pointer input was reset") {
+ override fun fillInStackTrace(): Throwable {
+ // Avoid null.clone() on Android <= 6.0 when accessing stackTrace
+ stackTrace = emptyArray()
+ return this
+ }
+}
+
+/**
+ * Also used in place of standard Job cancellation pathway; since we control this code path
+ * we shouldn't need to worry about other code calling addSuppressed on this exception
+ * so a singleton instance is used
+ */
+private object CancelTimeoutCancellationException : CancellationException() {
+ override fun fillInStackTrace(): Throwable {
+ // Avoid null.clone() on Android <= 6.0 when accessing stackTrace
+ stackTrace = emptyArray()
+ return this
+ }
+}
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/util/VelocityTracker.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/util/VelocityTracker.kt
index ea2846b..6d35f30 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/util/VelocityTracker.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/util/VelocityTracker.kt
@@ -160,6 +160,9 @@
private val reusableDataPointsArray = FloatArray(HistorySize)
private val reusableTimeArray = FloatArray(HistorySize)
+ // Reusable array to minimize allocations inside calculateLeastSquaresVelocity.
+ private val reusableVelocityCoefficients = FloatArray(3)
+
/**
* Adds a data point for velocity calculation at a given time, [timeMillis]. The data ponit
* represents an amount of a change in position (for differential data points), or an absolute
@@ -252,10 +255,16 @@
// The 2nd coefficient is the derivative of the quadratic polynomial at
// x = 0, and that happens to be the last timestamp that we end up
// passing to polyFitLeastSquares.
- try {
- return polyFitLeastSquares(time, dataPoints, sampleCount, 2)[1]
+ return try {
+ polyFitLeastSquares(
+ time,
+ dataPoints,
+ sampleCount,
+ 2,
+ reusableVelocityCoefficients
+ )[1]
} catch (exception: IllegalArgumentException) {
- return 0f
+ 0f
}
}
}
@@ -356,7 +365,8 @@
y: FloatArray,
/** number of items in each array */
sampleCount: Int,
- degree: Int
+ degree: Int,
+ coefficients: FloatArray = FloatArray((degree + 1).coerceAtLeast(0))
): FloatArray {
if (degree < 1) {
throw IllegalArgumentException("The degree must be at positive integer")
@@ -372,7 +382,6 @@
degree
}
- val coefficients = FloatArray(degree + 1)
// Shorthands for the purpose of notation equivalence to original C++ code.
val m: Int = sampleCount
val n: Int = truncatedDegree + 1
@@ -380,31 +389,34 @@
// Expand the X vector to a matrix A, pre-multiplied by the weights.
val a = Matrix(n, m)
for (h in 0 until m) {
- a.set(0, h, DefaultWeight)
+ a[0, h] = DefaultWeight
for (i in 1 until n) {
- a.set(i, h, a.get(i - 1, h) * x[h])
+ a[i, h] = a[i - 1, h] * x[h]
}
}
// Apply the Gram-Schmidt process to A to obtain its QR decomposition.
- // Orthonormal basis, column-major ordVectorer.
+ // Orthonormal basis, column-major order.
val q = Matrix(n, m)
// Upper triangular matrix, row-major order.
val r = Matrix(n, n)
for (j in 0 until n) {
+ val w = q[j]
+ val aw = a[j]
for (h in 0 until m) {
- q.set(j, h, a.get(j, h))
+ w[h] = aw[h]
}
for (i in 0 until j) {
- val dot: Float = q.getRow(j) * q.getRow(i)
+ val z = q[i]
+ val dot = w.dot(z)
for (h in 0 until m) {
- q.set(j, h, q.get(j, h) - dot * q.get(i, h))
+ w[h] -= dot * z[h]
}
}
- val norm: Float = q.getRow(j).norm()
- if (norm < 0.000001) {
+ val norm: Float = w.norm()
+ if (norm < 0.000001f) {
// TODO(b/129494471): Determine what this actually means and see if there are
// alternatives to throwing an Exception here.
@@ -417,25 +429,37 @@
val inverseNorm: Float = 1.0f / norm
for (h in 0 until m) {
- q.set(j, h, q.get(j, h) * inverseNorm)
+ w[h] *= inverseNorm
}
+ val v = r[j]
for (i in 0 until n) {
- r.set(j, i, if (i < j) 0.0f else q.getRow(j) * a.getRow(i))
+ v[i] = if (i < j) 0.0f else w.dot(a[i])
}
}
// Solve R B = Qt W Y to find B. This is easy because R is upper triangular.
// We just work from bottom-right to top-left calculating B's coefficients.
- val wy = Vector(m)
- for (h in 0 until m) {
- wy[h] = y[h] * DefaultWeight
- }
- for (i in n - 1 downTo 0) {
- coefficients[i] = q.getRow(i) * wy
- for (j in n - 1 downTo i + 1) {
- coefficients[i] -= r.get(i, j) * coefficients[j]
+ var wy = y
+
+ // NOTE: DefaultWeight is currently always set to 1.0f, there's no need to allocate a new
+ // array and to perform several multiplications for no reason
+ @Suppress("KotlinConstantConditions")
+ if (DefaultWeight != 1.0f) {
+ // TODO: Even when we pass the test above, this allocation is likely unnecessary.
+ // We could just modify wy (y) in place instead. This would need to be documented
+ // to avoid surprises for the caller though.
+ wy = FloatArray(m)
+ for (h in 0 until m) {
+ wy[h] = y[h] * DefaultWeight
}
- coefficients[i] /= r.get(i, i)
+ }
+
+ for (i in n - 1 downTo 0) {
+ coefficients[i] = q[i].dot(wy)
+ for (j in n - 1 downTo i + 1) {
+ coefficients[i] -= r[i, j] * coefficients[j]
+ }
+ coefficients[i] /= r[i, i]
}
return coefficients
@@ -561,44 +585,33 @@
* Kinetic Energy = 0.5 * mass * (velocity)^2
* where a mass of "1" is used.
*/
-private fun kineticEnergyToVelocity(kineticEnergy: Float): Float {
+@Suppress("NOTHING_TO_INLINE")
+private inline fun kineticEnergyToVelocity(kineticEnergy: Float): Float {
return sign(kineticEnergy) * sqrt(2 * abs(kineticEnergy))
}
-private class Vector(
- val length: Int
-) {
- val elements: FloatArray = FloatArray(length)
+private typealias Vector = FloatArray
- operator fun get(i: Int) = elements[i]
-
- operator fun set(i: Int, value: Float) {
- elements[i] = value
+private fun FloatArray.dot(a: FloatArray): Float {
+ var result = 0.0f
+ for (i in indices) {
+ result += this[i] * a[i]
}
-
- operator fun times(a: Vector): Float {
- var result = 0.0f
- for (i in 0 until length) {
- result += this[i] * a[i]
- }
- return result
- }
-
- fun norm(): Float = sqrt(this * this)
+ return result
}
-private class Matrix(rows: Int, cols: Int) {
- private val elements: Array<Vector> = Array(rows) { Vector(cols) }
+@Suppress("NOTHING_TO_INLINE")
+private inline fun FloatArray.norm(): Float = sqrt(this.dot(this))
- fun get(row: Int, col: Int): Float {
- return elements[row][col]
- }
+private typealias Matrix = Array<FloatArray>
- fun set(row: Int, col: Int, value: Float) {
- elements[row][col] = value
- }
+@Suppress("NOTHING_TO_INLINE")
+private inline fun Matrix(rows: Int, cols: Int) = Array(rows) { Vector(cols) }
- fun getRow(row: Int): Vector {
- return elements[row]
- }
-}
\ No newline at end of file
+@Suppress("NOTHING_TO_INLINE")
+private inline operator fun Matrix.get(row: Int, col: Int): Float = this[row][col]
+
+@Suppress("NOTHING_TO_INLINE")
+private inline operator fun Matrix.set(row: Int, col: Int, value: Float) {
+ this[row][col] = value
+}
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/LayoutCoordinates.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/LayoutCoordinates.kt
index 83d9751..af49d34 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/LayoutCoordinates.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/LayoutCoordinates.kt
@@ -19,9 +19,9 @@
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Rect
import androidx.compose.ui.graphics.Matrix
+import androidx.compose.ui.internal.JvmDefaultWithCompatibility
import androidx.compose.ui.node.NodeCoordinator
import androidx.compose.ui.unit.IntSize
-import androidx.compose.ui.internal.JvmDefaultWithCompatibility
/**
* A holder of the measured bounds for the layout (MeasureBox).
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/MeasurePolicy.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/MeasurePolicy.kt
index 64dcbe3..7b10ef0 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/MeasurePolicy.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/MeasurePolicy.kt
@@ -17,11 +17,11 @@
package androidx.compose.ui.layout
import androidx.compose.runtime.Stable
-import androidx.compose.ui.unit.Constraints
-import androidx.compose.ui.util.fastMap
import androidx.compose.ui.internal.JvmDefaultWithCompatibility
import androidx.compose.ui.layout.RootMeasurePolicy.measure
import androidx.compose.ui.layout.RootMeasurePolicy.minIntrinsicWidth
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.util.fastMap
/**
* Defines the measure and layout behavior of a [Layout]. [Layout] and [MeasurePolicy] are the way
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/MeasureScope.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/MeasureScope.kt
index eaef98e1d..a01db10 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/MeasureScope.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/MeasureScope.kt
@@ -16,8 +16,8 @@
package androidx.compose.ui.layout
-import androidx.compose.ui.node.LookaheadCapablePlaceable
import androidx.compose.ui.internal.JvmDefaultWithCompatibility
+import androidx.compose.ui.node.LookaheadCapablePlaceable
/**
* The receiver scope of a layout's measure lambda. The return value of the
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/OnRemeasuredModifier.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/OnRemeasuredModifier.kt
index 9da5ab4..6ebe14f 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/OnRemeasuredModifier.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/OnRemeasuredModifier.kt
@@ -19,11 +19,11 @@
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.Stable
import androidx.compose.ui.Modifier
+import androidx.compose.ui.internal.JvmDefaultWithCompatibility
import androidx.compose.ui.platform.InspectorInfo
import androidx.compose.ui.platform.InspectorValueInfo
import androidx.compose.ui.platform.debugInspectorInfo
import androidx.compose.ui.unit.IntSize
-import androidx.compose.ui.internal.JvmDefaultWithCompatibility
/**
* Invoked with the size of the modified Compose UI element when the element is first measured or
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/ParentDataModifier.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/ParentDataModifier.kt
index c319547..9811bae 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/ParentDataModifier.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/ParentDataModifier.kt
@@ -17,8 +17,8 @@
package androidx.compose.ui.layout
import androidx.compose.ui.Modifier
-import androidx.compose.ui.unit.Density
import androidx.compose.ui.internal.JvmDefaultWithCompatibility
+import androidx.compose.ui.unit.Density
/**
* A [Modifier] that provides data to the parent [Layout]. This can be read from within the
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/Placeable.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/Placeable.kt
index 99301bd..94893a6 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/Placeable.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/Placeable.kt
@@ -18,8 +18,8 @@
import androidx.compose.ui.graphics.GraphicsLayerScope
import androidx.compose.ui.node.LayoutNodeLayoutDelegate
-import androidx.compose.ui.node.NodeCoordinator
import androidx.compose.ui.node.LookaheadCapablePlaceable
+import androidx.compose.ui.node.NodeCoordinator
import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.IntSize
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/SubcomposeLayout.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/SubcomposeLayout.kt
index d95d81b..619812e 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/SubcomposeLayout.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/SubcomposeLayout.kt
@@ -44,7 +44,6 @@
import androidx.compose.ui.node.requireOwner
import androidx.compose.ui.platform.createSubcomposition
import androidx.compose.ui.unit.Constraints
-import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.LayoutDirection
/**
@@ -83,155 +82,6 @@
* for example to use the values calculated during the measurement as params for the composition
* of the children.
*
- * When in a [LookaheadScope], [SubcomposeLayout] will be measured up to twice per frame.
- * The two measurements will be using different measure policies and potentially different
- * constraints.
- *
- * The first measurement happens in the lookahead pass, where new layout is calculated based on
- * the target constraints. Therefore, [measurePolicy] will receive the target constraints, and
- * subcompose its content based on the target constraints. Note: Target constraints refers to
- * the constraints that the [SubcomposeLayout] will receive once all the lookahead-based
- * animations on size/constraints in the ancestor layouts have finished.
- *
- * The second measurement is done in the intermediate measure pass after the lookahead pass.
- * The intermediate measure pass allows adjustments to the measurement/placement using the
- * pre-calculated layout information as animation targets to smooth over any
- * any layout changes. In this measurement, [intermediateMeasurePolicy] will be invoked with
- * the intermediate/animating constraints. By default, [measurePolicy] will be invoked in
- * [intermediateMeasurePolicy], and hence the same measure logic in [measurePolicy] with
- * intermediate constraints will be used to measure and layout children in the intermediate
- * pass.
- *
- * Note: When [measurePolicy] is invoked in the intermediate pass, `subcompose` will simply
- * return the measurables associated with the given slot id based on the subcomposition during
- * lookahead pass. This means if a given slot id has not been subcomposed in the lookahead pass,
- * invoking subcompose during intermediate pass will result in an empty list.
- *
- * Possible use cases:
- * * You need to know the constraints passed by the parent during the composition and can't solve
- * your use case with just custom [Layout] or [LayoutModifier].
- * See [androidx.compose.foundation.layout.BoxWithConstraints].
- * * You want to use the size of one child during the composition of the second child.
- * * You want to compose your items lazily based on the available size. For example you have a
- * list of 100 items and instead of composing all of them you only compose the ones which are
- * currently visible(say 5 of them) and compose next items when the component is scrolled.
- *
- * @sample androidx.compose.ui.samples.SubcomposeLayoutWithIntermediateMeasurePolicySample
- *
- * @param modifier [Modifier] to apply for the layout.
- * @param intermediateMeasurePolicy A measure policy that will be invoked during the intermediate
- * measure pass.
- * @param measurePolicy Measure policy which provides ability to subcompose during the measuring.
- */
-@ExperimentalComposeUiApi
-@Composable
-fun SubcomposeLayout(
- modifier: Modifier = Modifier,
- intermediateMeasurePolicy:
- (SubcomposeIntermediateMeasureScope.(Constraints) -> MeasureResult) = { constraints ->
- lookaheadMeasurePolicy(constraints)
- },
- measurePolicy: SubcomposeMeasureScope.(Constraints) -> MeasureResult
-) {
- SubcomposeLayout(
- state = remember { SubcomposeLayoutState() },
- modifier = modifier,
- intermediateMeasurePolicy = intermediateMeasurePolicy,
- measurePolicy = measurePolicy
- )
-}
-
-/**
- * [SubcomposeIntermediateMeasureScope] is the receiver scope for the intermediate measurer policy
- * that gets invoked during the intermediate measure pass.
- *
- * When in a [LookaheadScope], [SubcomposeLayout] will be measured up to twice per frame.
- * The two measurements will be using different measure policies and potentially different
- * constraints.
- *
- * The first measurement happens in the lookahead pass, where new layout is calculated based on
- * the target constraints. Therefore, measurePolicy will receive the target constraints, and
- * subcompose its content based on the target constraints. Note: Target constraints refers to
- * the constraints that the [SubcomposeLayout] will receive once all the lookahead-based
- * animations on size/constraints in the ancestor layouts have finished.
- *
- * The second measurement is done in the intermediate measure pass after the lookahead pass.
- * The intermediate measure pass allows adjustments to the measurement/placement using the
- * pre-calculated layout information as animation targets to smooth over any
- * any layout changes. In this measurement, intermediateMeasurePolicy will be invoked with
- * the intermediate/animating constraints. By default, measure policy will be invoked in
- * intermediateMeasurePolicy, and hence the same measure logic in measurePolicy with
- * intermediate constraints will be used to measure and layout children in the intermediate
- * pass.
- *
- * Note: When measurePolicy is invoked in [SubcomposeIntermediateMeasureScope], `subcompose` will
- * simply retrieve the measurables associated with the given slot id based on the subcomposition
- * during lookahead pass. This means if a given slot id has not been subcomposed in the lookahead
- * pass, invoking subcompose during intermediate pass will result in an empty list.
- *
- * @sample androidx.compose.ui.samples.SubcomposeLayoutWithIntermediateMeasurePolicySample
- */
-@ExperimentalComposeUiApi
-sealed interface SubcomposeIntermediateMeasureScope : SubcomposeMeasureScope {
- /**
- * Returns the list of measureables associated with [slotId] that was subcomposed in the
- * [SubcomposeLayout]'s measurePolicy block during the lookahead pass. If the given [slotId]
- * was not used in the subcomoposition, the returned list will be empty.
- */
- fun measurablesForSlot(slotId: Any?): List<Measurable>
-
- /**
- * The size returned in the [MeasureResult] by the measurePolicy invoked during lookahead pass.
- */
- val lookaheadSize: IntSize
-
- /**
- * This is the measure policy that is supplied to SubcomposeLayout in the measurePolicy
- * parameter. It is used in the lookahead pass, and it is also invoked by default in the
- * intermediateMeasurePolicy for the intermediate measure pass.
- *
- * During the intermediate pass, the [lookaheadMeasurePolicy] will receive potentially
- * different (i.e. animating) constraints, and will subsequently remeasure and replace
- * all children according to the new constraints.
- *
- * Note: Intermediate measure pass will NOT run **new** subcompositions. [subcompose]
- * calls in from the [lookaheadMeasurePolicy] in this pass will instead retrieve the measurables
- * for the given slot based on the subcomposition from lookahead pass. In the rare
- * case where slots are subcomposed conditionally dependent on constraints, it's recommended
- * to provide to [SubcomposeLayout] a custom intermediate measure policy. A less desirable
- * solution to this use case is to invoke [lookaheadMeasurePolicy] with [lookaheadConstraints]
- * as its parameter, which will skip any intermediate stages straight to the lookahead
- * sizes & positions.
- */
- val lookaheadMeasurePolicy: SubcomposeMeasureScope.(Constraints) -> MeasureResult
-
- /**
- * Returns the [Constraints] used in the lookahead pass.
- *
- * Note: Using this with [lookaheadMeasurePolicy] will effectively skip any intermediate stages
- * from lookahead-based layout animations. Therefore it is recommended to use [Constraints]
- * passed to intermediate measure policy to measure and layout children during intermediate
- * pass. The only exception to that should be when some of the subcompositions are conditional.
- * In that case, a custom intermediate measure policy should ideally be provided to
- * [SubcomposeLayout]. Using [lookaheadConstraints] with [lookaheadMeasurePolicy] should be
- * considered as the last resort.
- */
- val lookaheadConstraints: Constraints
-
- /**
- * This function retrieves [Measurable]s created for [slotId] based on
- * the subcomposition that happened in the lookahead pass. If [slotId] was not subcomposed
- * in the lookahead pass, [subcompose] will return an [emptyList].
- */
- override fun subcompose(slotId: Any?, content: @Composable () -> Unit): List<Measurable> =
- measurablesForSlot(slotId)
-}
-
-/**
- * Analogue of [Layout] which allows to subcompose the actual content during the measuring stage
- * for example to use the values calculated during the measurement as params for the composition
- * of the children.
- *
* Possible use cases:
* * You need to know the constraints passed by the parent during the composition and can't solve
* your use case with just custom [Layout] or [LayoutModifier].
@@ -254,66 +104,6 @@
modifier: Modifier = Modifier,
measurePolicy: SubcomposeMeasureScope.(Constraints) -> MeasureResult
) {
- @OptIn(ExperimentalComposeUiApi::class)
- SubcomposeLayout(state, modifier, { lookaheadMeasurePolicy(it) }, measurePolicy)
-}
-
-/**
- * Analogue of [Layout] which allows to subcompose the actual content during the measuring stage
- * for example to use the values calculated during the measurement as params for the composition
- * of the children.
- *
- * When in a [LookaheadScope], [SubcomposeLayout] will be measured up to twice per frame.
- * The two measurements will be using different measure policies and potentially different
- * constraints.
- *
- * The first measurement happens in the lookahead pass, where new layout is calculated based on
- * the target constraints. Therefore, [measurePolicy] will receive the target constraints, and
- * subcompose its content based on the target constraints. Note: Target constraints refers to
- * the constraints that the [SubcomposeLayout] will receive once all the lookahead-based
- * animations on size/constraints in the ancestor layouts have finished.
- *
- * The second measurement is done in the intermediate measure pass after the lookahead pass.
- * The intermediate measure pass allows adjustments to the measurement/placement using the
- * pre-calculated layout information as animation targets to smooth over any
- * any layout changes. In this measurement, [intermediateMeasurePolicy] will be invoked with
- * the intermediate/animating constraints. By default, [measurePolicy] will be invoked in
- * [intermediateMeasurePolicy], and hence the same measure logic in [measurePolicy] with
- * intermediate constraints will be used to measure and layout children in the intermediate
- * pass.
- *
- * Note: When [measurePolicy] is invoked in the intermediate pass, `subcompose` will simply
- * return the measurables associated with the given slot id based on the subcomposition during
- * lookahead pass. This means if a given slot id has not been subcomposed in the lookahead pass,
- * invoking subcompose during intermediate pass will result in an empty list.
- *
- * Possible use cases:
- * * You need to know the constraints passed by the parent during the composition and can't solve
- * your use case with just custom [Layout] or [LayoutModifier].
- * See [androidx.compose.foundation.layout.BoxWithConstraints].
- * * You want to use the size of one child during the composition of the second child.
- * * You want to compose your items lazily based on the available size. For example you have a
- * list of 100 items and instead of composing all of them you only compose the ones which are
- * currently visible(say 5 of them) and compose next items when the component is scrolled.
- *
- * @param state the state object to be used by the layout.
- * @param modifier [Modifier] to apply for the layout.
- * @param intermediateMeasurePolicy A measure policy that will be invoked during the intermediate
- * measure pass.
- * @param measurePolicy Measure policy which provides ability to subcompose during the measuring.
- */
-@Composable
-@UiComposable
-@ExperimentalComposeUiApi
-fun SubcomposeLayout(
- state: SubcomposeLayoutState,
- modifier: Modifier = Modifier,
- intermediateMeasurePolicy:
- (SubcomposeIntermediateMeasureScope.(Constraints) -> MeasureResult) = { constraints ->
- lookaheadMeasurePolicy(constraints)
- },
- measurePolicy: SubcomposeMeasureScope.(Constraints) -> MeasureResult
-) {
val compositionContext = rememberCompositionContext()
val materialized = currentComposer.materialize(modifier)
val localMap = currentComposer.currentCompositionLocalMap
@@ -323,10 +113,6 @@
set(state, state.setRoot)
set(compositionContext, state.setCompositionContext)
set(measurePolicy, state.setMeasurePolicy)
- set(
- intermediateMeasurePolicy,
- state.setIntermediateMeasurePolicy
- )
set(localMap, ComposeUiNode.SetResolvedCompositionLocals)
set(materialized, ComposeUiNode.SetModifier)
}
@@ -359,6 +145,11 @@
* used during the previous measuring.
* @param content the composable content which defines the slot. It could emit multiple
* layouts, in this case the returned list of [Measurable]s will have multiple elements.
+ * **Note:** When a [SubcomposeLayout] is in a [LookaheadScope], the subcomposition only
+ * happens during the lookahead pass. In the post-lookahead/main pass, [subcompose] will
+ * return the list of [Measurable]s that were subcomposed during the lookahead pass. If the
+ * structure of the subtree emitted from [content] is dependent on incoming constraints,
+ * consider using constraints received from the lookahead pass for both passes.
*/
fun subcompose(slotId: Any?, content: @Composable () -> Unit): List<Measurable>
}
@@ -368,7 +159,6 @@
*
* [slotReusePolicy] the policy defining what slots should be retained to be reused later.
*/
-@OptIn(ExperimentalComposeUiApi::class)
class SubcomposeLayoutState(
private val slotReusePolicy: SubcomposeSlotReusePolicy
) {
@@ -396,16 +186,6 @@
SubcomposeSlotReusePolicy(maxSlotsToRetainForReuse)
)
- /**
- * Returns whether the [SubcomposeLayout] is in a [LookaheadScope]. Intermediate measure policy
- * will be only invoked when in a [LookaheadScope].
- */
- @Suppress("OPT_IN_MARKER_ON_WRONG_TARGET")
- @get:ExperimentalComposeUiApi
- @ExperimentalComposeUiApi
- val isInLookaheadScope: Boolean
- get() = state.isInLookaheadScope
-
private var _state: LayoutNodeSubcompositionsState? = null
private val state: LayoutNodeSubcompositionsState
get() = requireNotNull(_state) {
@@ -428,10 +208,6 @@
LayoutNode.((SubcomposeMeasureScope.(Constraints) -> MeasureResult)) -> Unit =
{ measurePolicy = state.createMeasurePolicy(it) }
- internal val setIntermediateMeasurePolicy:
- LayoutNode.(SubcomposeIntermediateMeasureScope.(Constraints) -> MeasureResult) -> Unit =
- { state.intermediateMeasurePolicy = it }
-
/**
* Composes the content for the given [slotId]. This makes the next scope.subcompose(slotId)
* call during the measure pass faster as the content is already composed.
@@ -601,18 +377,8 @@
// this map contains active slotIds (without precomposed or reusable nodes)
private val slotIdToNode = mutableMapOf<Any?, LayoutNode>()
private val scope = Scope()
- private val intermediateMeasureScope = IntermediateMeasureScopeImpl()
+ private val postLookaheadMeasureScope = PostLookaheadMeasureScopeImpl()
- /**
- * This is the intermediateMeasurePolicy that developers set in [SubcomposeLayout]. It defaults
- * to invoking [SubcomposeIntermediateMeasureScope.lookaheadMeasurePolicy].
- *
- * Note: This intermediate measure policy is only invoked when in a [LookaheadScope].
- */
- internal var intermediateMeasurePolicy:
- (SubcomposeIntermediateMeasureScope.(Constraints) -> MeasureResult) = {
- lookaheadMeasurePolicy(it)
- }
private val precomposeMap = mutableMapOf<Any?, LayoutNode>()
private val reusableSlotIdsSet = SubcomposeSlotReusePolicy.SlotIdsSet()
@@ -840,7 +606,6 @@
fun createMeasurePolicy(
block: SubcomposeMeasureScope.(Constraints) -> MeasureResult
): MeasurePolicy {
- intermediateMeasureScope.lookaheadMeasurePolicy = block
return object : LayoutNode.NoIntrinsicsMeasurePolicy(error = NoIntrinsicsMessage) {
override fun MeasureScope.measure(
measurables: List<Measurable>,
@@ -849,17 +614,14 @@
scope.layoutDirection = layoutDirection
scope.density = density
scope.fontScale = fontScale
- val isIntermediate =
- (root.layoutState == LayoutState.Measuring ||
- root.layoutState == LayoutState.LayingOut) && root.lookaheadRoot != null
- if (isIntermediate) {
- return intermediateMeasurePolicy.invoke(intermediateMeasureScope, constraints)
+ if (!isLookingAhead && root.lookaheadRoot != null) {
+ return with(postLookaheadMeasureScope) {
+ block(constraints)
+ }
} else {
currentIndex = 0
- intermediateMeasureScope.lookaheadConstraints = constraints
val result = scope.block(constraints)
val indexAfterMeasure = currentIndex
- intermediateMeasureScope.lookaheadSize = IntSize(result.width, result.height)
return object : MeasureResult {
override val width: Int
get() = result.width
@@ -1008,19 +770,15 @@
[email protected](slotId, content)
}
- private inner class IntermediateMeasureScopeImpl :
- SubcomposeIntermediateMeasureScope, MeasureScope by scope {
- override fun measurablesForSlot(slotId: Any?): List<Measurable> =
- slotIdToNode[slotId]?.childMeasurables ?: emptyList()
-
+ private inner class PostLookaheadMeasureScopeImpl :
+ SubcomposeMeasureScope, MeasureScope by scope {
/**
- * This is the size returned in the MeasureResult in the measure policy from the lookahead
- * pass.
+ * This function retrieves [Measurable]s created for [slotId] based on
+ * the subcomposition that happened in the lookahead pass. If [slotId] was not subcomposed
+ * in the lookahead pass, [subcompose] will return an [emptyList].
*/
- override var lookaheadSize: IntSize = IntSize.Zero
- override lateinit var lookaheadMeasurePolicy:
- SubcomposeMeasureScope.(Constraints) -> MeasureResult
- override var lookaheadConstraints: Constraints = Constraints()
+ override fun subcompose(slotId: Any?, content: @Composable () -> Unit): List<Measurable> =
+ slotIdToNode[slotId]?.childMeasurables ?: emptyList()
}
}
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/modifier/ModifierLocalConsumer.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/modifier/ModifierLocalConsumer.kt
index eea668b..cb2ad69 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/modifier/ModifierLocalConsumer.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/modifier/ModifierLocalConsumer.kt
@@ -19,10 +19,10 @@
import androidx.compose.runtime.Stable
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
+import androidx.compose.ui.internal.JvmDefaultWithCompatibility
import androidx.compose.ui.platform.InspectorInfo
import androidx.compose.ui.platform.InspectorValueInfo
import androidx.compose.ui.platform.debugInspectorInfo
-import androidx.compose.ui.internal.JvmDefaultWithCompatibility
/**
* A Modifier that can be used to consume [ModifierLocal]s that were provided by other modifiers to
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/modifier/ModifierLocalProvider.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/modifier/ModifierLocalProvider.kt
index 7a38447..b689b69 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/modifier/ModifierLocalProvider.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/modifier/ModifierLocalProvider.kt
@@ -21,9 +21,9 @@
import androidx.compose.runtime.getValue
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
+import androidx.compose.ui.internal.JvmDefaultWithCompatibility
import androidx.compose.ui.platform.InspectorValueInfo
import androidx.compose.ui.platform.debugInspectorInfo
-import androidx.compose.ui.internal.JvmDefaultWithCompatibility
/**
* A Modifier that can be used to provide [ModifierLocal]s that can be read by other modifiers to
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/CompositionLocalConsumerModifierNode.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/CompositionLocalConsumerModifierNode.kt
index d87ed28..2d6f733 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/CompositionLocalConsumerModifierNode.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/CompositionLocalConsumerModifierNode.kt
@@ -17,6 +17,7 @@
package androidx.compose.ui.node
import androidx.compose.runtime.CompositionLocal
+import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.Modifier
/**
@@ -37,34 +38,39 @@
* Returns the current value of [local] at the position in the composition hierarchy of this
* modifier's attached layout node.
*
- * CompositionLocals should only be read with [currentValueOf] during the main phase of your
- * modifier's operations. This main phase of a modifier is defined as the timeframe of your Modifier
- * after it has been [attached][Modifier.Node.onAttach] and before it is
- * [detached][Modifier.Node.onDetach]. The main phase is when you will receive calls to your
- * modifier's primary hooks like [DrawModifierNode.draw], [LayoutModifierNode.measure],
- * [PointerInputModifierNode.onPointerEvent], etc. Every callback of a modifier that influences the
- * composable and is called after `onAttach()` and before `onDetach()` is considered part of the
- * main phase.
- *
* Unlike [CompositionLocal.current], reads via this function are not automatically tracked by
* Compose. Modifiers are not able to recompose in the same way that a Composable can, and therefore
* can't receive updates arbitrarily for a CompositionLocal.
*
- * Avoid reading CompositionLocals in [onAttach()][Modifier.Node.onAttach] and
- * [onDetach()][Modifier.Node.onDetach]. These lifecycle callbacks only happen once, meaning that
- * any reads in a lifecycle event will yield the value of the CompositionLocal as it was during the
- * event, and then never again. This can lead to Modifiers using stale CompositionLocal values and
- * unexpected behaviors in the UI.
+ * Because CompositionLocals may change arbitrarily, it is strongly recommended to ensure that
+ * the composition local is observed instead of being read once. If you call [currentValueOf]
+ * inside of a modifier callback like [LayoutModifierNode.measure] or [DrawModifierNode.draw],
+ * then Compose will track the CompositionLocal read. This happens automatically, because these
+ * Compose UI phases take place in a snapshot observer that tracks which states are read. If the
+ * value of the CompositionLocal changes, and it was read inside of the measure or draw phase,
+ * then that phase will automatically be invalidated.
+ *
+ * For all other reads of a CompositionLocal, this function will **not** notify you when the
+ * value of the local changes. [Modifier.Node] classes that also implement [ObserverModifierNode]
+ * may observe CompositionLocals arbitrarily by performing the lookup in an [observeReads] block.
+ * To continue observing values of the CompositionLocal, it must be read again in an [observeReads]
+ * block during or after the [ObserverModifierNode.onObservedReadsChanged] callback is invoked. See
+ * below for an example of how to implement this observation pattern.
+ *
+ * @sample androidx.compose.ui.samples.CompositionLocalConsumingModifierObserverNodeSample
*
* This function will fail with an [IllegalStateException] if you attempt to read a CompositionLocal
* before the node is [attached][Modifier.Node.onAttach] or after the node is
* [detached][Modifier.Node.onDetach].
+ *
+ * @param local The CompositionLocal to get the current value of
+ * @return The value provided by the nearest [CompositionLocalProvider] component that
+ * invokes, directly or indirectly, the composable function that this modifier is attached to.
+ * If [local] was never provided, its default value will be returned instead.
*/
fun <T> CompositionLocalConsumerModifierNode.currentValueOf(local: CompositionLocal<T>): T {
check(node.isAttached) {
- "Cannot read CompositionLocal because the Modifier node is not currently attached. Make " +
- "sure to only invoke currentValueOf() in the main phase of your modifier. See " +
- "currentValueOf()'s documentation for more information."
+ "Cannot read CompositionLocal because the Modifier node is not currently attached."
}
return requireLayoutNode().compositionLocalMap[local]
}
\ No newline at end of file
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutNode.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutNode.kt
index aa215e9..574419a 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutNode.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutNode.kt
@@ -82,7 +82,7 @@
// subcompose multiple times into the same LayoutNode and define offsets.
private val isVirtual: Boolean = false,
// The unique semantics ID that is used by all semantics modifiers attached to this LayoutNode.
- override val semanticsId: Int = generateSemanticsId()
+ override var semanticsId: Int = generateSemanticsId()
) : ComposeNodeLifecycleCallback,
Remeasurement,
OwnerScope,
@@ -1321,6 +1321,7 @@
}
// resetModifierState detaches all nodes, so we need to re-attach them upon reuse.
nodes.attach()
+ semanticsId = generateSemanticsId()
}
override fun onDeactivate() {
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/platform/InfiniteAnimationPolicy.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/platform/InfiniteAnimationPolicy.kt
index b3fb83c..25b5cd5 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/platform/InfiniteAnimationPolicy.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/platform/InfiniteAnimationPolicy.kt
@@ -17,9 +17,9 @@
package androidx.compose.ui.platform
import androidx.compose.runtime.withFrameNanos
+import androidx.compose.ui.internal.JvmDefaultWithCompatibility
import kotlin.coroutines.CoroutineContext
import kotlin.coroutines.coroutineContext
-import androidx.compose.ui.internal.JvmDefaultWithCompatibility
/**
* Provides a policy that will be applied to animations that get their frame time from
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/platform/ShapeContainingUtil.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/platform/ShapeContainingUtil.kt
index 25b3abb..d52279c 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/platform/ShapeContainingUtil.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/platform/ShapeContainingUtil.kt
@@ -17,9 +17,9 @@
package androidx.compose.ui.platform
import androidx.compose.ui.geometry.CornerRadius
-import androidx.compose.ui.graphics.Outline
import androidx.compose.ui.geometry.Rect
import androidx.compose.ui.geometry.RoundRect
+import androidx.compose.ui.graphics.Outline
import androidx.compose.ui.graphics.Path
import androidx.compose.ui.graphics.PathOperation
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/platform/ViewConfiguration.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/platform/ViewConfiguration.kt
index c7445f7..d74db18 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/platform/ViewConfiguration.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/platform/ViewConfiguration.kt
@@ -16,9 +16,9 @@
package androidx.compose.ui.platform
+import androidx.compose.ui.internal.JvmDefaultWithCompatibility
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp
-import androidx.compose.ui.internal.JvmDefaultWithCompatibility
/**
* Contains methods to standard constants used in the UI for timeouts, sizes, and distances.
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsProperties.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsProperties.kt
index bf84d72..41096b6 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsProperties.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsProperties.kt
@@ -211,7 +211,7 @@
val TextSelectionRange = SemanticsPropertyKey<TextRange>("TextSelectionRange")
/**
- * @see SemanticsPropertyReceiver.imeAction
+ * @see SemanticsPropertyReceiver.performImeAction
*/
val ImeAction = SemanticsPropertyKey<ImeAction>("ImeAction")
@@ -929,6 +929,9 @@
* A node that specifies an action should also specify a callback to perform the action via
* [performImeAction].
*/
+@Deprecated("Pass the ImeAction to performImeAction instead.")
+@get:Deprecated("Pass the ImeAction to performImeAction instead.")
+@set:Deprecated("Pass the ImeAction to performImeAction instead.")
var SemanticsPropertyReceiver.imeAction by SemanticsProperties.ImeAction
/**
@@ -1108,20 +1111,24 @@
}
/**
- * Action to invoke the IME action handler configured on the node.
+ * Action to invoke the IME action handler configured on the node, as well as specify the type of
+ * IME action provided by the node.
*
* Expected to be used on editable text fields.
*
- * A node that specifies an action callback should also report what IME action it will perform via
- * the [imeAction] property.
- *
+ * @param imeActionType The IME type, such as [ImeAction.Next] or [ImeAction.Search]
* @param label Optional label for this action.
* @param action Action to be performed when [SemanticsActions.PerformImeAction] is called.
+ *
+ * @see SemanticsProperties.ImeAction
+ * @see SemanticsActions.PerformImeAction
*/
fun SemanticsPropertyReceiver.performImeAction(
+ imeActionType: ImeAction,
label: String? = null,
action: (() -> Boolean)?
) {
+ this[SemanticsProperties.ImeAction] = imeActionType
this[SemanticsActions.PerformImeAction] = AccessibilityAction(label, action)
}
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/window/Popup.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/window/Popup.kt
index e1b79a2..e68401c 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/window/Popup.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/window/Popup.kt
@@ -18,8 +18,8 @@
import androidx.compose.runtime.Immutable
import androidx.compose.ui.Alignment
-import androidx.compose.ui.unit.IntRect
import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntRect
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.height
diff --git a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/awt/ComposeDialog.desktop.kt b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/awt/ComposeDialog.desktop.kt
index a4816ed..373e218 100644
--- a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/awt/ComposeDialog.desktop.kt
+++ b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/awt/ComposeDialog.desktop.kt
@@ -19,13 +19,13 @@
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.input.key.KeyEvent
import androidx.compose.ui.window.DialogWindowScope
-import org.jetbrains.skiko.GraphicsApi
import java.awt.Component
import java.awt.Window
import java.awt.event.MouseListener
import java.awt.event.MouseMotionListener
import java.awt.event.MouseWheelListener
import javax.swing.JDialog
+import org.jetbrains.skiko.GraphicsApi
/**
* ComposeDialog is a dialog for building UI using Compose for Desktop.
diff --git a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/awt/ComposeLayer.desktop.kt b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/awt/ComposeLayer.desktop.kt
index 59f4f89..a246312 100644
--- a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/awt/ComposeLayer.desktop.kt
+++ b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/awt/ComposeLayer.desktop.kt
@@ -17,26 +17,22 @@
package androidx.compose.ui.awt
import androidx.compose.runtime.Composable
+import androidx.compose.ui.ComposeScene
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.geometry.Offset
-import androidx.compose.ui.input.pointer.PointerEventType
-import androidx.compose.ui.input.pointer.PointerType
-import androidx.compose.ui.platform.PlatformComponent
-import androidx.compose.ui.ComposeScene
+import androidx.compose.ui.input.key.KeyEvent as ComposeKeyEvent
import androidx.compose.ui.input.pointer.PointerButtons
+import androidx.compose.ui.input.pointer.PointerEventType
import androidx.compose.ui.input.pointer.PointerKeyboardModifiers
-import androidx.compose.ui.platform.DesktopPlatform
+import androidx.compose.ui.input.pointer.PointerType
import androidx.compose.ui.platform.AccessibilityControllerImpl
+import androidx.compose.ui.platform.DesktopPlatform
+import androidx.compose.ui.platform.PlatformComponent
import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.Density
import androidx.compose.ui.window.density
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.swing.Swing
-import org.jetbrains.skia.Canvas
-import org.jetbrains.skiko.SkiaLayer
-import org.jetbrains.skiko.SkikoView
-import java.awt.Cursor
import java.awt.Component
+import java.awt.Cursor
import java.awt.Dimension
import java.awt.Graphics
import java.awt.Point
@@ -54,7 +50,11 @@
import java.awt.im.InputMethodRequests
import javax.accessibility.Accessible
import javax.accessibility.AccessibleContext
-import androidx.compose.ui.input.key.KeyEvent as ComposeKeyEvent
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.swing.Swing
+import org.jetbrains.skia.Canvas
+import org.jetbrains.skiko.SkiaLayer
+import org.jetbrains.skiko.SkikoView
internal class ComposeLayer {
private var isDisposed = false
diff --git a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/awt/ComposePanel.desktop.kt b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/awt/ComposePanel.desktop.kt
index a9c1dbb..18a78ff 100644
--- a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/awt/ComposePanel.desktop.kt
+++ b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/awt/ComposePanel.desktop.kt
@@ -17,13 +17,13 @@
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
-import org.jetbrains.skiko.ClipComponent
-import org.jetbrains.skiko.GraphicsApi
import java.awt.Color
import java.awt.Component
import java.awt.Dimension
import javax.swing.JLayeredPane
import javax.swing.SwingUtilities.isEventDispatchThread
+import org.jetbrains.skiko.ClipComponent
+import org.jetbrains.skiko.GraphicsApi
/**
* ComposePanel is a panel for building UI using Compose for Desktop.
diff --git a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/awt/ComposeWindow.desktop.kt b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/awt/ComposeWindow.desktop.kt
index 235f530..95e8140 100644
--- a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/awt/ComposeWindow.desktop.kt
+++ b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/awt/ComposeWindow.desktop.kt
@@ -20,13 +20,13 @@
import androidx.compose.ui.input.key.KeyEvent
import androidx.compose.ui.window.FrameWindowScope
import androidx.compose.ui.window.WindowPlacement
-import org.jetbrains.skiko.GraphicsApi
import java.awt.Component
import java.awt.GraphicsConfiguration
import java.awt.event.MouseListener
import java.awt.event.MouseMotionListener
import java.awt.event.MouseWheelListener
import javax.swing.JFrame
+import org.jetbrains.skiko.GraphicsApi
/**
* ComposeWindow is a window for building UI using Compose for Desktop.
diff --git a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/awt/ComposeWindowDelegate.desktop.kt b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/awt/ComposeWindowDelegate.desktop.kt
index bb2dbb1..349923f 100644
--- a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/awt/ComposeWindowDelegate.desktop.kt
+++ b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/awt/ComposeWindowDelegate.desktop.kt
@@ -21,11 +21,6 @@
import androidx.compose.ui.input.key.KeyEvent
import androidx.compose.ui.window.LocalWindow
import androidx.compose.ui.window.UndecoratedWindowResizer
-import org.jetbrains.skiko.ClipComponent
-import org.jetbrains.skiko.GraphicsApi
-import org.jetbrains.skiko.OS
-import org.jetbrains.skiko.SkiaLayer
-import org.jetbrains.skiko.hostOs
import java.awt.Color
import java.awt.Component
import java.awt.Window
@@ -33,6 +28,11 @@
import java.awt.event.MouseMotionListener
import java.awt.event.MouseWheelListener
import javax.swing.JLayeredPane
+import org.jetbrains.skiko.ClipComponent
+import org.jetbrains.skiko.GraphicsApi
+import org.jetbrains.skiko.OS
+import org.jetbrains.skiko.SkiaLayer
+import org.jetbrains.skiko.hostOs
internal class ComposeWindowDelegate(
private val window: Window,
diff --git a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/input/key/Key.desktop.kt b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/input/key/Key.desktop.kt
index bc20dca..cfe17cd 100644
--- a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/input/key/Key.desktop.kt
+++ b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/input/key/Key.desktop.kt
@@ -17,12 +17,12 @@
package androidx.compose.ui.input.key
import androidx.compose.ui.input.key.Key.Companion.Number
+import androidx.compose.ui.util.unpackInt1
import java.awt.event.KeyEvent
import java.awt.event.KeyEvent.KEY_LOCATION_LEFT
import java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD
import java.awt.event.KeyEvent.KEY_LOCATION_RIGHT
import java.awt.event.KeyEvent.KEY_LOCATION_STANDARD
-import androidx.compose.ui.util.unpackInt1
// TODO(demin): implement most of key codes
diff --git a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/platform/ComposeAccessible.kt b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/platform/ComposeAccessible.kt
index 53a47e7..f8aea9b 100644
--- a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/platform/ComposeAccessible.kt
+++ b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/platform/ComposeAccessible.kt
@@ -19,8 +19,8 @@
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Rect
-import androidx.compose.ui.node.requireCoordinator
import androidx.compose.ui.node.Nodes
+import androidx.compose.ui.node.requireCoordinator
import androidx.compose.ui.semantics.AccessibilityAction
import androidx.compose.ui.semantics.Role
import androidx.compose.ui.semantics.SemanticsActions
diff --git a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/platform/GlobalSnapshotManager.desktop.kt b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/platform/GlobalSnapshotManager.desktop.kt
index 1786f77..0faafcf 100644
--- a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/platform/GlobalSnapshotManager.desktop.kt
+++ b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/platform/GlobalSnapshotManager.desktop.kt
@@ -18,13 +18,13 @@
import androidx.compose.runtime.snapshots.Snapshot
import androidx.compose.ui.platform.GlobalSnapshotManager.ensureStarted
+import java.util.concurrent.atomic.AtomicBoolean
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.channels.consumeEach
import kotlinx.coroutines.launch
import kotlinx.coroutines.swing.Swing
-import java.util.concurrent.atomic.AtomicBoolean
/**
* Platform-specific mechanism for starting a monitor of global snapshot state writes
diff --git a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/platform/TestComposeWindow.desktop.kt b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/platform/TestComposeWindow.desktop.kt
index eea1038..bc88383 100644
--- a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/platform/TestComposeWindow.desktop.kt
+++ b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/platform/TestComposeWindow.desktop.kt
@@ -32,18 +32,18 @@
import androidx.compose.ui.node.RootForTest
import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.Density
-import kotlinx.coroutines.CoroutineDispatcher
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Job
-import kotlinx.coroutines.cancel
-import org.jetbrains.skia.Surface
-import org.jetbrains.skiko.FrameDispatcher
import java.awt.Component
import java.awt.event.MouseWheelEvent
import kotlin.coroutines.CoroutineContext
import kotlin.math.abs
import kotlin.math.roundToInt
import kotlin.math.sign
+import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.cancel
+import org.jetbrains.skia.Surface
+import org.jetbrains.skiko.FrameDispatcher
@PublishedApi
internal val EmptyDispatcher = object : CoroutineDispatcher() {
diff --git a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/res/DesktopSvgResources.desktop.kt b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/res/DesktopSvgResources.desktop.kt
index 1e33a0f..5413fa0 100644
--- a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/res/DesktopSvgResources.desktop.kt
+++ b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/res/DesktopSvgResources.desktop.kt
@@ -27,6 +27,8 @@
import androidx.compose.ui.graphics.vector.DrawCache
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.IntSize
+import java.io.InputStream
+import kotlin.math.ceil
import org.jetbrains.skia.Data
import org.jetbrains.skia.Rect
import org.jetbrains.skia.svg.SVGDOM
@@ -34,8 +36,6 @@
import org.jetbrains.skia.svg.SVGLengthUnit
import org.jetbrains.skia.svg.SVGPreserveAspectRatio
import org.jetbrains.skia.svg.SVGPreserveAspectRatioAlign
-import java.io.InputStream
-import kotlin.math.ceil
/**
* Synchronously load an SVG image from some [inputStream].
diff --git a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/res/DesktopXmlVectorResources.desktop.kt b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/res/DesktopXmlVectorResources.desktop.kt
index 9768f21..bfc4781 100644
--- a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/res/DesktopXmlVectorResources.desktop.kt
+++ b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/res/DesktopXmlVectorResources.desktop.kt
@@ -19,8 +19,8 @@
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.vector.parseVectorRoot
import androidx.compose.ui.unit.Density
-import org.xml.sax.InputSource
import javax.xml.parsers.DocumentBuilderFactory
+import org.xml.sax.InputSource
/**
* Synchronously load an xml vector image from some [inputSource].
diff --git a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/res/ImageResources.desktop.kt b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/res/ImageResources.desktop.kt
index 948938e..e862143 100644
--- a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/res/ImageResources.desktop.kt
+++ b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/res/ImageResources.desktop.kt
@@ -18,8 +18,8 @@
import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.graphics.toComposeImageBitmap
-import org.jetbrains.skia.Image
import java.io.InputStream
+import org.jetbrains.skia.Image
/**
* Load and decode [ImageBitmap] from the given [inputStream]. [inputStream] should contain encoded
diff --git a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/res/PainterResources.desktop.kt b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/res/PainterResources.desktop.kt
index 4890aed..410f0d6 100644
--- a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/res/PainterResources.desktop.kt
+++ b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/res/PainterResources.desktop.kt
@@ -17,8 +17,8 @@
package androidx.compose.ui.res
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.remember
import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.remember
import androidx.compose.ui.graphics.painter.BitmapPainter
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.graphics.vector.rememberVectorPainter
diff --git a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/res/vector/DesktopXmlVectorParser.desktop.kt b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/res/vector/DesktopXmlVectorParser.desktop.kt
index 9340c9e..c326802 100644
--- a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/res/vector/DesktopXmlVectorParser.desktop.kt
+++ b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/res/vector/DesktopXmlVectorParser.desktop.kt
@@ -17,8 +17,8 @@
package androidx.compose.ui.res.vector
import androidx.compose.ui.geometry.Offset
-import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Brush
+import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.PathFillType
import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.graphics.StrokeCap
@@ -36,9 +36,9 @@
import androidx.compose.ui.graphics.vector.addPathNodes
import androidx.compose.ui.res.vector.BuildContext.Group
import androidx.compose.ui.unit.Density
+import java.util.LinkedList
import org.w3c.dom.Element
import org.w3c.dom.Node
-import java.util.LinkedList
// Parsing logic is the same as in Android implementation
// (compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.kt)
diff --git a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/util/Windows.desktop.kt b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/util/Windows.desktop.kt
index c3e807c..a50f886 100644
--- a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/util/Windows.desktop.kt
+++ b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/util/Windows.desktop.kt
@@ -19,8 +19,8 @@
import androidx.compose.ui.Alignment
import androidx.compose.ui.awt.ComposeWindow
import androidx.compose.ui.geometry.Size
-import androidx.compose.ui.graphics.toAwtImage
import androidx.compose.ui.graphics.painter.Painter
+import androidx.compose.ui.graphics.toAwtImage
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.LayoutDirection
diff --git a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/window/Application.desktop.kt b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/window/Application.desktop.kt
index b4bc684..80d3f69 100644
--- a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/window/Application.desktop.kt
+++ b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/window/Application.desktop.kt
@@ -35,6 +35,7 @@
import androidx.compose.ui.configureSwingGlobalsForCompose
import androidx.compose.ui.platform.GlobalSnapshotManager
import androidx.compose.ui.platform.LocalDensity
+import java.awt.Window
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
@@ -43,7 +44,6 @@
import kotlinx.coroutines.swing.Swing
import kotlinx.coroutines.withContext
import kotlinx.coroutines.yield
-import java.awt.Window
/**
* An entry point for the Compose application. See [awaitApplication] for more information.
diff --git a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/window/AwtWindow.desktop.kt b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/window/AwtWindow.desktop.kt
index d5d32eb..2b96713 100644
--- a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/window/AwtWindow.desktop.kt
+++ b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/window/AwtWindow.desktop.kt
@@ -25,13 +25,13 @@
import androidx.compose.ui.node.Ref
import androidx.compose.ui.util.UpdateEffect
import androidx.compose.ui.util.makeDisplayable
+import java.awt.Window
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
import kotlinx.coroutines.swing.Swing
-import java.awt.Window
/**
* Compose [Window] obtained from [create]. The [create] block will be called
diff --git a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/window/DesktopPopup.desktop.kt b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/window/DesktopPopup.desktop.kt
index 7934126..17abbcd 100644
--- a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/window/DesktopPopup.desktop.kt
+++ b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/window/DesktopPopup.desktop.kt
@@ -31,8 +31,8 @@
import androidx.compose.ui.input.key.KeyEvent
import androidx.compose.ui.layout.Layout
import androidx.compose.ui.layout.onGloballyPositioned
-import androidx.compose.ui.platform.SkiaBasedOwner
import androidx.compose.ui.platform.LocalDensity
+import androidx.compose.ui.platform.SkiaBasedOwner
import androidx.compose.ui.platform.setContent
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.DpOffset
diff --git a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/window/LocalWindow.kt b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/window/LocalWindow.kt
index 3b8921b..4208152 100644
--- a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/window/LocalWindow.kt
+++ b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/window/LocalWindow.kt
@@ -16,10 +16,10 @@
package androidx.compose.ui.window
+import androidx.compose.runtime.compositionLocalOf
import androidx.compose.ui.awt.ComposeDialog
import androidx.compose.ui.awt.ComposePanel
import androidx.compose.ui.awt.ComposeWindow
-import androidx.compose.runtime.compositionLocalOf
import java.awt.Window
/**
diff --git a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/window/Tray.desktop.kt b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/window/Tray.desktop.kt
index 642f0e2..f0987df 100644
--- a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/window/Tray.desktop.kt
+++ b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/window/Tray.desktop.kt
@@ -28,14 +28,14 @@
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.graphics.toAwtImage
import androidx.compose.ui.platform.DesktopPlatform
+import java.awt.PopupMenu
+import java.awt.SystemTray
+import java.awt.TrayIcon
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.receiveAsFlow
-import java.awt.PopupMenu
-import java.awt.SystemTray
-import java.awt.TrayIcon
// In fact, this size doesn't affect anything on Windows/Linux, because they request what they
// need, and not what we provide. It only affects macOs. This size will be scaled in asAwtImage to
diff --git a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/ComposeSceneTest.kt b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/ComposeSceneTest.kt
index fbc3334..485c67e 100644
--- a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/ComposeSceneTest.kt
+++ b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/ComposeSceneTest.kt
@@ -61,21 +61,21 @@
import androidx.compose.ui.input.pointer.PointerKeyboardModifiers
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.layout.Layout
-import androidx.compose.ui.test.InternalTestApi
import androidx.compose.ui.platform.renderingTest
+import androidx.compose.ui.test.InternalTestApi
import androidx.compose.ui.test.junit4.DesktopScreenshotTestRule
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onRoot
import androidx.compose.ui.test.performKeyPress
import androidx.compose.ui.unit.dp
import com.google.common.truth.Truth.assertThat
+import java.awt.event.KeyEvent
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertFalse
+import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
-import java.awt.event.KeyEvent
-import org.junit.Ignore
@OptIn(InternalTestApi::class, ExperimentalComposeUiApi::class)
class ComposeSceneTest {
diff --git a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/awt/ComposePanelTest.kt b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/awt/ComposePanelTest.kt
index 371a453..66ac55a 100644
--- a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/awt/ComposePanelTest.kt
+++ b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/awt/ComposePanelTest.kt
@@ -24,14 +24,14 @@
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.density
import com.google.common.truth.Truth.assertThat
+import java.awt.Dimension
+import java.awt.GraphicsEnvironment
+import javax.swing.JFrame
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.swing.Swing
import org.junit.Assume
import org.junit.Test
-import java.awt.Dimension
-import java.awt.GraphicsEnvironment
-import javax.swing.JFrame
class ComposePanelTest {
@Test
diff --git a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/input/key/KeyInputUtil.kt b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/input/key/KeyInputUtil.kt
index ca8ba74..043b142 100644
--- a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/input/key/KeyInputUtil.kt
+++ b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/input/key/KeyInputUtil.kt
@@ -17,11 +17,11 @@
package androidx.compose.ui.input.key
import java.awt.Component
+import java.awt.event.KeyEvent as KeyEventAwt
import java.awt.event.KeyEvent.KEY_PRESSED
import java.awt.event.KeyEvent.KEY_RELEASED
import java.awt.event.KeyEvent.KEY_TYPED
import java.awt.event.KeyEvent.VK_UNDEFINED
-import java.awt.event.KeyEvent as KeyEventAwt
private object DummyComponent : Component()
/**
diff --git a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/input/pointer/PointerIconTest.kt b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/input/pointer/PointerIconTest.kt
index c586bfe..a4c7cbb 100644
--- a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/input/pointer/PointerIconTest.kt
+++ b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/input/pointer/PointerIconTest.kt
@@ -25,10 +25,10 @@
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.dp
import com.google.common.truth.Truth.assertThat
+import java.awt.Cursor
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import java.awt.Cursor
@RunWith(JUnit4::class)
class PointerIconTest {
diff --git a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/AccessibilityTest.kt b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/AccessibilityTest.kt
index 712be2d..4ae3e53 100644
--- a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/AccessibilityTest.kt
+++ b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/AccessibilityTest.kt
@@ -20,12 +20,12 @@
import androidx.compose.ui.Modifier
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onNodeWithTag
+import javax.accessibility.AccessibleText
import org.junit.Assert.assertEquals
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import javax.accessibility.AccessibleText
@RunWith(JUnit4::class)
class AccessibilityTest {
diff --git a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/DesktopInputComponentTest.kt b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/DesktopInputComponentTest.kt
index 9bc4693..2ffaeea 100644
--- a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/DesktopInputComponentTest.kt
+++ b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/DesktopInputComponentTest.kt
@@ -23,14 +23,14 @@
import androidx.compose.ui.text.input.ImeOptions
import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.text.input.TextInputService
+import java.awt.Component
+import java.awt.event.InputMethodEvent
+import java.text.AttributedString
import org.junit.Assert
import org.junit.Assume.assumeTrue
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import java.awt.Component
-import java.awt.event.InputMethodEvent
-import java.text.AttributedString
private object DummyComponent : Component()
diff --git a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/FlushCoroutineDispatcherTest.kt b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/FlushCoroutineDispatcherTest.kt
index 55900fc..b784f0d 100644
--- a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/FlushCoroutineDispatcherTest.kt
+++ b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/FlushCoroutineDispatcherTest.kt
@@ -16,6 +16,7 @@
package androidx.compose.ui.platform
+import kotlin.random.Random
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -26,7 +27,6 @@
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Test
-import kotlin.random.Random
@OptIn(ExperimentalCoroutinesApi::class, DelicateCoroutinesApi::class)
class FlushCoroutineDispatcherTest {
diff --git a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/RenderingTestScope.kt b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/RenderingTestScope.kt
index dbc107b..81cc28a 100644
--- a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/RenderingTestScope.kt
+++ b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/RenderingTestScope.kt
@@ -23,6 +23,7 @@
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.Density
+import kotlin.coroutines.CoroutineContext
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.runBlocking
@@ -31,7 +32,6 @@
import org.jetbrains.skia.Canvas
import org.jetbrains.skia.Surface
import org.jetbrains.skiko.FrameDispatcher
-import kotlin.coroutines.CoroutineContext
internal fun renderingTest(
width: Int,
diff --git a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/SkiaLayerTest.kt b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/SkiaLayerTest.kt
index af4ba78..2556f82 100644
--- a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/SkiaLayerTest.kt
+++ b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/platform/SkiaLayerTest.kt
@@ -31,14 +31,14 @@
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.round
+import kotlin.math.PI
+import kotlin.math.cos
+import kotlin.math.roundToInt
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Rule
import org.junit.Test
-import kotlin.math.PI
-import kotlin.math.cos
-import kotlin.math.roundToInt
class SkiaLayerTest {
@get:Rule
diff --git a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/window/ApplicationTest.kt b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/window/ApplicationTest.kt
index 9a5f7c9..95cb554 100644
--- a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/window/ApplicationTest.kt
+++ b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/window/ApplicationTest.kt
@@ -23,8 +23,8 @@
import androidx.compose.runtime.ExperimentalComposeApi
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.MonotonicFrameClock
-import androidx.compose.runtime.monotonicFrameClock
import androidx.compose.runtime.getValue
+import androidx.compose.runtime.monotonicFrameClock
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.ExperimentalComposeUiApi
diff --git a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/window/MenuBarTest.kt b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/window/MenuBarTest.kt
index e03ef3d..40d329b 100644
--- a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/window/MenuBarTest.kt
+++ b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/window/MenuBarTest.kt
@@ -26,10 +26,10 @@
import androidx.compose.ui.readFirstPixel
import androidx.compose.ui.testImage
import com.google.common.truth.Truth.assertThat
-import org.junit.Test
import javax.swing.JCheckBoxMenuItem
import javax.swing.JRadioButtonMenuItem
import javax.swing.JSeparator
+import org.junit.Test
@OptIn(ExperimentalComposeUiApi::class)
class MenuBarTest {
diff --git a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/window/TestUtils.kt b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/window/TestUtils.kt
index d339947..427bda9 100644
--- a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/window/TestUtils.kt
+++ b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/window/TestUtils.kt
@@ -21,6 +21,7 @@
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.runtime.snapshots.Snapshot
+import java.awt.GraphicsEnvironment
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -33,7 +34,6 @@
import kotlinx.coroutines.withTimeout
import kotlinx.coroutines.yield
import org.junit.Assume.assumeFalse
-import java.awt.GraphicsEnvironment
import org.junit.Assume.assumeTrue
@OptIn(ExperimentalCoroutinesApi::class)
diff --git a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/window/dialog/DialogTest.kt b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/window/dialog/DialogTest.kt
index 7f1f30f..5009c3e 100644
--- a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/window/dialog/DialogTest.kt
+++ b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/window/dialog/DialogTest.kt
@@ -48,11 +48,11 @@
import androidx.compose.ui.window.rememberDialogState
import androidx.compose.ui.window.runApplicationTest
import com.google.common.truth.Truth.assertThat
-import org.junit.Test
import java.awt.Dimension
import java.awt.event.KeyEvent
import java.awt.event.WindowAdapter
import java.awt.event.WindowEvent
+import org.junit.Test
@OptIn(ExperimentalComposeUiApi::class)
class DialogTest {
diff --git a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/window/window/WindowInputEventTest.kt b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/window/window/WindowInputEventTest.kt
index 0e7f02c..b90df87 100644
--- a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/window/window/WindowInputEventTest.kt
+++ b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/window/window/WindowInputEventTest.kt
@@ -49,11 +49,11 @@
import androidx.compose.ui.window.rememberWindowState
import androidx.compose.ui.window.runApplicationTest
import com.google.common.truth.Truth.assertThat
-import org.junit.Test
import java.awt.Toolkit
import java.awt.event.KeyEvent
import java.awt.event.MouseEvent
import java.awt.event.MouseWheelEvent
+import org.junit.Test
@OptIn(ExperimentalComposeUiApi::class)
class WindowInputEventTest {
diff --git a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/window/window/WindowParameterTest.kt b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/window/window/WindowParameterTest.kt
index 1c60660..5e4cf77 100644
--- a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/window/window/WindowParameterTest.kt
+++ b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/window/window/WindowParameterTest.kt
@@ -34,8 +34,8 @@
import androidx.compose.ui.window.launchApplication
import androidx.compose.ui.window.runApplicationTest
import com.google.common.truth.Truth.assertThat
-import org.junit.Test
import java.awt.event.WindowEvent
+import org.junit.Test
@OptIn(ExperimentalComposeUiApi::class)
class WindowParameterTest {
diff --git a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/window/window/WindowStateTest.kt b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/window/window/WindowStateTest.kt
index ed7b79d..e8279f5 100644
--- a/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/window/window/WindowStateTest.kt
+++ b/compose/ui/ui/src/desktopTest/kotlin/androidx/compose/ui/window/window/WindowStateTest.kt
@@ -40,10 +40,6 @@
import androidx.compose.ui.window.rememberWindowState
import androidx.compose.ui.window.runApplicationTest
import com.google.common.truth.Truth.assertThat
-import kotlinx.coroutines.channels.Channel
-import kotlinx.coroutines.channels.consumeEach
-import org.junit.Assume.assumeTrue
-import org.junit.Test
import java.awt.Dimension
import java.awt.Point
import java.awt.Rectangle
@@ -52,6 +48,10 @@
import javax.swing.JFrame
import kotlin.math.abs
import kotlin.math.max
+import kotlinx.coroutines.channels.Channel
+import kotlinx.coroutines.channels.consumeEach
+import org.junit.Assume.assumeTrue
+import org.junit.Test
// Note that on Linux some tests are flaky. Swing event listener's on Linux has non-deterministic
// nature. To avoid flaky'ness we use delays
diff --git a/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/ComposeScene.skiko.kt b/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/ComposeScene.skiko.kt
index 6f092a6..2f16c79 100644
--- a/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/ComposeScene.skiko.kt
+++ b/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/ComposeScene.skiko.kt
@@ -27,34 +27,34 @@
import androidx.compose.runtime.staticCompositionLocalOf
import androidx.compose.runtime.withFrameNanos
import androidx.compose.ui.geometry.Offset
-import androidx.compose.ui.input.pointer.PointerButtons
import androidx.compose.ui.input.key.KeyEvent as ComposeKeyEvent
+import androidx.compose.ui.input.pointer.PointerButtons
import androidx.compose.ui.input.pointer.PointerEventType
import androidx.compose.ui.input.pointer.PointerInputEvent
import androidx.compose.ui.input.pointer.PointerKeyboardModifiers
import androidx.compose.ui.input.pointer.PointerType
import androidx.compose.ui.node.LayoutNode
+import androidx.compose.ui.node.RootForTest
import androidx.compose.ui.platform.AccessibilityController
-import androidx.compose.ui.platform.PlatformComponent
-import androidx.compose.ui.platform.SkiaBasedOwner
-import androidx.compose.ui.platform.PlatformInput
import androidx.compose.ui.platform.DummyPlatformComponent
import androidx.compose.ui.platform.FlushCoroutineDispatcher
import androidx.compose.ui.platform.GlobalSnapshotManager
+import androidx.compose.ui.platform.PlatformComponent
+import androidx.compose.ui.platform.PlatformInput
+import androidx.compose.ui.platform.SkiaBasedOwner
import androidx.compose.ui.platform.setContent
-import androidx.compose.ui.node.RootForTest
import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.dp
+import kotlin.coroutines.CoroutineContext
+import kotlin.jvm.Volatile
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.CoroutineStart
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
import org.jetbrains.skia.Canvas
-import kotlin.coroutines.CoroutineContext
-import kotlin.jvm.Volatile
internal val LocalComposeScene = staticCompositionLocalOf<ComposeScene> {
error("CompositionLocal LocalComposeScene not provided")
diff --git a/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/DefaultViewConfiguration.skiko.kt b/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/DefaultViewConfiguration.skiko.kt
index d581a1f..04067d8 100644
--- a/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/DefaultViewConfiguration.skiko.kt
+++ b/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/DefaultViewConfiguration.skiko.kt
@@ -16,8 +16,8 @@
package androidx.compose.ui.platform
-import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.dp
class DefaultViewConfiguration(private val density: Density) : ViewConfiguration {
override val longPressTimeoutMillis: Long
diff --git a/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/FlushCoroutineDispatcher.skiko.kt b/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/FlushCoroutineDispatcher.skiko.kt
index 1caeef5..134f900 100644
--- a/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/FlushCoroutineDispatcher.skiko.kt
+++ b/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/FlushCoroutineDispatcher.skiko.kt
@@ -16,13 +16,13 @@
package androidx.compose.ui.platform
+import kotlin.coroutines.CoroutineContext
+import kotlin.jvm.Volatile
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.Runnable
import kotlinx.coroutines.launch
-import kotlin.coroutines.CoroutineContext
-import kotlin.jvm.Volatile
/**
* Dispatcher with the ability to immediately perform (flush) all pending tasks.
diff --git a/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/OutlineCache.skiko.kt b/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/OutlineCache.skiko.kt
index 9eca11a..1c339d4 100644
--- a/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/OutlineCache.skiko.kt
+++ b/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/OutlineCache.skiko.kt
@@ -19,8 +19,8 @@
import androidx.compose.ui.graphics.Outline
import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.unit.Density
-import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.toSize
/**
diff --git a/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/SkiaBasedOwner.skiko.kt b/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/SkiaBasedOwner.skiko.kt
index 9aab9d9..5addad3 100644
--- a/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/SkiaBasedOwner.skiko.kt
+++ b/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/SkiaBasedOwner.skiko.kt
@@ -39,9 +39,9 @@
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.Canvas
import androidx.compose.ui.graphics.asComposeCanvas
+import androidx.compose.ui.input.InputMode.Companion.Keyboard
import androidx.compose.ui.input.InputModeManager
import androidx.compose.ui.input.InputModeManagerImpl
-import androidx.compose.ui.input.InputMode.Companion.Keyboard
import androidx.compose.ui.input.key.Key.Companion.Back
import androidx.compose.ui.input.key.Key.Companion.DirectionCenter
import androidx.compose.ui.input.key.Key.Companion.Tab
@@ -57,6 +57,7 @@
import androidx.compose.ui.input.pointer.PointerIconService
import androidx.compose.ui.input.pointer.PointerInputEvent
import androidx.compose.ui.input.pointer.PointerInputEventProcessor
+import androidx.compose.ui.input.pointer.PointerKeyboardModifiers
import androidx.compose.ui.input.pointer.PositionCalculator
import androidx.compose.ui.input.pointer.ProcessResult
import androidx.compose.ui.input.pointer.TestPointerInputEventData
@@ -72,19 +73,18 @@
import androidx.compose.ui.semantics.EmptySemanticsElement
import androidx.compose.ui.semantics.SemanticsOwner
import androidx.compose.ui.text.ExperimentalTextApi
-import androidx.compose.ui.text.input.PlatformTextInputPluginRegistry
-import androidx.compose.ui.text.input.TextInputService
+import androidx.compose.ui.text.InternalTextApi
import androidx.compose.ui.text.font.createFontFamilyResolver
+import androidx.compose.ui.text.input.PlatformTextInputPluginRegistry
+import androidx.compose.ui.text.input.PlatformTextInputPluginRegistryImpl
+import androidx.compose.ui.text.input.TextInputService
import androidx.compose.ui.text.platform.FontLoader
import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.Density
-import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.IntRect
+import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.LayoutDirection
-import androidx.compose.ui.input.pointer.PointerKeyboardModifiers
-import androidx.compose.ui.text.InternalTextApi
-import androidx.compose.ui.text.input.PlatformTextInputPluginRegistryImpl
import kotlin.coroutines.CoroutineContext
private typealias Command = () -> Unit
diff --git a/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/SkiaLayer.skiko.kt b/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/SkiaLayer.skiko.kt
index 4091d4a..e7d9ae4 100644
--- a/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/SkiaLayer.skiko.kt
+++ b/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/SkiaLayer.skiko.kt
@@ -33,9 +33,9 @@
import androidx.compose.ui.graphics.RectangleShape
import androidx.compose.ui.graphics.RenderEffect
import androidx.compose.ui.graphics.Shape
+import androidx.compose.ui.graphics.SkiaBackedCanvas
import androidx.compose.ui.graphics.TransformOrigin
import androidx.compose.ui.graphics.asComposeCanvas
-import androidx.compose.ui.graphics.SkiaBackedCanvas
import androidx.compose.ui.graphics.asSkiaPath
import androidx.compose.ui.graphics.nativeCanvas
import androidx.compose.ui.graphics.toArgb
diff --git a/compose/ui/ui/src/test/kotlin/androidx/compose/ui/ComposedModifierTest.kt b/compose/ui/ui/src/test/kotlin/androidx/compose/ui/ComposedModifierTest.kt
index 47c43e5..444cf73 100644
--- a/compose/ui/ui/src/test/kotlin/androidx/compose/ui/ComposedModifierTest.kt
+++ b/compose/ui/ui/src/test/kotlin/androidx/compose/ui/ComposedModifierTest.kt
@@ -20,12 +20,12 @@
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Composition
import androidx.compose.runtime.InternalComposeApi
-import androidx.compose.runtime.Recomposer
+import androidx.compose.runtime.MonotonicFrameClock
import androidx.compose.runtime.RecomposeScope
+import androidx.compose.runtime.Recomposer
+import androidx.compose.runtime.SideEffect
import androidx.compose.runtime.currentComposer
import androidx.compose.runtime.currentRecomposeScope
-import androidx.compose.runtime.MonotonicFrameClock
-import androidx.compose.runtime.SideEffect
import androidx.compose.runtime.remember
import androidx.compose.runtime.withRunningRecomposer
import kotlinx.coroutines.channels.Channel
diff --git a/compose/ui/ui/src/test/kotlin/androidx/compose/ui/hapticfeedback/HapticFeedbackTest.kt b/compose/ui/ui/src/test/kotlin/androidx/compose/ui/hapticfeedback/HapticFeedbackTest.kt
index 60064cf..9669e89 100644
--- a/compose/ui/ui/src/test/kotlin/androidx/compose/ui/hapticfeedback/HapticFeedbackTest.kt
+++ b/compose/ui/ui/src/test/kotlin/androidx/compose/ui/hapticfeedback/HapticFeedbackTest.kt
@@ -18,13 +18,13 @@
import android.view.HapticFeedbackConstants
import android.view.View
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
import org.mockito.kotlin.mock
import org.mockito.kotlin.spy
import org.mockito.kotlin.times
import org.mockito.kotlin.verify
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
@RunWith(JUnit4::class)
class HapticFeedbackTest {
diff --git a/compose/ui/ui/src/test/kotlin/androidx/compose/ui/input/RecordingInputConnectionInactiveTest.kt b/compose/ui/ui/src/test/kotlin/androidx/compose/ui/input/RecordingInputConnectionInactiveTest.kt
index fa9d451..05a700a 100644
--- a/compose/ui/ui/src/test/kotlin/androidx/compose/ui/input/RecordingInputConnectionInactiveTest.kt
+++ b/compose/ui/ui/src/test/kotlin/androidx/compose/ui/input/RecordingInputConnectionInactiveTest.kt
@@ -21,11 +21,11 @@
import androidx.compose.ui.text.input.RecordingInputConnection
import androidx.compose.ui.text.input.TextFieldValue
import com.google.common.truth.Truth.assertThat
-import org.mockito.kotlin.mock
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
+import org.mockito.kotlin.mock
@RunWith(JUnit4::class)
class RecordingInputConnectionInactiveTest {
diff --git a/compose/ui/ui/src/test/kotlin/androidx/compose/ui/layout/ConstraintsTest.kt b/compose/ui/ui/src/test/kotlin/androidx/compose/ui/layout/ConstraintsTest.kt
index 820b936..132d3dd6 100644
--- a/compose/ui/ui/src/test/kotlin/androidx/compose/ui/layout/ConstraintsTest.kt
+++ b/compose/ui/ui/src/test/kotlin/androidx/compose/ui/layout/ConstraintsTest.kt
@@ -19,8 +19,8 @@
import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.constrain
-import androidx.compose.ui.unit.offset
import androidx.compose.ui.unit.isSatisfiedBy
+import androidx.compose.ui.unit.offset
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
diff --git a/compose/ui/ui/src/test/kotlin/androidx/compose/ui/node/DelegatingNodeTest.kt b/compose/ui/ui/src/test/kotlin/androidx/compose/ui/node/DelegatingNodeTest.kt
index 698d042..793d11e 100644
--- a/compose/ui/ui/src/test/kotlin/androidx/compose/ui/node/DelegatingNodeTest.kt
+++ b/compose/ui/ui/src/test/kotlin/androidx/compose/ui/node/DelegatingNodeTest.kt
@@ -23,12 +23,11 @@
import androidx.compose.ui.layout.MeasureScope
import androidx.compose.ui.semantics.SemanticsPropertyReceiver
import androidx.compose.ui.unit.Constraints
+import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import com.google.common.truth.Truth.assertThat
-
@RunWith(JUnit4::class)
class DelegatingNodeTest {
diff --git a/compose/ui/ui/src/test/kotlin/androidx/compose/ui/node/HitTestResultTest.kt b/compose/ui/ui/src/test/kotlin/androidx/compose/ui/node/HitTestResultTest.kt
index 665bb01..f23209c 100644
--- a/compose/ui/ui/src/test/kotlin/androidx/compose/ui/node/HitTestResultTest.kt
+++ b/compose/ui/ui/src/test/kotlin/androidx/compose/ui/node/HitTestResultTest.kt
@@ -17,12 +17,11 @@
package androidx.compose.ui.node
import androidx.compose.ui.Modifier
+import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import com.google.common.truth.Truth.assertThat
-
@RunWith(JUnit4::class)
class HitTestResultTest {
@Test
diff --git a/compose/ui/ui/src/test/kotlin/androidx/compose/ui/platform/ClipboardManagerTest.kt b/compose/ui/ui/src/test/kotlin/androidx/compose/ui/platform/ClipboardManagerTest.kt
index 48c769f..a9048bc 100644
--- a/compose/ui/ui/src/test/kotlin/androidx/compose/ui/platform/ClipboardManagerTest.kt
+++ b/compose/ui/ui/src/test/kotlin/androidx/compose/ui/platform/ClipboardManagerTest.kt
@@ -17,8 +17,8 @@
package androidx.compose.ui.platform
import androidx.compose.ui.text.AnnotatedString
-import org.junit.Test
import com.google.common.truth.Truth.assertThat
+import org.junit.Test
class ClipboardManagerTest {
diff --git a/compose/ui/ui/src/test/kotlin/androidx/compose/ui/text/TextActionModeCallbackTest.kt b/compose/ui/ui/src/test/kotlin/androidx/compose/ui/text/TextActionModeCallbackTest.kt
index cdfda51..9a2a069 100644
--- a/compose/ui/ui/src/test/kotlin/androidx/compose/ui/text/TextActionModeCallbackTest.kt
+++ b/compose/ui/ui/src/test/kotlin/androidx/compose/ui/text/TextActionModeCallbackTest.kt
@@ -31,8 +31,8 @@
import androidx.compose.ui.platform.actionmodecallback.MenuItemOption
import androidx.compose.ui.platform.actionmodecallback.TextActionModeCallback
import androidx.test.filters.SdkSuppress
-import org.junit.Test
import com.google.common.truth.Truth.assertThat
+import org.junit.Test
@SdkSuppress(minSdkVersion = Build.VERSION_CODES.N)
class TextActionModeCallbackTest {
diff --git a/compose/ui/ui/src/test/kotlin/androidx/compose/ui/window/PopupPositionProviderTest.kt b/compose/ui/ui/src/test/kotlin/androidx/compose/ui/window/PopupPositionProviderTest.kt
index 5a0aec0..cb80640 100644
--- a/compose/ui/ui/src/test/kotlin/androidx/compose/ui/window/PopupPositionProviderTest.kt
+++ b/compose/ui/ui/src/test/kotlin/androidx/compose/ui/window/PopupPositionProviderTest.kt
@@ -17,8 +17,8 @@
package androidx.compose.ui.window
import androidx.compose.ui.Alignment
-import androidx.compose.ui.unit.IntRect
import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntRect
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.LayoutDirection
import com.google.common.truth.Truth.assertThat
diff --git a/concurrent/concurrent-futures-ktx/api/public_plus_experimental_current.txt b/concurrent/concurrent-futures-ktx/api/public_plus_experimental_current.txt
deleted file mode 100644
index 53345f4..0000000
--- a/concurrent/concurrent-futures-ktx/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-// Signature format: 4.0
-package androidx.concurrent.futures {
-
- public final class ListenableFutureKt {
- method public static suspend <T> Object? await(com.google.common.util.concurrent.ListenableFuture<T>, kotlin.coroutines.Continuation<? super T>);
- }
-
- public final class SuspendToFutureAdapter {
- method public <T> com.google.common.util.concurrent.ListenableFuture<T> launchFuture(optional kotlin.coroutines.CoroutineContext context, optional boolean launchUndispatched, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block);
- field public static final androidx.concurrent.futures.SuspendToFutureAdapter INSTANCE;
- }
-
-}
-
diff --git a/concurrent/concurrent-futures-ktx/build.gradle b/concurrent/concurrent-futures-ktx/build.gradle
index 1c2ee74..3aee3a0 100644
--- a/concurrent/concurrent-futures-ktx/build.gradle
+++ b/concurrent/concurrent-futures-ktx/build.gradle
@@ -34,7 +34,7 @@
}
androidx {
- name = "AndroidX Futures Kotlin Extensions"
+ name = "Futures Kotlin Extensions"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2019"
description = "Kotlin Extensions for Androidx implementation of Guava's ListenableFuture"
diff --git a/concurrent/concurrent-futures-ktx/src/main/java/androidx/concurrent/futures/ListenableFuture.kt b/concurrent/concurrent-futures-ktx/src/main/java/androidx/concurrent/futures/ListenableFuture.kt
index 8bf37d1..cf5f0a4 100644
--- a/concurrent/concurrent-futures-ktx/src/main/java/androidx/concurrent/futures/ListenableFuture.kt
+++ b/concurrent/concurrent-futures-ktx/src/main/java/androidx/concurrent/futures/ListenableFuture.kt
@@ -18,11 +18,11 @@
import androidx.concurrent.futures.AbstractResolvableFuture.getUninterruptibly
import com.google.common.util.concurrent.ListenableFuture
-import kotlinx.coroutines.CancellableContinuation
-import kotlinx.coroutines.suspendCancellableCoroutine
import java.util.concurrent.ExecutionException
import java.util.concurrent.Future
import kotlin.coroutines.resumeWithException
+import kotlinx.coroutines.CancellableContinuation
+import kotlinx.coroutines.suspendCancellableCoroutine
/**
* Awaits completion of `this` [ListenableFuture] without blocking a thread.
diff --git a/concurrent/concurrent-futures-ktx/src/test/java/androidx/concurrent/futures/ListenableFutureTest.kt b/concurrent/concurrent-futures-ktx/src/test/java/androidx/concurrent/futures/ListenableFutureTest.kt
index 6b3366e..3385556 100644
--- a/concurrent/concurrent-futures-ktx/src/test/java/androidx/concurrent/futures/ListenableFutureTest.kt
+++ b/concurrent/concurrent-futures-ktx/src/test/java/androidx/concurrent/futures/ListenableFutureTest.kt
@@ -18,6 +18,9 @@
package androidx.concurrent.futures
+import java.util.concurrent.atomic.AtomicBoolean
+import java.util.concurrent.atomic.AtomicInteger
+import kotlin.test.assertFailsWith
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.CoroutineStart
import kotlinx.coroutines.DelicateCoroutinesApi
@@ -27,15 +30,12 @@
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.runTest
import kotlinx.coroutines.yield
-import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.CoreMatchers.instanceOf
+import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import java.util.concurrent.atomic.AtomicBoolean
-import java.util.concurrent.atomic.AtomicInteger
-import kotlin.test.assertFailsWith
@RunWith(JUnit4::class)
@OptIn(DelicateCoroutinesApi::class)
diff --git a/concurrent/concurrent-futures/api/public_plus_experimental_current.txt b/concurrent/concurrent-futures/api/public_plus_experimental_current.txt
deleted file mode 100644
index 9d9c205..0000000
--- a/concurrent/concurrent-futures/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-// Signature format: 4.0
-package androidx.concurrent.futures {
-
- public final class CallbackToFutureAdapter {
- method public static <T> com.google.common.util.concurrent.ListenableFuture<T!> getFuture(androidx.concurrent.futures.CallbackToFutureAdapter.Resolver<T!>);
- }
-
- public static final class CallbackToFutureAdapter.Completer<T> {
- method public void addCancellationListener(Runnable, java.util.concurrent.Executor);
- method protected void finalize();
- method public boolean set(T!);
- method public boolean setCancelled();
- method public boolean setException(Throwable);
- }
-
- public static interface CallbackToFutureAdapter.Resolver<T> {
- method public Object? attachCompleter(androidx.concurrent.futures.CallbackToFutureAdapter.Completer<T!>) throws java.lang.Exception;
- }
-
-}
-
diff --git a/concurrent/concurrent-futures/api/restricted_current.txt b/concurrent/concurrent-futures/api/restricted_current.txt
index 22e80e1..dbe311c 100644
--- a/concurrent/concurrent-futures/api/restricted_current.txt
+++ b/concurrent/concurrent-futures/api/restricted_current.txt
@@ -6,8 +6,8 @@
method public final void addListener(Runnable!, java.util.concurrent.Executor!);
method protected void afterDone();
method public final boolean cancel(boolean);
- method public final V! get(long, java.util.concurrent.TimeUnit!) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
method public final V! get() throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
+ method public final V! get(long, java.util.concurrent.TimeUnit!) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
method protected void interruptTask();
method public final boolean isCancelled();
method public final boolean isDone();
diff --git a/concurrent/concurrent-futures/build.gradle b/concurrent/concurrent-futures/build.gradle
index 2f134c0..94a63aa 100644
--- a/concurrent/concurrent-futures/build.gradle
+++ b/concurrent/concurrent-futures/build.gradle
@@ -29,7 +29,7 @@
}
androidx {
- name = "AndroidX Futures"
+ name = "Futures"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "Androidx implementation of Guava's ListenableFuture"
diff --git a/constraintlayout/constraintlayout-compose/api/current.txt b/constraintlayout/constraintlayout-compose/api/current.txt
index e40b095..c0e3103 100644
--- a/constraintlayout/constraintlayout-compose/api/current.txt
+++ b/constraintlayout/constraintlayout-compose/api/current.txt
@@ -54,8 +54,8 @@
@androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Stable public final class ConstrainScope {
method public androidx.constraintlayout.compose.Dimension asDimension(float);
- method public void centerAround(androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor anchor);
method public void centerAround(androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor anchor);
+ method public void centerAround(androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor anchor);
method public void centerHorizontallyTo(androidx.constraintlayout.compose.ConstrainedLayoutReference other, optional @FloatRange(from=0.0, to=1.0) float bias);
method public void centerTo(androidx.constraintlayout.compose.ConstrainedLayoutReference other);
method public void centerVerticallyTo(androidx.constraintlayout.compose.ConstrainedLayoutReference other, optional @FloatRange(from=0.0, to=1.0) float bias);
@@ -89,9 +89,9 @@
method public float getVerticalChainWeight();
method public androidx.constraintlayout.compose.Visibility getVisibility();
method public androidx.constraintlayout.compose.Dimension getWidth();
- method public void linkTo(androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor end, optional float startMargin, optional float endMargin, optional float startGoneMargin, optional float endGoneMargin, optional @FloatRange(from=0.0, to=1.0) float bias);
method public void linkTo(androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor top, androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor bottom, optional float topMargin, optional float bottomMargin, optional float topGoneMargin, optional float bottomGoneMargin, optional @FloatRange(from=0.0, to=1.0) float bias);
method public void linkTo(androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor top, androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor end, androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor bottom, optional float startMargin, optional float topMargin, optional float endMargin, optional float bottomMargin, optional float startGoneMargin, optional float topGoneMargin, optional float endGoneMargin, optional float bottomGoneMargin, optional @FloatRange(from=0.0, to=1.0) float horizontalBias, optional @FloatRange(from=0.0, to=1.0) float verticalBias);
+ method public void linkTo(androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor end, optional float startMargin, optional float endMargin, optional float startGoneMargin, optional float endGoneMargin, optional @FloatRange(from=0.0, to=1.0) float bias);
method public void resetDimensions();
method public void resetTransforms();
method public void setAlpha(float);
@@ -163,15 +163,15 @@
public abstract class ConstraintLayoutBaseScope {
ctor public ConstraintLayoutBaseScope();
method public final void applyTo(androidx.constraintlayout.compose.State state);
- method public final androidx.constraintlayout.compose.HorizontalChainScope constrain(androidx.constraintlayout.compose.HorizontalChainReference ref, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.HorizontalChainScope,kotlin.Unit> constrainBlock);
- method public final androidx.constraintlayout.compose.VerticalChainScope constrain(androidx.constraintlayout.compose.VerticalChainReference ref, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.VerticalChainScope,kotlin.Unit> constrainBlock);
method public final androidx.constraintlayout.compose.ConstrainScope constrain(androidx.constraintlayout.compose.ConstrainedLayoutReference ref, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.ConstrainScope,kotlin.Unit> constrainBlock);
method public final void constrain(androidx.constraintlayout.compose.ConstrainedLayoutReference![] refs, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.ConstrainScope,kotlin.Unit> constrainBlock);
+ method public final androidx.constraintlayout.compose.HorizontalChainScope constrain(androidx.constraintlayout.compose.HorizontalChainReference ref, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.HorizontalChainScope,kotlin.Unit> constrainBlock);
+ method public final androidx.constraintlayout.compose.VerticalChainScope constrain(androidx.constraintlayout.compose.VerticalChainReference ref, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.VerticalChainScope,kotlin.Unit> constrainBlock);
method public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor createAbsoluteLeftBarrier(androidx.constraintlayout.compose.LayoutReference![] elements, optional float margin);
method public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor createAbsoluteRightBarrier(androidx.constraintlayout.compose.LayoutReference![] elements, optional float margin);
method public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor createBottomBarrier(androidx.constraintlayout.compose.LayoutReference![] elements, optional float margin);
- method public final androidx.constraintlayout.compose.ConstrainedLayoutReference createColumn(androidx.constraintlayout.compose.LayoutReference![] elements, optional androidx.constraintlayout.compose.Skip![] skips, optional androidx.constraintlayout.compose.Span![] spans, optional int[] rowWeights, optional float verticalGap, optional float padding);
method public final androidx.constraintlayout.compose.ConstrainedLayoutReference createColumn(androidx.constraintlayout.compose.LayoutReference![] elements, optional androidx.constraintlayout.compose.Skip![] skips, optional androidx.constraintlayout.compose.Span![] spans, optional float verticalGap, optional int[] rowWeights, optional float paddingHorizontal, optional float paddingVertical);
+ method public final androidx.constraintlayout.compose.ConstrainedLayoutReference createColumn(androidx.constraintlayout.compose.LayoutReference![] elements, optional androidx.constraintlayout.compose.Skip![] skips, optional androidx.constraintlayout.compose.Span![] spans, optional int[] rowWeights, optional float verticalGap, optional float padding);
method public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor createEndBarrier(androidx.constraintlayout.compose.LayoutReference![] elements, optional float margin);
method public final androidx.constraintlayout.compose.ConstrainedLayoutReference createFlow(androidx.constraintlayout.compose.LayoutReference![]? elements, optional boolean flowVertically, optional float verticalGap, optional float horizontalGap, optional int maxElement, optional float padding, optional androidx.constraintlayout.compose.Wrap wrapMode, optional androidx.constraintlayout.compose.VerticalAlign verticalAlign, optional androidx.constraintlayout.compose.HorizontalAlign horizontalAlign, optional float horizontalFlowBias, optional float verticalFlowBias, optional androidx.constraintlayout.compose.FlowStyle verticalStyle, optional androidx.constraintlayout.compose.FlowStyle horizontalStyle);
method public final androidx.constraintlayout.compose.ConstrainedLayoutReference createFlow(androidx.constraintlayout.compose.LayoutReference![]? elements, optional boolean flowVertically, optional float verticalGap, optional float horizontalGap, optional int maxElement, optional float paddingHorizontal, optional float paddingVertical, optional androidx.constraintlayout.compose.Wrap wrapMode, optional androidx.constraintlayout.compose.VerticalAlign verticalAlign, optional androidx.constraintlayout.compose.HorizontalAlign horizontalAlign, optional float horizontalFlowBias, optional float verticalFlowBias, optional androidx.constraintlayout.compose.FlowStyle verticalStyle, optional androidx.constraintlayout.compose.FlowStyle horizontalStyle);
@@ -229,11 +229,11 @@
public final class ConstraintLayoutKt {
method @androidx.compose.runtime.Composable public static inline void ConstraintLayout(optional androidx.compose.ui.Modifier modifier, optional int optimizationLevel, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.ConstraintLayoutScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static inline void ConstraintLayout(androidx.constraintlayout.compose.ConstraintSet constraintSet, optional androidx.compose.ui.Modifier modifier, optional int optimizationLevel, optional boolean animateChanges, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function0<kotlin.Unit>? finishedAnimationListener, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static androidx.constraintlayout.compose.ConstraintSet ConstraintSet(@org.intellij.lang.annotations.Language("json5") String content, optional @org.intellij.lang.annotations.Language("json5") String? overrideVariables);
- method public static androidx.constraintlayout.compose.ConstraintSet ConstraintSet(@org.intellij.lang.annotations.Language("json5") String jsonContent);
method public static androidx.constraintlayout.compose.ConstraintSet ConstraintSet(androidx.constraintlayout.compose.ConstraintSet extendConstraintSet, @org.intellij.lang.annotations.Language("json5") String jsonContent);
- method public static androidx.constraintlayout.compose.ConstraintSet ConstraintSet(kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.ConstraintSetScope,kotlin.Unit> description);
method public static androidx.constraintlayout.compose.ConstraintSet ConstraintSet(androidx.constraintlayout.compose.ConstraintSet extendConstraintSet, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.ConstraintSetScope,kotlin.Unit> description);
+ method public static androidx.constraintlayout.compose.ConstraintSet ConstraintSet(@org.intellij.lang.annotations.Language("json5") String jsonContent);
+ method @androidx.compose.runtime.Composable public static androidx.constraintlayout.compose.ConstraintSet ConstraintSet(@org.intellij.lang.annotations.Language("json5") String content, optional @org.intellij.lang.annotations.Language("json5") String? overrideVariables);
+ method public static androidx.constraintlayout.compose.ConstraintSet ConstraintSet(kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.ConstraintSetScope,kotlin.Unit> description);
method public static androidx.constraintlayout.compose.Dimension.MaxCoercible atLeast(androidx.constraintlayout.compose.Dimension.Coercible, float dp);
method public static androidx.constraintlayout.compose.Dimension atLeast(androidx.constraintlayout.compose.Dimension.MinCoercible, float dp);
method @Deprecated public static androidx.constraintlayout.compose.Dimension atLeastWrapContent(androidx.constraintlayout.compose.Dimension.MinCoercible, float dp);
@@ -411,6 +411,9 @@
property public final androidx.constraintlayout.compose.Easing Standard;
}
+ @kotlin.RequiresOptIn(message="MotionLayout API is experimental and it is likely to change.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalMotionApi {
+ }
+
@androidx.compose.runtime.Immutable public final class FlowStyle {
field public static final androidx.constraintlayout.compose.FlowStyle.Companion Companion;
}
@@ -449,8 +452,8 @@
}
@kotlin.jvm.JvmDefaultWithCompatibility public interface HorizontalAnchorable {
- method public void linkTo(androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor anchor, optional float margin, optional float goneMargin);
method public void linkTo(androidx.constraintlayout.compose.ConstraintLayoutBaseScope.BaselineAnchor anchor, optional float margin, optional float goneMargin);
+ method public void linkTo(androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor anchor, optional float margin, optional float goneMargin);
}
@androidx.compose.runtime.Stable public final class HorizontalChainReference extends androidx.constraintlayout.compose.LayoutReference {
@@ -768,17 +771,17 @@
}
@kotlin.jvm.JvmInline public final value class Skip {
- ctor public Skip(String description);
- ctor public Skip(int position, int rows, int columns);
ctor public Skip(int position, int size);
+ ctor public Skip(int position, int rows, int columns);
+ ctor public Skip(String description);
method public String getDescription();
property public final String description;
}
@kotlin.jvm.JvmInline public final value class Span {
- ctor public Span(String description);
- ctor public Span(int position, int rows, int columns);
ctor public Span(int position, int size);
+ ctor public Span(int position, int rows, int columns);
+ ctor public Span(String description);
method public String getDescription();
property public final String description;
}
diff --git a/constraintlayout/constraintlayout-compose/api/public_plus_experimental_current.txt b/constraintlayout/constraintlayout-compose/api/public_plus_experimental_current.txt
deleted file mode 100644
index c700db554..0000000
--- a/constraintlayout/constraintlayout-compose/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,1000 +0,0 @@
-// Signature format: 4.0
-package androidx.constraintlayout.compose {
-
- public final class Arc {
- method public String getName();
- property public final String name;
- field public static final androidx.constraintlayout.compose.Arc.Companion Companion;
- }
-
- public static final class Arc.Companion {
- method public androidx.constraintlayout.compose.Arc getAbove();
- method public androidx.constraintlayout.compose.Arc getBelow();
- method public androidx.constraintlayout.compose.Arc getFlip();
- method public androidx.constraintlayout.compose.Arc getNone();
- method public androidx.constraintlayout.compose.Arc getStartHorizontal();
- method public androidx.constraintlayout.compose.Arc getStartVertical();
- property public final androidx.constraintlayout.compose.Arc Above;
- property public final androidx.constraintlayout.compose.Arc Below;
- property public final androidx.constraintlayout.compose.Arc Flip;
- property public final androidx.constraintlayout.compose.Arc None;
- property public final androidx.constraintlayout.compose.Arc StartHorizontal;
- property public final androidx.constraintlayout.compose.Arc StartVertical;
- }
-
- public abstract sealed class BaseKeyFrameScope {
- method protected final <E extends androidx.constraintlayout.compose.NamedPropertyOrValue> kotlin.properties.ObservableProperty<E> addNameOnPropertyChange(E initialValue, optional String? nameOverride);
- method protected final <T> kotlin.properties.ObservableProperty<T> addOnPropertyChange(T initialValue, optional String? nameOverride);
- }
-
- public abstract sealed class BaseKeyFramesScope {
- method public final androidx.constraintlayout.compose.Easing getEasing();
- method public final void setEasing(androidx.constraintlayout.compose.Easing);
- property public final androidx.constraintlayout.compose.Easing easing;
- }
-
- @kotlin.jvm.JvmDefaultWithCompatibility public interface BaselineAnchorable {
- method public void linkTo(androidx.constraintlayout.compose.ConstraintLayoutBaseScope.BaselineAnchor anchor, optional float margin, optional float goneMargin);
- method public void linkTo(androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor anchor, optional float margin, optional float goneMargin);
- }
-
- @androidx.compose.runtime.Immutable public final class ChainStyle {
- field public static final androidx.constraintlayout.compose.ChainStyle.Companion Companion;
- }
-
- public static final class ChainStyle.Companion {
- method @androidx.compose.runtime.Stable public androidx.constraintlayout.compose.ChainStyle Packed(float bias);
- method public androidx.constraintlayout.compose.ChainStyle getPacked();
- method public androidx.constraintlayout.compose.ChainStyle getSpread();
- method public androidx.constraintlayout.compose.ChainStyle getSpreadInside();
- property public final androidx.constraintlayout.compose.ChainStyle Packed;
- property public final androidx.constraintlayout.compose.ChainStyle Spread;
- property public final androidx.constraintlayout.compose.ChainStyle SpreadInside;
- }
-
- @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Stable public final class ConstrainScope {
- method public androidx.constraintlayout.compose.Dimension asDimension(float);
- method public void centerAround(androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor anchor);
- method public void centerAround(androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor anchor);
- method public void centerHorizontallyTo(androidx.constraintlayout.compose.ConstrainedLayoutReference other, optional @FloatRange(from=0.0, to=1.0) float bias);
- method public void centerTo(androidx.constraintlayout.compose.ConstrainedLayoutReference other);
- method public void centerVerticallyTo(androidx.constraintlayout.compose.ConstrainedLayoutReference other, optional @FloatRange(from=0.0, to=1.0) float bias);
- method public void circular(androidx.constraintlayout.compose.ConstrainedLayoutReference other, float angle, float distance);
- method public void clearConstraints();
- method public void clearHorizontal();
- method public void clearVertical();
- method public androidx.constraintlayout.compose.VerticalAnchorable getAbsoluteLeft();
- method public androidx.constraintlayout.compose.VerticalAnchorable getAbsoluteRight();
- method public float getAlpha();
- method public androidx.constraintlayout.compose.BaselineAnchorable getBaseline();
- method public androidx.constraintlayout.compose.HorizontalAnchorable getBottom();
- method public androidx.constraintlayout.compose.VerticalAnchorable getEnd();
- method public androidx.constraintlayout.compose.Dimension getHeight();
- method public float getHorizontalBias();
- method public float getHorizontalChainWeight();
- method public androidx.constraintlayout.compose.ConstrainedLayoutReference getParent();
- method public float getPivotX();
- method public float getPivotY();
- method public float getRotationX();
- method public float getRotationY();
- method public float getRotationZ();
- method public float getScaleX();
- method public float getScaleY();
- method public androidx.constraintlayout.compose.VerticalAnchorable getStart();
- method public androidx.constraintlayout.compose.HorizontalAnchorable getTop();
- method public float getTranslationX();
- method public float getTranslationY();
- method public float getTranslationZ();
- method public float getVerticalBias();
- method public float getVerticalChainWeight();
- method public androidx.constraintlayout.compose.Visibility getVisibility();
- method public androidx.constraintlayout.compose.Dimension getWidth();
- method public void linkTo(androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor end, optional float startMargin, optional float endMargin, optional float startGoneMargin, optional float endGoneMargin, optional @FloatRange(from=0.0, to=1.0) float bias);
- method public void linkTo(androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor top, androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor bottom, optional float topMargin, optional float bottomMargin, optional float topGoneMargin, optional float bottomGoneMargin, optional @FloatRange(from=0.0, to=1.0) float bias);
- method public void linkTo(androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor top, androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor end, androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor bottom, optional float startMargin, optional float topMargin, optional float endMargin, optional float bottomMargin, optional float startGoneMargin, optional float topGoneMargin, optional float endGoneMargin, optional float bottomGoneMargin, optional @FloatRange(from=0.0, to=1.0) float horizontalBias, optional @FloatRange(from=0.0, to=1.0) float verticalBias);
- method public void resetDimensions();
- method public void resetTransforms();
- method public void setAlpha(float);
- method public void setHeight(androidx.constraintlayout.compose.Dimension);
- method public void setHorizontalBias(float);
- method public void setHorizontalChainWeight(float);
- method public void setPivotX(float);
- method public void setPivotY(float);
- method public void setRotationX(float);
- method public void setRotationY(float);
- method public void setRotationZ(float);
- method public void setScaleX(float);
- method public void setScaleY(float);
- method public void setTranslationX(float);
- method public void setTranslationY(float);
- method public void setTranslationZ(float);
- method public void setVerticalBias(float);
- method public void setVerticalChainWeight(float);
- method public void setVisibility(androidx.constraintlayout.compose.Visibility);
- method public void setWidth(androidx.constraintlayout.compose.Dimension);
- property public final androidx.constraintlayout.compose.VerticalAnchorable absoluteLeft;
- property public final androidx.constraintlayout.compose.VerticalAnchorable absoluteRight;
- property public final float alpha;
- property public final androidx.constraintlayout.compose.BaselineAnchorable baseline;
- property public final androidx.constraintlayout.compose.HorizontalAnchorable bottom;
- property public final androidx.constraintlayout.compose.VerticalAnchorable end;
- property public final androidx.constraintlayout.compose.Dimension height;
- property public final float horizontalBias;
- property public final float horizontalChainWeight;
- property public final androidx.constraintlayout.compose.ConstrainedLayoutReference parent;
- property public final float pivotX;
- property public final float pivotY;
- property public final float rotationX;
- property public final float rotationY;
- property public final float rotationZ;
- property public final float scaleX;
- property public final float scaleY;
- property public final androidx.constraintlayout.compose.VerticalAnchorable start;
- property public final androidx.constraintlayout.compose.HorizontalAnchorable top;
- property public final float translationX;
- property public final float translationY;
- property public final float translationZ;
- property public final float verticalBias;
- property public final float verticalChainWeight;
- property public final androidx.constraintlayout.compose.Visibility visibility;
- property public final androidx.constraintlayout.compose.Dimension width;
- }
-
- @androidx.compose.runtime.Stable public final class ConstrainedLayoutReference extends androidx.constraintlayout.compose.LayoutReference {
- ctor public ConstrainedLayoutReference(Object id);
- method public androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor getAbsoluteLeft();
- method public androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor getAbsoluteRight();
- method public androidx.constraintlayout.compose.ConstraintLayoutBaseScope.BaselineAnchor getBaseline();
- method public androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor getBottom();
- method public androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor getEnd();
- method public Object getId();
- method public androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor getStart();
- method public androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor getTop();
- property public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor absoluteLeft;
- property public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor absoluteRight;
- property public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.BaselineAnchor baseline;
- property public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor bottom;
- property public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor end;
- property public Object id;
- property public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor start;
- property public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor top;
- }
-
- public abstract class ConstraintLayoutBaseScope {
- ctor public ConstraintLayoutBaseScope();
- method public final void applyTo(androidx.constraintlayout.compose.State state);
- method public final androidx.constraintlayout.compose.HorizontalChainScope constrain(androidx.constraintlayout.compose.HorizontalChainReference ref, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.HorizontalChainScope,kotlin.Unit> constrainBlock);
- method public final androidx.constraintlayout.compose.VerticalChainScope constrain(androidx.constraintlayout.compose.VerticalChainReference ref, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.VerticalChainScope,kotlin.Unit> constrainBlock);
- method public final androidx.constraintlayout.compose.ConstrainScope constrain(androidx.constraintlayout.compose.ConstrainedLayoutReference ref, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.ConstrainScope,kotlin.Unit> constrainBlock);
- method public final void constrain(androidx.constraintlayout.compose.ConstrainedLayoutReference![] refs, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.ConstrainScope,kotlin.Unit> constrainBlock);
- method public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor createAbsoluteLeftBarrier(androidx.constraintlayout.compose.LayoutReference![] elements, optional float margin);
- method public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor createAbsoluteRightBarrier(androidx.constraintlayout.compose.LayoutReference![] elements, optional float margin);
- method public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor createBottomBarrier(androidx.constraintlayout.compose.LayoutReference![] elements, optional float margin);
- method public final androidx.constraintlayout.compose.ConstrainedLayoutReference createColumn(androidx.constraintlayout.compose.LayoutReference![] elements, optional androidx.constraintlayout.compose.Skip![] skips, optional androidx.constraintlayout.compose.Span![] spans, optional int[] rowWeights, optional float verticalGap, optional float padding);
- method public final androidx.constraintlayout.compose.ConstrainedLayoutReference createColumn(androidx.constraintlayout.compose.LayoutReference![] elements, optional androidx.constraintlayout.compose.Skip![] skips, optional androidx.constraintlayout.compose.Span![] spans, optional float verticalGap, optional int[] rowWeights, optional float paddingHorizontal, optional float paddingVertical);
- method public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor createEndBarrier(androidx.constraintlayout.compose.LayoutReference![] elements, optional float margin);
- method public final androidx.constraintlayout.compose.ConstrainedLayoutReference createFlow(androidx.constraintlayout.compose.LayoutReference![]? elements, optional boolean flowVertically, optional float verticalGap, optional float horizontalGap, optional int maxElement, optional float padding, optional androidx.constraintlayout.compose.Wrap wrapMode, optional androidx.constraintlayout.compose.VerticalAlign verticalAlign, optional androidx.constraintlayout.compose.HorizontalAlign horizontalAlign, optional float horizontalFlowBias, optional float verticalFlowBias, optional androidx.constraintlayout.compose.FlowStyle verticalStyle, optional androidx.constraintlayout.compose.FlowStyle horizontalStyle);
- method public final androidx.constraintlayout.compose.ConstrainedLayoutReference createFlow(androidx.constraintlayout.compose.LayoutReference![]? elements, optional boolean flowVertically, optional float verticalGap, optional float horizontalGap, optional int maxElement, optional float paddingHorizontal, optional float paddingVertical, optional androidx.constraintlayout.compose.Wrap wrapMode, optional androidx.constraintlayout.compose.VerticalAlign verticalAlign, optional androidx.constraintlayout.compose.HorizontalAlign horizontalAlign, optional float horizontalFlowBias, optional float verticalFlowBias, optional androidx.constraintlayout.compose.FlowStyle verticalStyle, optional androidx.constraintlayout.compose.FlowStyle horizontalStyle);
- method public final androidx.constraintlayout.compose.ConstrainedLayoutReference createFlow(androidx.constraintlayout.compose.LayoutReference![]? elements, optional boolean flowVertically, optional float verticalGap, optional float horizontalGap, optional int maxElement, optional float paddingLeft, optional float paddingTop, optional float paddingRight, optional float paddingBottom, optional androidx.constraintlayout.compose.Wrap wrapMode, optional androidx.constraintlayout.compose.VerticalAlign verticalAlign, optional androidx.constraintlayout.compose.HorizontalAlign horizontalAlign, optional float horizontalFlowBias, optional float verticalFlowBias, optional androidx.constraintlayout.compose.FlowStyle verticalStyle, optional androidx.constraintlayout.compose.FlowStyle horizontalStyle);
- method public final androidx.constraintlayout.compose.ConstrainedLayoutReference createGrid(androidx.constraintlayout.compose.LayoutReference![] elements, optional int orientation, optional int rows, optional int columns, optional float verticalGap, optional float horizontalGap, optional int[] rowWeights, optional int[] columnWeights, optional androidx.constraintlayout.compose.Skip![] skips, optional androidx.constraintlayout.compose.Span![] spans, optional float padding, optional androidx.constraintlayout.compose.GridFlag![] flags);
- method public final androidx.constraintlayout.compose.ConstrainedLayoutReference createGrid(androidx.constraintlayout.compose.LayoutReference![] elements, optional int orientation, optional int rows, optional int columns, optional float verticalGap, optional float horizontalGap, optional int[] rowWeights, optional int[] columnWeights, optional androidx.constraintlayout.compose.Skip![] skips, optional androidx.constraintlayout.compose.Span![] spans, optional float paddingHorizontal, optional float paddingVertical, optional androidx.constraintlayout.compose.GridFlag![] flags);
- method public final androidx.constraintlayout.compose.ConstrainedLayoutReference createGrid(androidx.constraintlayout.compose.LayoutReference![] elements, optional int orientation, optional int rows, optional int columns, optional float verticalGap, optional float horizontalGap, optional int[] rowWeights, optional int[] columnWeights, optional androidx.constraintlayout.compose.Skip![] skips, optional androidx.constraintlayout.compose.Span![] spans, optional float paddingStart, optional float paddingTop, optional float paddingEnd, optional float paddingBottom, optional androidx.constraintlayout.compose.GridFlag![] flags);
- method public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteLeft(float offset);
- method public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteLeft(float fraction);
- method public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteRight(float offset);
- method public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteRight(float fraction);
- method public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromBottom(float offset);
- method public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromBottom(float fraction);
- method public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromEnd(float offset);
- method public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromEnd(float fraction);
- method public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromStart(float offset);
- method public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromStart(float fraction);
- method public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromTop(float offset);
- method public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromTop(float fraction);
- method public final androidx.constraintlayout.compose.HorizontalChainReference createHorizontalChain(androidx.constraintlayout.compose.LayoutReference![] elements, optional androidx.constraintlayout.compose.ChainStyle chainStyle);
- method public final androidx.constraintlayout.compose.ConstrainedLayoutReference createRow(androidx.constraintlayout.compose.LayoutReference![] elements, optional androidx.constraintlayout.compose.Skip![] skips, optional androidx.constraintlayout.compose.Span![] spans, optional float horizontalGap, optional int[] columnWeights, optional float padding);
- method public final androidx.constraintlayout.compose.ConstrainedLayoutReference createRow(androidx.constraintlayout.compose.LayoutReference![] elements, optional androidx.constraintlayout.compose.Skip![] skips, optional androidx.constraintlayout.compose.Span![] spans, optional float horizontalGap, optional int[] columnWeights, optional float paddingHorizontal, optional float paddingVertical);
- method public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor createStartBarrier(androidx.constraintlayout.compose.LayoutReference![] elements, optional float margin);
- method public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor createTopBarrier(androidx.constraintlayout.compose.LayoutReference![] elements, optional float margin);
- method public final androidx.constraintlayout.compose.VerticalChainReference createVerticalChain(androidx.constraintlayout.compose.LayoutReference![] elements, optional androidx.constraintlayout.compose.ChainStyle chainStyle);
- method @Deprecated protected final java.util.List<kotlin.jvm.functions.Function1<androidx.constraintlayout.compose.State,kotlin.Unit>> getTasks();
- method public void reset();
- method public final androidx.constraintlayout.compose.LayoutReference withChainParams(androidx.constraintlayout.compose.LayoutReference, optional float startMargin, optional float topMargin, optional float endMargin, optional float bottomMargin, optional float startGoneMargin, optional float topGoneMargin, optional float endGoneMargin, optional float bottomGoneMargin, optional float weight);
- method public final androidx.constraintlayout.compose.LayoutReference withHorizontalChainParams(androidx.constraintlayout.compose.LayoutReference, optional float startMargin, optional float endMargin, optional float startGoneMargin, optional float endGoneMargin, optional float weight);
- method public final androidx.constraintlayout.compose.LayoutReference withVerticalChainParams(androidx.constraintlayout.compose.LayoutReference, optional float topMargin, optional float bottomMargin, optional float topGoneMargin, optional float bottomGoneMargin, optional float weight);
- property @Deprecated protected final java.util.List<kotlin.jvm.functions.Function1<androidx.constraintlayout.compose.State,kotlin.Unit>> tasks;
- }
-
- @androidx.compose.runtime.Stable public static final class ConstraintLayoutBaseScope.BaselineAnchor {
- method public androidx.constraintlayout.compose.LayoutReference component2();
- method public androidx.constraintlayout.compose.ConstraintLayoutBaseScope.BaselineAnchor copy(Object id, androidx.constraintlayout.compose.LayoutReference reference);
- method public androidx.constraintlayout.compose.LayoutReference getReference();
- property public final androidx.constraintlayout.compose.LayoutReference reference;
- }
-
- @androidx.compose.runtime.Stable public static final class ConstraintLayoutBaseScope.HorizontalAnchor {
- method public androidx.constraintlayout.compose.LayoutReference component3();
- method public androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor copy(Object id, int index, androidx.constraintlayout.compose.LayoutReference reference);
- method public androidx.constraintlayout.compose.LayoutReference getReference();
- property public final androidx.constraintlayout.compose.LayoutReference reference;
- }
-
- @androidx.compose.runtime.Stable public static final class ConstraintLayoutBaseScope.VerticalAnchor {
- method public androidx.constraintlayout.compose.LayoutReference component3();
- method public androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor copy(Object id, int index, androidx.constraintlayout.compose.LayoutReference reference);
- method public androidx.constraintlayout.compose.LayoutReference getReference();
- property public final androidx.constraintlayout.compose.LayoutReference reference;
- }
-
- public final class ConstraintLayoutKt {
- method @androidx.compose.runtime.Composable public static inline void ConstraintLayout(optional androidx.compose.ui.Modifier modifier, optional int optimizationLevel, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.ConstraintLayoutScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static inline void ConstraintLayout(androidx.constraintlayout.compose.ConstraintSet constraintSet, optional androidx.compose.ui.Modifier modifier, optional int optimizationLevel, optional boolean animateChanges, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function0<kotlin.Unit>? finishedAnimationListener, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static androidx.constraintlayout.compose.ConstraintSet ConstraintSet(@org.intellij.lang.annotations.Language("json5") String content, optional @org.intellij.lang.annotations.Language("json5") String? overrideVariables);
- method public static androidx.constraintlayout.compose.ConstraintSet ConstraintSet(@org.intellij.lang.annotations.Language("json5") String jsonContent);
- method public static androidx.constraintlayout.compose.ConstraintSet ConstraintSet(androidx.constraintlayout.compose.ConstraintSet extendConstraintSet, @org.intellij.lang.annotations.Language("json5") String jsonContent);
- method public static androidx.constraintlayout.compose.ConstraintSet ConstraintSet(kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.ConstraintSetScope,kotlin.Unit> description);
- method public static androidx.constraintlayout.compose.ConstraintSet ConstraintSet(androidx.constraintlayout.compose.ConstraintSet extendConstraintSet, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.ConstraintSetScope,kotlin.Unit> description);
- method public static androidx.constraintlayout.compose.Dimension.MaxCoercible atLeast(androidx.constraintlayout.compose.Dimension.Coercible, float dp);
- method public static androidx.constraintlayout.compose.Dimension atLeast(androidx.constraintlayout.compose.Dimension.MinCoercible, float dp);
- method @Deprecated public static androidx.constraintlayout.compose.Dimension atLeastWrapContent(androidx.constraintlayout.compose.Dimension.MinCoercible, float dp);
- method public static androidx.constraintlayout.compose.Dimension.MinCoercible atMost(androidx.constraintlayout.compose.Dimension.Coercible, float dp);
- method public static androidx.constraintlayout.compose.Dimension atMost(androidx.constraintlayout.compose.Dimension.MaxCoercible, float dp);
- method public static androidx.constraintlayout.compose.Dimension.MaxCoercible getAtLeastWrapContent(androidx.constraintlayout.compose.Dimension.Coercible);
- method public static androidx.constraintlayout.compose.Dimension getAtLeastWrapContent(androidx.constraintlayout.compose.Dimension.MinCoercible);
- method public static androidx.constraintlayout.compose.Dimension.MinCoercible getAtMostWrapContent(androidx.constraintlayout.compose.Dimension.Coercible);
- method public static androidx.constraintlayout.compose.Dimension getAtMostWrapContent(androidx.constraintlayout.compose.Dimension.MaxCoercible);
- }
-
- @androidx.compose.foundation.layout.LayoutScopeMarker public final class ConstraintLayoutScope extends androidx.constraintlayout.compose.ConstraintLayoutBaseScope {
- method @androidx.compose.runtime.Stable public androidx.compose.ui.Modifier constrainAs(androidx.compose.ui.Modifier, androidx.constraintlayout.compose.ConstrainedLayoutReference ref, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.ConstrainScope,kotlin.Unit> constrainBlock);
- method public androidx.constraintlayout.compose.ConstrainedLayoutReference createRef();
- method @androidx.compose.runtime.Stable public androidx.constraintlayout.compose.ConstraintLayoutScope.ConstrainedLayoutReferences createRefs();
- }
-
- public final class ConstraintLayoutScope.ConstrainedLayoutReferences {
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component1();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component10();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component11();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component12();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component13();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component14();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component15();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component16();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component2();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component3();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component4();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component5();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component6();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component7();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component8();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component9();
- }
-
- public final class ConstraintLayoutTagKt {
- method public static Object? getConstraintLayoutId(androidx.compose.ui.layout.Measurable);
- method public static Object? getConstraintLayoutTag(androidx.compose.ui.layout.Measurable);
- method public static androidx.compose.ui.Modifier layoutId(androidx.compose.ui.Modifier, String layoutId, optional String? tag);
- }
-
- public interface ConstraintLayoutTagParentData {
- method public String getConstraintLayoutId();
- method public String getConstraintLayoutTag();
- property public abstract String constraintLayoutId;
- property public abstract String constraintLayoutTag;
- }
-
- @androidx.compose.runtime.Immutable @kotlin.jvm.JvmDefaultWithCompatibility public interface ConstraintSet {
- method public void applyTo(androidx.constraintlayout.compose.State state, java.util.List<? extends androidx.compose.ui.layout.Measurable> measurables);
- method public default void applyTo(androidx.constraintlayout.core.state.Transition transition, int type);
- method public default boolean isDirty(java.util.List<? extends androidx.compose.ui.layout.Measurable> measurables);
- method public default androidx.constraintlayout.compose.ConstraintSet override(String name, float value);
- }
-
- public final class ConstraintSetRef {
- method public androidx.constraintlayout.compose.ConstraintSetRef copy(String name);
- }
-
- @androidx.compose.foundation.layout.LayoutScopeMarker public final class ConstraintSetScope extends androidx.constraintlayout.compose.ConstraintLayoutBaseScope {
- method public androidx.constraintlayout.compose.ConstrainedLayoutReference createRefFor(Object id);
- method public androidx.constraintlayout.compose.ConstraintSetScope.ConstrainedLayoutReferences createRefsFor(java.lang.Object... ids);
- }
-
- public final class ConstraintSetScope.ConstrainedLayoutReferences {
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component1();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component10();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component11();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component12();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component13();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component14();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component15();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component16();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component2();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component3();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component4();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component5();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component6();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component7();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component8();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component9();
- }
-
- public final class CurveFit {
- method public String getName();
- property public String name;
- field public static final androidx.constraintlayout.compose.CurveFit.Companion Companion;
- }
-
- public static final class CurveFit.Companion {
- method public androidx.constraintlayout.compose.CurveFit getLinear();
- method public androidx.constraintlayout.compose.CurveFit getSpline();
- property public final androidx.constraintlayout.compose.CurveFit Linear;
- property public final androidx.constraintlayout.compose.CurveFit Spline;
- }
-
- @kotlin.jvm.JvmInline public final value class DebugFlags {
- ctor public DebugFlags(optional boolean showBounds, optional boolean showPaths, optional boolean showKeyPositions);
- method public boolean getShowBounds();
- method public boolean getShowKeyPositions();
- method public boolean getShowPaths();
- property public final boolean showBounds;
- property public final boolean showKeyPositions;
- property public final boolean showPaths;
- field public static final androidx.constraintlayout.compose.DebugFlags.Companion Companion;
- }
-
- public static final class DebugFlags.Companion {
- method public int getAll();
- method public int getNone();
- property public final int All;
- property public final int None;
- }
-
- public final class DesignElements {
- method public void define(String name, kotlin.jvm.functions.Function2<? super java.lang.String,? super java.util.HashMap<java.lang.String,java.lang.String>,kotlin.Unit> function);
- method public java.util.HashMap<java.lang.String,kotlin.jvm.functions.Function2<java.lang.String,java.util.HashMap<java.lang.String,java.lang.String>,kotlin.Unit>> getMap();
- method public void setMap(java.util.HashMap<java.lang.String,kotlin.jvm.functions.Function2<java.lang.String,java.util.HashMap<java.lang.String,java.lang.String>,kotlin.Unit>>);
- property public final java.util.HashMap<java.lang.String,kotlin.jvm.functions.Function2<java.lang.String,java.util.HashMap<java.lang.String,java.lang.String>,kotlin.Unit>> map;
- field public static final androidx.constraintlayout.compose.DesignElements INSTANCE;
- }
-
- public interface DesignInfoProvider {
- method public String getDesignInfo(int startX, int startY, String args);
- }
-
- public interface Dimension {
- field public static final androidx.constraintlayout.compose.Dimension.Companion Companion;
- }
-
- public static interface Dimension.Coercible extends androidx.constraintlayout.compose.Dimension {
- }
-
- public static final class Dimension.Companion {
- method public androidx.constraintlayout.compose.Dimension.Coercible getFillToConstraints();
- method public androidx.constraintlayout.compose.Dimension getMatchParent();
- method public androidx.constraintlayout.compose.Dimension.Coercible getPreferredWrapContent();
- method public androidx.constraintlayout.compose.Dimension getWrapContent();
- method public androidx.constraintlayout.compose.Dimension percent(float percent);
- method public androidx.constraintlayout.compose.Dimension.MinCoercible preferredValue(float dp);
- method public androidx.constraintlayout.compose.Dimension ratio(String ratio);
- method public androidx.constraintlayout.compose.Dimension value(float dp);
- property public final androidx.constraintlayout.compose.Dimension.Coercible fillToConstraints;
- property public final androidx.constraintlayout.compose.Dimension matchParent;
- property public final androidx.constraintlayout.compose.Dimension.Coercible preferredWrapContent;
- property public final androidx.constraintlayout.compose.Dimension wrapContent;
- }
-
- public static interface Dimension.MaxCoercible extends androidx.constraintlayout.compose.Dimension {
- }
-
- public static interface Dimension.MinCoercible extends androidx.constraintlayout.compose.Dimension {
- }
-
- public final class Easing {
- method public String getName();
- property public String name;
- field public static final androidx.constraintlayout.compose.Easing.Companion Companion;
- }
-
- public static final class Easing.Companion {
- method public androidx.constraintlayout.compose.Easing cubic(float x1, float y1, float x2, float y2);
- method public androidx.constraintlayout.compose.Easing getAccelerate();
- method public androidx.constraintlayout.compose.Easing getAnticipate();
- method public androidx.constraintlayout.compose.Easing getDecelerate();
- method public androidx.constraintlayout.compose.Easing getLinear();
- method public androidx.constraintlayout.compose.Easing getOvershoot();
- method public androidx.constraintlayout.compose.Easing getStandard();
- property public final androidx.constraintlayout.compose.Easing Accelerate;
- property public final androidx.constraintlayout.compose.Easing Anticipate;
- property public final androidx.constraintlayout.compose.Easing Decelerate;
- property public final androidx.constraintlayout.compose.Easing Linear;
- property public final androidx.constraintlayout.compose.Easing Overshoot;
- property public final androidx.constraintlayout.compose.Easing Standard;
- }
-
- @kotlin.RequiresOptIn(message="MotionLayout API is experimental and it is likely to change.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalMotionApi {
- }
-
- @androidx.compose.runtime.Immutable public final class FlowStyle {
- field public static final androidx.constraintlayout.compose.FlowStyle.Companion Companion;
- }
-
- public static final class FlowStyle.Companion {
- method public androidx.constraintlayout.compose.FlowStyle getPacked();
- method public androidx.constraintlayout.compose.FlowStyle getSpread();
- method public androidx.constraintlayout.compose.FlowStyle getSpreadInside();
- property public final androidx.constraintlayout.compose.FlowStyle Packed;
- property public final androidx.constraintlayout.compose.FlowStyle Spread;
- property public final androidx.constraintlayout.compose.FlowStyle SpreadInside;
- }
-
- @androidx.compose.runtime.Immutable public final class GridFlag {
- field public static final androidx.constraintlayout.compose.GridFlag.Companion Companion;
- }
-
- public static final class GridFlag.Companion {
- method public androidx.constraintlayout.compose.GridFlag getSpansRespectWidgetOrder();
- method public androidx.constraintlayout.compose.GridFlag getSubGridByColRow();
- property public final androidx.constraintlayout.compose.GridFlag SpansRespectWidgetOrder;
- property public final androidx.constraintlayout.compose.GridFlag SubGridByColRow;
- }
-
- @androidx.compose.runtime.Immutable public final class HorizontalAlign {
- field public static final androidx.constraintlayout.compose.HorizontalAlign.Companion Companion;
- }
-
- public static final class HorizontalAlign.Companion {
- method public androidx.constraintlayout.compose.HorizontalAlign getCenter();
- method public androidx.constraintlayout.compose.HorizontalAlign getEnd();
- method public androidx.constraintlayout.compose.HorizontalAlign getStart();
- property public final androidx.constraintlayout.compose.HorizontalAlign Center;
- property public final androidx.constraintlayout.compose.HorizontalAlign End;
- property public final androidx.constraintlayout.compose.HorizontalAlign Start;
- }
-
- @kotlin.jvm.JvmDefaultWithCompatibility public interface HorizontalAnchorable {
- method public void linkTo(androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor anchor, optional float margin, optional float goneMargin);
- method public void linkTo(androidx.constraintlayout.compose.ConstraintLayoutBaseScope.BaselineAnchor anchor, optional float margin, optional float goneMargin);
- }
-
- @androidx.compose.runtime.Stable public final class HorizontalChainReference extends androidx.constraintlayout.compose.LayoutReference {
- method public androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor getAbsoluteLeft();
- method public androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor getAbsoluteRight();
- method public androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor getEnd();
- method public androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor getStart();
- property public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor absoluteLeft;
- property public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor absoluteRight;
- property public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor end;
- property public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor start;
- }
-
- @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Stable public final class HorizontalChainScope {
- method public androidx.constraintlayout.compose.VerticalAnchorable getAbsoluteLeft();
- method public androidx.constraintlayout.compose.VerticalAnchorable getAbsoluteRight();
- method public androidx.constraintlayout.compose.VerticalAnchorable getEnd();
- method public androidx.constraintlayout.compose.ConstrainedLayoutReference getParent();
- method public androidx.constraintlayout.compose.VerticalAnchorable getStart();
- property public final androidx.constraintlayout.compose.VerticalAnchorable absoluteLeft;
- property public final androidx.constraintlayout.compose.VerticalAnchorable absoluteRight;
- property public final androidx.constraintlayout.compose.VerticalAnchorable end;
- property public final androidx.constraintlayout.compose.ConstrainedLayoutReference parent;
- property public final androidx.constraintlayout.compose.VerticalAnchorable start;
- }
-
- public final class KeyAttributeScope extends androidx.constraintlayout.compose.BaseKeyFrameScope {
- method public float getAlpha();
- method public float getRotationX();
- method public float getRotationY();
- method public float getRotationZ();
- method public float getScaleX();
- method public float getScaleY();
- method public float getTranslationX();
- method public float getTranslationY();
- method public float getTranslationZ();
- method public void setAlpha(float);
- method public void setRotationX(float);
- method public void setRotationY(float);
- method public void setRotationZ(float);
- method public void setScaleX(float);
- method public void setScaleY(float);
- method public void setTranslationX(float);
- method public void setTranslationY(float);
- method public void setTranslationZ(float);
- property public final float alpha;
- property public final float rotationX;
- property public final float rotationY;
- property public final float rotationZ;
- property public final float scaleX;
- property public final float scaleY;
- property public final float translationX;
- property public final float translationY;
- property public final float translationZ;
- }
-
- public final class KeyAttributesScope extends androidx.constraintlayout.compose.BaseKeyFramesScope {
- method public void frame(@IntRange(from=0L, to=100L) int frame, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.KeyAttributeScope,kotlin.Unit> keyFrameContent);
- }
-
- public final class KeyCycleScope extends androidx.constraintlayout.compose.BaseKeyFrameScope {
- method public float getAlpha();
- method public float getOffset();
- method public float getPeriod();
- method public float getPhase();
- method public float getRotationX();
- method public float getRotationY();
- method public float getRotationZ();
- method public float getScaleX();
- method public float getScaleY();
- method public float getTranslationX();
- method public float getTranslationY();
- method public float getTranslationZ();
- method public void setAlpha(float);
- method public void setOffset(float);
- method public void setPeriod(float);
- method public void setPhase(float);
- method public void setRotationX(float);
- method public void setRotationY(float);
- method public void setRotationZ(float);
- method public void setScaleX(float);
- method public void setScaleY(float);
- method public void setTranslationX(float);
- method public void setTranslationY(float);
- method public void setTranslationZ(float);
- property public final float alpha;
- property public final float offset;
- property public final float period;
- property public final float phase;
- property public final float rotationX;
- property public final float rotationY;
- property public final float rotationZ;
- property public final float scaleX;
- property public final float scaleY;
- property public final float translationX;
- property public final float translationY;
- property public final float translationZ;
- }
-
- public final class KeyCyclesScope extends androidx.constraintlayout.compose.BaseKeyFramesScope {
- method public void frame(@IntRange(from=0L, to=100L) int frame, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.KeyCycleScope,kotlin.Unit> keyFrameContent);
- }
-
- public final class KeyPositionScope extends androidx.constraintlayout.compose.BaseKeyFrameScope {
- method public androidx.constraintlayout.compose.CurveFit? getCurveFit();
- method public float getPercentHeight();
- method public float getPercentWidth();
- method public float getPercentX();
- method public float getPercentY();
- method public void setCurveFit(androidx.constraintlayout.compose.CurveFit?);
- method public void setPercentHeight(float);
- method public void setPercentWidth(float);
- method public void setPercentX(float);
- method public void setPercentY(float);
- property public final androidx.constraintlayout.compose.CurveFit? curveFit;
- property public final float percentHeight;
- property public final float percentWidth;
- property public final float percentX;
- property public final float percentY;
- }
-
- public final class KeyPositionsScope extends androidx.constraintlayout.compose.BaseKeyFramesScope {
- method public void frame(@IntRange(from=0L, to=100L) int frame, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.KeyPositionScope,kotlin.Unit> keyFrameContent);
- method public androidx.constraintlayout.compose.RelativePosition getType();
- method public void setType(androidx.constraintlayout.compose.RelativePosition);
- property public final androidx.constraintlayout.compose.RelativePosition type;
- }
-
- public enum LayoutInfoFlags {
- method public static androidx.constraintlayout.compose.LayoutInfoFlags valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
- method public static androidx.constraintlayout.compose.LayoutInfoFlags[] values();
- enum_constant public static final androidx.constraintlayout.compose.LayoutInfoFlags BOUNDS;
- enum_constant public static final androidx.constraintlayout.compose.LayoutInfoFlags NONE;
- }
-
- public interface LayoutInformationReceiver {
- method public androidx.constraintlayout.compose.MotionLayoutDebugFlags getForcedDrawDebug();
- method public int getForcedHeight();
- method public float getForcedProgress();
- method public int getForcedWidth();
- method public androidx.constraintlayout.compose.LayoutInfoFlags getLayoutInformationMode();
- method public void onNewProgress(float progress);
- method public void resetForcedProgress();
- method public void setLayoutInformation(String information);
- method public void setUpdateFlag(androidx.compose.runtime.MutableState<java.lang.Long> needsUpdate);
- }
-
- @androidx.compose.runtime.Stable public abstract class LayoutReference {
- }
-
- public final class MotionCarouselKt {
- method @androidx.compose.runtime.Composable public static void ItemHolder(int i, String slotPrefix, boolean showSlot, kotlin.jvm.functions.Function0<kotlin.Unit> function);
- method @androidx.compose.runtime.Composable public static void MotionCarousel(androidx.constraintlayout.compose.MotionScene motionScene, int initialSlotIndex, int numSlots, optional String backwardTransition, optional String forwardTransition, optional String slotPrefix, optional boolean showSlots, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionCarouselScope,kotlin.Unit> content);
- method public static inline <T> void items(androidx.constraintlayout.compose.MotionCarouselScope, java.util.List<? extends T> items, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
- method public static inline <T> void itemsWithProperties(androidx.constraintlayout.compose.MotionCarouselScope, java.util.List<? extends T> items, kotlin.jvm.functions.Function2<? super T,? super androidx.compose.runtime.State<androidx.constraintlayout.compose.MotionLayoutScope.MotionProperties>,kotlin.Unit> itemContent);
- }
-
- public interface MotionCarouselScope {
- method public void items(int count, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> itemContent);
- method public void itemsWithProperties(int count, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super androidx.compose.runtime.State<androidx.constraintlayout.compose.MotionLayoutScope.MotionProperties>,kotlin.Unit> itemContent);
- }
-
- public interface MotionItemsProvider {
- method public int count();
- method public kotlin.jvm.functions.Function0<kotlin.Unit> getContent(int index);
- method public kotlin.jvm.functions.Function0<kotlin.Unit> getContent(int index, androidx.compose.runtime.State<androidx.constraintlayout.compose.MotionLayoutScope.MotionProperties> properties);
- method public boolean hasItemsWithProperties();
- }
-
- public enum MotionLayoutDebugFlags {
- method public static androidx.constraintlayout.compose.MotionLayoutDebugFlags valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
- method public static androidx.constraintlayout.compose.MotionLayoutDebugFlags[] values();
- enum_constant public static final androidx.constraintlayout.compose.MotionLayoutDebugFlags NONE;
- enum_constant public static final androidx.constraintlayout.compose.MotionLayoutDebugFlags SHOW_ALL;
- enum_constant public static final androidx.constraintlayout.compose.MotionLayoutDebugFlags UNKNOWN;
- }
-
- @Deprecated public enum MotionLayoutFlag {
- method @Deprecated public static androidx.constraintlayout.compose.MotionLayoutFlag valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
- method @Deprecated public static androidx.constraintlayout.compose.MotionLayoutFlag[] values();
- enum_constant @Deprecated public static final androidx.constraintlayout.compose.MotionLayoutFlag Default;
- enum_constant @Deprecated public static final androidx.constraintlayout.compose.MotionLayoutFlag FullMeasure;
- }
-
- public final class MotionLayoutKt {
- method @androidx.compose.runtime.Composable public static inline void MotionLayout(androidx.constraintlayout.compose.ConstraintSet start, androidx.constraintlayout.compose.ConstraintSet end, float progress, optional androidx.compose.ui.Modifier modifier, optional androidx.constraintlayout.compose.Transition? transition, optional int debugFlags, optional int optimizationLevel, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static inline void MotionLayout(androidx.constraintlayout.compose.MotionScene motionScene, float progress, optional androidx.compose.ui.Modifier modifier, optional String transitionName, optional int debugFlags, optional int optimizationLevel, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static inline void MotionLayout(androidx.constraintlayout.compose.MotionScene motionScene, String? constraintSetName, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? finishedAnimationListener, optional int debugFlags, optional int optimizationLevel, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit> content);
- }
-
- @androidx.compose.foundation.layout.LayoutScopeMarker public final class MotionLayoutScope {
- method public long customColor(String id, String name);
- method public float customDistance(String id, String name);
- method public float customFloat(String id, String name);
- method public long customFontSize(String id, String name);
- method public int customInt(String id, String name);
- method public androidx.constraintlayout.compose.MotionLayoutScope.CustomProperties customProperties(String id);
- method @Deprecated public long motionColor(String id, String name);
- method @Deprecated public float motionDistance(String id, String name);
- method @Deprecated public float motionFloat(String id, String name);
- method @Deprecated public long motionFontSize(String id, String name);
- method @Deprecated public int motionInt(String id, String name);
- method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.constraintlayout.compose.MotionLayoutScope.MotionProperties> motionProperties(String id);
- method @Deprecated public androidx.constraintlayout.compose.MotionLayoutScope.MotionProperties motionProperties(String id, String tag);
- method public androidx.compose.ui.Modifier onStartEndBoundsChanged(androidx.compose.ui.Modifier, Object layoutId, kotlin.jvm.functions.Function2<? super androidx.compose.ui.geometry.Rect,? super androidx.compose.ui.geometry.Rect,kotlin.Unit> onBoundsChanged);
- }
-
- public final class MotionLayoutScope.CustomProperties {
- method public long color(String name);
- method public float distance(String name);
- method public float float(String name);
- method public long fontSize(String name);
- method public int int(String name);
- }
-
- public final class MotionLayoutScope.MotionProperties {
- method public long color(String name);
- method public float distance(String name);
- method public float float(String name);
- method public long fontSize(String name);
- method public String id();
- method public int int(String name);
- method public String? tag();
- }
-
- @androidx.compose.runtime.Immutable public interface MotionScene extends androidx.constraintlayout.core.state.CoreMotionScene {
- method public androidx.constraintlayout.compose.ConstraintSet? getConstraintSetInstance(String name);
- method public androidx.constraintlayout.compose.Transition? getTransitionInstance(String name);
- }
-
- public final class MotionSceneKt {
- method @androidx.compose.runtime.Composable public static androidx.constraintlayout.compose.MotionScene MotionScene(@org.intellij.lang.annotations.Language("json5") String content);
- }
-
- public final class MotionSceneScope {
- method public androidx.constraintlayout.compose.ConstraintSetRef addConstraintSet(androidx.constraintlayout.compose.ConstraintSet constraintSet, optional String? name);
- method public void addTransition(androidx.constraintlayout.compose.Transition transition, optional String? name);
- method public androidx.constraintlayout.compose.ConstraintSetRef constraintSet(optional String? name, optional androidx.constraintlayout.compose.ConstraintSetRef? extendConstraintSet, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.ConstraintSetScope,kotlin.Unit> constraintSetContent);
- method public androidx.constraintlayout.compose.ConstrainedLayoutReference createRefFor(Object id);
- method public androidx.constraintlayout.compose.MotionSceneScope.ConstrainedLayoutReferences createRefsFor(java.lang.Object... ids);
- method public void customColor(androidx.constraintlayout.compose.ConstrainScope, String name, long value);
- method public void customColor(androidx.constraintlayout.compose.KeyAttributeScope, String name, long value);
- method public void customDistance(androidx.constraintlayout.compose.ConstrainScope, String name, float value);
- method public void customDistance(androidx.constraintlayout.compose.KeyAttributeScope, String name, float value);
- method public void customFloat(androidx.constraintlayout.compose.ConstrainScope, String name, float value);
- method public void customFloat(androidx.constraintlayout.compose.KeyAttributeScope, String name, float value);
- method public void customFontSize(androidx.constraintlayout.compose.ConstrainScope, String name, long value);
- method public void customFontSize(androidx.constraintlayout.compose.KeyAttributeScope, String name, long value);
- method public void customInt(androidx.constraintlayout.compose.ConstrainScope, String name, int value);
- method public void customInt(androidx.constraintlayout.compose.KeyAttributeScope, String name, int value);
- method public void defaultTransition(androidx.constraintlayout.compose.ConstraintSetRef from, androidx.constraintlayout.compose.ConstraintSetRef to, optional kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.TransitionScope,kotlin.Unit> transitionContent);
- method public float getStaggeredWeight(androidx.constraintlayout.compose.ConstrainScope);
- method public void setStaggeredWeight(androidx.constraintlayout.compose.ConstrainScope, float);
- method public void transition(androidx.constraintlayout.compose.ConstraintSetRef from, androidx.constraintlayout.compose.ConstraintSetRef to, optional String? name, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.TransitionScope,kotlin.Unit> transitionContent);
- }
-
- public final class MotionSceneScope.ConstrainedLayoutReferences {
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component1();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component10();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component11();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component12();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component13();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component14();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component15();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component16();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component2();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component3();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component4();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component5();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component6();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component7();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component8();
- method public operator androidx.constraintlayout.compose.ConstrainedLayoutReference component9();
- }
-
- public final class MotionSceneScopeKt {
- method public static androidx.constraintlayout.compose.MotionScene MotionScene(kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionSceneScope,kotlin.Unit> motionSceneContent);
- }
-
- public final class OnSwipe {
- ctor public OnSwipe(androidx.constraintlayout.compose.ConstrainedLayoutReference anchor, androidx.constraintlayout.compose.SwipeSide side, androidx.constraintlayout.compose.SwipeDirection direction, optional float dragScale, optional float dragThreshold, optional androidx.constraintlayout.compose.ConstrainedLayoutReference? dragAround, optional androidx.constraintlayout.compose.ConstrainedLayoutReference? limitBoundsTo, optional androidx.constraintlayout.compose.SwipeTouchUp onTouchUp, optional androidx.constraintlayout.compose.SwipeMode mode);
- method public androidx.constraintlayout.compose.ConstrainedLayoutReference getAnchor();
- method public androidx.constraintlayout.compose.SwipeDirection getDirection();
- method public androidx.constraintlayout.compose.ConstrainedLayoutReference? getDragAround();
- method public float getDragScale();
- method public float getDragThreshold();
- method public androidx.constraintlayout.compose.ConstrainedLayoutReference? getLimitBoundsTo();
- method public androidx.constraintlayout.compose.SwipeMode getMode();
- method public androidx.constraintlayout.compose.SwipeTouchUp getOnTouchUp();
- method public androidx.constraintlayout.compose.SwipeSide getSide();
- property public final androidx.constraintlayout.compose.ConstrainedLayoutReference anchor;
- property public final androidx.constraintlayout.compose.SwipeDirection direction;
- property public final androidx.constraintlayout.compose.ConstrainedLayoutReference? dragAround;
- property public final float dragScale;
- property public final float dragThreshold;
- property public final androidx.constraintlayout.compose.ConstrainedLayoutReference? limitBoundsTo;
- property public final androidx.constraintlayout.compose.SwipeMode mode;
- property public final androidx.constraintlayout.compose.SwipeTouchUp onTouchUp;
- property public final androidx.constraintlayout.compose.SwipeSide side;
- }
-
- public final class RelativePosition {
- method public String getName();
- property public String name;
- field public static final androidx.constraintlayout.compose.RelativePosition.Companion Companion;
- }
-
- public static final class RelativePosition.Companion {
- method public androidx.constraintlayout.compose.RelativePosition getDelta();
- method public androidx.constraintlayout.compose.RelativePosition getParent();
- method public androidx.constraintlayout.compose.RelativePosition getPath();
- property public final androidx.constraintlayout.compose.RelativePosition Delta;
- property public final androidx.constraintlayout.compose.RelativePosition Parent;
- property public final androidx.constraintlayout.compose.RelativePosition Path;
- }
-
- @kotlin.jvm.JvmInline public final value class Skip {
- ctor public Skip(String description);
- ctor public Skip(int position, int rows, int columns);
- ctor public Skip(int position, int size);
- method public String getDescription();
- property public final String description;
- }
-
- @kotlin.jvm.JvmInline public final value class Span {
- ctor public Span(String description);
- ctor public Span(int position, int rows, int columns);
- ctor public Span(int position, int size);
- method public String getDescription();
- property public final String description;
- }
-
- public final class SpringBoundary {
- method public String getName();
- property public final String name;
- field public static final androidx.constraintlayout.compose.SpringBoundary.Companion Companion;
- }
-
- public static final class SpringBoundary.Companion {
- method public androidx.constraintlayout.compose.SpringBoundary getBounceBoth();
- method public androidx.constraintlayout.compose.SpringBoundary getBounceEnd();
- method public androidx.constraintlayout.compose.SpringBoundary getBounceStart();
- method public androidx.constraintlayout.compose.SpringBoundary getOvershoot();
- property public final androidx.constraintlayout.compose.SpringBoundary BounceBoth;
- property public final androidx.constraintlayout.compose.SpringBoundary BounceEnd;
- property public final androidx.constraintlayout.compose.SpringBoundary BounceStart;
- property public final androidx.constraintlayout.compose.SpringBoundary Overshoot;
- }
-
- public final class State extends androidx.constraintlayout.core.state.State {
- ctor public State(androidx.compose.ui.unit.Density density);
- method public androidx.compose.ui.unit.Density getDensity();
- method @Deprecated public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
- method public long getRootIncomingConstraints();
- method @Deprecated public void setLayoutDirection(androidx.compose.ui.unit.LayoutDirection);
- method public void setRootIncomingConstraints(long);
- property public final androidx.compose.ui.unit.Density density;
- property @Deprecated public final androidx.compose.ui.unit.LayoutDirection layoutDirection;
- property public final long rootIncomingConstraints;
- }
-
- public final class SwipeDirection {
- method public String getName();
- property public final String name;
- field public static final androidx.constraintlayout.compose.SwipeDirection.Companion Companion;
- }
-
- public static final class SwipeDirection.Companion {
- method public androidx.constraintlayout.compose.SwipeDirection getClockwise();
- method public androidx.constraintlayout.compose.SwipeDirection getCounterclockwise();
- method public androidx.constraintlayout.compose.SwipeDirection getDown();
- method public androidx.constraintlayout.compose.SwipeDirection getEnd();
- method public androidx.constraintlayout.compose.SwipeDirection getLeft();
- method public androidx.constraintlayout.compose.SwipeDirection getRight();
- method public androidx.constraintlayout.compose.SwipeDirection getStart();
- method public androidx.constraintlayout.compose.SwipeDirection getUp();
- property public final androidx.constraintlayout.compose.SwipeDirection Clockwise;
- property public final androidx.constraintlayout.compose.SwipeDirection Counterclockwise;
- property public final androidx.constraintlayout.compose.SwipeDirection Down;
- property public final androidx.constraintlayout.compose.SwipeDirection End;
- property public final androidx.constraintlayout.compose.SwipeDirection Left;
- property public final androidx.constraintlayout.compose.SwipeDirection Right;
- property public final androidx.constraintlayout.compose.SwipeDirection Start;
- property public final androidx.constraintlayout.compose.SwipeDirection Up;
- }
-
- public final class SwipeMode {
- method public String getName();
- property public final String name;
- field public static final androidx.constraintlayout.compose.SwipeMode.Companion Companion;
- }
-
- public static final class SwipeMode.Companion {
- method public androidx.constraintlayout.compose.SwipeMode getSpring();
- method public androidx.constraintlayout.compose.SwipeMode getVelocity();
- method public androidx.constraintlayout.compose.SwipeMode spring(optional float mass, optional float stiffness, optional float damping, optional float threshold, optional androidx.constraintlayout.compose.SpringBoundary boundary);
- method public androidx.constraintlayout.compose.SwipeMode velocity(optional float maxVelocity, optional float maxAcceleration);
- property public final androidx.constraintlayout.compose.SwipeMode Spring;
- property public final androidx.constraintlayout.compose.SwipeMode Velocity;
- }
-
- public final class SwipeSide {
- method public String getName();
- property public final String name;
- field public static final androidx.constraintlayout.compose.SwipeSide.Companion Companion;
- }
-
- public static final class SwipeSide.Companion {
- method public androidx.constraintlayout.compose.SwipeSide getBottom();
- method public androidx.constraintlayout.compose.SwipeSide getEnd();
- method public androidx.constraintlayout.compose.SwipeSide getLeft();
- method public androidx.constraintlayout.compose.SwipeSide getMiddle();
- method public androidx.constraintlayout.compose.SwipeSide getRight();
- method public androidx.constraintlayout.compose.SwipeSide getStart();
- method public androidx.constraintlayout.compose.SwipeSide getTop();
- property public final androidx.constraintlayout.compose.SwipeSide Bottom;
- property public final androidx.constraintlayout.compose.SwipeSide End;
- property public final androidx.constraintlayout.compose.SwipeSide Left;
- property public final androidx.constraintlayout.compose.SwipeSide Middle;
- property public final androidx.constraintlayout.compose.SwipeSide Right;
- property public final androidx.constraintlayout.compose.SwipeSide Start;
- property public final androidx.constraintlayout.compose.SwipeSide Top;
- }
-
- public final class SwipeTouchUp {
- method public String getName();
- property public final String name;
- field public static final androidx.constraintlayout.compose.SwipeTouchUp.Companion Companion;
- }
-
- public static final class SwipeTouchUp.Companion {
- method public androidx.constraintlayout.compose.SwipeTouchUp getAutoComplete();
- method public androidx.constraintlayout.compose.SwipeTouchUp getDecelerate();
- method public androidx.constraintlayout.compose.SwipeTouchUp getNeverCompleteEnd();
- method public androidx.constraintlayout.compose.SwipeTouchUp getNeverCompleteStart();
- method public androidx.constraintlayout.compose.SwipeTouchUp getStop();
- method public androidx.constraintlayout.compose.SwipeTouchUp getToEnd();
- method public androidx.constraintlayout.compose.SwipeTouchUp getToStart();
- property public final androidx.constraintlayout.compose.SwipeTouchUp AutoComplete;
- property public final androidx.constraintlayout.compose.SwipeTouchUp Decelerate;
- property public final androidx.constraintlayout.compose.SwipeTouchUp NeverCompleteEnd;
- property public final androidx.constraintlayout.compose.SwipeTouchUp NeverCompleteStart;
- property public final androidx.constraintlayout.compose.SwipeTouchUp Stop;
- property public final androidx.constraintlayout.compose.SwipeTouchUp ToEnd;
- property public final androidx.constraintlayout.compose.SwipeTouchUp ToStart;
- }
-
- public final class ToolingUtilsKt {
- method public static androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.constraintlayout.compose.DesignInfoProvider> getDesignInfoDataKey();
- property public static final androidx.compose.ui.semantics.SemanticsPropertyKey<androidx.constraintlayout.compose.DesignInfoProvider> DesignInfoDataKey;
- }
-
- @androidx.compose.runtime.Immutable public interface Transition {
- method public String getEndConstraintSetId();
- method public String getStartConstraintSetId();
- }
-
- public final class TransitionKt {
- method public static androidx.constraintlayout.compose.Transition Transition(@org.intellij.lang.annotations.Language("json5") String content);
- }
-
- public final class TransitionScope {
- method public androidx.constraintlayout.compose.ConstrainedLayoutReference createRefFor(Object id);
- method public androidx.constraintlayout.compose.Arc getMotionArc();
- method public androidx.constraintlayout.compose.OnSwipe? getOnSwipe();
- method public float getStaggered();
- method public void keyAttributes(androidx.constraintlayout.compose.ConstrainedLayoutReference![] targets, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.KeyAttributesScope,kotlin.Unit> keyAttributesContent);
- method public void keyCycles(androidx.constraintlayout.compose.ConstrainedLayoutReference![] targets, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.KeyCyclesScope,kotlin.Unit> keyCyclesContent);
- method public void keyPositions(androidx.constraintlayout.compose.ConstrainedLayoutReference![] targets, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.KeyPositionsScope,kotlin.Unit> keyPositionsContent);
- method public void setMotionArc(androidx.constraintlayout.compose.Arc);
- method public void setOnSwipe(androidx.constraintlayout.compose.OnSwipe?);
- method public void setStaggered(float);
- property public final androidx.constraintlayout.compose.Arc motionArc;
- property public final androidx.constraintlayout.compose.OnSwipe? onSwipe;
- property public final float staggered;
- }
-
- public final class TransitionScopeKt {
- method public static androidx.constraintlayout.compose.Transition Transition(optional String from, optional String to, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.TransitionScope,kotlin.Unit> content);
- }
-
- @androidx.compose.runtime.Immutable public final class VerticalAlign {
- field public static final androidx.constraintlayout.compose.VerticalAlign.Companion Companion;
- }
-
- public static final class VerticalAlign.Companion {
- method public androidx.constraintlayout.compose.VerticalAlign getBaseline();
- method public androidx.constraintlayout.compose.VerticalAlign getBottom();
- method public androidx.constraintlayout.compose.VerticalAlign getCenter();
- method public androidx.constraintlayout.compose.VerticalAlign getTop();
- property public final androidx.constraintlayout.compose.VerticalAlign Baseline;
- property public final androidx.constraintlayout.compose.VerticalAlign Bottom;
- property public final androidx.constraintlayout.compose.VerticalAlign Center;
- property public final androidx.constraintlayout.compose.VerticalAlign Top;
- }
-
- @kotlin.jvm.JvmDefaultWithCompatibility public interface VerticalAnchorable {
- method public void linkTo(androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor anchor, optional float margin, optional float goneMargin);
- }
-
- @androidx.compose.runtime.Stable public final class VerticalChainReference extends androidx.constraintlayout.compose.LayoutReference {
- method public androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor getBottom();
- method public androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor getTop();
- property public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor bottom;
- property public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor top;
- }
-
- @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Stable public final class VerticalChainScope {
- method public androidx.constraintlayout.compose.HorizontalAnchorable getBottom();
- method public androidx.constraintlayout.compose.ConstrainedLayoutReference getParent();
- method public androidx.constraintlayout.compose.HorizontalAnchorable getTop();
- property public final androidx.constraintlayout.compose.HorizontalAnchorable bottom;
- property public final androidx.constraintlayout.compose.ConstrainedLayoutReference parent;
- property public final androidx.constraintlayout.compose.HorizontalAnchorable top;
- }
-
- @androidx.compose.runtime.Immutable public final class Visibility {
- field public static final androidx.constraintlayout.compose.Visibility.Companion Companion;
- }
-
- public static final class Visibility.Companion {
- method public androidx.constraintlayout.compose.Visibility getGone();
- method public androidx.constraintlayout.compose.Visibility getInvisible();
- method public androidx.constraintlayout.compose.Visibility getVisible();
- property public final androidx.constraintlayout.compose.Visibility Gone;
- property public final androidx.constraintlayout.compose.Visibility Invisible;
- property public final androidx.constraintlayout.compose.Visibility Visible;
- }
-
- @androidx.compose.runtime.Immutable public final class Wrap {
- field public static final androidx.constraintlayout.compose.Wrap.Companion Companion;
- }
-
- public static final class Wrap.Companion {
- method public androidx.constraintlayout.compose.Wrap getAligned();
- method public androidx.constraintlayout.compose.Wrap getChain();
- method public androidx.constraintlayout.compose.Wrap getNone();
- property public final androidx.constraintlayout.compose.Wrap Aligned;
- property public final androidx.constraintlayout.compose.Wrap Chain;
- property public final androidx.constraintlayout.compose.Wrap None;
- }
-
-}
-
diff --git a/constraintlayout/constraintlayout-compose/api/restricted_current.txt b/constraintlayout/constraintlayout-compose/api/restricted_current.txt
index 4c4b0d6..05b9702 100644
--- a/constraintlayout/constraintlayout-compose/api/restricted_current.txt
+++ b/constraintlayout/constraintlayout-compose/api/restricted_current.txt
@@ -61,8 +61,8 @@
@androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Stable public final class ConstrainScope {
method public androidx.constraintlayout.compose.Dimension asDimension(float);
- method public void centerAround(androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor anchor);
method public void centerAround(androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor anchor);
+ method public void centerAround(androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor anchor);
method public void centerHorizontallyTo(androidx.constraintlayout.compose.ConstrainedLayoutReference other, optional @FloatRange(from=0.0, to=1.0) float bias);
method public void centerTo(androidx.constraintlayout.compose.ConstrainedLayoutReference other);
method public void centerVerticallyTo(androidx.constraintlayout.compose.ConstrainedLayoutReference other, optional @FloatRange(from=0.0, to=1.0) float bias);
@@ -96,9 +96,9 @@
method public float getVerticalChainWeight();
method public androidx.constraintlayout.compose.Visibility getVisibility();
method public androidx.constraintlayout.compose.Dimension getWidth();
- method public void linkTo(androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor end, optional float startMargin, optional float endMargin, optional float startGoneMargin, optional float endGoneMargin, optional @FloatRange(from=0.0, to=1.0) float bias);
method public void linkTo(androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor top, androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor bottom, optional float topMargin, optional float bottomMargin, optional float topGoneMargin, optional float bottomGoneMargin, optional @FloatRange(from=0.0, to=1.0) float bias);
method public void linkTo(androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor top, androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor end, androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor bottom, optional float startMargin, optional float topMargin, optional float endMargin, optional float bottomMargin, optional float startGoneMargin, optional float topGoneMargin, optional float endGoneMargin, optional float bottomGoneMargin, optional @FloatRange(from=0.0, to=1.0) float horizontalBias, optional @FloatRange(from=0.0, to=1.0) float verticalBias);
+ method public void linkTo(androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor end, optional float startMargin, optional float endMargin, optional float startGoneMargin, optional float endGoneMargin, optional @FloatRange(from=0.0, to=1.0) float bias);
method public void resetDimensions();
method public void resetTransforms();
method public void setAlpha(float);
@@ -170,15 +170,15 @@
public abstract class ConstraintLayoutBaseScope {
ctor public ConstraintLayoutBaseScope();
method public final void applyTo(androidx.constraintlayout.compose.State state);
- method public final androidx.constraintlayout.compose.HorizontalChainScope constrain(androidx.constraintlayout.compose.HorizontalChainReference ref, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.HorizontalChainScope,kotlin.Unit> constrainBlock);
- method public final androidx.constraintlayout.compose.VerticalChainScope constrain(androidx.constraintlayout.compose.VerticalChainReference ref, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.VerticalChainScope,kotlin.Unit> constrainBlock);
method public final androidx.constraintlayout.compose.ConstrainScope constrain(androidx.constraintlayout.compose.ConstrainedLayoutReference ref, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.ConstrainScope,kotlin.Unit> constrainBlock);
method public final void constrain(androidx.constraintlayout.compose.ConstrainedLayoutReference![] refs, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.ConstrainScope,kotlin.Unit> constrainBlock);
+ method public final androidx.constraintlayout.compose.HorizontalChainScope constrain(androidx.constraintlayout.compose.HorizontalChainReference ref, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.HorizontalChainScope,kotlin.Unit> constrainBlock);
+ method public final androidx.constraintlayout.compose.VerticalChainScope constrain(androidx.constraintlayout.compose.VerticalChainReference ref, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.VerticalChainScope,kotlin.Unit> constrainBlock);
method public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor createAbsoluteLeftBarrier(androidx.constraintlayout.compose.LayoutReference![] elements, optional float margin);
method public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor createAbsoluteRightBarrier(androidx.constraintlayout.compose.LayoutReference![] elements, optional float margin);
method public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor createBottomBarrier(androidx.constraintlayout.compose.LayoutReference![] elements, optional float margin);
- method public final androidx.constraintlayout.compose.ConstrainedLayoutReference createColumn(androidx.constraintlayout.compose.LayoutReference![] elements, optional androidx.constraintlayout.compose.Skip![] skips, optional androidx.constraintlayout.compose.Span![] spans, optional int[] rowWeights, optional float verticalGap, optional float padding);
method public final androidx.constraintlayout.compose.ConstrainedLayoutReference createColumn(androidx.constraintlayout.compose.LayoutReference![] elements, optional androidx.constraintlayout.compose.Skip![] skips, optional androidx.constraintlayout.compose.Span![] spans, optional float verticalGap, optional int[] rowWeights, optional float paddingHorizontal, optional float paddingVertical);
+ method public final androidx.constraintlayout.compose.ConstrainedLayoutReference createColumn(androidx.constraintlayout.compose.LayoutReference![] elements, optional androidx.constraintlayout.compose.Skip![] skips, optional androidx.constraintlayout.compose.Span![] spans, optional int[] rowWeights, optional float verticalGap, optional float padding);
method public final androidx.constraintlayout.compose.ConstraintLayoutBaseScope.VerticalAnchor createEndBarrier(androidx.constraintlayout.compose.LayoutReference![] elements, optional float margin);
method public final androidx.constraintlayout.compose.ConstrainedLayoutReference createFlow(androidx.constraintlayout.compose.LayoutReference![]? elements, optional boolean flowVertically, optional float verticalGap, optional float horizontalGap, optional int maxElement, optional float padding, optional androidx.constraintlayout.compose.Wrap wrapMode, optional androidx.constraintlayout.compose.VerticalAlign verticalAlign, optional androidx.constraintlayout.compose.HorizontalAlign horizontalAlign, optional float horizontalFlowBias, optional float verticalFlowBias, optional androidx.constraintlayout.compose.FlowStyle verticalStyle, optional androidx.constraintlayout.compose.FlowStyle horizontalStyle);
method public final androidx.constraintlayout.compose.ConstrainedLayoutReference createFlow(androidx.constraintlayout.compose.LayoutReference![]? elements, optional boolean flowVertically, optional float verticalGap, optional float horizontalGap, optional int maxElement, optional float paddingHorizontal, optional float paddingVertical, optional androidx.constraintlayout.compose.Wrap wrapMode, optional androidx.constraintlayout.compose.VerticalAlign verticalAlign, optional androidx.constraintlayout.compose.HorizontalAlign horizontalAlign, optional float horizontalFlowBias, optional float verticalFlowBias, optional androidx.constraintlayout.compose.FlowStyle verticalStyle, optional androidx.constraintlayout.compose.FlowStyle horizontalStyle);
@@ -237,11 +237,11 @@
public final class ConstraintLayoutKt {
method @androidx.compose.runtime.Composable public static inline void ConstraintLayout(optional androidx.compose.ui.Modifier modifier, optional int optimizationLevel, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.ConstraintLayoutScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static inline void ConstraintLayout(androidx.constraintlayout.compose.ConstraintSet constraintSet, optional androidx.compose.ui.Modifier modifier, optional int optimizationLevel, optional boolean animateChanges, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function0<kotlin.Unit>? finishedAnimationListener, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static androidx.constraintlayout.compose.ConstraintSet ConstraintSet(@org.intellij.lang.annotations.Language("json5") String content, optional @org.intellij.lang.annotations.Language("json5") String? overrideVariables);
- method public static androidx.constraintlayout.compose.ConstraintSet ConstraintSet(@org.intellij.lang.annotations.Language("json5") String jsonContent);
method public static androidx.constraintlayout.compose.ConstraintSet ConstraintSet(androidx.constraintlayout.compose.ConstraintSet extendConstraintSet, @org.intellij.lang.annotations.Language("json5") String jsonContent);
- method public static androidx.constraintlayout.compose.ConstraintSet ConstraintSet(kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.ConstraintSetScope,kotlin.Unit> description);
method public static androidx.constraintlayout.compose.ConstraintSet ConstraintSet(androidx.constraintlayout.compose.ConstraintSet extendConstraintSet, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.ConstraintSetScope,kotlin.Unit> description);
+ method public static androidx.constraintlayout.compose.ConstraintSet ConstraintSet(@org.intellij.lang.annotations.Language("json5") String jsonContent);
+ method @androidx.compose.runtime.Composable public static androidx.constraintlayout.compose.ConstraintSet ConstraintSet(@org.intellij.lang.annotations.Language("json5") String content, optional @org.intellij.lang.annotations.Language("json5") String? overrideVariables);
+ method public static androidx.constraintlayout.compose.ConstraintSet ConstraintSet(kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.ConstraintSetScope,kotlin.Unit> description);
method public static androidx.constraintlayout.compose.Dimension.MaxCoercible atLeast(androidx.constraintlayout.compose.Dimension.Coercible, float dp);
method public static androidx.constraintlayout.compose.Dimension atLeast(androidx.constraintlayout.compose.Dimension.MinCoercible, float dp);
method @Deprecated public static androidx.constraintlayout.compose.Dimension atLeastWrapContent(androidx.constraintlayout.compose.Dimension.MinCoercible, float dp);
@@ -454,6 +454,9 @@
method protected final void signalUpdate();
}
+ @kotlin.RequiresOptIn(message="MotionLayout API is experimental and it is likely to change.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalMotionApi {
+ }
+
@androidx.compose.runtime.Immutable public final class FlowStyle {
field public static final androidx.constraintlayout.compose.FlowStyle.Companion Companion;
}
@@ -492,8 +495,8 @@
}
@kotlin.jvm.JvmDefaultWithCompatibility public interface HorizontalAnchorable {
- method public void linkTo(androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor anchor, optional float margin, optional float goneMargin);
method public void linkTo(androidx.constraintlayout.compose.ConstraintLayoutBaseScope.BaselineAnchor anchor, optional float margin, optional float goneMargin);
+ method public void linkTo(androidx.constraintlayout.compose.ConstraintLayoutBaseScope.HorizontalAnchor anchor, optional float margin, optional float goneMargin);
}
@androidx.compose.runtime.Stable public final class HorizontalChainReference extends androidx.constraintlayout.compose.LayoutReference {
@@ -716,9 +719,9 @@
method @androidx.compose.runtime.Composable public static inline void MotionLayout(androidx.constraintlayout.compose.ConstraintSet start, androidx.constraintlayout.compose.ConstraintSet end, float progress, optional androidx.compose.ui.Modifier modifier, optional androidx.constraintlayout.compose.Transition? transition, optional int debugFlags, optional int optimizationLevel, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static inline void MotionLayout(androidx.constraintlayout.compose.MotionScene motionScene, float progress, optional androidx.compose.ui.Modifier modifier, optional String transitionName, optional int debugFlags, optional int optimizationLevel, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static inline void MotionLayout(androidx.constraintlayout.compose.MotionScene motionScene, String? constraintSetName, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? finishedAnimationListener, optional int debugFlags, optional int optimizationLevel, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable @kotlin.PublishedApi internal static void MotionLayoutCore(androidx.constraintlayout.compose.MotionScene motionScene, String? constraintSetName, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? finishedAnimationListener, optional int debugFlags, optional int optimizationLevel, androidx.compose.runtime.State<kotlin.Unit> contentTracker, androidx.compose.ui.node.Ref<androidx.constraintlayout.compose.CompositionSource> compositionSource, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable @kotlin.PublishedApi internal static void MotionLayoutCore(androidx.constraintlayout.compose.MotionScene motionScene, float progress, String transitionName, int optimizationLevel, int debugFlags, androidx.compose.ui.Modifier modifier, androidx.compose.runtime.State<kotlin.Unit> contentTracker, androidx.compose.ui.node.Ref<androidx.constraintlayout.compose.CompositionSource> compositionSource, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable @kotlin.PublishedApi internal static void MotionLayoutCore(androidx.constraintlayout.compose.ConstraintSet start, androidx.constraintlayout.compose.ConstraintSet end, androidx.constraintlayout.compose.Transition? transition, float progress, androidx.constraintlayout.compose.LayoutInformationReceiver? informationReceiver, int optimizationLevel, boolean showBounds, boolean showPaths, boolean showKeyPositions, androidx.compose.ui.Modifier modifier, androidx.compose.runtime.State<kotlin.Unit> contentTracker, androidx.compose.ui.node.Ref<androidx.constraintlayout.compose.CompositionSource> compositionSource, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @kotlin.PublishedApi internal static void MotionLayoutCore(androidx.constraintlayout.compose.MotionScene motionScene, float progress, String transitionName, int optimizationLevel, int debugFlags, androidx.compose.ui.Modifier modifier, androidx.compose.runtime.State<kotlin.Unit> contentTracker, androidx.compose.ui.node.Ref<androidx.constraintlayout.compose.CompositionSource> compositionSource, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @kotlin.PublishedApi internal static void MotionLayoutCore(androidx.constraintlayout.compose.MotionScene motionScene, String? constraintSetName, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? finishedAnimationListener, optional int debugFlags, optional int optimizationLevel, androidx.compose.runtime.State<kotlin.Unit> contentTracker, androidx.compose.ui.node.Ref<androidx.constraintlayout.compose.CompositionSource> compositionSource, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit> content);
}
@androidx.compose.foundation.layout.LayoutScopeMarker public final class MotionLayoutScope {
@@ -848,17 +851,17 @@
}
@kotlin.jvm.JvmInline public final value class Skip {
- ctor public Skip(String description);
- ctor public Skip(int position, int rows, int columns);
ctor public Skip(int position, int size);
+ ctor public Skip(int position, int rows, int columns);
+ ctor public Skip(String description);
method public String getDescription();
property public final String description;
}
@kotlin.jvm.JvmInline public final value class Span {
- ctor public Span(String description);
- ctor public Span(int position, int rows, int columns);
ctor public Span(int position, int size);
+ ctor public Span(int position, int rows, int columns);
+ ctor public Span(String description);
method public String getDescription();
property public final String description;
}
diff --git a/constraintlayout/constraintlayout-compose/build.gradle b/constraintlayout/constraintlayout-compose/build.gradle
index 51a3271..207692f 100644
--- a/constraintlayout/constraintlayout-compose/build.gradle
+++ b/constraintlayout/constraintlayout-compose/build.gradle
@@ -99,7 +99,7 @@
}
androidx {
- name = "Android ConstraintLayout Compose Library"
+ name = "ConstraintLayout Compose"
type = LibraryType.PUBLISHED_LIBRARY
mavenVersion = LibraryVersions.CONSTRAINTLAYOUT_COMPOSE
inceptionYear = "2022"
diff --git a/constraintlayout/constraintlayout-compose/integration-tests/macrobenchmark-target/src/main/java/androidx/constraintlayout/compose/integration/macrobenchmark/target/MotionLayoutActivity.kt b/constraintlayout/constraintlayout-compose/integration-tests/macrobenchmark-target/src/main/java/androidx/constraintlayout/compose/integration/macrobenchmark/target/MotionLayoutActivity.kt
index 4e015c9..d104977 100644
--- a/constraintlayout/constraintlayout-compose/integration-tests/macrobenchmark-target/src/main/java/androidx/constraintlayout/compose/integration/macrobenchmark/target/MotionLayoutActivity.kt
+++ b/constraintlayout/constraintlayout-compose/integration-tests/macrobenchmark-target/src/main/java/androidx/constraintlayout/compose/integration/macrobenchmark/target/MotionLayoutActivity.kt
@@ -22,9 +22,6 @@
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
-import androidx.constraintlayout.compose.integration.macrobenchmark.target.newmessage.NewMotionMessagePreview
-import androidx.constraintlayout.compose.integration.macrobenchmark.target.newmessage.NewMotionMessagePreviewWithDsl
-import androidx.constraintlayout.compose.integration.macrobenchmark.target.toolbar.MotionCollapseToolbarPreview
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Surface
import androidx.compose.runtime.Recomposer
@@ -33,6 +30,9 @@
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.semantics.testTagsAsResourceId
import androidx.constraintlayout.compose.integration.macrobenchmark.target.graphs.DynamicGraphsPreview
+import androidx.constraintlayout.compose.integration.macrobenchmark.target.newmessage.NewMotionMessagePreview
+import androidx.constraintlayout.compose.integration.macrobenchmark.target.newmessage.NewMotionMessagePreviewWithDsl
+import androidx.constraintlayout.compose.integration.macrobenchmark.target.toolbar.MotionCollapseToolbarPreview
class MotionLayoutActivity : ComponentActivity() {
diff --git a/constraintlayout/constraintlayout-compose/integration-tests/macrobenchmark-target/src/main/java/androidx/constraintlayout/compose/integration/macrobenchmark/target/common/components/CardSample.kt b/constraintlayout/constraintlayout-compose/integration-tests/macrobenchmark-target/src/main/java/androidx/constraintlayout/compose/integration/macrobenchmark/target/common/components/CardSample.kt
index 30960cf..a1c4b31 100644
--- a/constraintlayout/constraintlayout-compose/integration-tests/macrobenchmark-target/src/main/java/androidx/constraintlayout/compose/integration/macrobenchmark/target/common/components/CardSample.kt
+++ b/constraintlayout/constraintlayout-compose/integration-tests/macrobenchmark-target/src/main/java/androidx/constraintlayout/compose/integration/macrobenchmark/target/common/components/CardSample.kt
@@ -28,10 +28,6 @@
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll
-import androidx.constraintlayout.compose.integration.macrobenchmark.target.common.sampledata.LoremIpsum
-import androidx.constraintlayout.compose.integration.macrobenchmark.target.common.sampledata.newHourMinuteTimeStamp
-import androidx.constraintlayout.compose.integration.macrobenchmark.target.common.sampledata.randomAvatarId
-import androidx.constraintlayout.compose.integration.macrobenchmark.target.common.sampledata.randomFullName
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
@@ -45,6 +41,10 @@
import androidx.constraintlayout.compose.ConstraintLayout
import androidx.constraintlayout.compose.ConstraintSet
import androidx.constraintlayout.compose.Dimension
+import androidx.constraintlayout.compose.integration.macrobenchmark.target.common.sampledata.LoremIpsum
+import androidx.constraintlayout.compose.integration.macrobenchmark.target.common.sampledata.newHourMinuteTimeStamp
+import androidx.constraintlayout.compose.integration.macrobenchmark.target.common.sampledata.randomAvatarId
+import androidx.constraintlayout.compose.integration.macrobenchmark.target.common.sampledata.randomFullName
@Preview
@Composable
diff --git a/constraintlayout/constraintlayout-compose/integration-tests/macrobenchmark-target/src/main/java/androidx/constraintlayout/compose/integration/macrobenchmark/target/newmessage/NewMessage.kt b/constraintlayout/constraintlayout-compose/integration-tests/macrobenchmark-target/src/main/java/androidx/constraintlayout/compose/integration/macrobenchmark/target/newmessage/NewMessage.kt
index 75c0dc8..95b79af 100644
--- a/constraintlayout/constraintlayout-compose/integration-tests/macrobenchmark-target/src/main/java/androidx/constraintlayout/compose/integration/macrobenchmark/target/newmessage/NewMessage.kt
+++ b/constraintlayout/constraintlayout-compose/integration-tests/macrobenchmark-target/src/main/java/androidx/constraintlayout/compose/integration/macrobenchmark/target/newmessage/NewMessage.kt
@@ -29,7 +29,6 @@
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape
-import androidx.constraintlayout.compose.integration.macrobenchmark.target.common.components.TestableButton
import androidx.compose.material.Button
import androidx.compose.material.ExperimentalMaterialApi
import androidx.compose.material.Icon
@@ -69,6 +68,7 @@
import androidx.constraintlayout.compose.MotionLayoutScope
import androidx.constraintlayout.compose.MotionScene
import androidx.constraintlayout.compose.Visibility
+import androidx.constraintlayout.compose.integration.macrobenchmark.target.common.components.TestableButton
// Copied from ComposeMail project
diff --git a/constraintlayout/constraintlayout-compose/integration-tests/macrobenchmark-target/src/main/java/androidx/constraintlayout/compose/integration/macrobenchmark/target/toolbar/CollapsibleToolbar.kt b/constraintlayout/constraintlayout-compose/integration-tests/macrobenchmark-target/src/main/java/androidx/constraintlayout/compose/integration/macrobenchmark/target/toolbar/CollapsibleToolbar.kt
index 3fe6074..846fd83 100644
--- a/constraintlayout/constraintlayout-compose/integration-tests/macrobenchmark-target/src/main/java/androidx/constraintlayout/compose/integration/macrobenchmark/target/toolbar/CollapsibleToolbar.kt
+++ b/constraintlayout/constraintlayout-compose/integration-tests/macrobenchmark-target/src/main/java/androidx/constraintlayout/compose/integration/macrobenchmark/target/toolbar/CollapsibleToolbar.kt
@@ -27,8 +27,6 @@
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.shape.RoundedCornerShape
-import androidx.constraintlayout.compose.integration.macrobenchmark.target.common.components.CardSample
-import androidx.constraintlayout.compose.integration.macrobenchmark.target.common.components.OutlinedSearchBar
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
@@ -55,6 +53,8 @@
import androidx.constraintlayout.compose.Dimension
import androidx.constraintlayout.compose.ExperimentalMotionApi
import androidx.constraintlayout.compose.MotionLayout
+import androidx.constraintlayout.compose.integration.macrobenchmark.target.common.components.CardSample
+import androidx.constraintlayout.compose.integration.macrobenchmark.target.common.components.OutlinedSearchBar
import kotlin.math.absoluteValue
@Preview
diff --git a/constraintlayout/constraintlayout-compose/src/androidAndroidTest/kotlin/androidx/constraintlayout/compose/MotionParserTest.kt b/constraintlayout/constraintlayout-compose/src/androidAndroidTest/kotlin/androidx/constraintlayout/compose/MotionParserTest.kt
index bbb33db..b674c98 100644
--- a/constraintlayout/constraintlayout-compose/src/androidAndroidTest/kotlin/androidx/constraintlayout/compose/MotionParserTest.kt
+++ b/constraintlayout/constraintlayout-compose/src/androidAndroidTest/kotlin/androidx/constraintlayout/compose/MotionParserTest.kt
@@ -31,12 +31,12 @@
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
+import kotlin.test.assertFailsWith
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.test.assertFailsWith
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/constraintlayout/constraintlayout-core/api/current.txt b/constraintlayout/constraintlayout-core/api/current.txt
index f245729..77dffb7 100644
--- a/constraintlayout/constraintlayout-core/api/current.txt
+++ b/constraintlayout/constraintlayout-core/api/current.txt
@@ -33,8 +33,8 @@
method public androidx.constraintlayout.core.ArrayRow! createRowDimensionRatio(androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, float);
method public androidx.constraintlayout.core.ArrayRow! createRowEqualDimension(float, float, float, androidx.constraintlayout.core.SolverVariable!, int, androidx.constraintlayout.core.SolverVariable!, int, androidx.constraintlayout.core.SolverVariable!, int, androidx.constraintlayout.core.SolverVariable!, int);
method public androidx.constraintlayout.core.ArrayRow! createRowEqualMatchDimensions(float, float, float, androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!);
- method public androidx.constraintlayout.core.ArrayRow! createRowEquals(androidx.constraintlayout.core.SolverVariable!, int);
method public androidx.constraintlayout.core.ArrayRow! createRowEquals(androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, int);
+ method public androidx.constraintlayout.core.ArrayRow! createRowEquals(androidx.constraintlayout.core.SolverVariable!, int);
method public androidx.constraintlayout.core.ArrayRow! createRowGreaterThan(androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, int);
method public androidx.constraintlayout.core.ArrayRow! createRowGreaterThan(androidx.constraintlayout.core.SolverVariable!, int, androidx.constraintlayout.core.SolverVariable!);
method public androidx.constraintlayout.core.ArrayRow! createRowLowerThan(androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, int);
@@ -183,8 +183,8 @@
}
public class SolverVariable implements java.lang.Comparable<androidx.constraintlayout.core.SolverVariable> {
- ctor public SolverVariable(String!, androidx.constraintlayout.core.SolverVariable.Type!);
ctor public SolverVariable(androidx.constraintlayout.core.SolverVariable.Type!, String!);
+ ctor public SolverVariable(String!, androidx.constraintlayout.core.SolverVariable.Type!);
method public final void addToRow(androidx.constraintlayout.core.ArrayRow!);
method public int compareTo(androidx.constraintlayout.core.SolverVariable!);
method public String! getName();
@@ -673,11 +673,11 @@
public class Keys {
ctor public Keys();
+ method protected void append(StringBuilder!, String!, float);
+ method protected void append(StringBuilder!, String!, float[]!);
method protected void append(StringBuilder!, String!, int);
method protected void append(StringBuilder!, String!, String!);
- method protected void append(StringBuilder!, String!, float);
method protected void append(StringBuilder!, String!, String![]!);
- method protected void append(StringBuilder!, String!, float[]!);
method protected String! unpack(String![]!);
}
@@ -827,9 +827,9 @@
package androidx.constraintlayout.core.motion {
public class CustomAttribute {
+ ctor public CustomAttribute(androidx.constraintlayout.core.motion.CustomAttribute!, Object!);
ctor public CustomAttribute(String!, androidx.constraintlayout.core.motion.CustomAttribute.AttributeType!);
ctor public CustomAttribute(String!, androidx.constraintlayout.core.motion.CustomAttribute.AttributeType!, Object!, boolean);
- ctor public CustomAttribute(androidx.constraintlayout.core.motion.CustomAttribute!, Object!);
method public boolean diff(androidx.constraintlayout.core.motion.CustomAttribute!);
method public androidx.constraintlayout.core.motion.CustomAttribute.AttributeType! getType();
method public float getValueToInterpolate();
@@ -858,13 +858,13 @@
public class CustomVariable {
ctor public CustomVariable(androidx.constraintlayout.core.motion.CustomVariable!);
- ctor public CustomVariable(String!, int, String!);
- ctor public CustomVariable(String!, int, int);
- ctor public CustomVariable(String!, int, float);
- ctor public CustomVariable(String!, int, boolean);
- ctor public CustomVariable(String!, int);
- ctor public CustomVariable(String!, int, Object!);
ctor public CustomVariable(androidx.constraintlayout.core.motion.CustomVariable!, Object!);
+ ctor public CustomVariable(String!, int);
+ ctor public CustomVariable(String!, int, boolean);
+ ctor public CustomVariable(String!, int, float);
+ ctor public CustomVariable(String!, int, int);
+ ctor public CustomVariable(String!, int, Object!);
+ ctor public CustomVariable(String!, int, String!);
method public void applyToWidget(androidx.constraintlayout.core.motion.MotionWidget!);
method public static String! colorString(int);
method public androidx.constraintlayout.core.motion.CustomVariable! copy();
@@ -929,10 +929,10 @@
method public void setStart(androidx.constraintlayout.core.motion.MotionWidget!);
method public void setStartState(androidx.constraintlayout.core.motion.utils.ViewState!, androidx.constraintlayout.core.motion.MotionWidget!, int, int, int);
method public void setTransformPivotTarget(int);
- method public boolean setValue(int, int);
- method public boolean setValue(int, float);
- method public boolean setValue(int, String!);
method public boolean setValue(int, boolean);
+ method public boolean setValue(int, float);
+ method public boolean setValue(int, int);
+ method public boolean setValue(int, String!);
method public void setView(androidx.constraintlayout.core.motion.MotionWidget!);
method public void setup(int, int, float, long);
method public void setupRelative(androidx.constraintlayout.core.motion.Motion!);
@@ -1003,9 +1003,9 @@
method public int getY();
method public void layout(int, int, int, int);
method public void setBounds(int, int, int, int);
+ method public void setCustomAttribute(String!, int, boolean);
method public void setCustomAttribute(String!, int, float);
method public void setCustomAttribute(String!, int, int);
- method public void setCustomAttribute(String!, int, boolean);
method public void setCustomAttribute(String!, int, String!);
method public void setInterpolatedValue(androidx.constraintlayout.core.motion.CustomAttribute!, float[]!);
method public void setPivotX(float);
@@ -1018,14 +1018,14 @@
method public void setTranslationX(float);
method public void setTranslationY(float);
method public void setTranslationZ(float);
- method public boolean setValue(int, int);
- method public boolean setValue(int, float);
- method public boolean setValue(int, String!);
method public boolean setValue(int, boolean);
+ method public boolean setValue(int, float);
+ method public boolean setValue(int, int);
+ method public boolean setValue(int, String!);
method public boolean setValueAttributes(int, float);
+ method public boolean setValueMotion(int, float);
method public boolean setValueMotion(int, int);
method public boolean setValueMotion(int, String!);
- method public boolean setValueMotion(int, float);
method public void setVisibility(int);
method public void updateMotion(androidx.constraintlayout.core.motion.utils.TypedValues!);
field public static final int FILL_PARENT = -1; // 0xffffffff
@@ -1094,16 +1094,16 @@
method public androidx.constraintlayout.core.motion.key.MotionKey! copy(androidx.constraintlayout.core.motion.key.MotionKey!);
method public abstract void getAttributeNames(java.util.HashSet<java.lang.String!>!);
method public int getFramePosition();
+ method public void setCustomAttribute(String!, int, boolean);
method public void setCustomAttribute(String!, int, float);
method public void setCustomAttribute(String!, int, int);
- method public void setCustomAttribute(String!, int, boolean);
method public void setCustomAttribute(String!, int, String!);
method public void setFramePosition(int);
method public void setInterpolation(java.util.HashMap<java.lang.String!,java.lang.Integer!>!);
- method public boolean setValue(int, int);
- method public boolean setValue(int, float);
- method public boolean setValue(int, String!);
method public boolean setValue(int, boolean);
+ method public boolean setValue(int, float);
+ method public boolean setValue(int, int);
+ method public boolean setValue(int, String!);
method public androidx.constraintlayout.core.motion.key.MotionKey! setViewId(int);
field public static final String ALPHA = "alpha";
field public static final String CUSTOM = "CUSTOM";
@@ -1297,8 +1297,8 @@
}
public class HyperSpline {
- ctor public HyperSpline(double[]![]!);
ctor public HyperSpline();
+ ctor public HyperSpline(double[]![]!);
method public double approxLength(androidx.constraintlayout.core.motion.utils.HyperSpline.Cubic![]!);
method public void getPos(double, double[]!);
method public void getPos(double, float[]!);
@@ -1326,8 +1326,8 @@
method public float getSlope(float);
method public static androidx.constraintlayout.core.motion.utils.KeyCycleOscillator! makeWidgetCycle(String!);
method protected void setCustom(Object!);
- method public void setPoint(int, int, String!, int, float, float, float, float, Object!);
method public void setPoint(int, int, String!, int, float, float, float, float);
+ method public void setPoint(int, int, String!, int, float, float, float, float, Object!);
method public void setProperty(androidx.constraintlayout.core.motion.MotionWidget!, float);
method public void setType(String!);
method public void setup(float);
@@ -1452,8 +1452,8 @@
method public String! debug(String!, float);
method public float getAcceleration();
method public float getInterpolation(float);
- method public float getVelocity(float);
method public float getVelocity();
+ method public float getVelocity(float);
method public boolean isStopped();
method public void springConfig(float, float, float, float, float, float, float, int);
}
@@ -1464,8 +1464,8 @@
public interface StopEngine {
method public String! debug(String!, float);
method public float getInterpolation(float);
- method public float getVelocity(float);
method public float getVelocity();
+ method public float getVelocity(float);
method public boolean isStopped();
}
@@ -1474,8 +1474,8 @@
method public void config(float, float, float, float, float, float);
method public String! debug(String!, float);
method public float getInterpolation(float);
- method public float getVelocity(float);
method public float getVelocity();
+ method public float getVelocity(float);
method public boolean isStopped();
}
@@ -1484,8 +1484,8 @@
method public void config(float, float, float);
method public String! debug(String!, float);
method public float getInterpolation(float);
- method public float getVelocity(float);
method public float getVelocity();
+ method public float getVelocity(float);
method public boolean isStopped();
}
@@ -1531,23 +1531,23 @@
public class TypedBundle {
ctor public TypedBundle();
- method public void add(int, int);
- method public void add(int, float);
- method public void add(int, String!);
method public void add(int, boolean);
+ method public void add(int, float);
+ method public void add(int, int);
+ method public void add(int, String!);
method public void addIfNotNull(int, String!);
- method public void applyDelta(androidx.constraintlayout.core.motion.utils.TypedValues!);
method public void applyDelta(androidx.constraintlayout.core.motion.utils.TypedBundle!);
+ method public void applyDelta(androidx.constraintlayout.core.motion.utils.TypedValues!);
method public void clear();
method public int getInteger(int);
}
public interface TypedValues {
method public int getId(String!);
- method public boolean setValue(int, int);
- method public boolean setValue(int, float);
- method public boolean setValue(int, String!);
method public boolean setValue(int, boolean);
+ method public boolean setValue(int, float);
+ method public boolean setValue(int, int);
+ method public boolean setValue(int, String!);
field public static final int BOOLEAN_MASK = 1; // 0x1
field public static final int FLOAT_MASK = 4; // 0x4
field public static final int INT_MASK = 2; // 0x2
@@ -1823,8 +1823,8 @@
public class Utils {
ctor public Utils();
method public int getInterpolatedColor(float[]!);
- method public static void log(String!, String!);
method public static void log(String!);
+ method public static void log(String!, String!);
method public static void logStack(String!, int);
method public static void loge(String!, String!);
method public static int rgbaTocColor(float, float, float, float);
@@ -1840,12 +1840,12 @@
ctor public VelocityMatrix();
method public void applyTransform(float, float, int, int, float[]!);
method public void clear();
- method public void setRotationVelocity(androidx.constraintlayout.core.motion.utils.SplineSet!, float);
method public void setRotationVelocity(androidx.constraintlayout.core.motion.utils.KeyCycleOscillator!, float);
- method public void setScaleVelocity(androidx.constraintlayout.core.motion.utils.SplineSet!, androidx.constraintlayout.core.motion.utils.SplineSet!, float);
+ method public void setRotationVelocity(androidx.constraintlayout.core.motion.utils.SplineSet!, float);
method public void setScaleVelocity(androidx.constraintlayout.core.motion.utils.KeyCycleOscillator!, androidx.constraintlayout.core.motion.utils.KeyCycleOscillator!, float);
- method public void setTranslationVelocity(androidx.constraintlayout.core.motion.utils.SplineSet!, androidx.constraintlayout.core.motion.utils.SplineSet!, float);
+ method public void setScaleVelocity(androidx.constraintlayout.core.motion.utils.SplineSet!, androidx.constraintlayout.core.motion.utils.SplineSet!, float);
method public void setTranslationVelocity(androidx.constraintlayout.core.motion.utils.KeyCycleOscillator!, androidx.constraintlayout.core.motion.utils.KeyCycleOscillator!, float);
+ method public void setTranslationVelocity(androidx.constraintlayout.core.motion.utils.SplineSet!, androidx.constraintlayout.core.motion.utils.SplineSet!, float);
}
public class ViewState {
@@ -1875,28 +1875,28 @@
method public static androidx.constraintlayout.core.parser.CLElement! allocate(char[]!);
method public void clear();
method public androidx.constraintlayout.core.parser.CLContainer clone();
- method public androidx.constraintlayout.core.parser.CLElement! get(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
method public androidx.constraintlayout.core.parser.CLElement! get(int) throws androidx.constraintlayout.core.parser.CLParsingException;
- method public androidx.constraintlayout.core.parser.CLArray! getArray(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
+ method public androidx.constraintlayout.core.parser.CLElement! get(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
method public androidx.constraintlayout.core.parser.CLArray! getArray(int) throws androidx.constraintlayout.core.parser.CLParsingException;
+ method public androidx.constraintlayout.core.parser.CLArray! getArray(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
method public androidx.constraintlayout.core.parser.CLArray! getArrayOrCreate(String!);
method public androidx.constraintlayout.core.parser.CLArray! getArrayOrNull(String!);
- method public boolean getBoolean(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
method public boolean getBoolean(int) throws androidx.constraintlayout.core.parser.CLParsingException;
- method public float getFloat(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
+ method public boolean getBoolean(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
method public float getFloat(int) throws androidx.constraintlayout.core.parser.CLParsingException;
+ method public float getFloat(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
method public float getFloatOrNaN(String!);
- method public int getInt(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
method public int getInt(int) throws androidx.constraintlayout.core.parser.CLParsingException;
- method public androidx.constraintlayout.core.parser.CLObject! getObject(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
+ method public int getInt(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
method public androidx.constraintlayout.core.parser.CLObject! getObject(int) throws androidx.constraintlayout.core.parser.CLParsingException;
+ method public androidx.constraintlayout.core.parser.CLObject! getObject(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
method public androidx.constraintlayout.core.parser.CLObject! getObjectOrNull(String!);
- method public androidx.constraintlayout.core.parser.CLElement! getOrNull(String!);
method public androidx.constraintlayout.core.parser.CLElement! getOrNull(int);
- method public String! getString(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
+ method public androidx.constraintlayout.core.parser.CLElement! getOrNull(String!);
method public String! getString(int) throws androidx.constraintlayout.core.parser.CLParsingException;
- method public String! getStringOrNull(String!);
+ method public String! getString(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
method public String! getStringOrNull(int);
+ method public String! getStringOrNull(String!);
method public boolean has(String!);
method public java.util.ArrayList<java.lang.String!>! names();
method public void put(String!, androidx.constraintlayout.core.parser.CLElement!);
@@ -1965,8 +1965,8 @@
public class CLParser {
ctor public CLParser(String!);
- method public static androidx.constraintlayout.core.parser.CLObject! parse(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
method public androidx.constraintlayout.core.parser.CLObject! parse() throws androidx.constraintlayout.core.parser.CLParsingException;
+ method public static androidx.constraintlayout.core.parser.CLObject! parse(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
}
public class CLParsingException extends java.lang.Exception {
@@ -2046,10 +2046,10 @@
method public androidx.constraintlayout.core.state.ConstraintReference! left();
method public androidx.constraintlayout.core.state.ConstraintReference! leftToLeft(Object!);
method public androidx.constraintlayout.core.state.ConstraintReference! leftToRight(Object!);
- method public androidx.constraintlayout.core.state.ConstraintReference! margin(Object!);
method public androidx.constraintlayout.core.state.ConstraintReference! margin(int);
- method public androidx.constraintlayout.core.state.ConstraintReference! marginGone(Object!);
+ method public androidx.constraintlayout.core.state.ConstraintReference! margin(Object!);
method public androidx.constraintlayout.core.state.ConstraintReference! marginGone(int);
+ method public androidx.constraintlayout.core.state.ConstraintReference! marginGone(Object!);
method public androidx.constraintlayout.core.state.ConstraintReference! pivotX(float);
method public androidx.constraintlayout.core.state.ConstraintReference! pivotY(float);
method public androidx.constraintlayout.core.state.ConstraintReference! right();
@@ -2119,8 +2119,8 @@
public class ConstraintSetParser {
ctor public ConstraintSetParser();
method public static void parseDesignElementsJSON(String!, java.util.ArrayList<androidx.constraintlayout.core.state.ConstraintSetParser.DesignElement!>!) throws androidx.constraintlayout.core.parser.CLParsingException;
- method public static void parseJSON(String!, androidx.constraintlayout.core.state.Transition!, int);
method public static void parseJSON(String!, androidx.constraintlayout.core.state.State!, androidx.constraintlayout.core.state.ConstraintSetParser.LayoutVariables!) throws androidx.constraintlayout.core.parser.CLParsingException;
+ method public static void parseJSON(String!, androidx.constraintlayout.core.state.Transition!, int);
method public static void parseMotionSceneJSON(androidx.constraintlayout.core.state.CoreMotionScene!, String!);
}
@@ -2142,8 +2142,8 @@
}
public interface CoreMotionScene {
- method public String! getConstraintSet(String!);
method public String! getConstraintSet(int);
+ method public String! getConstraintSet(String!);
method public String! getTransition(String!);
method public void setConstraintSetContent(String!, String!);
method public void setDebugName(String!);
@@ -2166,8 +2166,8 @@
method public static androidx.constraintlayout.core.state.Dimension! createSuggested(Object!);
method public static androidx.constraintlayout.core.state.Dimension! createWrap();
method public boolean equalsFixedValue(int);
- method public androidx.constraintlayout.core.state.Dimension! fixed(Object!);
method public androidx.constraintlayout.core.state.Dimension! fixed(int);
+ method public androidx.constraintlayout.core.state.Dimension! fixed(Object!);
method public androidx.constraintlayout.core.state.Dimension! max(int);
method public androidx.constraintlayout.core.state.Dimension! max(Object!);
method public androidx.constraintlayout.core.state.Dimension! min(int);
@@ -2373,21 +2373,21 @@
method public androidx.constraintlayout.core.state.Transition.KeyPosition! findNextPosition(String!, int);
method public androidx.constraintlayout.core.state.Transition.KeyPosition! findPreviousPosition(String!, int);
method public int getAutoTransition();
- method public androidx.constraintlayout.core.state.WidgetFrame! getEnd(String!);
method public androidx.constraintlayout.core.state.WidgetFrame! getEnd(androidx.constraintlayout.core.widgets.ConstraintWidget!);
+ method public androidx.constraintlayout.core.state.WidgetFrame! getEnd(String!);
method public int getId(String!);
- method public androidx.constraintlayout.core.state.WidgetFrame! getInterpolated(String!);
method public androidx.constraintlayout.core.state.WidgetFrame! getInterpolated(androidx.constraintlayout.core.widgets.ConstraintWidget!);
+ method public androidx.constraintlayout.core.state.WidgetFrame! getInterpolated(String!);
method public int getInterpolatedHeight();
method public int getInterpolatedWidth();
- method public static androidx.constraintlayout.core.state.Interpolator! getInterpolator(int, String!);
method public androidx.constraintlayout.core.state.Interpolator! getInterpolator();
+ method public static androidx.constraintlayout.core.state.Interpolator! getInterpolator(int, String!);
method public int getKeyFrames(String!, float[]!, int[]!, int[]!);
method public androidx.constraintlayout.core.motion.Motion! getMotion(String!);
method public int getNumberKeyPositions(androidx.constraintlayout.core.state.WidgetFrame!);
method public float[]! getPath(String!);
- method public androidx.constraintlayout.core.state.WidgetFrame! getStart(String!);
method public androidx.constraintlayout.core.state.WidgetFrame! getStart(androidx.constraintlayout.core.widgets.ConstraintWidget!);
+ method public androidx.constraintlayout.core.state.WidgetFrame! getStart(String!);
method public float getTouchUpProgress(long);
method public androidx.constraintlayout.core.state.Transition.WidgetState! getWidgetState(String!, androidx.constraintlayout.core.widgets.ConstraintWidget!, int);
method public boolean hasOnSwipe();
@@ -2397,10 +2397,10 @@
method public boolean isTouchNotDone(float);
method public void setTouchUp(float, long, float, float);
method public void setTransitionProperties(androidx.constraintlayout.core.motion.utils.TypedBundle!);
- method public boolean setValue(int, int);
- method public boolean setValue(int, float);
- method public boolean setValue(int, String!);
method public boolean setValue(int, boolean);
+ method public boolean setValue(int, float);
+ method public boolean setValue(int, int);
+ method public boolean setValue(int, String!);
method public void updateFrom(androidx.constraintlayout.core.widgets.ConstraintWidgetContainer!, int);
field public static final int END = 1; // 0x1
field public static final int INTERPOLATED = 2; // 0x2
@@ -2427,8 +2427,8 @@
public class WidgetFrame {
ctor public WidgetFrame();
- ctor public WidgetFrame(androidx.constraintlayout.core.widgets.ConstraintWidget!);
ctor public WidgetFrame(androidx.constraintlayout.core.state.WidgetFrame!);
+ ctor public WidgetFrame(androidx.constraintlayout.core.widgets.ConstraintWidget!);
method public void addCustomColor(String!, int);
method public void addCustomFloat(String!, float);
method public float centerX();
@@ -2445,9 +2445,9 @@
method public boolean isDefaultTransform();
method public StringBuilder! serialize(StringBuilder!);
method public StringBuilder! serialize(StringBuilder!, boolean);
+ method public void setCustomAttribute(String!, int, boolean);
method public void setCustomAttribute(String!, int, float);
method public void setCustomAttribute(String!, int, int);
- method public void setCustomAttribute(String!, int, boolean);
method public void setCustomAttribute(String!, int, String!);
method public void setCustomValue(androidx.constraintlayout.core.motion.CustomAttribute!, float[]!);
method public boolean setValue(String!, androidx.constraintlayout.core.parser.CLElement!) throws androidx.constraintlayout.core.parser.CLParsingException;
@@ -2758,8 +2758,8 @@
public class ConstraintAnchor {
ctor public ConstraintAnchor(androidx.constraintlayout.core.widgets.ConstraintWidget!, androidx.constraintlayout.core.widgets.ConstraintAnchor.Type!);
- method public boolean connect(androidx.constraintlayout.core.widgets.ConstraintAnchor!, int, int, boolean);
method public boolean connect(androidx.constraintlayout.core.widgets.ConstraintAnchor!, int);
+ method public boolean connect(androidx.constraintlayout.core.widgets.ConstraintAnchor!, int, int, boolean);
method public void copyFrom(androidx.constraintlayout.core.widgets.ConstraintAnchor!, java.util.HashMap<androidx.constraintlayout.core.widgets.ConstraintWidget!,androidx.constraintlayout.core.widgets.ConstraintWidget!>!);
method public void findDependents(int, java.util.ArrayList<androidx.constraintlayout.core.widgets.analyzer.WidgetGroup!>!, androidx.constraintlayout.core.widgets.analyzer.WidgetGroup!);
method public java.util.HashSet<androidx.constraintlayout.core.widgets.ConstraintAnchor!>! getDependents();
@@ -2774,8 +2774,8 @@
method public boolean hasDependents();
method public boolean hasFinalValue();
method public boolean isConnected();
- method public boolean isConnectionAllowed(androidx.constraintlayout.core.widgets.ConstraintWidget!, androidx.constraintlayout.core.widgets.ConstraintAnchor!);
method public boolean isConnectionAllowed(androidx.constraintlayout.core.widgets.ConstraintWidget!);
+ method public boolean isConnectionAllowed(androidx.constraintlayout.core.widgets.ConstraintWidget!, androidx.constraintlayout.core.widgets.ConstraintAnchor!);
method public boolean isSideAnchor();
method public boolean isSimilarDimensionConnection(androidx.constraintlayout.core.widgets.ConstraintAnchor!);
method public boolean isValidConnection(androidx.constraintlayout.core.widgets.ConstraintAnchor!);
@@ -2806,11 +2806,11 @@
public class ConstraintWidget {
ctor public ConstraintWidget();
- ctor public ConstraintWidget(String!);
- ctor public ConstraintWidget(int, int, int, int);
- ctor public ConstraintWidget(String!, int, int, int, int);
ctor public ConstraintWidget(int, int);
+ ctor public ConstraintWidget(int, int, int, int);
+ ctor public ConstraintWidget(String!);
ctor public ConstraintWidget(String!, int, int);
+ ctor public ConstraintWidget(String!, int, int, int, int);
method public void addChildrenToSolverByDependency(androidx.constraintlayout.core.widgets.ConstraintWidgetContainer!, androidx.constraintlayout.core.LinearSystem!, java.util.HashSet<androidx.constraintlayout.core.widgets.ConstraintWidget!>!, int, boolean);
method public void addToSolver(androidx.constraintlayout.core.LinearSystem!, boolean);
method public boolean allowedInBarrier();
@@ -2911,16 +2911,16 @@
method public void setDebugName(String!);
method public void setDebugSolverName(androidx.constraintlayout.core.LinearSystem!, String!);
method public void setDimension(int, int);
- method public void setDimensionRatio(String!);
method public void setDimensionRatio(float, int);
+ method public void setDimensionRatio(String!);
method public void setFinalBaseline(int);
method public void setFinalFrame(int, int, int, int, int, int);
method public void setFinalHorizontal(int, int);
method public void setFinalLeft(int);
method public void setFinalTop(int);
method public void setFinalVertical(int, int);
- method public void setFrame(int, int, int, int);
method public void setFrame(int, int, int);
+ method public void setFrame(int, int, int, int);
method public void setGoneMargin(androidx.constraintlayout.core.widgets.ConstraintAnchor.Type!, int);
method public void setHasBaseline(boolean);
method public void setHeight(int);
@@ -3044,8 +3044,8 @@
public class ConstraintWidgetContainer extends androidx.constraintlayout.core.widgets.WidgetContainer {
ctor public ConstraintWidgetContainer();
- ctor public ConstraintWidgetContainer(int, int, int, int);
ctor public ConstraintWidgetContainer(int, int);
+ ctor public ConstraintWidgetContainer(int, int, int, int);
ctor public ConstraintWidgetContainer(String!, int, int);
method public boolean addChildrenToSolver(androidx.constraintlayout.core.LinearSystem!);
method public void addHorizontalWrapMaxVariable(androidx.constraintlayout.core.widgets.ConstraintAnchor!);
@@ -3066,8 +3066,8 @@
method public boolean isHeightMeasuredTooSmall();
method public boolean isRtl();
method public boolean isWidthMeasuredTooSmall();
- method public long measure(int, int, int, int, int, int, int, int, int);
method public static boolean measure(int, androidx.constraintlayout.core.widgets.ConstraintWidget!, androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.Measurer!, androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.Measure!, int);
+ method public long measure(int, int, int, int, int, int, int, int, int);
method public boolean optimizeFor(int);
method public void setMeasurer(androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.Measurer!);
method public void setOptimizationLevel(int);
@@ -3140,8 +3140,8 @@
method public void setFinalValue(int);
method public void setGuideBegin(int);
method public void setGuideEnd(int);
- method public void setGuidePercent(int);
method public void setGuidePercent(float);
+ method public void setGuidePercent(int);
method public void setMinimumPosition(int);
method public void setOrientation(int);
field public static final int HORIZONTAL = 0; // 0x0
@@ -3218,8 +3218,8 @@
method public int getPaddingLeft();
method public int getPaddingRight();
method public int getPaddingTop();
- method public void measure(int, int, int, int);
method protected void measure(androidx.constraintlayout.core.widgets.ConstraintWidget!, androidx.constraintlayout.core.widgets.ConstraintWidget.DimensionBehaviour!, int, androidx.constraintlayout.core.widgets.ConstraintWidget.DimensionBehaviour!, int);
+ method public void measure(int, int, int, int);
method protected boolean measureChildren();
method public boolean needSolverPass();
method protected void needsCallbackFromSolver(boolean);
@@ -3236,8 +3236,8 @@
public class WidgetContainer extends androidx.constraintlayout.core.widgets.ConstraintWidget {
ctor public WidgetContainer();
- ctor public WidgetContainer(int, int, int, int);
ctor public WidgetContainer(int, int);
+ ctor public WidgetContainer(int, int, int, int);
method public void add(androidx.constraintlayout.core.widgets.ConstraintWidget!);
method public void add(androidx.constraintlayout.core.widgets.ConstraintWidget!...);
method public java.util.ArrayList<androidx.constraintlayout.core.widgets.ConstraintWidget!>! getChildren();
diff --git a/constraintlayout/constraintlayout-core/api/public_plus_experimental_current.txt b/constraintlayout/constraintlayout-core/api/public_plus_experimental_current.txt
deleted file mode 100644
index f245729..0000000
--- a/constraintlayout/constraintlayout-core/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,3393 +0,0 @@
-// Signature format: 4.0
-package androidx.constraintlayout.core {
-
- public class ArrayLinkedVariables implements androidx.constraintlayout.core.ArrayRow.ArrayRowVariables {
- method public void add(androidx.constraintlayout.core.SolverVariable!, float, boolean);
- method public final void clear();
- method public boolean contains(androidx.constraintlayout.core.SolverVariable!);
- method public void display();
- method public void divideByAmount(float);
- method public final float get(androidx.constraintlayout.core.SolverVariable!);
- method public int getCurrentSize();
- method public int getHead();
- method public final int getId(int);
- method public final int getNextIndice(int);
- method public final float getValue(int);
- method public androidx.constraintlayout.core.SolverVariable! getVariable(int);
- method public float getVariableValue(int);
- method public int indexOf(androidx.constraintlayout.core.SolverVariable!);
- method public void invert();
- method public final void put(androidx.constraintlayout.core.SolverVariable!, float);
- method public final float remove(androidx.constraintlayout.core.SolverVariable!, boolean);
- method public int sizeInBytes();
- method public float use(androidx.constraintlayout.core.ArrayRow!, boolean);
- field protected final androidx.constraintlayout.core.Cache! mCache;
- }
-
- public class ArrayRow {
- ctor public ArrayRow();
- ctor public ArrayRow(androidx.constraintlayout.core.Cache!);
- method public androidx.constraintlayout.core.ArrayRow! addError(androidx.constraintlayout.core.LinearSystem!, int);
- method public void addError(androidx.constraintlayout.core.SolverVariable!);
- method public void clear();
- method public androidx.constraintlayout.core.ArrayRow! createRowDimensionRatio(androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, float);
- method public androidx.constraintlayout.core.ArrayRow! createRowEqualDimension(float, float, float, androidx.constraintlayout.core.SolverVariable!, int, androidx.constraintlayout.core.SolverVariable!, int, androidx.constraintlayout.core.SolverVariable!, int, androidx.constraintlayout.core.SolverVariable!, int);
- method public androidx.constraintlayout.core.ArrayRow! createRowEqualMatchDimensions(float, float, float, androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!);
- method public androidx.constraintlayout.core.ArrayRow! createRowEquals(androidx.constraintlayout.core.SolverVariable!, int);
- method public androidx.constraintlayout.core.ArrayRow! createRowEquals(androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, int);
- method public androidx.constraintlayout.core.ArrayRow! createRowGreaterThan(androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, int);
- method public androidx.constraintlayout.core.ArrayRow! createRowGreaterThan(androidx.constraintlayout.core.SolverVariable!, int, androidx.constraintlayout.core.SolverVariable!);
- method public androidx.constraintlayout.core.ArrayRow! createRowLowerThan(androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, int);
- method public androidx.constraintlayout.core.ArrayRow! createRowWithAngle(androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, float);
- method public androidx.constraintlayout.core.SolverVariable! getKey();
- method public androidx.constraintlayout.core.SolverVariable! getPivotCandidate(androidx.constraintlayout.core.LinearSystem!, boolean[]!);
- method public void initFromRow(androidx.constraintlayout.core.LinearSystem.Row!);
- method public boolean isEmpty();
- method public androidx.constraintlayout.core.SolverVariable! pickPivot(androidx.constraintlayout.core.SolverVariable!);
- method public void reset();
- method public void updateFromFinalVariable(androidx.constraintlayout.core.LinearSystem!, androidx.constraintlayout.core.SolverVariable!, boolean);
- method public void updateFromRow(androidx.constraintlayout.core.LinearSystem!, androidx.constraintlayout.core.ArrayRow!, boolean);
- method public void updateFromSynonymVariable(androidx.constraintlayout.core.LinearSystem!, androidx.constraintlayout.core.SolverVariable!, boolean);
- method public void updateFromSystem(androidx.constraintlayout.core.LinearSystem!);
- field public androidx.constraintlayout.core.ArrayRow.ArrayRowVariables! variables;
- }
-
- public static interface ArrayRow.ArrayRowVariables {
- method public void add(androidx.constraintlayout.core.SolverVariable!, float, boolean);
- method public void clear();
- method public boolean contains(androidx.constraintlayout.core.SolverVariable!);
- method public void display();
- method public void divideByAmount(float);
- method public float get(androidx.constraintlayout.core.SolverVariable!);
- method public int getCurrentSize();
- method public androidx.constraintlayout.core.SolverVariable! getVariable(int);
- method public float getVariableValue(int);
- method public int indexOf(androidx.constraintlayout.core.SolverVariable!);
- method public void invert();
- method public void put(androidx.constraintlayout.core.SolverVariable!, float);
- method public float remove(androidx.constraintlayout.core.SolverVariable!, boolean);
- method public int sizeInBytes();
- method public float use(androidx.constraintlayout.core.ArrayRow!, boolean);
- }
-
- public class Cache {
- ctor public Cache();
- }
-
- public class GoalRow extends androidx.constraintlayout.core.ArrayRow {
- ctor public GoalRow(androidx.constraintlayout.core.Cache!);
- }
-
- public class LinearSystem {
- ctor public LinearSystem();
- method public void addCenterPoint(androidx.constraintlayout.core.widgets.ConstraintWidget!, androidx.constraintlayout.core.widgets.ConstraintWidget!, float, int);
- method public void addCentering(androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, int, float, androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, int, int);
- method public void addConstraint(androidx.constraintlayout.core.ArrayRow!);
- method public androidx.constraintlayout.core.ArrayRow! addEquality(androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, int, int);
- method public void addEquality(androidx.constraintlayout.core.SolverVariable!, int);
- method public void addGreaterBarrier(androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, int, boolean);
- method public void addGreaterThan(androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, int, int);
- method public void addLowerBarrier(androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, int, boolean);
- method public void addLowerThan(androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, int, int);
- method public void addRatio(androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, float, int);
- method public void addSynonym(androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, int);
- method public androidx.constraintlayout.core.SolverVariable! createErrorVariable(int, String!);
- method public androidx.constraintlayout.core.SolverVariable! createExtraVariable();
- method public androidx.constraintlayout.core.SolverVariable! createObjectVariable(Object!);
- method public androidx.constraintlayout.core.ArrayRow! createRow();
- method public static androidx.constraintlayout.core.ArrayRow! createRowDimensionPercent(androidx.constraintlayout.core.LinearSystem!, androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, float);
- method public androidx.constraintlayout.core.SolverVariable! createSlackVariable();
- method public void displayReadableRows();
- method public void displayVariablesReadableRows();
- method public void fillMetrics(androidx.constraintlayout.core.Metrics!);
- method public androidx.constraintlayout.core.Cache! getCache();
- method public int getMemoryUsed();
- method public static androidx.constraintlayout.core.Metrics! getMetrics();
- method public int getNumEquations();
- method public int getNumVariables();
- method public int getObjectVariableValue(Object!);
- method public void minimize() throws java.lang.Exception;
- method public void removeRow(androidx.constraintlayout.core.ArrayRow!);
- method public void reset();
- field public static long ARRAY_ROW_CREATION;
- field public static final boolean DEBUG = false;
- field public static final boolean FULL_DEBUG = false;
- field public static long OPTIMIZED_ARRAY_ROW_CREATION;
- field public static boolean OPTIMIZED_ENGINE;
- field public static boolean SIMPLIFY_SYNONYMS;
- field public static boolean SKIP_COLUMNS;
- field public static boolean USE_BASIC_SYNONYMS;
- field public static boolean USE_DEPENDENCY_ORDERING;
- field public static boolean USE_SYNONYMS;
- field public boolean graphOptimizer;
- field public boolean hasSimpleDefinition;
- field public boolean newgraphOptimizer;
- field public static androidx.constraintlayout.core.Metrics! sMetrics;
- }
-
- public class Metrics {
- ctor public Metrics();
- method public void copy(androidx.constraintlayout.core.Metrics!);
- method public void reset();
- field public long additionalMeasures;
- field public long bfs;
- field public long constraints;
- field public long determineGroups;
- field public long errors;
- field public long extravariables;
- field public long fullySolved;
- field public long graphOptimizer;
- field public long graphSolved;
- field public long grouping;
- field public long infeasibleDetermineGroups;
- field public long iterations;
- field public long lastTableSize;
- field public long layouts;
- field public long linearSolved;
- field public long mChildCount;
- field public long mEquations;
- field public long mMeasureCalls;
- field public long mMeasureDuration;
- field public int mNumberOfLayouts;
- field public int mNumberOfMeasures;
- field public long mSimpleEquations;
- field public long mSolverPasses;
- field public long mVariables;
- field public long maxRows;
- field public long maxTableSize;
- field public long maxVariables;
- field public long measuredMatchWidgets;
- field public long measuredWidgets;
- field public long measures;
- field public long measuresLayoutDuration;
- field public long measuresWidgetsDuration;
- field public long measuresWrap;
- field public long measuresWrapInfeasible;
- field public long minimize;
- field public long minimizeGoal;
- field public long nonresolvedWidgets;
- field public long optimize;
- field public long pivots;
- field public java.util.ArrayList<java.lang.String!>! problematicLayouts;
- field public long resolutions;
- field public long resolvedWidgets;
- field public long simpleconstraints;
- field public long slackvariables;
- field public long tableSizeIncrease;
- field public long variables;
- field public long widgets;
- }
-
- public class PriorityGoalRow extends androidx.constraintlayout.core.ArrayRow {
- ctor public PriorityGoalRow(androidx.constraintlayout.core.Cache!);
- }
-
- public class SolverVariable implements java.lang.Comparable<androidx.constraintlayout.core.SolverVariable> {
- ctor public SolverVariable(String!, androidx.constraintlayout.core.SolverVariable.Type!);
- ctor public SolverVariable(androidx.constraintlayout.core.SolverVariable.Type!, String!);
- method public final void addToRow(androidx.constraintlayout.core.ArrayRow!);
- method public int compareTo(androidx.constraintlayout.core.SolverVariable!);
- method public String! getName();
- method public final void removeFromRow(androidx.constraintlayout.core.ArrayRow!);
- method public void reset();
- method public void setFinalValue(androidx.constraintlayout.core.LinearSystem!, float);
- method public void setName(String!);
- method public void setSynonym(androidx.constraintlayout.core.LinearSystem!, androidx.constraintlayout.core.SolverVariable!, float);
- method public void setType(androidx.constraintlayout.core.SolverVariable.Type!, String!);
- method public final void updateReferencesWithNewDefinition(androidx.constraintlayout.core.LinearSystem!, androidx.constraintlayout.core.ArrayRow!);
- field public static final int STRENGTH_BARRIER = 6; // 0x6
- field public static final int STRENGTH_CENTERING = 7; // 0x7
- field public static final int STRENGTH_EQUALITY = 5; // 0x5
- field public static final int STRENGTH_FIXED = 8; // 0x8
- field public static final int STRENGTH_HIGH = 3; // 0x3
- field public static final int STRENGTH_HIGHEST = 4; // 0x4
- field public static final int STRENGTH_LOW = 1; // 0x1
- field public static final int STRENGTH_MEDIUM = 2; // 0x2
- field public static final int STRENGTH_NONE = 0; // 0x0
- field public float computedValue;
- field public int id;
- field public boolean inGoal;
- field public boolean isFinalValue;
- field public int strength;
- field public int usageInRowCount;
- }
-
- public enum SolverVariable.Type {
- enum_constant public static final androidx.constraintlayout.core.SolverVariable.Type CONSTANT;
- enum_constant public static final androidx.constraintlayout.core.SolverVariable.Type ERROR;
- enum_constant public static final androidx.constraintlayout.core.SolverVariable.Type SLACK;
- enum_constant public static final androidx.constraintlayout.core.SolverVariable.Type UNKNOWN;
- enum_constant public static final androidx.constraintlayout.core.SolverVariable.Type UNRESTRICTED;
- }
-
- public class SolverVariableValues implements androidx.constraintlayout.core.ArrayRow.ArrayRowVariables {
- method public void add(androidx.constraintlayout.core.SolverVariable!, float, boolean);
- method public void clear();
- method public boolean contains(androidx.constraintlayout.core.SolverVariable!);
- method public void display();
- method public void divideByAmount(float);
- method public float get(androidx.constraintlayout.core.SolverVariable!);
- method public int getCurrentSize();
- method public androidx.constraintlayout.core.SolverVariable! getVariable(int);
- method public float getVariableValue(int);
- method public int indexOf(androidx.constraintlayout.core.SolverVariable!);
- method public void invert();
- method public void put(androidx.constraintlayout.core.SolverVariable!, float);
- method public float remove(androidx.constraintlayout.core.SolverVariable!, boolean);
- method public int sizeInBytes();
- method public float use(androidx.constraintlayout.core.ArrayRow!, boolean);
- field protected final androidx.constraintlayout.core.Cache! mCache;
- }
-
-}
-
-package androidx.constraintlayout.core.dsl {
-
- public class Barrier extends androidx.constraintlayout.core.dsl.Helper {
- ctor public Barrier(String!);
- ctor public Barrier(String!, String!);
- method public androidx.constraintlayout.core.dsl.Barrier! addReference(androidx.constraintlayout.core.dsl.Ref!);
- method public androidx.constraintlayout.core.dsl.Barrier! addReference(String!);
- method public androidx.constraintlayout.core.dsl.Constraint.Side! getDirection();
- method public int getMargin();
- method public String! referencesToString();
- method public void setDirection(androidx.constraintlayout.core.dsl.Constraint.Side!);
- method public void setMargin(int);
- }
-
- public abstract class Chain extends androidx.constraintlayout.core.dsl.Helper {
- ctor public Chain(String!);
- method public androidx.constraintlayout.core.dsl.Chain! addReference(androidx.constraintlayout.core.dsl.Ref!);
- method public androidx.constraintlayout.core.dsl.Chain! addReference(String!);
- method public androidx.constraintlayout.core.dsl.Chain.Style! getStyle();
- method public String! referencesToString();
- method public void setStyle(androidx.constraintlayout.core.dsl.Chain.Style!);
- field protected java.util.ArrayList<androidx.constraintlayout.core.dsl.Ref!>! references;
- field protected static final java.util.Map<androidx.constraintlayout.core.dsl.Chain.Style!,java.lang.String!>! styleMap;
- }
-
- public class Chain.Anchor {
- method public void build(StringBuilder!);
- method public String! getId();
- }
-
- public enum Chain.Style {
- enum_constant public static final androidx.constraintlayout.core.dsl.Chain.Style PACKED;
- enum_constant public static final androidx.constraintlayout.core.dsl.Chain.Style SPREAD;
- enum_constant public static final androidx.constraintlayout.core.dsl.Chain.Style SPREAD_INSIDE;
- }
-
- public class Constraint {
- ctor public Constraint(String!);
- method protected void append(StringBuilder!, String!, float);
- method public String! convertStringArrayToString(String![]!);
- method public androidx.constraintlayout.core.dsl.Constraint.VAnchor! getBaseline();
- method public androidx.constraintlayout.core.dsl.Constraint.VAnchor! getBottom();
- method public float getCircleAngle();
- method public String! getCircleConstraint();
- method public int getCircleRadius();
- method public String! getDimensionRatio();
- method public int getEditorAbsoluteX();
- method public int getEditorAbsoluteY();
- method public androidx.constraintlayout.core.dsl.Constraint.HAnchor! getEnd();
- method public int getHeight();
- method public androidx.constraintlayout.core.dsl.Constraint.Behaviour! getHeightDefault();
- method public int getHeightMax();
- method public int getHeightMin();
- method public float getHeightPercent();
- method public float getHorizontalBias();
- method public androidx.constraintlayout.core.dsl.Constraint.ChainMode! getHorizontalChainStyle();
- method public float getHorizontalWeight();
- method public androidx.constraintlayout.core.dsl.Constraint.HAnchor! getLeft();
- method public String![]! getReferenceIds();
- method public androidx.constraintlayout.core.dsl.Constraint.HAnchor! getRight();
- method public androidx.constraintlayout.core.dsl.Constraint.HAnchor! getStart();
- method public androidx.constraintlayout.core.dsl.Constraint.VAnchor! getTop();
- method public float getVerticalBias();
- method public androidx.constraintlayout.core.dsl.Constraint.ChainMode! getVerticalChainStyle();
- method public float getVerticalWeight();
- method public int getWidth();
- method public androidx.constraintlayout.core.dsl.Constraint.Behaviour! getWidthDefault();
- method public int getWidthMax();
- method public int getWidthMin();
- method public float getWidthPercent();
- method public boolean isConstrainedHeight();
- method public boolean isConstrainedWidth();
- method public void linkToBaseline(androidx.constraintlayout.core.dsl.Constraint.VAnchor!);
- method public void linkToBaseline(androidx.constraintlayout.core.dsl.Constraint.VAnchor!, int);
- method public void linkToBaseline(androidx.constraintlayout.core.dsl.Constraint.VAnchor!, int, int);
- method public void linkToBottom(androidx.constraintlayout.core.dsl.Constraint.VAnchor!);
- method public void linkToBottom(androidx.constraintlayout.core.dsl.Constraint.VAnchor!, int);
- method public void linkToBottom(androidx.constraintlayout.core.dsl.Constraint.VAnchor!, int, int);
- method public void linkToEnd(androidx.constraintlayout.core.dsl.Constraint.HAnchor!);
- method public void linkToEnd(androidx.constraintlayout.core.dsl.Constraint.HAnchor!, int);
- method public void linkToEnd(androidx.constraintlayout.core.dsl.Constraint.HAnchor!, int, int);
- method public void linkToLeft(androidx.constraintlayout.core.dsl.Constraint.HAnchor!);
- method public void linkToLeft(androidx.constraintlayout.core.dsl.Constraint.HAnchor!, int);
- method public void linkToLeft(androidx.constraintlayout.core.dsl.Constraint.HAnchor!, int, int);
- method public void linkToRight(androidx.constraintlayout.core.dsl.Constraint.HAnchor!);
- method public void linkToRight(androidx.constraintlayout.core.dsl.Constraint.HAnchor!, int);
- method public void linkToRight(androidx.constraintlayout.core.dsl.Constraint.HAnchor!, int, int);
- method public void linkToStart(androidx.constraintlayout.core.dsl.Constraint.HAnchor!);
- method public void linkToStart(androidx.constraintlayout.core.dsl.Constraint.HAnchor!, int);
- method public void linkToStart(androidx.constraintlayout.core.dsl.Constraint.HAnchor!, int, int);
- method public void linkToTop(androidx.constraintlayout.core.dsl.Constraint.VAnchor!);
- method public void linkToTop(androidx.constraintlayout.core.dsl.Constraint.VAnchor!, int);
- method public void linkToTop(androidx.constraintlayout.core.dsl.Constraint.VAnchor!, int, int);
- method public void setCircleAngle(float);
- method public void setCircleConstraint(String!);
- method public void setCircleRadius(int);
- method public void setConstrainedHeight(boolean);
- method public void setConstrainedWidth(boolean);
- method public void setDimensionRatio(String!);
- method public void setEditorAbsoluteX(int);
- method public void setEditorAbsoluteY(int);
- method public void setHeight(int);
- method public void setHeightDefault(androidx.constraintlayout.core.dsl.Constraint.Behaviour!);
- method public void setHeightMax(int);
- method public void setHeightMin(int);
- method public void setHeightPercent(float);
- method public void setHorizontalBias(float);
- method public void setHorizontalChainStyle(androidx.constraintlayout.core.dsl.Constraint.ChainMode!);
- method public void setHorizontalWeight(float);
- method public void setReferenceIds(String![]!);
- method public void setVerticalBias(float);
- method public void setVerticalChainStyle(androidx.constraintlayout.core.dsl.Constraint.ChainMode!);
- method public void setVerticalWeight(float);
- method public void setWidth(int);
- method public void setWidthDefault(androidx.constraintlayout.core.dsl.Constraint.Behaviour!);
- method public void setWidthMax(int);
- method public void setWidthMin(int);
- method public void setWidthPercent(float);
- field public static final androidx.constraintlayout.core.dsl.Constraint! PARENT;
- }
-
- public class Constraint.Anchor {
- method public void build(StringBuilder!);
- method public String! getId();
- }
-
- public enum Constraint.Behaviour {
- enum_constant public static final androidx.constraintlayout.core.dsl.Constraint.Behaviour PERCENT;
- enum_constant public static final androidx.constraintlayout.core.dsl.Constraint.Behaviour RATIO;
- enum_constant public static final androidx.constraintlayout.core.dsl.Constraint.Behaviour RESOLVED;
- enum_constant public static final androidx.constraintlayout.core.dsl.Constraint.Behaviour SPREAD;
- enum_constant public static final androidx.constraintlayout.core.dsl.Constraint.Behaviour WRAP;
- }
-
- public enum Constraint.ChainMode {
- enum_constant public static final androidx.constraintlayout.core.dsl.Constraint.ChainMode PACKED;
- enum_constant public static final androidx.constraintlayout.core.dsl.Constraint.ChainMode SPREAD;
- enum_constant public static final androidx.constraintlayout.core.dsl.Constraint.ChainMode SPREAD_INSIDE;
- }
-
- public class Constraint.HAnchor extends androidx.constraintlayout.core.dsl.Constraint.Anchor {
- }
-
- public enum Constraint.HSide {
- enum_constant public static final androidx.constraintlayout.core.dsl.Constraint.HSide END;
- enum_constant public static final androidx.constraintlayout.core.dsl.Constraint.HSide LEFT;
- enum_constant public static final androidx.constraintlayout.core.dsl.Constraint.HSide RIGHT;
- enum_constant public static final androidx.constraintlayout.core.dsl.Constraint.HSide START;
- }
-
- public enum Constraint.Side {
- enum_constant public static final androidx.constraintlayout.core.dsl.Constraint.Side BASELINE;
- enum_constant public static final androidx.constraintlayout.core.dsl.Constraint.Side BOTTOM;
- enum_constant public static final androidx.constraintlayout.core.dsl.Constraint.Side END;
- enum_constant public static final androidx.constraintlayout.core.dsl.Constraint.Side LEFT;
- enum_constant public static final androidx.constraintlayout.core.dsl.Constraint.Side RIGHT;
- enum_constant public static final androidx.constraintlayout.core.dsl.Constraint.Side START;
- enum_constant public static final androidx.constraintlayout.core.dsl.Constraint.Side TOP;
- }
-
- public class Constraint.VAnchor extends androidx.constraintlayout.core.dsl.Constraint.Anchor {
- }
-
- public enum Constraint.VSide {
- enum_constant public static final androidx.constraintlayout.core.dsl.Constraint.VSide BASELINE;
- enum_constant public static final androidx.constraintlayout.core.dsl.Constraint.VSide BOTTOM;
- enum_constant public static final androidx.constraintlayout.core.dsl.Constraint.VSide TOP;
- }
-
- public class ConstraintSet {
- ctor public ConstraintSet(String!);
- method public void add(androidx.constraintlayout.core.dsl.Constraint!);
- method public void add(androidx.constraintlayout.core.dsl.Helper!);
- }
-
- public abstract class Guideline extends androidx.constraintlayout.core.dsl.Helper {
- method public int getEnd();
- method public float getPercent();
- method public int getStart();
- method public void setEnd(int);
- method public void setPercent(float);
- method public void setStart(int);
- }
-
- public class HChain extends androidx.constraintlayout.core.dsl.Chain {
- ctor public HChain(String!);
- ctor public HChain(String!, String!);
- method public androidx.constraintlayout.core.dsl.HChain.HAnchor! getEnd();
- method public androidx.constraintlayout.core.dsl.HChain.HAnchor! getLeft();
- method public androidx.constraintlayout.core.dsl.HChain.HAnchor! getRight();
- method public androidx.constraintlayout.core.dsl.HChain.HAnchor! getStart();
- method public void linkToEnd(androidx.constraintlayout.core.dsl.Constraint.HAnchor!);
- method public void linkToEnd(androidx.constraintlayout.core.dsl.Constraint.HAnchor!, int);
- method public void linkToEnd(androidx.constraintlayout.core.dsl.Constraint.HAnchor!, int, int);
- method public void linkToLeft(androidx.constraintlayout.core.dsl.Constraint.HAnchor!);
- method public void linkToLeft(androidx.constraintlayout.core.dsl.Constraint.HAnchor!, int);
- method public void linkToLeft(androidx.constraintlayout.core.dsl.Constraint.HAnchor!, int, int);
- method public void linkToRight(androidx.constraintlayout.core.dsl.Constraint.HAnchor!);
- method public void linkToRight(androidx.constraintlayout.core.dsl.Constraint.HAnchor!, int);
- method public void linkToRight(androidx.constraintlayout.core.dsl.Constraint.HAnchor!, int, int);
- method public void linkToStart(androidx.constraintlayout.core.dsl.Constraint.HAnchor!);
- method public void linkToStart(androidx.constraintlayout.core.dsl.Constraint.HAnchor!, int);
- method public void linkToStart(androidx.constraintlayout.core.dsl.Constraint.HAnchor!, int, int);
- }
-
- public class HChain.HAnchor extends androidx.constraintlayout.core.dsl.Chain.Anchor {
- }
-
- public class Helper {
- ctor public Helper(String!, androidx.constraintlayout.core.dsl.Helper.HelperType!);
- ctor public Helper(String!, androidx.constraintlayout.core.dsl.Helper.HelperType!, String!);
- method public void append(java.util.Map<java.lang.String!,java.lang.String!>!, StringBuilder!);
- method public java.util.Map<java.lang.String!,java.lang.String!>! convertConfigToMap();
- method public String! getConfig();
- method public String! getId();
- method public androidx.constraintlayout.core.dsl.Helper.HelperType! getType();
- method public static void main(String![]!);
- field protected String! config;
- field protected java.util.Map<java.lang.String!,java.lang.String!>! configMap;
- field protected final String! name;
- field protected static final java.util.Map<androidx.constraintlayout.core.dsl.Constraint.Side!,java.lang.String!>! sideMap;
- field protected androidx.constraintlayout.core.dsl.Helper.HelperType! type;
- field protected static final java.util.Map<androidx.constraintlayout.core.dsl.Helper.Type!,java.lang.String!>! typeMap;
- }
-
- public static final class Helper.HelperType {
- ctor public Helper.HelperType(String!);
- }
-
- public enum Helper.Type {
- enum_constant public static final androidx.constraintlayout.core.dsl.Helper.Type BARRIER;
- enum_constant public static final androidx.constraintlayout.core.dsl.Helper.Type HORIZONTAL_CHAIN;
- enum_constant public static final androidx.constraintlayout.core.dsl.Helper.Type HORIZONTAL_GUIDELINE;
- enum_constant public static final androidx.constraintlayout.core.dsl.Helper.Type VERTICAL_CHAIN;
- enum_constant public static final androidx.constraintlayout.core.dsl.Helper.Type VERTICAL_GUIDELINE;
- }
-
- public class KeyAttribute extends androidx.constraintlayout.core.dsl.Keys {
- ctor public KeyAttribute(int, String!);
- method protected void attributesToString(StringBuilder!);
- method public float getAlpha();
- method public androidx.constraintlayout.core.dsl.KeyAttribute.Fit! getCurveFit();
- method public float getPivotX();
- method public float getPivotY();
- method public float getRotation();
- method public float getRotationX();
- method public float getRotationY();
- method public float getScaleX();
- method public float getScaleY();
- method public String! getTarget();
- method public String! getTransitionEasing();
- method public float getTransitionPathRotate();
- method public float getTranslationX();
- method public float getTranslationY();
- method public float getTranslationZ();
- method public androidx.constraintlayout.core.dsl.KeyAttribute.Visibility! getVisibility();
- method public void setAlpha(float);
- method public void setCurveFit(androidx.constraintlayout.core.dsl.KeyAttribute.Fit!);
- method public void setPivotX(float);
- method public void setPivotY(float);
- method public void setRotation(float);
- method public void setRotationX(float);
- method public void setRotationY(float);
- method public void setScaleX(float);
- method public void setScaleY(float);
- method public void setTarget(String!);
- method public void setTransitionEasing(String!);
- method public void setTransitionPathRotate(float);
- method public void setTranslationX(float);
- method public void setTranslationY(float);
- method public void setTranslationZ(float);
- method public void setVisibility(androidx.constraintlayout.core.dsl.KeyAttribute.Visibility!);
- field protected String! TYPE;
- }
-
- public enum KeyAttribute.Fit {
- enum_constant public static final androidx.constraintlayout.core.dsl.KeyAttribute.Fit LINEAR;
- enum_constant public static final androidx.constraintlayout.core.dsl.KeyAttribute.Fit SPLINE;
- }
-
- public enum KeyAttribute.Visibility {
- enum_constant public static final androidx.constraintlayout.core.dsl.KeyAttribute.Visibility GONE;
- enum_constant public static final androidx.constraintlayout.core.dsl.KeyAttribute.Visibility INVISIBLE;
- enum_constant public static final androidx.constraintlayout.core.dsl.KeyAttribute.Visibility VISIBLE;
- }
-
- public class KeyAttributes extends androidx.constraintlayout.core.dsl.Keys {
- method protected void attributesToString(StringBuilder!);
- method public float[]! getAlpha();
- method public androidx.constraintlayout.core.dsl.KeyAttributes.Fit! getCurveFit();
- method public float[]! getPivotX();
- method public float[]! getPivotY();
- method public float[]! getRotation();
- method public float[]! getRotationX();
- method public float[]! getRotationY();
- method public float[]! getScaleX();
- method public float[]! getScaleY();
- method public String![]! getTarget();
- method public String! getTransitionEasing();
- method public float[]! getTransitionPathRotate();
- method public float[]! getTranslationX();
- method public float[]! getTranslationY();
- method public float[]! getTranslationZ();
- method public androidx.constraintlayout.core.dsl.KeyAttributes.Visibility![]! getVisibility();
- method public void setAlpha(float...);
- method public void setCurveFit(androidx.constraintlayout.core.dsl.KeyAttributes.Fit!);
- method public void setPivotX(float...);
- method public void setPivotY(float...);
- method public void setRotation(float...);
- method public void setRotationX(float...);
- method public void setRotationY(float...);
- method public void setScaleX(float[]!);
- method public void setScaleY(float[]!);
- method public void setTarget(String![]!);
- method public void setTransitionEasing(String!);
- method public void setTransitionPathRotate(float...);
- method public void setTranslationX(float[]!);
- method public void setTranslationY(float[]!);
- method public void setTranslationZ(float[]!);
- method public void setVisibility(androidx.constraintlayout.core.dsl.KeyAttributes.Visibility!...);
- field protected String! TYPE;
- }
-
- public enum KeyAttributes.Fit {
- enum_constant public static final androidx.constraintlayout.core.dsl.KeyAttributes.Fit LINEAR;
- enum_constant public static final androidx.constraintlayout.core.dsl.KeyAttributes.Fit SPLINE;
- }
-
- public enum KeyAttributes.Visibility {
- enum_constant public static final androidx.constraintlayout.core.dsl.KeyAttributes.Visibility GONE;
- enum_constant public static final androidx.constraintlayout.core.dsl.KeyAttributes.Visibility INVISIBLE;
- enum_constant public static final androidx.constraintlayout.core.dsl.KeyAttributes.Visibility VISIBLE;
- }
-
- public class KeyCycle extends androidx.constraintlayout.core.dsl.KeyAttribute {
- method public float getOffset();
- method public float getPeriod();
- method public float getPhase();
- method public androidx.constraintlayout.core.dsl.KeyCycle.Wave! getShape();
- method public void setOffset(float);
- method public void setPeriod(float);
- method public void setPhase(float);
- method public void setShape(androidx.constraintlayout.core.dsl.KeyCycle.Wave!);
- }
-
- public enum KeyCycle.Wave {
- enum_constant public static final androidx.constraintlayout.core.dsl.KeyCycle.Wave COS;
- enum_constant public static final androidx.constraintlayout.core.dsl.KeyCycle.Wave REVERSE_SAW;
- enum_constant public static final androidx.constraintlayout.core.dsl.KeyCycle.Wave SAW;
- enum_constant public static final androidx.constraintlayout.core.dsl.KeyCycle.Wave SIN;
- enum_constant public static final androidx.constraintlayout.core.dsl.KeyCycle.Wave SQUARE;
- enum_constant public static final androidx.constraintlayout.core.dsl.KeyCycle.Wave TRIANGLE;
- }
-
- public class KeyCycles extends androidx.constraintlayout.core.dsl.KeyAttributes {
- method public float[]! getWaveOffset();
- method public float[]! getWavePeriod();
- method public float[]! getWavePhase();
- method public androidx.constraintlayout.core.dsl.KeyCycles.Wave! getWaveShape();
- method public void setWaveOffset(float...);
- method public void setWavePeriod(float...);
- method public void setWavePhase(float...);
- method public void setWaveShape(androidx.constraintlayout.core.dsl.KeyCycles.Wave!);
- }
-
- public enum KeyCycles.Wave {
- enum_constant public static final androidx.constraintlayout.core.dsl.KeyCycles.Wave COS;
- enum_constant public static final androidx.constraintlayout.core.dsl.KeyCycles.Wave REVERSE_SAW;
- enum_constant public static final androidx.constraintlayout.core.dsl.KeyCycles.Wave SAW;
- enum_constant public static final androidx.constraintlayout.core.dsl.KeyCycles.Wave SIN;
- enum_constant public static final androidx.constraintlayout.core.dsl.KeyCycles.Wave SQUARE;
- enum_constant public static final androidx.constraintlayout.core.dsl.KeyCycles.Wave TRIANGLE;
- }
-
- public class KeyFrames {
- ctor public KeyFrames();
- method public void add(androidx.constraintlayout.core.dsl.Keys!);
- }
-
- public class KeyPosition extends androidx.constraintlayout.core.dsl.Keys {
- ctor public KeyPosition(String!, int);
- method public int getFrames();
- method public float getPercentHeight();
- method public float getPercentWidth();
- method public float getPercentX();
- method public float getPercentY();
- method public androidx.constraintlayout.core.dsl.KeyPosition.Type! getPositionType();
- method public String! getTarget();
- method public String! getTransitionEasing();
- method public void setFrames(int);
- method public void setPercentHeight(float);
- method public void setPercentWidth(float);
- method public void setPercentX(float);
- method public void setPercentY(float);
- method public void setPositionType(androidx.constraintlayout.core.dsl.KeyPosition.Type!);
- method public void setTarget(String!);
- method public void setTransitionEasing(String!);
- }
-
- public enum KeyPosition.Type {
- enum_constant public static final androidx.constraintlayout.core.dsl.KeyPosition.Type CARTESIAN;
- enum_constant public static final androidx.constraintlayout.core.dsl.KeyPosition.Type PATH;
- enum_constant public static final androidx.constraintlayout.core.dsl.KeyPosition.Type SCREEN;
- }
-
- public class KeyPositions extends androidx.constraintlayout.core.dsl.Keys {
- ctor public KeyPositions(int, java.lang.String!...);
- method public int[]! getFrames();
- method public float[]! getPercentHeight();
- method public float[]! getPercentWidth();
- method public float[]! getPercentX();
- method public float[]! getPercentY();
- method public androidx.constraintlayout.core.dsl.KeyPositions.Type! getPositionType();
- method public String![]! getTarget();
- method public String! getTransitionEasing();
- method public void setFrames(int...);
- method public void setPercentHeight(float...);
- method public void setPercentWidth(float...);
- method public void setPercentX(float...);
- method public void setPercentY(float...);
- method public void setPositionType(androidx.constraintlayout.core.dsl.KeyPositions.Type!);
- method public void setTransitionEasing(String!);
- }
-
- public enum KeyPositions.Type {
- enum_constant public static final androidx.constraintlayout.core.dsl.KeyPositions.Type CARTESIAN;
- enum_constant public static final androidx.constraintlayout.core.dsl.KeyPositions.Type PATH;
- enum_constant public static final androidx.constraintlayout.core.dsl.KeyPositions.Type SCREEN;
- }
-
- public class Keys {
- ctor public Keys();
- method protected void append(StringBuilder!, String!, int);
- method protected void append(StringBuilder!, String!, String!);
- method protected void append(StringBuilder!, String!, float);
- method protected void append(StringBuilder!, String!, String![]!);
- method protected void append(StringBuilder!, String!, float[]!);
- method protected String! unpack(String![]!);
- }
-
- public class MotionScene {
- ctor public MotionScene();
- method public void addConstraintSet(androidx.constraintlayout.core.dsl.ConstraintSet!);
- method public void addTransition(androidx.constraintlayout.core.dsl.Transition!);
- }
-
- public class OnSwipe {
- ctor public OnSwipe();
- ctor public OnSwipe(String!, androidx.constraintlayout.core.dsl.OnSwipe.Side!, androidx.constraintlayout.core.dsl.OnSwipe.Drag!);
- method public androidx.constraintlayout.core.dsl.OnSwipe.Mode! getAutoCompleteMode();
- method public androidx.constraintlayout.core.dsl.OnSwipe.Drag! getDragDirection();
- method public float getDragScale();
- method public float getDragThreshold();
- method public String! getLimitBoundsTo();
- method public float getMaxAcceleration();
- method public float getMaxVelocity();
- method public androidx.constraintlayout.core.dsl.OnSwipe.TouchUp! getOnTouchUp();
- method public String! getRotationCenterId();
- method public androidx.constraintlayout.core.dsl.OnSwipe.Boundary! getSpringBoundary();
- method public float getSpringDamping();
- method public float getSpringMass();
- method public float getSpringStiffness();
- method public float getSpringStopThreshold();
- method public String! getTouchAnchorId();
- method public androidx.constraintlayout.core.dsl.OnSwipe.Side! getTouchAnchorSide();
- method public void setAutoCompleteMode(androidx.constraintlayout.core.dsl.OnSwipe.Mode!);
- method public androidx.constraintlayout.core.dsl.OnSwipe! setDragDirection(androidx.constraintlayout.core.dsl.OnSwipe.Drag!);
- method public androidx.constraintlayout.core.dsl.OnSwipe! setDragScale(int);
- method public androidx.constraintlayout.core.dsl.OnSwipe! setDragThreshold(int);
- method public androidx.constraintlayout.core.dsl.OnSwipe! setLimitBoundsTo(String!);
- method public androidx.constraintlayout.core.dsl.OnSwipe! setMaxAcceleration(int);
- method public androidx.constraintlayout.core.dsl.OnSwipe! setMaxVelocity(int);
- method public androidx.constraintlayout.core.dsl.OnSwipe! setOnTouchUp(androidx.constraintlayout.core.dsl.OnSwipe.TouchUp!);
- method public androidx.constraintlayout.core.dsl.OnSwipe! setRotateCenter(String!);
- method public androidx.constraintlayout.core.dsl.OnSwipe! setSpringBoundary(androidx.constraintlayout.core.dsl.OnSwipe.Boundary!);
- method public androidx.constraintlayout.core.dsl.OnSwipe! setSpringDamping(float);
- method public androidx.constraintlayout.core.dsl.OnSwipe! setSpringMass(float);
- method public androidx.constraintlayout.core.dsl.OnSwipe! setSpringStiffness(float);
- method public androidx.constraintlayout.core.dsl.OnSwipe! setSpringStopThreshold(float);
- method public androidx.constraintlayout.core.dsl.OnSwipe! setTouchAnchorId(String!);
- method public androidx.constraintlayout.core.dsl.OnSwipe! setTouchAnchorSide(androidx.constraintlayout.core.dsl.OnSwipe.Side!);
- field public static final int FLAG_DISABLE_POST_SCROLL = 1; // 0x1
- field public static final int FLAG_DISABLE_SCROLL = 2; // 0x2
- }
-
- public enum OnSwipe.Boundary {
- enum_constant public static final androidx.constraintlayout.core.dsl.OnSwipe.Boundary BOUNCE_BOTH;
- enum_constant public static final androidx.constraintlayout.core.dsl.OnSwipe.Boundary BOUNCE_END;
- enum_constant public static final androidx.constraintlayout.core.dsl.OnSwipe.Boundary BOUNCE_START;
- enum_constant public static final androidx.constraintlayout.core.dsl.OnSwipe.Boundary OVERSHOOT;
- }
-
- public enum OnSwipe.Drag {
- enum_constant public static final androidx.constraintlayout.core.dsl.OnSwipe.Drag ANTICLOCKWISE;
- enum_constant public static final androidx.constraintlayout.core.dsl.OnSwipe.Drag CLOCKWISE;
- enum_constant public static final androidx.constraintlayout.core.dsl.OnSwipe.Drag DOWN;
- enum_constant public static final androidx.constraintlayout.core.dsl.OnSwipe.Drag END;
- enum_constant public static final androidx.constraintlayout.core.dsl.OnSwipe.Drag LEFT;
- enum_constant public static final androidx.constraintlayout.core.dsl.OnSwipe.Drag RIGHT;
- enum_constant public static final androidx.constraintlayout.core.dsl.OnSwipe.Drag START;
- enum_constant public static final androidx.constraintlayout.core.dsl.OnSwipe.Drag UP;
- }
-
- public enum OnSwipe.Mode {
- enum_constant public static final androidx.constraintlayout.core.dsl.OnSwipe.Mode SPRING;
- enum_constant public static final androidx.constraintlayout.core.dsl.OnSwipe.Mode VELOCITY;
- }
-
- public enum OnSwipe.Side {
- enum_constant public static final androidx.constraintlayout.core.dsl.OnSwipe.Side BOTTOM;
- enum_constant public static final androidx.constraintlayout.core.dsl.OnSwipe.Side END;
- enum_constant public static final androidx.constraintlayout.core.dsl.OnSwipe.Side LEFT;
- enum_constant public static final androidx.constraintlayout.core.dsl.OnSwipe.Side MIDDLE;
- enum_constant public static final androidx.constraintlayout.core.dsl.OnSwipe.Side RIGHT;
- enum_constant public static final androidx.constraintlayout.core.dsl.OnSwipe.Side START;
- enum_constant public static final androidx.constraintlayout.core.dsl.OnSwipe.Side TOP;
- }
-
- public enum OnSwipe.TouchUp {
- enum_constant public static final androidx.constraintlayout.core.dsl.OnSwipe.TouchUp AUTOCOMPLETE;
- enum_constant public static final androidx.constraintlayout.core.dsl.OnSwipe.TouchUp DECELERATE;
- enum_constant public static final androidx.constraintlayout.core.dsl.OnSwipe.TouchUp DECELERATE_COMPLETE;
- enum_constant public static final androidx.constraintlayout.core.dsl.OnSwipe.TouchUp NEVER_COMPLETE_END;
- enum_constant public static final androidx.constraintlayout.core.dsl.OnSwipe.TouchUp NEVER_COMPLETE_START;
- enum_constant public static final androidx.constraintlayout.core.dsl.OnSwipe.TouchUp STOP;
- enum_constant public static final androidx.constraintlayout.core.dsl.OnSwipe.TouchUp TO_END;
- enum_constant public static final androidx.constraintlayout.core.dsl.OnSwipe.TouchUp TO_START;
- }
-
- public class Ref {
- method public static void addStringToReferences(String!, java.util.ArrayList<androidx.constraintlayout.core.dsl.Ref!>!);
- method public String! getId();
- method public float getPostMargin();
- method public float getPreMargin();
- method public float getWeight();
- method public static float parseFloat(Object!);
- method public static androidx.constraintlayout.core.dsl.Ref! parseStringToRef(String!);
- method public void setId(String!);
- method public void setPostMargin(float);
- method public void setPreMargin(float);
- method public void setWeight(float);
- }
-
- public class Transition {
- ctor public Transition(String!, String!);
- ctor public Transition(String!, String!, String!);
- method public String! getId();
- method public void setDuration(int);
- method public void setFrom(String!);
- method public void setId(String!);
- method public void setKeyFrames(androidx.constraintlayout.core.dsl.Keys!);
- method public void setOnSwipe(androidx.constraintlayout.core.dsl.OnSwipe!);
- method public void setStagger(float);
- method public void setTo(String!);
- }
-
- public class VChain extends androidx.constraintlayout.core.dsl.Chain {
- ctor public VChain(String!);
- ctor public VChain(String!, String!);
- method public androidx.constraintlayout.core.dsl.VChain.VAnchor! getBaseline();
- method public androidx.constraintlayout.core.dsl.VChain.VAnchor! getBottom();
- method public androidx.constraintlayout.core.dsl.VChain.VAnchor! getTop();
- method public void linkToBaseline(androidx.constraintlayout.core.dsl.Constraint.VAnchor!);
- method public void linkToBaseline(androidx.constraintlayout.core.dsl.Constraint.VAnchor!, int);
- method public void linkToBaseline(androidx.constraintlayout.core.dsl.Constraint.VAnchor!, int, int);
- method public void linkToBottom(androidx.constraintlayout.core.dsl.Constraint.VAnchor!);
- method public void linkToBottom(androidx.constraintlayout.core.dsl.Constraint.VAnchor!, int);
- method public void linkToBottom(androidx.constraintlayout.core.dsl.Constraint.VAnchor!, int, int);
- method public void linkToTop(androidx.constraintlayout.core.dsl.Constraint.VAnchor!);
- method public void linkToTop(androidx.constraintlayout.core.dsl.Constraint.VAnchor!, int);
- method public void linkToTop(androidx.constraintlayout.core.dsl.Constraint.VAnchor!, int, int);
- }
-
- public class VChain.VAnchor extends androidx.constraintlayout.core.dsl.Chain.Anchor {
- }
-
- public class VGuideline extends androidx.constraintlayout.core.dsl.Guideline {
- ctor public VGuideline(String!);
- ctor public VGuideline(String!, String!);
- }
-
-}
-
-package androidx.constraintlayout.core.motion {
-
- public class CustomAttribute {
- ctor public CustomAttribute(String!, androidx.constraintlayout.core.motion.CustomAttribute.AttributeType!);
- ctor public CustomAttribute(String!, androidx.constraintlayout.core.motion.CustomAttribute.AttributeType!, Object!, boolean);
- ctor public CustomAttribute(androidx.constraintlayout.core.motion.CustomAttribute!, Object!);
- method public boolean diff(androidx.constraintlayout.core.motion.CustomAttribute!);
- method public androidx.constraintlayout.core.motion.CustomAttribute.AttributeType! getType();
- method public float getValueToInterpolate();
- method public void getValuesToInterpolate(float[]!);
- method public static int hsvToRgb(float, float, float);
- method public boolean isContinuous();
- method public int numberOfInterpolatedValues();
- method public void setColorValue(int);
- method public void setFloatValue(float);
- method public void setIntValue(int);
- method public void setStringValue(String!);
- method public void setValue(float[]!);
- method public void setValue(Object!);
- }
-
- public enum CustomAttribute.AttributeType {
- enum_constant public static final androidx.constraintlayout.core.motion.CustomAttribute.AttributeType BOOLEAN_TYPE;
- enum_constant public static final androidx.constraintlayout.core.motion.CustomAttribute.AttributeType COLOR_DRAWABLE_TYPE;
- enum_constant public static final androidx.constraintlayout.core.motion.CustomAttribute.AttributeType COLOR_TYPE;
- enum_constant public static final androidx.constraintlayout.core.motion.CustomAttribute.AttributeType DIMENSION_TYPE;
- enum_constant public static final androidx.constraintlayout.core.motion.CustomAttribute.AttributeType FLOAT_TYPE;
- enum_constant public static final androidx.constraintlayout.core.motion.CustomAttribute.AttributeType INT_TYPE;
- enum_constant public static final androidx.constraintlayout.core.motion.CustomAttribute.AttributeType REFERENCE_TYPE;
- enum_constant public static final androidx.constraintlayout.core.motion.CustomAttribute.AttributeType STRING_TYPE;
- }
-
- public class CustomVariable {
- ctor public CustomVariable(androidx.constraintlayout.core.motion.CustomVariable!);
- ctor public CustomVariable(String!, int, String!);
- ctor public CustomVariable(String!, int, int);
- ctor public CustomVariable(String!, int, float);
- ctor public CustomVariable(String!, int, boolean);
- ctor public CustomVariable(String!, int);
- ctor public CustomVariable(String!, int, Object!);
- ctor public CustomVariable(androidx.constraintlayout.core.motion.CustomVariable!, Object!);
- method public void applyToWidget(androidx.constraintlayout.core.motion.MotionWidget!);
- method public static String! colorString(int);
- method public androidx.constraintlayout.core.motion.CustomVariable! copy();
- method public boolean diff(androidx.constraintlayout.core.motion.CustomVariable!);
- method public boolean getBooleanValue();
- method public int getColorValue();
- method public float getFloatValue();
- method public int getIntegerValue();
- method public int getInterpolatedColor(float[]!);
- method public String! getName();
- method public String! getStringValue();
- method public int getType();
- method public float getValueToInterpolate();
- method public void getValuesToInterpolate(float[]!);
- method public static int hsvToRgb(float, float, float);
- method public boolean isContinuous();
- method public int numberOfInterpolatedValues();
- method public static int rgbaTocColor(float, float, float, float);
- method public void setBooleanValue(boolean);
- method public void setFloatValue(float);
- method public void setIntValue(int);
- method public void setInterpolatedValue(androidx.constraintlayout.core.motion.MotionWidget!, float[]!);
- method public void setStringValue(String!);
- method public void setValue(float[]!);
- method public void setValue(Object!);
- }
-
- public class Motion implements androidx.constraintlayout.core.motion.utils.TypedValues {
- ctor public Motion(androidx.constraintlayout.core.motion.MotionWidget!);
- method public void addKey(androidx.constraintlayout.core.motion.key.MotionKey!);
- method public int buildKeyFrames(float[]!, int[]!, int[]!);
- method public void buildPath(float[]!, int);
- method public void buildRect(float, float[]!, int);
- method public String! getAnimateRelativeTo();
- method public void getCenter(double, float[]!, float[]!);
- method public float getCenterX();
- method public float getCenterY();
- method public void getDpDt(float, float, float, float[]!);
- method public int getDrawPath();
- method public float getFinalHeight();
- method public float getFinalWidth();
- method public float getFinalX();
- method public float getFinalY();
- method public int getId(String!);
- method public androidx.constraintlayout.core.motion.MotionPaths! getKeyFrame(int);
- method public int getKeyFrameInfo(int, int[]!);
- method public int getKeyFramePositions(int[]!, float[]!);
- method public float getMotionStagger();
- method public float getStartHeight();
- method public float getStartWidth();
- method public float getStartX();
- method public float getStartY();
- method public int getTransformPivotTarget();
- method public androidx.constraintlayout.core.motion.MotionWidget! getView();
- method public boolean interpolate(androidx.constraintlayout.core.motion.MotionWidget!, float, long, androidx.constraintlayout.core.motion.utils.KeyCache!);
- method public void setDrawPath(int);
- method public void setEnd(androidx.constraintlayout.core.motion.MotionWidget!);
- method public void setIdString(String!);
- method public void setPathMotionArc(int);
- method public void setStaggerOffset(float);
- method public void setStaggerScale(float);
- method public void setStart(androidx.constraintlayout.core.motion.MotionWidget!);
- method public void setStartState(androidx.constraintlayout.core.motion.utils.ViewState!, androidx.constraintlayout.core.motion.MotionWidget!, int, int, int);
- method public void setTransformPivotTarget(int);
- method public boolean setValue(int, int);
- method public boolean setValue(int, float);
- method public boolean setValue(int, String!);
- method public boolean setValue(int, boolean);
- method public void setView(androidx.constraintlayout.core.motion.MotionWidget!);
- method public void setup(int, int, float, long);
- method public void setupRelative(androidx.constraintlayout.core.motion.Motion!);
- field public static final int DRAW_PATH_AS_CONFIGURED = 4; // 0x4
- field public static final int DRAW_PATH_BASIC = 1; // 0x1
- field public static final int DRAW_PATH_CARTESIAN = 3; // 0x3
- field public static final int DRAW_PATH_NONE = 0; // 0x0
- field public static final int DRAW_PATH_RECTANGLE = 5; // 0x5
- field public static final int DRAW_PATH_RELATIVE = 2; // 0x2
- field public static final int DRAW_PATH_SCREEN = 6; // 0x6
- field public static final int HORIZONTAL_PATH_X = 2; // 0x2
- field public static final int HORIZONTAL_PATH_Y = 3; // 0x3
- field public static final int PATH_PERCENT = 0; // 0x0
- field public static final int PATH_PERPENDICULAR = 1; // 0x1
- field public static final int ROTATION_LEFT = 2; // 0x2
- field public static final int ROTATION_RIGHT = 1; // 0x1
- field public static final int VERTICAL_PATH_X = 4; // 0x4
- field public static final int VERTICAL_PATH_Y = 5; // 0x5
- field public String! mId;
- }
-
- public class MotionPaths implements java.lang.Comparable<androidx.constraintlayout.core.motion.MotionPaths> {
- ctor public MotionPaths();
- ctor public MotionPaths(int, int, androidx.constraintlayout.core.motion.key.MotionKeyPosition!, androidx.constraintlayout.core.motion.MotionPaths!, androidx.constraintlayout.core.motion.MotionPaths!);
- method public void applyParameters(androidx.constraintlayout.core.motion.MotionWidget!);
- method public int compareTo(androidx.constraintlayout.core.motion.MotionPaths!);
- method public void configureRelativeTo(androidx.constraintlayout.core.motion.Motion!);
- method public void setupRelative(androidx.constraintlayout.core.motion.Motion!, androidx.constraintlayout.core.motion.MotionPaths!);
- field public static final int CARTESIAN = 0; // 0x0
- field public static final boolean DEBUG = false;
- field public static final boolean OLD_WAY = false;
- field public static final int PERPENDICULAR = 1; // 0x1
- field public static final int SCREEN = 2; // 0x2
- field public static final String TAG = "MotionPaths";
- field public String! mId;
- }
-
- public class MotionWidget implements androidx.constraintlayout.core.motion.utils.TypedValues {
- ctor public MotionWidget();
- ctor public MotionWidget(androidx.constraintlayout.core.state.WidgetFrame!);
- method public androidx.constraintlayout.core.motion.MotionWidget! findViewById(int);
- method public float getAlpha();
- method public int getBottom();
- method public androidx.constraintlayout.core.motion.CustomVariable! getCustomAttribute(String!);
- method public java.util.Set<java.lang.String!>! getCustomAttributeNames();
- method public int getHeight();
- method public int getId(String!);
- method public int getLeft();
- method public String! getName();
- method public androidx.constraintlayout.core.motion.MotionWidget! getParent();
- method public float getPivotX();
- method public float getPivotY();
- method public int getRight();
- method public float getRotationX();
- method public float getRotationY();
- method public float getRotationZ();
- method public float getScaleX();
- method public float getScaleY();
- method public int getTop();
- method public float getTranslationX();
- method public float getTranslationY();
- method public float getTranslationZ();
- method public float getValueAttributes(int);
- method public int getVisibility();
- method public androidx.constraintlayout.core.state.WidgetFrame! getWidgetFrame();
- method public int getWidth();
- method public int getX();
- method public int getY();
- method public void layout(int, int, int, int);
- method public void setBounds(int, int, int, int);
- method public void setCustomAttribute(String!, int, float);
- method public void setCustomAttribute(String!, int, int);
- method public void setCustomAttribute(String!, int, boolean);
- method public void setCustomAttribute(String!, int, String!);
- method public void setInterpolatedValue(androidx.constraintlayout.core.motion.CustomAttribute!, float[]!);
- method public void setPivotX(float);
- method public void setPivotY(float);
- method public void setRotationX(float);
- method public void setRotationY(float);
- method public void setRotationZ(float);
- method public void setScaleX(float);
- method public void setScaleY(float);
- method public void setTranslationX(float);
- method public void setTranslationY(float);
- method public void setTranslationZ(float);
- method public boolean setValue(int, int);
- method public boolean setValue(int, float);
- method public boolean setValue(int, String!);
- method public boolean setValue(int, boolean);
- method public boolean setValueAttributes(int, float);
- method public boolean setValueMotion(int, int);
- method public boolean setValueMotion(int, String!);
- method public boolean setValueMotion(int, float);
- method public void setVisibility(int);
- method public void updateMotion(androidx.constraintlayout.core.motion.utils.TypedValues!);
- field public static final int FILL_PARENT = -1; // 0xffffffff
- field public static final int GONE_UNSET = -2147483648; // 0x80000000
- field public static final int INVISIBLE = 0; // 0x0
- field public static final int MATCH_CONSTRAINT = 0; // 0x0
- field public static final int MATCH_CONSTRAINT_WRAP = 1; // 0x1
- field public static final int MATCH_PARENT = -1; // 0xffffffff
- field public static final int PARENT_ID = 0; // 0x0
- field public static final int ROTATE_LEFT_OF_PORTRATE = 4; // 0x4
- field public static final int ROTATE_NONE = 0; // 0x0
- field public static final int ROTATE_PORTRATE_OF_LEFT = 2; // 0x2
- field public static final int ROTATE_PORTRATE_OF_RIGHT = 1; // 0x1
- field public static final int ROTATE_RIGHT_OF_PORTRATE = 3; // 0x3
- field public static final int UNSET = -1; // 0xffffffff
- field public static final int VISIBILITY_MODE_IGNORE = 1; // 0x1
- field public static final int VISIBILITY_MODE_NORMAL = 0; // 0x0
- field public static final int VISIBLE = 4; // 0x4
- field public static final int WRAP_CONTENT = -2; // 0xfffffffe
- }
-
- public static class MotionWidget.Motion {
- ctor public MotionWidget.Motion();
- field public int mAnimateCircleAngleTo;
- field public String! mAnimateRelativeTo;
- field public int mDrawPath;
- field public float mMotionStagger;
- field public int mPathMotionArc;
- field public float mPathRotate;
- field public int mPolarRelativeTo;
- field public int mQuantizeInterpolatorID;
- field public String! mQuantizeInterpolatorString;
- field public int mQuantizeInterpolatorType;
- field public float mQuantizeMotionPhase;
- field public int mQuantizeMotionSteps;
- field public String! mTransitionEasing;
- }
-
- public static class MotionWidget.PropertySet {
- ctor public MotionWidget.PropertySet();
- field public float alpha;
- field public float mProgress;
- field public int mVisibilityMode;
- field public int visibility;
- }
-
-}
-
-package androidx.constraintlayout.core.motion.key {
-
- public class MotionConstraintSet {
- ctor public MotionConstraintSet();
- field public static final int ROTATE_LEFT_OF_PORTRATE = 4; // 0x4
- field public static final int ROTATE_NONE = 0; // 0x0
- field public static final int ROTATE_PORTRATE_OF_LEFT = 2; // 0x2
- field public static final int ROTATE_PORTRATE_OF_RIGHT = 1; // 0x1
- field public static final int ROTATE_RIGHT_OF_PORTRATE = 3; // 0x3
- field public String! mIdString;
- field public int mRotate;
- }
-
- public abstract class MotionKey implements androidx.constraintlayout.core.motion.utils.TypedValues {
- ctor public MotionKey();
- method public abstract void addValues(java.util.HashMap<java.lang.String!,androidx.constraintlayout.core.motion.utils.SplineSet!>!);
- method public abstract androidx.constraintlayout.core.motion.key.MotionKey! clone();
- method public androidx.constraintlayout.core.motion.key.MotionKey! copy(androidx.constraintlayout.core.motion.key.MotionKey!);
- method public abstract void getAttributeNames(java.util.HashSet<java.lang.String!>!);
- method public int getFramePosition();
- method public void setCustomAttribute(String!, int, float);
- method public void setCustomAttribute(String!, int, int);
- method public void setCustomAttribute(String!, int, boolean);
- method public void setCustomAttribute(String!, int, String!);
- method public void setFramePosition(int);
- method public void setInterpolation(java.util.HashMap<java.lang.String!,java.lang.Integer!>!);
- method public boolean setValue(int, int);
- method public boolean setValue(int, float);
- method public boolean setValue(int, String!);
- method public boolean setValue(int, boolean);
- method public androidx.constraintlayout.core.motion.key.MotionKey! setViewId(int);
- field public static final String ALPHA = "alpha";
- field public static final String CUSTOM = "CUSTOM";
- field public static final String ELEVATION = "elevation";
- field public static final String ROTATION = "rotationZ";
- field public static final String ROTATION_X = "rotationX";
- field public static final String SCALE_X = "scaleX";
- field public static final String SCALE_Y = "scaleY";
- field public static final String TRANSITION_PATH_ROTATE = "transitionPathRotate";
- field public static final String TRANSLATION_X = "translationX";
- field public static final String TRANSLATION_Y = "translationY";
- field public static int UNSET;
- field public static final String VISIBILITY = "visibility";
- field public java.util.HashMap<java.lang.String!,androidx.constraintlayout.core.motion.CustomVariable!>! mCustom;
- field public int mFramePosition;
- field public int mType;
- }
-
- public class MotionKeyAttributes extends androidx.constraintlayout.core.motion.key.MotionKey {
- ctor public MotionKeyAttributes();
- method public void addValues(java.util.HashMap<java.lang.String!,androidx.constraintlayout.core.motion.utils.SplineSet!>!);
- method public androidx.constraintlayout.core.motion.key.MotionKey! clone();
- method public void getAttributeNames(java.util.HashSet<java.lang.String!>!);
- method public int getCurveFit();
- method public int getId(String!);
- method public void printAttributes();
- field public static final int KEY_TYPE = 1; // 0x1
- }
-
- public class MotionKeyCycle extends androidx.constraintlayout.core.motion.key.MotionKey {
- ctor public MotionKeyCycle();
- method public void addCycleValues(java.util.HashMap<java.lang.String!,androidx.constraintlayout.core.motion.utils.KeyCycleOscillator!>!);
- method public void addValues(java.util.HashMap<java.lang.String!,androidx.constraintlayout.core.motion.utils.SplineSet!>!);
- method public androidx.constraintlayout.core.motion.key.MotionKey! clone();
- method public void dump();
- method public void getAttributeNames(java.util.HashSet<java.lang.String!>!);
- method public int getId(String!);
- method public float getValue(String!);
- method public void printAttributes();
- field public static final int KEY_TYPE = 4; // 0x4
- field public static final int SHAPE_BOUNCE = 6; // 0x6
- field public static final int SHAPE_COS_WAVE = 5; // 0x5
- field public static final int SHAPE_REVERSE_SAW_WAVE = 4; // 0x4
- field public static final int SHAPE_SAW_WAVE = 3; // 0x3
- field public static final int SHAPE_SIN_WAVE = 0; // 0x0
- field public static final int SHAPE_SQUARE_WAVE = 1; // 0x1
- field public static final int SHAPE_TRIANGLE_WAVE = 2; // 0x2
- field public static final String WAVE_OFFSET = "waveOffset";
- field public static final String WAVE_PERIOD = "wavePeriod";
- field public static final String WAVE_PHASE = "wavePhase";
- field public static final String WAVE_SHAPE = "waveShape";
- }
-
- public class MotionKeyPosition extends androidx.constraintlayout.core.motion.key.MotionKey {
- ctor public MotionKeyPosition();
- method public void addValues(java.util.HashMap<java.lang.String!,androidx.constraintlayout.core.motion.utils.SplineSet!>!);
- method public androidx.constraintlayout.core.motion.key.MotionKey! clone();
- method public void getAttributeNames(java.util.HashSet<java.lang.String!>!);
- method public int getId(String!);
- method public boolean intersects(int, int, androidx.constraintlayout.core.motion.utils.FloatRect!, androidx.constraintlayout.core.motion.utils.FloatRect!, float, float);
- method public void positionAttributes(androidx.constraintlayout.core.motion.MotionWidget!, androidx.constraintlayout.core.motion.utils.FloatRect!, androidx.constraintlayout.core.motion.utils.FloatRect!, float, float, String![]!, float[]!);
- field protected static final float SELECTION_SLOPE = 20.0f;
- field public static final int TYPE_CARTESIAN = 0; // 0x0
- field public static final int TYPE_PATH = 1; // 0x1
- field public static final int TYPE_SCREEN = 2; // 0x2
- field public float mAltPercentX;
- field public float mAltPercentY;
- field public int mCurveFit;
- field public int mDrawPath;
- field public int mPathMotionArc;
- field public float mPercentHeight;
- field public float mPercentWidth;
- field public float mPercentX;
- field public float mPercentY;
- field public int mPositionType;
- field public String! mTransitionEasing;
- }
-
- public class MotionKeyTimeCycle extends androidx.constraintlayout.core.motion.key.MotionKey {
- ctor public MotionKeyTimeCycle();
- method public void addTimeValues(java.util.HashMap<java.lang.String!,androidx.constraintlayout.core.motion.utils.TimeCycleSplineSet!>!);
- method public void addValues(java.util.HashMap<java.lang.String!,androidx.constraintlayout.core.motion.utils.SplineSet!>!);
- method public androidx.constraintlayout.core.motion.key.MotionKey! clone();
- method public androidx.constraintlayout.core.motion.key.MotionKeyTimeCycle! copy(androidx.constraintlayout.core.motion.key.MotionKey!);
- method public void getAttributeNames(java.util.HashSet<java.lang.String!>!);
- method public int getId(String!);
- field public static final int KEY_TYPE = 3; // 0x3
- }
-
- public class MotionKeyTrigger extends androidx.constraintlayout.core.motion.key.MotionKey {
- ctor public MotionKeyTrigger();
- method public void addValues(java.util.HashMap<java.lang.String!,androidx.constraintlayout.core.motion.utils.SplineSet!>!);
- method public androidx.constraintlayout.core.motion.key.MotionKey! clone();
- method public void conditionallyFire(float, androidx.constraintlayout.core.motion.MotionWidget!);
- method public androidx.constraintlayout.core.motion.key.MotionKeyTrigger! copy(androidx.constraintlayout.core.motion.key.MotionKey!);
- method public void getAttributeNames(java.util.HashSet<java.lang.String!>!);
- method public int getId(String!);
- field public static final String CROSS = "CROSS";
- field public static final int KEY_TYPE = 5; // 0x5
- field public static final String NEGATIVE_CROSS = "negativeCross";
- field public static final String POSITIVE_CROSS = "positiveCross";
- field public static final String POST_LAYOUT = "postLayout";
- field public static final String TRIGGER_COLLISION_ID = "triggerCollisionId";
- field public static final String TRIGGER_COLLISION_VIEW = "triggerCollisionView";
- field public static final String TRIGGER_ID = "triggerID";
- field public static final String TRIGGER_RECEIVER = "triggerReceiver";
- field public static final String TRIGGER_SLACK = "triggerSlack";
- field public static final int TYPE_CROSS = 312; // 0x138
- field public static final int TYPE_NEGATIVE_CROSS = 310; // 0x136
- field public static final int TYPE_POSITIVE_CROSS = 309; // 0x135
- field public static final int TYPE_POST_LAYOUT = 304; // 0x130
- field public static final int TYPE_TRIGGER_COLLISION_ID = 307; // 0x133
- field public static final int TYPE_TRIGGER_COLLISION_VIEW = 306; // 0x132
- field public static final int TYPE_TRIGGER_ID = 308; // 0x134
- field public static final int TYPE_TRIGGER_RECEIVER = 311; // 0x137
- field public static final int TYPE_TRIGGER_SLACK = 305; // 0x131
- field public static final int TYPE_VIEW_TRANSITION_ON_CROSS = 301; // 0x12d
- field public static final int TYPE_VIEW_TRANSITION_ON_NEGATIVE_CROSS = 303; // 0x12f
- field public static final int TYPE_VIEW_TRANSITION_ON_POSITIVE_CROSS = 302; // 0x12e
- field public static final String VIEW_TRANSITION_ON_CROSS = "viewTransitionOnCross";
- field public static final String VIEW_TRANSITION_ON_NEGATIVE_CROSS = "viewTransitionOnNegativeCross";
- field public static final String VIEW_TRANSITION_ON_POSITIVE_CROSS = "viewTransitionOnPositiveCross";
- }
-
-}
-
-package androidx.constraintlayout.core.motion.parse {
-
- public class KeyParser {
- ctor public KeyParser();
- method public static void main(String![]!);
- method public static androidx.constraintlayout.core.motion.utils.TypedBundle! parseAttributes(String!);
- }
-
-}
-
-package androidx.constraintlayout.core.motion.utils {
-
- public class ArcCurveFit extends androidx.constraintlayout.core.motion.utils.CurveFit {
- ctor public ArcCurveFit(int[]!, double[]!, double[]![]!);
- method public void getPos(double, double[]!);
- method public void getPos(double, float[]!);
- method public double getPos(double, int);
- method public void getSlope(double, double[]!);
- method public double getSlope(double, int);
- method public double[]! getTimePoints();
- field public static final int ARC_ABOVE = 5; // 0x5
- field public static final int ARC_BELOW = 4; // 0x4
- field public static final int ARC_START_FLIP = 3; // 0x3
- field public static final int ARC_START_HORIZONTAL = 2; // 0x2
- field public static final int ARC_START_LINEAR = 0; // 0x0
- field public static final int ARC_START_VERTICAL = 1; // 0x1
- }
-
- public abstract class CurveFit {
- ctor public CurveFit();
- method public static androidx.constraintlayout.core.motion.utils.CurveFit! get(int, double[]!, double[]![]!);
- method public static androidx.constraintlayout.core.motion.utils.CurveFit! getArc(int[]!, double[]!, double[]![]!);
- method public abstract void getPos(double, double[]!);
- method public abstract void getPos(double, float[]!);
- method public abstract double getPos(double, int);
- method public abstract void getSlope(double, double[]!);
- method public abstract double getSlope(double, int);
- method public abstract double[]! getTimePoints();
- field public static final int CONSTANT = 2; // 0x2
- field public static final int LINEAR = 1; // 0x1
- field public static final int SPLINE = 0; // 0x0
- }
-
- public interface DifferentialInterpolator {
- method public float getInterpolation(float);
- method public float getVelocity();
- }
-
- public class Easing {
- ctor public Easing();
- method public double get(double);
- method public double getDiff(double);
- method public static androidx.constraintlayout.core.motion.utils.Easing! getInterpolator(String!);
- field public static String![]! NAMED_EASING;
- }
-
- public class FloatRect {
- ctor public FloatRect();
- method public final float centerX();
- method public final float centerY();
- field public float bottom;
- field public float left;
- field public float right;
- field public float top;
- }
-
- public class HyperSpline {
- ctor public HyperSpline(double[]![]!);
- ctor public HyperSpline();
- method public double approxLength(androidx.constraintlayout.core.motion.utils.HyperSpline.Cubic![]!);
- method public void getPos(double, double[]!);
- method public void getPos(double, float[]!);
- method public double getPos(double, int);
- method public void getVelocity(double, double[]!);
- method public void setup(double[]![]!);
- }
-
- public static class HyperSpline.Cubic {
- ctor public HyperSpline.Cubic(double, double, double, double);
- method public double eval(double);
- method public double vel(double);
- }
-
- public class KeyCache {
- ctor public KeyCache();
- method public float getFloatValue(Object!, String!, int);
- method public void setFloatValue(Object!, String!, int, float);
- }
-
- public abstract class KeyCycleOscillator {
- ctor public KeyCycleOscillator();
- method public float get(float);
- method public androidx.constraintlayout.core.motion.utils.CurveFit! getCurveFit();
- method public float getSlope(float);
- method public static androidx.constraintlayout.core.motion.utils.KeyCycleOscillator! makeWidgetCycle(String!);
- method protected void setCustom(Object!);
- method public void setPoint(int, int, String!, int, float, float, float, float, Object!);
- method public void setPoint(int, int, String!, int, float, float, float, float);
- method public void setProperty(androidx.constraintlayout.core.motion.MotionWidget!, float);
- method public void setType(String!);
- method public void setup(float);
- method public boolean variesByPath();
- field public int mVariesBy;
- }
-
- public static class KeyCycleOscillator.PathRotateSet extends androidx.constraintlayout.core.motion.utils.KeyCycleOscillator {
- ctor public KeyCycleOscillator.PathRotateSet(String!);
- method public void setPathRotate(androidx.constraintlayout.core.motion.MotionWidget!, float, double, double);
- }
-
- public class KeyFrameArray {
- ctor public KeyFrameArray();
- }
-
- public static class KeyFrameArray.CustomArray {
- ctor public KeyFrameArray.CustomArray();
- method public void append(int, androidx.constraintlayout.core.motion.CustomAttribute!);
- method public void clear();
- method public void dump();
- method public int keyAt(int);
- method public void remove(int);
- method public int size();
- method public androidx.constraintlayout.core.motion.CustomAttribute! valueAt(int);
- }
-
- public static class KeyFrameArray.CustomVar {
- ctor public KeyFrameArray.CustomVar();
- method public void append(int, androidx.constraintlayout.core.motion.CustomVariable!);
- method public void clear();
- method public void dump();
- method public int keyAt(int);
- method public void remove(int);
- method public int size();
- method public androidx.constraintlayout.core.motion.CustomVariable! valueAt(int);
- }
-
- public class LinearCurveFit extends androidx.constraintlayout.core.motion.utils.CurveFit {
- ctor public LinearCurveFit(double[]!, double[]![]!);
- method public void getPos(double, double[]!);
- method public void getPos(double, float[]!);
- method public double getPos(double, int);
- method public void getSlope(double, double[]!);
- method public double getSlope(double, int);
- method public double[]! getTimePoints();
- }
-
- public class MonotonicCurveFit extends androidx.constraintlayout.core.motion.utils.CurveFit {
- ctor public MonotonicCurveFit(double[]!, double[]![]!);
- method public static androidx.constraintlayout.core.motion.utils.MonotonicCurveFit! buildWave(String!);
- method public void getPos(double, double[]!);
- method public void getPos(double, float[]!);
- method public double getPos(double, int);
- method public void getSlope(double, double[]!);
- method public double getSlope(double, int);
- method public double[]! getTimePoints();
- }
-
- public class Oscillator {
- ctor public Oscillator();
- method public void addPoint(double, float);
- method public double getSlope(double, double, double);
- method public double getValue(double, double);
- method public void normalize();
- method public void setType(int, String!);
- field public static final int BOUNCE = 6; // 0x6
- field public static final int COS_WAVE = 5; // 0x5
- field public static final int CUSTOM = 7; // 0x7
- field public static final int REVERSE_SAW_WAVE = 4; // 0x4
- field public static final int SAW_WAVE = 3; // 0x3
- field public static final int SIN_WAVE = 0; // 0x0
- field public static final int SQUARE_WAVE = 1; // 0x1
- field public static String! TAG;
- field public static final int TRIANGLE_WAVE = 2; // 0x2
- }
-
- public class Rect {
- ctor public Rect();
- method public int height();
- method public int width();
- field public int bottom;
- field public int left;
- field public int right;
- field public int top;
- }
-
- public class Schlick extends androidx.constraintlayout.core.motion.utils.Easing {
- }
-
- public abstract class SplineSet {
- ctor public SplineSet();
- method public float get(float);
- method public androidx.constraintlayout.core.motion.utils.CurveFit! getCurveFit();
- method public float getSlope(float);
- method public static androidx.constraintlayout.core.motion.utils.SplineSet! makeCustomSpline(String!, androidx.constraintlayout.core.motion.utils.KeyFrameArray.CustomArray!);
- method public static androidx.constraintlayout.core.motion.utils.SplineSet! makeCustomSplineSet(String!, androidx.constraintlayout.core.motion.utils.KeyFrameArray.CustomVar!);
- method public static androidx.constraintlayout.core.motion.utils.SplineSet! makeSpline(String!, long);
- method public void setPoint(int, float);
- method public void setProperty(androidx.constraintlayout.core.motion.utils.TypedValues!, float);
- method public void setType(String!);
- method public void setup(int);
- field protected androidx.constraintlayout.core.motion.utils.CurveFit! mCurveFit;
- field protected int[]! mTimePoints;
- field protected float[]! mValues;
- }
-
- public static class SplineSet.CustomSet extends androidx.constraintlayout.core.motion.utils.SplineSet {
- ctor public SplineSet.CustomSet(String!, androidx.constraintlayout.core.motion.utils.KeyFrameArray.CustomArray!);
- method public void setPoint(int, androidx.constraintlayout.core.motion.CustomAttribute!);
- method public void setProperty(androidx.constraintlayout.core.state.WidgetFrame!, float);
- }
-
- public static class SplineSet.CustomSpline extends androidx.constraintlayout.core.motion.utils.SplineSet {
- ctor public SplineSet.CustomSpline(String!, androidx.constraintlayout.core.motion.utils.KeyFrameArray.CustomVar!);
- method public void setPoint(int, androidx.constraintlayout.core.motion.CustomVariable!);
- method public void setProperty(androidx.constraintlayout.core.motion.MotionWidget!, float);
- }
-
- public class SpringStopEngine implements androidx.constraintlayout.core.motion.utils.StopEngine {
- ctor public SpringStopEngine();
- method public String! debug(String!, float);
- method public float getAcceleration();
- method public float getInterpolation(float);
- method public float getVelocity(float);
- method public float getVelocity();
- method public boolean isStopped();
- method public void springConfig(float, float, float, float, float, float, float, int);
- }
-
- public class StepCurve extends androidx.constraintlayout.core.motion.utils.Easing {
- }
-
- public interface StopEngine {
- method public String! debug(String!, float);
- method public float getInterpolation(float);
- method public float getVelocity(float);
- method public float getVelocity();
- method public boolean isStopped();
- }
-
- public class StopLogicEngine implements androidx.constraintlayout.core.motion.utils.StopEngine {
- ctor public StopLogicEngine();
- method public void config(float, float, float, float, float, float);
- method public String! debug(String!, float);
- method public float getInterpolation(float);
- method public float getVelocity(float);
- method public float getVelocity();
- method public boolean isStopped();
- }
-
- public static class StopLogicEngine.Decelerate implements androidx.constraintlayout.core.motion.utils.StopEngine {
- ctor public StopLogicEngine.Decelerate();
- method public void config(float, float, float);
- method public String! debug(String!, float);
- method public float getInterpolation(float);
- method public float getVelocity(float);
- method public float getVelocity();
- method public boolean isStopped();
- }
-
- public abstract class TimeCycleSplineSet {
- ctor public TimeCycleSplineSet();
- method protected float calcWave(float);
- method public androidx.constraintlayout.core.motion.utils.CurveFit! getCurveFit();
- method public void setPoint(int, float, float, int, float);
- method protected void setStartTime(long);
- method public void setType(String!);
- method public void setup(int);
- field protected static final int CURVE_OFFSET = 2; // 0x2
- field protected static final int CURVE_PERIOD = 1; // 0x1
- field protected static final int CURVE_VALUE = 0; // 0x0
- field protected float[]! mCache;
- field protected boolean mContinue;
- field protected int mCount;
- field protected androidx.constraintlayout.core.motion.utils.CurveFit! mCurveFit;
- field protected float mLastCycle;
- field protected long mLastTime;
- field protected int[]! mTimePoints;
- field protected String! mType;
- field protected float[]![]! mValues;
- field protected int mWaveShape;
- field protected static float sVal2PI;
- }
-
- public static class TimeCycleSplineSet.CustomSet extends androidx.constraintlayout.core.motion.utils.TimeCycleSplineSet {
- ctor public TimeCycleSplineSet.CustomSet(String!, androidx.constraintlayout.core.motion.utils.KeyFrameArray.CustomArray!);
- method public void setPoint(int, androidx.constraintlayout.core.motion.CustomAttribute!, float, int, float);
- method public boolean setProperty(androidx.constraintlayout.core.motion.MotionWidget!, float, long, androidx.constraintlayout.core.motion.utils.KeyCache!);
- }
-
- public static class TimeCycleSplineSet.CustomVarSet extends androidx.constraintlayout.core.motion.utils.TimeCycleSplineSet {
- ctor public TimeCycleSplineSet.CustomVarSet(String!, androidx.constraintlayout.core.motion.utils.KeyFrameArray.CustomVar!);
- method public void setPoint(int, androidx.constraintlayout.core.motion.CustomVariable!, float, int, float);
- method public boolean setProperty(androidx.constraintlayout.core.motion.MotionWidget!, float, long, androidx.constraintlayout.core.motion.utils.KeyCache!);
- }
-
- protected static class TimeCycleSplineSet.Sort {
- ctor protected TimeCycleSplineSet.Sort();
- }
-
- public class TypedBundle {
- ctor public TypedBundle();
- method public void add(int, int);
- method public void add(int, float);
- method public void add(int, String!);
- method public void add(int, boolean);
- method public void addIfNotNull(int, String!);
- method public void applyDelta(androidx.constraintlayout.core.motion.utils.TypedValues!);
- method public void applyDelta(androidx.constraintlayout.core.motion.utils.TypedBundle!);
- method public void clear();
- method public int getInteger(int);
- }
-
- public interface TypedValues {
- method public int getId(String!);
- method public boolean setValue(int, int);
- method public boolean setValue(int, float);
- method public boolean setValue(int, String!);
- method public boolean setValue(int, boolean);
- field public static final int BOOLEAN_MASK = 1; // 0x1
- field public static final int FLOAT_MASK = 4; // 0x4
- field public static final int INT_MASK = 2; // 0x2
- field public static final int STRING_MASK = 8; // 0x8
- field public static final String S_CUSTOM = "CUSTOM";
- field public static final int TYPE_FRAME_POSITION = 100; // 0x64
- field public static final int TYPE_TARGET = 101; // 0x65
- }
-
- public static interface TypedValues.AttributesType {
- method public static int getId(String!);
- method public static int getType(int);
- field public static final String![]! KEY_WORDS;
- field public static final String NAME = "KeyAttributes";
- field public static final String S_ALPHA = "alpha";
- field public static final String S_CURVE_FIT = "curveFit";
- field public static final String S_CUSTOM = "CUSTOM";
- field public static final String S_EASING = "easing";
- field public static final String S_ELEVATION = "elevation";
- field public static final String S_FRAME = "frame";
- field public static final String S_PATH_ROTATE = "pathRotate";
- field public static final String S_PIVOT_TARGET = "pivotTarget";
- field public static final String S_PIVOT_X = "pivotX";
- field public static final String S_PIVOT_Y = "pivotY";
- field public static final String S_PROGRESS = "progress";
- field public static final String S_ROTATION_X = "rotationX";
- field public static final String S_ROTATION_Y = "rotationY";
- field public static final String S_ROTATION_Z = "rotationZ";
- field public static final String S_SCALE_X = "scaleX";
- field public static final String S_SCALE_Y = "scaleY";
- field public static final String S_TARGET = "target";
- field public static final String S_TRANSLATION_X = "translationX";
- field public static final String S_TRANSLATION_Y = "translationY";
- field public static final String S_TRANSLATION_Z = "translationZ";
- field public static final String S_VISIBILITY = "visibility";
- field public static final int TYPE_ALPHA = 303; // 0x12f
- field public static final int TYPE_CURVE_FIT = 301; // 0x12d
- field public static final int TYPE_EASING = 317; // 0x13d
- field public static final int TYPE_ELEVATION = 307; // 0x133
- field public static final int TYPE_PATH_ROTATE = 316; // 0x13c
- field public static final int TYPE_PIVOT_TARGET = 318; // 0x13e
- field public static final int TYPE_PIVOT_X = 313; // 0x139
- field public static final int TYPE_PIVOT_Y = 314; // 0x13a
- field public static final int TYPE_PROGRESS = 315; // 0x13b
- field public static final int TYPE_ROTATION_X = 308; // 0x134
- field public static final int TYPE_ROTATION_Y = 309; // 0x135
- field public static final int TYPE_ROTATION_Z = 310; // 0x136
- field public static final int TYPE_SCALE_X = 311; // 0x137
- field public static final int TYPE_SCALE_Y = 312; // 0x138
- field public static final int TYPE_TRANSLATION_X = 304; // 0x130
- field public static final int TYPE_TRANSLATION_Y = 305; // 0x131
- field public static final int TYPE_TRANSLATION_Z = 306; // 0x132
- field public static final int TYPE_VISIBILITY = 302; // 0x12e
- }
-
- public static interface TypedValues.Custom {
- method public static int getId(String!);
- field public static final String![]! KEY_WORDS;
- field public static final String NAME = "Custom";
- field public static final String S_BOOLEAN = "boolean";
- field public static final String S_COLOR = "color";
- field public static final String S_DIMENSION = "dimension";
- field public static final String S_FLOAT = "float";
- field public static final String S_INT = "integer";
- field public static final String S_REFERENCE = "reference";
- field public static final String S_STRING = "string";
- field public static final int TYPE_BOOLEAN = 904; // 0x388
- field public static final int TYPE_COLOR = 902; // 0x386
- field public static final int TYPE_DIMENSION = 905; // 0x389
- field public static final int TYPE_FLOAT = 901; // 0x385
- field public static final int TYPE_INT = 900; // 0x384
- field public static final int TYPE_REFERENCE = 906; // 0x38a
- field public static final int TYPE_STRING = 903; // 0x387
- }
-
- public static interface TypedValues.CycleType {
- method public static int getId(String!);
- method public static int getType(int);
- field public static final String![]! KEY_WORDS;
- field public static final String NAME = "KeyCycle";
- field public static final String S_ALPHA = "alpha";
- field public static final String S_CURVE_FIT = "curveFit";
- field public static final String S_CUSTOM_WAVE_SHAPE = "customWave";
- field public static final String S_EASING = "easing";
- field public static final String S_ELEVATION = "elevation";
- field public static final String S_PATH_ROTATE = "pathRotate";
- field public static final String S_PIVOT_X = "pivotX";
- field public static final String S_PIVOT_Y = "pivotY";
- field public static final String S_PROGRESS = "progress";
- field public static final String S_ROTATION_X = "rotationX";
- field public static final String S_ROTATION_Y = "rotationY";
- field public static final String S_ROTATION_Z = "rotationZ";
- field public static final String S_SCALE_X = "scaleX";
- field public static final String S_SCALE_Y = "scaleY";
- field public static final String S_TRANSLATION_X = "translationX";
- field public static final String S_TRANSLATION_Y = "translationY";
- field public static final String S_TRANSLATION_Z = "translationZ";
- field public static final String S_VISIBILITY = "visibility";
- field public static final String S_WAVE_OFFSET = "offset";
- field public static final String S_WAVE_PERIOD = "period";
- field public static final String S_WAVE_PHASE = "phase";
- field public static final String S_WAVE_SHAPE = "waveShape";
- field public static final int TYPE_ALPHA = 403; // 0x193
- field public static final int TYPE_CURVE_FIT = 401; // 0x191
- field public static final int TYPE_CUSTOM_WAVE_SHAPE = 422; // 0x1a6
- field public static final int TYPE_EASING = 420; // 0x1a4
- field public static final int TYPE_ELEVATION = 307; // 0x133
- field public static final int TYPE_PATH_ROTATE = 416; // 0x1a0
- field public static final int TYPE_PIVOT_X = 313; // 0x139
- field public static final int TYPE_PIVOT_Y = 314; // 0x13a
- field public static final int TYPE_PROGRESS = 315; // 0x13b
- field public static final int TYPE_ROTATION_X = 308; // 0x134
- field public static final int TYPE_ROTATION_Y = 309; // 0x135
- field public static final int TYPE_ROTATION_Z = 310; // 0x136
- field public static final int TYPE_SCALE_X = 311; // 0x137
- field public static final int TYPE_SCALE_Y = 312; // 0x138
- field public static final int TYPE_TRANSLATION_X = 304; // 0x130
- field public static final int TYPE_TRANSLATION_Y = 305; // 0x131
- field public static final int TYPE_TRANSLATION_Z = 306; // 0x132
- field public static final int TYPE_VISIBILITY = 402; // 0x192
- field public static final int TYPE_WAVE_OFFSET = 424; // 0x1a8
- field public static final int TYPE_WAVE_PERIOD = 423; // 0x1a7
- field public static final int TYPE_WAVE_PHASE = 425; // 0x1a9
- field public static final int TYPE_WAVE_SHAPE = 421; // 0x1a5
- }
-
- public static interface TypedValues.MotionScene {
- method public static int getId(String!);
- method public static int getType(int);
- field public static final String![]! KEY_WORDS;
- field public static final String NAME = "MotionScene";
- field public static final String S_DEFAULT_DURATION = "defaultDuration";
- field public static final String S_LAYOUT_DURING_TRANSITION = "layoutDuringTransition";
- field public static final int TYPE_DEFAULT_DURATION = 600; // 0x258
- field public static final int TYPE_LAYOUT_DURING_TRANSITION = 601; // 0x259
- }
-
- public static interface TypedValues.MotionType {
- method public static int getId(String!);
- field public static final String![]! KEY_WORDS;
- field public static final String NAME = "Motion";
- field public static final String S_ANIMATE_CIRCLEANGLE_TO = "AnimateCircleAngleTo";
- field public static final String S_ANIMATE_RELATIVE_TO = "AnimateRelativeTo";
- field public static final String S_DRAW_PATH = "DrawPath";
- field public static final String S_EASING = "TransitionEasing";
- field public static final String S_PATHMOTION_ARC = "PathMotionArc";
- field public static final String S_PATH_ROTATE = "PathRotate";
- field public static final String S_POLAR_RELATIVETO = "PolarRelativeTo";
- field public static final String S_QUANTIZE_INTERPOLATOR = "QuantizeInterpolator";
- field public static final String S_QUANTIZE_INTERPOLATOR_ID = "QuantizeInterpolatorID";
- field public static final String S_QUANTIZE_INTERPOLATOR_TYPE = "QuantizeInterpolatorType";
- field public static final String S_QUANTIZE_MOTIONSTEPS = "QuantizeMotionSteps";
- field public static final String S_QUANTIZE_MOTION_PHASE = "QuantizeMotionPhase";
- field public static final String S_STAGGER = "Stagger";
- field public static final int TYPE_ANIMATE_CIRCLEANGLE_TO = 606; // 0x25e
- field public static final int TYPE_ANIMATE_RELATIVE_TO = 605; // 0x25d
- field public static final int TYPE_DRAW_PATH = 608; // 0x260
- field public static final int TYPE_EASING = 603; // 0x25b
- field public static final int TYPE_PATHMOTION_ARC = 607; // 0x25f
- field public static final int TYPE_PATH_ROTATE = 601; // 0x259
- field public static final int TYPE_POLAR_RELATIVETO = 609; // 0x261
- field public static final int TYPE_QUANTIZE_INTERPOLATOR = 604; // 0x25c
- field public static final int TYPE_QUANTIZE_INTERPOLATOR_ID = 612; // 0x264
- field public static final int TYPE_QUANTIZE_INTERPOLATOR_TYPE = 611; // 0x263
- field public static final int TYPE_QUANTIZE_MOTIONSTEPS = 610; // 0x262
- field public static final int TYPE_QUANTIZE_MOTION_PHASE = 602; // 0x25a
- field public static final int TYPE_STAGGER = 600; // 0x258
- }
-
- public static interface TypedValues.OnSwipe {
- field public static final String AUTOCOMPLETE_MODE = "autocompletemode";
- field public static final String![]! AUTOCOMPLETE_MODE_ENUM;
- field public static final String DRAG_DIRECTION = "dragdirection";
- field public static final String DRAG_SCALE = "dragscale";
- field public static final String DRAG_THRESHOLD = "dragthreshold";
- field public static final String LIMIT_BOUNDS_TO = "limitboundsto";
- field public static final String MAX_ACCELERATION = "maxacceleration";
- field public static final String MAX_VELOCITY = "maxvelocity";
- field public static final String MOVE_WHEN_SCROLLAT_TOP = "movewhenscrollattop";
- field public static final String NESTED_SCROLL_FLAGS = "nestedscrollflags";
- field public static final String![]! NESTED_SCROLL_FLAGS_ENUM;
- field public static final String ON_TOUCH_UP = "ontouchup";
- field public static final String![]! ON_TOUCH_UP_ENUM;
- field public static final String ROTATION_CENTER_ID = "rotationcenterid";
- field public static final String SPRINGS_TOP_THRESHOLD = "springstopthreshold";
- field public static final String SPRING_BOUNDARY = "springboundary";
- field public static final String![]! SPRING_BOUNDARY_ENUM;
- field public static final String SPRING_DAMPING = "springdamping";
- field public static final String SPRING_MASS = "springmass";
- field public static final String SPRING_STIFFNESS = "springstiffness";
- field public static final String TOUCH_ANCHOR_ID = "touchanchorid";
- field public static final String TOUCH_ANCHOR_SIDE = "touchanchorside";
- field public static final String TOUCH_REGION_ID = "touchregionid";
- }
-
- public static interface TypedValues.PositionType {
- method public static int getId(String!);
- method public static int getType(int);
- field public static final String![]! KEY_WORDS;
- field public static final String NAME = "KeyPosition";
- field public static final String S_DRAWPATH = "drawPath";
- field public static final String S_PERCENT_HEIGHT = "percentHeight";
- field public static final String S_PERCENT_WIDTH = "percentWidth";
- field public static final String S_PERCENT_X = "percentX";
- field public static final String S_PERCENT_Y = "percentY";
- field public static final String S_SIZE_PERCENT = "sizePercent";
- field public static final String S_TRANSITION_EASING = "transitionEasing";
- field public static final int TYPE_CURVE_FIT = 508; // 0x1fc
- field public static final int TYPE_DRAWPATH = 502; // 0x1f6
- field public static final int TYPE_PATH_MOTION_ARC = 509; // 0x1fd
- field public static final int TYPE_PERCENT_HEIGHT = 504; // 0x1f8
- field public static final int TYPE_PERCENT_WIDTH = 503; // 0x1f7
- field public static final int TYPE_PERCENT_X = 506; // 0x1fa
- field public static final int TYPE_PERCENT_Y = 507; // 0x1fb
- field public static final int TYPE_POSITION_TYPE = 510; // 0x1fe
- field public static final int TYPE_SIZE_PERCENT = 505; // 0x1f9
- field public static final int TYPE_TRANSITION_EASING = 501; // 0x1f5
- }
-
- public static interface TypedValues.TransitionType {
- method public static int getId(String!);
- method public static int getType(int);
- field public static final String![]! KEY_WORDS;
- field public static final String NAME = "Transitions";
- field public static final String S_AUTO_TRANSITION = "autoTransition";
- field public static final String S_DURATION = "duration";
- field public static final String S_FROM = "from";
- field public static final String S_INTERPOLATOR = "motionInterpolator";
- field public static final String S_PATH_MOTION_ARC = "pathMotionArc";
- field public static final String S_STAGGERED = "staggered";
- field public static final String S_TO = "to";
- field public static final String S_TRANSITION_FLAGS = "transitionFlags";
- field public static final int TYPE_AUTO_TRANSITION = 704; // 0x2c0
- field public static final int TYPE_DURATION = 700; // 0x2bc
- field public static final int TYPE_FROM = 701; // 0x2bd
- field public static final int TYPE_INTERPOLATOR = 705; // 0x2c1
- field public static final int TYPE_PATH_MOTION_ARC = 509; // 0x1fd
- field public static final int TYPE_STAGGERED = 706; // 0x2c2
- field public static final int TYPE_TO = 702; // 0x2be
- field public static final int TYPE_TRANSITION_FLAGS = 707; // 0x2c3
- }
-
- public static interface TypedValues.TriggerType {
- method public static int getId(String!);
- field public static final String CROSS = "CROSS";
- field public static final String![]! KEY_WORDS;
- field public static final String NAME = "KeyTrigger";
- field public static final String NEGATIVE_CROSS = "negativeCross";
- field public static final String POSITIVE_CROSS = "positiveCross";
- field public static final String POST_LAYOUT = "postLayout";
- field public static final String TRIGGER_COLLISION_ID = "triggerCollisionId";
- field public static final String TRIGGER_COLLISION_VIEW = "triggerCollisionView";
- field public static final String TRIGGER_ID = "triggerID";
- field public static final String TRIGGER_RECEIVER = "triggerReceiver";
- field public static final String TRIGGER_SLACK = "triggerSlack";
- field public static final int TYPE_CROSS = 312; // 0x138
- field public static final int TYPE_NEGATIVE_CROSS = 310; // 0x136
- field public static final int TYPE_POSITIVE_CROSS = 309; // 0x135
- field public static final int TYPE_POST_LAYOUT = 304; // 0x130
- field public static final int TYPE_TRIGGER_COLLISION_ID = 307; // 0x133
- field public static final int TYPE_TRIGGER_COLLISION_VIEW = 306; // 0x132
- field public static final int TYPE_TRIGGER_ID = 308; // 0x134
- field public static final int TYPE_TRIGGER_RECEIVER = 311; // 0x137
- field public static final int TYPE_TRIGGER_SLACK = 305; // 0x131
- field public static final int TYPE_VIEW_TRANSITION_ON_CROSS = 301; // 0x12d
- field public static final int TYPE_VIEW_TRANSITION_ON_NEGATIVE_CROSS = 303; // 0x12f
- field public static final int TYPE_VIEW_TRANSITION_ON_POSITIVE_CROSS = 302; // 0x12e
- field public static final String VIEW_TRANSITION_ON_CROSS = "viewTransitionOnCross";
- field public static final String VIEW_TRANSITION_ON_NEGATIVE_CROSS = "viewTransitionOnNegativeCross";
- field public static final String VIEW_TRANSITION_ON_POSITIVE_CROSS = "viewTransitionOnPositiveCross";
- }
-
- public class Utils {
- ctor public Utils();
- method public int getInterpolatedColor(float[]!);
- method public static void log(String!, String!);
- method public static void log(String!);
- method public static void logStack(String!, int);
- method public static void loge(String!, String!);
- method public static int rgbaTocColor(float, float, float, float);
- method public static void setDebugHandle(androidx.constraintlayout.core.motion.utils.Utils.DebugHandle!);
- method public static void socketSend(String!);
- }
-
- public static interface Utils.DebugHandle {
- method public void message(String!);
- }
-
- public class VelocityMatrix {
- ctor public VelocityMatrix();
- method public void applyTransform(float, float, int, int, float[]!);
- method public void clear();
- method public void setRotationVelocity(androidx.constraintlayout.core.motion.utils.SplineSet!, float);
- method public void setRotationVelocity(androidx.constraintlayout.core.motion.utils.KeyCycleOscillator!, float);
- method public void setScaleVelocity(androidx.constraintlayout.core.motion.utils.SplineSet!, androidx.constraintlayout.core.motion.utils.SplineSet!, float);
- method public void setScaleVelocity(androidx.constraintlayout.core.motion.utils.KeyCycleOscillator!, androidx.constraintlayout.core.motion.utils.KeyCycleOscillator!, float);
- method public void setTranslationVelocity(androidx.constraintlayout.core.motion.utils.SplineSet!, androidx.constraintlayout.core.motion.utils.SplineSet!, float);
- method public void setTranslationVelocity(androidx.constraintlayout.core.motion.utils.KeyCycleOscillator!, androidx.constraintlayout.core.motion.utils.KeyCycleOscillator!, float);
- }
-
- public class ViewState {
- ctor public ViewState();
- method public void getState(androidx.constraintlayout.core.motion.MotionWidget!);
- method public int height();
- method public int width();
- field public int bottom;
- field public int left;
- field public int right;
- field public float rotation;
- field public int top;
- }
-
-}
-
-package androidx.constraintlayout.core.parser {
-
- public class CLArray extends androidx.constraintlayout.core.parser.CLContainer {
- ctor public CLArray(char[]!);
- method public static androidx.constraintlayout.core.parser.CLElement! allocate(char[]!);
- }
-
- public class CLContainer extends androidx.constraintlayout.core.parser.CLElement {
- ctor public CLContainer(char[]!);
- method public void add(androidx.constraintlayout.core.parser.CLElement!);
- method public static androidx.constraintlayout.core.parser.CLElement! allocate(char[]!);
- method public void clear();
- method public androidx.constraintlayout.core.parser.CLContainer clone();
- method public androidx.constraintlayout.core.parser.CLElement! get(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
- method public androidx.constraintlayout.core.parser.CLElement! get(int) throws androidx.constraintlayout.core.parser.CLParsingException;
- method public androidx.constraintlayout.core.parser.CLArray! getArray(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
- method public androidx.constraintlayout.core.parser.CLArray! getArray(int) throws androidx.constraintlayout.core.parser.CLParsingException;
- method public androidx.constraintlayout.core.parser.CLArray! getArrayOrCreate(String!);
- method public androidx.constraintlayout.core.parser.CLArray! getArrayOrNull(String!);
- method public boolean getBoolean(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
- method public boolean getBoolean(int) throws androidx.constraintlayout.core.parser.CLParsingException;
- method public float getFloat(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
- method public float getFloat(int) throws androidx.constraintlayout.core.parser.CLParsingException;
- method public float getFloatOrNaN(String!);
- method public int getInt(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
- method public int getInt(int) throws androidx.constraintlayout.core.parser.CLParsingException;
- method public androidx.constraintlayout.core.parser.CLObject! getObject(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
- method public androidx.constraintlayout.core.parser.CLObject! getObject(int) throws androidx.constraintlayout.core.parser.CLParsingException;
- method public androidx.constraintlayout.core.parser.CLObject! getObjectOrNull(String!);
- method public androidx.constraintlayout.core.parser.CLElement! getOrNull(String!);
- method public androidx.constraintlayout.core.parser.CLElement! getOrNull(int);
- method public String! getString(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
- method public String! getString(int) throws androidx.constraintlayout.core.parser.CLParsingException;
- method public String! getStringOrNull(String!);
- method public String! getStringOrNull(int);
- method public boolean has(String!);
- method public java.util.ArrayList<java.lang.String!>! names();
- method public void put(String!, androidx.constraintlayout.core.parser.CLElement!);
- method public void putNumber(String!, float);
- method public void putString(String!, String!);
- method public void remove(String!);
- method public int size();
- }
-
- public class CLElement implements java.lang.Cloneable {
- ctor public CLElement(char[]!);
- method protected void addIndent(StringBuilder!, int);
- method public androidx.constraintlayout.core.parser.CLElement clone();
- method public String! content();
- method public androidx.constraintlayout.core.parser.CLElement! getContainer();
- method protected String! getDebugName();
- method public long getEnd();
- method public float getFloat();
- method public int getInt();
- method public int getLine();
- method public long getStart();
- method protected String! getStrClass();
- method public boolean hasContent();
- method public boolean isDone();
- method public boolean isStarted();
- method public boolean notStarted();
- method public void setContainer(androidx.constraintlayout.core.parser.CLContainer!);
- method public void setEnd(long);
- method public void setLine(int);
- method public void setStart(long);
- method protected String! toFormattedJSON(int, int);
- method protected String! toJSON();
- field protected androidx.constraintlayout.core.parser.CLContainer! mContainer;
- field protected long mEnd;
- field protected long mStart;
- field protected static int sBaseIndent;
- field protected static int sMaxLine;
- }
-
- public class CLKey extends androidx.constraintlayout.core.parser.CLContainer {
- ctor public CLKey(char[]!);
- method public static androidx.constraintlayout.core.parser.CLElement! allocate(char[]!);
- method public static androidx.constraintlayout.core.parser.CLElement! allocate(String!, androidx.constraintlayout.core.parser.CLElement!);
- method public String! getName();
- method public androidx.constraintlayout.core.parser.CLElement! getValue();
- method public void set(androidx.constraintlayout.core.parser.CLElement!);
- }
-
- public class CLNumber extends androidx.constraintlayout.core.parser.CLElement {
- ctor public CLNumber(char[]!);
- ctor public CLNumber(float);
- method public static androidx.constraintlayout.core.parser.CLElement! allocate(char[]!);
- method public boolean isInt();
- method public void putValue(float);
- }
-
- public class CLObject extends androidx.constraintlayout.core.parser.CLContainer implements java.lang.Iterable<androidx.constraintlayout.core.parser.CLKey> {
- ctor public CLObject(char[]!);
- method public static androidx.constraintlayout.core.parser.CLObject! allocate(char[]!);
- method public androidx.constraintlayout.core.parser.CLObject clone();
- method public java.util.Iterator<androidx.constraintlayout.core.parser.CLKey!>! iterator();
- method public String! toFormattedJSON();
- method public String! toFormattedJSON(int, int);
- method public String! toJSON();
- }
-
- public class CLParser {
- ctor public CLParser(String!);
- method public static androidx.constraintlayout.core.parser.CLObject! parse(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
- method public androidx.constraintlayout.core.parser.CLObject! parse() throws androidx.constraintlayout.core.parser.CLParsingException;
- }
-
- public class CLParsingException extends java.lang.Exception {
- ctor public CLParsingException(String!, androidx.constraintlayout.core.parser.CLElement!);
- method public String! reason();
- }
-
- public class CLString extends androidx.constraintlayout.core.parser.CLElement {
- ctor public CLString(char[]!);
- method public static androidx.constraintlayout.core.parser.CLElement! allocate(char[]!);
- method public static androidx.constraintlayout.core.parser.CLString from(String);
- }
-
- public class CLToken extends androidx.constraintlayout.core.parser.CLElement {
- ctor public CLToken(char[]!);
- method public static androidx.constraintlayout.core.parser.CLElement! allocate(char[]!);
- method public boolean getBoolean() throws androidx.constraintlayout.core.parser.CLParsingException;
- method public androidx.constraintlayout.core.parser.CLToken.Type! getType();
- method public boolean isNull() throws androidx.constraintlayout.core.parser.CLParsingException;
- method public boolean validate(char, long);
- }
-
-}
-
-package androidx.constraintlayout.core.state {
-
- public class ConstraintReference implements androidx.constraintlayout.core.state.Reference {
- ctor public ConstraintReference(androidx.constraintlayout.core.state.State!);
- method public void addCustomColor(String!, int);
- method public void addCustomFloat(String!, float);
- method public androidx.constraintlayout.core.state.ConstraintReference! alpha(float);
- method public void apply();
- method public void applyWidgetConstraints();
- method public androidx.constraintlayout.core.state.ConstraintReference! baseline();
- method public androidx.constraintlayout.core.state.ConstraintReference! baselineToBaseline(Object!);
- method public androidx.constraintlayout.core.state.ConstraintReference! baselineToBottom(Object!);
- method public androidx.constraintlayout.core.state.ConstraintReference! baselineToTop(Object!);
- method public androidx.constraintlayout.core.state.ConstraintReference! bias(float);
- method public androidx.constraintlayout.core.state.ConstraintReference! bottom();
- method public androidx.constraintlayout.core.state.ConstraintReference! bottomToBottom(Object!);
- method public androidx.constraintlayout.core.state.ConstraintReference! bottomToTop(Object!);
- method public androidx.constraintlayout.core.state.ConstraintReference! centerHorizontally(Object!);
- method public androidx.constraintlayout.core.state.ConstraintReference! centerVertically(Object!);
- method public androidx.constraintlayout.core.state.ConstraintReference! circularConstraint(Object!, float, float);
- method public androidx.constraintlayout.core.state.ConstraintReference! clear();
- method public androidx.constraintlayout.core.state.ConstraintReference! clearAll();
- method public androidx.constraintlayout.core.state.ConstraintReference! clearHorizontal();
- method public androidx.constraintlayout.core.state.ConstraintReference! clearVertical();
- method public androidx.constraintlayout.core.widgets.ConstraintWidget! createConstraintWidget();
- method public androidx.constraintlayout.core.state.ConstraintReference! end();
- method public androidx.constraintlayout.core.state.ConstraintReference! endToEnd(Object!);
- method public androidx.constraintlayout.core.state.ConstraintReference! endToStart(Object!);
- method public float getAlpha();
- method public androidx.constraintlayout.core.widgets.ConstraintWidget! getConstraintWidget();
- method public androidx.constraintlayout.core.state.helpers.Facade! getFacade();
- method public androidx.constraintlayout.core.state.Dimension! getHeight();
- method public int getHorizontalChainStyle();
- method public float getHorizontalChainWeight();
- method public Object! getKey();
- method public float getPivotX();
- method public float getPivotY();
- method public float getRotationX();
- method public float getRotationY();
- method public float getRotationZ();
- method public float getScaleX();
- method public float getScaleY();
- method public String! getTag();
- method public float getTranslationX();
- method public float getTranslationY();
- method public float getTranslationZ();
- method public int getVerticalChainStyle(int);
- method public float getVerticalChainWeight();
- method public Object! getView();
- method public androidx.constraintlayout.core.state.Dimension! getWidth();
- method public androidx.constraintlayout.core.state.ConstraintReference! height(androidx.constraintlayout.core.state.Dimension!);
- method public androidx.constraintlayout.core.state.ConstraintReference! horizontalBias(float);
- method public androidx.constraintlayout.core.state.ConstraintReference! left();
- method public androidx.constraintlayout.core.state.ConstraintReference! leftToLeft(Object!);
- method public androidx.constraintlayout.core.state.ConstraintReference! leftToRight(Object!);
- method public androidx.constraintlayout.core.state.ConstraintReference! margin(Object!);
- method public androidx.constraintlayout.core.state.ConstraintReference! margin(int);
- method public androidx.constraintlayout.core.state.ConstraintReference! marginGone(Object!);
- method public androidx.constraintlayout.core.state.ConstraintReference! marginGone(int);
- method public androidx.constraintlayout.core.state.ConstraintReference! pivotX(float);
- method public androidx.constraintlayout.core.state.ConstraintReference! pivotY(float);
- method public androidx.constraintlayout.core.state.ConstraintReference! right();
- method public androidx.constraintlayout.core.state.ConstraintReference! rightToLeft(Object!);
- method public androidx.constraintlayout.core.state.ConstraintReference! rightToRight(Object!);
- method public androidx.constraintlayout.core.state.ConstraintReference! rotationX(float);
- method public androidx.constraintlayout.core.state.ConstraintReference! rotationY(float);
- method public androidx.constraintlayout.core.state.ConstraintReference! rotationZ(float);
- method public androidx.constraintlayout.core.state.ConstraintReference! scaleX(float);
- method public androidx.constraintlayout.core.state.ConstraintReference! scaleY(float);
- method public void setConstraintWidget(androidx.constraintlayout.core.widgets.ConstraintWidget!);
- method public void setFacade(androidx.constraintlayout.core.state.helpers.Facade!);
- method public androidx.constraintlayout.core.state.ConstraintReference! setHeight(androidx.constraintlayout.core.state.Dimension!);
- method public void setHorizontalChainStyle(int);
- method public void setHorizontalChainWeight(float);
- method public void setKey(Object!);
- method public void setTag(String!);
- method public void setVerticalChainStyle(int);
- method public void setVerticalChainWeight(float);
- method public void setView(Object!);
- method public androidx.constraintlayout.core.state.ConstraintReference! setWidth(androidx.constraintlayout.core.state.Dimension!);
- method public androidx.constraintlayout.core.state.ConstraintReference! start();
- method public androidx.constraintlayout.core.state.ConstraintReference! startToEnd(Object!);
- method public androidx.constraintlayout.core.state.ConstraintReference! startToStart(Object!);
- method public androidx.constraintlayout.core.state.ConstraintReference! top();
- method public androidx.constraintlayout.core.state.ConstraintReference! topToBottom(Object!);
- method public androidx.constraintlayout.core.state.ConstraintReference! topToTop(Object!);
- method public androidx.constraintlayout.core.state.ConstraintReference! translationX(float);
- method public androidx.constraintlayout.core.state.ConstraintReference! translationY(float);
- method public androidx.constraintlayout.core.state.ConstraintReference! translationZ(float);
- method public void validate() throws java.lang.Exception;
- method public androidx.constraintlayout.core.state.ConstraintReference! verticalBias(float);
- method public androidx.constraintlayout.core.state.ConstraintReference! visibility(int);
- method public androidx.constraintlayout.core.state.ConstraintReference! width(androidx.constraintlayout.core.state.Dimension!);
- field protected Object! mBottomToBottom;
- field protected Object! mBottomToTop;
- field protected Object! mEndToEnd;
- field protected Object! mEndToStart;
- field protected float mHorizontalBias;
- field protected Object! mLeftToLeft;
- field protected Object! mLeftToRight;
- field protected int mMarginBottom;
- field protected int mMarginBottomGone;
- field protected int mMarginEnd;
- field protected int mMarginEndGone;
- field protected int mMarginLeft;
- field protected int mMarginLeftGone;
- field protected int mMarginRight;
- field protected int mMarginRightGone;
- field protected int mMarginStart;
- field protected int mMarginStartGone;
- field protected int mMarginTop;
- field protected int mMarginTopGone;
- field protected Object! mRightToLeft;
- field protected Object! mRightToRight;
- field protected Object! mStartToEnd;
- field protected Object! mStartToStart;
- field protected Object! mTopToBottom;
- field protected Object! mTopToTop;
- field protected float mVerticalBias;
- }
-
- public static interface ConstraintReference.ConstraintReferenceFactory {
- method public androidx.constraintlayout.core.state.ConstraintReference! create(androidx.constraintlayout.core.state.State!);
- }
-
- public class ConstraintSetParser {
- ctor public ConstraintSetParser();
- method public static void parseDesignElementsJSON(String!, java.util.ArrayList<androidx.constraintlayout.core.state.ConstraintSetParser.DesignElement!>!) throws androidx.constraintlayout.core.parser.CLParsingException;
- method public static void parseJSON(String!, androidx.constraintlayout.core.state.Transition!, int);
- method public static void parseJSON(String!, androidx.constraintlayout.core.state.State!, androidx.constraintlayout.core.state.ConstraintSetParser.LayoutVariables!) throws androidx.constraintlayout.core.parser.CLParsingException;
- method public static void parseMotionSceneJSON(androidx.constraintlayout.core.state.CoreMotionScene!, String!);
- }
-
- public static class ConstraintSetParser.DesignElement {
- method public String! getId();
- method public java.util.HashMap<java.lang.String!,java.lang.String!>! getParams();
- method public String! getType();
- }
-
- public static class ConstraintSetParser.LayoutVariables {
- ctor public ConstraintSetParser.LayoutVariables();
- method public void putOverride(String!, float);
- }
-
- public enum ConstraintSetParser.MotionLayoutDebugFlags {
- enum_constant public static final androidx.constraintlayout.core.state.ConstraintSetParser.MotionLayoutDebugFlags NONE;
- enum_constant public static final androidx.constraintlayout.core.state.ConstraintSetParser.MotionLayoutDebugFlags SHOW_ALL;
- enum_constant public static final androidx.constraintlayout.core.state.ConstraintSetParser.MotionLayoutDebugFlags UNKNOWN;
- }
-
- public interface CoreMotionScene {
- method public String! getConstraintSet(String!);
- method public String! getConstraintSet(int);
- method public String! getTransition(String!);
- method public void setConstraintSetContent(String!, String!);
- method public void setDebugName(String!);
- method public void setTransitionContent(String!, String!);
- }
-
- public interface CorePixelDp {
- method public float toPixels(float);
- }
-
- public class Dimension {
- method public void apply(androidx.constraintlayout.core.state.State!, androidx.constraintlayout.core.widgets.ConstraintWidget!, int);
- method public static androidx.constraintlayout.core.state.Dimension! createFixed(int);
- method public static androidx.constraintlayout.core.state.Dimension! createFixed(Object!);
- method public static androidx.constraintlayout.core.state.Dimension! createParent();
- method public static androidx.constraintlayout.core.state.Dimension! createPercent(Object!, float);
- method public static androidx.constraintlayout.core.state.Dimension! createRatio(String!);
- method public static androidx.constraintlayout.core.state.Dimension! createSpread();
- method public static androidx.constraintlayout.core.state.Dimension! createSuggested(int);
- method public static androidx.constraintlayout.core.state.Dimension! createSuggested(Object!);
- method public static androidx.constraintlayout.core.state.Dimension! createWrap();
- method public boolean equalsFixedValue(int);
- method public androidx.constraintlayout.core.state.Dimension! fixed(Object!);
- method public androidx.constraintlayout.core.state.Dimension! fixed(int);
- method public androidx.constraintlayout.core.state.Dimension! max(int);
- method public androidx.constraintlayout.core.state.Dimension! max(Object!);
- method public androidx.constraintlayout.core.state.Dimension! min(int);
- method public androidx.constraintlayout.core.state.Dimension! min(Object!);
- method public androidx.constraintlayout.core.state.Dimension! percent(Object!, float);
- method public androidx.constraintlayout.core.state.Dimension! ratio(String!);
- method public androidx.constraintlayout.core.state.Dimension! suggested(int);
- method public androidx.constraintlayout.core.state.Dimension! suggested(Object!);
- field public static final Object! FIXED_DIMENSION;
- field public static final Object! PARENT_DIMENSION;
- field public static final Object! PERCENT_DIMENSION;
- field public static final Object! RATIO_DIMENSION;
- field public static final Object! SPREAD_DIMENSION;
- field public static final Object! WRAP_DIMENSION;
- }
-
- public enum Dimension.Type {
- enum_constant public static final androidx.constraintlayout.core.state.Dimension.Type FIXED;
- enum_constant public static final androidx.constraintlayout.core.state.Dimension.Type MATCH_CONSTRAINT;
- enum_constant public static final androidx.constraintlayout.core.state.Dimension.Type MATCH_PARENT;
- enum_constant public static final androidx.constraintlayout.core.state.Dimension.Type WRAP;
- }
-
- public class HelperReference extends androidx.constraintlayout.core.state.ConstraintReference implements androidx.constraintlayout.core.state.helpers.Facade {
- ctor public HelperReference(androidx.constraintlayout.core.state.State!, androidx.constraintlayout.core.state.State.Helper!);
- method public androidx.constraintlayout.core.state.HelperReference! add(java.lang.Object!...);
- method public void applyBase();
- method public androidx.constraintlayout.core.widgets.HelperWidget! getHelperWidget();
- method public androidx.constraintlayout.core.state.State.Helper! getType();
- method public void setHelperWidget(androidx.constraintlayout.core.widgets.HelperWidget!);
- field protected final androidx.constraintlayout.core.state.State! mHelperState;
- field protected java.util.ArrayList<java.lang.Object!>! mReferences;
- }
-
- public interface Interpolator {
- method public float getInterpolation(float);
- }
-
- public interface Reference {
- method public void apply();
- method public androidx.constraintlayout.core.widgets.ConstraintWidget! getConstraintWidget();
- method public androidx.constraintlayout.core.state.helpers.Facade! getFacade();
- method public Object! getKey();
- method public void setConstraintWidget(androidx.constraintlayout.core.widgets.ConstraintWidget!);
- method public void setKey(Object!);
- }
-
- public class Registry {
- ctor public Registry();
- method public String! currentContent(String!);
- method public String! currentLayoutInformation(String!);
- method public static androidx.constraintlayout.core.state.Registry! getInstance();
- method public long getLastModified(String!);
- method public java.util.Set<java.lang.String!>! getLayoutList();
- method public void register(String!, androidx.constraintlayout.core.state.RegistryCallback!);
- method public void setDrawDebug(String!, int);
- method public void setLayoutInformationMode(String!, int);
- method public void unregister(String!, androidx.constraintlayout.core.state.RegistryCallback!);
- method public void updateContent(String!, String!);
- method public void updateDimensions(String!, int, int);
- method public void updateProgress(String!, float);
- }
-
- public interface RegistryCallback {
- method public String! currentLayoutInformation();
- method public String! currentMotionScene();
- method public long getLastModified();
- method public void onDimensions(int, int);
- method public void onNewMotionScene(String!);
- method public void onProgress(float);
- method public void setDrawDebug(int);
- method public void setLayoutInformationMode(int);
- }
-
- public class State {
- ctor public State();
- method public void apply(androidx.constraintlayout.core.widgets.ConstraintWidgetContainer!);
- method public androidx.constraintlayout.core.state.helpers.BarrierReference! barrier(Object!, androidx.constraintlayout.core.state.State.Direction!);
- method public void baselineNeededFor(Object!);
- method public androidx.constraintlayout.core.state.helpers.AlignHorizontallyReference! centerHorizontally(java.lang.Object!...);
- method public androidx.constraintlayout.core.state.helpers.AlignVerticallyReference! centerVertically(java.lang.Object!...);
- method public androidx.constraintlayout.core.state.ConstraintReference! constraints(Object!);
- method public int convertDimension(Object!);
- method public androidx.constraintlayout.core.state.ConstraintReference! createConstraintReference(Object!);
- method public void directMapping();
- method public androidx.constraintlayout.core.state.helpers.FlowReference! getFlow(Object!, boolean);
- method public androidx.constraintlayout.core.state.helpers.GridReference getGrid(Object, String);
- method public androidx.constraintlayout.core.state.helpers.FlowReference! getHorizontalFlow();
- method public androidx.constraintlayout.core.state.helpers.FlowReference! getHorizontalFlow(java.lang.Object!...);
- method public java.util.ArrayList<java.lang.String!>! getIdsForTag(String!);
- method public androidx.constraintlayout.core.state.helpers.FlowReference! getVerticalFlow();
- method public androidx.constraintlayout.core.state.helpers.FlowReference! getVerticalFlow(java.lang.Object!...);
- method public androidx.constraintlayout.core.state.helpers.GuidelineReference! guideline(Object!, int);
- method public androidx.constraintlayout.core.state.State! height(androidx.constraintlayout.core.state.Dimension!);
- method public androidx.constraintlayout.core.state.HelperReference! helper(Object!, androidx.constraintlayout.core.state.State.Helper!);
- method public androidx.constraintlayout.core.state.helpers.HorizontalChainReference! horizontalChain();
- method public androidx.constraintlayout.core.state.helpers.HorizontalChainReference! horizontalChain(java.lang.Object!...);
- method public androidx.constraintlayout.core.state.helpers.GuidelineReference! horizontalGuideline(Object!);
- method public boolean isBaselineNeeded(androidx.constraintlayout.core.widgets.ConstraintWidget!);
- method @Deprecated public boolean isLtr();
- method public boolean isRtl();
- method public void map(Object!, Object!);
- method public void reset();
- method public boolean sameFixedHeight(int);
- method public boolean sameFixedWidth(int);
- method public void setDpToPixel(androidx.constraintlayout.core.state.CorePixelDp!);
- method public androidx.constraintlayout.core.state.State! setHeight(androidx.constraintlayout.core.state.Dimension!);
- method @Deprecated public void setLtr(boolean);
- method public void setRtl(boolean);
- method public void setTag(String!, String!);
- method public androidx.constraintlayout.core.state.State! setWidth(androidx.constraintlayout.core.state.Dimension!);
- method public androidx.constraintlayout.core.state.helpers.VerticalChainReference! verticalChain();
- method public androidx.constraintlayout.core.state.helpers.VerticalChainReference! verticalChain(java.lang.Object!...);
- method public androidx.constraintlayout.core.state.helpers.GuidelineReference! verticalGuideline(Object!);
- method public androidx.constraintlayout.core.state.State! width(androidx.constraintlayout.core.state.Dimension!);
- field public static final Integer PARENT;
- field protected java.util.HashMap<java.lang.Object!,androidx.constraintlayout.core.state.HelperReference!>! mHelperReferences;
- field public final androidx.constraintlayout.core.state.ConstraintReference! mParent;
- field protected java.util.HashMap<java.lang.Object!,androidx.constraintlayout.core.state.Reference!>! mReferences;
- }
-
- public enum State.Chain {
- method public static androidx.constraintlayout.core.state.State.Chain! getChainByString(String!);
- method public static int getValueByString(String!);
- enum_constant public static final androidx.constraintlayout.core.state.State.Chain PACKED;
- enum_constant public static final androidx.constraintlayout.core.state.State.Chain SPREAD;
- enum_constant public static final androidx.constraintlayout.core.state.State.Chain SPREAD_INSIDE;
- field public static java.util.Map<java.lang.String!,androidx.constraintlayout.core.state.State.Chain!>! chainMap;
- field public static java.util.Map<java.lang.String!,java.lang.Integer!>! valueMap;
- }
-
- public enum State.Constraint {
- enum_constant public static final androidx.constraintlayout.core.state.State.Constraint BASELINE_TO_BASELINE;
- enum_constant public static final androidx.constraintlayout.core.state.State.Constraint BASELINE_TO_BOTTOM;
- enum_constant public static final androidx.constraintlayout.core.state.State.Constraint BASELINE_TO_TOP;
- enum_constant public static final androidx.constraintlayout.core.state.State.Constraint BOTTOM_TO_BASELINE;
- enum_constant public static final androidx.constraintlayout.core.state.State.Constraint BOTTOM_TO_BOTTOM;
- enum_constant public static final androidx.constraintlayout.core.state.State.Constraint BOTTOM_TO_TOP;
- enum_constant public static final androidx.constraintlayout.core.state.State.Constraint CENTER_HORIZONTALLY;
- enum_constant public static final androidx.constraintlayout.core.state.State.Constraint CENTER_VERTICALLY;
- enum_constant public static final androidx.constraintlayout.core.state.State.Constraint CIRCULAR_CONSTRAINT;
- enum_constant public static final androidx.constraintlayout.core.state.State.Constraint END_TO_END;
- enum_constant public static final androidx.constraintlayout.core.state.State.Constraint END_TO_START;
- enum_constant public static final androidx.constraintlayout.core.state.State.Constraint LEFT_TO_LEFT;
- enum_constant public static final androidx.constraintlayout.core.state.State.Constraint LEFT_TO_RIGHT;
- enum_constant public static final androidx.constraintlayout.core.state.State.Constraint RIGHT_TO_LEFT;
- enum_constant public static final androidx.constraintlayout.core.state.State.Constraint RIGHT_TO_RIGHT;
- enum_constant public static final androidx.constraintlayout.core.state.State.Constraint START_TO_END;
- enum_constant public static final androidx.constraintlayout.core.state.State.Constraint START_TO_START;
- enum_constant public static final androidx.constraintlayout.core.state.State.Constraint TOP_TO_BASELINE;
- enum_constant public static final androidx.constraintlayout.core.state.State.Constraint TOP_TO_BOTTOM;
- enum_constant public static final androidx.constraintlayout.core.state.State.Constraint TOP_TO_TOP;
- }
-
- public enum State.Direction {
- enum_constant public static final androidx.constraintlayout.core.state.State.Direction BOTTOM;
- enum_constant public static final androidx.constraintlayout.core.state.State.Direction END;
- enum_constant public static final androidx.constraintlayout.core.state.State.Direction LEFT;
- enum_constant public static final androidx.constraintlayout.core.state.State.Direction RIGHT;
- enum_constant public static final androidx.constraintlayout.core.state.State.Direction START;
- enum_constant public static final androidx.constraintlayout.core.state.State.Direction TOP;
- }
-
- public enum State.Helper {
- enum_constant public static final androidx.constraintlayout.core.state.State.Helper ALIGN_HORIZONTALLY;
- enum_constant public static final androidx.constraintlayout.core.state.State.Helper ALIGN_VERTICALLY;
- enum_constant public static final androidx.constraintlayout.core.state.State.Helper BARRIER;
- enum_constant public static final androidx.constraintlayout.core.state.State.Helper COLUMN;
- enum_constant public static final androidx.constraintlayout.core.state.State.Helper FLOW;
- enum_constant public static final androidx.constraintlayout.core.state.State.Helper GRID;
- enum_constant public static final androidx.constraintlayout.core.state.State.Helper HORIZONTAL_CHAIN;
- enum_constant public static final androidx.constraintlayout.core.state.State.Helper HORIZONTAL_FLOW;
- enum_constant public static final androidx.constraintlayout.core.state.State.Helper LAYER;
- enum_constant public static final androidx.constraintlayout.core.state.State.Helper ROW;
- enum_constant public static final androidx.constraintlayout.core.state.State.Helper VERTICAL_CHAIN;
- enum_constant public static final androidx.constraintlayout.core.state.State.Helper VERTICAL_FLOW;
- }
-
- public enum State.Wrap {
- method public static androidx.constraintlayout.core.state.State.Wrap! getChainByString(String!);
- method public static int getValueByString(String!);
- enum_constant public static final androidx.constraintlayout.core.state.State.Wrap ALIGNED;
- enum_constant public static final androidx.constraintlayout.core.state.State.Wrap CHAIN;
- enum_constant public static final androidx.constraintlayout.core.state.State.Wrap NONE;
- field public static java.util.Map<java.lang.String!,java.lang.Integer!>! valueMap;
- field public static java.util.Map<java.lang.String!,androidx.constraintlayout.core.state.State.Wrap!>! wrapMap;
- }
-
- public class Transition implements androidx.constraintlayout.core.motion.utils.TypedValues {
- ctor public Transition(androidx.constraintlayout.core.state.CorePixelDp);
- method public void addCustomColor(int, String!, String!, int);
- method public void addCustomFloat(int, String!, String!, float);
- method public void addKeyAttribute(String!, androidx.constraintlayout.core.motion.utils.TypedBundle!);
- method public void addKeyAttribute(String!, androidx.constraintlayout.core.motion.utils.TypedBundle!, androidx.constraintlayout.core.motion.CustomVariable![]!);
- method public void addKeyCycle(String!, androidx.constraintlayout.core.motion.utils.TypedBundle!);
- method public void addKeyPosition(String!, androidx.constraintlayout.core.motion.utils.TypedBundle!);
- method public void addKeyPosition(String!, int, int, float, float);
- method public void calcStagger();
- method public void clear();
- method public boolean contains(String!);
- method public float dragToProgress(float, int, int, float, float);
- method public void fillKeyPositions(androidx.constraintlayout.core.state.WidgetFrame!, float[]!, float[]!, float[]!);
- method public androidx.constraintlayout.core.state.Transition.KeyPosition! findNextPosition(String!, int);
- method public androidx.constraintlayout.core.state.Transition.KeyPosition! findPreviousPosition(String!, int);
- method public int getAutoTransition();
- method public androidx.constraintlayout.core.state.WidgetFrame! getEnd(String!);
- method public androidx.constraintlayout.core.state.WidgetFrame! getEnd(androidx.constraintlayout.core.widgets.ConstraintWidget!);
- method public int getId(String!);
- method public androidx.constraintlayout.core.state.WidgetFrame! getInterpolated(String!);
- method public androidx.constraintlayout.core.state.WidgetFrame! getInterpolated(androidx.constraintlayout.core.widgets.ConstraintWidget!);
- method public int getInterpolatedHeight();
- method public int getInterpolatedWidth();
- method public static androidx.constraintlayout.core.state.Interpolator! getInterpolator(int, String!);
- method public androidx.constraintlayout.core.state.Interpolator! getInterpolator();
- method public int getKeyFrames(String!, float[]!, int[]!, int[]!);
- method public androidx.constraintlayout.core.motion.Motion! getMotion(String!);
- method public int getNumberKeyPositions(androidx.constraintlayout.core.state.WidgetFrame!);
- method public float[]! getPath(String!);
- method public androidx.constraintlayout.core.state.WidgetFrame! getStart(String!);
- method public androidx.constraintlayout.core.state.WidgetFrame! getStart(androidx.constraintlayout.core.widgets.ConstraintWidget!);
- method public float getTouchUpProgress(long);
- method public androidx.constraintlayout.core.state.Transition.WidgetState! getWidgetState(String!, androidx.constraintlayout.core.widgets.ConstraintWidget!, int);
- method public boolean hasOnSwipe();
- method public boolean hasPositionKeyframes();
- method public void interpolate(int, int, float);
- method public boolean isEmpty();
- method public boolean isTouchNotDone(float);
- method public void setTouchUp(float, long, float, float);
- method public void setTransitionProperties(androidx.constraintlayout.core.motion.utils.TypedBundle!);
- method public boolean setValue(int, int);
- method public boolean setValue(int, float);
- method public boolean setValue(int, String!);
- method public boolean setValue(int, boolean);
- method public void updateFrom(androidx.constraintlayout.core.widgets.ConstraintWidgetContainer!, int);
- field public static final int END = 1; // 0x1
- field public static final int INTERPOLATED = 2; // 0x2
- field public static final int START = 0; // 0x0
- }
-
- public static class Transition.WidgetState {
- ctor public Transition.WidgetState();
- method public androidx.constraintlayout.core.state.WidgetFrame! getFrame(int);
- method public void interpolate(int, int, float, androidx.constraintlayout.core.state.Transition!);
- method public void setKeyAttribute(androidx.constraintlayout.core.motion.utils.TypedBundle!);
- method public void setKeyAttribute(androidx.constraintlayout.core.motion.utils.TypedBundle!, androidx.constraintlayout.core.motion.CustomVariable![]!);
- method public void setKeyCycle(androidx.constraintlayout.core.motion.utils.TypedBundle!);
- method public void setKeyPosition(androidx.constraintlayout.core.motion.utils.TypedBundle!);
- method public void setPathRelative(androidx.constraintlayout.core.state.Transition.WidgetState!);
- method public void update(androidx.constraintlayout.core.widgets.ConstraintWidget!, int);
- }
-
- public class TransitionParser {
- ctor public TransitionParser();
- method @Deprecated public static void parse(androidx.constraintlayout.core.parser.CLObject!, androidx.constraintlayout.core.state.Transition!, androidx.constraintlayout.core.state.CorePixelDp!) throws androidx.constraintlayout.core.parser.CLParsingException;
- method public static void parseKeyFrames(androidx.constraintlayout.core.parser.CLObject!, androidx.constraintlayout.core.state.Transition!) throws androidx.constraintlayout.core.parser.CLParsingException;
- }
-
- public class WidgetFrame {
- ctor public WidgetFrame();
- ctor public WidgetFrame(androidx.constraintlayout.core.widgets.ConstraintWidget!);
- ctor public WidgetFrame(androidx.constraintlayout.core.state.WidgetFrame!);
- method public void addCustomColor(String!, int);
- method public void addCustomFloat(String!, float);
- method public float centerX();
- method public float centerY();
- method public boolean containsCustom(String);
- method public androidx.constraintlayout.core.motion.CustomVariable! getCustomAttribute(String!);
- method public java.util.Set<java.lang.String!>! getCustomAttributeNames();
- method public int getCustomColor(String!);
- method public float getCustomFloat(String!);
- method public String! getId();
- method public androidx.constraintlayout.core.motion.utils.TypedBundle! getMotionProperties();
- method public int height();
- method public static void interpolate(int, int, androidx.constraintlayout.core.state.WidgetFrame!, androidx.constraintlayout.core.state.WidgetFrame!, androidx.constraintlayout.core.state.WidgetFrame!, androidx.constraintlayout.core.state.Transition!, float);
- method public boolean isDefaultTransform();
- method public StringBuilder! serialize(StringBuilder!);
- method public StringBuilder! serialize(StringBuilder!, boolean);
- method public void setCustomAttribute(String!, int, float);
- method public void setCustomAttribute(String!, int, int);
- method public void setCustomAttribute(String!, int, boolean);
- method public void setCustomAttribute(String!, int, String!);
- method public void setCustomValue(androidx.constraintlayout.core.motion.CustomAttribute!, float[]!);
- method public boolean setValue(String!, androidx.constraintlayout.core.parser.CLElement!) throws androidx.constraintlayout.core.parser.CLParsingException;
- method public androidx.constraintlayout.core.state.WidgetFrame! update();
- method public androidx.constraintlayout.core.state.WidgetFrame! update(androidx.constraintlayout.core.widgets.ConstraintWidget!);
- method public void updateAttributes(androidx.constraintlayout.core.state.WidgetFrame!);
- method public int width();
- field public float alpha;
- field public int bottom;
- field public float interpolatedPos;
- field public int left;
- field public String! name;
- field public static float phone_orientation;
- field public float pivotX;
- field public float pivotY;
- field public int right;
- field public float rotationX;
- field public float rotationY;
- field public float rotationZ;
- field public float scaleX;
- field public float scaleY;
- field public int top;
- field public float translationX;
- field public float translationY;
- field public float translationZ;
- field public int visibility;
- field public androidx.constraintlayout.core.widgets.ConstraintWidget! widget;
- }
-
-}
-
-package androidx.constraintlayout.core.state.helpers {
-
- public class AlignHorizontallyReference extends androidx.constraintlayout.core.state.HelperReference {
- ctor public AlignHorizontallyReference(androidx.constraintlayout.core.state.State!);
- }
-
- public class AlignVerticallyReference extends androidx.constraintlayout.core.state.HelperReference {
- ctor public AlignVerticallyReference(androidx.constraintlayout.core.state.State!);
- }
-
- public class BarrierReference extends androidx.constraintlayout.core.state.HelperReference {
- ctor public BarrierReference(androidx.constraintlayout.core.state.State!);
- method public void setBarrierDirection(androidx.constraintlayout.core.state.State.Direction!);
- }
-
- public class ChainReference extends androidx.constraintlayout.core.state.HelperReference {
- ctor public ChainReference(androidx.constraintlayout.core.state.State, androidx.constraintlayout.core.state.State.Helper);
- method public void addChainElement(String, float, float, float);
- method public androidx.constraintlayout.core.state.helpers.ChainReference bias(float);
- method public float getBias();
- method protected float getPostMargin(String);
- method protected float getPreMargin(String);
- method public androidx.constraintlayout.core.state.State.Chain getStyle();
- method protected float getWeight(String);
- method public androidx.constraintlayout.core.state.helpers.ChainReference style(androidx.constraintlayout.core.state.State.Chain);
- field protected float mBias;
- field @Deprecated protected java.util.HashMap<java.lang.String!,java.lang.Float!> mMapPostMargin;
- field @Deprecated protected java.util.HashMap<java.lang.String!,java.lang.Float!> mMapPreMargin;
- field @Deprecated protected java.util.HashMap<java.lang.String!,java.lang.Float!> mMapWeights;
- field protected androidx.constraintlayout.core.state.State.Chain mStyle;
- }
-
- public interface Facade {
- method public void apply();
- method public androidx.constraintlayout.core.widgets.ConstraintWidget! getConstraintWidget();
- }
-
- public class FlowReference extends androidx.constraintlayout.core.state.HelperReference {
- ctor public FlowReference(androidx.constraintlayout.core.state.State!, androidx.constraintlayout.core.state.State.Helper!);
- method public void addFlowElement(String!, float, float, float);
- method public float getFirstHorizontalBias();
- method public int getFirstHorizontalStyle();
- method public float getFirstVerticalBias();
- method public int getFirstVerticalStyle();
- method public int getHorizontalAlign();
- method public float getHorizontalBias();
- method public int getHorizontalGap();
- method public int getHorizontalStyle();
- method public float getLastHorizontalBias();
- method public int getLastHorizontalStyle();
- method public float getLastVerticalBias();
- method public int getLastVerticalStyle();
- method public int getMaxElementsWrap();
- method public int getOrientation();
- method public int getPaddingBottom();
- method public int getPaddingLeft();
- method public int getPaddingRight();
- method public int getPaddingTop();
- method protected float getPostMargin(String!);
- method protected float getPreMargin(String!);
- method public int getVerticalAlign();
- method public float getVerticalBias();
- method public int getVerticalGap();
- method public int getVerticalStyle();
- method protected float getWeight(String!);
- method public int getWrapMode();
- method public void setFirstHorizontalBias(float);
- method public void setFirstHorizontalStyle(int);
- method public void setFirstVerticalBias(float);
- method public void setFirstVerticalStyle(int);
- method public void setHorizontalAlign(int);
- method public void setHorizontalGap(int);
- method public void setHorizontalStyle(int);
- method public void setLastHorizontalBias(float);
- method public void setLastHorizontalStyle(int);
- method public void setLastVerticalBias(float);
- method public void setLastVerticalStyle(int);
- method public void setMaxElementsWrap(int);
- method public void setOrientation(int);
- method public void setPaddingBottom(int);
- method public void setPaddingLeft(int);
- method public void setPaddingRight(int);
- method public void setPaddingTop(int);
- method public void setVerticalAlign(int);
- method public void setVerticalGap(int);
- method public void setVerticalStyle(int);
- method public void setWrapMode(int);
- field protected float mFirstHorizontalBias;
- field protected int mFirstHorizontalStyle;
- field protected float mFirstVerticalBias;
- field protected int mFirstVerticalStyle;
- field protected androidx.constraintlayout.core.widgets.Flow! mFlow;
- field protected int mHorizontalAlign;
- field protected int mHorizontalGap;
- field protected int mHorizontalStyle;
- field protected float mLastHorizontalBias;
- field protected int mLastHorizontalStyle;
- field protected float mLastVerticalBias;
- field protected int mLastVerticalStyle;
- field protected java.util.HashMap<java.lang.String!,java.lang.Float!>! mMapPostMargin;
- field protected java.util.HashMap<java.lang.String!,java.lang.Float!>! mMapPreMargin;
- field protected java.util.HashMap<java.lang.String!,java.lang.Float!>! mMapWeights;
- field protected int mMaxElementsWrap;
- field protected int mOrientation;
- field protected int mPaddingBottom;
- field protected int mPaddingLeft;
- field protected int mPaddingRight;
- field protected int mPaddingTop;
- field protected int mVerticalAlign;
- field protected int mVerticalGap;
- field protected int mVerticalStyle;
- field protected int mWrapMode;
- }
-
- public class GridReference extends androidx.constraintlayout.core.state.HelperReference {
- ctor public GridReference(androidx.constraintlayout.core.state.State, androidx.constraintlayout.core.state.State.Helper);
- method public String? getColumnWeights();
- method public int getColumnsSet();
- method public int[] getFlags();
- method public float getHorizontalGaps();
- method public int getOrientation();
- method public int getPaddingBottom();
- method public int getPaddingEnd();
- method public int getPaddingStart();
- method public int getPaddingTop();
- method public String? getRowWeights();
- method public int getRowsSet();
- method public String? getSkips();
- method public String? getSpans();
- method public float getVerticalGaps();
- method public void setColumnWeights(String);
- method public void setColumnsSet(int);
- method public void setFlags(int[]);
- method public void setFlags(String);
- method public void setHorizontalGaps(float);
- method public void setOrientation(int);
- method public void setPaddingBottom(int);
- method public void setPaddingEnd(int);
- method public void setPaddingStart(int);
- method public void setPaddingTop(int);
- method public void setRowWeights(String);
- method public void setRowsSet(int);
- method public void setSkips(String);
- method public void setSpans(String);
- method public void setVerticalGaps(float);
- }
-
- public class GuidelineReference implements androidx.constraintlayout.core.state.helpers.Facade androidx.constraintlayout.core.state.Reference {
- ctor public GuidelineReference(androidx.constraintlayout.core.state.State!);
- method public void apply();
- method public androidx.constraintlayout.core.state.helpers.GuidelineReference! end(Object!);
- method public androidx.constraintlayout.core.widgets.ConstraintWidget! getConstraintWidget();
- method public androidx.constraintlayout.core.state.helpers.Facade! getFacade();
- method public Object! getKey();
- method public int getOrientation();
- method public androidx.constraintlayout.core.state.helpers.GuidelineReference! percent(float);
- method public void setConstraintWidget(androidx.constraintlayout.core.widgets.ConstraintWidget!);
- method public void setKey(Object!);
- method public void setOrientation(int);
- method public androidx.constraintlayout.core.state.helpers.GuidelineReference! start(Object!);
- }
-
- public class HorizontalChainReference extends androidx.constraintlayout.core.state.helpers.ChainReference {
- ctor public HorizontalChainReference(androidx.constraintlayout.core.state.State!);
- }
-
- public class VerticalChainReference extends androidx.constraintlayout.core.state.helpers.ChainReference {
- ctor public VerticalChainReference(androidx.constraintlayout.core.state.State!);
- }
-
-}
-
-package androidx.constraintlayout.core.utils {
-
- public class GridCore extends androidx.constraintlayout.core.widgets.VirtualLayout {
- ctor public GridCore();
- ctor public GridCore(int, int);
- method public String? getColumnWeights();
- method public androidx.constraintlayout.core.widgets.ConstraintWidgetContainer? getContainer();
- method public int[] getFlags();
- method public float getHorizontalGaps();
- method public int getOrientation();
- method public String? getRowWeights();
- method public float getVerticalGaps();
- method public void setColumnWeights(String);
- method public void setColumns(int);
- method public void setContainer(androidx.constraintlayout.core.widgets.ConstraintWidgetContainer);
- method public void setFlags(int[]);
- method public void setHorizontalGaps(float);
- method public void setOrientation(int);
- method public void setRowWeights(String);
- method public void setRows(int);
- method public void setSkips(String);
- method public void setSpans(CharSequence);
- method public void setVerticalGaps(float);
- field public static final int HORIZONTAL = 0; // 0x0
- field public static final int SPANS_RESPECT_WIDGET_ORDER = 1; // 0x1
- field public static final int SUB_GRID_BY_COL_ROW = 0; // 0x0
- field public static final int VERTICAL = 1; // 0x1
- }
-
- public class GridEngine {
- ctor public GridEngine();
- ctor public GridEngine(int, int);
- ctor public GridEngine(int, int, int);
- method public int bottomOfWidget(int);
- method public int leftOfWidget(int);
- method public int rightOfWidget(int);
- method public void setColumns(int);
- method public void setNumWidgets(int);
- method public void setOrientation(int);
- method public void setRows(int);
- method public void setSkips(String!);
- method public void setSpans(CharSequence!);
- method public void setup();
- method public int topOfWidget(int);
- field public static final int HORIZONTAL = 0; // 0x0
- field public static final int VERTICAL = 1; // 0x1
- }
-
-}
-
-package androidx.constraintlayout.core.widgets {
-
- public class Barrier extends androidx.constraintlayout.core.widgets.HelperWidget {
- ctor public Barrier();
- ctor public Barrier(String!);
- method public boolean allSolved();
- method @Deprecated public boolean allowsGoneWidget();
- method public boolean getAllowsGoneWidget();
- method public int getBarrierType();
- method public int getMargin();
- method public int getOrientation();
- method protected void markWidgets();
- method public void setAllowsGoneWidget(boolean);
- method public void setBarrierType(int);
- method public void setMargin(int);
- field public static final int BOTTOM = 3; // 0x3
- field public static final int LEFT = 0; // 0x0
- field public static final int RIGHT = 1; // 0x1
- field public static final int TOP = 2; // 0x2
- }
-
- public class Chain {
- ctor public Chain();
- method public static void applyChainConstraints(androidx.constraintlayout.core.widgets.ConstraintWidgetContainer!, androidx.constraintlayout.core.LinearSystem!, java.util.ArrayList<androidx.constraintlayout.core.widgets.ConstraintWidget!>!, int);
- field public static final boolean USE_CHAIN_OPTIMIZATION = false;
- }
-
- public class ChainHead {
- ctor public ChainHead(androidx.constraintlayout.core.widgets.ConstraintWidget!, int, boolean);
- method public void define();
- method public androidx.constraintlayout.core.widgets.ConstraintWidget! getFirst();
- method public androidx.constraintlayout.core.widgets.ConstraintWidget! getFirstMatchConstraintWidget();
- method public androidx.constraintlayout.core.widgets.ConstraintWidget! getFirstVisibleWidget();
- method public androidx.constraintlayout.core.widgets.ConstraintWidget! getHead();
- method public androidx.constraintlayout.core.widgets.ConstraintWidget! getLast();
- method public androidx.constraintlayout.core.widgets.ConstraintWidget! getLastMatchConstraintWidget();
- method public androidx.constraintlayout.core.widgets.ConstraintWidget! getLastVisibleWidget();
- method public float getTotalWeight();
- field protected androidx.constraintlayout.core.widgets.ConstraintWidget! mFirst;
- field protected androidx.constraintlayout.core.widgets.ConstraintWidget! mFirstMatchConstraintWidget;
- field protected androidx.constraintlayout.core.widgets.ConstraintWidget! mFirstVisibleWidget;
- field protected boolean mHasComplexMatchWeights;
- field protected boolean mHasDefinedWeights;
- field protected boolean mHasRatio;
- field protected boolean mHasUndefinedWeights;
- field protected androidx.constraintlayout.core.widgets.ConstraintWidget! mHead;
- field protected androidx.constraintlayout.core.widgets.ConstraintWidget! mLast;
- field protected androidx.constraintlayout.core.widgets.ConstraintWidget! mLastMatchConstraintWidget;
- field protected androidx.constraintlayout.core.widgets.ConstraintWidget! mLastVisibleWidget;
- field protected float mTotalWeight;
- field protected java.util.ArrayList<androidx.constraintlayout.core.widgets.ConstraintWidget!>! mWeightedMatchConstraintsWidgets;
- field protected int mWidgetsCount;
- field protected int mWidgetsMatchCount;
- }
-
- public class ConstraintAnchor {
- ctor public ConstraintAnchor(androidx.constraintlayout.core.widgets.ConstraintWidget!, androidx.constraintlayout.core.widgets.ConstraintAnchor.Type!);
- method public boolean connect(androidx.constraintlayout.core.widgets.ConstraintAnchor!, int, int, boolean);
- method public boolean connect(androidx.constraintlayout.core.widgets.ConstraintAnchor!, int);
- method public void copyFrom(androidx.constraintlayout.core.widgets.ConstraintAnchor!, java.util.HashMap<androidx.constraintlayout.core.widgets.ConstraintWidget!,androidx.constraintlayout.core.widgets.ConstraintWidget!>!);
- method public void findDependents(int, java.util.ArrayList<androidx.constraintlayout.core.widgets.analyzer.WidgetGroup!>!, androidx.constraintlayout.core.widgets.analyzer.WidgetGroup!);
- method public java.util.HashSet<androidx.constraintlayout.core.widgets.ConstraintAnchor!>! getDependents();
- method public int getFinalValue();
- method public int getMargin();
- method public final androidx.constraintlayout.core.widgets.ConstraintAnchor! getOpposite();
- method public androidx.constraintlayout.core.widgets.ConstraintWidget! getOwner();
- method public androidx.constraintlayout.core.SolverVariable! getSolverVariable();
- method public androidx.constraintlayout.core.widgets.ConstraintAnchor! getTarget();
- method public androidx.constraintlayout.core.widgets.ConstraintAnchor.Type! getType();
- method public boolean hasCenteredDependents();
- method public boolean hasDependents();
- method public boolean hasFinalValue();
- method public boolean isConnected();
- method public boolean isConnectionAllowed(androidx.constraintlayout.core.widgets.ConstraintWidget!, androidx.constraintlayout.core.widgets.ConstraintAnchor!);
- method public boolean isConnectionAllowed(androidx.constraintlayout.core.widgets.ConstraintWidget!);
- method public boolean isSideAnchor();
- method public boolean isSimilarDimensionConnection(androidx.constraintlayout.core.widgets.ConstraintAnchor!);
- method public boolean isValidConnection(androidx.constraintlayout.core.widgets.ConstraintAnchor!);
- method public boolean isVerticalAnchor();
- method public void reset();
- method public void resetFinalResolution();
- method public void resetSolverVariable(androidx.constraintlayout.core.Cache!);
- method public void setFinalValue(int);
- method public void setGoneMargin(int);
- method public void setMargin(int);
- field public int mMargin;
- field public final androidx.constraintlayout.core.widgets.ConstraintWidget! mOwner;
- field public androidx.constraintlayout.core.widgets.ConstraintAnchor! mTarget;
- field public final androidx.constraintlayout.core.widgets.ConstraintAnchor.Type! mType;
- }
-
- public enum ConstraintAnchor.Type {
- enum_constant public static final androidx.constraintlayout.core.widgets.ConstraintAnchor.Type BASELINE;
- enum_constant public static final androidx.constraintlayout.core.widgets.ConstraintAnchor.Type BOTTOM;
- enum_constant public static final androidx.constraintlayout.core.widgets.ConstraintAnchor.Type CENTER;
- enum_constant public static final androidx.constraintlayout.core.widgets.ConstraintAnchor.Type CENTER_X;
- enum_constant public static final androidx.constraintlayout.core.widgets.ConstraintAnchor.Type CENTER_Y;
- enum_constant public static final androidx.constraintlayout.core.widgets.ConstraintAnchor.Type LEFT;
- enum_constant public static final androidx.constraintlayout.core.widgets.ConstraintAnchor.Type NONE;
- enum_constant public static final androidx.constraintlayout.core.widgets.ConstraintAnchor.Type RIGHT;
- enum_constant public static final androidx.constraintlayout.core.widgets.ConstraintAnchor.Type TOP;
- }
-
- public class ConstraintWidget {
- ctor public ConstraintWidget();
- ctor public ConstraintWidget(String!);
- ctor public ConstraintWidget(int, int, int, int);
- ctor public ConstraintWidget(String!, int, int, int, int);
- ctor public ConstraintWidget(int, int);
- ctor public ConstraintWidget(String!, int, int);
- method public void addChildrenToSolverByDependency(androidx.constraintlayout.core.widgets.ConstraintWidgetContainer!, androidx.constraintlayout.core.LinearSystem!, java.util.HashSet<androidx.constraintlayout.core.widgets.ConstraintWidget!>!, int, boolean);
- method public void addToSolver(androidx.constraintlayout.core.LinearSystem!, boolean);
- method public boolean allowedInBarrier();
- method public void connect(androidx.constraintlayout.core.widgets.ConstraintAnchor!, androidx.constraintlayout.core.widgets.ConstraintAnchor!, int);
- method public void connect(androidx.constraintlayout.core.widgets.ConstraintAnchor.Type!, androidx.constraintlayout.core.widgets.ConstraintWidget!, androidx.constraintlayout.core.widgets.ConstraintAnchor.Type!);
- method public void connect(androidx.constraintlayout.core.widgets.ConstraintAnchor.Type!, androidx.constraintlayout.core.widgets.ConstraintWidget!, androidx.constraintlayout.core.widgets.ConstraintAnchor.Type!, int);
- method public void connectCircularConstraint(androidx.constraintlayout.core.widgets.ConstraintWidget!, float, int);
- method public void copy(androidx.constraintlayout.core.widgets.ConstraintWidget!, java.util.HashMap<androidx.constraintlayout.core.widgets.ConstraintWidget!,androidx.constraintlayout.core.widgets.ConstraintWidget!>!);
- method public void createObjectVariables(androidx.constraintlayout.core.LinearSystem!);
- method public void ensureMeasureRequested();
- method public void ensureWidgetRuns();
- method public androidx.constraintlayout.core.widgets.ConstraintAnchor! getAnchor(androidx.constraintlayout.core.widgets.ConstraintAnchor.Type!);
- method public java.util.ArrayList<androidx.constraintlayout.core.widgets.ConstraintAnchor!>! getAnchors();
- method public int getBaselineDistance();
- method public float getBiasPercent(int);
- method public int getBottom();
- method public Object! getCompanionWidget();
- method public int getContainerItemSkip();
- method public String! getDebugName();
- method public androidx.constraintlayout.core.widgets.ConstraintWidget.DimensionBehaviour! getDimensionBehaviour(int);
- method public float getDimensionRatio();
- method public int getDimensionRatioSide();
- method public boolean getHasBaseline();
- method public int getHeight();
- method public float getHorizontalBiasPercent();
- method public androidx.constraintlayout.core.widgets.ConstraintWidget! getHorizontalChainControlWidget();
- method public int getHorizontalChainStyle();
- method public androidx.constraintlayout.core.widgets.ConstraintWidget.DimensionBehaviour! getHorizontalDimensionBehaviour();
- method public int getHorizontalMargin();
- method public int getLastHorizontalMeasureSpec();
- method public int getLastVerticalMeasureSpec();
- method public int getLeft();
- method public int getLength(int);
- method public int getMaxHeight();
- method public int getMaxWidth();
- method public int getMinHeight();
- method public int getMinWidth();
- method public androidx.constraintlayout.core.widgets.ConstraintWidget! getNextChainMember(int);
- method public int getOptimizerWrapHeight();
- method public int getOptimizerWrapWidth();
- method public androidx.constraintlayout.core.widgets.ConstraintWidget! getParent();
- method public androidx.constraintlayout.core.widgets.ConstraintWidget! getPreviousChainMember(int);
- method public int getRight();
- method protected int getRootX();
- method protected int getRootY();
- method public androidx.constraintlayout.core.widgets.analyzer.WidgetRun! getRun(int);
- method public void getSceneString(StringBuilder!);
- method public int getTop();
- method public String! getType();
- method public float getVerticalBiasPercent();
- method public androidx.constraintlayout.core.widgets.ConstraintWidget! getVerticalChainControlWidget();
- method public int getVerticalChainStyle();
- method public androidx.constraintlayout.core.widgets.ConstraintWidget.DimensionBehaviour! getVerticalDimensionBehaviour();
- method public int getVerticalMargin();
- method public int getVisibility();
- method public int getWidth();
- method public int getWrapBehaviorInParent();
- method public int getX();
- method public int getY();
- method public boolean hasBaseline();
- method public boolean hasDanglingDimension(int);
- method public boolean hasDependencies();
- method public boolean hasDimensionOverride();
- method public boolean hasResolvedTargets(int, int);
- method public void immediateConnect(androidx.constraintlayout.core.widgets.ConstraintAnchor.Type!, androidx.constraintlayout.core.widgets.ConstraintWidget!, androidx.constraintlayout.core.widgets.ConstraintAnchor.Type!, int, int);
- method public boolean isAnimated();
- method public boolean isHeightWrapContent();
- method public boolean isHorizontalSolvingPassDone();
- method public boolean isInBarrier(int);
- method public boolean isInHorizontalChain();
- method public boolean isInPlaceholder();
- method public boolean isInVerticalChain();
- method public boolean isInVirtualLayout();
- method public boolean isMeasureRequested();
- method public boolean isResolvedHorizontally();
- method public boolean isResolvedVertically();
- method public boolean isRoot();
- method public boolean isSpreadHeight();
- method public boolean isSpreadWidth();
- method public boolean isVerticalSolvingPassDone();
- method public boolean isWidthWrapContent();
- method public void markHorizontalSolvingPassDone();
- method public void markVerticalSolvingPassDone();
- method public boolean oppositeDimensionDependsOn(int);
- method public boolean oppositeDimensionsTied();
- method public void reset();
- method public void resetAllConstraints();
- method public void resetAnchor(androidx.constraintlayout.core.widgets.ConstraintAnchor!);
- method public void resetAnchors();
- method public void resetFinalResolution();
- method public void resetSolverVariables(androidx.constraintlayout.core.Cache!);
- method public void resetSolvingPassFlag();
- method public StringBuilder! serialize(StringBuilder!);
- method public void setAnimated(boolean);
- method public void setBaselineDistance(int);
- method public void setCompanionWidget(Object!);
- method public void setContainerItemSkip(int);
- method public void setDebugName(String!);
- method public void setDebugSolverName(androidx.constraintlayout.core.LinearSystem!, String!);
- method public void setDimension(int, int);
- method public void setDimensionRatio(String!);
- method public void setDimensionRatio(float, int);
- method public void setFinalBaseline(int);
- method public void setFinalFrame(int, int, int, int, int, int);
- method public void setFinalHorizontal(int, int);
- method public void setFinalLeft(int);
- method public void setFinalTop(int);
- method public void setFinalVertical(int, int);
- method public void setFrame(int, int, int, int);
- method public void setFrame(int, int, int);
- method public void setGoneMargin(androidx.constraintlayout.core.widgets.ConstraintAnchor.Type!, int);
- method public void setHasBaseline(boolean);
- method public void setHeight(int);
- method public void setHeightWrapContent(boolean);
- method public void setHorizontalBiasPercent(float);
- method public void setHorizontalChainStyle(int);
- method public void setHorizontalDimension(int, int);
- method public void setHorizontalDimensionBehaviour(androidx.constraintlayout.core.widgets.ConstraintWidget.DimensionBehaviour!);
- method public void setHorizontalMatchStyle(int, int, int, float);
- method public void setHorizontalWeight(float);
- method protected void setInBarrier(int, boolean);
- method public void setInPlaceholder(boolean);
- method public void setInVirtualLayout(boolean);
- method public void setLastMeasureSpec(int, int);
- method public void setLength(int, int);
- method public void setMaxHeight(int);
- method public void setMaxWidth(int);
- method public void setMeasureRequested(boolean);
- method public void setMinHeight(int);
- method public void setMinWidth(int);
- method public void setOffset(int, int);
- method public void setOrigin(int, int);
- method public void setParent(androidx.constraintlayout.core.widgets.ConstraintWidget!);
- method public void setType(String!);
- method public void setVerticalBiasPercent(float);
- method public void setVerticalChainStyle(int);
- method public void setVerticalDimension(int, int);
- method public void setVerticalDimensionBehaviour(androidx.constraintlayout.core.widgets.ConstraintWidget.DimensionBehaviour!);
- method public void setVerticalMatchStyle(int, int, int, float);
- method public void setVerticalWeight(float);
- method public void setVisibility(int);
- method public void setWidth(int);
- method public void setWidthWrapContent(boolean);
- method public void setWrapBehaviorInParent(int);
- method public void setX(int);
- method public void setY(int);
- method public void setupDimensionRatio(boolean, boolean, boolean, boolean);
- method public void updateFromRuns(boolean, boolean);
- method public void updateFromSolver(androidx.constraintlayout.core.LinearSystem!, boolean);
- field public static final int ANCHOR_BASELINE = 4; // 0x4
- field public static final int ANCHOR_BOTTOM = 3; // 0x3
- field public static final int ANCHOR_LEFT = 0; // 0x0
- field public static final int ANCHOR_RIGHT = 1; // 0x1
- field public static final int ANCHOR_TOP = 2; // 0x2
- field public static final int BOTH = 2; // 0x2
- field public static final int CHAIN_PACKED = 2; // 0x2
- field public static final int CHAIN_SPREAD = 0; // 0x0
- field public static final int CHAIN_SPREAD_INSIDE = 1; // 0x1
- field public static float DEFAULT_BIAS;
- field protected static final int DIRECT = 2; // 0x2
- field public static final int GONE = 8; // 0x8
- field public static final int HORIZONTAL = 0; // 0x0
- field public static final int INVISIBLE = 4; // 0x4
- field public static final int MATCH_CONSTRAINT_PERCENT = 2; // 0x2
- field public static final int MATCH_CONSTRAINT_RATIO = 3; // 0x3
- field public static final int MATCH_CONSTRAINT_RATIO_RESOLVED = 4; // 0x4
- field public static final int MATCH_CONSTRAINT_SPREAD = 0; // 0x0
- field public static final int MATCH_CONSTRAINT_WRAP = 1; // 0x1
- field protected static final int SOLVER = 1; // 0x1
- field public static final int UNKNOWN = -1; // 0xffffffff
- field public static final int VERTICAL = 1; // 0x1
- field public static final int VISIBLE = 0; // 0x0
- field public static final int WRAP_BEHAVIOR_HORIZONTAL_ONLY = 1; // 0x1
- field public static final int WRAP_BEHAVIOR_INCLUDED = 0; // 0x0
- field public static final int WRAP_BEHAVIOR_SKIPPED = 3; // 0x3
- field public static final int WRAP_BEHAVIOR_VERTICAL_ONLY = 2; // 0x2
- field public androidx.constraintlayout.core.state.WidgetFrame! frame;
- field public androidx.constraintlayout.core.widgets.analyzer.ChainRun! horizontalChainRun;
- field public int horizontalGroup;
- field public boolean[]! isTerminalWidget;
- field protected java.util.ArrayList<androidx.constraintlayout.core.widgets.ConstraintAnchor!>! mAnchors;
- field public androidx.constraintlayout.core.widgets.ConstraintAnchor! mBaseline;
- field public androidx.constraintlayout.core.widgets.ConstraintAnchor! mBottom;
- field public androidx.constraintlayout.core.widgets.ConstraintAnchor! mCenter;
- field public float mCircleConstraintAngle;
- field public float mDimensionRatio;
- field protected int mDimensionRatioSide;
- field public int mHorizontalResolution;
- field public androidx.constraintlayout.core.widgets.analyzer.HorizontalWidgetRun! mHorizontalRun;
- field public boolean mIsHeightWrapContent;
- field public boolean mIsWidthWrapContent;
- field public androidx.constraintlayout.core.widgets.ConstraintAnchor! mLeft;
- field public androidx.constraintlayout.core.widgets.ConstraintAnchor![]! mListAnchors;
- field public androidx.constraintlayout.core.widgets.ConstraintWidget.DimensionBehaviour![]! mListDimensionBehaviors;
- field protected androidx.constraintlayout.core.widgets.ConstraintWidget![]! mListNextMatchConstraintsWidget;
- field public int mMatchConstraintDefaultHeight;
- field public int mMatchConstraintDefaultWidth;
- field public int mMatchConstraintMaxHeight;
- field public int mMatchConstraintMaxWidth;
- field public int mMatchConstraintMinHeight;
- field public int mMatchConstraintMinWidth;
- field public float mMatchConstraintPercentHeight;
- field public float mMatchConstraintPercentWidth;
- field protected int mMinHeight;
- field protected int mMinWidth;
- field protected androidx.constraintlayout.core.widgets.ConstraintWidget![]! mNextChainWidget;
- field protected int mOffsetX;
- field protected int mOffsetY;
- field public androidx.constraintlayout.core.widgets.ConstraintWidget! mParent;
- field public int[]! mResolvedMatchConstraintDefault;
- field public androidx.constraintlayout.core.widgets.ConstraintAnchor! mRight;
- field public androidx.constraintlayout.core.widgets.ConstraintAnchor! mTop;
- field public int mVerticalResolution;
- field public androidx.constraintlayout.core.widgets.analyzer.VerticalWidgetRun! mVerticalRun;
- field public float[]! mWeight;
- field protected int mX;
- field protected int mY;
- field public boolean measured;
- field public androidx.constraintlayout.core.widgets.analyzer.WidgetRun![]! run;
- field public String! stringId;
- field public androidx.constraintlayout.core.widgets.analyzer.ChainRun! verticalChainRun;
- field public int verticalGroup;
- }
-
- public enum ConstraintWidget.DimensionBehaviour {
- enum_constant public static final androidx.constraintlayout.core.widgets.ConstraintWidget.DimensionBehaviour FIXED;
- enum_constant public static final androidx.constraintlayout.core.widgets.ConstraintWidget.DimensionBehaviour MATCH_CONSTRAINT;
- enum_constant public static final androidx.constraintlayout.core.widgets.ConstraintWidget.DimensionBehaviour MATCH_PARENT;
- enum_constant public static final androidx.constraintlayout.core.widgets.ConstraintWidget.DimensionBehaviour WRAP_CONTENT;
- }
-
- public class ConstraintWidgetContainer extends androidx.constraintlayout.core.widgets.WidgetContainer {
- ctor public ConstraintWidgetContainer();
- ctor public ConstraintWidgetContainer(int, int, int, int);
- ctor public ConstraintWidgetContainer(int, int);
- ctor public ConstraintWidgetContainer(String!, int, int);
- method public boolean addChildrenToSolver(androidx.constraintlayout.core.LinearSystem!);
- method public void addHorizontalWrapMaxVariable(androidx.constraintlayout.core.widgets.ConstraintAnchor!);
- method public void addHorizontalWrapMinVariable(androidx.constraintlayout.core.widgets.ConstraintAnchor!);
- method public void defineTerminalWidgets();
- method public boolean directMeasure(boolean);
- method public boolean directMeasureSetup(boolean);
- method public boolean directMeasureWithOrientation(boolean, int);
- method public void fillMetrics(androidx.constraintlayout.core.Metrics!);
- method public java.util.ArrayList<androidx.constraintlayout.core.widgets.Guideline!>! getHorizontalGuidelines();
- method public androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.Measurer! getMeasurer();
- method public int getOptimizationLevel();
- method public androidx.constraintlayout.core.LinearSystem! getSystem();
- method public java.util.ArrayList<androidx.constraintlayout.core.widgets.Guideline!>! getVerticalGuidelines();
- method public boolean handlesInternalConstraints();
- method public void invalidateGraph();
- method public void invalidateMeasures();
- method public boolean isHeightMeasuredTooSmall();
- method public boolean isRtl();
- method public boolean isWidthMeasuredTooSmall();
- method public long measure(int, int, int, int, int, int, int, int, int);
- method public static boolean measure(int, androidx.constraintlayout.core.widgets.ConstraintWidget!, androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.Measurer!, androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.Measure!, int);
- method public boolean optimizeFor(int);
- method public void setMeasurer(androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.Measurer!);
- method public void setOptimizationLevel(int);
- method public void setPadding(int, int, int, int);
- method public void setPass(int);
- method public void setRtl(boolean);
- method public boolean updateChildrenFromSolver(androidx.constraintlayout.core.LinearSystem!, boolean[]!);
- method public void updateHierarchy();
- field public androidx.constraintlayout.core.widgets.analyzer.DependencyGraph! mDependencyGraph;
- field public boolean mGroupsWrapOptimized;
- field public int mHorizontalChainsSize;
- field public boolean mHorizontalWrapOptimized;
- field public androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.Measure! mMeasure;
- field protected androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.Measurer! mMeasurer;
- field public androidx.constraintlayout.core.Metrics! mMetrics;
- field public boolean mSkipSolver;
- field protected androidx.constraintlayout.core.LinearSystem! mSystem;
- field public int mVerticalChainsSize;
- field public boolean mVerticalWrapOptimized;
- field public int mWrapFixedHeight;
- field public int mWrapFixedWidth;
- }
-
- public class Flow extends androidx.constraintlayout.core.widgets.VirtualLayout {
- ctor public Flow();
- method public float getMaxElementsWrap();
- method public void setFirstHorizontalBias(float);
- method public void setFirstHorizontalStyle(int);
- method public void setFirstVerticalBias(float);
- method public void setFirstVerticalStyle(int);
- method public void setHorizontalAlign(int);
- method public void setHorizontalBias(float);
- method public void setHorizontalGap(int);
- method public void setHorizontalStyle(int);
- method public void setLastHorizontalBias(float);
- method public void setLastHorizontalStyle(int);
- method public void setLastVerticalBias(float);
- method public void setLastVerticalStyle(int);
- method public void setMaxElementsWrap(int);
- method public void setOrientation(int);
- method public void setVerticalAlign(int);
- method public void setVerticalBias(float);
- method public void setVerticalGap(int);
- method public void setVerticalStyle(int);
- method public void setWrapMode(int);
- field public static final int HORIZONTAL_ALIGN_CENTER = 2; // 0x2
- field public static final int HORIZONTAL_ALIGN_END = 1; // 0x1
- field public static final int HORIZONTAL_ALIGN_START = 0; // 0x0
- field public static final int VERTICAL_ALIGN_BASELINE = 3; // 0x3
- field public static final int VERTICAL_ALIGN_BOTTOM = 1; // 0x1
- field public static final int VERTICAL_ALIGN_CENTER = 2; // 0x2
- field public static final int VERTICAL_ALIGN_TOP = 0; // 0x0
- field public static final int WRAP_ALIGNED = 2; // 0x2
- field public static final int WRAP_CHAIN = 1; // 0x1
- field public static final int WRAP_CHAIN_NEW = 3; // 0x3
- field public static final int WRAP_NONE = 0; // 0x0
- }
-
- public class Guideline extends androidx.constraintlayout.core.widgets.ConstraintWidget {
- ctor public Guideline();
- method public void cyclePosition();
- method public androidx.constraintlayout.core.widgets.ConstraintAnchor! getAnchor();
- method public int getMinimumPosition();
- method public int getOrientation();
- method public int getRelativeBegin();
- method public int getRelativeBehaviour();
- method public int getRelativeEnd();
- method public float getRelativePercent();
- method public boolean isPercent();
- method public void setFinalValue(int);
- method public void setGuideBegin(int);
- method public void setGuideEnd(int);
- method public void setGuidePercent(int);
- method public void setGuidePercent(float);
- method public void setMinimumPosition(int);
- method public void setOrientation(int);
- field public static final int HORIZONTAL = 0; // 0x0
- field public static final int RELATIVE_BEGIN = 1; // 0x1
- field public static final int RELATIVE_END = 2; // 0x2
- field public static final int RELATIVE_PERCENT = 0; // 0x0
- field public static final int RELATIVE_UNKNOWN = -1; // 0xffffffff
- field public static final int VERTICAL = 1; // 0x1
- field protected boolean mGuidelineUseRtl;
- field protected int mRelativeBegin;
- field protected int mRelativeEnd;
- field protected float mRelativePercent;
- }
-
- public interface Helper {
- method public void add(androidx.constraintlayout.core.widgets.ConstraintWidget!);
- method public void removeAllIds();
- method public void updateConstraints(androidx.constraintlayout.core.widgets.ConstraintWidgetContainer!);
- }
-
- public class HelperWidget extends androidx.constraintlayout.core.widgets.ConstraintWidget implements androidx.constraintlayout.core.widgets.Helper {
- ctor public HelperWidget();
- method public void add(androidx.constraintlayout.core.widgets.ConstraintWidget!);
- method public void addDependents(java.util.ArrayList<androidx.constraintlayout.core.widgets.analyzer.WidgetGroup!>!, int, androidx.constraintlayout.core.widgets.analyzer.WidgetGroup!);
- method public int findGroupInDependents(int);
- method public void removeAllIds();
- method public void updateConstraints(androidx.constraintlayout.core.widgets.ConstraintWidgetContainer!);
- field public androidx.constraintlayout.core.widgets.ConstraintWidget![]! mWidgets;
- field public int mWidgetsCount;
- }
-
- public class Optimizer {
- ctor public Optimizer();
- method public static final boolean enabled(int, int);
- field public static final int OPTIMIZATION_BARRIER = 2; // 0x2
- field public static final int OPTIMIZATION_CACHE_MEASURES = 256; // 0x100
- field public static final int OPTIMIZATION_CHAIN = 4; // 0x4
- field public static final int OPTIMIZATION_DEPENDENCY_ORDERING = 512; // 0x200
- field public static final int OPTIMIZATION_DIMENSIONS = 8; // 0x8
- field public static final int OPTIMIZATION_DIRECT = 1; // 0x1
- field public static final int OPTIMIZATION_GRAPH = 64; // 0x40
- field public static final int OPTIMIZATION_GRAPH_WRAP = 128; // 0x80
- field public static final int OPTIMIZATION_GROUPING = 1024; // 0x400
- field public static final int OPTIMIZATION_GROUPS = 32; // 0x20
- field public static final int OPTIMIZATION_NONE = 0; // 0x0
- field public static final int OPTIMIZATION_RATIO = 16; // 0x10
- field public static final int OPTIMIZATION_STANDARD = 257; // 0x101
- }
-
- public class Placeholder extends androidx.constraintlayout.core.widgets.VirtualLayout {
- ctor public Placeholder();
- }
-
- public class Rectangle {
- ctor public Rectangle();
- method public boolean contains(int, int);
- method public int getCenterX();
- method public int getCenterY();
- method public void setBounds(int, int, int, int);
- field public int height;
- field public int width;
- field public int x;
- field public int y;
- }
-
- public class VirtualLayout extends androidx.constraintlayout.core.widgets.HelperWidget {
- ctor public VirtualLayout();
- method public void applyRtl(boolean);
- method public void captureWidgets();
- method public boolean contains(java.util.HashSet<androidx.constraintlayout.core.widgets.ConstraintWidget!>!);
- method public int getMeasuredHeight();
- method public int getMeasuredWidth();
- method public int getPaddingBottom();
- method public int getPaddingLeft();
- method public int getPaddingRight();
- method public int getPaddingTop();
- method public void measure(int, int, int, int);
- method protected void measure(androidx.constraintlayout.core.widgets.ConstraintWidget!, androidx.constraintlayout.core.widgets.ConstraintWidget.DimensionBehaviour!, int, androidx.constraintlayout.core.widgets.ConstraintWidget.DimensionBehaviour!, int);
- method protected boolean measureChildren();
- method public boolean needSolverPass();
- method protected void needsCallbackFromSolver(boolean);
- method public void setMeasure(int, int);
- method public void setPadding(int);
- method public void setPaddingBottom(int);
- method public void setPaddingEnd(int);
- method public void setPaddingLeft(int);
- method public void setPaddingRight(int);
- method public void setPaddingStart(int);
- method public void setPaddingTop(int);
- field protected androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.Measure! mMeasure;
- }
-
- public class WidgetContainer extends androidx.constraintlayout.core.widgets.ConstraintWidget {
- ctor public WidgetContainer();
- ctor public WidgetContainer(int, int, int, int);
- ctor public WidgetContainer(int, int);
- method public void add(androidx.constraintlayout.core.widgets.ConstraintWidget!);
- method public void add(androidx.constraintlayout.core.widgets.ConstraintWidget!...);
- method public java.util.ArrayList<androidx.constraintlayout.core.widgets.ConstraintWidget!>! getChildren();
- method public androidx.constraintlayout.core.widgets.ConstraintWidgetContainer! getRootConstraintContainer();
- method public void layout();
- method public void remove(androidx.constraintlayout.core.widgets.ConstraintWidget!);
- method public void removeAllChildren();
- field public java.util.ArrayList<androidx.constraintlayout.core.widgets.ConstraintWidget!>! mChildren;
- }
-
-}
-
-package androidx.constraintlayout.core.widgets.analyzer {
-
- public class BasicMeasure {
- ctor public BasicMeasure(androidx.constraintlayout.core.widgets.ConstraintWidgetContainer!);
- method public long solverMeasure(androidx.constraintlayout.core.widgets.ConstraintWidgetContainer!, int, int, int, int, int, int, int, int, int);
- method public void updateHierarchy(androidx.constraintlayout.core.widgets.ConstraintWidgetContainer!);
- field public static final int AT_MOST = -2147483648; // 0x80000000
- field public static final int EXACTLY = 1073741824; // 0x40000000
- field public static final int FIXED = -3; // 0xfffffffd
- field public static final int MATCH_PARENT = -1; // 0xffffffff
- field public static final int UNSPECIFIED = 0; // 0x0
- field public static final int WRAP_CONTENT = -2; // 0xfffffffe
- }
-
- public static class BasicMeasure.Measure {
- ctor public BasicMeasure.Measure();
- field public static int SELF_DIMENSIONS;
- field public static int TRY_GIVEN_DIMENSIONS;
- field public static int USE_GIVEN_DIMENSIONS;
- field public androidx.constraintlayout.core.widgets.ConstraintWidget.DimensionBehaviour! horizontalBehavior;
- field public int horizontalDimension;
- field public int measureStrategy;
- field public int measuredBaseline;
- field public boolean measuredHasBaseline;
- field public int measuredHeight;
- field public boolean measuredNeedsSolverPass;
- field public int measuredWidth;
- field public androidx.constraintlayout.core.widgets.ConstraintWidget.DimensionBehaviour! verticalBehavior;
- field public int verticalDimension;
- }
-
- public static interface BasicMeasure.Measurer {
- method public void didMeasures();
- method public void measure(androidx.constraintlayout.core.widgets.ConstraintWidget!, androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.Measure!);
- }
-
- public class ChainRun extends androidx.constraintlayout.core.widgets.analyzer.WidgetRun {
- ctor public ChainRun(androidx.constraintlayout.core.widgets.ConstraintWidget!, int);
- method public void applyToWidget();
- }
-
- public interface Dependency {
- method public void update(androidx.constraintlayout.core.widgets.analyzer.Dependency!);
- }
-
- public class DependencyGraph {
- ctor public DependencyGraph(androidx.constraintlayout.core.widgets.ConstraintWidgetContainer!);
- method public void buildGraph();
- method public void buildGraph(java.util.ArrayList<androidx.constraintlayout.core.widgets.analyzer.WidgetRun!>!);
- method public void defineTerminalWidgets(androidx.constraintlayout.core.widgets.ConstraintWidget.DimensionBehaviour!, androidx.constraintlayout.core.widgets.ConstraintWidget.DimensionBehaviour!);
- method public boolean directMeasure(boolean);
- method public boolean directMeasureSetup(boolean);
- method public boolean directMeasureWithOrientation(boolean, int);
- method public void invalidateGraph();
- method public void invalidateMeasures();
- method public void measureWidgets();
- method public void setMeasurer(androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.Measurer!);
- }
-
- public class DependencyNode implements androidx.constraintlayout.core.widgets.analyzer.Dependency {
- ctor public DependencyNode(androidx.constraintlayout.core.widgets.analyzer.WidgetRun!);
- method public void addDependency(androidx.constraintlayout.core.widgets.analyzer.Dependency!);
- method public void clear();
- method public String! name();
- method public void resolve(int);
- method public void update(androidx.constraintlayout.core.widgets.analyzer.Dependency!);
- field public boolean delegateToWidgetRun;
- field public boolean readyToSolve;
- field public boolean resolved;
- field public androidx.constraintlayout.core.widgets.analyzer.Dependency! updateDelegate;
- field public int value;
- }
-
- public class Direct {
- ctor public Direct();
- method public static String! ls(int);
- method public static boolean solveChain(androidx.constraintlayout.core.widgets.ConstraintWidgetContainer!, androidx.constraintlayout.core.LinearSystem!, int, int, androidx.constraintlayout.core.widgets.ChainHead!, boolean, boolean, boolean);
- method public static void solvingPass(androidx.constraintlayout.core.widgets.ConstraintWidgetContainer!, androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.Measurer!);
- }
-
- public class Grouping {
- ctor public Grouping();
- method public static androidx.constraintlayout.core.widgets.analyzer.WidgetGroup! findDependents(androidx.constraintlayout.core.widgets.ConstraintWidget!, int, java.util.ArrayList<androidx.constraintlayout.core.widgets.analyzer.WidgetGroup!>!, androidx.constraintlayout.core.widgets.analyzer.WidgetGroup!);
- method public static boolean simpleSolvingPass(androidx.constraintlayout.core.widgets.ConstraintWidgetContainer!, androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.Measurer!);
- method public static boolean validInGroup(androidx.constraintlayout.core.widgets.ConstraintWidget.DimensionBehaviour!, androidx.constraintlayout.core.widgets.ConstraintWidget.DimensionBehaviour!, androidx.constraintlayout.core.widgets.ConstraintWidget.DimensionBehaviour!, androidx.constraintlayout.core.widgets.ConstraintWidget.DimensionBehaviour!);
- }
-
- public class HorizontalWidgetRun extends androidx.constraintlayout.core.widgets.analyzer.WidgetRun {
- ctor public HorizontalWidgetRun(androidx.constraintlayout.core.widgets.ConstraintWidget!);
- method public void applyToWidget();
- }
-
- public class VerticalWidgetRun extends androidx.constraintlayout.core.widgets.analyzer.WidgetRun {
- ctor public VerticalWidgetRun(androidx.constraintlayout.core.widgets.ConstraintWidget!);
- method public void applyToWidget();
- field public androidx.constraintlayout.core.widgets.analyzer.DependencyNode! baseline;
- }
-
- public class WidgetGroup {
- ctor public WidgetGroup(int);
- method public boolean add(androidx.constraintlayout.core.widgets.ConstraintWidget!);
- method public void apply();
- method public void cleanup(java.util.ArrayList<androidx.constraintlayout.core.widgets.analyzer.WidgetGroup!>!);
- method public void clear();
- method public int getId();
- method public int getOrientation();
- method public boolean intersectWith(androidx.constraintlayout.core.widgets.analyzer.WidgetGroup!);
- method public boolean isAuthoritative();
- method public int measureWrap(androidx.constraintlayout.core.LinearSystem!, int);
- method public void moveTo(int, androidx.constraintlayout.core.widgets.analyzer.WidgetGroup!);
- method public void setAuthoritative(boolean);
- method public void setOrientation(int);
- method public int size();
- }
-
- public abstract class WidgetRun implements androidx.constraintlayout.core.widgets.analyzer.Dependency {
- ctor public WidgetRun(androidx.constraintlayout.core.widgets.ConstraintWidget!);
- method protected final void addTarget(androidx.constraintlayout.core.widgets.analyzer.DependencyNode!, androidx.constraintlayout.core.widgets.analyzer.DependencyNode!, int);
- method protected final void addTarget(androidx.constraintlayout.core.widgets.analyzer.DependencyNode!, androidx.constraintlayout.core.widgets.analyzer.DependencyNode!, int, androidx.constraintlayout.core.widgets.analyzer.DimensionDependency!);
- method protected final int getLimitedDimension(int, int);
- method protected final androidx.constraintlayout.core.widgets.analyzer.DependencyNode! getTarget(androidx.constraintlayout.core.widgets.ConstraintAnchor!);
- method protected final androidx.constraintlayout.core.widgets.analyzer.DependencyNode! getTarget(androidx.constraintlayout.core.widgets.ConstraintAnchor!, int);
- method public long getWrapDimension();
- method public boolean isCenterConnection();
- method public boolean isDimensionResolved();
- method public boolean isResolved();
- method public void update(androidx.constraintlayout.core.widgets.analyzer.Dependency!);
- method protected void updateRunCenter(androidx.constraintlayout.core.widgets.analyzer.Dependency!, androidx.constraintlayout.core.widgets.ConstraintAnchor!, androidx.constraintlayout.core.widgets.ConstraintAnchor!, int);
- method protected void updateRunEnd(androidx.constraintlayout.core.widgets.analyzer.Dependency!);
- method protected void updateRunStart(androidx.constraintlayout.core.widgets.analyzer.Dependency!);
- method public long wrapSize(int);
- field public androidx.constraintlayout.core.widgets.analyzer.DependencyNode! end;
- field protected androidx.constraintlayout.core.widgets.ConstraintWidget.DimensionBehaviour! mDimensionBehavior;
- field protected androidx.constraintlayout.core.widgets.analyzer.WidgetRun.RunType! mRunType;
- field public int matchConstraintsType;
- field public int orientation;
- field public androidx.constraintlayout.core.widgets.analyzer.DependencyNode! start;
- }
-
-}
-
diff --git a/constraintlayout/constraintlayout-core/api/restricted_current.txt b/constraintlayout/constraintlayout-core/api/restricted_current.txt
index 42e3a22..7710fe2 100644
--- a/constraintlayout/constraintlayout-core/api/restricted_current.txt
+++ b/constraintlayout/constraintlayout-core/api/restricted_current.txt
@@ -33,8 +33,8 @@
method public androidx.constraintlayout.core.ArrayRow! createRowDimensionRatio(androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, float);
method public androidx.constraintlayout.core.ArrayRow! createRowEqualDimension(float, float, float, androidx.constraintlayout.core.SolverVariable!, int, androidx.constraintlayout.core.SolverVariable!, int, androidx.constraintlayout.core.SolverVariable!, int, androidx.constraintlayout.core.SolverVariable!, int);
method public androidx.constraintlayout.core.ArrayRow! createRowEqualMatchDimensions(float, float, float, androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!);
- method public androidx.constraintlayout.core.ArrayRow! createRowEquals(androidx.constraintlayout.core.SolverVariable!, int);
method public androidx.constraintlayout.core.ArrayRow! createRowEquals(androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, int);
+ method public androidx.constraintlayout.core.ArrayRow! createRowEquals(androidx.constraintlayout.core.SolverVariable!, int);
method public androidx.constraintlayout.core.ArrayRow! createRowGreaterThan(androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, int);
method public androidx.constraintlayout.core.ArrayRow! createRowGreaterThan(androidx.constraintlayout.core.SolverVariable!, int, androidx.constraintlayout.core.SolverVariable!);
method public androidx.constraintlayout.core.ArrayRow! createRowLowerThan(androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, androidx.constraintlayout.core.SolverVariable!, int);
@@ -183,8 +183,8 @@
}
public class SolverVariable implements java.lang.Comparable<androidx.constraintlayout.core.SolverVariable> {
- ctor public SolverVariable(String!, androidx.constraintlayout.core.SolverVariable.Type!);
ctor public SolverVariable(androidx.constraintlayout.core.SolverVariable.Type!, String!);
+ ctor public SolverVariable(String!, androidx.constraintlayout.core.SolverVariable.Type!);
method public final void addToRow(androidx.constraintlayout.core.ArrayRow!);
method public int compareTo(androidx.constraintlayout.core.SolverVariable!);
method public String! getName();
@@ -673,11 +673,11 @@
public class Keys {
ctor public Keys();
+ method protected void append(StringBuilder!, String!, float);
+ method protected void append(StringBuilder!, String!, float[]!);
method protected void append(StringBuilder!, String!, int);
method protected void append(StringBuilder!, String!, String!);
- method protected void append(StringBuilder!, String!, float);
method protected void append(StringBuilder!, String!, String![]!);
- method protected void append(StringBuilder!, String!, float[]!);
method protected String! unpack(String![]!);
}
@@ -827,9 +827,9 @@
package androidx.constraintlayout.core.motion {
public class CustomAttribute {
+ ctor public CustomAttribute(androidx.constraintlayout.core.motion.CustomAttribute!, Object!);
ctor public CustomAttribute(String!, androidx.constraintlayout.core.motion.CustomAttribute.AttributeType!);
ctor public CustomAttribute(String!, androidx.constraintlayout.core.motion.CustomAttribute.AttributeType!, Object!, boolean);
- ctor public CustomAttribute(androidx.constraintlayout.core.motion.CustomAttribute!, Object!);
method public boolean diff(androidx.constraintlayout.core.motion.CustomAttribute!);
method public androidx.constraintlayout.core.motion.CustomAttribute.AttributeType! getType();
method public float getValueToInterpolate();
@@ -858,13 +858,13 @@
public class CustomVariable {
ctor public CustomVariable(androidx.constraintlayout.core.motion.CustomVariable!);
- ctor public CustomVariable(String!, int, String!);
- ctor public CustomVariable(String!, int, int);
- ctor public CustomVariable(String!, int, float);
- ctor public CustomVariable(String!, int, boolean);
- ctor public CustomVariable(String!, int);
- ctor public CustomVariable(String!, int, Object!);
ctor public CustomVariable(androidx.constraintlayout.core.motion.CustomVariable!, Object!);
+ ctor public CustomVariable(String!, int);
+ ctor public CustomVariable(String!, int, boolean);
+ ctor public CustomVariable(String!, int, float);
+ ctor public CustomVariable(String!, int, int);
+ ctor public CustomVariable(String!, int, Object!);
+ ctor public CustomVariable(String!, int, String!);
method public void applyToWidget(androidx.constraintlayout.core.motion.MotionWidget!);
method public static String! colorString(int);
method public androidx.constraintlayout.core.motion.CustomVariable! copy();
@@ -929,10 +929,10 @@
method public void setStart(androidx.constraintlayout.core.motion.MotionWidget!);
method public void setStartState(androidx.constraintlayout.core.motion.utils.ViewState!, androidx.constraintlayout.core.motion.MotionWidget!, int, int, int);
method public void setTransformPivotTarget(int);
- method public boolean setValue(int, int);
- method public boolean setValue(int, float);
- method public boolean setValue(int, String!);
method public boolean setValue(int, boolean);
+ method public boolean setValue(int, float);
+ method public boolean setValue(int, int);
+ method public boolean setValue(int, String!);
method public void setView(androidx.constraintlayout.core.motion.MotionWidget!);
method public void setup(int, int, float, long);
method public void setupRelative(androidx.constraintlayout.core.motion.Motion!);
@@ -1003,9 +1003,9 @@
method public int getY();
method public void layout(int, int, int, int);
method public void setBounds(int, int, int, int);
+ method public void setCustomAttribute(String!, int, boolean);
method public void setCustomAttribute(String!, int, float);
method public void setCustomAttribute(String!, int, int);
- method public void setCustomAttribute(String!, int, boolean);
method public void setCustomAttribute(String!, int, String!);
method public void setInterpolatedValue(androidx.constraintlayout.core.motion.CustomAttribute!, float[]!);
method public void setPivotX(float);
@@ -1018,14 +1018,14 @@
method public void setTranslationX(float);
method public void setTranslationY(float);
method public void setTranslationZ(float);
- method public boolean setValue(int, int);
- method public boolean setValue(int, float);
- method public boolean setValue(int, String!);
method public boolean setValue(int, boolean);
+ method public boolean setValue(int, float);
+ method public boolean setValue(int, int);
+ method public boolean setValue(int, String!);
method public boolean setValueAttributes(int, float);
+ method public boolean setValueMotion(int, float);
method public boolean setValueMotion(int, int);
method public boolean setValueMotion(int, String!);
- method public boolean setValueMotion(int, float);
method public void setVisibility(int);
method public void updateMotion(androidx.constraintlayout.core.motion.utils.TypedValues!);
field public static final int FILL_PARENT = -1; // 0xffffffff
@@ -1094,16 +1094,16 @@
method public androidx.constraintlayout.core.motion.key.MotionKey! copy(androidx.constraintlayout.core.motion.key.MotionKey!);
method public abstract void getAttributeNames(java.util.HashSet<java.lang.String!>!);
method public int getFramePosition();
+ method public void setCustomAttribute(String!, int, boolean);
method public void setCustomAttribute(String!, int, float);
method public void setCustomAttribute(String!, int, int);
- method public void setCustomAttribute(String!, int, boolean);
method public void setCustomAttribute(String!, int, String!);
method public void setFramePosition(int);
method public void setInterpolation(java.util.HashMap<java.lang.String!,java.lang.Integer!>!);
- method public boolean setValue(int, int);
- method public boolean setValue(int, float);
- method public boolean setValue(int, String!);
method public boolean setValue(int, boolean);
+ method public boolean setValue(int, float);
+ method public boolean setValue(int, int);
+ method public boolean setValue(int, String!);
method public androidx.constraintlayout.core.motion.key.MotionKey! setViewId(int);
field public static final String ALPHA = "alpha";
field public static final String CUSTOM = "CUSTOM";
@@ -1297,8 +1297,8 @@
}
public class HyperSpline {
- ctor public HyperSpline(double[]![]!);
ctor public HyperSpline();
+ ctor public HyperSpline(double[]![]!);
method public double approxLength(androidx.constraintlayout.core.motion.utils.HyperSpline.Cubic![]!);
method public void getPos(double, double[]!);
method public void getPos(double, float[]!);
@@ -1326,8 +1326,8 @@
method public float getSlope(float);
method public static androidx.constraintlayout.core.motion.utils.KeyCycleOscillator! makeWidgetCycle(String!);
method protected void setCustom(Object!);
- method public void setPoint(int, int, String!, int, float, float, float, float, Object!);
method public void setPoint(int, int, String!, int, float, float, float, float);
+ method public void setPoint(int, int, String!, int, float, float, float, float, Object!);
method public void setProperty(androidx.constraintlayout.core.motion.MotionWidget!, float);
method public void setType(String!);
method public void setup(float);
@@ -1452,8 +1452,8 @@
method public String! debug(String!, float);
method public float getAcceleration();
method public float getInterpolation(float);
- method public float getVelocity(float);
method public float getVelocity();
+ method public float getVelocity(float);
method public boolean isStopped();
method public void springConfig(float, float, float, float, float, float, float, int);
}
@@ -1464,8 +1464,8 @@
public interface StopEngine {
method public String! debug(String!, float);
method public float getInterpolation(float);
- method public float getVelocity(float);
method public float getVelocity();
+ method public float getVelocity(float);
method public boolean isStopped();
}
@@ -1474,8 +1474,8 @@
method public void config(float, float, float, float, float, float);
method public String! debug(String!, float);
method public float getInterpolation(float);
- method public float getVelocity(float);
method public float getVelocity();
+ method public float getVelocity(float);
method public boolean isStopped();
}
@@ -1484,8 +1484,8 @@
method public void config(float, float, float);
method public String! debug(String!, float);
method public float getInterpolation(float);
- method public float getVelocity(float);
method public float getVelocity();
+ method public float getVelocity(float);
method public boolean isStopped();
}
@@ -1531,23 +1531,23 @@
public class TypedBundle {
ctor public TypedBundle();
- method public void add(int, int);
- method public void add(int, float);
- method public void add(int, String!);
method public void add(int, boolean);
+ method public void add(int, float);
+ method public void add(int, int);
+ method public void add(int, String!);
method public void addIfNotNull(int, String!);
- method public void applyDelta(androidx.constraintlayout.core.motion.utils.TypedValues!);
method public void applyDelta(androidx.constraintlayout.core.motion.utils.TypedBundle!);
+ method public void applyDelta(androidx.constraintlayout.core.motion.utils.TypedValues!);
method public void clear();
method public int getInteger(int);
}
public interface TypedValues {
method public int getId(String!);
- method public boolean setValue(int, int);
- method public boolean setValue(int, float);
- method public boolean setValue(int, String!);
method public boolean setValue(int, boolean);
+ method public boolean setValue(int, float);
+ method public boolean setValue(int, int);
+ method public boolean setValue(int, String!);
field public static final int BOOLEAN_MASK = 1; // 0x1
field public static final int FLOAT_MASK = 4; // 0x4
field public static final int INT_MASK = 2; // 0x2
@@ -1823,8 +1823,8 @@
public class Utils {
ctor public Utils();
method public int getInterpolatedColor(float[]!);
- method public static void log(String!, String!);
method public static void log(String!);
+ method public static void log(String!, String!);
method public static void logStack(String!, int);
method public static void loge(String!, String!);
method public static int rgbaTocColor(float, float, float, float);
@@ -1840,12 +1840,12 @@
ctor public VelocityMatrix();
method public void applyTransform(float, float, int, int, float[]!);
method public void clear();
- method public void setRotationVelocity(androidx.constraintlayout.core.motion.utils.SplineSet!, float);
method public void setRotationVelocity(androidx.constraintlayout.core.motion.utils.KeyCycleOscillator!, float);
- method public void setScaleVelocity(androidx.constraintlayout.core.motion.utils.SplineSet!, androidx.constraintlayout.core.motion.utils.SplineSet!, float);
+ method public void setRotationVelocity(androidx.constraintlayout.core.motion.utils.SplineSet!, float);
method public void setScaleVelocity(androidx.constraintlayout.core.motion.utils.KeyCycleOscillator!, androidx.constraintlayout.core.motion.utils.KeyCycleOscillator!, float);
- method public void setTranslationVelocity(androidx.constraintlayout.core.motion.utils.SplineSet!, androidx.constraintlayout.core.motion.utils.SplineSet!, float);
+ method public void setScaleVelocity(androidx.constraintlayout.core.motion.utils.SplineSet!, androidx.constraintlayout.core.motion.utils.SplineSet!, float);
method public void setTranslationVelocity(androidx.constraintlayout.core.motion.utils.KeyCycleOscillator!, androidx.constraintlayout.core.motion.utils.KeyCycleOscillator!, float);
+ method public void setTranslationVelocity(androidx.constraintlayout.core.motion.utils.SplineSet!, androidx.constraintlayout.core.motion.utils.SplineSet!, float);
}
public class ViewState {
@@ -1875,28 +1875,28 @@
method public static androidx.constraintlayout.core.parser.CLElement! allocate(char[]!);
method public void clear();
method public androidx.constraintlayout.core.parser.CLContainer clone();
- method public androidx.constraintlayout.core.parser.CLElement! get(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
method public androidx.constraintlayout.core.parser.CLElement! get(int) throws androidx.constraintlayout.core.parser.CLParsingException;
- method public androidx.constraintlayout.core.parser.CLArray! getArray(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
+ method public androidx.constraintlayout.core.parser.CLElement! get(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
method public androidx.constraintlayout.core.parser.CLArray! getArray(int) throws androidx.constraintlayout.core.parser.CLParsingException;
+ method public androidx.constraintlayout.core.parser.CLArray! getArray(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
method public androidx.constraintlayout.core.parser.CLArray! getArrayOrCreate(String!);
method public androidx.constraintlayout.core.parser.CLArray! getArrayOrNull(String!);
- method public boolean getBoolean(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
method public boolean getBoolean(int) throws androidx.constraintlayout.core.parser.CLParsingException;
- method public float getFloat(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
+ method public boolean getBoolean(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
method public float getFloat(int) throws androidx.constraintlayout.core.parser.CLParsingException;
+ method public float getFloat(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
method public float getFloatOrNaN(String!);
- method public int getInt(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
method public int getInt(int) throws androidx.constraintlayout.core.parser.CLParsingException;
- method public androidx.constraintlayout.core.parser.CLObject! getObject(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
+ method public int getInt(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
method public androidx.constraintlayout.core.parser.CLObject! getObject(int) throws androidx.constraintlayout.core.parser.CLParsingException;
+ method public androidx.constraintlayout.core.parser.CLObject! getObject(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
method public androidx.constraintlayout.core.parser.CLObject! getObjectOrNull(String!);
- method public androidx.constraintlayout.core.parser.CLElement! getOrNull(String!);
method public androidx.constraintlayout.core.parser.CLElement! getOrNull(int);
- method public String! getString(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
+ method public androidx.constraintlayout.core.parser.CLElement! getOrNull(String!);
method public String! getString(int) throws androidx.constraintlayout.core.parser.CLParsingException;
- method public String! getStringOrNull(String!);
+ method public String! getString(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
method public String! getStringOrNull(int);
+ method public String! getStringOrNull(String!);
method public boolean has(String!);
method public java.util.ArrayList<java.lang.String!>! names();
method public void put(String!, androidx.constraintlayout.core.parser.CLElement!);
@@ -1965,8 +1965,8 @@
public class CLParser {
ctor public CLParser(String!);
- method public static androidx.constraintlayout.core.parser.CLObject! parse(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
method public androidx.constraintlayout.core.parser.CLObject! parse() throws androidx.constraintlayout.core.parser.CLParsingException;
+ method public static androidx.constraintlayout.core.parser.CLObject! parse(String!) throws androidx.constraintlayout.core.parser.CLParsingException;
}
public class CLParsingException extends java.lang.Exception {
@@ -2046,10 +2046,10 @@
method public androidx.constraintlayout.core.state.ConstraintReference! left();
method public androidx.constraintlayout.core.state.ConstraintReference! leftToLeft(Object!);
method public androidx.constraintlayout.core.state.ConstraintReference! leftToRight(Object!);
- method public androidx.constraintlayout.core.state.ConstraintReference! margin(Object!);
method public androidx.constraintlayout.core.state.ConstraintReference! margin(int);
- method public androidx.constraintlayout.core.state.ConstraintReference! marginGone(Object!);
+ method public androidx.constraintlayout.core.state.ConstraintReference! margin(Object!);
method public androidx.constraintlayout.core.state.ConstraintReference! marginGone(int);
+ method public androidx.constraintlayout.core.state.ConstraintReference! marginGone(Object!);
method public androidx.constraintlayout.core.state.ConstraintReference! pivotX(float);
method public androidx.constraintlayout.core.state.ConstraintReference! pivotY(float);
method public androidx.constraintlayout.core.state.ConstraintReference! right();
@@ -2119,8 +2119,8 @@
public class ConstraintSetParser {
ctor public ConstraintSetParser();
method public static void parseDesignElementsJSON(String!, java.util.ArrayList<androidx.constraintlayout.core.state.ConstraintSetParser.DesignElement!>!) throws androidx.constraintlayout.core.parser.CLParsingException;
- method public static void parseJSON(String!, androidx.constraintlayout.core.state.Transition!, int);
method public static void parseJSON(String!, androidx.constraintlayout.core.state.State!, androidx.constraintlayout.core.state.ConstraintSetParser.LayoutVariables!) throws androidx.constraintlayout.core.parser.CLParsingException;
+ method public static void parseJSON(String!, androidx.constraintlayout.core.state.Transition!, int);
method public static void parseMotionSceneJSON(androidx.constraintlayout.core.state.CoreMotionScene!, String!);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static void populateState(androidx.constraintlayout.core.parser.CLObject, androidx.constraintlayout.core.state.State, androidx.constraintlayout.core.state.ConstraintSetParser.LayoutVariables) throws androidx.constraintlayout.core.parser.CLParsingException;
}
@@ -2143,8 +2143,8 @@
}
public interface CoreMotionScene {
- method public String! getConstraintSet(String!);
method public String! getConstraintSet(int);
+ method public String! getConstraintSet(String!);
method public String! getTransition(String!);
method public void setConstraintSetContent(String!, String!);
method public void setDebugName(String!);
@@ -2167,8 +2167,8 @@
method public static androidx.constraintlayout.core.state.Dimension! createSuggested(Object!);
method public static androidx.constraintlayout.core.state.Dimension! createWrap();
method public boolean equalsFixedValue(int);
- method public androidx.constraintlayout.core.state.Dimension! fixed(Object!);
method public androidx.constraintlayout.core.state.Dimension! fixed(int);
+ method public androidx.constraintlayout.core.state.Dimension! fixed(Object!);
method public androidx.constraintlayout.core.state.Dimension! max(int);
method public androidx.constraintlayout.core.state.Dimension! max(Object!);
method public androidx.constraintlayout.core.state.Dimension! min(int);
@@ -2374,21 +2374,21 @@
method public androidx.constraintlayout.core.state.Transition.KeyPosition! findNextPosition(String!, int);
method public androidx.constraintlayout.core.state.Transition.KeyPosition! findPreviousPosition(String!, int);
method public int getAutoTransition();
- method public androidx.constraintlayout.core.state.WidgetFrame! getEnd(String!);
method public androidx.constraintlayout.core.state.WidgetFrame! getEnd(androidx.constraintlayout.core.widgets.ConstraintWidget!);
+ method public androidx.constraintlayout.core.state.WidgetFrame! getEnd(String!);
method public int getId(String!);
- method public androidx.constraintlayout.core.state.WidgetFrame! getInterpolated(String!);
method public androidx.constraintlayout.core.state.WidgetFrame! getInterpolated(androidx.constraintlayout.core.widgets.ConstraintWidget!);
+ method public androidx.constraintlayout.core.state.WidgetFrame! getInterpolated(String!);
method public int getInterpolatedHeight();
method public int getInterpolatedWidth();
- method public static androidx.constraintlayout.core.state.Interpolator! getInterpolator(int, String!);
method public androidx.constraintlayout.core.state.Interpolator! getInterpolator();
+ method public static androidx.constraintlayout.core.state.Interpolator! getInterpolator(int, String!);
method public int getKeyFrames(String!, float[]!, int[]!, int[]!);
method public androidx.constraintlayout.core.motion.Motion! getMotion(String!);
method public int getNumberKeyPositions(androidx.constraintlayout.core.state.WidgetFrame!);
method public float[]! getPath(String!);
- method public androidx.constraintlayout.core.state.WidgetFrame! getStart(String!);
method public androidx.constraintlayout.core.state.WidgetFrame! getStart(androidx.constraintlayout.core.widgets.ConstraintWidget!);
+ method public androidx.constraintlayout.core.state.WidgetFrame! getStart(String!);
method public float getTouchUpProgress(long);
method public androidx.constraintlayout.core.state.Transition.WidgetState! getWidgetState(String!, androidx.constraintlayout.core.widgets.ConstraintWidget!, int);
method public boolean hasOnSwipe();
@@ -2398,10 +2398,10 @@
method public boolean isTouchNotDone(float);
method public void setTouchUp(float, long, float, float);
method public void setTransitionProperties(androidx.constraintlayout.core.motion.utils.TypedBundle!);
- method public boolean setValue(int, int);
- method public boolean setValue(int, float);
- method public boolean setValue(int, String!);
method public boolean setValue(int, boolean);
+ method public boolean setValue(int, float);
+ method public boolean setValue(int, int);
+ method public boolean setValue(int, String!);
method public void updateFrom(androidx.constraintlayout.core.widgets.ConstraintWidgetContainer!, int);
field public static final int END = 1; // 0x1
field public static final int INTERPOLATED = 2; // 0x2
@@ -2422,15 +2422,15 @@
public class TransitionParser {
ctor public TransitionParser();
- method @Deprecated public static void parse(androidx.constraintlayout.core.parser.CLObject!, androidx.constraintlayout.core.state.Transition!, androidx.constraintlayout.core.state.CorePixelDp!) throws androidx.constraintlayout.core.parser.CLParsingException;
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static void parse(androidx.constraintlayout.core.parser.CLObject, androidx.constraintlayout.core.state.Transition) throws androidx.constraintlayout.core.parser.CLParsingException;
+ method @Deprecated public static void parse(androidx.constraintlayout.core.parser.CLObject!, androidx.constraintlayout.core.state.Transition!, androidx.constraintlayout.core.state.CorePixelDp!) throws androidx.constraintlayout.core.parser.CLParsingException;
method public static void parseKeyFrames(androidx.constraintlayout.core.parser.CLObject!, androidx.constraintlayout.core.state.Transition!) throws androidx.constraintlayout.core.parser.CLParsingException;
}
public class WidgetFrame {
ctor public WidgetFrame();
- ctor public WidgetFrame(androidx.constraintlayout.core.widgets.ConstraintWidget!);
ctor public WidgetFrame(androidx.constraintlayout.core.state.WidgetFrame!);
+ ctor public WidgetFrame(androidx.constraintlayout.core.widgets.ConstraintWidget!);
method public void addCustomColor(String!, int);
method public void addCustomFloat(String!, float);
method public float centerX();
@@ -2447,9 +2447,9 @@
method public boolean isDefaultTransform();
method public StringBuilder! serialize(StringBuilder!);
method public StringBuilder! serialize(StringBuilder!, boolean);
+ method public void setCustomAttribute(String!, int, boolean);
method public void setCustomAttribute(String!, int, float);
method public void setCustomAttribute(String!, int, int);
- method public void setCustomAttribute(String!, int, boolean);
method public void setCustomAttribute(String!, int, String!);
method public void setCustomValue(androidx.constraintlayout.core.motion.CustomAttribute!, float[]!);
method public boolean setValue(String!, androidx.constraintlayout.core.parser.CLElement!) throws androidx.constraintlayout.core.parser.CLParsingException;
@@ -2498,8 +2498,8 @@
public class ChainReference extends androidx.constraintlayout.core.state.HelperReference {
ctor public ChainReference(androidx.constraintlayout.core.state.State, androidx.constraintlayout.core.state.State.Helper);
- method public void addChainElement(String, float, float, float);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void addChainElement(Object, float, float, float, float, float);
+ method public void addChainElement(String, float, float, float);
method public androidx.constraintlayout.core.state.helpers.ChainReference bias(float);
method public float getBias();
method protected float getPostMargin(String);
@@ -2761,8 +2761,8 @@
public class ConstraintAnchor {
ctor public ConstraintAnchor(androidx.constraintlayout.core.widgets.ConstraintWidget!, androidx.constraintlayout.core.widgets.ConstraintAnchor.Type!);
- method public boolean connect(androidx.constraintlayout.core.widgets.ConstraintAnchor!, int, int, boolean);
method public boolean connect(androidx.constraintlayout.core.widgets.ConstraintAnchor!, int);
+ method public boolean connect(androidx.constraintlayout.core.widgets.ConstraintAnchor!, int, int, boolean);
method public void copyFrom(androidx.constraintlayout.core.widgets.ConstraintAnchor!, java.util.HashMap<androidx.constraintlayout.core.widgets.ConstraintWidget!,androidx.constraintlayout.core.widgets.ConstraintWidget!>!);
method public void findDependents(int, java.util.ArrayList<androidx.constraintlayout.core.widgets.analyzer.WidgetGroup!>!, androidx.constraintlayout.core.widgets.analyzer.WidgetGroup!);
method public java.util.HashSet<androidx.constraintlayout.core.widgets.ConstraintAnchor!>! getDependents();
@@ -2777,8 +2777,8 @@
method public boolean hasDependents();
method public boolean hasFinalValue();
method public boolean isConnected();
- method public boolean isConnectionAllowed(androidx.constraintlayout.core.widgets.ConstraintWidget!, androidx.constraintlayout.core.widgets.ConstraintAnchor!);
method public boolean isConnectionAllowed(androidx.constraintlayout.core.widgets.ConstraintWidget!);
+ method public boolean isConnectionAllowed(androidx.constraintlayout.core.widgets.ConstraintWidget!, androidx.constraintlayout.core.widgets.ConstraintAnchor!);
method public boolean isSideAnchor();
method public boolean isSimilarDimensionConnection(androidx.constraintlayout.core.widgets.ConstraintAnchor!);
method public boolean isValidConnection(androidx.constraintlayout.core.widgets.ConstraintAnchor!);
@@ -2809,11 +2809,11 @@
public class ConstraintWidget {
ctor public ConstraintWidget();
- ctor public ConstraintWidget(String!);
- ctor public ConstraintWidget(int, int, int, int);
- ctor public ConstraintWidget(String!, int, int, int, int);
ctor public ConstraintWidget(int, int);
+ ctor public ConstraintWidget(int, int, int, int);
+ ctor public ConstraintWidget(String!);
ctor public ConstraintWidget(String!, int, int);
+ ctor public ConstraintWidget(String!, int, int, int, int);
method public void addChildrenToSolverByDependency(androidx.constraintlayout.core.widgets.ConstraintWidgetContainer!, androidx.constraintlayout.core.LinearSystem!, java.util.HashSet<androidx.constraintlayout.core.widgets.ConstraintWidget!>!, int, boolean);
method public void addToSolver(androidx.constraintlayout.core.LinearSystem!, boolean);
method public boolean allowedInBarrier();
@@ -2914,16 +2914,16 @@
method public void setDebugName(String!);
method public void setDebugSolverName(androidx.constraintlayout.core.LinearSystem!, String!);
method public void setDimension(int, int);
- method public void setDimensionRatio(String!);
method public void setDimensionRatio(float, int);
+ method public void setDimensionRatio(String!);
method public void setFinalBaseline(int);
method public void setFinalFrame(int, int, int, int, int, int);
method public void setFinalHorizontal(int, int);
method public void setFinalLeft(int);
method public void setFinalTop(int);
method public void setFinalVertical(int, int);
- method public void setFrame(int, int, int, int);
method public void setFrame(int, int, int);
+ method public void setFrame(int, int, int, int);
method public void setGoneMargin(androidx.constraintlayout.core.widgets.ConstraintAnchor.Type!, int);
method public void setHasBaseline(boolean);
method public void setHeight(int);
@@ -3047,8 +3047,8 @@
public class ConstraintWidgetContainer extends androidx.constraintlayout.core.widgets.WidgetContainer {
ctor public ConstraintWidgetContainer();
- ctor public ConstraintWidgetContainer(int, int, int, int);
ctor public ConstraintWidgetContainer(int, int);
+ ctor public ConstraintWidgetContainer(int, int, int, int);
ctor public ConstraintWidgetContainer(String!, int, int);
method public boolean addChildrenToSolver(androidx.constraintlayout.core.LinearSystem!);
method public void addHorizontalWrapMaxVariable(androidx.constraintlayout.core.widgets.ConstraintAnchor!);
@@ -3069,8 +3069,8 @@
method public boolean isHeightMeasuredTooSmall();
method public boolean isRtl();
method public boolean isWidthMeasuredTooSmall();
- method public long measure(int, int, int, int, int, int, int, int, int);
method public static boolean measure(int, androidx.constraintlayout.core.widgets.ConstraintWidget!, androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.Measurer!, androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.Measure!, int);
+ method public long measure(int, int, int, int, int, int, int, int, int);
method public boolean optimizeFor(int);
method public void setMeasurer(androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.Measurer!);
method public void setOptimizationLevel(int);
@@ -3143,8 +3143,8 @@
method public void setFinalValue(int);
method public void setGuideBegin(int);
method public void setGuideEnd(int);
- method public void setGuidePercent(int);
method public void setGuidePercent(float);
+ method public void setGuidePercent(int);
method public void setMinimumPosition(int);
method public void setOrientation(int);
field public static final int HORIZONTAL = 0; // 0x0
@@ -3221,8 +3221,8 @@
method public int getPaddingLeft();
method public int getPaddingRight();
method public int getPaddingTop();
- method public void measure(int, int, int, int);
method protected void measure(androidx.constraintlayout.core.widgets.ConstraintWidget!, androidx.constraintlayout.core.widgets.ConstraintWidget.DimensionBehaviour!, int, androidx.constraintlayout.core.widgets.ConstraintWidget.DimensionBehaviour!, int);
+ method public void measure(int, int, int, int);
method protected boolean measureChildren();
method public boolean needSolverPass();
method protected void needsCallbackFromSolver(boolean);
@@ -3239,8 +3239,8 @@
public class WidgetContainer extends androidx.constraintlayout.core.widgets.ConstraintWidget {
ctor public WidgetContainer();
- ctor public WidgetContainer(int, int, int, int);
ctor public WidgetContainer(int, int);
+ ctor public WidgetContainer(int, int, int, int);
method public void add(androidx.constraintlayout.core.widgets.ConstraintWidget!);
method public void add(androidx.constraintlayout.core.widgets.ConstraintWidget!...);
method public java.util.ArrayList<androidx.constraintlayout.core.widgets.ConstraintWidget!>! getChildren();
diff --git a/constraintlayout/constraintlayout-core/build.gradle b/constraintlayout/constraintlayout-core/build.gradle
index ce816fb..a466adb 100644
--- a/constraintlayout/constraintlayout-core/build.gradle
+++ b/constraintlayout/constraintlayout-core/build.gradle
@@ -28,7 +28,7 @@
}
androidx {
- name = "Android ConstraintLayout Core Library"
+ name = "ConstraintLayout Core"
type = LibraryType.PUBLISHED_LIBRARY
mavenVersion = LibraryVersions.CONSTRAINTLAYOUT_CORE
inceptionYear = "2022"
diff --git a/constraintlayout/constraintlayout-core/src/main/java/androidx/constraintlayout/core/LinearSystem.java b/constraintlayout/constraintlayout-core/src/main/java/androidx/constraintlayout/core/LinearSystem.java
index 309a25b..5706151 100644
--- a/constraintlayout/constraintlayout-core/src/main/java/androidx/constraintlayout/core/LinearSystem.java
+++ b/constraintlayout/constraintlayout-core/src/main/java/androidx/constraintlayout/core/LinearSystem.java
@@ -44,7 +44,7 @@
/*
* Default size for the object pools
*/
- private static int sPoolSize = 1000;
+ private int mPoolSize = 1000;
public boolean hasSimpleDefinition = false;
/*
@@ -79,7 +79,7 @@
final Cache mCache;
- private SolverVariable[] mPoolVariables = new SolverVariable[sPoolSize];
+ private SolverVariable[] mPoolVariables = new SolverVariable[mPoolSize];
private int mPoolVariablesCount = 0;
public static Metrics sMetrics;
@@ -392,9 +392,9 @@
variable.reset();
variable.setType(type, prefix);
}
- if (mPoolVariablesCount >= sPoolSize) {
- sPoolSize *= 2;
- mPoolVariables = Arrays.copyOf(mPoolVariables, sPoolSize);
+ if (mPoolVariablesCount >= mPoolSize) {
+ mPoolSize *= 2;
+ mPoolVariables = Arrays.copyOf(mPoolVariables, mPoolSize);
}
mPoolVariables[mPoolVariablesCount++] = variable;
return variable;
diff --git a/constraintlayout/constraintlayout/api/current.txt b/constraintlayout/constraintlayout/api/current.txt
index 469ddb0..70b97b6 100644
--- a/constraintlayout/constraintlayout/api/current.txt
+++ b/constraintlayout/constraintlayout/api/current.txt
@@ -153,8 +153,8 @@
method public void config(float, float, float, float, float, float);
method public String! debug(String!, float);
method public float getInterpolation(float);
- method public float getVelocity(float);
method public float getVelocity();
+ method public float getVelocity(float);
method public boolean isStopped();
method public void springConfig(float, float, float, float, float, float, float, int);
}
@@ -247,9 +247,9 @@
method public static String! getLoc();
method public static String! getLocation();
method public static String! getLocation2();
- method public static String! getName(android.view.View!);
method public static String! getName(android.content.Context!, int);
method public static String! getName(android.content.Context!, int[]!);
+ method public static String! getName(android.view.View!);
method public static String! getState(androidx.constraintlayout.motion.widget.MotionLayout!, int);
method public static String! getState(androidx.constraintlayout.motion.widget.MotionLayout!, int, int);
method public static void logStack(String!, String!, int);
@@ -498,8 +498,8 @@
method public void onTransitionCompleted(androidx.constraintlayout.motion.widget.MotionLayout!, int);
method public void onTransitionStarted(androidx.constraintlayout.motion.widget.MotionLayout!, int, int);
method public void onTransitionTrigger(androidx.constraintlayout.motion.widget.MotionLayout!, int, boolean, float);
- method public void setProgress(float);
method public void setProgress(android.view.View!, float);
+ method public void setProgress(float);
field protected android.view.View![]! views;
}
@@ -553,8 +553,8 @@
method public void jumpToState(int);
method protected androidx.constraintlayout.motion.widget.MotionLayout.MotionTracker! obtainVelocityTracker();
method public void onNestedPreScroll(android.view.View, int, int, int[], int);
- method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]!);
method public void onNestedScroll(android.view.View, int, int, int, int, int);
+ method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]!);
method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
method public void onStopNestedScroll(android.view.View, int);
@@ -569,12 +569,12 @@
method public void setInterpolatedProgress(float);
method public void setOnHide(float);
method public void setOnShow(float);
- method public void setProgress(float, float);
method public void setProgress(float);
+ method public void setProgress(float, float);
method public void setScene(androidx.constraintlayout.motion.widget.MotionScene!);
- method public void setTransition(int, int);
- method public void setTransition(int);
method protected void setTransition(androidx.constraintlayout.motion.widget.MotionScene.Transition!);
+ method public void setTransition(int);
+ method public void setTransition(int, int);
method public void setTransitionDuration(int);
method public void setTransitionListener(androidx.constraintlayout.motion.widget.MotionLayout.TransitionListener!);
method public void setTransitionState(android.os.Bundle!);
@@ -588,8 +588,8 @@
method public void transitionToState(int, int);
method public void transitionToState(int, int, int);
method public void transitionToState(int, int, int, int);
- method public void updateState(int, androidx.constraintlayout.widget.ConstraintSet!);
method public void updateState();
+ method public void updateState(int, androidx.constraintlayout.widget.ConstraintSet!);
method public void updateStateAnimate(int, androidx.constraintlayout.widget.ConstraintSet!, int);
method public void viewTransition(int, android.view.View!...);
field public static final int DEBUG_SHOW_NONE = 0; // 0x0
@@ -672,8 +672,8 @@
public static class MotionScene.Transition {
ctor public MotionScene.Transition(int, androidx.constraintlayout.motion.widget.MotionScene!, int, int);
method public void addKeyFrame(androidx.constraintlayout.motion.widget.KeyFrames!);
- method public void addOnClick(int, int);
method public void addOnClick(android.content.Context!, org.xmlpull.v1.XmlPullParser!);
+ method public void addOnClick(int, int);
method public String! debugString(android.content.Context!);
method public int getAutoTransition();
method public int getDuration();
@@ -991,9 +991,9 @@
}
public class ConstraintAttribute {
+ ctor public ConstraintAttribute(androidx.constraintlayout.widget.ConstraintAttribute!, Object!);
ctor public ConstraintAttribute(String!, androidx.constraintlayout.widget.ConstraintAttribute.AttributeType!);
ctor public ConstraintAttribute(String!, androidx.constraintlayout.widget.ConstraintAttribute.AttributeType!, Object!, boolean);
- ctor public ConstraintAttribute(androidx.constraintlayout.widget.ConstraintAttribute!, Object!);
method public void applyCustom(android.view.View!);
method public boolean diff(androidx.constraintlayout.widget.ConstraintAttribute!);
method public static java.util.HashMap<java.lang.String!,androidx.constraintlayout.widget.ConstraintAttribute!>! extractAttributes(java.util.HashMap<java.lang.String!,androidx.constraintlayout.widget.ConstraintAttribute!>!, android.view.View!);
@@ -1036,8 +1036,8 @@
ctor public ConstraintHelper(android.content.Context!, android.util.AttributeSet!, int);
method public void addView(android.view.View!);
method public void applyHelperParams();
- method protected void applyLayoutFeatures(androidx.constraintlayout.widget.ConstraintLayout!);
method protected void applyLayoutFeatures();
+ method protected void applyLayoutFeatures(androidx.constraintlayout.widget.ConstraintLayout!);
method protected void applyLayoutFeaturesInConstraintSet(androidx.constraintlayout.widget.ConstraintLayout!);
method public boolean containsId(int);
method public int[]! getReferencedIds();
@@ -1056,8 +1056,8 @@
method public void updatePostLayout(androidx.constraintlayout.widget.ConstraintLayout!);
method public void updatePostMeasure(androidx.constraintlayout.widget.ConstraintLayout!);
method public void updatePreDraw(androidx.constraintlayout.widget.ConstraintLayout!);
- method public void updatePreLayout(androidx.constraintlayout.widget.ConstraintLayout!);
method public void updatePreLayout(androidx.constraintlayout.core.widgets.ConstraintWidgetContainer!, androidx.constraintlayout.core.widgets.Helper!, android.util.SparseArray<androidx.constraintlayout.core.widgets.ConstraintWidget!>!);
+ method public void updatePreLayout(androidx.constraintlayout.widget.ConstraintLayout!);
method public void validateParams();
field protected static final String CHILD_TAG = "CONSTRAINT_LAYOUT_HELPER_CHILD";
field protected int mCount;
@@ -1114,8 +1114,8 @@
}
public static class ConstraintLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
- ctor public ConstraintLayout.LayoutParams(android.view.ViewGroup.LayoutParams!);
ctor public ConstraintLayout.LayoutParams(android.content.Context!, android.util.AttributeSet!);
+ ctor public ConstraintLayout.LayoutParams(android.view.ViewGroup.LayoutParams!);
ctor public ConstraintLayout.LayoutParams(int, int);
method public String! getConstraintTag();
method public androidx.constraintlayout.core.widgets.ConstraintWidget! getConstraintWidget();
@@ -1242,12 +1242,12 @@
method public androidx.constraintlayout.widget.ConstraintProperties! alpha(float);
method public void apply();
method public androidx.constraintlayout.widget.ConstraintProperties! center(int, int, int, int, int, int, float);
- method public androidx.constraintlayout.widget.ConstraintProperties! centerHorizontally(int, int, int, int, int, int, float);
method public androidx.constraintlayout.widget.ConstraintProperties! centerHorizontally(int);
- method public androidx.constraintlayout.widget.ConstraintProperties! centerHorizontallyRtl(int, int, int, int, int, int, float);
+ method public androidx.constraintlayout.widget.ConstraintProperties! centerHorizontally(int, int, int, int, int, int, float);
method public androidx.constraintlayout.widget.ConstraintProperties! centerHorizontallyRtl(int);
- method public androidx.constraintlayout.widget.ConstraintProperties! centerVertically(int, int, int, int, int, int, float);
+ method public androidx.constraintlayout.widget.ConstraintProperties! centerHorizontallyRtl(int, int, int, int, int, int, float);
method public androidx.constraintlayout.widget.ConstraintProperties! centerVertically(int);
+ method public androidx.constraintlayout.widget.ConstraintProperties! centerVertically(int, int, int, int, int, int, float);
method public androidx.constraintlayout.widget.ConstraintProperties! connect(int, int, int, int);
method public androidx.constraintlayout.widget.ConstraintProperties! constrainDefaultHeight(int);
method public androidx.constraintlayout.widget.ConstraintProperties! constrainDefaultWidth(int);
@@ -1315,20 +1315,20 @@
method public void applyToWithoutCustom(androidx.constraintlayout.widget.ConstraintLayout!);
method public static androidx.constraintlayout.widget.ConstraintSet.Constraint! buildDelta(android.content.Context!, org.xmlpull.v1.XmlPullParser!);
method public void center(int, int, int, int, int, int, int, float);
- method public void centerHorizontally(int, int, int, int, int, int, int, float);
method public void centerHorizontally(int, int);
- method public void centerHorizontallyRtl(int, int, int, int, int, int, int, float);
+ method public void centerHorizontally(int, int, int, int, int, int, int, float);
method public void centerHorizontallyRtl(int, int);
- method public void centerVertically(int, int, int, int, int, int, int, float);
+ method public void centerHorizontallyRtl(int, int, int, int, int, int, int, float);
method public void centerVertically(int, int);
+ method public void centerVertically(int, int, int, int, int, int, int, float);
method public void clear(int);
method public void clear(int, int);
method public void clone(android.content.Context!, int);
- method public void clone(androidx.constraintlayout.widget.ConstraintSet!);
method public void clone(androidx.constraintlayout.widget.ConstraintLayout!);
method public void clone(androidx.constraintlayout.widget.Constraints!);
- method public void connect(int, int, int, int, int);
+ method public void clone(androidx.constraintlayout.widget.ConstraintSet!);
method public void connect(int, int, int, int);
+ method public void connect(int, int, int, int, int);
method public void constrainCircle(int, int, int, float);
method public void constrainDefaultHeight(int, int);
method public void constrainDefaultWidth(int, int);
@@ -1368,8 +1368,8 @@
method public void parseFloatAttributes(androidx.constraintlayout.widget.ConstraintSet.Constraint!, String!);
method public void parseIntAttributes(androidx.constraintlayout.widget.ConstraintSet.Constraint!, String!);
method public void parseStringAttributes(androidx.constraintlayout.widget.ConstraintSet.Constraint!, String!);
- method public void readFallback(androidx.constraintlayout.widget.ConstraintSet!);
method public void readFallback(androidx.constraintlayout.widget.ConstraintLayout!);
+ method public void readFallback(androidx.constraintlayout.widget.ConstraintSet!);
method public void removeAttribute(String!);
method public void removeFromHorizontalChain(int);
method public void removeFromVerticalChain(int);
@@ -1602,9 +1602,9 @@
}
public static class Constraints.LayoutParams extends androidx.constraintlayout.widget.ConstraintLayout.LayoutParams {
- ctor public Constraints.LayoutParams(int, int);
- ctor public Constraints.LayoutParams(androidx.constraintlayout.widget.Constraints.LayoutParams!);
ctor public Constraints.LayoutParams(android.content.Context!, android.util.AttributeSet!);
+ ctor public Constraints.LayoutParams(androidx.constraintlayout.widget.Constraints.LayoutParams!);
+ ctor public Constraints.LayoutParams(int, int);
field public float alpha;
field public boolean applyElevation;
field public float elevation;
@@ -1681,8 +1681,8 @@
method public void clearListeners();
method public void fireNewValue(int, int);
method public int getValue(int);
- method public void removeListener(int, androidx.constraintlayout.widget.SharedValues.SharedValuesListener!);
method public void removeListener(androidx.constraintlayout.widget.SharedValues.SharedValuesListener!);
+ method public void removeListener(int, androidx.constraintlayout.widget.SharedValues.SharedValuesListener!);
field public static final int UNSET = -1; // 0xffffffff
}
diff --git a/constraintlayout/constraintlayout/api/public_plus_experimental_current.txt b/constraintlayout/constraintlayout/api/public_plus_experimental_current.txt
deleted file mode 100644
index 469ddb0..0000000
--- a/constraintlayout/constraintlayout/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,1712 +0,0 @@
-// Signature format: 4.0
-package androidx.constraintlayout.helper.widget {
-
- public class Carousel extends androidx.constraintlayout.motion.widget.MotionHelper {
- ctor public Carousel(android.content.Context!);
- ctor public Carousel(android.content.Context!, android.util.AttributeSet!);
- ctor public Carousel(android.content.Context!, android.util.AttributeSet!, int);
- method public int getCount();
- method public int getCurrentIndex();
- method public void jumpToIndex(int);
- method public void refresh();
- method public void setAdapter(androidx.constraintlayout.helper.widget.Carousel.Adapter!);
- method public void transitionToIndex(int, int);
- field public static final int TOUCH_UP_CARRY_ON = 2; // 0x2
- field public static final int TOUCH_UP_IMMEDIATE_STOP = 1; // 0x1
- }
-
- public static interface Carousel.Adapter {
- method public int count();
- method public void onNewItem(int);
- method public void populate(android.view.View!, int);
- }
-
- public class CircularFlow extends androidx.constraintlayout.widget.VirtualLayout {
- ctor public CircularFlow(android.content.Context!);
- ctor public CircularFlow(android.content.Context!, android.util.AttributeSet!);
- ctor public CircularFlow(android.content.Context!, android.util.AttributeSet!, int);
- method public void addViewToCircularFlow(android.view.View!, int, float);
- method public float[]! getAngles();
- method public int[]! getRadius();
- method public boolean isUpdatable(android.view.View!);
- method public void setDefaultAngle(float);
- method public void setDefaultRadius(int);
- method public void updateAngle(android.view.View!, float);
- method public void updateRadius(android.view.View!, int);
- method public void updateReference(android.view.View!, int, float);
- }
-
- public class Flow extends androidx.constraintlayout.widget.VirtualLayout {
- ctor public Flow(android.content.Context!);
- ctor public Flow(android.content.Context!, android.util.AttributeSet!);
- ctor public Flow(android.content.Context!, android.util.AttributeSet!, int);
- method public void setFirstHorizontalBias(float);
- method public void setFirstHorizontalStyle(int);
- method public void setFirstVerticalBias(float);
- method public void setFirstVerticalStyle(int);
- method public void setHorizontalAlign(int);
- method public void setHorizontalBias(float);
- method public void setHorizontalGap(int);
- method public void setHorizontalStyle(int);
- method public void setLastHorizontalBias(float);
- method public void setLastHorizontalStyle(int);
- method public void setLastVerticalBias(float);
- method public void setLastVerticalStyle(int);
- method public void setMaxElementsWrap(int);
- method public void setOrientation(int);
- method public void setPadding(int);
- method public void setPaddingBottom(int);
- method public void setPaddingLeft(int);
- method public void setPaddingRight(int);
- method public void setPaddingTop(int);
- method public void setVerticalAlign(int);
- method public void setVerticalBias(float);
- method public void setVerticalGap(int);
- method public void setVerticalStyle(int);
- method public void setWrapMode(int);
- field public static final int CHAIN_PACKED = 2; // 0x2
- field public static final int CHAIN_SPREAD = 0; // 0x0
- field public static final int CHAIN_SPREAD_INSIDE = 1; // 0x1
- field public static final int HORIZONTAL = 0; // 0x0
- field public static final int HORIZONTAL_ALIGN_CENTER = 2; // 0x2
- field public static final int HORIZONTAL_ALIGN_END = 1; // 0x1
- field public static final int HORIZONTAL_ALIGN_START = 0; // 0x0
- field public static final int VERTICAL = 1; // 0x1
- field public static final int VERTICAL_ALIGN_BASELINE = 3; // 0x3
- field public static final int VERTICAL_ALIGN_BOTTOM = 1; // 0x1
- field public static final int VERTICAL_ALIGN_CENTER = 2; // 0x2
- field public static final int VERTICAL_ALIGN_TOP = 0; // 0x0
- field public static final int WRAP_ALIGNED = 2; // 0x2
- field public static final int WRAP_CHAIN = 1; // 0x1
- field public static final int WRAP_NONE = 0; // 0x0
- }
-
- public class Grid extends androidx.constraintlayout.widget.VirtualLayout {
- ctor public Grid(android.content.Context!);
- ctor public Grid(android.content.Context!, android.util.AttributeSet!);
- ctor public Grid(android.content.Context!, android.util.AttributeSet!, int);
- method public String! getColumnWeights();
- method public int getColumns();
- method public float getHorizontalGaps();
- method public int getOrientation();
- method public String! getRowWeights();
- method public int getRows();
- method public String! getSkips();
- method public String! getSpans();
- method public float getVerticalGaps();
- method public void setColumnWeights(String!);
- method public void setColumns(int);
- method public void setHorizontalGaps(float);
- method public void setOrientation(int);
- method public void setRowWeights(String!);
- method public void setRows(int);
- method public void setSkips(String!);
- method public void setSpans(CharSequence!);
- method public void setVerticalGaps(float);
- field public static final int HORIZONTAL = 0; // 0x0
- field public static final int VERTICAL = 1; // 0x1
- }
-
- public class Layer extends androidx.constraintlayout.widget.ConstraintHelper {
- ctor public Layer(android.content.Context!);
- ctor public Layer(android.content.Context!, android.util.AttributeSet!);
- ctor public Layer(android.content.Context!, android.util.AttributeSet!, int);
- method protected void calcCenters();
- field protected float mComputedCenterX;
- field protected float mComputedCenterY;
- field protected float mComputedMaxX;
- field protected float mComputedMaxY;
- field protected float mComputedMinX;
- field protected float mComputedMinY;
- }
-
- public class MotionEffect extends androidx.constraintlayout.motion.widget.MotionHelper {
- ctor public MotionEffect(android.content.Context!);
- ctor public MotionEffect(android.content.Context!, android.util.AttributeSet!);
- ctor public MotionEffect(android.content.Context!, android.util.AttributeSet!, int);
- field public static final int AUTO = -1; // 0xffffffff
- field public static final int EAST = 2; // 0x2
- field public static final int NORTH = 0; // 0x0
- field public static final int SOUTH = 1; // 0x1
- field public static final String TAG = "FadeMove";
- field public static final int WEST = 3; // 0x3
- }
-
- public class MotionPlaceholder extends androidx.constraintlayout.widget.VirtualLayout {
- ctor public MotionPlaceholder(android.content.Context!);
- ctor public MotionPlaceholder(android.content.Context!, android.util.AttributeSet!);
- ctor public MotionPlaceholder(android.content.Context!, android.util.AttributeSet!, int);
- ctor public MotionPlaceholder(android.content.Context!, android.util.AttributeSet!, int, int);
- }
-
-}
-
-package androidx.constraintlayout.motion.utils {
-
- public class CustomSupport {
- ctor public CustomSupport();
- method public static void setInterpolatedValue(androidx.constraintlayout.widget.ConstraintAttribute!, android.view.View!, float[]!);
- }
-
- public class StopLogic extends androidx.constraintlayout.motion.widget.MotionInterpolator {
- ctor public StopLogic();
- method public void config(float, float, float, float, float, float);
- method public String! debug(String!, float);
- method public float getInterpolation(float);
- method public float getVelocity(float);
- method public float getVelocity();
- method public boolean isStopped();
- method public void springConfig(float, float, float, float, float, float, float, int);
- }
-
- public abstract class ViewOscillator extends androidx.constraintlayout.core.motion.utils.KeyCycleOscillator {
- ctor public ViewOscillator();
- method public static androidx.constraintlayout.motion.utils.ViewOscillator! makeSpline(String!);
- method public abstract void setProperty(android.view.View!, float);
- }
-
- public static class ViewOscillator.PathRotateSet extends androidx.constraintlayout.motion.utils.ViewOscillator {
- ctor public ViewOscillator.PathRotateSet();
- method public void setPathRotate(android.view.View!, float, double, double);
- method public void setProperty(android.view.View!, float);
- }
-
- public abstract class ViewSpline extends androidx.constraintlayout.core.motion.utils.SplineSet {
- ctor public ViewSpline();
- method public static androidx.constraintlayout.motion.utils.ViewSpline! makeCustomSpline(String!, android.util.SparseArray<androidx.constraintlayout.widget.ConstraintAttribute!>!);
- method public static androidx.constraintlayout.motion.utils.ViewSpline! makeSpline(String!);
- method public abstract void setProperty(android.view.View!, float);
- }
-
- public static class ViewSpline.CustomSet extends androidx.constraintlayout.motion.utils.ViewSpline {
- ctor public ViewSpline.CustomSet(String!, android.util.SparseArray<androidx.constraintlayout.widget.ConstraintAttribute!>!);
- method public void setPoint(int, androidx.constraintlayout.widget.ConstraintAttribute!);
- method public void setProperty(android.view.View!, float);
- }
-
- public static class ViewSpline.PathRotate extends androidx.constraintlayout.motion.utils.ViewSpline {
- ctor public ViewSpline.PathRotate();
- method public void setPathRotate(android.view.View!, float, double, double);
- method public void setProperty(android.view.View!, float);
- }
-
- public class ViewState {
- ctor public ViewState();
- method public void getState(android.view.View!);
- method public int height();
- method public int width();
- field public int bottom;
- field public int left;
- field public int right;
- field public float rotation;
- field public int top;
- }
-
- public abstract class ViewTimeCycle extends androidx.constraintlayout.core.motion.utils.TimeCycleSplineSet {
- ctor public ViewTimeCycle();
- method public float get(float, long, android.view.View!, androidx.constraintlayout.core.motion.utils.KeyCache!);
- method public static androidx.constraintlayout.motion.utils.ViewTimeCycle! makeCustomSpline(String!, android.util.SparseArray<androidx.constraintlayout.widget.ConstraintAttribute!>!);
- method public static androidx.constraintlayout.motion.utils.ViewTimeCycle! makeSpline(String!, long);
- method public abstract boolean setProperty(android.view.View!, float, long, androidx.constraintlayout.core.motion.utils.KeyCache!);
- }
-
- public static class ViewTimeCycle.CustomSet extends androidx.constraintlayout.motion.utils.ViewTimeCycle {
- ctor public ViewTimeCycle.CustomSet(String!, android.util.SparseArray<androidx.constraintlayout.widget.ConstraintAttribute!>!);
- method public void setPoint(int, androidx.constraintlayout.widget.ConstraintAttribute!, float, int, float);
- method public boolean setProperty(android.view.View!, float, long, androidx.constraintlayout.core.motion.utils.KeyCache!);
- }
-
- public static class ViewTimeCycle.PathRotate extends androidx.constraintlayout.motion.utils.ViewTimeCycle {
- ctor public ViewTimeCycle.PathRotate();
- method public boolean setPathRotate(android.view.View!, androidx.constraintlayout.core.motion.utils.KeyCache!, float, long, double, double);
- method public boolean setProperty(android.view.View!, float, long, androidx.constraintlayout.core.motion.utils.KeyCache!);
- }
-
-}
-
-package androidx.constraintlayout.motion.widget {
-
- public interface Animatable {
- method public float getProgress();
- method public void setProgress(float);
- }
-
- public interface CustomFloatAttributes {
- method public float get(String!);
- method public String![]! getListOfAttributes();
- method public void set(String!, float);
- }
-
- public class Debug {
- ctor public Debug();
- method public static void dumpLayoutParams(android.view.ViewGroup!, String!);
- method public static void dumpLayoutParams(android.view.ViewGroup.LayoutParams!, String!);
- method public static void dumpPoc(Object!);
- method public static String! getActionType(android.view.MotionEvent!);
- method public static String! getCallFrom(int);
- method public static String! getLoc();
- method public static String! getLocation();
- method public static String! getLocation2();
- method public static String! getName(android.view.View!);
- method public static String! getName(android.content.Context!, int);
- method public static String! getName(android.content.Context!, int[]!);
- method public static String! getState(androidx.constraintlayout.motion.widget.MotionLayout!, int);
- method public static String! getState(androidx.constraintlayout.motion.widget.MotionLayout!, int, int);
- method public static void logStack(String!, String!, int);
- method public static void printStack(String!, int);
- }
-
- public class DesignTool {
- ctor public DesignTool(androidx.constraintlayout.motion.widget.MotionLayout!);
- method public int designAccess(int, String!, Object!, float[]!, int, float[]!, int);
- method public void disableAutoTransition(boolean);
- method public void dumpConstraintSet(String!);
- method public int getAnimationKeyFrames(Object!, float[]!);
- method public int getAnimationPath(Object!, float[]!, int);
- method public void getAnimationRectangles(Object!, float[]!);
- method public String! getEndState();
- method public int getKeyFrameInfo(Object!, int, int[]!);
- method public float getKeyFramePosition(Object!, int, float, float);
- method public int getKeyFramePositions(Object!, int[]!, float[]!);
- method public Object! getKeyframe(int, int, int);
- method public Object! getKeyframe(Object!, int, int);
- method public Object! getKeyframeAtLocation(Object!, float, float);
- method public Boolean! getPositionKeyframe(Object!, Object!, float, float, String![]!, float[]!);
- method public float getProgress();
- method public String! getStartState();
- method public String! getState();
- method public long getTransitionTimeMs();
- method public boolean isInTransition();
- method public void setAttributes(int, String!, Object!, Object!);
- method public void setKeyFrame(Object!, int, String!, Object!);
- method public boolean setKeyFramePosition(Object!, int, int, float, float);
- method public void setKeyframe(Object!, String!, Object!);
- method public void setState(String!);
- method public void setToolPosition(float);
- method public void setTransition(String!, String!);
- method public void setViewDebug(Object!, int);
- }
-
- public interface FloatLayout {
- method public void layout(float, float, float, float);
- }
-
- public abstract class Key {
- ctor public Key();
- method public abstract void addValues(java.util.HashMap<java.lang.String!,androidx.constraintlayout.motion.utils.ViewSpline!>!);
- method public abstract androidx.constraintlayout.motion.widget.Key! clone();
- method public androidx.constraintlayout.motion.widget.Key! copy(androidx.constraintlayout.motion.widget.Key!);
- method public int getFramePosition();
- method public void setFramePosition(int);
- method public void setInterpolation(java.util.HashMap<java.lang.String!,java.lang.Integer!>!);
- method public abstract void setValue(String!, Object!);
- method public androidx.constraintlayout.motion.widget.Key! setViewId(int);
- field public static final String ALPHA = "alpha";
- field public static final String CURVEFIT = "curveFit";
- field public static final String CUSTOM = "CUSTOM";
- field public static final String ELEVATION = "elevation";
- field public static final String MOTIONPROGRESS = "motionProgress";
- field public static final String PIVOT_X = "transformPivotX";
- field public static final String PIVOT_Y = "transformPivotY";
- field public static final String PROGRESS = "progress";
- field public static final String ROTATION = "rotation";
- field public static final String ROTATION_X = "rotationX";
- field public static final String ROTATION_Y = "rotationY";
- field public static final String SCALE_X = "scaleX";
- field public static final String SCALE_Y = "scaleY";
- field public static final String TRANSITIONEASING = "transitionEasing";
- field public static final String TRANSITION_PATH_ROTATE = "transitionPathRotate";
- field public static final String TRANSLATION_X = "translationX";
- field public static final String TRANSLATION_Y = "translationY";
- field public static final String TRANSLATION_Z = "translationZ";
- field public static int UNSET;
- field public static final String VISIBILITY = "visibility";
- field public static final String WAVE_OFFSET = "waveOffset";
- field public static final String WAVE_PERIOD = "wavePeriod";
- field public static final String WAVE_PHASE = "wavePhase";
- field public static final String WAVE_VARIES_BY = "waveVariesBy";
- field protected int mType;
- }
-
- public class KeyAttributes extends androidx.constraintlayout.motion.widget.Key {
- ctor public KeyAttributes();
- method public void addValues(java.util.HashMap<java.lang.String!,androidx.constraintlayout.motion.utils.ViewSpline!>!);
- method public androidx.constraintlayout.motion.widget.Key! clone();
- method public void getAttributeNames(java.util.HashSet<java.lang.String!>!);
- method public void load(android.content.Context!, android.util.AttributeSet!);
- method public void setValue(String!, Object!);
- field public static final int KEY_TYPE = 1; // 0x1
- }
-
- public class KeyCycle extends androidx.constraintlayout.motion.widget.Key {
- ctor public KeyCycle();
- method public void addCycleValues(java.util.HashMap<java.lang.String!,androidx.constraintlayout.motion.utils.ViewOscillator!>!);
- method public void addValues(java.util.HashMap<java.lang.String!,androidx.constraintlayout.motion.utils.ViewSpline!>!);
- method public androidx.constraintlayout.motion.widget.Key! clone();
- method public void getAttributeNames(java.util.HashSet<java.lang.String!>!);
- method public float getValue(String!);
- method public void load(android.content.Context!, android.util.AttributeSet!);
- method public void setValue(String!, Object!);
- field public static final int KEY_TYPE = 4; // 0x4
- field public static final int SHAPE_BOUNCE = 6; // 0x6
- field public static final int SHAPE_COS_WAVE = 5; // 0x5
- field public static final int SHAPE_REVERSE_SAW_WAVE = 4; // 0x4
- field public static final int SHAPE_SAW_WAVE = 3; // 0x3
- field public static final int SHAPE_SIN_WAVE = 0; // 0x0
- field public static final int SHAPE_SQUARE_WAVE = 1; // 0x1
- field public static final int SHAPE_TRIANGLE_WAVE = 2; // 0x2
- field public static final String WAVE_OFFSET = "waveOffset";
- field public static final String WAVE_PERIOD = "wavePeriod";
- field public static final String WAVE_PHASE = "wavePhase";
- field public static final String WAVE_SHAPE = "waveShape";
- }
-
- public class KeyFrames {
- ctor public KeyFrames();
- ctor public KeyFrames(android.content.Context!, org.xmlpull.v1.XmlPullParser!);
- method public void addAllFrames(androidx.constraintlayout.motion.widget.MotionController!);
- method public void addFrames(androidx.constraintlayout.motion.widget.MotionController!);
- method public void addKey(androidx.constraintlayout.motion.widget.Key!);
- method public java.util.ArrayList<androidx.constraintlayout.motion.widget.Key!>! getKeyFramesForView(int);
- method public java.util.Set<java.lang.Integer!>! getKeys();
- field public static final int UNSET = -1; // 0xffffffff
- }
-
- public class KeyPosition extends androidx.constraintlayout.motion.widget.Key {
- ctor public KeyPosition();
- method public void addValues(java.util.HashMap<java.lang.String!,androidx.constraintlayout.motion.utils.ViewSpline!>!);
- method public androidx.constraintlayout.motion.widget.Key! clone();
- method public boolean intersects(int, int, android.graphics.RectF!, android.graphics.RectF!, float, float);
- method public void load(android.content.Context!, android.util.AttributeSet!);
- method public void positionAttributes(android.view.View!, android.graphics.RectF!, android.graphics.RectF!, float, float, String![]!, float[]!);
- method public void setType(int);
- method public void setValue(String!, Object!);
- field public static final String DRAWPATH = "drawPath";
- field public static final String PERCENT_HEIGHT = "percentHeight";
- field public static final String PERCENT_WIDTH = "percentWidth";
- field public static final String PERCENT_X = "percentX";
- field public static final String PERCENT_Y = "percentY";
- field public static final String SIZE_PERCENT = "sizePercent";
- field public static final String TRANSITION_EASING = "transitionEasing";
- field public static final int TYPE_AXIS = 3; // 0x3
- field public static final int TYPE_CARTESIAN = 0; // 0x0
- field public static final int TYPE_PATH = 1; // 0x1
- field public static final int TYPE_SCREEN = 2; // 0x2
- }
-
- public class KeyTimeCycle extends androidx.constraintlayout.motion.widget.Key {
- ctor public KeyTimeCycle();
- method public void addTimeValues(java.util.HashMap<java.lang.String!,androidx.constraintlayout.motion.utils.ViewTimeCycle!>!);
- method public void addValues(java.util.HashMap<java.lang.String!,androidx.constraintlayout.motion.utils.ViewSpline!>!);
- method public androidx.constraintlayout.motion.widget.Key! clone();
- method public void getAttributeNames(java.util.HashSet<java.lang.String!>!);
- method public void load(android.content.Context!, android.util.AttributeSet!);
- method public void setValue(String!, Object!);
- field public static final int KEY_TYPE = 3; // 0x3
- field public static final int SHAPE_BOUNCE = 6; // 0x6
- field public static final int SHAPE_COS_WAVE = 5; // 0x5
- field public static final int SHAPE_REVERSE_SAW_WAVE = 4; // 0x4
- field public static final int SHAPE_SAW_WAVE = 3; // 0x3
- field public static final int SHAPE_SIN_WAVE = 0; // 0x0
- field public static final int SHAPE_SQUARE_WAVE = 1; // 0x1
- field public static final int SHAPE_TRIANGLE_WAVE = 2; // 0x2
- field public static final String WAVE_OFFSET = "waveOffset";
- field public static final String WAVE_PERIOD = "wavePeriod";
- field public static final String WAVE_SHAPE = "waveShape";
- }
-
- public class KeyTrigger extends androidx.constraintlayout.motion.widget.Key {
- ctor public KeyTrigger();
- method public void addValues(java.util.HashMap<java.lang.String!,androidx.constraintlayout.motion.utils.ViewSpline!>!);
- method public androidx.constraintlayout.motion.widget.Key! clone();
- method public void conditionallyFire(float, android.view.View!);
- method public void getAttributeNames(java.util.HashSet<java.lang.String!>!);
- method public void load(android.content.Context!, android.util.AttributeSet!);
- method public void setValue(String!, Object!);
- field public static final String CROSS = "CROSS";
- field public static final int KEY_TYPE = 5; // 0x5
- field public static final String NEGATIVE_CROSS = "negativeCross";
- field public static final String POSITIVE_CROSS = "positiveCross";
- field public static final String POST_LAYOUT = "postLayout";
- field public static final String TRIGGER_COLLISION_ID = "triggerCollisionId";
- field public static final String TRIGGER_COLLISION_VIEW = "triggerCollisionView";
- field public static final String TRIGGER_ID = "triggerID";
- field public static final String TRIGGER_RECEIVER = "triggerReceiver";
- field public static final String TRIGGER_SLACK = "triggerSlack";
- field public static final String VIEW_TRANSITION_ON_CROSS = "viewTransitionOnCross";
- field public static final String VIEW_TRANSITION_ON_NEGATIVE_CROSS = "viewTransitionOnNegativeCross";
- field public static final String VIEW_TRANSITION_ON_POSITIVE_CROSS = "viewTransitionOnPositiveCross";
- }
-
- public class MotionController {
- method public void addKey(androidx.constraintlayout.motion.widget.Key!);
- method public int getAnimateRelativeTo();
- method public void getCenter(double, float[]!, float[]!);
- method public float getCenterX();
- method public float getCenterY();
- method public int getDrawPath();
- method public float getFinalHeight();
- method public float getFinalWidth();
- method public float getFinalX();
- method public float getFinalY();
- method public int getKeyFrameInfo(int, int[]!);
- method public int getKeyFramePositions(int[]!, float[]!);
- method public float getStartHeight();
- method public float getStartWidth();
- method public float getStartX();
- method public float getStartY();
- method public int getTransformPivotTarget();
- method public android.view.View! getView();
- method public void remeasure();
- method public void setDrawPath(int);
- method public void setPathMotionArc(int);
- method public void setStartState(androidx.constraintlayout.motion.utils.ViewState!, android.view.View!, int, int, int);
- method public void setTransformPivotTarget(int);
- method public void setView(android.view.View!);
- method public void setup(int, int, float, long);
- method public void setupRelative(androidx.constraintlayout.motion.widget.MotionController!);
- field public static final int DRAW_PATH_AS_CONFIGURED = 4; // 0x4
- field public static final int DRAW_PATH_BASIC = 1; // 0x1
- field public static final int DRAW_PATH_CARTESIAN = 3; // 0x3
- field public static final int DRAW_PATH_NONE = 0; // 0x0
- field public static final int DRAW_PATH_RECTANGLE = 5; // 0x5
- field public static final int DRAW_PATH_RELATIVE = 2; // 0x2
- field public static final int DRAW_PATH_SCREEN = 6; // 0x6
- field public static final int HORIZONTAL_PATH_X = 2; // 0x2
- field public static final int HORIZONTAL_PATH_Y = 3; // 0x3
- field public static final int PATH_PERCENT = 0; // 0x0
- field public static final int PATH_PERPENDICULAR = 1; // 0x1
- field public static final int ROTATION_LEFT = 2; // 0x2
- field public static final int ROTATION_RIGHT = 1; // 0x1
- field public static final int VERTICAL_PATH_X = 4; // 0x4
- field public static final int VERTICAL_PATH_Y = 5; // 0x5
- }
-
- public class MotionHelper extends androidx.constraintlayout.widget.ConstraintHelper implements androidx.constraintlayout.motion.widget.MotionHelperInterface {
- ctor public MotionHelper(android.content.Context!);
- ctor public MotionHelper(android.content.Context!, android.util.AttributeSet!);
- ctor public MotionHelper(android.content.Context!, android.util.AttributeSet!, int);
- method public float getProgress();
- method public boolean isDecorator();
- method public boolean isUseOnHide();
- method public boolean isUsedOnShow();
- method public void onFinishedMotionScene(androidx.constraintlayout.motion.widget.MotionLayout!);
- method public void onPostDraw(android.graphics.Canvas!);
- method public void onPreDraw(android.graphics.Canvas!);
- method public void onPreSetup(androidx.constraintlayout.motion.widget.MotionLayout!, java.util.HashMap<android.view.View!,androidx.constraintlayout.motion.widget.MotionController!>!);
- method public void onTransitionChange(androidx.constraintlayout.motion.widget.MotionLayout!, int, int, float);
- method public void onTransitionCompleted(androidx.constraintlayout.motion.widget.MotionLayout!, int);
- method public void onTransitionStarted(androidx.constraintlayout.motion.widget.MotionLayout!, int, int);
- method public void onTransitionTrigger(androidx.constraintlayout.motion.widget.MotionLayout!, int, boolean, float);
- method public void setProgress(float);
- method public void setProgress(android.view.View!, float);
- field protected android.view.View![]! views;
- }
-
- public interface MotionHelperInterface extends androidx.constraintlayout.motion.widget.Animatable androidx.constraintlayout.motion.widget.MotionLayout.TransitionListener {
- method public boolean isDecorator();
- method public boolean isUseOnHide();
- method public boolean isUsedOnShow();
- method public void onFinishedMotionScene(androidx.constraintlayout.motion.widget.MotionLayout!);
- method public void onPostDraw(android.graphics.Canvas!);
- method public void onPreDraw(android.graphics.Canvas!);
- method public void onPreSetup(androidx.constraintlayout.motion.widget.MotionLayout!, java.util.HashMap<android.view.View!,androidx.constraintlayout.motion.widget.MotionController!>!);
- }
-
- public abstract class MotionInterpolator implements android.view.animation.Interpolator {
- ctor public MotionInterpolator();
- method public abstract float getVelocity();
- }
-
- public class MotionLayout extends androidx.constraintlayout.widget.ConstraintLayout implements androidx.core.view.NestedScrollingParent3 {
- ctor public MotionLayout(android.content.Context);
- ctor public MotionLayout(android.content.Context, android.util.AttributeSet?);
- ctor public MotionLayout(android.content.Context, android.util.AttributeSet?, int);
- method public void addTransitionListener(androidx.constraintlayout.motion.widget.MotionLayout.TransitionListener!);
- method public boolean applyViewTransition(int, androidx.constraintlayout.motion.widget.MotionController!);
- method public androidx.constraintlayout.widget.ConstraintSet! cloneConstraintSet(int);
- method public void enableTransition(int, boolean);
- method public void enableViewTransition(int, boolean);
- method protected void fireTransitionCompleted();
- method public void fireTrigger(int, boolean, float);
- method public androidx.constraintlayout.widget.ConstraintSet! getConstraintSet(int);
- method @IdRes public int[]! getConstraintSetIds();
- method public int getCurrentState();
- method public java.util.ArrayList<androidx.constraintlayout.motion.widget.MotionScene.Transition!>! getDefinedTransitions();
- method public androidx.constraintlayout.motion.widget.DesignTool! getDesignTool();
- method public int getEndState();
- method public int[]! getMatchingConstraintSetIds(java.lang.String!...);
- method protected long getNanoTime();
- method public float getProgress();
- method public androidx.constraintlayout.motion.widget.MotionScene! getScene();
- method public int getStartState();
- method public float getTargetPosition();
- method public androidx.constraintlayout.motion.widget.MotionScene.Transition! getTransition(int);
- method public android.os.Bundle! getTransitionState();
- method public long getTransitionTimeMs();
- method public float getVelocity();
- method public void getViewVelocity(android.view.View!, float, float, float[]!, int);
- method public boolean isDelayedApplicationOfInitialState();
- method public boolean isInRotation();
- method public boolean isInteractionEnabled();
- method public boolean isViewTransitionEnabled(int);
- method public void jumpToState(int);
- method protected androidx.constraintlayout.motion.widget.MotionLayout.MotionTracker! obtainVelocityTracker();
- method public void onNestedPreScroll(android.view.View, int, int, int[], int);
- method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]!);
- method public void onNestedScroll(android.view.View, int, int, int, int, int);
- method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
- method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
- method public void onStopNestedScroll(android.view.View, int);
- method @Deprecated public void rebuildMotion();
- method public void rebuildScene();
- method public boolean removeTransitionListener(androidx.constraintlayout.motion.widget.MotionLayout.TransitionListener!);
- method @RequiresApi(api=android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) public void rotateTo(int, int);
- method public void scheduleTransitionTo(int);
- method public void setDebugMode(int);
- method public void setDelayedApplicationOfInitialState(boolean);
- method public void setInteractionEnabled(boolean);
- method public void setInterpolatedProgress(float);
- method public void setOnHide(float);
- method public void setOnShow(float);
- method public void setProgress(float, float);
- method public void setProgress(float);
- method public void setScene(androidx.constraintlayout.motion.widget.MotionScene!);
- method public void setTransition(int, int);
- method public void setTransition(int);
- method protected void setTransition(androidx.constraintlayout.motion.widget.MotionScene.Transition!);
- method public void setTransitionDuration(int);
- method public void setTransitionListener(androidx.constraintlayout.motion.widget.MotionLayout.TransitionListener!);
- method public void setTransitionState(android.os.Bundle!);
- method public void touchAnimateTo(int, float, float);
- method public void touchSpringTo(float, float);
- method public void transitionToEnd();
- method public void transitionToEnd(Runnable!);
- method public void transitionToStart();
- method public void transitionToStart(Runnable!);
- method public void transitionToState(int);
- method public void transitionToState(int, int);
- method public void transitionToState(int, int, int);
- method public void transitionToState(int, int, int, int);
- method public void updateState(int, androidx.constraintlayout.widget.ConstraintSet!);
- method public void updateState();
- method public void updateStateAnimate(int, androidx.constraintlayout.widget.ConstraintSet!, int);
- method public void viewTransition(int, android.view.View!...);
- field public static final int DEBUG_SHOW_NONE = 0; // 0x0
- field public static final int DEBUG_SHOW_PATH = 2; // 0x2
- field public static final int DEBUG_SHOW_PROGRESS = 1; // 0x1
- field public static boolean IS_IN_EDIT_MODE;
- field public static final int TOUCH_UP_COMPLETE = 0; // 0x0
- field public static final int TOUCH_UP_COMPLETE_TO_END = 2; // 0x2
- field public static final int TOUCH_UP_COMPLETE_TO_START = 1; // 0x1
- field public static final int TOUCH_UP_DECELERATE = 4; // 0x4
- field public static final int TOUCH_UP_DECELERATE_AND_COMPLETE = 5; // 0x5
- field public static final int TOUCH_UP_NEVER_TO_END = 7; // 0x7
- field public static final int TOUCH_UP_NEVER_TO_START = 6; // 0x6
- field public static final int TOUCH_UP_STOP = 3; // 0x3
- field public static final int VELOCITY_LAYOUT = 1; // 0x1
- field public static final int VELOCITY_POST_LAYOUT = 0; // 0x0
- field public static final int VELOCITY_STATIC_LAYOUT = 3; // 0x3
- field public static final int VELOCITY_STATIC_POST_LAYOUT = 2; // 0x2
- field protected boolean mMeasureDuringTransition;
- }
-
- protected static interface MotionLayout.MotionTracker {
- method public void addMovement(android.view.MotionEvent!);
- method public void clear();
- method public void computeCurrentVelocity(int);
- method public void computeCurrentVelocity(int, float);
- method public float getXVelocity();
- method public float getXVelocity(int);
- method public float getYVelocity();
- method public float getYVelocity(int);
- method public void recycle();
- }
-
- public static interface MotionLayout.TransitionListener {
- method public void onTransitionChange(androidx.constraintlayout.motion.widget.MotionLayout!, int, int, float);
- method public void onTransitionCompleted(androidx.constraintlayout.motion.widget.MotionLayout!, int);
- method public void onTransitionStarted(androidx.constraintlayout.motion.widget.MotionLayout!, int, int);
- method public void onTransitionTrigger(androidx.constraintlayout.motion.widget.MotionLayout!, int, boolean, float);
- }
-
- public class MotionScene {
- ctor public MotionScene(androidx.constraintlayout.motion.widget.MotionLayout!);
- method public void addOnClickListeners(androidx.constraintlayout.motion.widget.MotionLayout!, int);
- method public void addTransition(androidx.constraintlayout.motion.widget.MotionScene.Transition!);
- method public boolean applyViewTransition(int, androidx.constraintlayout.motion.widget.MotionController!);
- method public androidx.constraintlayout.motion.widget.MotionScene.Transition! bestTransitionFor(int, float, float, android.view.MotionEvent!);
- method public void disableAutoTransition(boolean);
- method public void enableViewTransition(int, boolean);
- method public int gatPathMotionArc();
- method public androidx.constraintlayout.widget.ConstraintSet! getConstraintSet(android.content.Context!, String!);
- method public int[]! getConstraintSetIds();
- method public java.util.ArrayList<androidx.constraintlayout.motion.widget.MotionScene.Transition!>! getDefinedTransitions();
- method public int getDuration();
- method public android.view.animation.Interpolator! getInterpolator();
- method public void getKeyFrames(androidx.constraintlayout.motion.widget.MotionController!);
- method public int[]! getMatchingStateLabels(java.lang.String!...);
- method public float getPathPercent(android.view.View!, int);
- method public float getStaggered();
- method public androidx.constraintlayout.motion.widget.MotionScene.Transition! getTransitionById(int);
- method public java.util.List<androidx.constraintlayout.motion.widget.MotionScene.Transition!>! getTransitionsWithState(int);
- method public boolean isViewTransitionEnabled(int);
- method public int lookUpConstraintId(String!);
- method public String! lookUpConstraintName(int);
- method protected void onLayout(boolean, int, int, int, int);
- method public void removeTransition(androidx.constraintlayout.motion.widget.MotionScene.Transition!);
- method public void setConstraintSet(int, androidx.constraintlayout.widget.ConstraintSet!);
- method public void setDuration(int);
- method public void setKeyframe(android.view.View!, int, String!, Object!);
- method public void setRtl(boolean);
- method public void setTransition(androidx.constraintlayout.motion.widget.MotionScene.Transition!);
- method public static String! stripID(String!);
- method public boolean validateLayout(androidx.constraintlayout.motion.widget.MotionLayout!);
- method public void viewTransition(int, android.view.View!...);
- field public static final int LAYOUT_CALL_MEASURE = 2; // 0x2
- field public static final int LAYOUT_HONOR_REQUEST = 1; // 0x1
- field public static final int LAYOUT_IGNORE_REQUEST = 0; // 0x0
- field public static final int UNSET = -1; // 0xffffffff
- }
-
- public static class MotionScene.Transition {
- ctor public MotionScene.Transition(int, androidx.constraintlayout.motion.widget.MotionScene!, int, int);
- method public void addKeyFrame(androidx.constraintlayout.motion.widget.KeyFrames!);
- method public void addOnClick(int, int);
- method public void addOnClick(android.content.Context!, org.xmlpull.v1.XmlPullParser!);
- method public String! debugString(android.content.Context!);
- method public int getAutoTransition();
- method public int getDuration();
- method public int getEndConstraintSetId();
- method public int getId();
- method public java.util.List<androidx.constraintlayout.motion.widget.KeyFrames!>! getKeyFrameList();
- method public int getLayoutDuringTransition();
- method public java.util.List<androidx.constraintlayout.motion.widget.MotionScene.Transition.TransitionOnClick!>! getOnClickList();
- method public int getPathMotionArc();
- method public float getStagger();
- method public int getStartConstraintSetId();
- method public androidx.constraintlayout.motion.widget.TouchResponse! getTouchResponse();
- method public boolean isEnabled();
- method public boolean isTransitionFlag(int);
- method public void removeOnClick(int);
- method public void setAutoTransition(int);
- method public void setDuration(int);
- method public void setEnabled(boolean);
- method public void setInterpolatorInfo(int, String!, int);
- method public void setLayoutDuringTransition(int);
- method public void setOnSwipe(androidx.constraintlayout.motion.widget.OnSwipe!);
- method public void setOnTouchUp(int);
- method public void setPathMotionArc(int);
- method public void setStagger(float);
- method public void setTransitionFlag(int);
- field public static final int AUTO_ANIMATE_TO_END = 4; // 0x4
- field public static final int AUTO_ANIMATE_TO_START = 3; // 0x3
- field public static final int AUTO_JUMP_TO_END = 2; // 0x2
- field public static final int AUTO_JUMP_TO_START = 1; // 0x1
- field public static final int AUTO_NONE = 0; // 0x0
- field public static final int INTERPOLATE_ANTICIPATE = 6; // 0x6
- field public static final int INTERPOLATE_BOUNCE = 4; // 0x4
- field public static final int INTERPOLATE_EASE_IN = 1; // 0x1
- field public static final int INTERPOLATE_EASE_IN_OUT = 0; // 0x0
- field public static final int INTERPOLATE_EASE_OUT = 2; // 0x2
- field public static final int INTERPOLATE_LINEAR = 3; // 0x3
- field public static final int INTERPOLATE_OVERSHOOT = 5; // 0x5
- field public static final int INTERPOLATE_REFERENCE_ID = -2; // 0xfffffffe
- field public static final int INTERPOLATE_SPLINE_STRING = -1; // 0xffffffff
- }
-
- public static class MotionScene.Transition.TransitionOnClick implements android.view.View.OnClickListener {
- ctor public MotionScene.Transition.TransitionOnClick(android.content.Context!, androidx.constraintlayout.motion.widget.MotionScene.Transition!, org.xmlpull.v1.XmlPullParser!);
- ctor public MotionScene.Transition.TransitionOnClick(androidx.constraintlayout.motion.widget.MotionScene.Transition!, int, int);
- method public void addOnClickListeners(androidx.constraintlayout.motion.widget.MotionLayout!, int, androidx.constraintlayout.motion.widget.MotionScene.Transition!);
- method public void onClick(android.view.View!);
- method public void removeOnClickListeners(androidx.constraintlayout.motion.widget.MotionLayout!);
- field public static final int ANIM_TOGGLE = 17; // 0x11
- field public static final int ANIM_TO_END = 1; // 0x1
- field public static final int ANIM_TO_START = 16; // 0x10
- field public static final int JUMP_TO_END = 256; // 0x100
- field public static final int JUMP_TO_START = 4096; // 0x1000
- }
-
- public class OnSwipe {
- ctor public OnSwipe();
- method public int getAutoCompleteMode();
- method public int getDragDirection();
- method public float getDragScale();
- method public float getDragThreshold();
- method public int getLimitBoundsTo();
- method public float getMaxAcceleration();
- method public float getMaxVelocity();
- method public boolean getMoveWhenScrollAtTop();
- method public int getNestedScrollFlags();
- method public int getOnTouchUp();
- method public int getRotationCenterId();
- method public int getSpringBoundary();
- method public float getSpringDamping();
- method public float getSpringMass();
- method public float getSpringStiffness();
- method public float getSpringStopThreshold();
- method public int getTouchAnchorId();
- method public int getTouchAnchorSide();
- method public int getTouchRegionId();
- method public void setAutoCompleteMode(int);
- method public androidx.constraintlayout.motion.widget.OnSwipe! setDragDirection(int);
- method public androidx.constraintlayout.motion.widget.OnSwipe! setDragScale(int);
- method public androidx.constraintlayout.motion.widget.OnSwipe! setDragThreshold(int);
- method public androidx.constraintlayout.motion.widget.OnSwipe! setLimitBoundsTo(int);
- method public androidx.constraintlayout.motion.widget.OnSwipe! setMaxAcceleration(int);
- method public androidx.constraintlayout.motion.widget.OnSwipe! setMaxVelocity(int);
- method public androidx.constraintlayout.motion.widget.OnSwipe! setMoveWhenScrollAtTop(boolean);
- method public androidx.constraintlayout.motion.widget.OnSwipe! setNestedScrollFlags(int);
- method public androidx.constraintlayout.motion.widget.OnSwipe! setOnTouchUp(int);
- method public androidx.constraintlayout.motion.widget.OnSwipe! setRotateCenter(int);
- method public androidx.constraintlayout.motion.widget.OnSwipe! setSpringBoundary(int);
- method public androidx.constraintlayout.motion.widget.OnSwipe! setSpringDamping(float);
- method public androidx.constraintlayout.motion.widget.OnSwipe! setSpringMass(float);
- method public androidx.constraintlayout.motion.widget.OnSwipe! setSpringStiffness(float);
- method public androidx.constraintlayout.motion.widget.OnSwipe! setSpringStopThreshold(float);
- method public androidx.constraintlayout.motion.widget.OnSwipe! setTouchAnchorId(int);
- method public androidx.constraintlayout.motion.widget.OnSwipe! setTouchAnchorSide(int);
- method public androidx.constraintlayout.motion.widget.OnSwipe! setTouchRegionId(int);
- field public static final int COMPLETE_MODE_CONTINUOUS_VELOCITY = 0; // 0x0
- field public static final int COMPLETE_MODE_SPRING = 1; // 0x1
- field public static final int DRAG_ANTICLOCKWISE = 7; // 0x7
- field public static final int DRAG_CLOCKWISE = 6; // 0x6
- field public static final int DRAG_DOWN = 1; // 0x1
- field public static final int DRAG_END = 5; // 0x5
- field public static final int DRAG_LEFT = 2; // 0x2
- field public static final int DRAG_RIGHT = 3; // 0x3
- field public static final int DRAG_START = 4; // 0x4
- field public static final int DRAG_UP = 0; // 0x0
- field public static final int FLAG_DISABLE_POST_SCROLL = 1; // 0x1
- field public static final int FLAG_DISABLE_SCROLL = 2; // 0x2
- field public static final int ON_UP_AUTOCOMPLETE = 0; // 0x0
- field public static final int ON_UP_AUTOCOMPLETE_TO_END = 2; // 0x2
- field public static final int ON_UP_AUTOCOMPLETE_TO_START = 1; // 0x1
- field public static final int ON_UP_DECELERATE = 4; // 0x4
- field public static final int ON_UP_DECELERATE_AND_COMPLETE = 5; // 0x5
- field public static final int ON_UP_NEVER_TO_END = 7; // 0x7
- field public static final int ON_UP_NEVER_TO_START = 6; // 0x6
- field public static final int ON_UP_STOP = 3; // 0x3
- field public static final int SIDE_BOTTOM = 3; // 0x3
- field public static final int SIDE_END = 6; // 0x6
- field public static final int SIDE_LEFT = 1; // 0x1
- field public static final int SIDE_MIDDLE = 4; // 0x4
- field public static final int SIDE_RIGHT = 2; // 0x2
- field public static final int SIDE_START = 5; // 0x5
- field public static final int SIDE_TOP = 0; // 0x0
- field public static final int SPRING_BOUNDARY_BOUNCEBOTH = 3; // 0x3
- field public static final int SPRING_BOUNDARY_BOUNCEEND = 2; // 0x2
- field public static final int SPRING_BOUNDARY_BOUNCESTART = 1; // 0x1
- field public static final int SPRING_BOUNDARY_OVERSHOOT = 0; // 0x0
- }
-
- public abstract class TransitionAdapter implements androidx.constraintlayout.motion.widget.MotionLayout.TransitionListener {
- ctor public TransitionAdapter();
- method public void onTransitionChange(androidx.constraintlayout.motion.widget.MotionLayout!, int, int, float);
- method public void onTransitionCompleted(androidx.constraintlayout.motion.widget.MotionLayout!, int);
- method public void onTransitionStarted(androidx.constraintlayout.motion.widget.MotionLayout!, int, int);
- method public void onTransitionTrigger(androidx.constraintlayout.motion.widget.MotionLayout!, int, boolean, float);
- }
-
- public class TransitionBuilder {
- ctor public TransitionBuilder();
- method public static androidx.constraintlayout.motion.widget.MotionScene.Transition! buildTransition(androidx.constraintlayout.motion.widget.MotionScene!, int, int, androidx.constraintlayout.widget.ConstraintSet!, int, androidx.constraintlayout.widget.ConstraintSet!);
- method public static void validate(androidx.constraintlayout.motion.widget.MotionLayout!);
- }
-
- public class ViewTransition {
- method public int getSharedValue();
- method public int getSharedValueCurrent();
- method public int getSharedValueID();
- method public int getStateTransition();
- method public void setSharedValue(int);
- method public void setSharedValueCurrent(int);
- method public void setSharedValueID(int);
- method public void setStateTransition(int);
- field public static final String CONSTRAINT_OVERRIDE = "ConstraintOverride";
- field public static final String CUSTOM_ATTRIBUTE = "CustomAttribute";
- field public static final String CUSTOM_METHOD = "CustomMethod";
- field public static final String KEY_FRAME_SET_TAG = "KeyFrameSet";
- field public static final int ONSTATE_ACTION_DOWN = 1; // 0x1
- field public static final int ONSTATE_ACTION_DOWN_UP = 3; // 0x3
- field public static final int ONSTATE_ACTION_UP = 2; // 0x2
- field public static final int ONSTATE_SHARED_VALUE_SET = 4; // 0x4
- field public static final int ONSTATE_SHARED_VALUE_UNSET = 5; // 0x5
- field public static final String VIEW_TRANSITION_TAG = "ViewTransition";
- }
-
- public class ViewTransitionController {
- ctor public ViewTransitionController(androidx.constraintlayout.motion.widget.MotionLayout!);
- method public void add(androidx.constraintlayout.motion.widget.ViewTransition!);
- }
-
-}
-
-package androidx.constraintlayout.utils.widget {
-
- public class ImageFilterButton extends androidx.appcompat.widget.AppCompatImageButton {
- ctor public ImageFilterButton(android.content.Context!);
- ctor public ImageFilterButton(android.content.Context!, android.util.AttributeSet!);
- ctor public ImageFilterButton(android.content.Context!, android.util.AttributeSet!, int);
- method public float getContrast();
- method public float getCrossfade();
- method public float getImagePanX();
- method public float getImagePanY();
- method public float getImageRotate();
- method public float getImageZoom();
- method public float getRound();
- method public float getRoundPercent();
- method public float getSaturation();
- method public float getWarmth();
- method public void setAltImageResource(int);
- method public void setBrightness(float);
- method public void setContrast(float);
- method public void setCrossfade(float);
- method public void setImagePanX(float);
- method public void setImagePanY(float);
- method public void setImageRotate(float);
- method public void setImageZoom(float);
- method @RequiresApi(android.os.Build.VERSION_CODES.LOLLIPOP) public void setRound(float);
- method @RequiresApi(android.os.Build.VERSION_CODES.LOLLIPOP) public void setRoundPercent(float);
- method public void setSaturation(float);
- method public void setWarmth(float);
- }
-
- public class ImageFilterView extends androidx.appcompat.widget.AppCompatImageView {
- ctor public ImageFilterView(android.content.Context!);
- ctor public ImageFilterView(android.content.Context!, android.util.AttributeSet!);
- ctor public ImageFilterView(android.content.Context!, android.util.AttributeSet!, int);
- method public float getBrightness();
- method public float getContrast();
- method public float getCrossfade();
- method public float getImagePanX();
- method public float getImagePanY();
- method public float getImageRotate();
- method public float getImageZoom();
- method public float getRound();
- method public float getRoundPercent();
- method public float getSaturation();
- method public float getWarmth();
- method public void setAltImageDrawable(android.graphics.drawable.Drawable!);
- method public void setAltImageResource(int);
- method public void setBrightness(float);
- method public void setContrast(float);
- method public void setCrossfade(float);
- method public void setImagePanX(float);
- method public void setImagePanY(float);
- method public void setImageRotate(float);
- method public void setImageZoom(float);
- method @RequiresApi(android.os.Build.VERSION_CODES.LOLLIPOP) public void setRound(float);
- method @RequiresApi(android.os.Build.VERSION_CODES.LOLLIPOP) public void setRoundPercent(float);
- method public void setSaturation(float);
- method public void setWarmth(float);
- }
-
- public class MockView extends android.view.View {
- ctor public MockView(android.content.Context!);
- ctor public MockView(android.content.Context!, android.util.AttributeSet!);
- ctor public MockView(android.content.Context!, android.util.AttributeSet!, int);
- method public void onDraw(android.graphics.Canvas);
- field protected String! mText;
- }
-
- public class MotionButton extends androidx.appcompat.widget.AppCompatButton {
- ctor public MotionButton(android.content.Context!);
- ctor public MotionButton(android.content.Context!, android.util.AttributeSet!);
- ctor public MotionButton(android.content.Context!, android.util.AttributeSet!, int);
- method public float getRound();
- method public float getRoundPercent();
- method @RequiresApi(android.os.Build.VERSION_CODES.LOLLIPOP) public void setRound(float);
- method @RequiresApi(android.os.Build.VERSION_CODES.LOLLIPOP) public void setRoundPercent(float);
- }
-
- public class MotionLabel extends android.view.View implements androidx.constraintlayout.motion.widget.FloatLayout {
- ctor public MotionLabel(android.content.Context!);
- ctor public MotionLabel(android.content.Context!, android.util.AttributeSet?);
- ctor public MotionLabel(android.content.Context!, android.util.AttributeSet?, int);
- method public float getRound();
- method public float getRoundPercent();
- method public float getScaleFromTextSize();
- method public float getTextBackgroundPanX();
- method public float getTextBackgroundPanY();
- method public float getTextBackgroundRotate();
- method public float getTextBackgroundZoom();
- method public int getTextOutlineColor();
- method public float getTextPanX();
- method public float getTextPanY();
- method public float getTextureHeight();
- method public float getTextureWidth();
- method public android.graphics.Typeface! getTypeface();
- method public void layout(float, float, float, float);
- method public void setGravity(int);
- method @RequiresApi(android.os.Build.VERSION_CODES.LOLLIPOP) public void setRound(float);
- method @RequiresApi(android.os.Build.VERSION_CODES.LOLLIPOP) public void setRoundPercent(float);
- method public void setScaleFromTextSize(float);
- method public void setText(CharSequence!);
- method public void setTextBackgroundPanX(float);
- method public void setTextBackgroundPanY(float);
- method public void setTextBackgroundRotate(float);
- method public void setTextBackgroundZoom(float);
- method public void setTextFillColor(int);
- method public void setTextOutlineColor(int);
- method public void setTextOutlineThickness(float);
- method public void setTextPanX(float);
- method public void setTextPanY(float);
- method public void setTextSize(float);
- method public void setTextureHeight(float);
- method public void setTextureWidth(float);
- method public void setTypeface(android.graphics.Typeface!);
- }
-
- public class MotionTelltales extends androidx.constraintlayout.utils.widget.MockView {
- ctor public MotionTelltales(android.content.Context!);
- ctor public MotionTelltales(android.content.Context!, android.util.AttributeSet!);
- ctor public MotionTelltales(android.content.Context!, android.util.AttributeSet!, int);
- method public void setText(CharSequence!);
- }
-
-}
-
-package androidx.constraintlayout.widget {
-
- public class Barrier extends androidx.constraintlayout.widget.ConstraintHelper {
- ctor public Barrier(android.content.Context!);
- ctor public Barrier(android.content.Context!, android.util.AttributeSet!);
- ctor public Barrier(android.content.Context!, android.util.AttributeSet!, int);
- method @Deprecated public boolean allowsGoneWidget();
- method public boolean getAllowsGoneWidget();
- method public int getMargin();
- method public int getType();
- method public void setAllowsGoneWidget(boolean);
- method public void setDpMargin(int);
- method public void setMargin(int);
- method public void setType(int);
- field public static final int BOTTOM = 3; // 0x3
- field public static final int END = 6; // 0x6
- field public static final int LEFT = 0; // 0x0
- field public static final int RIGHT = 1; // 0x1
- field public static final int START = 5; // 0x5
- field public static final int TOP = 2; // 0x2
- }
-
- public class ConstraintAttribute {
- ctor public ConstraintAttribute(String!, androidx.constraintlayout.widget.ConstraintAttribute.AttributeType!);
- ctor public ConstraintAttribute(String!, androidx.constraintlayout.widget.ConstraintAttribute.AttributeType!, Object!, boolean);
- ctor public ConstraintAttribute(androidx.constraintlayout.widget.ConstraintAttribute!, Object!);
- method public void applyCustom(android.view.View!);
- method public boolean diff(androidx.constraintlayout.widget.ConstraintAttribute!);
- method public static java.util.HashMap<java.lang.String!,androidx.constraintlayout.widget.ConstraintAttribute!>! extractAttributes(java.util.HashMap<java.lang.String!,androidx.constraintlayout.widget.ConstraintAttribute!>!, android.view.View!);
- method public int getColorValue();
- method public float getFloatValue();
- method public int getIntegerValue();
- method public String! getName();
- method public String! getStringValue();
- method public androidx.constraintlayout.widget.ConstraintAttribute.AttributeType! getType();
- method public float getValueToInterpolate();
- method public void getValuesToInterpolate(float[]!);
- method public boolean isBooleanValue();
- method public boolean isContinuous();
- method public boolean isMethod();
- method public int numberOfInterpolatedValues();
- method public static void parse(android.content.Context!, org.xmlpull.v1.XmlPullParser!, java.util.HashMap<java.lang.String!,androidx.constraintlayout.widget.ConstraintAttribute!>!);
- method public static void setAttributes(android.view.View!, java.util.HashMap<java.lang.String!,androidx.constraintlayout.widget.ConstraintAttribute!>!);
- method public void setColorValue(int);
- method public void setFloatValue(float);
- method public void setIntValue(int);
- method public void setStringValue(String!);
- method public void setValue(float[]!);
- method public void setValue(Object!);
- }
-
- public enum ConstraintAttribute.AttributeType {
- enum_constant public static final androidx.constraintlayout.widget.ConstraintAttribute.AttributeType BOOLEAN_TYPE;
- enum_constant public static final androidx.constraintlayout.widget.ConstraintAttribute.AttributeType COLOR_DRAWABLE_TYPE;
- enum_constant public static final androidx.constraintlayout.widget.ConstraintAttribute.AttributeType COLOR_TYPE;
- enum_constant public static final androidx.constraintlayout.widget.ConstraintAttribute.AttributeType DIMENSION_TYPE;
- enum_constant public static final androidx.constraintlayout.widget.ConstraintAttribute.AttributeType FLOAT_TYPE;
- enum_constant public static final androidx.constraintlayout.widget.ConstraintAttribute.AttributeType INT_TYPE;
- enum_constant public static final androidx.constraintlayout.widget.ConstraintAttribute.AttributeType REFERENCE_TYPE;
- enum_constant public static final androidx.constraintlayout.widget.ConstraintAttribute.AttributeType STRING_TYPE;
- }
-
- public abstract class ConstraintHelper extends android.view.View {
- ctor public ConstraintHelper(android.content.Context!);
- ctor public ConstraintHelper(android.content.Context!, android.util.AttributeSet!);
- ctor public ConstraintHelper(android.content.Context!, android.util.AttributeSet!, int);
- method public void addView(android.view.View!);
- method public void applyHelperParams();
- method protected void applyLayoutFeatures(androidx.constraintlayout.widget.ConstraintLayout!);
- method protected void applyLayoutFeatures();
- method protected void applyLayoutFeaturesInConstraintSet(androidx.constraintlayout.widget.ConstraintLayout!);
- method public boolean containsId(int);
- method public int[]! getReferencedIds();
- method protected android.view.View![]! getViews(androidx.constraintlayout.widget.ConstraintLayout!);
- method public int indexFromId(int);
- method protected void init(android.util.AttributeSet!);
- method public static boolean isChildOfHelper(android.view.View!);
- method public void loadParameters(androidx.constraintlayout.widget.ConstraintSet.Constraint!, androidx.constraintlayout.core.widgets.HelperWidget!, androidx.constraintlayout.widget.ConstraintLayout.LayoutParams!, android.util.SparseArray<androidx.constraintlayout.core.widgets.ConstraintWidget!>!);
- method public void onDraw(android.graphics.Canvas);
- method public int removeView(android.view.View!);
- method public void resolveRtl(androidx.constraintlayout.core.widgets.ConstraintWidget!, boolean);
- method protected void setIds(String!);
- method protected void setReferenceTags(String!);
- method public void setReferencedIds(int[]!);
- method public void updatePostConstraints(androidx.constraintlayout.widget.ConstraintLayout!);
- method public void updatePostLayout(androidx.constraintlayout.widget.ConstraintLayout!);
- method public void updatePostMeasure(androidx.constraintlayout.widget.ConstraintLayout!);
- method public void updatePreDraw(androidx.constraintlayout.widget.ConstraintLayout!);
- method public void updatePreLayout(androidx.constraintlayout.widget.ConstraintLayout!);
- method public void updatePreLayout(androidx.constraintlayout.core.widgets.ConstraintWidgetContainer!, androidx.constraintlayout.core.widgets.Helper!, android.util.SparseArray<androidx.constraintlayout.core.widgets.ConstraintWidget!>!);
- method public void validateParams();
- field protected static final String CHILD_TAG = "CONSTRAINT_LAYOUT_HELPER_CHILD";
- field protected int mCount;
- field protected androidx.constraintlayout.core.widgets.Helper! mHelperWidget;
- field protected int[]! mIds;
- field protected java.util.HashMap<java.lang.Integer!,java.lang.String!>! mMap;
- field protected String! mReferenceIds;
- field protected String! mReferenceTags;
- field protected boolean mUseViewMeasure;
- field protected android.content.Context! myContext;
- }
-
- public class ConstraintLayout extends android.view.ViewGroup {
- ctor public ConstraintLayout(android.content.Context);
- ctor public ConstraintLayout(android.content.Context, android.util.AttributeSet?);
- ctor public ConstraintLayout(android.content.Context, android.util.AttributeSet?, int);
- ctor public ConstraintLayout(android.content.Context, android.util.AttributeSet?, int, int);
- method public void addValueModifier(androidx.constraintlayout.widget.ConstraintLayout.ValueModifier!);
- method protected void applyConstraintsFromLayoutParams(boolean, android.view.View!, androidx.constraintlayout.core.widgets.ConstraintWidget!, androidx.constraintlayout.widget.ConstraintLayout.LayoutParams!, android.util.SparseArray<androidx.constraintlayout.core.widgets.ConstraintWidget!>!);
- method protected boolean dynamicUpdateConstraints(int, int);
- method public void fillMetrics(androidx.constraintlayout.core.Metrics!);
- method protected androidx.constraintlayout.widget.ConstraintLayout.LayoutParams! generateDefaultLayoutParams();
- method public androidx.constraintlayout.widget.ConstraintLayout.LayoutParams! generateLayoutParams(android.util.AttributeSet!);
- method public Object! getDesignInformation(int, Object!);
- method public int getMaxHeight();
- method public int getMaxWidth();
- method public int getMinHeight();
- method public int getMinWidth();
- method public int getOptimizationLevel();
- method public String! getSceneString();
- method public static androidx.constraintlayout.widget.SharedValues! getSharedValues();
- method public android.view.View! getViewById(int);
- method public final androidx.constraintlayout.core.widgets.ConstraintWidget! getViewWidget(android.view.View!);
- method protected boolean isRtl();
- method public void loadLayoutDescription(int);
- method protected void parseLayoutDescription(int);
- method protected void resolveMeasuredDimension(int, int, int, int, boolean, boolean);
- method protected void resolveSystem(androidx.constraintlayout.core.widgets.ConstraintWidgetContainer!, int, int, int);
- method public void setConstraintSet(androidx.constraintlayout.widget.ConstraintSet!);
- method public void setDesignInformation(int, Object!, Object!);
- method public void setMaxHeight(int);
- method public void setMaxWidth(int);
- method public void setMinHeight(int);
- method public void setMinWidth(int);
- method public void setOnConstraintsChanged(androidx.constraintlayout.widget.ConstraintsChangedListener!);
- method public void setOptimizationLevel(int);
- method protected void setSelfDimensionBehaviour(androidx.constraintlayout.core.widgets.ConstraintWidgetContainer!, int, int, int, int);
- method public void setState(int, int, int);
- field public static final int DESIGN_INFO_ID = 0; // 0x0
- field public static final String VERSION = "ConstraintLayout-2.2.0-alpha04";
- field protected androidx.constraintlayout.widget.ConstraintLayoutStates! mConstraintLayoutSpec;
- field protected boolean mDirtyHierarchy;
- field protected androidx.constraintlayout.core.widgets.ConstraintWidgetContainer! mLayoutWidget;
- }
-
- public static class ConstraintLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
- ctor public ConstraintLayout.LayoutParams(android.view.ViewGroup.LayoutParams!);
- ctor public ConstraintLayout.LayoutParams(android.content.Context!, android.util.AttributeSet!);
- ctor public ConstraintLayout.LayoutParams(int, int);
- method public String! getConstraintTag();
- method public androidx.constraintlayout.core.widgets.ConstraintWidget! getConstraintWidget();
- method public void reset();
- method public void setWidgetDebugName(String!);
- method public void validate();
- field public static final int BASELINE = 5; // 0x5
- field public static final int BOTTOM = 4; // 0x4
- field public static final int CHAIN_PACKED = 2; // 0x2
- field public static final int CHAIN_SPREAD = 0; // 0x0
- field public static final int CHAIN_SPREAD_INSIDE = 1; // 0x1
- field public static final int CIRCLE = 8; // 0x8
- field public static final int END = 7; // 0x7
- field public static final int GONE_UNSET = -2147483648; // 0x80000000
- field public static final int HORIZONTAL = 0; // 0x0
- field public static final int LEFT = 1; // 0x1
- field public static final int MATCH_CONSTRAINT = 0; // 0x0
- field public static final int MATCH_CONSTRAINT_PERCENT = 2; // 0x2
- field public static final int MATCH_CONSTRAINT_SPREAD = 0; // 0x0
- field public static final int MATCH_CONSTRAINT_WRAP = 1; // 0x1
- field public static final int PARENT_ID = 0; // 0x0
- field public static final int RIGHT = 2; // 0x2
- field public static final int START = 6; // 0x6
- field public static final int TOP = 3; // 0x3
- field public static final int UNSET = -1; // 0xffffffff
- field public static final int VERTICAL = 1; // 0x1
- field public static final int WRAP_BEHAVIOR_HORIZONTAL_ONLY = 1; // 0x1
- field public static final int WRAP_BEHAVIOR_INCLUDED = 0; // 0x0
- field public static final int WRAP_BEHAVIOR_SKIPPED = 3; // 0x3
- field public static final int WRAP_BEHAVIOR_VERTICAL_ONLY = 2; // 0x2
- field public int baselineMargin;
- field public int baselineToBaseline;
- field public int baselineToBottom;
- field public int baselineToTop;
- field public int bottomToBottom;
- field public int bottomToTop;
- field public float circleAngle;
- field public int circleConstraint;
- field public int circleRadius;
- field public boolean constrainedHeight;
- field public boolean constrainedWidth;
- field public String! constraintTag;
- field public String! dimensionRatio;
- field public int editorAbsoluteX;
- field public int editorAbsoluteY;
- field public int endToEnd;
- field public int endToStart;
- field public int goneBaselineMargin;
- field public int goneBottomMargin;
- field public int goneEndMargin;
- field public int goneLeftMargin;
- field public int goneRightMargin;
- field public int goneStartMargin;
- field public int goneTopMargin;
- field public int guideBegin;
- field public int guideEnd;
- field public float guidePercent;
- field public boolean guidelineUseRtl;
- field public boolean helped;
- field public float horizontalBias;
- field public int horizontalChainStyle;
- field public float horizontalWeight;
- field public int leftToLeft;
- field public int leftToRight;
- field public int matchConstraintDefaultHeight;
- field public int matchConstraintDefaultWidth;
- field public int matchConstraintMaxHeight;
- field public int matchConstraintMaxWidth;
- field public int matchConstraintMinHeight;
- field public int matchConstraintMinWidth;
- field public float matchConstraintPercentHeight;
- field public float matchConstraintPercentWidth;
- field public int orientation;
- field public int rightToLeft;
- field public int rightToRight;
- field public int startToEnd;
- field public int startToStart;
- field public int topToBottom;
- field public int topToTop;
- field public float verticalBias;
- field public int verticalChainStyle;
- field public float verticalWeight;
- field public int wrapBehaviorInParent;
- }
-
- public static interface ConstraintLayout.ValueModifier {
- method public boolean update(int, int, int, android.view.View!, androidx.constraintlayout.widget.ConstraintLayout.LayoutParams!);
- }
-
- public class ConstraintLayoutStates {
- method public boolean needsToChange(int, float, float);
- method public void setOnConstraintsChanged(androidx.constraintlayout.widget.ConstraintsChangedListener!);
- method public void updateConstraints(int, float, float);
- field public static final String TAG = "ConstraintLayoutStates";
- }
-
- public class ConstraintLayoutStatistics {
- ctor public ConstraintLayoutStatistics(androidx.constraintlayout.widget.ConstraintLayout!);
- ctor public ConstraintLayoutStatistics(androidx.constraintlayout.widget.ConstraintLayoutStatistics!);
- method public void attach(androidx.constraintlayout.widget.ConstraintLayout!);
- method public androidx.constraintlayout.widget.ConstraintLayoutStatistics! clone();
- method public void detach();
- method public long getValue(int);
- method public void logSummary(String!);
- method public void logSummary(String!, androidx.constraintlayout.widget.ConstraintLayoutStatistics!);
- method public void reset();
- field public static final int DURATION_OF_CHILD_MEASURES = 5; // 0x5
- field public static final int DURATION_OF_LAYOUT = 7; // 0x7
- field public static final int DURATION_OF_MEASURES = 6; // 0x6
- field public static final int NUMBER_OF_CHILD_MEASURES = 4; // 0x4
- field public static final int NUMBER_OF_CHILD_VIEWS = 3; // 0x3
- field public static final int NUMBER_OF_EQUATIONS = 9; // 0x9
- field public static final int NUMBER_OF_LAYOUTS = 1; // 0x1
- field public static final int NUMBER_OF_ON_MEASURES = 2; // 0x2
- field public static final int NUMBER_OF_SIMPLE_EQUATIONS = 10; // 0xa
- field public static final int NUMBER_OF_VARIABLES = 8; // 0x8
- }
-
- public class ConstraintProperties {
- ctor public ConstraintProperties(android.view.View!);
- method public androidx.constraintlayout.widget.ConstraintProperties! addToHorizontalChain(int, int);
- method public androidx.constraintlayout.widget.ConstraintProperties! addToHorizontalChainRTL(int, int);
- method public androidx.constraintlayout.widget.ConstraintProperties! addToVerticalChain(int, int);
- method public androidx.constraintlayout.widget.ConstraintProperties! alpha(float);
- method public void apply();
- method public androidx.constraintlayout.widget.ConstraintProperties! center(int, int, int, int, int, int, float);
- method public androidx.constraintlayout.widget.ConstraintProperties! centerHorizontally(int, int, int, int, int, int, float);
- method public androidx.constraintlayout.widget.ConstraintProperties! centerHorizontally(int);
- method public androidx.constraintlayout.widget.ConstraintProperties! centerHorizontallyRtl(int, int, int, int, int, int, float);
- method public androidx.constraintlayout.widget.ConstraintProperties! centerHorizontallyRtl(int);
- method public androidx.constraintlayout.widget.ConstraintProperties! centerVertically(int, int, int, int, int, int, float);
- method public androidx.constraintlayout.widget.ConstraintProperties! centerVertically(int);
- method public androidx.constraintlayout.widget.ConstraintProperties! connect(int, int, int, int);
- method public androidx.constraintlayout.widget.ConstraintProperties! constrainDefaultHeight(int);
- method public androidx.constraintlayout.widget.ConstraintProperties! constrainDefaultWidth(int);
- method public androidx.constraintlayout.widget.ConstraintProperties! constrainHeight(int);
- method public androidx.constraintlayout.widget.ConstraintProperties! constrainMaxHeight(int);
- method public androidx.constraintlayout.widget.ConstraintProperties! constrainMaxWidth(int);
- method public androidx.constraintlayout.widget.ConstraintProperties! constrainMinHeight(int);
- method public androidx.constraintlayout.widget.ConstraintProperties! constrainMinWidth(int);
- method public androidx.constraintlayout.widget.ConstraintProperties! constrainWidth(int);
- method public androidx.constraintlayout.widget.ConstraintProperties! dimensionRatio(String!);
- method public androidx.constraintlayout.widget.ConstraintProperties! elevation(float);
- method public androidx.constraintlayout.widget.ConstraintProperties! goneMargin(int, int);
- method public androidx.constraintlayout.widget.ConstraintProperties! horizontalBias(float);
- method public androidx.constraintlayout.widget.ConstraintProperties! horizontalChainStyle(int);
- method public androidx.constraintlayout.widget.ConstraintProperties! horizontalWeight(float);
- method public androidx.constraintlayout.widget.ConstraintProperties! margin(int, int);
- method public androidx.constraintlayout.widget.ConstraintProperties! removeConstraints(int);
- method public androidx.constraintlayout.widget.ConstraintProperties! removeFromHorizontalChain();
- method public androidx.constraintlayout.widget.ConstraintProperties! removeFromVerticalChain();
- method public androidx.constraintlayout.widget.ConstraintProperties! rotation(float);
- method public androidx.constraintlayout.widget.ConstraintProperties! rotationX(float);
- method public androidx.constraintlayout.widget.ConstraintProperties! rotationY(float);
- method public androidx.constraintlayout.widget.ConstraintProperties! scaleX(float);
- method public androidx.constraintlayout.widget.ConstraintProperties! scaleY(float);
- method public androidx.constraintlayout.widget.ConstraintProperties! transformPivot(float, float);
- method public androidx.constraintlayout.widget.ConstraintProperties! transformPivotX(float);
- method public androidx.constraintlayout.widget.ConstraintProperties! transformPivotY(float);
- method public androidx.constraintlayout.widget.ConstraintProperties! translation(float, float);
- method public androidx.constraintlayout.widget.ConstraintProperties! translationX(float);
- method public androidx.constraintlayout.widget.ConstraintProperties! translationY(float);
- method public androidx.constraintlayout.widget.ConstraintProperties! translationZ(float);
- method public androidx.constraintlayout.widget.ConstraintProperties! verticalBias(float);
- method public androidx.constraintlayout.widget.ConstraintProperties! verticalChainStyle(int);
- method public androidx.constraintlayout.widget.ConstraintProperties! verticalWeight(float);
- method public androidx.constraintlayout.widget.ConstraintProperties! visibility(int);
- field public static final int BASELINE = 5; // 0x5
- field public static final int BOTTOM = 4; // 0x4
- field public static final int END = 7; // 0x7
- field public static final int LEFT = 1; // 0x1
- field public static final int MATCH_CONSTRAINT = 0; // 0x0
- field public static final int MATCH_CONSTRAINT_SPREAD = 0; // 0x0
- field public static final int MATCH_CONSTRAINT_WRAP = 1; // 0x1
- field public static final int PARENT_ID = 0; // 0x0
- field public static final int RIGHT = 2; // 0x2
- field public static final int START = 6; // 0x6
- field public static final int TOP = 3; // 0x3
- field public static final int UNSET = -1; // 0xffffffff
- field public static final int WRAP_CONTENT = -2; // 0xfffffffe
- }
-
- public class ConstraintSet {
- ctor public ConstraintSet();
- method public void addColorAttributes(java.lang.String!...);
- method public void addFloatAttributes(java.lang.String!...);
- method public void addIntAttributes(java.lang.String!...);
- method public void addStringAttributes(java.lang.String!...);
- method public void addToHorizontalChain(int, int, int);
- method public void addToHorizontalChainRTL(int, int, int);
- method public void addToVerticalChain(int, int, int);
- method public void applyCustomAttributes(androidx.constraintlayout.widget.ConstraintLayout!);
- method public void applyDeltaFrom(androidx.constraintlayout.widget.ConstraintSet!);
- method public void applyTo(androidx.constraintlayout.widget.ConstraintLayout!);
- method public void applyToHelper(androidx.constraintlayout.widget.ConstraintHelper!, androidx.constraintlayout.core.widgets.ConstraintWidget!, androidx.constraintlayout.widget.ConstraintLayout.LayoutParams!, android.util.SparseArray<androidx.constraintlayout.core.widgets.ConstraintWidget!>!);
- method public void applyToLayoutParams(int, androidx.constraintlayout.widget.ConstraintLayout.LayoutParams!);
- method public void applyToWithoutCustom(androidx.constraintlayout.widget.ConstraintLayout!);
- method public static androidx.constraintlayout.widget.ConstraintSet.Constraint! buildDelta(android.content.Context!, org.xmlpull.v1.XmlPullParser!);
- method public void center(int, int, int, int, int, int, int, float);
- method public void centerHorizontally(int, int, int, int, int, int, int, float);
- method public void centerHorizontally(int, int);
- method public void centerHorizontallyRtl(int, int, int, int, int, int, int, float);
- method public void centerHorizontallyRtl(int, int);
- method public void centerVertically(int, int, int, int, int, int, int, float);
- method public void centerVertically(int, int);
- method public void clear(int);
- method public void clear(int, int);
- method public void clone(android.content.Context!, int);
- method public void clone(androidx.constraintlayout.widget.ConstraintSet!);
- method public void clone(androidx.constraintlayout.widget.ConstraintLayout!);
- method public void clone(androidx.constraintlayout.widget.Constraints!);
- method public void connect(int, int, int, int, int);
- method public void connect(int, int, int, int);
- method public void constrainCircle(int, int, int, float);
- method public void constrainDefaultHeight(int, int);
- method public void constrainDefaultWidth(int, int);
- method public void constrainHeight(int, int);
- method public void constrainMaxHeight(int, int);
- method public void constrainMaxWidth(int, int);
- method public void constrainMinHeight(int, int);
- method public void constrainMinWidth(int, int);
- method public void constrainPercentHeight(int, float);
- method public void constrainPercentWidth(int, float);
- method public void constrainWidth(int, int);
- method public void constrainedHeight(int, boolean);
- method public void constrainedWidth(int, boolean);
- method public void create(int, int);
- method public void createBarrier(int, int, int, int...);
- method public void createHorizontalChain(int, int, int, int, int[]!, float[]!, int);
- method public void createHorizontalChainRtl(int, int, int, int, int[]!, float[]!, int);
- method public void createVerticalChain(int, int, int, int, int[]!, float[]!, int);
- method public void dump(androidx.constraintlayout.motion.widget.MotionScene!, int...);
- method public boolean getApplyElevation(int);
- method public androidx.constraintlayout.widget.ConstraintSet.Constraint! getConstraint(int);
- method public java.util.HashMap<java.lang.String!,androidx.constraintlayout.widget.ConstraintAttribute!>! getCustomAttributeSet();
- method public int getHeight(int);
- method public int[]! getKnownIds();
- method public androidx.constraintlayout.widget.ConstraintSet.Constraint! getParameters(int);
- method public int[]! getReferencedIds(int);
- method public String![]! getStateLabels();
- method public int getVisibility(int);
- method public int getVisibilityMode(int);
- method public int getWidth(int);
- method public boolean isForceId();
- method public boolean isValidateOnParse();
- method public void load(android.content.Context!, int);
- method public void load(android.content.Context!, org.xmlpull.v1.XmlPullParser!);
- method public boolean matchesLabels(java.lang.String!...);
- method public void parseColorAttributes(androidx.constraintlayout.widget.ConstraintSet.Constraint!, String!);
- method public void parseFloatAttributes(androidx.constraintlayout.widget.ConstraintSet.Constraint!, String!);
- method public void parseIntAttributes(androidx.constraintlayout.widget.ConstraintSet.Constraint!, String!);
- method public void parseStringAttributes(androidx.constraintlayout.widget.ConstraintSet.Constraint!, String!);
- method public void readFallback(androidx.constraintlayout.widget.ConstraintSet!);
- method public void readFallback(androidx.constraintlayout.widget.ConstraintLayout!);
- method public void removeAttribute(String!);
- method public void removeFromHorizontalChain(int);
- method public void removeFromVerticalChain(int);
- method public void setAlpha(int, float);
- method public void setApplyElevation(int, boolean);
- method public void setBarrierType(int, int);
- method public void setColorValue(int, String!, int);
- method public void setDimensionRatio(int, String!);
- method public void setEditorAbsoluteX(int, int);
- method public void setEditorAbsoluteY(int, int);
- method public void setElevation(int, float);
- method public void setFloatValue(int, String!, float);
- method public void setForceId(boolean);
- method public void setGoneMargin(int, int, int);
- method public void setGuidelineBegin(int, int);
- method public void setGuidelineEnd(int, int);
- method public void setGuidelinePercent(int, float);
- method public void setHorizontalBias(int, float);
- method public void setHorizontalChainStyle(int, int);
- method public void setHorizontalWeight(int, float);
- method public void setIntValue(int, String!, int);
- method public void setLayoutWrapBehavior(int, int);
- method public void setMargin(int, int, int);
- method public void setReferencedIds(int, int...);
- method public void setRotation(int, float);
- method public void setRotationX(int, float);
- method public void setRotationY(int, float);
- method public void setScaleX(int, float);
- method public void setScaleY(int, float);
- method public void setStateLabels(String!);
- method public void setStateLabelsList(java.lang.String!...);
- method public void setStringValue(int, String!, String!);
- method public void setTransformPivot(int, float, float);
- method public void setTransformPivotX(int, float);
- method public void setTransformPivotY(int, float);
- method public void setTranslation(int, float, float);
- method public void setTranslationX(int, float);
- method public void setTranslationY(int, float);
- method public void setTranslationZ(int, float);
- method public void setValidateOnParse(boolean);
- method public void setVerticalBias(int, float);
- method public void setVerticalChainStyle(int, int);
- method public void setVerticalWeight(int, float);
- method public void setVisibility(int, int);
- method public void setVisibilityMode(int, int);
- method public void writeState(java.io.Writer!, androidx.constraintlayout.widget.ConstraintLayout!, int) throws java.io.IOException;
- field public static final int BASELINE = 5; // 0x5
- field public static final int BOTTOM = 4; // 0x4
- field public static final int CHAIN_PACKED = 2; // 0x2
- field public static final int CHAIN_SPREAD = 0; // 0x0
- field public static final int CHAIN_SPREAD_INSIDE = 1; // 0x1
- field public static final int CIRCLE_REFERENCE = 8; // 0x8
- field public static final int END = 7; // 0x7
- field public static final int GONE = 8; // 0x8
- field public static final int HORIZONTAL = 0; // 0x0
- field public static final int HORIZONTAL_GUIDELINE = 0; // 0x0
- field public static final int INVISIBLE = 4; // 0x4
- field public static final int LEFT = 1; // 0x1
- field public static final int MATCH_CONSTRAINT = 0; // 0x0
- field public static final int MATCH_CONSTRAINT_PERCENT = 2; // 0x2
- field public static final int MATCH_CONSTRAINT_SPREAD = 0; // 0x0
- field public static final int MATCH_CONSTRAINT_WRAP = 1; // 0x1
- field public static final int PARENT_ID = 0; // 0x0
- field public static final int RIGHT = 2; // 0x2
- field public static final int ROTATE_LEFT_OF_PORTRATE = 4; // 0x4
- field public static final int ROTATE_NONE = 0; // 0x0
- field public static final int ROTATE_PORTRATE_OF_LEFT = 2; // 0x2
- field public static final int ROTATE_PORTRATE_OF_RIGHT = 1; // 0x1
- field public static final int ROTATE_RIGHT_OF_PORTRATE = 3; // 0x3
- field public static final int START = 6; // 0x6
- field public static final int TOP = 3; // 0x3
- field public static final int UNSET = -1; // 0xffffffff
- field public static final int VERTICAL = 1; // 0x1
- field public static final int VERTICAL_GUIDELINE = 1; // 0x1
- field public static final int VISIBILITY_MODE_IGNORE = 1; // 0x1
- field public static final int VISIBILITY_MODE_NORMAL = 0; // 0x0
- field public static final int VISIBLE = 0; // 0x0
- field public static final int WRAP_CONTENT = -2; // 0xfffffffe
- field public String! derivedState;
- field public String! mIdString;
- field public int mRotate;
- }
-
- public static class ConstraintSet.Constraint {
- ctor public ConstraintSet.Constraint();
- method public void applyDelta(androidx.constraintlayout.widget.ConstraintSet.Constraint!);
- method public void applyTo(androidx.constraintlayout.widget.ConstraintLayout.LayoutParams!);
- method public androidx.constraintlayout.widget.ConstraintSet.Constraint! clone();
- method public void printDelta(String!);
- field public final androidx.constraintlayout.widget.ConstraintSet.Layout! layout;
- field public java.util.HashMap<java.lang.String!,androidx.constraintlayout.widget.ConstraintAttribute!>! mCustomConstraints;
- field public final androidx.constraintlayout.widget.ConstraintSet.Motion! motion;
- field public final androidx.constraintlayout.widget.ConstraintSet.PropertySet! propertySet;
- field public final androidx.constraintlayout.widget.ConstraintSet.Transform! transform;
- }
-
- public static class ConstraintSet.Layout {
- ctor public ConstraintSet.Layout();
- method public void copyFrom(androidx.constraintlayout.widget.ConstraintSet.Layout!);
- method public void dump(androidx.constraintlayout.motion.widget.MotionScene!, StringBuilder!);
- field public static final int UNSET = -1; // 0xffffffff
- field public static final int UNSET_GONE_MARGIN = -2147483648; // 0x80000000
- field public int baselineMargin;
- field public int baselineToBaseline;
- field public int baselineToBottom;
- field public int baselineToTop;
- field public int bottomMargin;
- field public int bottomToBottom;
- field public int bottomToTop;
- field public float circleAngle;
- field public int circleConstraint;
- field public int circleRadius;
- field public boolean constrainedHeight;
- field public boolean constrainedWidth;
- field public String! dimensionRatio;
- field public int editorAbsoluteX;
- field public int editorAbsoluteY;
- field public int endMargin;
- field public int endToEnd;
- field public int endToStart;
- field public int goneBaselineMargin;
- field public int goneBottomMargin;
- field public int goneEndMargin;
- field public int goneLeftMargin;
- field public int goneRightMargin;
- field public int goneStartMargin;
- field public int goneTopMargin;
- field public int guideBegin;
- field public int guideEnd;
- field public float guidePercent;
- field public boolean guidelineUseRtl;
- field public int heightDefault;
- field public int heightMax;
- field public int heightMin;
- field public float heightPercent;
- field public float horizontalBias;
- field public int horizontalChainStyle;
- field public float horizontalWeight;
- field public int leftMargin;
- field public int leftToLeft;
- field public int leftToRight;
- field public boolean mApply;
- field public boolean mBarrierAllowsGoneWidgets;
- field public int mBarrierDirection;
- field public int mBarrierMargin;
- field public String! mConstraintTag;
- field public int mHeight;
- field public int mHelperType;
- field public boolean mIsGuideline;
- field public boolean mOverride;
- field public String! mReferenceIdString;
- field public int[]! mReferenceIds;
- field public int mWidth;
- field public int mWrapBehavior;
- field public int orientation;
- field public int rightMargin;
- field public int rightToLeft;
- field public int rightToRight;
- field public int startMargin;
- field public int startToEnd;
- field public int startToStart;
- field public int topMargin;
- field public int topToBottom;
- field public int topToTop;
- field public float verticalBias;
- field public int verticalChainStyle;
- field public float verticalWeight;
- field public int widthDefault;
- field public int widthMax;
- field public int widthMin;
- field public float widthPercent;
- }
-
- public static class ConstraintSet.Motion {
- ctor public ConstraintSet.Motion();
- method public void copyFrom(androidx.constraintlayout.widget.ConstraintSet.Motion!);
- field public int mAnimateCircleAngleTo;
- field public int mAnimateRelativeTo;
- field public boolean mApply;
- field public int mDrawPath;
- field public float mMotionStagger;
- field public int mPathMotionArc;
- field public float mPathRotate;
- field public int mPolarRelativeTo;
- field public int mQuantizeInterpolatorID;
- field public String! mQuantizeInterpolatorString;
- field public int mQuantizeInterpolatorType;
- field public float mQuantizeMotionPhase;
- field public int mQuantizeMotionSteps;
- field public String! mTransitionEasing;
- }
-
- public static class ConstraintSet.PropertySet {
- ctor public ConstraintSet.PropertySet();
- method public void copyFrom(androidx.constraintlayout.widget.ConstraintSet.PropertySet!);
- field public float alpha;
- field public boolean mApply;
- field public float mProgress;
- field public int mVisibilityMode;
- field public int visibility;
- }
-
- public static class ConstraintSet.Transform {
- ctor public ConstraintSet.Transform();
- method public void copyFrom(androidx.constraintlayout.widget.ConstraintSet.Transform!);
- field public boolean applyElevation;
- field public float elevation;
- field public boolean mApply;
- field public float rotation;
- field public float rotationX;
- field public float rotationY;
- field public float scaleX;
- field public float scaleY;
- field public int transformPivotTarget;
- field public float transformPivotX;
- field public float transformPivotY;
- field public float translationX;
- field public float translationY;
- field public float translationZ;
- }
-
- public class Constraints extends android.view.ViewGroup {
- ctor public Constraints(android.content.Context!);
- ctor public Constraints(android.content.Context!, android.util.AttributeSet!);
- ctor public Constraints(android.content.Context!, android.util.AttributeSet!, int);
- method protected androidx.constraintlayout.widget.Constraints.LayoutParams! generateDefaultLayoutParams();
- method public androidx.constraintlayout.widget.Constraints.LayoutParams! generateLayoutParams(android.util.AttributeSet!);
- method public androidx.constraintlayout.widget.ConstraintSet! getConstraintSet();
- field public static final String TAG = "Constraints";
- }
-
- public static class Constraints.LayoutParams extends androidx.constraintlayout.widget.ConstraintLayout.LayoutParams {
- ctor public Constraints.LayoutParams(int, int);
- ctor public Constraints.LayoutParams(androidx.constraintlayout.widget.Constraints.LayoutParams!);
- ctor public Constraints.LayoutParams(android.content.Context!, android.util.AttributeSet!);
- field public float alpha;
- field public boolean applyElevation;
- field public float elevation;
- field public float rotation;
- field public float rotationX;
- field public float rotationY;
- field public float scaleX;
- field public float scaleY;
- field public float transformPivotX;
- field public float transformPivotY;
- field public float translationX;
- field public float translationY;
- field public float translationZ;
- }
-
- public abstract class ConstraintsChangedListener {
- ctor public ConstraintsChangedListener();
- method public void postLayoutChange(int, int);
- method public void preLayoutChange(int, int);
- }
-
- public class Group extends androidx.constraintlayout.widget.ConstraintHelper {
- ctor public Group(android.content.Context!);
- ctor public Group(android.content.Context!, android.util.AttributeSet!);
- ctor public Group(android.content.Context!, android.util.AttributeSet!, int);
- method public void onAttachedToWindow();
- }
-
- public class Guideline extends android.view.View {
- ctor public Guideline(android.content.Context!);
- ctor public Guideline(android.content.Context!, android.util.AttributeSet!);
- ctor public Guideline(android.content.Context!, android.util.AttributeSet!, int);
- ctor public Guideline(android.content.Context!, android.util.AttributeSet!, int, int);
- method public void setFilterRedundantCalls(boolean);
- method public void setGuidelineBegin(int);
- method public void setGuidelineEnd(int);
- method public void setGuidelinePercent(float);
- }
-
- public class Placeholder extends android.view.View {
- ctor public Placeholder(android.content.Context!);
- ctor public Placeholder(android.content.Context!, android.util.AttributeSet!);
- ctor public Placeholder(android.content.Context!, android.util.AttributeSet!, int);
- ctor public Placeholder(android.content.Context!, android.util.AttributeSet!, int, int);
- method public android.view.View! getContent();
- method public int getEmptyVisibility();
- method public void onDraw(android.graphics.Canvas);
- method public void setContentId(int);
- method public void setEmptyVisibility(int);
- method public void updatePostMeasure(androidx.constraintlayout.widget.ConstraintLayout!);
- method public void updatePreLayout(androidx.constraintlayout.widget.ConstraintLayout!);
- }
-
- public class ReactiveGuide extends android.view.View implements androidx.constraintlayout.widget.SharedValues.SharedValuesListener {
- ctor public ReactiveGuide(android.content.Context!);
- ctor public ReactiveGuide(android.content.Context!, android.util.AttributeSet!);
- ctor public ReactiveGuide(android.content.Context!, android.util.AttributeSet!, int);
- ctor public ReactiveGuide(android.content.Context!, android.util.AttributeSet!, int, int);
- method public int getApplyToConstraintSetId();
- method public int getAttributeId();
- method public boolean isAnimatingChange();
- method public void onNewValue(int, int, int);
- method public void setAnimateChange(boolean);
- method public void setApplyToConstraintSetId(int);
- method public void setAttributeId(int);
- method public void setGuidelineBegin(int);
- method public void setGuidelineEnd(int);
- method public void setGuidelinePercent(float);
- }
-
- public class SharedValues {
- ctor public SharedValues();
- method public void addListener(int, androidx.constraintlayout.widget.SharedValues.SharedValuesListener!);
- method public void clearListeners();
- method public void fireNewValue(int, int);
- method public int getValue(int);
- method public void removeListener(int, androidx.constraintlayout.widget.SharedValues.SharedValuesListener!);
- method public void removeListener(androidx.constraintlayout.widget.SharedValues.SharedValuesListener!);
- field public static final int UNSET = -1; // 0xffffffff
- }
-
- public static interface SharedValues.SharedValuesListener {
- method public void onNewValue(int, int, int);
- }
-
- public class StateSet {
- ctor public StateSet(android.content.Context!, org.xmlpull.v1.XmlPullParser!);
- method public int convertToConstraintSet(int, int, float, float);
- method public boolean needsToChange(int, float, float);
- method public void setOnConstraintsChanged(androidx.constraintlayout.widget.ConstraintsChangedListener!);
- method public int stateGetConstraintID(int, int, int);
- method public int updateConstraints(int, int, float, float);
- field public static final String TAG = "ConstraintLayoutStates";
- }
-
- public abstract class VirtualLayout extends androidx.constraintlayout.widget.ConstraintHelper {
- ctor public VirtualLayout(android.content.Context!);
- ctor public VirtualLayout(android.content.Context!, android.util.AttributeSet!);
- ctor public VirtualLayout(android.content.Context!, android.util.AttributeSet!, int);
- method public void onAttachedToWindow();
- method public void onMeasure(androidx.constraintlayout.core.widgets.VirtualLayout!, int, int);
- }
-
-}
-
diff --git a/constraintlayout/constraintlayout/api/restricted_current.txt b/constraintlayout/constraintlayout/api/restricted_current.txt
index 469ddb0..70b97b6 100644
--- a/constraintlayout/constraintlayout/api/restricted_current.txt
+++ b/constraintlayout/constraintlayout/api/restricted_current.txt
@@ -153,8 +153,8 @@
method public void config(float, float, float, float, float, float);
method public String! debug(String!, float);
method public float getInterpolation(float);
- method public float getVelocity(float);
method public float getVelocity();
+ method public float getVelocity(float);
method public boolean isStopped();
method public void springConfig(float, float, float, float, float, float, float, int);
}
@@ -247,9 +247,9 @@
method public static String! getLoc();
method public static String! getLocation();
method public static String! getLocation2();
- method public static String! getName(android.view.View!);
method public static String! getName(android.content.Context!, int);
method public static String! getName(android.content.Context!, int[]!);
+ method public static String! getName(android.view.View!);
method public static String! getState(androidx.constraintlayout.motion.widget.MotionLayout!, int);
method public static String! getState(androidx.constraintlayout.motion.widget.MotionLayout!, int, int);
method public static void logStack(String!, String!, int);
@@ -498,8 +498,8 @@
method public void onTransitionCompleted(androidx.constraintlayout.motion.widget.MotionLayout!, int);
method public void onTransitionStarted(androidx.constraintlayout.motion.widget.MotionLayout!, int, int);
method public void onTransitionTrigger(androidx.constraintlayout.motion.widget.MotionLayout!, int, boolean, float);
- method public void setProgress(float);
method public void setProgress(android.view.View!, float);
+ method public void setProgress(float);
field protected android.view.View![]! views;
}
@@ -553,8 +553,8 @@
method public void jumpToState(int);
method protected androidx.constraintlayout.motion.widget.MotionLayout.MotionTracker! obtainVelocityTracker();
method public void onNestedPreScroll(android.view.View, int, int, int[], int);
- method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]!);
method public void onNestedScroll(android.view.View, int, int, int, int, int);
+ method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]!);
method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
method public void onStopNestedScroll(android.view.View, int);
@@ -569,12 +569,12 @@
method public void setInterpolatedProgress(float);
method public void setOnHide(float);
method public void setOnShow(float);
- method public void setProgress(float, float);
method public void setProgress(float);
+ method public void setProgress(float, float);
method public void setScene(androidx.constraintlayout.motion.widget.MotionScene!);
- method public void setTransition(int, int);
- method public void setTransition(int);
method protected void setTransition(androidx.constraintlayout.motion.widget.MotionScene.Transition!);
+ method public void setTransition(int);
+ method public void setTransition(int, int);
method public void setTransitionDuration(int);
method public void setTransitionListener(androidx.constraintlayout.motion.widget.MotionLayout.TransitionListener!);
method public void setTransitionState(android.os.Bundle!);
@@ -588,8 +588,8 @@
method public void transitionToState(int, int);
method public void transitionToState(int, int, int);
method public void transitionToState(int, int, int, int);
- method public void updateState(int, androidx.constraintlayout.widget.ConstraintSet!);
method public void updateState();
+ method public void updateState(int, androidx.constraintlayout.widget.ConstraintSet!);
method public void updateStateAnimate(int, androidx.constraintlayout.widget.ConstraintSet!, int);
method public void viewTransition(int, android.view.View!...);
field public static final int DEBUG_SHOW_NONE = 0; // 0x0
@@ -672,8 +672,8 @@
public static class MotionScene.Transition {
ctor public MotionScene.Transition(int, androidx.constraintlayout.motion.widget.MotionScene!, int, int);
method public void addKeyFrame(androidx.constraintlayout.motion.widget.KeyFrames!);
- method public void addOnClick(int, int);
method public void addOnClick(android.content.Context!, org.xmlpull.v1.XmlPullParser!);
+ method public void addOnClick(int, int);
method public String! debugString(android.content.Context!);
method public int getAutoTransition();
method public int getDuration();
@@ -991,9 +991,9 @@
}
public class ConstraintAttribute {
+ ctor public ConstraintAttribute(androidx.constraintlayout.widget.ConstraintAttribute!, Object!);
ctor public ConstraintAttribute(String!, androidx.constraintlayout.widget.ConstraintAttribute.AttributeType!);
ctor public ConstraintAttribute(String!, androidx.constraintlayout.widget.ConstraintAttribute.AttributeType!, Object!, boolean);
- ctor public ConstraintAttribute(androidx.constraintlayout.widget.ConstraintAttribute!, Object!);
method public void applyCustom(android.view.View!);
method public boolean diff(androidx.constraintlayout.widget.ConstraintAttribute!);
method public static java.util.HashMap<java.lang.String!,androidx.constraintlayout.widget.ConstraintAttribute!>! extractAttributes(java.util.HashMap<java.lang.String!,androidx.constraintlayout.widget.ConstraintAttribute!>!, android.view.View!);
@@ -1036,8 +1036,8 @@
ctor public ConstraintHelper(android.content.Context!, android.util.AttributeSet!, int);
method public void addView(android.view.View!);
method public void applyHelperParams();
- method protected void applyLayoutFeatures(androidx.constraintlayout.widget.ConstraintLayout!);
method protected void applyLayoutFeatures();
+ method protected void applyLayoutFeatures(androidx.constraintlayout.widget.ConstraintLayout!);
method protected void applyLayoutFeaturesInConstraintSet(androidx.constraintlayout.widget.ConstraintLayout!);
method public boolean containsId(int);
method public int[]! getReferencedIds();
@@ -1056,8 +1056,8 @@
method public void updatePostLayout(androidx.constraintlayout.widget.ConstraintLayout!);
method public void updatePostMeasure(androidx.constraintlayout.widget.ConstraintLayout!);
method public void updatePreDraw(androidx.constraintlayout.widget.ConstraintLayout!);
- method public void updatePreLayout(androidx.constraintlayout.widget.ConstraintLayout!);
method public void updatePreLayout(androidx.constraintlayout.core.widgets.ConstraintWidgetContainer!, androidx.constraintlayout.core.widgets.Helper!, android.util.SparseArray<androidx.constraintlayout.core.widgets.ConstraintWidget!>!);
+ method public void updatePreLayout(androidx.constraintlayout.widget.ConstraintLayout!);
method public void validateParams();
field protected static final String CHILD_TAG = "CONSTRAINT_LAYOUT_HELPER_CHILD";
field protected int mCount;
@@ -1114,8 +1114,8 @@
}
public static class ConstraintLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
- ctor public ConstraintLayout.LayoutParams(android.view.ViewGroup.LayoutParams!);
ctor public ConstraintLayout.LayoutParams(android.content.Context!, android.util.AttributeSet!);
+ ctor public ConstraintLayout.LayoutParams(android.view.ViewGroup.LayoutParams!);
ctor public ConstraintLayout.LayoutParams(int, int);
method public String! getConstraintTag();
method public androidx.constraintlayout.core.widgets.ConstraintWidget! getConstraintWidget();
@@ -1242,12 +1242,12 @@
method public androidx.constraintlayout.widget.ConstraintProperties! alpha(float);
method public void apply();
method public androidx.constraintlayout.widget.ConstraintProperties! center(int, int, int, int, int, int, float);
- method public androidx.constraintlayout.widget.ConstraintProperties! centerHorizontally(int, int, int, int, int, int, float);
method public androidx.constraintlayout.widget.ConstraintProperties! centerHorizontally(int);
- method public androidx.constraintlayout.widget.ConstraintProperties! centerHorizontallyRtl(int, int, int, int, int, int, float);
+ method public androidx.constraintlayout.widget.ConstraintProperties! centerHorizontally(int, int, int, int, int, int, float);
method public androidx.constraintlayout.widget.ConstraintProperties! centerHorizontallyRtl(int);
- method public androidx.constraintlayout.widget.ConstraintProperties! centerVertically(int, int, int, int, int, int, float);
+ method public androidx.constraintlayout.widget.ConstraintProperties! centerHorizontallyRtl(int, int, int, int, int, int, float);
method public androidx.constraintlayout.widget.ConstraintProperties! centerVertically(int);
+ method public androidx.constraintlayout.widget.ConstraintProperties! centerVertically(int, int, int, int, int, int, float);
method public androidx.constraintlayout.widget.ConstraintProperties! connect(int, int, int, int);
method public androidx.constraintlayout.widget.ConstraintProperties! constrainDefaultHeight(int);
method public androidx.constraintlayout.widget.ConstraintProperties! constrainDefaultWidth(int);
@@ -1315,20 +1315,20 @@
method public void applyToWithoutCustom(androidx.constraintlayout.widget.ConstraintLayout!);
method public static androidx.constraintlayout.widget.ConstraintSet.Constraint! buildDelta(android.content.Context!, org.xmlpull.v1.XmlPullParser!);
method public void center(int, int, int, int, int, int, int, float);
- method public void centerHorizontally(int, int, int, int, int, int, int, float);
method public void centerHorizontally(int, int);
- method public void centerHorizontallyRtl(int, int, int, int, int, int, int, float);
+ method public void centerHorizontally(int, int, int, int, int, int, int, float);
method public void centerHorizontallyRtl(int, int);
- method public void centerVertically(int, int, int, int, int, int, int, float);
+ method public void centerHorizontallyRtl(int, int, int, int, int, int, int, float);
method public void centerVertically(int, int);
+ method public void centerVertically(int, int, int, int, int, int, int, float);
method public void clear(int);
method public void clear(int, int);
method public void clone(android.content.Context!, int);
- method public void clone(androidx.constraintlayout.widget.ConstraintSet!);
method public void clone(androidx.constraintlayout.widget.ConstraintLayout!);
method public void clone(androidx.constraintlayout.widget.Constraints!);
- method public void connect(int, int, int, int, int);
+ method public void clone(androidx.constraintlayout.widget.ConstraintSet!);
method public void connect(int, int, int, int);
+ method public void connect(int, int, int, int, int);
method public void constrainCircle(int, int, int, float);
method public void constrainDefaultHeight(int, int);
method public void constrainDefaultWidth(int, int);
@@ -1368,8 +1368,8 @@
method public void parseFloatAttributes(androidx.constraintlayout.widget.ConstraintSet.Constraint!, String!);
method public void parseIntAttributes(androidx.constraintlayout.widget.ConstraintSet.Constraint!, String!);
method public void parseStringAttributes(androidx.constraintlayout.widget.ConstraintSet.Constraint!, String!);
- method public void readFallback(androidx.constraintlayout.widget.ConstraintSet!);
method public void readFallback(androidx.constraintlayout.widget.ConstraintLayout!);
+ method public void readFallback(androidx.constraintlayout.widget.ConstraintSet!);
method public void removeAttribute(String!);
method public void removeFromHorizontalChain(int);
method public void removeFromVerticalChain(int);
@@ -1602,9 +1602,9 @@
}
public static class Constraints.LayoutParams extends androidx.constraintlayout.widget.ConstraintLayout.LayoutParams {
- ctor public Constraints.LayoutParams(int, int);
- ctor public Constraints.LayoutParams(androidx.constraintlayout.widget.Constraints.LayoutParams!);
ctor public Constraints.LayoutParams(android.content.Context!, android.util.AttributeSet!);
+ ctor public Constraints.LayoutParams(androidx.constraintlayout.widget.Constraints.LayoutParams!);
+ ctor public Constraints.LayoutParams(int, int);
field public float alpha;
field public boolean applyElevation;
field public float elevation;
@@ -1681,8 +1681,8 @@
method public void clearListeners();
method public void fireNewValue(int, int);
method public int getValue(int);
- method public void removeListener(int, androidx.constraintlayout.widget.SharedValues.SharedValuesListener!);
method public void removeListener(androidx.constraintlayout.widget.SharedValues.SharedValuesListener!);
+ method public void removeListener(int, androidx.constraintlayout.widget.SharedValues.SharedValuesListener!);
field public static final int UNSET = -1; // 0xffffffff
}
diff --git a/constraintlayout/constraintlayout/build.gradle b/constraintlayout/constraintlayout/build.gradle
index 060d756..52a3d6e 100644
--- a/constraintlayout/constraintlayout/build.gradle
+++ b/constraintlayout/constraintlayout/build.gradle
@@ -54,7 +54,7 @@
}
androidx {
- name = "Android ConstraintLayout Library"
+ name = "ConstraintLayout"
type = LibraryType.PUBLISHED_LIBRARY
mavenVersion = LibraryVersions.CONSTRAINTLAYOUT
inceptionYear = "2022"
diff --git a/contentpager/contentpager/api/public_plus_experimental_current.txt b/contentpager/contentpager/api/public_plus_experimental_current.txt
deleted file mode 100644
index 8064ad2..0000000
--- a/contentpager/contentpager/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,55 +0,0 @@
-// Signature format: 4.0
-package androidx.contentpager.content {
-
- public class ContentPager {
- ctor public ContentPager(android.content.ContentResolver!, androidx.contentpager.content.ContentPager.QueryRunner!);
- ctor public ContentPager(android.content.ContentResolver, androidx.contentpager.content.ContentPager.QueryRunner, int);
- method public static android.os.Bundle createArgs(int, int);
- method @MainThread public androidx.contentpager.content.Query query(@RequiresPermission.Read android.net.Uri, String![]?, android.os.Bundle, android.os.CancellationSignal?, androidx.contentpager.content.ContentPager.ContentCallback);
- method @MainThread public void reset();
- field public static final int CURSOR_DISPOSITION_COPIED = 1; // 0x1
- field public static final int CURSOR_DISPOSITION_PAGED = 2; // 0x2
- field public static final int CURSOR_DISPOSITION_REPAGED = 3; // 0x3
- field public static final int CURSOR_DISPOSITION_WRAPPED = 4; // 0x4
- field public static final String EXTRA_HONORED_ARGS = "android.content.extra.HONORED_ARGS";
- field public static final String EXTRA_REQUESTED_LIMIT = "android-support:extra-ignored-limit";
- field public static final String EXTRA_SUGGESTED_LIMIT = "android-support:extra-suggested-limit";
- field public static final String EXTRA_TOTAL_COUNT = "android.content.extra.TOTAL_COUNT";
- field public static final String QUERY_ARG_LIMIT = "android:query-arg-limit";
- field public static final String QUERY_ARG_OFFSET = "android:query-arg-offset";
- }
-
- public static interface ContentPager.ContentCallback {
- method @MainThread public void onCursorReady(androidx.contentpager.content.Query, android.database.Cursor?);
- }
-
- @IntDef({androidx.contentpager.content.ContentPager.CURSOR_DISPOSITION_COPIED, androidx.contentpager.content.ContentPager.CURSOR_DISPOSITION_PAGED, androidx.contentpager.content.ContentPager.CURSOR_DISPOSITION_REPAGED, androidx.contentpager.content.ContentPager.CURSOR_DISPOSITION_WRAPPED}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ContentPager.CursorDisposition {
- }
-
- public static interface ContentPager.QueryRunner {
- method public void cancel(androidx.contentpager.content.Query);
- method public boolean isRunning(androidx.contentpager.content.Query);
- method public void query(androidx.contentpager.content.Query, androidx.contentpager.content.ContentPager.QueryRunner.Callback);
- }
-
- public static interface ContentPager.QueryRunner.Callback {
- method public void onQueryFinished(androidx.contentpager.content.Query, android.database.Cursor?);
- method public android.database.Cursor? runQueryInBackground(androidx.contentpager.content.Query);
- }
-
- public final class LoaderQueryRunner implements androidx.contentpager.content.ContentPager.QueryRunner {
- ctor public LoaderQueryRunner(android.content.Context, android.app.LoaderManager);
- method public void cancel(androidx.contentpager.content.Query);
- method public boolean isRunning(androidx.contentpager.content.Query);
- method public void query(androidx.contentpager.content.Query, androidx.contentpager.content.ContentPager.QueryRunner.Callback);
- }
-
- public final class Query {
- method public int getId();
- method public int getLimit();
- method public int getOffset();
- method public android.net.Uri getUri();
- }
-
-}
-
diff --git a/contentpager/contentpager/build.gradle b/contentpager/contentpager/build.gradle
index d2624f7..81252bf 100644
--- a/contentpager/contentpager/build.gradle
+++ b/contentpager/contentpager/build.gradle
@@ -35,7 +35,7 @@
}
androidx {
- name = "Android Support Content"
+ name = "Content"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2017"
description = "Library providing support for paging across content exposed via a ContentProvider. Use of this library allows a client to avoid expensive interprocess \"cursor window swaps\" on the UI thread."
diff --git a/coordinatorlayout/coordinatorlayout/api/current.txt b/coordinatorlayout/coordinatorlayout/api/current.txt
index e7fe0b5..6493f72 100644
--- a/coordinatorlayout/coordinatorlayout/api/current.txt
+++ b/coordinatorlayout/coordinatorlayout/api/current.txt
@@ -76,10 +76,10 @@
}
public static class CoordinatorLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
- ctor public CoordinatorLayout.LayoutParams(int, int);
- ctor public CoordinatorLayout.LayoutParams(androidx.coordinatorlayout.widget.CoordinatorLayout.LayoutParams);
- ctor public CoordinatorLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
ctor public CoordinatorLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public CoordinatorLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public CoordinatorLayout.LayoutParams(androidx.coordinatorlayout.widget.CoordinatorLayout.LayoutParams);
+ ctor public CoordinatorLayout.LayoutParams(int, int);
method @IdRes public int getAnchorId();
method public androidx.coordinatorlayout.widget.CoordinatorLayout.Behavior? getBehavior();
method public void setAnchorId(@IdRes int);
diff --git a/coordinatorlayout/coordinatorlayout/api/public_plus_experimental_current.txt b/coordinatorlayout/coordinatorlayout/api/public_plus_experimental_current.txt
deleted file mode 100644
index e7fe0b5..0000000
--- a/coordinatorlayout/coordinatorlayout/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,101 +0,0 @@
-// Signature format: 4.0
-package androidx.coordinatorlayout.widget {
-
- public class CoordinatorLayout extends android.view.ViewGroup implements androidx.core.view.NestedScrollingParent2 androidx.core.view.NestedScrollingParent3 {
- ctor public CoordinatorLayout(android.content.Context);
- ctor public CoordinatorLayout(android.content.Context, android.util.AttributeSet?);
- ctor public CoordinatorLayout(android.content.Context, android.util.AttributeSet?, @AttrRes int);
- method public void dispatchDependentViewsChanged(android.view.View);
- method public boolean doViewsOverlap(android.view.View, android.view.View);
- method protected androidx.coordinatorlayout.widget.CoordinatorLayout.LayoutParams! generateDefaultLayoutParams();
- method public androidx.coordinatorlayout.widget.CoordinatorLayout.LayoutParams! generateLayoutParams(android.util.AttributeSet!);
- method protected androidx.coordinatorlayout.widget.CoordinatorLayout.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
- method public java.util.List<android.view.View!> getDependencies(android.view.View);
- method public java.util.List<android.view.View!> getDependents(android.view.View);
- method public android.graphics.drawable.Drawable? getStatusBarBackground();
- method public boolean isPointInChildBounds(android.view.View, int, int);
- method public void onAttachedToWindow();
- method public void onDetachedFromWindow();
- method public void onDraw(android.graphics.Canvas);
- method public void onLayoutChild(android.view.View, int);
- method public void onMeasureChild(android.view.View, int, int, int, int);
- method public void onNestedPreScroll(android.view.View, int, int, int[], int);
- method public void onNestedScroll(android.view.View, int, int, int, int, int);
- method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]);
- method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
- method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
- method public void onStopNestedScroll(android.view.View, int);
- method public void setStatusBarBackground(android.graphics.drawable.Drawable?);
- method public void setStatusBarBackgroundColor(@ColorInt int);
- method public void setStatusBarBackgroundResource(@DrawableRes int);
- }
-
- public static interface CoordinatorLayout.AttachedBehavior {
- method public androidx.coordinatorlayout.widget.CoordinatorLayout.Behavior getBehavior();
- }
-
- public abstract static class CoordinatorLayout.Behavior<V extends android.view.View> {
- ctor public CoordinatorLayout.Behavior();
- ctor public CoordinatorLayout.Behavior(android.content.Context, android.util.AttributeSet?);
- method public boolean blocksInteractionBelow(androidx.coordinatorlayout.widget.CoordinatorLayout, V);
- method public boolean getInsetDodgeRect(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.graphics.Rect);
- method @ColorInt public int getScrimColor(androidx.coordinatorlayout.widget.CoordinatorLayout, V);
- method @FloatRange(from=0, to=1) public float getScrimOpacity(androidx.coordinatorlayout.widget.CoordinatorLayout, V);
- method public static Object? getTag(android.view.View);
- method public boolean layoutDependsOn(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View);
- method public androidx.core.view.WindowInsetsCompat onApplyWindowInsets(androidx.coordinatorlayout.widget.CoordinatorLayout, V, androidx.core.view.WindowInsetsCompat);
- method public void onAttachedToLayoutParams(androidx.coordinatorlayout.widget.CoordinatorLayout.LayoutParams);
- method public boolean onDependentViewChanged(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View);
- method public void onDependentViewRemoved(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View);
- method public void onDetachedFromLayoutParams();
- method public boolean onInterceptTouchEvent(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.MotionEvent);
- method public boolean onLayoutChild(androidx.coordinatorlayout.widget.CoordinatorLayout, V, int);
- method public boolean onMeasureChild(androidx.coordinatorlayout.widget.CoordinatorLayout, V, int, int, int, int);
- method public boolean onNestedFling(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View, float, float, boolean);
- method public boolean onNestedPreFling(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View, float, float);
- method @Deprecated public void onNestedPreScroll(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View, int, int, int[]);
- method public void onNestedPreScroll(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View, int, int, int[], int);
- method @Deprecated public void onNestedScroll(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View, int, int, int, int);
- method @Deprecated public void onNestedScroll(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View, int, int, int, int, int);
- method public void onNestedScroll(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View, int, int, int, int, int, int[]);
- method @Deprecated public void onNestedScrollAccepted(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View, android.view.View, int);
- method public void onNestedScrollAccepted(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View, android.view.View, int, int);
- method public boolean onRequestChildRectangleOnScreen(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.graphics.Rect, boolean);
- method public void onRestoreInstanceState(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.os.Parcelable);
- method public android.os.Parcelable? onSaveInstanceState(androidx.coordinatorlayout.widget.CoordinatorLayout, V);
- method @Deprecated public boolean onStartNestedScroll(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View, android.view.View, int);
- method public boolean onStartNestedScroll(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View, android.view.View, int, int);
- method @Deprecated public void onStopNestedScroll(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View);
- method public void onStopNestedScroll(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.View, int);
- method public boolean onTouchEvent(androidx.coordinatorlayout.widget.CoordinatorLayout, V, android.view.MotionEvent);
- method public static void setTag(android.view.View, Object?);
- }
-
- @Deprecated @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public static @interface CoordinatorLayout.DefaultBehavior {
- method @Deprecated public abstract Class<? extends androidx.coordinatorlayout.widget.CoordinatorLayout.Behavior> value();
- }
-
- public static class CoordinatorLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
- ctor public CoordinatorLayout.LayoutParams(int, int);
- ctor public CoordinatorLayout.LayoutParams(androidx.coordinatorlayout.widget.CoordinatorLayout.LayoutParams);
- ctor public CoordinatorLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
- ctor public CoordinatorLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
- method @IdRes public int getAnchorId();
- method public androidx.coordinatorlayout.widget.CoordinatorLayout.Behavior? getBehavior();
- method public void setAnchorId(@IdRes int);
- method public void setBehavior(androidx.coordinatorlayout.widget.CoordinatorLayout.Behavior?);
- field public int anchorGravity;
- field public int dodgeInsetEdges;
- field public int gravity;
- field public int insetEdge;
- field public int keyline;
- }
-
- protected static class CoordinatorLayout.SavedState extends androidx.customview.view.AbsSavedState {
- ctor public CoordinatorLayout.SavedState(android.os.Parcel!, ClassLoader!);
- ctor public CoordinatorLayout.SavedState(android.os.Parcelable!);
- field public static final android.os.Parcelable.Creator<androidx.coordinatorlayout.widget.CoordinatorLayout.SavedState!>! CREATOR;
- }
-
-}
-
diff --git a/coordinatorlayout/coordinatorlayout/api/restricted_current.txt b/coordinatorlayout/coordinatorlayout/api/restricted_current.txt
index 15cb18b..ba674f2 100644
--- a/coordinatorlayout/coordinatorlayout/api/restricted_current.txt
+++ b/coordinatorlayout/coordinatorlayout/api/restricted_current.txt
@@ -80,10 +80,10 @@
}
public static class CoordinatorLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
- ctor public CoordinatorLayout.LayoutParams(int, int);
- ctor public CoordinatorLayout.LayoutParams(androidx.coordinatorlayout.widget.CoordinatorLayout.LayoutParams);
- ctor public CoordinatorLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
ctor public CoordinatorLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public CoordinatorLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public CoordinatorLayout.LayoutParams(androidx.coordinatorlayout.widget.CoordinatorLayout.LayoutParams);
+ ctor public CoordinatorLayout.LayoutParams(int, int);
method @IdRes public int getAnchorId();
method public androidx.coordinatorlayout.widget.CoordinatorLayout.Behavior? getBehavior();
method public void setAnchorId(@IdRes int);
diff --git a/coordinatorlayout/coordinatorlayout/build.gradle b/coordinatorlayout/coordinatorlayout/build.gradle
index bc110f8..9578993 100644
--- a/coordinatorlayout/coordinatorlayout/build.gradle
+++ b/coordinatorlayout/coordinatorlayout/build.gradle
@@ -48,7 +48,7 @@
}
androidx {
- name = "Android Support Library Coordinator Layout"
+ name = "Coordinator Layout"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2011"
description = "The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later."
diff --git a/core/core-animation-testing/api/public_plus_experimental_1.0.0-beta01.txt b/core/core-animation-testing/api/public_plus_experimental_1.0.0-beta01.txt
deleted file mode 100644
index 348efb2..0000000
--- a/core/core-animation-testing/api/public_plus_experimental_1.0.0-beta01.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-// Signature format: 4.0
-package androidx.core.animation {
-
- public final class AnimatorTestRule implements org.junit.rules.TestRule {
- ctor public AnimatorTestRule();
- method public void advanceTimeBy(long);
- method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement, org.junit.runner.Description);
- method public long getCurrentTime();
- }
-
-}
-
diff --git a/core/core-animation-testing/api/public_plus_experimental_current.txt b/core/core-animation-testing/api/public_plus_experimental_current.txt
deleted file mode 100644
index 348efb2..0000000
--- a/core/core-animation-testing/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-// Signature format: 4.0
-package androidx.core.animation {
-
- public final class AnimatorTestRule implements org.junit.rules.TestRule {
- ctor public AnimatorTestRule();
- method public void advanceTimeBy(long);
- method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement, org.junit.runner.Description);
- method public long getCurrentTime();
- }
-
-}
-
diff --git a/core/core-animation-testing/build.gradle b/core/core-animation-testing/build.gradle
index 046bc43..78bb2e4 100644
--- a/core/core-animation-testing/build.gradle
+++ b/core/core-animation-testing/build.gradle
@@ -29,7 +29,7 @@
}
androidx {
- name = "Android Support Animator Testing"
+ name = "Animation Testing"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.CORE_ANIMATION_TESTING
inceptionYear = "2018"
diff --git a/core/core-animation/api/1.0.0-beta02.txt b/core/core-animation/api/1.0.0-beta02.txt
index 3477c13..71e774e 100644
--- a/core/core-animation/api/1.0.0-beta02.txt
+++ b/core/core-animation/api/1.0.0-beta02.txt
@@ -8,8 +8,8 @@
public class AccelerateInterpolator implements androidx.core.animation.Interpolator {
ctor public AccelerateInterpolator();
- ctor public AccelerateInterpolator(float);
ctor public AccelerateInterpolator(android.content.Context, android.util.AttributeSet);
+ ctor public AccelerateInterpolator(float);
method @FloatRange(from=0, to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
}
@@ -47,11 +47,11 @@
public static interface Animator.AnimatorListener {
method public void onAnimationCancel(androidx.core.animation.Animator);
- method public default void onAnimationEnd(androidx.core.animation.Animator, boolean);
method public void onAnimationEnd(androidx.core.animation.Animator);
+ method public default void onAnimationEnd(androidx.core.animation.Animator, boolean);
method public void onAnimationRepeat(androidx.core.animation.Animator);
- method public default void onAnimationStart(androidx.core.animation.Animator, boolean);
method public void onAnimationStart(androidx.core.animation.Animator);
+ method public default void onAnimationStart(androidx.core.animation.Animator, boolean);
}
public static interface Animator.AnimatorPauseListener {
@@ -109,16 +109,16 @@
public class AnticipateInterpolator implements androidx.core.animation.Interpolator {
ctor public AnticipateInterpolator();
- ctor public AnticipateInterpolator(float);
ctor public AnticipateInterpolator(android.content.Context, android.util.AttributeSet?);
+ ctor public AnticipateInterpolator(float);
method @FloatRange(to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
}
public class AnticipateOvershootInterpolator implements androidx.core.animation.Interpolator {
ctor public AnticipateOvershootInterpolator();
+ ctor public AnticipateOvershootInterpolator(android.content.Context, android.util.AttributeSet?);
ctor public AnticipateOvershootInterpolator(float);
ctor public AnticipateOvershootInterpolator(float, float);
- ctor public AnticipateOvershootInterpolator(android.content.Context, android.util.AttributeSet?);
method @FloatRange(to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
}
@@ -139,15 +139,15 @@
}
public class CycleInterpolator implements androidx.core.animation.Interpolator {
- ctor public CycleInterpolator(float);
ctor public CycleInterpolator(android.content.Context, android.util.AttributeSet?);
+ ctor public CycleInterpolator(float);
method @FloatRange(from=0, to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
}
public class DecelerateInterpolator implements androidx.core.animation.Interpolator {
ctor public DecelerateInterpolator();
- ctor public DecelerateInterpolator(float);
ctor public DecelerateInterpolator(android.content.Context, android.util.AttributeSet?);
+ ctor public DecelerateInterpolator(float);
method @FloatRange(from=0, to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
}
@@ -163,8 +163,8 @@
}
public abstract class FloatProperty<T> extends android.util.Property<T,java.lang.Float> {
- ctor public FloatProperty(String);
ctor public FloatProperty();
+ ctor public FloatProperty(String);
method public final void set(T, Float);
method public abstract void setValue(T, float);
}
@@ -181,8 +181,8 @@
}
public abstract class IntProperty<T> extends android.util.Property<T,java.lang.Integer> {
- ctor public IntProperty(String);
ctor public IntProperty();
+ ctor public IntProperty(String);
method public final void set(T, Integer);
method public abstract void setValue(T, int);
}
@@ -199,12 +199,12 @@
method public Class<?> getType();
method public abstract T? getValue();
method public boolean hasValue();
- method public static androidx.core.animation.Keyframe<java.lang.Float!> ofFloat(@FloatRange(from=0, to=1) float, float);
method public static androidx.core.animation.Keyframe<java.lang.Float!> ofFloat(@FloatRange(from=0, to=1) float);
- method public static androidx.core.animation.Keyframe<java.lang.Integer!> ofInt(@FloatRange(from=0, to=1) float, int);
+ method public static androidx.core.animation.Keyframe<java.lang.Float!> ofFloat(@FloatRange(from=0, to=1) float, float);
method public static androidx.core.animation.Keyframe<java.lang.Integer!> ofInt(@FloatRange(from=0, to=1) float);
- method public static <T> androidx.core.animation.Keyframe<T!> ofObject(@FloatRange(from=0, to=1) float, T?);
+ method public static androidx.core.animation.Keyframe<java.lang.Integer!> ofInt(@FloatRange(from=0, to=1) float, int);
method public static <T> androidx.core.animation.Keyframe<T!> ofObject(@FloatRange(from=0, to=1) float);
+ method public static <T> androidx.core.animation.Keyframe<T!> ofObject(@FloatRange(from=0, to=1) float, T?);
method public void setFraction(@FloatRange(from=0, to=1) float);
method public void setInterpolator(androidx.core.animation.Interpolator?);
method public abstract void setValue(T?);
@@ -225,23 +225,23 @@
method public static <T> androidx.core.animation.ObjectAnimator ofArgb(T, android.util.Property<T!,java.lang.Integer!>, int...);
method public static androidx.core.animation.ObjectAnimator ofFloat(Object, String, float...);
method public static androidx.core.animation.ObjectAnimator ofFloat(Object, String?, String?, android.graphics.Path);
- method public static <T> androidx.core.animation.ObjectAnimator ofFloat(T, android.util.Property<T!,java.lang.Float!>, float...);
method public static <T> androidx.core.animation.ObjectAnimator ofFloat(T, android.util.Property<T!,java.lang.Float!>?, android.util.Property<T!,java.lang.Float!>?, android.graphics.Path);
+ method public static <T> androidx.core.animation.ObjectAnimator ofFloat(T, android.util.Property<T!,java.lang.Float!>, float...);
method public static androidx.core.animation.ObjectAnimator ofInt(Object, String, int...);
method public static androidx.core.animation.ObjectAnimator ofInt(Object, String, String, android.graphics.Path);
- method public static <T> androidx.core.animation.ObjectAnimator ofInt(T, android.util.Property<T!,java.lang.Integer!>, int...);
method public static <T> androidx.core.animation.ObjectAnimator ofInt(T, android.util.Property<T!,java.lang.Integer!>?, android.util.Property<T!,java.lang.Integer!>?, android.graphics.Path);
- method public static androidx.core.animation.ObjectAnimator ofMultiFloat(Object, String, float[]![]);
+ method public static <T> androidx.core.animation.ObjectAnimator ofInt(T, android.util.Property<T!,java.lang.Integer!>, int...);
method public static androidx.core.animation.ObjectAnimator ofMultiFloat(Object, String, android.graphics.Path);
method @java.lang.SafeVarargs public static <T> androidx.core.animation.ObjectAnimator ofMultiFloat(Object, String, androidx.core.animation.TypeConverter<T!,float[]!>, androidx.core.animation.TypeEvaluator<T!>, T!...);
- method public static androidx.core.animation.ObjectAnimator ofMultiInt(Object, String, int[]![]);
+ method public static androidx.core.animation.ObjectAnimator ofMultiFloat(Object, String, float[]![]);
method public static androidx.core.animation.ObjectAnimator ofMultiInt(Object, String, android.graphics.Path);
method @java.lang.SafeVarargs public static <T> androidx.core.animation.ObjectAnimator ofMultiInt(Object, String, androidx.core.animation.TypeConverter<T!,int[]!>, androidx.core.animation.TypeEvaluator<T!>, T!...);
- method public static androidx.core.animation.ObjectAnimator ofObject(Object, String, androidx.core.animation.TypeEvaluator, java.lang.Object!...);
+ method public static androidx.core.animation.ObjectAnimator ofMultiInt(Object, String, int[]![]);
method public static androidx.core.animation.ObjectAnimator ofObject(Object, String, androidx.core.animation.TypeConverter<android.graphics.PointF!,?>?, android.graphics.Path);
- method @java.lang.SafeVarargs public static <T, V> androidx.core.animation.ObjectAnimator ofObject(T, android.util.Property<T!,V!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
+ method public static androidx.core.animation.ObjectAnimator ofObject(Object, String, androidx.core.animation.TypeEvaluator, java.lang.Object!...);
method @java.lang.SafeVarargs public static <T, V, P> androidx.core.animation.ObjectAnimator ofObject(T, android.util.Property<T!,P!>, androidx.core.animation.TypeConverter<V!,P!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
method public static <T, V> androidx.core.animation.ObjectAnimator ofObject(T, android.util.Property<T!,V!>, androidx.core.animation.TypeConverter<android.graphics.PointF!,V!>?, android.graphics.Path);
+ method @java.lang.SafeVarargs public static <T, V> androidx.core.animation.ObjectAnimator ofObject(T, android.util.Property<T!,V!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
method public static androidx.core.animation.ObjectAnimator ofPropertyValuesHolder(Object, androidx.core.animation.PropertyValuesHolder!...);
method public void setAutoCancel(boolean);
method public androidx.core.animation.ObjectAnimator setDuration(long);
@@ -251,17 +251,17 @@
public class OvershootInterpolator implements androidx.core.animation.Interpolator {
ctor public OvershootInterpolator();
- ctor public OvershootInterpolator(float);
ctor public OvershootInterpolator(android.content.Context, android.util.AttributeSet?);
+ ctor public OvershootInterpolator(float);
method @FloatRange(from=0) public float getInterpolation(@FloatRange(from=0, to=1) float);
}
public class PathInterpolator implements androidx.core.animation.Interpolator {
+ ctor public PathInterpolator(android.content.Context, android.util.AttributeSet?, org.xmlpull.v1.XmlPullParser);
+ ctor public PathInterpolator(android.content.res.Resources, android.content.res.Resources.Theme?, android.util.AttributeSet?, org.xmlpull.v1.XmlPullParser);
ctor public PathInterpolator(android.graphics.Path);
ctor public PathInterpolator(float, float);
ctor public PathInterpolator(float, float, float, float);
- ctor public PathInterpolator(android.content.Context, android.util.AttributeSet?, org.xmlpull.v1.XmlPullParser);
- ctor public PathInterpolator(android.content.res.Resources, android.content.res.Resources.Theme?, android.util.AttributeSet?, org.xmlpull.v1.XmlPullParser);
method public float getInterpolation(@FloatRange(from=0, to=1) float);
}
@@ -274,25 +274,25 @@
public class PropertyValuesHolder implements java.lang.Cloneable {
method public androidx.core.animation.PropertyValuesHolder clone();
method public String getPropertyName();
- method public static androidx.core.animation.PropertyValuesHolder ofFloat(String, float...);
method public static androidx.core.animation.PropertyValuesHolder ofFloat(android.util.Property<?,java.lang.Float!>, float...);
- method public static androidx.core.animation.PropertyValuesHolder ofInt(String, int...);
+ method public static androidx.core.animation.PropertyValuesHolder ofFloat(String, float...);
method public static androidx.core.animation.PropertyValuesHolder ofInt(android.util.Property<?,java.lang.Integer!>, int...);
- method @java.lang.SafeVarargs public static androidx.core.animation.PropertyValuesHolder ofKeyframe(String, androidx.core.animation.Keyframe!...);
+ method public static androidx.core.animation.PropertyValuesHolder ofInt(String, int...);
method @java.lang.SafeVarargs public static androidx.core.animation.PropertyValuesHolder ofKeyframe(android.util.Property, androidx.core.animation.Keyframe!...);
- method public static androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, float[]![]);
+ method @java.lang.SafeVarargs public static androidx.core.animation.PropertyValuesHolder ofKeyframe(String, androidx.core.animation.Keyframe!...);
method public static androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, android.graphics.Path);
- method @java.lang.SafeVarargs public static <V> androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, androidx.core.animation.TypeConverter<V!,float[]!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
method @java.lang.SafeVarargs public static <T> androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, androidx.core.animation.TypeConverter<T!,float[]!>?, androidx.core.animation.TypeEvaluator<T!>, androidx.core.animation.Keyframe!...);
- method public static androidx.core.animation.PropertyValuesHolder ofMultiInt(String, int[]![]);
+ method @java.lang.SafeVarargs public static <V> androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, androidx.core.animation.TypeConverter<V!,float[]!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
+ method public static androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, float[]![]);
method public static androidx.core.animation.PropertyValuesHolder ofMultiInt(String, android.graphics.Path);
- method @java.lang.SafeVarargs public static <V> androidx.core.animation.PropertyValuesHolder ofMultiInt(String, androidx.core.animation.TypeConverter<V!,int[]!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
method @java.lang.SafeVarargs public static <T> androidx.core.animation.PropertyValuesHolder ofMultiInt(String, androidx.core.animation.TypeConverter<T!,int[]!>?, androidx.core.animation.TypeEvaluator<T!>, androidx.core.animation.Keyframe!...);
- method public static androidx.core.animation.PropertyValuesHolder ofObject(String, androidx.core.animation.TypeEvaluator, java.lang.Object!...);
- method public static androidx.core.animation.PropertyValuesHolder ofObject(String, androidx.core.animation.TypeConverter<android.graphics.PointF!,?>?, android.graphics.Path);
+ method @java.lang.SafeVarargs public static <V> androidx.core.animation.PropertyValuesHolder ofMultiInt(String, androidx.core.animation.TypeConverter<V!,int[]!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
+ method public static androidx.core.animation.PropertyValuesHolder ofMultiInt(String, int[]![]);
method @java.lang.SafeVarargs public static <V> androidx.core.animation.PropertyValuesHolder ofObject(android.util.Property, androidx.core.animation.TypeEvaluator<V!>, V!...);
- method @java.lang.SafeVarargs public static <T, V> androidx.core.animation.PropertyValuesHolder ofObject(android.util.Property<?,V!>, androidx.core.animation.TypeConverter<T!,V!>, androidx.core.animation.TypeEvaluator<T!>, T!...);
method public static <V> androidx.core.animation.PropertyValuesHolder ofObject(android.util.Property<?,V!>, androidx.core.animation.TypeConverter<android.graphics.PointF!,V!>?, android.graphics.Path);
+ method @java.lang.SafeVarargs public static <T, V> androidx.core.animation.PropertyValuesHolder ofObject(android.util.Property<?,V!>, androidx.core.animation.TypeConverter<T!,V!>, androidx.core.animation.TypeEvaluator<T!>, T!...);
+ method public static androidx.core.animation.PropertyValuesHolder ofObject(String, androidx.core.animation.TypeConverter<android.graphics.PointF!,?>?, android.graphics.Path);
+ method public static androidx.core.animation.PropertyValuesHolder ofObject(String, androidx.core.animation.TypeEvaluator, java.lang.Object!...);
method public void setConverter(androidx.core.animation.TypeConverter?);
method public void setEvaluator(androidx.core.animation.TypeEvaluator);
method public void setFloatValues(float...);
diff --git a/core/core-animation/api/current.txt b/core/core-animation/api/current.txt
index 3477c13..71e774e 100644
--- a/core/core-animation/api/current.txt
+++ b/core/core-animation/api/current.txt
@@ -8,8 +8,8 @@
public class AccelerateInterpolator implements androidx.core.animation.Interpolator {
ctor public AccelerateInterpolator();
- ctor public AccelerateInterpolator(float);
ctor public AccelerateInterpolator(android.content.Context, android.util.AttributeSet);
+ ctor public AccelerateInterpolator(float);
method @FloatRange(from=0, to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
}
@@ -47,11 +47,11 @@
public static interface Animator.AnimatorListener {
method public void onAnimationCancel(androidx.core.animation.Animator);
- method public default void onAnimationEnd(androidx.core.animation.Animator, boolean);
method public void onAnimationEnd(androidx.core.animation.Animator);
+ method public default void onAnimationEnd(androidx.core.animation.Animator, boolean);
method public void onAnimationRepeat(androidx.core.animation.Animator);
- method public default void onAnimationStart(androidx.core.animation.Animator, boolean);
method public void onAnimationStart(androidx.core.animation.Animator);
+ method public default void onAnimationStart(androidx.core.animation.Animator, boolean);
}
public static interface Animator.AnimatorPauseListener {
@@ -109,16 +109,16 @@
public class AnticipateInterpolator implements androidx.core.animation.Interpolator {
ctor public AnticipateInterpolator();
- ctor public AnticipateInterpolator(float);
ctor public AnticipateInterpolator(android.content.Context, android.util.AttributeSet?);
+ ctor public AnticipateInterpolator(float);
method @FloatRange(to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
}
public class AnticipateOvershootInterpolator implements androidx.core.animation.Interpolator {
ctor public AnticipateOvershootInterpolator();
+ ctor public AnticipateOvershootInterpolator(android.content.Context, android.util.AttributeSet?);
ctor public AnticipateOvershootInterpolator(float);
ctor public AnticipateOvershootInterpolator(float, float);
- ctor public AnticipateOvershootInterpolator(android.content.Context, android.util.AttributeSet?);
method @FloatRange(to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
}
@@ -139,15 +139,15 @@
}
public class CycleInterpolator implements androidx.core.animation.Interpolator {
- ctor public CycleInterpolator(float);
ctor public CycleInterpolator(android.content.Context, android.util.AttributeSet?);
+ ctor public CycleInterpolator(float);
method @FloatRange(from=0, to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
}
public class DecelerateInterpolator implements androidx.core.animation.Interpolator {
ctor public DecelerateInterpolator();
- ctor public DecelerateInterpolator(float);
ctor public DecelerateInterpolator(android.content.Context, android.util.AttributeSet?);
+ ctor public DecelerateInterpolator(float);
method @FloatRange(from=0, to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
}
@@ -163,8 +163,8 @@
}
public abstract class FloatProperty<T> extends android.util.Property<T,java.lang.Float> {
- ctor public FloatProperty(String);
ctor public FloatProperty();
+ ctor public FloatProperty(String);
method public final void set(T, Float);
method public abstract void setValue(T, float);
}
@@ -181,8 +181,8 @@
}
public abstract class IntProperty<T> extends android.util.Property<T,java.lang.Integer> {
- ctor public IntProperty(String);
ctor public IntProperty();
+ ctor public IntProperty(String);
method public final void set(T, Integer);
method public abstract void setValue(T, int);
}
@@ -199,12 +199,12 @@
method public Class<?> getType();
method public abstract T? getValue();
method public boolean hasValue();
- method public static androidx.core.animation.Keyframe<java.lang.Float!> ofFloat(@FloatRange(from=0, to=1) float, float);
method public static androidx.core.animation.Keyframe<java.lang.Float!> ofFloat(@FloatRange(from=0, to=1) float);
- method public static androidx.core.animation.Keyframe<java.lang.Integer!> ofInt(@FloatRange(from=0, to=1) float, int);
+ method public static androidx.core.animation.Keyframe<java.lang.Float!> ofFloat(@FloatRange(from=0, to=1) float, float);
method public static androidx.core.animation.Keyframe<java.lang.Integer!> ofInt(@FloatRange(from=0, to=1) float);
- method public static <T> androidx.core.animation.Keyframe<T!> ofObject(@FloatRange(from=0, to=1) float, T?);
+ method public static androidx.core.animation.Keyframe<java.lang.Integer!> ofInt(@FloatRange(from=0, to=1) float, int);
method public static <T> androidx.core.animation.Keyframe<T!> ofObject(@FloatRange(from=0, to=1) float);
+ method public static <T> androidx.core.animation.Keyframe<T!> ofObject(@FloatRange(from=0, to=1) float, T?);
method public void setFraction(@FloatRange(from=0, to=1) float);
method public void setInterpolator(androidx.core.animation.Interpolator?);
method public abstract void setValue(T?);
@@ -225,23 +225,23 @@
method public static <T> androidx.core.animation.ObjectAnimator ofArgb(T, android.util.Property<T!,java.lang.Integer!>, int...);
method public static androidx.core.animation.ObjectAnimator ofFloat(Object, String, float...);
method public static androidx.core.animation.ObjectAnimator ofFloat(Object, String?, String?, android.graphics.Path);
- method public static <T> androidx.core.animation.ObjectAnimator ofFloat(T, android.util.Property<T!,java.lang.Float!>, float...);
method public static <T> androidx.core.animation.ObjectAnimator ofFloat(T, android.util.Property<T!,java.lang.Float!>?, android.util.Property<T!,java.lang.Float!>?, android.graphics.Path);
+ method public static <T> androidx.core.animation.ObjectAnimator ofFloat(T, android.util.Property<T!,java.lang.Float!>, float...);
method public static androidx.core.animation.ObjectAnimator ofInt(Object, String, int...);
method public static androidx.core.animation.ObjectAnimator ofInt(Object, String, String, android.graphics.Path);
- method public static <T> androidx.core.animation.ObjectAnimator ofInt(T, android.util.Property<T!,java.lang.Integer!>, int...);
method public static <T> androidx.core.animation.ObjectAnimator ofInt(T, android.util.Property<T!,java.lang.Integer!>?, android.util.Property<T!,java.lang.Integer!>?, android.graphics.Path);
- method public static androidx.core.animation.ObjectAnimator ofMultiFloat(Object, String, float[]![]);
+ method public static <T> androidx.core.animation.ObjectAnimator ofInt(T, android.util.Property<T!,java.lang.Integer!>, int...);
method public static androidx.core.animation.ObjectAnimator ofMultiFloat(Object, String, android.graphics.Path);
method @java.lang.SafeVarargs public static <T> androidx.core.animation.ObjectAnimator ofMultiFloat(Object, String, androidx.core.animation.TypeConverter<T!,float[]!>, androidx.core.animation.TypeEvaluator<T!>, T!...);
- method public static androidx.core.animation.ObjectAnimator ofMultiInt(Object, String, int[]![]);
+ method public static androidx.core.animation.ObjectAnimator ofMultiFloat(Object, String, float[]![]);
method public static androidx.core.animation.ObjectAnimator ofMultiInt(Object, String, android.graphics.Path);
method @java.lang.SafeVarargs public static <T> androidx.core.animation.ObjectAnimator ofMultiInt(Object, String, androidx.core.animation.TypeConverter<T!,int[]!>, androidx.core.animation.TypeEvaluator<T!>, T!...);
- method public static androidx.core.animation.ObjectAnimator ofObject(Object, String, androidx.core.animation.TypeEvaluator, java.lang.Object!...);
+ method public static androidx.core.animation.ObjectAnimator ofMultiInt(Object, String, int[]![]);
method public static androidx.core.animation.ObjectAnimator ofObject(Object, String, androidx.core.animation.TypeConverter<android.graphics.PointF!,?>?, android.graphics.Path);
- method @java.lang.SafeVarargs public static <T, V> androidx.core.animation.ObjectAnimator ofObject(T, android.util.Property<T!,V!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
+ method public static androidx.core.animation.ObjectAnimator ofObject(Object, String, androidx.core.animation.TypeEvaluator, java.lang.Object!...);
method @java.lang.SafeVarargs public static <T, V, P> androidx.core.animation.ObjectAnimator ofObject(T, android.util.Property<T!,P!>, androidx.core.animation.TypeConverter<V!,P!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
method public static <T, V> androidx.core.animation.ObjectAnimator ofObject(T, android.util.Property<T!,V!>, androidx.core.animation.TypeConverter<android.graphics.PointF!,V!>?, android.graphics.Path);
+ method @java.lang.SafeVarargs public static <T, V> androidx.core.animation.ObjectAnimator ofObject(T, android.util.Property<T!,V!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
method public static androidx.core.animation.ObjectAnimator ofPropertyValuesHolder(Object, androidx.core.animation.PropertyValuesHolder!...);
method public void setAutoCancel(boolean);
method public androidx.core.animation.ObjectAnimator setDuration(long);
@@ -251,17 +251,17 @@
public class OvershootInterpolator implements androidx.core.animation.Interpolator {
ctor public OvershootInterpolator();
- ctor public OvershootInterpolator(float);
ctor public OvershootInterpolator(android.content.Context, android.util.AttributeSet?);
+ ctor public OvershootInterpolator(float);
method @FloatRange(from=0) public float getInterpolation(@FloatRange(from=0, to=1) float);
}
public class PathInterpolator implements androidx.core.animation.Interpolator {
+ ctor public PathInterpolator(android.content.Context, android.util.AttributeSet?, org.xmlpull.v1.XmlPullParser);
+ ctor public PathInterpolator(android.content.res.Resources, android.content.res.Resources.Theme?, android.util.AttributeSet?, org.xmlpull.v1.XmlPullParser);
ctor public PathInterpolator(android.graphics.Path);
ctor public PathInterpolator(float, float);
ctor public PathInterpolator(float, float, float, float);
- ctor public PathInterpolator(android.content.Context, android.util.AttributeSet?, org.xmlpull.v1.XmlPullParser);
- ctor public PathInterpolator(android.content.res.Resources, android.content.res.Resources.Theme?, android.util.AttributeSet?, org.xmlpull.v1.XmlPullParser);
method public float getInterpolation(@FloatRange(from=0, to=1) float);
}
@@ -274,25 +274,25 @@
public class PropertyValuesHolder implements java.lang.Cloneable {
method public androidx.core.animation.PropertyValuesHolder clone();
method public String getPropertyName();
- method public static androidx.core.animation.PropertyValuesHolder ofFloat(String, float...);
method public static androidx.core.animation.PropertyValuesHolder ofFloat(android.util.Property<?,java.lang.Float!>, float...);
- method public static androidx.core.animation.PropertyValuesHolder ofInt(String, int...);
+ method public static androidx.core.animation.PropertyValuesHolder ofFloat(String, float...);
method public static androidx.core.animation.PropertyValuesHolder ofInt(android.util.Property<?,java.lang.Integer!>, int...);
- method @java.lang.SafeVarargs public static androidx.core.animation.PropertyValuesHolder ofKeyframe(String, androidx.core.animation.Keyframe!...);
+ method public static androidx.core.animation.PropertyValuesHolder ofInt(String, int...);
method @java.lang.SafeVarargs public static androidx.core.animation.PropertyValuesHolder ofKeyframe(android.util.Property, androidx.core.animation.Keyframe!...);
- method public static androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, float[]![]);
+ method @java.lang.SafeVarargs public static androidx.core.animation.PropertyValuesHolder ofKeyframe(String, androidx.core.animation.Keyframe!...);
method public static androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, android.graphics.Path);
- method @java.lang.SafeVarargs public static <V> androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, androidx.core.animation.TypeConverter<V!,float[]!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
method @java.lang.SafeVarargs public static <T> androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, androidx.core.animation.TypeConverter<T!,float[]!>?, androidx.core.animation.TypeEvaluator<T!>, androidx.core.animation.Keyframe!...);
- method public static androidx.core.animation.PropertyValuesHolder ofMultiInt(String, int[]![]);
+ method @java.lang.SafeVarargs public static <V> androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, androidx.core.animation.TypeConverter<V!,float[]!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
+ method public static androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, float[]![]);
method public static androidx.core.animation.PropertyValuesHolder ofMultiInt(String, android.graphics.Path);
- method @java.lang.SafeVarargs public static <V> androidx.core.animation.PropertyValuesHolder ofMultiInt(String, androidx.core.animation.TypeConverter<V!,int[]!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
method @java.lang.SafeVarargs public static <T> androidx.core.animation.PropertyValuesHolder ofMultiInt(String, androidx.core.animation.TypeConverter<T!,int[]!>?, androidx.core.animation.TypeEvaluator<T!>, androidx.core.animation.Keyframe!...);
- method public static androidx.core.animation.PropertyValuesHolder ofObject(String, androidx.core.animation.TypeEvaluator, java.lang.Object!...);
- method public static androidx.core.animation.PropertyValuesHolder ofObject(String, androidx.core.animation.TypeConverter<android.graphics.PointF!,?>?, android.graphics.Path);
+ method @java.lang.SafeVarargs public static <V> androidx.core.animation.PropertyValuesHolder ofMultiInt(String, androidx.core.animation.TypeConverter<V!,int[]!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
+ method public static androidx.core.animation.PropertyValuesHolder ofMultiInt(String, int[]![]);
method @java.lang.SafeVarargs public static <V> androidx.core.animation.PropertyValuesHolder ofObject(android.util.Property, androidx.core.animation.TypeEvaluator<V!>, V!...);
- method @java.lang.SafeVarargs public static <T, V> androidx.core.animation.PropertyValuesHolder ofObject(android.util.Property<?,V!>, androidx.core.animation.TypeConverter<T!,V!>, androidx.core.animation.TypeEvaluator<T!>, T!...);
method public static <V> androidx.core.animation.PropertyValuesHolder ofObject(android.util.Property<?,V!>, androidx.core.animation.TypeConverter<android.graphics.PointF!,V!>?, android.graphics.Path);
+ method @java.lang.SafeVarargs public static <T, V> androidx.core.animation.PropertyValuesHolder ofObject(android.util.Property<?,V!>, androidx.core.animation.TypeConverter<T!,V!>, androidx.core.animation.TypeEvaluator<T!>, T!...);
+ method public static androidx.core.animation.PropertyValuesHolder ofObject(String, androidx.core.animation.TypeConverter<android.graphics.PointF!,?>?, android.graphics.Path);
+ method public static androidx.core.animation.PropertyValuesHolder ofObject(String, androidx.core.animation.TypeEvaluator, java.lang.Object!...);
method public void setConverter(androidx.core.animation.TypeConverter?);
method public void setEvaluator(androidx.core.animation.TypeEvaluator);
method public void setFloatValues(float...);
diff --git a/core/core-animation/api/public_plus_experimental_1.0.0-beta02.txt b/core/core-animation/api/public_plus_experimental_1.0.0-beta02.txt
deleted file mode 100644
index 3477c13..0000000
--- a/core/core-animation/api/public_plus_experimental_1.0.0-beta02.txt
+++ /dev/null
@@ -1,372 +0,0 @@
-// Signature format: 4.0
-package androidx.core.animation {
-
- public class AccelerateDecelerateInterpolator implements androidx.core.animation.Interpolator {
- ctor public AccelerateDecelerateInterpolator();
- method @FloatRange(from=0, to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
- }
-
- public class AccelerateInterpolator implements androidx.core.animation.Interpolator {
- ctor public AccelerateInterpolator();
- ctor public AccelerateInterpolator(float);
- ctor public AccelerateInterpolator(android.content.Context, android.util.AttributeSet);
- method @FloatRange(from=0, to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
- }
-
- public abstract class Animator implements java.lang.Cloneable {
- ctor public Animator();
- method public void addListener(androidx.core.animation.Animator.AnimatorListener);
- method public void addPauseListener(androidx.core.animation.Animator.AnimatorPauseListener);
- method public void addUpdateListener(androidx.core.animation.Animator.AnimatorUpdateListener);
- method public void cancel();
- method public androidx.core.animation.Animator clone();
- method public void end();
- method public abstract long getDuration();
- method public androidx.core.animation.Interpolator? getInterpolator();
- method public abstract long getStartDelay();
- method public long getTotalDuration();
- method public boolean isPaused();
- method public abstract boolean isRunning();
- method public boolean isStarted();
- method public void pause();
- method public void removeAllListeners();
- method public void removeAllUpdateListeners();
- method public void removeListener(androidx.core.animation.Animator.AnimatorListener);
- method public void removePauseListener(androidx.core.animation.Animator.AnimatorPauseListener);
- method public void removeUpdateListener(androidx.core.animation.Animator.AnimatorUpdateListener);
- method public void resume();
- method public abstract androidx.core.animation.Animator setDuration(@IntRange(from=0) long);
- method public abstract void setInterpolator(androidx.core.animation.Interpolator?);
- method public abstract void setStartDelay(@IntRange(from=0) long);
- method public void setTarget(Object?);
- method public void setupEndValues();
- method public void setupStartValues();
- method public void start();
- field public static final long DURATION_INFINITE = -1L; // 0xffffffffffffffffL
- }
-
- public static interface Animator.AnimatorListener {
- method public void onAnimationCancel(androidx.core.animation.Animator);
- method public default void onAnimationEnd(androidx.core.animation.Animator, boolean);
- method public void onAnimationEnd(androidx.core.animation.Animator);
- method public void onAnimationRepeat(androidx.core.animation.Animator);
- method public default void onAnimationStart(androidx.core.animation.Animator, boolean);
- method public void onAnimationStart(androidx.core.animation.Animator);
- }
-
- public static interface Animator.AnimatorPauseListener {
- method public void onAnimationPause(androidx.core.animation.Animator);
- method public void onAnimationResume(androidx.core.animation.Animator);
- }
-
- public static interface Animator.AnimatorUpdateListener {
- method public void onAnimationUpdate(androidx.core.animation.Animator);
- }
-
- public class AnimatorInflater {
- method public static androidx.core.animation.Animator loadAnimator(android.content.Context, @AnimatorRes int) throws android.content.res.Resources.NotFoundException;
- method public static androidx.core.animation.Animator loadAnimator(android.content.res.Resources, android.content.res.Resources.Theme?, @AnimatorRes int) throws android.content.res.Resources.NotFoundException;
- method public static androidx.core.animation.Interpolator loadInterpolator(android.content.Context, @AnimatorRes @InterpolatorRes int) throws android.content.res.Resources.NotFoundException;
- }
-
- public abstract class AnimatorListenerAdapter implements androidx.core.animation.Animator.AnimatorListener androidx.core.animation.Animator.AnimatorPauseListener {
- ctor public AnimatorListenerAdapter();
- method public void onAnimationCancel(androidx.core.animation.Animator);
- method public void onAnimationEnd(androidx.core.animation.Animator);
- method public void onAnimationPause(androidx.core.animation.Animator);
- method public void onAnimationRepeat(androidx.core.animation.Animator);
- method public void onAnimationResume(androidx.core.animation.Animator);
- method public void onAnimationStart(androidx.core.animation.Animator);
- }
-
- public final class AnimatorSet extends androidx.core.animation.Animator {
- ctor public AnimatorSet();
- method public boolean canReverse();
- method public androidx.core.animation.AnimatorSet clone();
- method public java.util.ArrayList<androidx.core.animation.Animator!> getChildAnimations();
- method public long getCurrentPlayTime();
- method public long getDuration();
- method public long getStartDelay();
- method public boolean isRunning();
- method public androidx.core.animation.AnimatorSet.Builder play(androidx.core.animation.Animator);
- method public void playSequentially(androidx.core.animation.Animator!...);
- method public void playSequentially(java.util.List<androidx.core.animation.Animator!>);
- method public void playTogether(androidx.core.animation.Animator!...);
- method public void playTogether(java.util.Collection<androidx.core.animation.Animator!>);
- method public void reverse();
- method public void setCurrentPlayTime(long);
- method public androidx.core.animation.AnimatorSet setDuration(long);
- method public void setInterpolator(androidx.core.animation.Interpolator?);
- method public void setStartDelay(long);
- }
-
- public class AnimatorSet.Builder {
- method public androidx.core.animation.AnimatorSet.Builder after(androidx.core.animation.Animator);
- method public androidx.core.animation.AnimatorSet.Builder after(long);
- method public androidx.core.animation.AnimatorSet.Builder before(androidx.core.animation.Animator);
- method public androidx.core.animation.AnimatorSet.Builder with(androidx.core.animation.Animator);
- }
-
- public class AnticipateInterpolator implements androidx.core.animation.Interpolator {
- ctor public AnticipateInterpolator();
- ctor public AnticipateInterpolator(float);
- ctor public AnticipateInterpolator(android.content.Context, android.util.AttributeSet?);
- method @FloatRange(to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
- }
-
- public class AnticipateOvershootInterpolator implements androidx.core.animation.Interpolator {
- ctor public AnticipateOvershootInterpolator();
- ctor public AnticipateOvershootInterpolator(float);
- ctor public AnticipateOvershootInterpolator(float, float);
- ctor public AnticipateOvershootInterpolator(android.content.Context, android.util.AttributeSet?);
- method @FloatRange(to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
- }
-
- public final class ArgbEvaluator implements androidx.core.animation.TypeEvaluator<java.lang.Integer> {
- method public Integer evaluate(float, Integer, Integer);
- method public static androidx.core.animation.ArgbEvaluator getInstance();
- }
-
- public abstract class BidirectionalTypeConverter<T, V> extends androidx.core.animation.TypeConverter<T,V> {
- ctor public BidirectionalTypeConverter(Class<T!>, Class<V!>);
- method public abstract T convertBack(V);
- method public androidx.core.animation.BidirectionalTypeConverter<V!,T!> invert();
- }
-
- public class BounceInterpolator implements androidx.core.animation.Interpolator {
- ctor public BounceInterpolator();
- method @FloatRange(from=0, to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
- }
-
- public class CycleInterpolator implements androidx.core.animation.Interpolator {
- ctor public CycleInterpolator(float);
- ctor public CycleInterpolator(android.content.Context, android.util.AttributeSet?);
- method @FloatRange(from=0, to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
- }
-
- public class DecelerateInterpolator implements androidx.core.animation.Interpolator {
- ctor public DecelerateInterpolator();
- ctor public DecelerateInterpolator(float);
- ctor public DecelerateInterpolator(android.content.Context, android.util.AttributeSet?);
- method @FloatRange(from=0, to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
- }
-
- public final class FloatArrayEvaluator implements androidx.core.animation.TypeEvaluator<float[]> {
- ctor public FloatArrayEvaluator();
- ctor public FloatArrayEvaluator(float[]?);
- method public float[] evaluate(float, float[], float[]);
- }
-
- public final class FloatEvaluator implements androidx.core.animation.TypeEvaluator<java.lang.Float> {
- method public Float evaluate(float, Float, Float);
- method public static androidx.core.animation.FloatEvaluator getInstance();
- }
-
- public abstract class FloatProperty<T> extends android.util.Property<T,java.lang.Float> {
- ctor public FloatProperty(String);
- ctor public FloatProperty();
- method public final void set(T, Float);
- method public abstract void setValue(T, float);
- }
-
- public class IntArrayEvaluator implements androidx.core.animation.TypeEvaluator<int[]> {
- ctor public IntArrayEvaluator();
- ctor public IntArrayEvaluator(int[]?);
- method public int[] evaluate(float, int[], int[]);
- }
-
- public class IntEvaluator implements androidx.core.animation.TypeEvaluator<java.lang.Integer> {
- method public Integer evaluate(float, Integer, Integer);
- method public static androidx.core.animation.IntEvaluator getInstance();
- }
-
- public abstract class IntProperty<T> extends android.util.Property<T,java.lang.Integer> {
- ctor public IntProperty(String);
- ctor public IntProperty();
- method public final void set(T, Integer);
- method public abstract void setValue(T, int);
- }
-
- public interface Interpolator {
- method public float getInterpolation(@FloatRange(from=0, to=1) float);
- }
-
- public abstract class Keyframe<T> implements java.lang.Cloneable {
- ctor public Keyframe();
- method public abstract androidx.core.animation.Keyframe<T!> clone();
- method @FloatRange(from=0, to=1) public float getFraction();
- method public androidx.core.animation.Interpolator? getInterpolator();
- method public Class<?> getType();
- method public abstract T? getValue();
- method public boolean hasValue();
- method public static androidx.core.animation.Keyframe<java.lang.Float!> ofFloat(@FloatRange(from=0, to=1) float, float);
- method public static androidx.core.animation.Keyframe<java.lang.Float!> ofFloat(@FloatRange(from=0, to=1) float);
- method public static androidx.core.animation.Keyframe<java.lang.Integer!> ofInt(@FloatRange(from=0, to=1) float, int);
- method public static androidx.core.animation.Keyframe<java.lang.Integer!> ofInt(@FloatRange(from=0, to=1) float);
- method public static <T> androidx.core.animation.Keyframe<T!> ofObject(@FloatRange(from=0, to=1) float, T?);
- method public static <T> androidx.core.animation.Keyframe<T!> ofObject(@FloatRange(from=0, to=1) float);
- method public void setFraction(@FloatRange(from=0, to=1) float);
- method public void setInterpolator(androidx.core.animation.Interpolator?);
- method public abstract void setValue(T?);
- }
-
- public class LinearInterpolator implements androidx.core.animation.Interpolator {
- ctor public LinearInterpolator();
- ctor public LinearInterpolator(android.content.Context, android.util.AttributeSet?);
- method @FloatRange(from=0, to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
- }
-
- public final class ObjectAnimator extends androidx.core.animation.ValueAnimator {
- ctor public ObjectAnimator();
- method public androidx.core.animation.ObjectAnimator clone();
- method public String getPropertyName();
- method public Object? getTarget();
- method public static androidx.core.animation.ObjectAnimator ofArgb(Object, String, int...);
- method public static <T> androidx.core.animation.ObjectAnimator ofArgb(T, android.util.Property<T!,java.lang.Integer!>, int...);
- method public static androidx.core.animation.ObjectAnimator ofFloat(Object, String, float...);
- method public static androidx.core.animation.ObjectAnimator ofFloat(Object, String?, String?, android.graphics.Path);
- method public static <T> androidx.core.animation.ObjectAnimator ofFloat(T, android.util.Property<T!,java.lang.Float!>, float...);
- method public static <T> androidx.core.animation.ObjectAnimator ofFloat(T, android.util.Property<T!,java.lang.Float!>?, android.util.Property<T!,java.lang.Float!>?, android.graphics.Path);
- method public static androidx.core.animation.ObjectAnimator ofInt(Object, String, int...);
- method public static androidx.core.animation.ObjectAnimator ofInt(Object, String, String, android.graphics.Path);
- method public static <T> androidx.core.animation.ObjectAnimator ofInt(T, android.util.Property<T!,java.lang.Integer!>, int...);
- method public static <T> androidx.core.animation.ObjectAnimator ofInt(T, android.util.Property<T!,java.lang.Integer!>?, android.util.Property<T!,java.lang.Integer!>?, android.graphics.Path);
- method public static androidx.core.animation.ObjectAnimator ofMultiFloat(Object, String, float[]![]);
- method public static androidx.core.animation.ObjectAnimator ofMultiFloat(Object, String, android.graphics.Path);
- method @java.lang.SafeVarargs public static <T> androidx.core.animation.ObjectAnimator ofMultiFloat(Object, String, androidx.core.animation.TypeConverter<T!,float[]!>, androidx.core.animation.TypeEvaluator<T!>, T!...);
- method public static androidx.core.animation.ObjectAnimator ofMultiInt(Object, String, int[]![]);
- method public static androidx.core.animation.ObjectAnimator ofMultiInt(Object, String, android.graphics.Path);
- method @java.lang.SafeVarargs public static <T> androidx.core.animation.ObjectAnimator ofMultiInt(Object, String, androidx.core.animation.TypeConverter<T!,int[]!>, androidx.core.animation.TypeEvaluator<T!>, T!...);
- method public static androidx.core.animation.ObjectAnimator ofObject(Object, String, androidx.core.animation.TypeEvaluator, java.lang.Object!...);
- method public static androidx.core.animation.ObjectAnimator ofObject(Object, String, androidx.core.animation.TypeConverter<android.graphics.PointF!,?>?, android.graphics.Path);
- method @java.lang.SafeVarargs public static <T, V> androidx.core.animation.ObjectAnimator ofObject(T, android.util.Property<T!,V!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
- method @java.lang.SafeVarargs public static <T, V, P> androidx.core.animation.ObjectAnimator ofObject(T, android.util.Property<T!,P!>, androidx.core.animation.TypeConverter<V!,P!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
- method public static <T, V> androidx.core.animation.ObjectAnimator ofObject(T, android.util.Property<T!,V!>, androidx.core.animation.TypeConverter<android.graphics.PointF!,V!>?, android.graphics.Path);
- method public static androidx.core.animation.ObjectAnimator ofPropertyValuesHolder(Object, androidx.core.animation.PropertyValuesHolder!...);
- method public void setAutoCancel(boolean);
- method public androidx.core.animation.ObjectAnimator setDuration(long);
- method public void setProperty(android.util.Property);
- method public void setPropertyName(String);
- }
-
- public class OvershootInterpolator implements androidx.core.animation.Interpolator {
- ctor public OvershootInterpolator();
- ctor public OvershootInterpolator(float);
- ctor public OvershootInterpolator(android.content.Context, android.util.AttributeSet?);
- method @FloatRange(from=0) public float getInterpolation(@FloatRange(from=0, to=1) float);
- }
-
- public class PathInterpolator implements androidx.core.animation.Interpolator {
- ctor public PathInterpolator(android.graphics.Path);
- ctor public PathInterpolator(float, float);
- ctor public PathInterpolator(float, float, float, float);
- ctor public PathInterpolator(android.content.Context, android.util.AttributeSet?, org.xmlpull.v1.XmlPullParser);
- ctor public PathInterpolator(android.content.res.Resources, android.content.res.Resources.Theme?, android.util.AttributeSet?, org.xmlpull.v1.XmlPullParser);
- method public float getInterpolation(@FloatRange(from=0, to=1) float);
- }
-
- public class PointFEvaluator implements androidx.core.animation.TypeEvaluator<android.graphics.PointF> {
- ctor public PointFEvaluator();
- ctor public PointFEvaluator(android.graphics.PointF);
- method public android.graphics.PointF evaluate(float, android.graphics.PointF, android.graphics.PointF);
- }
-
- public class PropertyValuesHolder implements java.lang.Cloneable {
- method public androidx.core.animation.PropertyValuesHolder clone();
- method public String getPropertyName();
- method public static androidx.core.animation.PropertyValuesHolder ofFloat(String, float...);
- method public static androidx.core.animation.PropertyValuesHolder ofFloat(android.util.Property<?,java.lang.Float!>, float...);
- method public static androidx.core.animation.PropertyValuesHolder ofInt(String, int...);
- method public static androidx.core.animation.PropertyValuesHolder ofInt(android.util.Property<?,java.lang.Integer!>, int...);
- method @java.lang.SafeVarargs public static androidx.core.animation.PropertyValuesHolder ofKeyframe(String, androidx.core.animation.Keyframe!...);
- method @java.lang.SafeVarargs public static androidx.core.animation.PropertyValuesHolder ofKeyframe(android.util.Property, androidx.core.animation.Keyframe!...);
- method public static androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, float[]![]);
- method public static androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, android.graphics.Path);
- method @java.lang.SafeVarargs public static <V> androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, androidx.core.animation.TypeConverter<V!,float[]!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
- method @java.lang.SafeVarargs public static <T> androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, androidx.core.animation.TypeConverter<T!,float[]!>?, androidx.core.animation.TypeEvaluator<T!>, androidx.core.animation.Keyframe!...);
- method public static androidx.core.animation.PropertyValuesHolder ofMultiInt(String, int[]![]);
- method public static androidx.core.animation.PropertyValuesHolder ofMultiInt(String, android.graphics.Path);
- method @java.lang.SafeVarargs public static <V> androidx.core.animation.PropertyValuesHolder ofMultiInt(String, androidx.core.animation.TypeConverter<V!,int[]!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
- method @java.lang.SafeVarargs public static <T> androidx.core.animation.PropertyValuesHolder ofMultiInt(String, androidx.core.animation.TypeConverter<T!,int[]!>?, androidx.core.animation.TypeEvaluator<T!>, androidx.core.animation.Keyframe!...);
- method public static androidx.core.animation.PropertyValuesHolder ofObject(String, androidx.core.animation.TypeEvaluator, java.lang.Object!...);
- method public static androidx.core.animation.PropertyValuesHolder ofObject(String, androidx.core.animation.TypeConverter<android.graphics.PointF!,?>?, android.graphics.Path);
- method @java.lang.SafeVarargs public static <V> androidx.core.animation.PropertyValuesHolder ofObject(android.util.Property, androidx.core.animation.TypeEvaluator<V!>, V!...);
- method @java.lang.SafeVarargs public static <T, V> androidx.core.animation.PropertyValuesHolder ofObject(android.util.Property<?,V!>, androidx.core.animation.TypeConverter<T!,V!>, androidx.core.animation.TypeEvaluator<T!>, T!...);
- method public static <V> androidx.core.animation.PropertyValuesHolder ofObject(android.util.Property<?,V!>, androidx.core.animation.TypeConverter<android.graphics.PointF!,V!>?, android.graphics.Path);
- method public void setConverter(androidx.core.animation.TypeConverter?);
- method public void setEvaluator(androidx.core.animation.TypeEvaluator);
- method public void setFloatValues(float...);
- method public void setIntValues(int...);
- method public void setKeyframes(androidx.core.animation.Keyframe!...);
- method public void setObjectValues(java.lang.Object!...);
- method public void setProperty(android.util.Property);
- method public void setPropertyName(String);
- }
-
- public class RectEvaluator implements androidx.core.animation.TypeEvaluator<android.graphics.Rect> {
- ctor public RectEvaluator();
- ctor public RectEvaluator(android.graphics.Rect);
- method public android.graphics.Rect evaluate(float, android.graphics.Rect, android.graphics.Rect);
- }
-
- public class TimeAnimator extends androidx.core.animation.ValueAnimator {
- ctor public TimeAnimator();
- method public void setTimeListener(androidx.core.animation.TimeAnimator.TimeListener?);
- }
-
- public static interface TimeAnimator.TimeListener {
- method public void onTimeUpdate(androidx.core.animation.TimeAnimator, long, long);
- }
-
- public abstract class TypeConverter<T, V> {
- ctor public TypeConverter(Class<T!>, Class<V!>);
- method public abstract V convert(T);
- }
-
- public interface TypeEvaluator<T> {
- method public T evaluate(float, T, T);
- }
-
- public class ValueAnimator extends androidx.core.animation.Animator {
- ctor public ValueAnimator();
- method public static boolean areAnimatorsEnabled();
- method public androidx.core.animation.ValueAnimator clone();
- method public float getAnimatedFraction();
- method public Object getAnimatedValue();
- method public Object? getAnimatedValue(String);
- method public long getCurrentPlayTime();
- method public long getDuration();
- method public static long getFrameDelay();
- method public String getNameForTrace();
- method public int getRepeatCount();
- method public int getRepeatMode();
- method public long getStartDelay();
- method public androidx.core.animation.PropertyValuesHolder![] getValues();
- method public boolean isRunning();
- method public static androidx.core.animation.ValueAnimator ofArgb(int...);
- method public static androidx.core.animation.ValueAnimator ofFloat(float...);
- method public static androidx.core.animation.ValueAnimator ofInt(int...);
- method public static androidx.core.animation.ValueAnimator ofObject(androidx.core.animation.TypeEvaluator, java.lang.Object!...);
- method public static androidx.core.animation.ValueAnimator ofPropertyValuesHolder(androidx.core.animation.PropertyValuesHolder!...);
- method public void reverse();
- method public void setCurrentFraction(float);
- method public void setCurrentPlayTime(long);
- method public androidx.core.animation.ValueAnimator setDuration(long);
- method public void setEvaluator(androidx.core.animation.TypeEvaluator);
- method public void setFloatValues(float...);
- method public static void setFrameDelay(long);
- method public void setIntValues(int...);
- method public void setInterpolator(androidx.core.animation.Interpolator?);
- method public void setNameForTrace(String);
- method public void setObjectValues(java.lang.Object!...);
- method public void setRepeatCount(int);
- method public void setRepeatMode(int);
- method public void setStartDelay(long);
- method public void setValues(androidx.core.animation.PropertyValuesHolder!...);
- field public static final int INFINITE = -1; // 0xffffffff
- field public static final int RESTART = 1; // 0x1
- field public static final int REVERSE = 2; // 0x2
- }
-
-}
-
diff --git a/core/core-animation/api/public_plus_experimental_current.txt b/core/core-animation/api/public_plus_experimental_current.txt
deleted file mode 100644
index 3477c13..0000000
--- a/core/core-animation/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,372 +0,0 @@
-// Signature format: 4.0
-package androidx.core.animation {
-
- public class AccelerateDecelerateInterpolator implements androidx.core.animation.Interpolator {
- ctor public AccelerateDecelerateInterpolator();
- method @FloatRange(from=0, to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
- }
-
- public class AccelerateInterpolator implements androidx.core.animation.Interpolator {
- ctor public AccelerateInterpolator();
- ctor public AccelerateInterpolator(float);
- ctor public AccelerateInterpolator(android.content.Context, android.util.AttributeSet);
- method @FloatRange(from=0, to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
- }
-
- public abstract class Animator implements java.lang.Cloneable {
- ctor public Animator();
- method public void addListener(androidx.core.animation.Animator.AnimatorListener);
- method public void addPauseListener(androidx.core.animation.Animator.AnimatorPauseListener);
- method public void addUpdateListener(androidx.core.animation.Animator.AnimatorUpdateListener);
- method public void cancel();
- method public androidx.core.animation.Animator clone();
- method public void end();
- method public abstract long getDuration();
- method public androidx.core.animation.Interpolator? getInterpolator();
- method public abstract long getStartDelay();
- method public long getTotalDuration();
- method public boolean isPaused();
- method public abstract boolean isRunning();
- method public boolean isStarted();
- method public void pause();
- method public void removeAllListeners();
- method public void removeAllUpdateListeners();
- method public void removeListener(androidx.core.animation.Animator.AnimatorListener);
- method public void removePauseListener(androidx.core.animation.Animator.AnimatorPauseListener);
- method public void removeUpdateListener(androidx.core.animation.Animator.AnimatorUpdateListener);
- method public void resume();
- method public abstract androidx.core.animation.Animator setDuration(@IntRange(from=0) long);
- method public abstract void setInterpolator(androidx.core.animation.Interpolator?);
- method public abstract void setStartDelay(@IntRange(from=0) long);
- method public void setTarget(Object?);
- method public void setupEndValues();
- method public void setupStartValues();
- method public void start();
- field public static final long DURATION_INFINITE = -1L; // 0xffffffffffffffffL
- }
-
- public static interface Animator.AnimatorListener {
- method public void onAnimationCancel(androidx.core.animation.Animator);
- method public default void onAnimationEnd(androidx.core.animation.Animator, boolean);
- method public void onAnimationEnd(androidx.core.animation.Animator);
- method public void onAnimationRepeat(androidx.core.animation.Animator);
- method public default void onAnimationStart(androidx.core.animation.Animator, boolean);
- method public void onAnimationStart(androidx.core.animation.Animator);
- }
-
- public static interface Animator.AnimatorPauseListener {
- method public void onAnimationPause(androidx.core.animation.Animator);
- method public void onAnimationResume(androidx.core.animation.Animator);
- }
-
- public static interface Animator.AnimatorUpdateListener {
- method public void onAnimationUpdate(androidx.core.animation.Animator);
- }
-
- public class AnimatorInflater {
- method public static androidx.core.animation.Animator loadAnimator(android.content.Context, @AnimatorRes int) throws android.content.res.Resources.NotFoundException;
- method public static androidx.core.animation.Animator loadAnimator(android.content.res.Resources, android.content.res.Resources.Theme?, @AnimatorRes int) throws android.content.res.Resources.NotFoundException;
- method public static androidx.core.animation.Interpolator loadInterpolator(android.content.Context, @AnimatorRes @InterpolatorRes int) throws android.content.res.Resources.NotFoundException;
- }
-
- public abstract class AnimatorListenerAdapter implements androidx.core.animation.Animator.AnimatorListener androidx.core.animation.Animator.AnimatorPauseListener {
- ctor public AnimatorListenerAdapter();
- method public void onAnimationCancel(androidx.core.animation.Animator);
- method public void onAnimationEnd(androidx.core.animation.Animator);
- method public void onAnimationPause(androidx.core.animation.Animator);
- method public void onAnimationRepeat(androidx.core.animation.Animator);
- method public void onAnimationResume(androidx.core.animation.Animator);
- method public void onAnimationStart(androidx.core.animation.Animator);
- }
-
- public final class AnimatorSet extends androidx.core.animation.Animator {
- ctor public AnimatorSet();
- method public boolean canReverse();
- method public androidx.core.animation.AnimatorSet clone();
- method public java.util.ArrayList<androidx.core.animation.Animator!> getChildAnimations();
- method public long getCurrentPlayTime();
- method public long getDuration();
- method public long getStartDelay();
- method public boolean isRunning();
- method public androidx.core.animation.AnimatorSet.Builder play(androidx.core.animation.Animator);
- method public void playSequentially(androidx.core.animation.Animator!...);
- method public void playSequentially(java.util.List<androidx.core.animation.Animator!>);
- method public void playTogether(androidx.core.animation.Animator!...);
- method public void playTogether(java.util.Collection<androidx.core.animation.Animator!>);
- method public void reverse();
- method public void setCurrentPlayTime(long);
- method public androidx.core.animation.AnimatorSet setDuration(long);
- method public void setInterpolator(androidx.core.animation.Interpolator?);
- method public void setStartDelay(long);
- }
-
- public class AnimatorSet.Builder {
- method public androidx.core.animation.AnimatorSet.Builder after(androidx.core.animation.Animator);
- method public androidx.core.animation.AnimatorSet.Builder after(long);
- method public androidx.core.animation.AnimatorSet.Builder before(androidx.core.animation.Animator);
- method public androidx.core.animation.AnimatorSet.Builder with(androidx.core.animation.Animator);
- }
-
- public class AnticipateInterpolator implements androidx.core.animation.Interpolator {
- ctor public AnticipateInterpolator();
- ctor public AnticipateInterpolator(float);
- ctor public AnticipateInterpolator(android.content.Context, android.util.AttributeSet?);
- method @FloatRange(to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
- }
-
- public class AnticipateOvershootInterpolator implements androidx.core.animation.Interpolator {
- ctor public AnticipateOvershootInterpolator();
- ctor public AnticipateOvershootInterpolator(float);
- ctor public AnticipateOvershootInterpolator(float, float);
- ctor public AnticipateOvershootInterpolator(android.content.Context, android.util.AttributeSet?);
- method @FloatRange(to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
- }
-
- public final class ArgbEvaluator implements androidx.core.animation.TypeEvaluator<java.lang.Integer> {
- method public Integer evaluate(float, Integer, Integer);
- method public static androidx.core.animation.ArgbEvaluator getInstance();
- }
-
- public abstract class BidirectionalTypeConverter<T, V> extends androidx.core.animation.TypeConverter<T,V> {
- ctor public BidirectionalTypeConverter(Class<T!>, Class<V!>);
- method public abstract T convertBack(V);
- method public androidx.core.animation.BidirectionalTypeConverter<V!,T!> invert();
- }
-
- public class BounceInterpolator implements androidx.core.animation.Interpolator {
- ctor public BounceInterpolator();
- method @FloatRange(from=0, to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
- }
-
- public class CycleInterpolator implements androidx.core.animation.Interpolator {
- ctor public CycleInterpolator(float);
- ctor public CycleInterpolator(android.content.Context, android.util.AttributeSet?);
- method @FloatRange(from=0, to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
- }
-
- public class DecelerateInterpolator implements androidx.core.animation.Interpolator {
- ctor public DecelerateInterpolator();
- ctor public DecelerateInterpolator(float);
- ctor public DecelerateInterpolator(android.content.Context, android.util.AttributeSet?);
- method @FloatRange(from=0, to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
- }
-
- public final class FloatArrayEvaluator implements androidx.core.animation.TypeEvaluator<float[]> {
- ctor public FloatArrayEvaluator();
- ctor public FloatArrayEvaluator(float[]?);
- method public float[] evaluate(float, float[], float[]);
- }
-
- public final class FloatEvaluator implements androidx.core.animation.TypeEvaluator<java.lang.Float> {
- method public Float evaluate(float, Float, Float);
- method public static androidx.core.animation.FloatEvaluator getInstance();
- }
-
- public abstract class FloatProperty<T> extends android.util.Property<T,java.lang.Float> {
- ctor public FloatProperty(String);
- ctor public FloatProperty();
- method public final void set(T, Float);
- method public abstract void setValue(T, float);
- }
-
- public class IntArrayEvaluator implements androidx.core.animation.TypeEvaluator<int[]> {
- ctor public IntArrayEvaluator();
- ctor public IntArrayEvaluator(int[]?);
- method public int[] evaluate(float, int[], int[]);
- }
-
- public class IntEvaluator implements androidx.core.animation.TypeEvaluator<java.lang.Integer> {
- method public Integer evaluate(float, Integer, Integer);
- method public static androidx.core.animation.IntEvaluator getInstance();
- }
-
- public abstract class IntProperty<T> extends android.util.Property<T,java.lang.Integer> {
- ctor public IntProperty(String);
- ctor public IntProperty();
- method public final void set(T, Integer);
- method public abstract void setValue(T, int);
- }
-
- public interface Interpolator {
- method public float getInterpolation(@FloatRange(from=0, to=1) float);
- }
-
- public abstract class Keyframe<T> implements java.lang.Cloneable {
- ctor public Keyframe();
- method public abstract androidx.core.animation.Keyframe<T!> clone();
- method @FloatRange(from=0, to=1) public float getFraction();
- method public androidx.core.animation.Interpolator? getInterpolator();
- method public Class<?> getType();
- method public abstract T? getValue();
- method public boolean hasValue();
- method public static androidx.core.animation.Keyframe<java.lang.Float!> ofFloat(@FloatRange(from=0, to=1) float, float);
- method public static androidx.core.animation.Keyframe<java.lang.Float!> ofFloat(@FloatRange(from=0, to=1) float);
- method public static androidx.core.animation.Keyframe<java.lang.Integer!> ofInt(@FloatRange(from=0, to=1) float, int);
- method public static androidx.core.animation.Keyframe<java.lang.Integer!> ofInt(@FloatRange(from=0, to=1) float);
- method public static <T> androidx.core.animation.Keyframe<T!> ofObject(@FloatRange(from=0, to=1) float, T?);
- method public static <T> androidx.core.animation.Keyframe<T!> ofObject(@FloatRange(from=0, to=1) float);
- method public void setFraction(@FloatRange(from=0, to=1) float);
- method public void setInterpolator(androidx.core.animation.Interpolator?);
- method public abstract void setValue(T?);
- }
-
- public class LinearInterpolator implements androidx.core.animation.Interpolator {
- ctor public LinearInterpolator();
- ctor public LinearInterpolator(android.content.Context, android.util.AttributeSet?);
- method @FloatRange(from=0, to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
- }
-
- public final class ObjectAnimator extends androidx.core.animation.ValueAnimator {
- ctor public ObjectAnimator();
- method public androidx.core.animation.ObjectAnimator clone();
- method public String getPropertyName();
- method public Object? getTarget();
- method public static androidx.core.animation.ObjectAnimator ofArgb(Object, String, int...);
- method public static <T> androidx.core.animation.ObjectAnimator ofArgb(T, android.util.Property<T!,java.lang.Integer!>, int...);
- method public static androidx.core.animation.ObjectAnimator ofFloat(Object, String, float...);
- method public static androidx.core.animation.ObjectAnimator ofFloat(Object, String?, String?, android.graphics.Path);
- method public static <T> androidx.core.animation.ObjectAnimator ofFloat(T, android.util.Property<T!,java.lang.Float!>, float...);
- method public static <T> androidx.core.animation.ObjectAnimator ofFloat(T, android.util.Property<T!,java.lang.Float!>?, android.util.Property<T!,java.lang.Float!>?, android.graphics.Path);
- method public static androidx.core.animation.ObjectAnimator ofInt(Object, String, int...);
- method public static androidx.core.animation.ObjectAnimator ofInt(Object, String, String, android.graphics.Path);
- method public static <T> androidx.core.animation.ObjectAnimator ofInt(T, android.util.Property<T!,java.lang.Integer!>, int...);
- method public static <T> androidx.core.animation.ObjectAnimator ofInt(T, android.util.Property<T!,java.lang.Integer!>?, android.util.Property<T!,java.lang.Integer!>?, android.graphics.Path);
- method public static androidx.core.animation.ObjectAnimator ofMultiFloat(Object, String, float[]![]);
- method public static androidx.core.animation.ObjectAnimator ofMultiFloat(Object, String, android.graphics.Path);
- method @java.lang.SafeVarargs public static <T> androidx.core.animation.ObjectAnimator ofMultiFloat(Object, String, androidx.core.animation.TypeConverter<T!,float[]!>, androidx.core.animation.TypeEvaluator<T!>, T!...);
- method public static androidx.core.animation.ObjectAnimator ofMultiInt(Object, String, int[]![]);
- method public static androidx.core.animation.ObjectAnimator ofMultiInt(Object, String, android.graphics.Path);
- method @java.lang.SafeVarargs public static <T> androidx.core.animation.ObjectAnimator ofMultiInt(Object, String, androidx.core.animation.TypeConverter<T!,int[]!>, androidx.core.animation.TypeEvaluator<T!>, T!...);
- method public static androidx.core.animation.ObjectAnimator ofObject(Object, String, androidx.core.animation.TypeEvaluator, java.lang.Object!...);
- method public static androidx.core.animation.ObjectAnimator ofObject(Object, String, androidx.core.animation.TypeConverter<android.graphics.PointF!,?>?, android.graphics.Path);
- method @java.lang.SafeVarargs public static <T, V> androidx.core.animation.ObjectAnimator ofObject(T, android.util.Property<T!,V!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
- method @java.lang.SafeVarargs public static <T, V, P> androidx.core.animation.ObjectAnimator ofObject(T, android.util.Property<T!,P!>, androidx.core.animation.TypeConverter<V!,P!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
- method public static <T, V> androidx.core.animation.ObjectAnimator ofObject(T, android.util.Property<T!,V!>, androidx.core.animation.TypeConverter<android.graphics.PointF!,V!>?, android.graphics.Path);
- method public static androidx.core.animation.ObjectAnimator ofPropertyValuesHolder(Object, androidx.core.animation.PropertyValuesHolder!...);
- method public void setAutoCancel(boolean);
- method public androidx.core.animation.ObjectAnimator setDuration(long);
- method public void setProperty(android.util.Property);
- method public void setPropertyName(String);
- }
-
- public class OvershootInterpolator implements androidx.core.animation.Interpolator {
- ctor public OvershootInterpolator();
- ctor public OvershootInterpolator(float);
- ctor public OvershootInterpolator(android.content.Context, android.util.AttributeSet?);
- method @FloatRange(from=0) public float getInterpolation(@FloatRange(from=0, to=1) float);
- }
-
- public class PathInterpolator implements androidx.core.animation.Interpolator {
- ctor public PathInterpolator(android.graphics.Path);
- ctor public PathInterpolator(float, float);
- ctor public PathInterpolator(float, float, float, float);
- ctor public PathInterpolator(android.content.Context, android.util.AttributeSet?, org.xmlpull.v1.XmlPullParser);
- ctor public PathInterpolator(android.content.res.Resources, android.content.res.Resources.Theme?, android.util.AttributeSet?, org.xmlpull.v1.XmlPullParser);
- method public float getInterpolation(@FloatRange(from=0, to=1) float);
- }
-
- public class PointFEvaluator implements androidx.core.animation.TypeEvaluator<android.graphics.PointF> {
- ctor public PointFEvaluator();
- ctor public PointFEvaluator(android.graphics.PointF);
- method public android.graphics.PointF evaluate(float, android.graphics.PointF, android.graphics.PointF);
- }
-
- public class PropertyValuesHolder implements java.lang.Cloneable {
- method public androidx.core.animation.PropertyValuesHolder clone();
- method public String getPropertyName();
- method public static androidx.core.animation.PropertyValuesHolder ofFloat(String, float...);
- method public static androidx.core.animation.PropertyValuesHolder ofFloat(android.util.Property<?,java.lang.Float!>, float...);
- method public static androidx.core.animation.PropertyValuesHolder ofInt(String, int...);
- method public static androidx.core.animation.PropertyValuesHolder ofInt(android.util.Property<?,java.lang.Integer!>, int...);
- method @java.lang.SafeVarargs public static androidx.core.animation.PropertyValuesHolder ofKeyframe(String, androidx.core.animation.Keyframe!...);
- method @java.lang.SafeVarargs public static androidx.core.animation.PropertyValuesHolder ofKeyframe(android.util.Property, androidx.core.animation.Keyframe!...);
- method public static androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, float[]![]);
- method public static androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, android.graphics.Path);
- method @java.lang.SafeVarargs public static <V> androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, androidx.core.animation.TypeConverter<V!,float[]!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
- method @java.lang.SafeVarargs public static <T> androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, androidx.core.animation.TypeConverter<T!,float[]!>?, androidx.core.animation.TypeEvaluator<T!>, androidx.core.animation.Keyframe!...);
- method public static androidx.core.animation.PropertyValuesHolder ofMultiInt(String, int[]![]);
- method public static androidx.core.animation.PropertyValuesHolder ofMultiInt(String, android.graphics.Path);
- method @java.lang.SafeVarargs public static <V> androidx.core.animation.PropertyValuesHolder ofMultiInt(String, androidx.core.animation.TypeConverter<V!,int[]!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
- method @java.lang.SafeVarargs public static <T> androidx.core.animation.PropertyValuesHolder ofMultiInt(String, androidx.core.animation.TypeConverter<T!,int[]!>?, androidx.core.animation.TypeEvaluator<T!>, androidx.core.animation.Keyframe!...);
- method public static androidx.core.animation.PropertyValuesHolder ofObject(String, androidx.core.animation.TypeEvaluator, java.lang.Object!...);
- method public static androidx.core.animation.PropertyValuesHolder ofObject(String, androidx.core.animation.TypeConverter<android.graphics.PointF!,?>?, android.graphics.Path);
- method @java.lang.SafeVarargs public static <V> androidx.core.animation.PropertyValuesHolder ofObject(android.util.Property, androidx.core.animation.TypeEvaluator<V!>, V!...);
- method @java.lang.SafeVarargs public static <T, V> androidx.core.animation.PropertyValuesHolder ofObject(android.util.Property<?,V!>, androidx.core.animation.TypeConverter<T!,V!>, androidx.core.animation.TypeEvaluator<T!>, T!...);
- method public static <V> androidx.core.animation.PropertyValuesHolder ofObject(android.util.Property<?,V!>, androidx.core.animation.TypeConverter<android.graphics.PointF!,V!>?, android.graphics.Path);
- method public void setConverter(androidx.core.animation.TypeConverter?);
- method public void setEvaluator(androidx.core.animation.TypeEvaluator);
- method public void setFloatValues(float...);
- method public void setIntValues(int...);
- method public void setKeyframes(androidx.core.animation.Keyframe!...);
- method public void setObjectValues(java.lang.Object!...);
- method public void setProperty(android.util.Property);
- method public void setPropertyName(String);
- }
-
- public class RectEvaluator implements androidx.core.animation.TypeEvaluator<android.graphics.Rect> {
- ctor public RectEvaluator();
- ctor public RectEvaluator(android.graphics.Rect);
- method public android.graphics.Rect evaluate(float, android.graphics.Rect, android.graphics.Rect);
- }
-
- public class TimeAnimator extends androidx.core.animation.ValueAnimator {
- ctor public TimeAnimator();
- method public void setTimeListener(androidx.core.animation.TimeAnimator.TimeListener?);
- }
-
- public static interface TimeAnimator.TimeListener {
- method public void onTimeUpdate(androidx.core.animation.TimeAnimator, long, long);
- }
-
- public abstract class TypeConverter<T, V> {
- ctor public TypeConverter(Class<T!>, Class<V!>);
- method public abstract V convert(T);
- }
-
- public interface TypeEvaluator<T> {
- method public T evaluate(float, T, T);
- }
-
- public class ValueAnimator extends androidx.core.animation.Animator {
- ctor public ValueAnimator();
- method public static boolean areAnimatorsEnabled();
- method public androidx.core.animation.ValueAnimator clone();
- method public float getAnimatedFraction();
- method public Object getAnimatedValue();
- method public Object? getAnimatedValue(String);
- method public long getCurrentPlayTime();
- method public long getDuration();
- method public static long getFrameDelay();
- method public String getNameForTrace();
- method public int getRepeatCount();
- method public int getRepeatMode();
- method public long getStartDelay();
- method public androidx.core.animation.PropertyValuesHolder![] getValues();
- method public boolean isRunning();
- method public static androidx.core.animation.ValueAnimator ofArgb(int...);
- method public static androidx.core.animation.ValueAnimator ofFloat(float...);
- method public static androidx.core.animation.ValueAnimator ofInt(int...);
- method public static androidx.core.animation.ValueAnimator ofObject(androidx.core.animation.TypeEvaluator, java.lang.Object!...);
- method public static androidx.core.animation.ValueAnimator ofPropertyValuesHolder(androidx.core.animation.PropertyValuesHolder!...);
- method public void reverse();
- method public void setCurrentFraction(float);
- method public void setCurrentPlayTime(long);
- method public androidx.core.animation.ValueAnimator setDuration(long);
- method public void setEvaluator(androidx.core.animation.TypeEvaluator);
- method public void setFloatValues(float...);
- method public static void setFrameDelay(long);
- method public void setIntValues(int...);
- method public void setInterpolator(androidx.core.animation.Interpolator?);
- method public void setNameForTrace(String);
- method public void setObjectValues(java.lang.Object!...);
- method public void setRepeatCount(int);
- method public void setRepeatMode(int);
- method public void setStartDelay(long);
- method public void setValues(androidx.core.animation.PropertyValuesHolder!...);
- field public static final int INFINITE = -1; // 0xffffffff
- field public static final int RESTART = 1; // 0x1
- field public static final int REVERSE = 2; // 0x2
- }
-
-}
-
diff --git a/core/core-animation/api/restricted_1.0.0-beta02.txt b/core/core-animation/api/restricted_1.0.0-beta02.txt
index 3477c13..71e774e 100644
--- a/core/core-animation/api/restricted_1.0.0-beta02.txt
+++ b/core/core-animation/api/restricted_1.0.0-beta02.txt
@@ -8,8 +8,8 @@
public class AccelerateInterpolator implements androidx.core.animation.Interpolator {
ctor public AccelerateInterpolator();
- ctor public AccelerateInterpolator(float);
ctor public AccelerateInterpolator(android.content.Context, android.util.AttributeSet);
+ ctor public AccelerateInterpolator(float);
method @FloatRange(from=0, to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
}
@@ -47,11 +47,11 @@
public static interface Animator.AnimatorListener {
method public void onAnimationCancel(androidx.core.animation.Animator);
- method public default void onAnimationEnd(androidx.core.animation.Animator, boolean);
method public void onAnimationEnd(androidx.core.animation.Animator);
+ method public default void onAnimationEnd(androidx.core.animation.Animator, boolean);
method public void onAnimationRepeat(androidx.core.animation.Animator);
- method public default void onAnimationStart(androidx.core.animation.Animator, boolean);
method public void onAnimationStart(androidx.core.animation.Animator);
+ method public default void onAnimationStart(androidx.core.animation.Animator, boolean);
}
public static interface Animator.AnimatorPauseListener {
@@ -109,16 +109,16 @@
public class AnticipateInterpolator implements androidx.core.animation.Interpolator {
ctor public AnticipateInterpolator();
- ctor public AnticipateInterpolator(float);
ctor public AnticipateInterpolator(android.content.Context, android.util.AttributeSet?);
+ ctor public AnticipateInterpolator(float);
method @FloatRange(to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
}
public class AnticipateOvershootInterpolator implements androidx.core.animation.Interpolator {
ctor public AnticipateOvershootInterpolator();
+ ctor public AnticipateOvershootInterpolator(android.content.Context, android.util.AttributeSet?);
ctor public AnticipateOvershootInterpolator(float);
ctor public AnticipateOvershootInterpolator(float, float);
- ctor public AnticipateOvershootInterpolator(android.content.Context, android.util.AttributeSet?);
method @FloatRange(to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
}
@@ -139,15 +139,15 @@
}
public class CycleInterpolator implements androidx.core.animation.Interpolator {
- ctor public CycleInterpolator(float);
ctor public CycleInterpolator(android.content.Context, android.util.AttributeSet?);
+ ctor public CycleInterpolator(float);
method @FloatRange(from=0, to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
}
public class DecelerateInterpolator implements androidx.core.animation.Interpolator {
ctor public DecelerateInterpolator();
- ctor public DecelerateInterpolator(float);
ctor public DecelerateInterpolator(android.content.Context, android.util.AttributeSet?);
+ ctor public DecelerateInterpolator(float);
method @FloatRange(from=0, to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
}
@@ -163,8 +163,8 @@
}
public abstract class FloatProperty<T> extends android.util.Property<T,java.lang.Float> {
- ctor public FloatProperty(String);
ctor public FloatProperty();
+ ctor public FloatProperty(String);
method public final void set(T, Float);
method public abstract void setValue(T, float);
}
@@ -181,8 +181,8 @@
}
public abstract class IntProperty<T> extends android.util.Property<T,java.lang.Integer> {
- ctor public IntProperty(String);
ctor public IntProperty();
+ ctor public IntProperty(String);
method public final void set(T, Integer);
method public abstract void setValue(T, int);
}
@@ -199,12 +199,12 @@
method public Class<?> getType();
method public abstract T? getValue();
method public boolean hasValue();
- method public static androidx.core.animation.Keyframe<java.lang.Float!> ofFloat(@FloatRange(from=0, to=1) float, float);
method public static androidx.core.animation.Keyframe<java.lang.Float!> ofFloat(@FloatRange(from=0, to=1) float);
- method public static androidx.core.animation.Keyframe<java.lang.Integer!> ofInt(@FloatRange(from=0, to=1) float, int);
+ method public static androidx.core.animation.Keyframe<java.lang.Float!> ofFloat(@FloatRange(from=0, to=1) float, float);
method public static androidx.core.animation.Keyframe<java.lang.Integer!> ofInt(@FloatRange(from=0, to=1) float);
- method public static <T> androidx.core.animation.Keyframe<T!> ofObject(@FloatRange(from=0, to=1) float, T?);
+ method public static androidx.core.animation.Keyframe<java.lang.Integer!> ofInt(@FloatRange(from=0, to=1) float, int);
method public static <T> androidx.core.animation.Keyframe<T!> ofObject(@FloatRange(from=0, to=1) float);
+ method public static <T> androidx.core.animation.Keyframe<T!> ofObject(@FloatRange(from=0, to=1) float, T?);
method public void setFraction(@FloatRange(from=0, to=1) float);
method public void setInterpolator(androidx.core.animation.Interpolator?);
method public abstract void setValue(T?);
@@ -225,23 +225,23 @@
method public static <T> androidx.core.animation.ObjectAnimator ofArgb(T, android.util.Property<T!,java.lang.Integer!>, int...);
method public static androidx.core.animation.ObjectAnimator ofFloat(Object, String, float...);
method public static androidx.core.animation.ObjectAnimator ofFloat(Object, String?, String?, android.graphics.Path);
- method public static <T> androidx.core.animation.ObjectAnimator ofFloat(T, android.util.Property<T!,java.lang.Float!>, float...);
method public static <T> androidx.core.animation.ObjectAnimator ofFloat(T, android.util.Property<T!,java.lang.Float!>?, android.util.Property<T!,java.lang.Float!>?, android.graphics.Path);
+ method public static <T> androidx.core.animation.ObjectAnimator ofFloat(T, android.util.Property<T!,java.lang.Float!>, float...);
method public static androidx.core.animation.ObjectAnimator ofInt(Object, String, int...);
method public static androidx.core.animation.ObjectAnimator ofInt(Object, String, String, android.graphics.Path);
- method public static <T> androidx.core.animation.ObjectAnimator ofInt(T, android.util.Property<T!,java.lang.Integer!>, int...);
method public static <T> androidx.core.animation.ObjectAnimator ofInt(T, android.util.Property<T!,java.lang.Integer!>?, android.util.Property<T!,java.lang.Integer!>?, android.graphics.Path);
- method public static androidx.core.animation.ObjectAnimator ofMultiFloat(Object, String, float[]![]);
+ method public static <T> androidx.core.animation.ObjectAnimator ofInt(T, android.util.Property<T!,java.lang.Integer!>, int...);
method public static androidx.core.animation.ObjectAnimator ofMultiFloat(Object, String, android.graphics.Path);
method @java.lang.SafeVarargs public static <T> androidx.core.animation.ObjectAnimator ofMultiFloat(Object, String, androidx.core.animation.TypeConverter<T!,float[]!>, androidx.core.animation.TypeEvaluator<T!>, T!...);
- method public static androidx.core.animation.ObjectAnimator ofMultiInt(Object, String, int[]![]);
+ method public static androidx.core.animation.ObjectAnimator ofMultiFloat(Object, String, float[]![]);
method public static androidx.core.animation.ObjectAnimator ofMultiInt(Object, String, android.graphics.Path);
method @java.lang.SafeVarargs public static <T> androidx.core.animation.ObjectAnimator ofMultiInt(Object, String, androidx.core.animation.TypeConverter<T!,int[]!>, androidx.core.animation.TypeEvaluator<T!>, T!...);
- method public static androidx.core.animation.ObjectAnimator ofObject(Object, String, androidx.core.animation.TypeEvaluator, java.lang.Object!...);
+ method public static androidx.core.animation.ObjectAnimator ofMultiInt(Object, String, int[]![]);
method public static androidx.core.animation.ObjectAnimator ofObject(Object, String, androidx.core.animation.TypeConverter<android.graphics.PointF!,?>?, android.graphics.Path);
- method @java.lang.SafeVarargs public static <T, V> androidx.core.animation.ObjectAnimator ofObject(T, android.util.Property<T!,V!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
+ method public static androidx.core.animation.ObjectAnimator ofObject(Object, String, androidx.core.animation.TypeEvaluator, java.lang.Object!...);
method @java.lang.SafeVarargs public static <T, V, P> androidx.core.animation.ObjectAnimator ofObject(T, android.util.Property<T!,P!>, androidx.core.animation.TypeConverter<V!,P!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
method public static <T, V> androidx.core.animation.ObjectAnimator ofObject(T, android.util.Property<T!,V!>, androidx.core.animation.TypeConverter<android.graphics.PointF!,V!>?, android.graphics.Path);
+ method @java.lang.SafeVarargs public static <T, V> androidx.core.animation.ObjectAnimator ofObject(T, android.util.Property<T!,V!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
method public static androidx.core.animation.ObjectAnimator ofPropertyValuesHolder(Object, androidx.core.animation.PropertyValuesHolder!...);
method public void setAutoCancel(boolean);
method public androidx.core.animation.ObjectAnimator setDuration(long);
@@ -251,17 +251,17 @@
public class OvershootInterpolator implements androidx.core.animation.Interpolator {
ctor public OvershootInterpolator();
- ctor public OvershootInterpolator(float);
ctor public OvershootInterpolator(android.content.Context, android.util.AttributeSet?);
+ ctor public OvershootInterpolator(float);
method @FloatRange(from=0) public float getInterpolation(@FloatRange(from=0, to=1) float);
}
public class PathInterpolator implements androidx.core.animation.Interpolator {
+ ctor public PathInterpolator(android.content.Context, android.util.AttributeSet?, org.xmlpull.v1.XmlPullParser);
+ ctor public PathInterpolator(android.content.res.Resources, android.content.res.Resources.Theme?, android.util.AttributeSet?, org.xmlpull.v1.XmlPullParser);
ctor public PathInterpolator(android.graphics.Path);
ctor public PathInterpolator(float, float);
ctor public PathInterpolator(float, float, float, float);
- ctor public PathInterpolator(android.content.Context, android.util.AttributeSet?, org.xmlpull.v1.XmlPullParser);
- ctor public PathInterpolator(android.content.res.Resources, android.content.res.Resources.Theme?, android.util.AttributeSet?, org.xmlpull.v1.XmlPullParser);
method public float getInterpolation(@FloatRange(from=0, to=1) float);
}
@@ -274,25 +274,25 @@
public class PropertyValuesHolder implements java.lang.Cloneable {
method public androidx.core.animation.PropertyValuesHolder clone();
method public String getPropertyName();
- method public static androidx.core.animation.PropertyValuesHolder ofFloat(String, float...);
method public static androidx.core.animation.PropertyValuesHolder ofFloat(android.util.Property<?,java.lang.Float!>, float...);
- method public static androidx.core.animation.PropertyValuesHolder ofInt(String, int...);
+ method public static androidx.core.animation.PropertyValuesHolder ofFloat(String, float...);
method public static androidx.core.animation.PropertyValuesHolder ofInt(android.util.Property<?,java.lang.Integer!>, int...);
- method @java.lang.SafeVarargs public static androidx.core.animation.PropertyValuesHolder ofKeyframe(String, androidx.core.animation.Keyframe!...);
+ method public static androidx.core.animation.PropertyValuesHolder ofInt(String, int...);
method @java.lang.SafeVarargs public static androidx.core.animation.PropertyValuesHolder ofKeyframe(android.util.Property, androidx.core.animation.Keyframe!...);
- method public static androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, float[]![]);
+ method @java.lang.SafeVarargs public static androidx.core.animation.PropertyValuesHolder ofKeyframe(String, androidx.core.animation.Keyframe!...);
method public static androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, android.graphics.Path);
- method @java.lang.SafeVarargs public static <V> androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, androidx.core.animation.TypeConverter<V!,float[]!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
method @java.lang.SafeVarargs public static <T> androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, androidx.core.animation.TypeConverter<T!,float[]!>?, androidx.core.animation.TypeEvaluator<T!>, androidx.core.animation.Keyframe!...);
- method public static androidx.core.animation.PropertyValuesHolder ofMultiInt(String, int[]![]);
+ method @java.lang.SafeVarargs public static <V> androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, androidx.core.animation.TypeConverter<V!,float[]!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
+ method public static androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, float[]![]);
method public static androidx.core.animation.PropertyValuesHolder ofMultiInt(String, android.graphics.Path);
- method @java.lang.SafeVarargs public static <V> androidx.core.animation.PropertyValuesHolder ofMultiInt(String, androidx.core.animation.TypeConverter<V!,int[]!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
method @java.lang.SafeVarargs public static <T> androidx.core.animation.PropertyValuesHolder ofMultiInt(String, androidx.core.animation.TypeConverter<T!,int[]!>?, androidx.core.animation.TypeEvaluator<T!>, androidx.core.animation.Keyframe!...);
- method public static androidx.core.animation.PropertyValuesHolder ofObject(String, androidx.core.animation.TypeEvaluator, java.lang.Object!...);
- method public static androidx.core.animation.PropertyValuesHolder ofObject(String, androidx.core.animation.TypeConverter<android.graphics.PointF!,?>?, android.graphics.Path);
+ method @java.lang.SafeVarargs public static <V> androidx.core.animation.PropertyValuesHolder ofMultiInt(String, androidx.core.animation.TypeConverter<V!,int[]!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
+ method public static androidx.core.animation.PropertyValuesHolder ofMultiInt(String, int[]![]);
method @java.lang.SafeVarargs public static <V> androidx.core.animation.PropertyValuesHolder ofObject(android.util.Property, androidx.core.animation.TypeEvaluator<V!>, V!...);
- method @java.lang.SafeVarargs public static <T, V> androidx.core.animation.PropertyValuesHolder ofObject(android.util.Property<?,V!>, androidx.core.animation.TypeConverter<T!,V!>, androidx.core.animation.TypeEvaluator<T!>, T!...);
method public static <V> androidx.core.animation.PropertyValuesHolder ofObject(android.util.Property<?,V!>, androidx.core.animation.TypeConverter<android.graphics.PointF!,V!>?, android.graphics.Path);
+ method @java.lang.SafeVarargs public static <T, V> androidx.core.animation.PropertyValuesHolder ofObject(android.util.Property<?,V!>, androidx.core.animation.TypeConverter<T!,V!>, androidx.core.animation.TypeEvaluator<T!>, T!...);
+ method public static androidx.core.animation.PropertyValuesHolder ofObject(String, androidx.core.animation.TypeConverter<android.graphics.PointF!,?>?, android.graphics.Path);
+ method public static androidx.core.animation.PropertyValuesHolder ofObject(String, androidx.core.animation.TypeEvaluator, java.lang.Object!...);
method public void setConverter(androidx.core.animation.TypeConverter?);
method public void setEvaluator(androidx.core.animation.TypeEvaluator);
method public void setFloatValues(float...);
diff --git a/core/core-animation/api/restricted_current.txt b/core/core-animation/api/restricted_current.txt
index 3477c13..71e774e 100644
--- a/core/core-animation/api/restricted_current.txt
+++ b/core/core-animation/api/restricted_current.txt
@@ -8,8 +8,8 @@
public class AccelerateInterpolator implements androidx.core.animation.Interpolator {
ctor public AccelerateInterpolator();
- ctor public AccelerateInterpolator(float);
ctor public AccelerateInterpolator(android.content.Context, android.util.AttributeSet);
+ ctor public AccelerateInterpolator(float);
method @FloatRange(from=0, to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
}
@@ -47,11 +47,11 @@
public static interface Animator.AnimatorListener {
method public void onAnimationCancel(androidx.core.animation.Animator);
- method public default void onAnimationEnd(androidx.core.animation.Animator, boolean);
method public void onAnimationEnd(androidx.core.animation.Animator);
+ method public default void onAnimationEnd(androidx.core.animation.Animator, boolean);
method public void onAnimationRepeat(androidx.core.animation.Animator);
- method public default void onAnimationStart(androidx.core.animation.Animator, boolean);
method public void onAnimationStart(androidx.core.animation.Animator);
+ method public default void onAnimationStart(androidx.core.animation.Animator, boolean);
}
public static interface Animator.AnimatorPauseListener {
@@ -109,16 +109,16 @@
public class AnticipateInterpolator implements androidx.core.animation.Interpolator {
ctor public AnticipateInterpolator();
- ctor public AnticipateInterpolator(float);
ctor public AnticipateInterpolator(android.content.Context, android.util.AttributeSet?);
+ ctor public AnticipateInterpolator(float);
method @FloatRange(to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
}
public class AnticipateOvershootInterpolator implements androidx.core.animation.Interpolator {
ctor public AnticipateOvershootInterpolator();
+ ctor public AnticipateOvershootInterpolator(android.content.Context, android.util.AttributeSet?);
ctor public AnticipateOvershootInterpolator(float);
ctor public AnticipateOvershootInterpolator(float, float);
- ctor public AnticipateOvershootInterpolator(android.content.Context, android.util.AttributeSet?);
method @FloatRange(to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
}
@@ -139,15 +139,15 @@
}
public class CycleInterpolator implements androidx.core.animation.Interpolator {
- ctor public CycleInterpolator(float);
ctor public CycleInterpolator(android.content.Context, android.util.AttributeSet?);
+ ctor public CycleInterpolator(float);
method @FloatRange(from=0, to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
}
public class DecelerateInterpolator implements androidx.core.animation.Interpolator {
ctor public DecelerateInterpolator();
- ctor public DecelerateInterpolator(float);
ctor public DecelerateInterpolator(android.content.Context, android.util.AttributeSet?);
+ ctor public DecelerateInterpolator(float);
method @FloatRange(from=0, to=1) public float getInterpolation(@FloatRange(from=0, to=1) float);
}
@@ -163,8 +163,8 @@
}
public abstract class FloatProperty<T> extends android.util.Property<T,java.lang.Float> {
- ctor public FloatProperty(String);
ctor public FloatProperty();
+ ctor public FloatProperty(String);
method public final void set(T, Float);
method public abstract void setValue(T, float);
}
@@ -181,8 +181,8 @@
}
public abstract class IntProperty<T> extends android.util.Property<T,java.lang.Integer> {
- ctor public IntProperty(String);
ctor public IntProperty();
+ ctor public IntProperty(String);
method public final void set(T, Integer);
method public abstract void setValue(T, int);
}
@@ -199,12 +199,12 @@
method public Class<?> getType();
method public abstract T? getValue();
method public boolean hasValue();
- method public static androidx.core.animation.Keyframe<java.lang.Float!> ofFloat(@FloatRange(from=0, to=1) float, float);
method public static androidx.core.animation.Keyframe<java.lang.Float!> ofFloat(@FloatRange(from=0, to=1) float);
- method public static androidx.core.animation.Keyframe<java.lang.Integer!> ofInt(@FloatRange(from=0, to=1) float, int);
+ method public static androidx.core.animation.Keyframe<java.lang.Float!> ofFloat(@FloatRange(from=0, to=1) float, float);
method public static androidx.core.animation.Keyframe<java.lang.Integer!> ofInt(@FloatRange(from=0, to=1) float);
- method public static <T> androidx.core.animation.Keyframe<T!> ofObject(@FloatRange(from=0, to=1) float, T?);
+ method public static androidx.core.animation.Keyframe<java.lang.Integer!> ofInt(@FloatRange(from=0, to=1) float, int);
method public static <T> androidx.core.animation.Keyframe<T!> ofObject(@FloatRange(from=0, to=1) float);
+ method public static <T> androidx.core.animation.Keyframe<T!> ofObject(@FloatRange(from=0, to=1) float, T?);
method public void setFraction(@FloatRange(from=0, to=1) float);
method public void setInterpolator(androidx.core.animation.Interpolator?);
method public abstract void setValue(T?);
@@ -225,23 +225,23 @@
method public static <T> androidx.core.animation.ObjectAnimator ofArgb(T, android.util.Property<T!,java.lang.Integer!>, int...);
method public static androidx.core.animation.ObjectAnimator ofFloat(Object, String, float...);
method public static androidx.core.animation.ObjectAnimator ofFloat(Object, String?, String?, android.graphics.Path);
- method public static <T> androidx.core.animation.ObjectAnimator ofFloat(T, android.util.Property<T!,java.lang.Float!>, float...);
method public static <T> androidx.core.animation.ObjectAnimator ofFloat(T, android.util.Property<T!,java.lang.Float!>?, android.util.Property<T!,java.lang.Float!>?, android.graphics.Path);
+ method public static <T> androidx.core.animation.ObjectAnimator ofFloat(T, android.util.Property<T!,java.lang.Float!>, float...);
method public static androidx.core.animation.ObjectAnimator ofInt(Object, String, int...);
method public static androidx.core.animation.ObjectAnimator ofInt(Object, String, String, android.graphics.Path);
- method public static <T> androidx.core.animation.ObjectAnimator ofInt(T, android.util.Property<T!,java.lang.Integer!>, int...);
method public static <T> androidx.core.animation.ObjectAnimator ofInt(T, android.util.Property<T!,java.lang.Integer!>?, android.util.Property<T!,java.lang.Integer!>?, android.graphics.Path);
- method public static androidx.core.animation.ObjectAnimator ofMultiFloat(Object, String, float[]![]);
+ method public static <T> androidx.core.animation.ObjectAnimator ofInt(T, android.util.Property<T!,java.lang.Integer!>, int...);
method public static androidx.core.animation.ObjectAnimator ofMultiFloat(Object, String, android.graphics.Path);
method @java.lang.SafeVarargs public static <T> androidx.core.animation.ObjectAnimator ofMultiFloat(Object, String, androidx.core.animation.TypeConverter<T!,float[]!>, androidx.core.animation.TypeEvaluator<T!>, T!...);
- method public static androidx.core.animation.ObjectAnimator ofMultiInt(Object, String, int[]![]);
+ method public static androidx.core.animation.ObjectAnimator ofMultiFloat(Object, String, float[]![]);
method public static androidx.core.animation.ObjectAnimator ofMultiInt(Object, String, android.graphics.Path);
method @java.lang.SafeVarargs public static <T> androidx.core.animation.ObjectAnimator ofMultiInt(Object, String, androidx.core.animation.TypeConverter<T!,int[]!>, androidx.core.animation.TypeEvaluator<T!>, T!...);
- method public static androidx.core.animation.ObjectAnimator ofObject(Object, String, androidx.core.animation.TypeEvaluator, java.lang.Object!...);
+ method public static androidx.core.animation.ObjectAnimator ofMultiInt(Object, String, int[]![]);
method public static androidx.core.animation.ObjectAnimator ofObject(Object, String, androidx.core.animation.TypeConverter<android.graphics.PointF!,?>?, android.graphics.Path);
- method @java.lang.SafeVarargs public static <T, V> androidx.core.animation.ObjectAnimator ofObject(T, android.util.Property<T!,V!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
+ method public static androidx.core.animation.ObjectAnimator ofObject(Object, String, androidx.core.animation.TypeEvaluator, java.lang.Object!...);
method @java.lang.SafeVarargs public static <T, V, P> androidx.core.animation.ObjectAnimator ofObject(T, android.util.Property<T!,P!>, androidx.core.animation.TypeConverter<V!,P!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
method public static <T, V> androidx.core.animation.ObjectAnimator ofObject(T, android.util.Property<T!,V!>, androidx.core.animation.TypeConverter<android.graphics.PointF!,V!>?, android.graphics.Path);
+ method @java.lang.SafeVarargs public static <T, V> androidx.core.animation.ObjectAnimator ofObject(T, android.util.Property<T!,V!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
method public static androidx.core.animation.ObjectAnimator ofPropertyValuesHolder(Object, androidx.core.animation.PropertyValuesHolder!...);
method public void setAutoCancel(boolean);
method public androidx.core.animation.ObjectAnimator setDuration(long);
@@ -251,17 +251,17 @@
public class OvershootInterpolator implements androidx.core.animation.Interpolator {
ctor public OvershootInterpolator();
- ctor public OvershootInterpolator(float);
ctor public OvershootInterpolator(android.content.Context, android.util.AttributeSet?);
+ ctor public OvershootInterpolator(float);
method @FloatRange(from=0) public float getInterpolation(@FloatRange(from=0, to=1) float);
}
public class PathInterpolator implements androidx.core.animation.Interpolator {
+ ctor public PathInterpolator(android.content.Context, android.util.AttributeSet?, org.xmlpull.v1.XmlPullParser);
+ ctor public PathInterpolator(android.content.res.Resources, android.content.res.Resources.Theme?, android.util.AttributeSet?, org.xmlpull.v1.XmlPullParser);
ctor public PathInterpolator(android.graphics.Path);
ctor public PathInterpolator(float, float);
ctor public PathInterpolator(float, float, float, float);
- ctor public PathInterpolator(android.content.Context, android.util.AttributeSet?, org.xmlpull.v1.XmlPullParser);
- ctor public PathInterpolator(android.content.res.Resources, android.content.res.Resources.Theme?, android.util.AttributeSet?, org.xmlpull.v1.XmlPullParser);
method public float getInterpolation(@FloatRange(from=0, to=1) float);
}
@@ -274,25 +274,25 @@
public class PropertyValuesHolder implements java.lang.Cloneable {
method public androidx.core.animation.PropertyValuesHolder clone();
method public String getPropertyName();
- method public static androidx.core.animation.PropertyValuesHolder ofFloat(String, float...);
method public static androidx.core.animation.PropertyValuesHolder ofFloat(android.util.Property<?,java.lang.Float!>, float...);
- method public static androidx.core.animation.PropertyValuesHolder ofInt(String, int...);
+ method public static androidx.core.animation.PropertyValuesHolder ofFloat(String, float...);
method public static androidx.core.animation.PropertyValuesHolder ofInt(android.util.Property<?,java.lang.Integer!>, int...);
- method @java.lang.SafeVarargs public static androidx.core.animation.PropertyValuesHolder ofKeyframe(String, androidx.core.animation.Keyframe!...);
+ method public static androidx.core.animation.PropertyValuesHolder ofInt(String, int...);
method @java.lang.SafeVarargs public static androidx.core.animation.PropertyValuesHolder ofKeyframe(android.util.Property, androidx.core.animation.Keyframe!...);
- method public static androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, float[]![]);
+ method @java.lang.SafeVarargs public static androidx.core.animation.PropertyValuesHolder ofKeyframe(String, androidx.core.animation.Keyframe!...);
method public static androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, android.graphics.Path);
- method @java.lang.SafeVarargs public static <V> androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, androidx.core.animation.TypeConverter<V!,float[]!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
method @java.lang.SafeVarargs public static <T> androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, androidx.core.animation.TypeConverter<T!,float[]!>?, androidx.core.animation.TypeEvaluator<T!>, androidx.core.animation.Keyframe!...);
- method public static androidx.core.animation.PropertyValuesHolder ofMultiInt(String, int[]![]);
+ method @java.lang.SafeVarargs public static <V> androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, androidx.core.animation.TypeConverter<V!,float[]!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
+ method public static androidx.core.animation.PropertyValuesHolder ofMultiFloat(String, float[]![]);
method public static androidx.core.animation.PropertyValuesHolder ofMultiInt(String, android.graphics.Path);
- method @java.lang.SafeVarargs public static <V> androidx.core.animation.PropertyValuesHolder ofMultiInt(String, androidx.core.animation.TypeConverter<V!,int[]!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
method @java.lang.SafeVarargs public static <T> androidx.core.animation.PropertyValuesHolder ofMultiInt(String, androidx.core.animation.TypeConverter<T!,int[]!>?, androidx.core.animation.TypeEvaluator<T!>, androidx.core.animation.Keyframe!...);
- method public static androidx.core.animation.PropertyValuesHolder ofObject(String, androidx.core.animation.TypeEvaluator, java.lang.Object!...);
- method public static androidx.core.animation.PropertyValuesHolder ofObject(String, androidx.core.animation.TypeConverter<android.graphics.PointF!,?>?, android.graphics.Path);
+ method @java.lang.SafeVarargs public static <V> androidx.core.animation.PropertyValuesHolder ofMultiInt(String, androidx.core.animation.TypeConverter<V!,int[]!>, androidx.core.animation.TypeEvaluator<V!>, V!...);
+ method public static androidx.core.animation.PropertyValuesHolder ofMultiInt(String, int[]![]);
method @java.lang.SafeVarargs public static <V> androidx.core.animation.PropertyValuesHolder ofObject(android.util.Property, androidx.core.animation.TypeEvaluator<V!>, V!...);
- method @java.lang.SafeVarargs public static <T, V> androidx.core.animation.PropertyValuesHolder ofObject(android.util.Property<?,V!>, androidx.core.animation.TypeConverter<T!,V!>, androidx.core.animation.TypeEvaluator<T!>, T!...);
method public static <V> androidx.core.animation.PropertyValuesHolder ofObject(android.util.Property<?,V!>, androidx.core.animation.TypeConverter<android.graphics.PointF!,V!>?, android.graphics.Path);
+ method @java.lang.SafeVarargs public static <T, V> androidx.core.animation.PropertyValuesHolder ofObject(android.util.Property<?,V!>, androidx.core.animation.TypeConverter<T!,V!>, androidx.core.animation.TypeEvaluator<T!>, T!...);
+ method public static androidx.core.animation.PropertyValuesHolder ofObject(String, androidx.core.animation.TypeConverter<android.graphics.PointF!,?>?, android.graphics.Path);
+ method public static androidx.core.animation.PropertyValuesHolder ofObject(String, androidx.core.animation.TypeEvaluator, java.lang.Object!...);
method public void setConverter(androidx.core.animation.TypeConverter?);
method public void setEvaluator(androidx.core.animation.TypeEvaluator);
method public void setFloatValues(float...);
diff --git a/core/core-animation/build.gradle b/core/core-animation/build.gradle
index fb7cc95..940504b 100644
--- a/core/core-animation/build.gradle
+++ b/core/core-animation/build.gradle
@@ -32,7 +32,7 @@
}
androidx {
- name = "Android Support Animation"
+ name = "Animation"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.CORE_ANIMATION
inceptionYear = "2018"
diff --git a/core/core-appdigest/api/public_plus_experimental_current.txt b/core/core-appdigest/api/public_plus_experimental_current.txt
deleted file mode 100644
index a69aa74..0000000
--- a/core/core-appdigest/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-// Signature format: 4.0
-package androidx.core.appdigest {
-
- public final class Checksum {
- method public java.security.cert.Certificate? getInstallerCertificate() throws java.security.cert.CertificateException;
- method public String? getInstallerPackageName();
- method public String? getSplitName();
- method public int getType();
- method public byte[] getValue();
- field public static final int TYPE_PARTIAL_MERKLE_ROOT_1M_SHA256 = 32; // 0x20
- field public static final int TYPE_PARTIAL_MERKLE_ROOT_1M_SHA512 = 64; // 0x40
- field @Deprecated public static final int TYPE_WHOLE_MD5 = 2; // 0x2
- field public static final int TYPE_WHOLE_MERKLE_ROOT_4K_SHA256 = 1; // 0x1
- field @Deprecated public static final int TYPE_WHOLE_SHA1 = 4; // 0x4
- field @Deprecated public static final int TYPE_WHOLE_SHA256 = 8; // 0x8
- field @Deprecated public static final int TYPE_WHOLE_SHA512 = 16; // 0x10
- }
-
- public final class Checksums {
- method public static com.google.common.util.concurrent.ListenableFuture<androidx.core.appdigest.Checksum![]!> getChecksums(android.content.Context, String, boolean, int, java.util.List<java.security.cert.Certificate!>, java.util.concurrent.Executor) throws java.security.cert.CertificateEncodingException, android.content.pm.PackageManager.NameNotFoundException;
- method public static com.google.common.util.concurrent.ListenableFuture<androidx.core.appdigest.Checksum![]!> getFileChecksums(android.content.Context, String, int, String?, java.util.List<java.security.cert.Certificate!>, java.util.concurrent.Executor);
- field public static final java.util.List<java.security.cert.Certificate!> TRUST_ALL;
- field public static final java.util.List<java.security.cert.Certificate!> TRUST_NONE;
- }
-
-}
-
diff --git a/core/core-appdigest/build.gradle b/core/core-appdigest/build.gradle
index a0d4af2..7dadc10 100644
--- a/core/core-appdigest/build.gradle
+++ b/core/core-appdigest/build.gradle
@@ -33,7 +33,7 @@
}
androidx {
- name = "AndroidX AppDigest Library"
+ name = "AppDigest"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.CORE_APPDIGEST
inceptionYear = "2020"
diff --git a/core/core-google-shortcuts/api/public_plus_experimental_current.txt b/core/core-google-shortcuts/api/public_plus_experimental_current.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/core/core-google-shortcuts/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/core/core-google-shortcuts/build.gradle b/core/core-google-shortcuts/build.gradle
index 3071a80..615be8f 100644
--- a/core/core-google-shortcuts/build.gradle
+++ b/core/core-google-shortcuts/build.gradle
@@ -54,7 +54,7 @@
}
androidx {
- name = "Google Shortcuts Integration Library"
+ name = "Google Shortcuts Integration"
type = LibraryType.PUBLISHED_LIBRARY
mavenVersion = LibraryVersions.CORE_GOOGLE_SHORTCUTS
inceptionYear = "2021"
diff --git a/core/core-graphics-integration-tests/testapp/build.gradle b/core/core-graphics-integration-tests/testapp/build.gradle
index 59d5bb3..768d7b4 100644
--- a/core/core-graphics-integration-tests/testapp/build.gradle
+++ b/core/core-graphics-integration-tests/testapp/build.gradle
@@ -40,7 +40,7 @@
}
androidx {
- name = "AndroidX bitmap scaling Sample"
+ name = "bitmap scaling Sample"
inceptionYear = "2021"
description = "Sample for the AndoridX graphics bitmap compatibility"
}
diff --git a/core/core-i18n/api/current.txt b/core/core-i18n/api/current.txt
index 39d3859..5a85814 100644
--- a/core/core-i18n/api/current.txt
+++ b/core/core-i18n/api/current.txt
@@ -2,13 +2,13 @@
package androidx.core.i18n {
public final class DateTimeFormatter {
- ctor public DateTimeFormatter(android.content.Context context, androidx.core.i18n.DateTimeFormatterSkeletonOptions options, optional java.util.Locale locale);
ctor public DateTimeFormatter(android.content.Context context, androidx.core.i18n.DateTimeFormatterSkeletonOptions options);
- ctor public DateTimeFormatter(androidx.core.i18n.DateTimeFormatterJdkStyleOptions options, optional java.util.Locale locale);
+ ctor public DateTimeFormatter(android.content.Context context, androidx.core.i18n.DateTimeFormatterSkeletonOptions options, optional java.util.Locale locale);
ctor public DateTimeFormatter(androidx.core.i18n.DateTimeFormatterJdkStyleOptions options);
- method public String format(long milliseconds);
- method public String format(java.util.Date date);
+ ctor public DateTimeFormatter(androidx.core.i18n.DateTimeFormatterJdkStyleOptions options, optional java.util.Locale locale);
method public String format(java.util.Calendar calendar);
+ method public String format(java.util.Date date);
+ method public String format(long milliseconds);
}
public final class DateTimeFormatterCommonOptions {
@@ -264,16 +264,16 @@
}
public final class MessageFormat {
- method public static String format(android.content.Context context, optional java.util.Locale locale, String msg, java.util.Map<java.lang.String,?> namedArguments);
- method public static String format(android.content.Context context, String msg, java.util.Map<java.lang.String,?> namedArguments);
method public static String format(android.content.Context context, int id, java.util.Map<java.lang.String,?> namedArguments);
+ method public static String format(android.content.Context context, String msg, java.util.Map<java.lang.String,?> namedArguments);
+ method public static String format(android.content.Context context, optional java.util.Locale locale, String msg, java.util.Map<java.lang.String,?> namedArguments);
field public static final androidx.core.i18n.MessageFormat.Companion Companion;
}
public static final class MessageFormat.Companion {
- method public String format(android.content.Context context, optional java.util.Locale locale, String msg, java.util.Map<java.lang.String,?> namedArguments);
- method public String format(android.content.Context context, String msg, java.util.Map<java.lang.String,?> namedArguments);
method public String format(android.content.Context context, int id, java.util.Map<java.lang.String,?> namedArguments);
+ method public String format(android.content.Context context, String msg, java.util.Map<java.lang.String,?> namedArguments);
+ method public String format(android.content.Context context, optional java.util.Locale locale, String msg, java.util.Map<java.lang.String,?> namedArguments);
}
}
diff --git a/core/core-i18n/api/public_plus_experimental_current.txt b/core/core-i18n/api/public_plus_experimental_current.txt
deleted file mode 100644
index 39d3859..0000000
--- a/core/core-i18n/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,280 +0,0 @@
-// Signature format: 4.0
-package androidx.core.i18n {
-
- public final class DateTimeFormatter {
- ctor public DateTimeFormatter(android.content.Context context, androidx.core.i18n.DateTimeFormatterSkeletonOptions options, optional java.util.Locale locale);
- ctor public DateTimeFormatter(android.content.Context context, androidx.core.i18n.DateTimeFormatterSkeletonOptions options);
- ctor public DateTimeFormatter(androidx.core.i18n.DateTimeFormatterJdkStyleOptions options, optional java.util.Locale locale);
- ctor public DateTimeFormatter(androidx.core.i18n.DateTimeFormatterJdkStyleOptions options);
- method public String format(long milliseconds);
- method public String format(java.util.Date date);
- method public String format(java.util.Calendar calendar);
- }
-
- public final class DateTimeFormatterCommonOptions {
- ctor public DateTimeFormatterCommonOptions();
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions ABBR_MONTH_DAY;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions ABBR_MONTH_WEEKDAY_DAY;
- field public static final androidx.core.i18n.DateTimeFormatterCommonOptions.Companion Companion;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions HOUR24_MINUTE;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions HOUR24_MINUTE_SECOND;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions HOUR_MINUTE;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions HOUR_MINUTE_SECOND;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions MINUTE_SECOND;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions MONTH_DAY;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions MONTH_WEEKDAY_DAY;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions NUM_MONTH_DAY;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions NUM_MONTH_WEEKDAY_DAY;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions YEAR_ABBR_MONTH;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions YEAR_ABBR_MONTH_DAY;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions YEAR_ABBR_MONTH_WEEKDAY_DAY;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions YEAR_MONTH;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions YEAR_MONTH_DAY;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions YEAR_MONTH_WEEKDAY_DAY;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions YEAR_NUM_MONTH;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions YEAR_NUM_MONTH_DAY;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions YEAR_NUM_MONTH_WEEKDAY_DAY;
- }
-
- public static final class DateTimeFormatterCommonOptions.Companion {
- }
-
- public final class DateTimeFormatterJdkStyleOptions {
- method public static androidx.core.i18n.DateTimeFormatterJdkStyleOptions createDateInstance(int style);
- method public static androidx.core.i18n.DateTimeFormatterJdkStyleOptions createDateTimeInstance(int dateStyle, int timeStyle);
- method public static androidx.core.i18n.DateTimeFormatterJdkStyleOptions createTimeInstance(int style);
- method public int getDateStyle();
- method public int getTimeStyle();
- property public final int dateStyle;
- property public final int timeStyle;
- field public static final androidx.core.i18n.DateTimeFormatterJdkStyleOptions.Companion Companion;
- }
-
- public static final class DateTimeFormatterJdkStyleOptions.Companion {
- method public androidx.core.i18n.DateTimeFormatterJdkStyleOptions createDateInstance(int style);
- method public androidx.core.i18n.DateTimeFormatterJdkStyleOptions createDateTimeInstance(int dateStyle, int timeStyle);
- method public androidx.core.i18n.DateTimeFormatterJdkStyleOptions createTimeInstance(int style);
- }
-
- public final class DateTimeFormatterSkeletonOptions {
- method public static androidx.core.i18n.DateTimeFormatterSkeletonOptions fromString(String value);
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.Day getDay();
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.Era getEra();
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.FractionalSecond getFractionalSecond();
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.Hour getHour();
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.Minute getMinute();
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.Month getMonth();
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.Period getPeriod();
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.Second getSecond();
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.Timezone getTimezone();
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.WeekDay getWeekDay();
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.Year getYear();
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Companion Companion;
- }
-
- public static final class DateTimeFormatterSkeletonOptions.Builder {
- ctor public DateTimeFormatterSkeletonOptions.Builder(optional androidx.core.i18n.DateTimeFormatterSkeletonOptions.Era era, optional androidx.core.i18n.DateTimeFormatterSkeletonOptions.Year year, optional androidx.core.i18n.DateTimeFormatterSkeletonOptions.Month month, optional androidx.core.i18n.DateTimeFormatterSkeletonOptions.Day day, optional androidx.core.i18n.DateTimeFormatterSkeletonOptions.WeekDay weekDay, optional androidx.core.i18n.DateTimeFormatterSkeletonOptions.Period period, optional androidx.core.i18n.DateTimeFormatterSkeletonOptions.Hour hour, optional androidx.core.i18n.DateTimeFormatterSkeletonOptions.Minute minute, optional androidx.core.i18n.DateTimeFormatterSkeletonOptions.Second second, optional androidx.core.i18n.DateTimeFormatterSkeletonOptions.FractionalSecond fractionalSecond, optional androidx.core.i18n.DateTimeFormatterSkeletonOptions.Timezone timezone);
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions build();
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.Builder setDay(androidx.core.i18n.DateTimeFormatterSkeletonOptions.Day day);
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.Builder setEra(androidx.core.i18n.DateTimeFormatterSkeletonOptions.Era era);
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.Builder setFractionalSecond(androidx.core.i18n.DateTimeFormatterSkeletonOptions.FractionalSecond fractionalSecond);
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.Builder setHour(androidx.core.i18n.DateTimeFormatterSkeletonOptions.Hour hour);
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.Builder setMinute(androidx.core.i18n.DateTimeFormatterSkeletonOptions.Minute minute);
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.Builder setMonth(androidx.core.i18n.DateTimeFormatterSkeletonOptions.Month month);
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.Builder setPeriod(androidx.core.i18n.DateTimeFormatterSkeletonOptions.Period period);
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.Builder setSecond(androidx.core.i18n.DateTimeFormatterSkeletonOptions.Second second);
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.Builder setTimezone(androidx.core.i18n.DateTimeFormatterSkeletonOptions.Timezone timezone);
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.Builder setWeekDay(androidx.core.i18n.DateTimeFormatterSkeletonOptions.WeekDay weekDay);
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.Builder setYear(androidx.core.i18n.DateTimeFormatterSkeletonOptions.Year year);
- }
-
- public static final class DateTimeFormatterSkeletonOptions.Companion {
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions fromString(String value);
- }
-
- public static final class DateTimeFormatterSkeletonOptions.Day {
- method public static androidx.core.i18n.DateTimeFormatterSkeletonOptions.Day fromString(String value);
- method public String getValue();
- property public final String value;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Day.Companion Companion;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Day NONE;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Day NUMERIC;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Day TWO_DIGITS;
- }
-
- public static final class DateTimeFormatterSkeletonOptions.Day.Companion {
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.Day fromString(String value);
- }
-
- public static final class DateTimeFormatterSkeletonOptions.Era {
- method public static androidx.core.i18n.DateTimeFormatterSkeletonOptions.Era fromString(String value);
- method public String getValue();
- property public final String value;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Era ABBREVIATED;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Era.Companion Companion;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Era NARROW;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Era NONE;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Era WIDE;
- }
-
- public static final class DateTimeFormatterSkeletonOptions.Era.Companion {
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.Era fromString(String value);
- }
-
- public static final class DateTimeFormatterSkeletonOptions.FractionalSecond {
- method public static androidx.core.i18n.DateTimeFormatterSkeletonOptions.FractionalSecond fromString(String value);
- method public String getValue();
- property public final String value;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.FractionalSecond.Companion Companion;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.FractionalSecond NONE;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.FractionalSecond NUMERIC_1_DIGIT;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.FractionalSecond NUMERIC_2_DIGITS;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.FractionalSecond NUMERIC_3_DIGITS;
- }
-
- public static final class DateTimeFormatterSkeletonOptions.FractionalSecond.Companion {
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.FractionalSecond fromString(String value);
- }
-
- public static final class DateTimeFormatterSkeletonOptions.Hour {
- method public static androidx.core.i18n.DateTimeFormatterSkeletonOptions.Hour fromString(String value);
- method public String getValue();
- property public final String value;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Hour.Companion Companion;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Hour FORCE_12H_NUMERIC;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Hour FORCE_12H_TWO_DIGITS;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Hour FORCE_24H_NUMERIC;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Hour FORCE_24H_TWO_DIGITS;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Hour NONE;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Hour NUMERIC;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Hour TWO_DIGITS;
- }
-
- public static final class DateTimeFormatterSkeletonOptions.Hour.Companion {
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.Hour fromString(String value);
- }
-
- public static final class DateTimeFormatterSkeletonOptions.Minute {
- method public static androidx.core.i18n.DateTimeFormatterSkeletonOptions.Minute fromString(String value);
- method public String getValue();
- property public final String value;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Minute.Companion Companion;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Minute NONE;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Minute NUMERIC;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Minute TWO_DIGITS;
- }
-
- public static final class DateTimeFormatterSkeletonOptions.Minute.Companion {
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.Minute fromString(String value);
- }
-
- public static final class DateTimeFormatterSkeletonOptions.Month {
- method public static androidx.core.i18n.DateTimeFormatterSkeletonOptions.Month fromString(String value);
- method public String getValue();
- property public final String value;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Month ABBREVIATED;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Month.Companion Companion;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Month NARROW;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Month NONE;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Month NUMERIC;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Month TWO_DIGITS;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Month WIDE;
- }
-
- public static final class DateTimeFormatterSkeletonOptions.Month.Companion {
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.Month fromString(String value);
- }
-
- public static final class DateTimeFormatterSkeletonOptions.Period {
- method public static androidx.core.i18n.DateTimeFormatterSkeletonOptions.Period fromString(String value);
- method public String getValue();
- property public final String value;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Period ABBREVIATED;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Period.Companion Companion;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Period FLEXIBLE;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Period NARROW;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Period NONE;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Period WIDE;
- }
-
- public static final class DateTimeFormatterSkeletonOptions.Period.Companion {
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.Period fromString(String value);
- }
-
- public static final class DateTimeFormatterSkeletonOptions.Second {
- method public static androidx.core.i18n.DateTimeFormatterSkeletonOptions.Second fromString(String value);
- method public String getValue();
- property public final String value;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Second.Companion Companion;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Second NONE;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Second NUMERIC;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Second TWO_DIGITS;
- }
-
- public static final class DateTimeFormatterSkeletonOptions.Second.Companion {
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.Second fromString(String value);
- }
-
- public static final class DateTimeFormatterSkeletonOptions.Timezone {
- method public static androidx.core.i18n.DateTimeFormatterSkeletonOptions.Timezone fromString(String value);
- method public String getValue();
- property public final String value;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Timezone.Companion Companion;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Timezone LONG;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Timezone LONG_GENERIC;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Timezone LONG_OFFSET;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Timezone NONE;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Timezone SHORT;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Timezone SHORT_GENERIC;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Timezone SHORT_OFFSET;
- }
-
- public static final class DateTimeFormatterSkeletonOptions.Timezone.Companion {
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.Timezone fromString(String value);
- }
-
- public static final class DateTimeFormatterSkeletonOptions.WeekDay {
- method public static androidx.core.i18n.DateTimeFormatterSkeletonOptions.WeekDay fromString(String value);
- method public String getValue();
- property public final String value;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.WeekDay ABBREVIATED;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.WeekDay.Companion Companion;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.WeekDay NARROW;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.WeekDay NONE;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.WeekDay SHORT;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.WeekDay WIDE;
- }
-
- public static final class DateTimeFormatterSkeletonOptions.WeekDay.Companion {
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.WeekDay fromString(String value);
- }
-
- public static final class DateTimeFormatterSkeletonOptions.Year {
- method public static androidx.core.i18n.DateTimeFormatterSkeletonOptions.Year fromString(String value);
- method public String getValue();
- property public final String value;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Year.Companion Companion;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Year NONE;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Year NUMERIC;
- field public static final androidx.core.i18n.DateTimeFormatterSkeletonOptions.Year TWO_DIGITS;
- }
-
- public static final class DateTimeFormatterSkeletonOptions.Year.Companion {
- method public androidx.core.i18n.DateTimeFormatterSkeletonOptions.Year fromString(String value);
- }
-
- public final class MessageFormat {
- method public static String format(android.content.Context context, optional java.util.Locale locale, String msg, java.util.Map<java.lang.String,?> namedArguments);
- method public static String format(android.content.Context context, String msg, java.util.Map<java.lang.String,?> namedArguments);
- method public static String format(android.content.Context context, int id, java.util.Map<java.lang.String,?> namedArguments);
- field public static final androidx.core.i18n.MessageFormat.Companion Companion;
- }
-
- public static final class MessageFormat.Companion {
- method public String format(android.content.Context context, optional java.util.Locale locale, String msg, java.util.Map<java.lang.String,?> namedArguments);
- method public String format(android.content.Context context, String msg, java.util.Map<java.lang.String,?> namedArguments);
- method public String format(android.content.Context context, int id, java.util.Map<java.lang.String,?> namedArguments);
- }
-
-}
-
diff --git a/core/core-i18n/api/restricted_current.txt b/core/core-i18n/api/restricted_current.txt
index 39d3859..5a85814 100644
--- a/core/core-i18n/api/restricted_current.txt
+++ b/core/core-i18n/api/restricted_current.txt
@@ -2,13 +2,13 @@
package androidx.core.i18n {
public final class DateTimeFormatter {
- ctor public DateTimeFormatter(android.content.Context context, androidx.core.i18n.DateTimeFormatterSkeletonOptions options, optional java.util.Locale locale);
ctor public DateTimeFormatter(android.content.Context context, androidx.core.i18n.DateTimeFormatterSkeletonOptions options);
- ctor public DateTimeFormatter(androidx.core.i18n.DateTimeFormatterJdkStyleOptions options, optional java.util.Locale locale);
+ ctor public DateTimeFormatter(android.content.Context context, androidx.core.i18n.DateTimeFormatterSkeletonOptions options, optional java.util.Locale locale);
ctor public DateTimeFormatter(androidx.core.i18n.DateTimeFormatterJdkStyleOptions options);
- method public String format(long milliseconds);
- method public String format(java.util.Date date);
+ ctor public DateTimeFormatter(androidx.core.i18n.DateTimeFormatterJdkStyleOptions options, optional java.util.Locale locale);
method public String format(java.util.Calendar calendar);
+ method public String format(java.util.Date date);
+ method public String format(long milliseconds);
}
public final class DateTimeFormatterCommonOptions {
@@ -264,16 +264,16 @@
}
public final class MessageFormat {
- method public static String format(android.content.Context context, optional java.util.Locale locale, String msg, java.util.Map<java.lang.String,?> namedArguments);
- method public static String format(android.content.Context context, String msg, java.util.Map<java.lang.String,?> namedArguments);
method public static String format(android.content.Context context, int id, java.util.Map<java.lang.String,?> namedArguments);
+ method public static String format(android.content.Context context, String msg, java.util.Map<java.lang.String,?> namedArguments);
+ method public static String format(android.content.Context context, optional java.util.Locale locale, String msg, java.util.Map<java.lang.String,?> namedArguments);
field public static final androidx.core.i18n.MessageFormat.Companion Companion;
}
public static final class MessageFormat.Companion {
- method public String format(android.content.Context context, optional java.util.Locale locale, String msg, java.util.Map<java.lang.String,?> namedArguments);
- method public String format(android.content.Context context, String msg, java.util.Map<java.lang.String,?> namedArguments);
method public String format(android.content.Context context, int id, java.util.Map<java.lang.String,?> namedArguments);
+ method public String format(android.content.Context context, String msg, java.util.Map<java.lang.String,?> namedArguments);
+ method public String format(android.content.Context context, optional java.util.Locale locale, String msg, java.util.Map<java.lang.String,?> namedArguments);
}
}
diff --git a/core/core-i18n/src/androidTest/java/androidx/core/i18n/CheckDeviceSettingsTest.kt b/core/core-i18n/src/androidTest/java/androidx/core/i18n/CheckDeviceSettingsTest.kt
index 877b8ca..a65431d 100644
--- a/core/core-i18n/src/androidTest/java/androidx/core/i18n/CheckDeviceSettingsTest.kt
+++ b/core/core-i18n/src/androidTest/java/androidx/core/i18n/CheckDeviceSettingsTest.kt
@@ -22,10 +22,10 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
+import java.util.Locale
import org.junit.Assert
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.Locale
@RunWith(AndroidJUnit4::class)
class CheckDeviceSettingsTest {
diff --git a/core/core-i18n/src/androidTest/java/androidx/core/i18n/DateTimeFormatJdkStylesTest.kt b/core/core-i18n/src/androidTest/java/androidx/core/i18n/DateTimeFormatJdkStylesTest.kt
index 4f0a3ea..dae2fa6 100644
--- a/core/core-i18n/src/androidTest/java/androidx/core/i18n/DateTimeFormatJdkStylesTest.kt
+++ b/core/core-i18n/src/androidTest/java/androidx/core/i18n/DateTimeFormatJdkStylesTest.kt
@@ -19,13 +19,13 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
-import org.junit.Assert.assertEquals
-import org.junit.Test
-import org.junit.runner.RunWith
import java.text.DateFormat
import java.util.Calendar
import java.util.GregorianCalendar
import java.util.Locale
+import org.junit.Assert.assertEquals
+import org.junit.Test
+import org.junit.runner.RunWith
/**
* Instrumented test, which will execute on an Android device.
diff --git a/core/core-i18n/src/androidTest/java/androidx/core/i18n/DateTimeFormatterTest.kt b/core/core-i18n/src/androidTest/java/androidx/core/i18n/DateTimeFormatterTest.kt
index 9534b9f..94ff57d 100644
--- a/core/core-i18n/src/androidTest/java/androidx/core/i18n/DateTimeFormatterTest.kt
+++ b/core/core-i18n/src/androidTest/java/androidx/core/i18n/DateTimeFormatterTest.kt
@@ -19,25 +19,25 @@
import android.annotation.SuppressLint
import android.os.Build
import android.util.Log
+import androidx.core.i18n.DateTimeFormatterSkeletonOptions as SkeletonOptions
import androidx.core.os.BuildCompat
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
-import org.junit.After
-import org.junit.Assert.assertEquals
-import org.junit.Before
-import org.junit.BeforeClass
-import org.junit.Test
-import org.junit.runner.RunWith
import java.util.Calendar
import java.util.Date
import java.util.GregorianCalendar
import java.util.Locale
import java.util.TimeZone
import kotlin.test.assertFailsWith
-import androidx.core.i18n.DateTimeFormatterSkeletonOptions as SkeletonOptions
+import org.junit.After
+import org.junit.Assert.assertEquals
+import org.junit.Before
+import org.junit.BeforeClass
+import org.junit.Test
+import org.junit.runner.RunWith
/** Must execute on an Android device. */
@RunWith(AndroidJUnit4::class)
diff --git a/core/core-i18n/src/main/java/androidx/core/i18n/DateTimeFormatterCommonOptions.kt b/core/core-i18n/src/main/java/androidx/core/i18n/DateTimeFormatterCommonOptions.kt
index 4681fba..e5981a7 100644
--- a/core/core-i18n/src/main/java/androidx/core/i18n/DateTimeFormatterCommonOptions.kt
+++ b/core/core-i18n/src/main/java/androidx/core/i18n/DateTimeFormatterCommonOptions.kt
@@ -17,11 +17,11 @@
package androidx.core.i18n
import androidx.core.i18n.DateTimeFormatterSkeletonOptions.Day
-import androidx.core.i18n.DateTimeFormatterSkeletonOptions.Month
-import androidx.core.i18n.DateTimeFormatterSkeletonOptions.WeekDay
import androidx.core.i18n.DateTimeFormatterSkeletonOptions.Hour
import androidx.core.i18n.DateTimeFormatterSkeletonOptions.Minute
+import androidx.core.i18n.DateTimeFormatterSkeletonOptions.Month
import androidx.core.i18n.DateTimeFormatterSkeletonOptions.Second
+import androidx.core.i18n.DateTimeFormatterSkeletonOptions.WeekDay
import androidx.core.i18n.DateTimeFormatterSkeletonOptions.Year
/** Used to support common styles, similar to the ones defined in Closure / Material.
diff --git a/core/core-ktx/api/current.txt b/core/core-ktx/api/current.txt
index 89ab047..578da41 100644
--- a/core/core-ktx/api/current.txt
+++ b/core/core-ktx/api/current.txt
@@ -91,11 +91,11 @@
}
public final class CanvasKt {
+ method public static inline void withClip(android.graphics.Canvas, android.graphics.Path clipPath, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
method public static inline void withClip(android.graphics.Canvas, android.graphics.Rect clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
method public static inline void withClip(android.graphics.Canvas, android.graphics.RectF clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withClip(android.graphics.Canvas, int left, int top, int right, int bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
method public static inline void withClip(android.graphics.Canvas, float left, float top, float right, float bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withClip(android.graphics.Canvas, android.graphics.Path clipPath, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withClip(android.graphics.Canvas, int left, int top, int right, int bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
method public static inline void withMatrix(android.graphics.Canvas, optional android.graphics.Matrix matrix, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
method public static inline void withRotation(android.graphics.Canvas, optional float degrees, optional float pivotX, optional float pivotY, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
method public static inline void withSave(android.graphics.Canvas, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
@@ -117,12 +117,12 @@
method @RequiresApi(26) public static inline operator float component4(android.graphics.Color);
method public static inline operator int component4(@ColorInt int);
method @RequiresApi(26) public static inline operator float component4(@ColorLong long);
- method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace.Named colorSpace);
- method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace colorSpace);
- method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace.Named colorSpace);
- method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace colorSpace);
- method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace.Named colorSpace);
method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace colorSpace);
+ method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace.Named colorSpace);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace colorSpace);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace.Named colorSpace);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace colorSpace);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace.Named colorSpace);
method public static inline int getAlpha(@ColorInt int);
method @RequiresApi(26) public static inline float getAlpha(@ColorLong long);
method public static inline int getBlue(@ColorInt int);
@@ -139,8 +139,8 @@
method @RequiresApi(26) public static operator android.graphics.Color plus(android.graphics.Color, android.graphics.Color c);
method @RequiresApi(26) public static inline android.graphics.Color toColor(@ColorInt int);
method @RequiresApi(26) public static inline android.graphics.Color toColor(@ColorLong long);
- method @ColorInt @RequiresApi(26) public static inline int toColorInt(@ColorLong long);
method @ColorInt public static inline int toColorInt(String);
+ method @ColorInt @RequiresApi(26) public static inline int toColorInt(@ColorLong long);
method @ColorLong @RequiresApi(26) public static inline long toColorLong(@ColorInt int);
}
@@ -182,12 +182,12 @@
method public static inline operator android.graphics.Point div(android.graphics.Point, float scalar);
method public static inline operator android.graphics.PointF div(android.graphics.PointF, float scalar);
method public static inline operator android.graphics.Point minus(android.graphics.Point, android.graphics.Point p);
- method public static inline operator android.graphics.PointF minus(android.graphics.PointF, android.graphics.PointF p);
method public static inline operator android.graphics.Point minus(android.graphics.Point, int xy);
+ method public static inline operator android.graphics.PointF minus(android.graphics.PointF, android.graphics.PointF p);
method public static inline operator android.graphics.PointF minus(android.graphics.PointF, float xy);
method public static inline operator android.graphics.Point plus(android.graphics.Point, android.graphics.Point p);
- method public static inline operator android.graphics.PointF plus(android.graphics.PointF, android.graphics.PointF p);
method public static inline operator android.graphics.Point plus(android.graphics.Point, int xy);
+ method public static inline operator android.graphics.PointF plus(android.graphics.PointF, android.graphics.PointF p);
method public static inline operator android.graphics.PointF plus(android.graphics.PointF, float xy);
method public static inline operator android.graphics.Point times(android.graphics.Point, float scalar);
method public static inline operator android.graphics.PointF times(android.graphics.PointF, float scalar);
@@ -215,23 +215,23 @@
method public static inline operator float component4(android.graphics.RectF);
method public static inline operator boolean contains(android.graphics.Rect, android.graphics.Point p);
method public static inline operator boolean contains(android.graphics.RectF, android.graphics.PointF p);
- method public static inline operator android.graphics.Region minus(android.graphics.Rect, android.graphics.Rect r);
- method public static inline operator android.graphics.Region minus(android.graphics.RectF, android.graphics.RectF r);
- method public static inline operator android.graphics.Rect minus(android.graphics.Rect, int xy);
- method public static inline operator android.graphics.RectF minus(android.graphics.RectF, float xy);
method public static inline operator android.graphics.Rect minus(android.graphics.Rect, android.graphics.Point xy);
+ method public static inline operator android.graphics.Region minus(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline operator android.graphics.Rect minus(android.graphics.Rect, int xy);
method public static inline operator android.graphics.RectF minus(android.graphics.RectF, android.graphics.PointF xy);
+ method public static inline operator android.graphics.Region minus(android.graphics.RectF, android.graphics.RectF r);
+ method public static inline operator android.graphics.RectF minus(android.graphics.RectF, float xy);
method public static inline infix android.graphics.Rect or(android.graphics.Rect, android.graphics.Rect r);
method public static inline infix android.graphics.RectF or(android.graphics.RectF, android.graphics.RectF r);
- method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Rect r);
- method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.RectF r);
- method public static inline operator android.graphics.Rect plus(android.graphics.Rect, int xy);
- method public static inline operator android.graphics.RectF plus(android.graphics.RectF, float xy);
method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Point xy);
+ method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline operator android.graphics.Rect plus(android.graphics.Rect, int xy);
method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.PointF xy);
+ method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.RectF r);
+ method public static inline operator android.graphics.RectF plus(android.graphics.RectF, float xy);
method public static inline operator android.graphics.Rect times(android.graphics.Rect, int factor);
- method public static inline operator android.graphics.RectF times(android.graphics.RectF, int factor);
method public static inline operator android.graphics.RectF times(android.graphics.RectF, float factor);
+ method public static inline operator android.graphics.RectF times(android.graphics.RectF, int factor);
method public static inline android.graphics.Rect toRect(android.graphics.RectF);
method public static inline android.graphics.RectF toRectF(android.graphics.Rect);
method public static inline android.graphics.Region toRegion(android.graphics.Rect);
@@ -272,8 +272,8 @@
}
public final class ColorDrawableKt {
- method public static inline android.graphics.drawable.ColorDrawable toDrawable(@ColorInt int);
method @RequiresApi(26) public static inline android.graphics.drawable.ColorDrawable toDrawable(android.graphics.Color);
+ method public static inline android.graphics.drawable.ColorDrawable toDrawable(@ColorInt int);
}
public final class DrawableKt {
@@ -304,8 +304,8 @@
public final class UriKt {
method public static java.io.File toFile(android.net.Uri);
- method public static inline android.net.Uri toUri(String);
method public static inline android.net.Uri toUri(java.io.File);
+ method public static inline android.net.Uri toUri(String);
}
}
@@ -313,8 +313,8 @@
package androidx.core.os {
public final class BundleKt {
- method public static android.os.Bundle bundleOf(kotlin.Pair<java.lang.String,?>... pairs);
method public static android.os.Bundle bundleOf();
+ method public static android.os.Bundle bundleOf(kotlin.Pair<java.lang.String,?>... pairs);
}
public final class HandlerKt {
@@ -327,8 +327,8 @@
}
public final class PersistableBundleKt {
- method @RequiresApi(21) public static android.os.PersistableBundle persistableBundleOf(kotlin.Pair<java.lang.String,?>... pairs);
method @RequiresApi(21) public static android.os.PersistableBundle persistableBundleOf();
+ method @RequiresApi(21) public static android.os.PersistableBundle persistableBundleOf(kotlin.Pair<java.lang.String,?>... pairs);
method @RequiresApi(21) public static android.os.PersistableBundle toPersistableBundle(java.util.Map<java.lang.String,?>);
}
@@ -359,8 +359,8 @@
method public static inline android.text.SpannableStringBuilder bold(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
method public static inline android.text.SpannedString buildSpannedString(kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
method public static inline android.text.SpannableStringBuilder color(android.text.SpannableStringBuilder, @ColorInt int color, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object![] spans, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object span, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object![] spans, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
method public static inline android.text.SpannableStringBuilder italic(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
method public static inline android.text.SpannableStringBuilder scale(android.text.SpannableStringBuilder, float proportion, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
method public static inline android.text.SpannableStringBuilder strikeThrough(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
@@ -419,10 +419,10 @@
}
public final class HalfKt {
- method @RequiresApi(26) public static inline android.util.Half toHalf(@HalfFloat short);
- method @RequiresApi(26) public static inline android.util.Half toHalf(float);
method @RequiresApi(26) public static inline android.util.Half toHalf(double);
+ method @RequiresApi(26) public static inline android.util.Half toHalf(float);
method @RequiresApi(26) public static inline android.util.Half toHalf(String);
+ method @RequiresApi(26) public static inline android.util.Half toHalf(@HalfFloat short);
}
public final class LongSparseArrayKt {
@@ -448,20 +448,20 @@
}
public final class PairKt {
- method public static inline operator <F, S> F component1(androidx.core.util.Pair<F,S>);
method public static inline operator <F, S> F component1(android.util.Pair<F,S>);
- method public static inline operator <F, S> S component2(androidx.core.util.Pair<F,S>);
+ method public static inline operator <F, S> F component1(androidx.core.util.Pair<F,S>);
method public static inline operator <F, S> S component2(android.util.Pair<F,S>);
+ method public static inline operator <F, S> S component2(androidx.core.util.Pair<F,S>);
method public static inline <F, S> android.util.Pair<F,S> toAndroidPair(kotlin.Pair<? extends F,? extends S>);
method public static inline <F, S> androidx.core.util.Pair<F,S> toAndroidXPair(kotlin.Pair<? extends F,? extends S>);
- method public static inline <F, S> kotlin.Pair<F,S> toKotlinPair(androidx.core.util.Pair<F,S>);
method public static inline <F, S> kotlin.Pair<F,S> toKotlinPair(android.util.Pair<F,S>);
+ method public static inline <F, S> kotlin.Pair<F,S> toKotlinPair(androidx.core.util.Pair<F,S>);
}
public final class RangeKt {
method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> and(android.util.Range<T>, android.util.Range<T> other);
- method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, T value);
method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, android.util.Range<T> other);
+ method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, T value);
method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> rangeTo(T, T that);
method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> kotlin.ranges.ClosedRange<T> toClosedRange(android.util.Range<T>);
method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> android.util.Range<T> toRange(kotlin.ranges.ClosedRange<T>);
diff --git a/core/core-ktx/api/public_plus_experimental_current.txt b/core/core-ktx/api/public_plus_experimental_current.txt
deleted file mode 100644
index 89ab047..0000000
--- a/core/core-ktx/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,634 +0,0 @@
-// Signature format: 4.0
-package androidx.core.animation {
-
- public final class AnimatorKt {
- method public static inline android.animation.Animator.AnimatorListener addListener(android.animation.Animator, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onEnd, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onStart, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onCancel, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onRepeat);
- method @RequiresApi(19) public static android.animation.Animator.AnimatorPauseListener addPauseListener(android.animation.Animator, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onResume, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onPause);
- method public static inline android.animation.Animator.AnimatorListener doOnCancel(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
- method public static inline android.animation.Animator.AnimatorListener doOnEnd(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
- method @RequiresApi(19) public static android.animation.Animator.AnimatorPauseListener doOnPause(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
- method public static inline android.animation.Animator.AnimatorListener doOnRepeat(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
- method @RequiresApi(19) public static android.animation.Animator.AnimatorPauseListener doOnResume(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
- method public static inline android.animation.Animator.AnimatorListener doOnStart(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
- }
-
-}
-
-package androidx.core.content {
-
- public final class ContentValuesKt {
- method public static android.content.ContentValues contentValuesOf(kotlin.Pair<java.lang.String,?>... pairs);
- }
-
- public final class ContextKt {
- method public static inline <reified T> T! getSystemService(android.content.Context);
- method public static inline void withStyledAttributes(android.content.Context, optional android.util.AttributeSet? set, int[] attrs, optional @AttrRes int defStyleAttr, optional @StyleRes int defStyleRes, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,kotlin.Unit> block);
- method public static inline void withStyledAttributes(android.content.Context, @StyleRes int resourceId, int[] attrs, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,kotlin.Unit> block);
- }
-
- public final class SharedPreferencesKt {
- method public static inline void edit(android.content.SharedPreferences, optional boolean commit, kotlin.jvm.functions.Function1<? super android.content.SharedPreferences.Editor,kotlin.Unit> action);
- }
-
-}
-
-package androidx.core.content.res {
-
- public final class TypedArrayKt {
- method public static boolean getBooleanOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method @ColorInt public static int getColorOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static android.content.res.ColorStateList getColorStateListOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static float getDimensionOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method @Dimension public static int getDimensionPixelOffsetOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method @Dimension public static int getDimensionPixelSizeOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static android.graphics.drawable.Drawable getDrawableOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static float getFloatOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method @RequiresApi(26) public static android.graphics.Typeface getFontOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static int getIntOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static int getIntegerOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method @AnyRes public static int getResourceIdOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static String getStringOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static CharSequence![] getTextArrayOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static CharSequence getTextOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static inline <R> R use(android.content.res.TypedArray, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,? extends R> block);
- }
-
-}
-
-package androidx.core.database {
-
- public final class CursorKt {
- method public static inline byte[]? getBlobOrNull(android.database.Cursor, int index);
- method public static inline Double? getDoubleOrNull(android.database.Cursor, int index);
- method public static inline Float? getFloatOrNull(android.database.Cursor, int index);
- method public static inline Integer? getIntOrNull(android.database.Cursor, int index);
- method public static inline Long? getLongOrNull(android.database.Cursor, int index);
- method public static inline Short? getShortOrNull(android.database.Cursor, int index);
- method public static inline String? getStringOrNull(android.database.Cursor, int index);
- }
-
-}
-
-package androidx.core.database.sqlite {
-
- public final class SQLiteDatabaseKt {
- method public static inline <T> T transaction(android.database.sqlite.SQLiteDatabase, optional boolean exclusive, kotlin.jvm.functions.Function1<? super android.database.sqlite.SQLiteDatabase,? extends T> body);
- }
-
-}
-
-package androidx.core.graphics {
-
- public final class BitmapKt {
- method public static inline android.graphics.Bitmap applyCanvas(android.graphics.Bitmap, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline operator boolean contains(android.graphics.Bitmap, android.graphics.Point p);
- method public static inline operator boolean contains(android.graphics.Bitmap, android.graphics.PointF p);
- method public static inline android.graphics.Bitmap createBitmap(int width, int height, optional android.graphics.Bitmap.Config config);
- method @RequiresApi(26) public static inline android.graphics.Bitmap createBitmap(int width, int height, optional android.graphics.Bitmap.Config config, optional boolean hasAlpha, optional android.graphics.ColorSpace colorSpace);
- method public static inline operator int get(android.graphics.Bitmap, int x, int y);
- method public static inline android.graphics.Bitmap scale(android.graphics.Bitmap, int width, int height, optional boolean filter);
- method public static inline operator void set(android.graphics.Bitmap, int x, int y, @ColorInt int color);
- }
-
- public final class CanvasKt {
- method public static inline void withClip(android.graphics.Canvas, android.graphics.Rect clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withClip(android.graphics.Canvas, android.graphics.RectF clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withClip(android.graphics.Canvas, int left, int top, int right, int bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withClip(android.graphics.Canvas, float left, float top, float right, float bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withClip(android.graphics.Canvas, android.graphics.Path clipPath, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withMatrix(android.graphics.Canvas, optional android.graphics.Matrix matrix, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withRotation(android.graphics.Canvas, optional float degrees, optional float pivotX, optional float pivotY, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withSave(android.graphics.Canvas, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withScale(android.graphics.Canvas, optional float x, optional float y, optional float pivotX, optional float pivotY, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withSkew(android.graphics.Canvas, optional float x, optional float y, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withTranslation(android.graphics.Canvas, optional float x, optional float y, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- }
-
- public final class ColorKt {
- method @RequiresApi(26) public static inline operator float component1(android.graphics.Color);
- method public static inline operator int component1(@ColorInt int);
- method @RequiresApi(26) public static inline operator float component1(@ColorLong long);
- method @RequiresApi(26) public static inline operator float component2(android.graphics.Color);
- method public static inline operator int component2(@ColorInt int);
- method @RequiresApi(26) public static inline operator float component2(@ColorLong long);
- method @RequiresApi(26) public static inline operator float component3(android.graphics.Color);
- method public static inline operator int component3(@ColorInt int);
- method @RequiresApi(26) public static inline operator float component3(@ColorLong long);
- method @RequiresApi(26) public static inline operator float component4(android.graphics.Color);
- method public static inline operator int component4(@ColorInt int);
- method @RequiresApi(26) public static inline operator float component4(@ColorLong long);
- method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace.Named colorSpace);
- method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace colorSpace);
- method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace.Named colorSpace);
- method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace colorSpace);
- method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace.Named colorSpace);
- method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace colorSpace);
- method public static inline int getAlpha(@ColorInt int);
- method @RequiresApi(26) public static inline float getAlpha(@ColorLong long);
- method public static inline int getBlue(@ColorInt int);
- method @RequiresApi(26) public static inline float getBlue(@ColorLong long);
- method @RequiresApi(26) public static inline android.graphics.ColorSpace getColorSpace(@ColorLong long);
- method public static inline int getGreen(@ColorInt int);
- method @RequiresApi(26) public static inline float getGreen(@ColorLong long);
- method @RequiresApi(26) public static inline float getLuminance(@ColorInt int);
- method @RequiresApi(26) public static inline float getLuminance(@ColorLong long);
- method public static inline int getRed(@ColorInt int);
- method @RequiresApi(26) public static inline float getRed(@ColorLong long);
- method @RequiresApi(26) public static inline boolean isSrgb(@ColorLong long);
- method @RequiresApi(26) public static inline boolean isWideGamut(@ColorLong long);
- method @RequiresApi(26) public static operator android.graphics.Color plus(android.graphics.Color, android.graphics.Color c);
- method @RequiresApi(26) public static inline android.graphics.Color toColor(@ColorInt int);
- method @RequiresApi(26) public static inline android.graphics.Color toColor(@ColorLong long);
- method @ColorInt @RequiresApi(26) public static inline int toColorInt(@ColorLong long);
- method @ColorInt public static inline int toColorInt(String);
- method @ColorLong @RequiresApi(26) public static inline long toColorLong(@ColorInt int);
- }
-
- public final class ImageDecoderKt {
- method @RequiresApi(28) public static inline android.graphics.Bitmap decodeBitmap(android.graphics.ImageDecoder.Source, kotlin.jvm.functions.Function3<? super android.graphics.ImageDecoder,? super android.graphics.ImageDecoder.ImageInfo,? super android.graphics.ImageDecoder.Source,kotlin.Unit> action);
- method @RequiresApi(28) public static inline android.graphics.drawable.Drawable decodeDrawable(android.graphics.ImageDecoder.Source, kotlin.jvm.functions.Function3<? super android.graphics.ImageDecoder,? super android.graphics.ImageDecoder.ImageInfo,? super android.graphics.ImageDecoder.Source,kotlin.Unit> action);
- }
-
- public final class MatrixKt {
- method public static android.graphics.Matrix rotationMatrix(float degrees, optional float px, optional float py);
- method public static android.graphics.Matrix scaleMatrix(optional float sx, optional float sy);
- method public static inline operator android.graphics.Matrix times(android.graphics.Matrix, android.graphics.Matrix m);
- method public static android.graphics.Matrix translationMatrix(optional float tx, optional float ty);
- method public static inline float[] values(android.graphics.Matrix);
- }
-
- public final class PaintKt {
- method public static inline boolean setBlendMode(android.graphics.Paint, androidx.core.graphics.BlendModeCompat? blendModeCompat);
- }
-
- public final class PathKt {
- method @RequiresApi(19) public static inline infix android.graphics.Path and(android.graphics.Path, android.graphics.Path p);
- method @RequiresApi(26) public static Iterable<androidx.core.graphics.PathSegment> flatten(android.graphics.Path, optional float error);
- method @RequiresApi(19) public static inline operator android.graphics.Path minus(android.graphics.Path, android.graphics.Path p);
- method @RequiresApi(19) public static inline infix android.graphics.Path or(android.graphics.Path, android.graphics.Path p);
- method @RequiresApi(19) public static inline operator android.graphics.Path plus(android.graphics.Path, android.graphics.Path p);
- method @RequiresApi(19) public static inline infix android.graphics.Path xor(android.graphics.Path, android.graphics.Path p);
- }
-
- public final class PictureKt {
- method public static inline android.graphics.Picture record(android.graphics.Picture, int width, int height, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- }
-
- public final class PointKt {
- method public static inline operator int component1(android.graphics.Point);
- method public static inline operator float component1(android.graphics.PointF);
- method public static inline operator int component2(android.graphics.Point);
- method public static inline operator float component2(android.graphics.PointF);
- method public static inline operator android.graphics.Point div(android.graphics.Point, float scalar);
- method public static inline operator android.graphics.PointF div(android.graphics.PointF, float scalar);
- method public static inline operator android.graphics.Point minus(android.graphics.Point, android.graphics.Point p);
- method public static inline operator android.graphics.PointF minus(android.graphics.PointF, android.graphics.PointF p);
- method public static inline operator android.graphics.Point minus(android.graphics.Point, int xy);
- method public static inline operator android.graphics.PointF minus(android.graphics.PointF, float xy);
- method public static inline operator android.graphics.Point plus(android.graphics.Point, android.graphics.Point p);
- method public static inline operator android.graphics.PointF plus(android.graphics.PointF, android.graphics.PointF p);
- method public static inline operator android.graphics.Point plus(android.graphics.Point, int xy);
- method public static inline operator android.graphics.PointF plus(android.graphics.PointF, float xy);
- method public static inline operator android.graphics.Point times(android.graphics.Point, float scalar);
- method public static inline operator android.graphics.PointF times(android.graphics.PointF, float scalar);
- method public static inline android.graphics.Point toPoint(android.graphics.PointF);
- method public static inline android.graphics.PointF toPointF(android.graphics.Point);
- method public static inline operator android.graphics.Point unaryMinus(android.graphics.Point);
- method public static inline operator android.graphics.PointF unaryMinus(android.graphics.PointF);
- }
-
- public final class PorterDuffKt {
- method public static inline android.graphics.PorterDuffColorFilter toColorFilter(android.graphics.PorterDuff.Mode, int color);
- method public static inline android.graphics.PorterDuffXfermode toXfermode(android.graphics.PorterDuff.Mode);
- }
-
- public final class RectKt {
- method public static inline infix android.graphics.Rect and(android.graphics.Rect, android.graphics.Rect r);
- method public static inline infix android.graphics.RectF and(android.graphics.RectF, android.graphics.RectF r);
- method public static inline operator int component1(android.graphics.Rect);
- method public static inline operator float component1(android.graphics.RectF);
- method public static inline operator int component2(android.graphics.Rect);
- method public static inline operator float component2(android.graphics.RectF);
- method public static inline operator int component3(android.graphics.Rect);
- method public static inline operator float component3(android.graphics.RectF);
- method public static inline operator int component4(android.graphics.Rect);
- method public static inline operator float component4(android.graphics.RectF);
- method public static inline operator boolean contains(android.graphics.Rect, android.graphics.Point p);
- method public static inline operator boolean contains(android.graphics.RectF, android.graphics.PointF p);
- method public static inline operator android.graphics.Region minus(android.graphics.Rect, android.graphics.Rect r);
- method public static inline operator android.graphics.Region minus(android.graphics.RectF, android.graphics.RectF r);
- method public static inline operator android.graphics.Rect minus(android.graphics.Rect, int xy);
- method public static inline operator android.graphics.RectF minus(android.graphics.RectF, float xy);
- method public static inline operator android.graphics.Rect minus(android.graphics.Rect, android.graphics.Point xy);
- method public static inline operator android.graphics.RectF minus(android.graphics.RectF, android.graphics.PointF xy);
- method public static inline infix android.graphics.Rect or(android.graphics.Rect, android.graphics.Rect r);
- method public static inline infix android.graphics.RectF or(android.graphics.RectF, android.graphics.RectF r);
- method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Rect r);
- method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.RectF r);
- method public static inline operator android.graphics.Rect plus(android.graphics.Rect, int xy);
- method public static inline operator android.graphics.RectF plus(android.graphics.RectF, float xy);
- method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Point xy);
- method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.PointF xy);
- method public static inline operator android.graphics.Rect times(android.graphics.Rect, int factor);
- method public static inline operator android.graphics.RectF times(android.graphics.RectF, int factor);
- method public static inline operator android.graphics.RectF times(android.graphics.RectF, float factor);
- method public static inline android.graphics.Rect toRect(android.graphics.RectF);
- method public static inline android.graphics.RectF toRectF(android.graphics.Rect);
- method public static inline android.graphics.Region toRegion(android.graphics.Rect);
- method public static inline android.graphics.Region toRegion(android.graphics.RectF);
- method public static inline android.graphics.RectF transform(android.graphics.RectF, android.graphics.Matrix m);
- method public static inline infix android.graphics.Region xor(android.graphics.Rect, android.graphics.Rect r);
- method public static inline infix android.graphics.Region xor(android.graphics.RectF, android.graphics.RectF r);
- }
-
- public final class RegionKt {
- method public static inline infix android.graphics.Region and(android.graphics.Region, android.graphics.Rect r);
- method public static inline infix android.graphics.Region and(android.graphics.Region, android.graphics.Region r);
- method public static inline operator boolean contains(android.graphics.Region, android.graphics.Point p);
- method public static inline void forEach(android.graphics.Region, kotlin.jvm.functions.Function1<? super android.graphics.Rect,kotlin.Unit> action);
- method public static operator java.util.Iterator<android.graphics.Rect> iterator(android.graphics.Region);
- method public static inline operator android.graphics.Region minus(android.graphics.Region, android.graphics.Rect r);
- method public static inline operator android.graphics.Region minus(android.graphics.Region, android.graphics.Region r);
- method public static inline operator android.graphics.Region not(android.graphics.Region);
- method public static inline infix android.graphics.Region or(android.graphics.Region, android.graphics.Rect r);
- method public static inline infix android.graphics.Region or(android.graphics.Region, android.graphics.Region r);
- method public static inline operator android.graphics.Region plus(android.graphics.Region, android.graphics.Rect r);
- method public static inline operator android.graphics.Region plus(android.graphics.Region, android.graphics.Region r);
- method public static inline operator android.graphics.Region unaryMinus(android.graphics.Region);
- method public static inline infix android.graphics.Region xor(android.graphics.Region, android.graphics.Rect r);
- method public static inline infix android.graphics.Region xor(android.graphics.Region, android.graphics.Region r);
- }
-
- public final class ShaderKt {
- method public static inline void transform(android.graphics.Shader, kotlin.jvm.functions.Function1<? super android.graphics.Matrix,kotlin.Unit> block);
- }
-
-}
-
-package androidx.core.graphics.drawable {
-
- public final class BitmapDrawableKt {
- method public static inline android.graphics.drawable.BitmapDrawable toDrawable(android.graphics.Bitmap, android.content.res.Resources resources);
- }
-
- public final class ColorDrawableKt {
- method public static inline android.graphics.drawable.ColorDrawable toDrawable(@ColorInt int);
- method @RequiresApi(26) public static inline android.graphics.drawable.ColorDrawable toDrawable(android.graphics.Color);
- }
-
- public final class DrawableKt {
- method public static android.graphics.Bitmap toBitmap(android.graphics.drawable.Drawable, optional @Px int width, optional @Px int height, optional android.graphics.Bitmap.Config? config);
- method public static android.graphics.Bitmap? toBitmapOrNull(android.graphics.drawable.Drawable, optional @Px int width, optional @Px int height, optional android.graphics.Bitmap.Config? config);
- method public static void updateBounds(android.graphics.drawable.Drawable, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
- }
-
- public final class IconKt {
- method @RequiresApi(26) public static inline android.graphics.drawable.Icon toAdaptiveIcon(android.graphics.Bitmap);
- method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(android.graphics.Bitmap);
- method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(android.net.Uri);
- method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(byte[]);
- }
-
-}
-
-package androidx.core.location {
-
- public final class LocationKt {
- method public static inline operator double component1(android.location.Location);
- method public static inline operator double component2(android.location.Location);
- }
-
-}
-
-package androidx.core.net {
-
- public final class UriKt {
- method public static java.io.File toFile(android.net.Uri);
- method public static inline android.net.Uri toUri(String);
- method public static inline android.net.Uri toUri(java.io.File);
- }
-
-}
-
-package androidx.core.os {
-
- public final class BundleKt {
- method public static android.os.Bundle bundleOf(kotlin.Pair<java.lang.String,?>... pairs);
- method public static android.os.Bundle bundleOf();
- }
-
- public final class HandlerKt {
- method public static inline Runnable postAtTime(android.os.Handler, long uptimeMillis, optional Object? token, kotlin.jvm.functions.Function0<kotlin.Unit> action);
- method public static inline Runnable postDelayed(android.os.Handler, long delayInMillis, optional Object? token, kotlin.jvm.functions.Function0<kotlin.Unit> action);
- }
-
- @RequiresApi(31) public final class OutcomeReceiverKt {
- method @RequiresApi(31) public static <R, E extends java.lang.Throwable> android.os.OutcomeReceiver<R,E> asOutcomeReceiver(kotlin.coroutines.Continuation<? super R>);
- }
-
- public final class PersistableBundleKt {
- method @RequiresApi(21) public static android.os.PersistableBundle persistableBundleOf(kotlin.Pair<java.lang.String,?>... pairs);
- method @RequiresApi(21) public static android.os.PersistableBundle persistableBundleOf();
- method @RequiresApi(21) public static android.os.PersistableBundle toPersistableBundle(java.util.Map<java.lang.String,?>);
- }
-
- public final class TraceKt {
- method @Deprecated public static inline <T> T trace(String sectionName, kotlin.jvm.functions.Function0<? extends T> block);
- }
-
-}
-
-package androidx.core.text {
-
- public final class CharSequenceKt {
- method public static inline boolean isDigitsOnly(CharSequence);
- method public static inline int trimmedLength(CharSequence);
- }
-
- public final class HtmlKt {
- method public static inline android.text.Spanned parseAsHtml(String, optional int flags, optional android.text.Html.ImageGetter? imageGetter, optional android.text.Html.TagHandler? tagHandler);
- method public static inline String toHtml(android.text.Spanned, optional int option);
- }
-
- public final class LocaleKt {
- method @RequiresApi(17) public static inline int getLayoutDirection(java.util.Locale);
- }
-
- public final class SpannableStringBuilderKt {
- method public static inline android.text.SpannableStringBuilder backgroundColor(android.text.SpannableStringBuilder, @ColorInt int color, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder bold(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannedString buildSpannedString(kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder color(android.text.SpannableStringBuilder, @ColorInt int color, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object![] spans, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object span, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder italic(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder scale(android.text.SpannableStringBuilder, float proportion, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder strikeThrough(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder subscript(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder superscript(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder underline(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- }
-
- public final class SpannableStringKt {
- method public static inline void clearSpans(android.text.Spannable);
- method public static inline operator void set(android.text.Spannable, int start, int end, Object span);
- method public static inline operator void set(android.text.Spannable, kotlin.ranges.IntRange range, Object span);
- method public static inline android.text.Spannable toSpannable(CharSequence);
- }
-
- public final class SpannedStringKt {
- method public static inline <reified T> T![] getSpans(android.text.Spanned, optional int start, optional int end);
- method public static inline android.text.Spanned toSpanned(CharSequence);
- }
-
- public final class StringKt {
- method public static inline String htmlEncode(String);
- }
-
-}
-
-package androidx.core.transition {
-
- public final class TransitionKt {
- method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener addListener(android.transition.Transition, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onEnd, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onStart, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onCancel, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onResume, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onPause);
- method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnCancel(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
- method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnEnd(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
- method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnPause(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
- method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnResume(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
- method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnStart(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
- }
-
-}
-
-package androidx.core.util {
-
- public final class AndroidXConsumerKt {
- method public static <T> androidx.core.util.Consumer<T> asAndroidXConsumer(kotlin.coroutines.Continuation<? super T>);
- }
-
- public final class AtomicFileKt {
- method @RequiresApi(17) public static inline byte[] readBytes(android.util.AtomicFile);
- method @RequiresApi(17) public static String readText(android.util.AtomicFile, optional java.nio.charset.Charset charset);
- method @RequiresApi(17) public static inline void tryWrite(android.util.AtomicFile, kotlin.jvm.functions.Function1<? super java.io.FileOutputStream,kotlin.Unit> block);
- method @RequiresApi(17) public static void writeBytes(android.util.AtomicFile, byte[] array);
- method @RequiresApi(17) public static void writeText(android.util.AtomicFile, String text, optional java.nio.charset.Charset charset);
- }
-
- @RequiresApi(24) public final class ConsumerKt {
- method @RequiresApi(24) public static <T> java.util.function.Consumer<T> asConsumer(kotlin.coroutines.Continuation<? super T>);
- }
-
- public final class HalfKt {
- method @RequiresApi(26) public static inline android.util.Half toHalf(@HalfFloat short);
- method @RequiresApi(26) public static inline android.util.Half toHalf(float);
- method @RequiresApi(26) public static inline android.util.Half toHalf(double);
- method @RequiresApi(26) public static inline android.util.Half toHalf(String);
- }
-
- public final class LongSparseArrayKt {
- method @RequiresApi(16) public static inline operator <T> boolean contains(android.util.LongSparseArray<T>, long key);
- method @RequiresApi(16) public static inline <T> boolean containsKey(android.util.LongSparseArray<T>, long key);
- method @RequiresApi(16) public static inline <T> boolean containsValue(android.util.LongSparseArray<T>, T value);
- method @RequiresApi(16) public static inline <T> void forEach(android.util.LongSparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Long,? super T,kotlin.Unit> action);
- method @RequiresApi(16) public static inline <T> T getOrDefault(android.util.LongSparseArray<T>, long key, T defaultValue);
- method @RequiresApi(16) public static inline <T> T getOrElse(android.util.LongSparseArray<T>, long key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
- method @RequiresApi(16) public static inline <T> int getSize(android.util.LongSparseArray<T>);
- method @RequiresApi(16) public static inline <T> boolean isEmpty(android.util.LongSparseArray<T>);
- method @RequiresApi(16) public static inline <T> boolean isNotEmpty(android.util.LongSparseArray<T>);
- method @RequiresApi(16) public static <T> kotlin.collections.LongIterator keyIterator(android.util.LongSparseArray<T>);
- method @RequiresApi(16) public static operator <T> android.util.LongSparseArray<T> plus(android.util.LongSparseArray<T>, android.util.LongSparseArray<T> other);
- method @RequiresApi(16) public static <T> void putAll(android.util.LongSparseArray<T>, android.util.LongSparseArray<T> other);
- method @RequiresApi(16) public static <T> boolean remove(android.util.LongSparseArray<T>, long key, T value);
- method @RequiresApi(16) public static inline operator <T> void set(android.util.LongSparseArray<T>, long key, T value);
- method @RequiresApi(16) public static <T> java.util.Iterator<T> valueIterator(android.util.LongSparseArray<T>);
- }
-
- public final class LruCacheKt {
- method public static inline <K, V> android.util.LruCache<K,V> lruCache(int maxSize, optional kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Integer> sizeOf, optional kotlin.jvm.functions.Function1<? super K,? extends V> create, optional kotlin.jvm.functions.Function4<? super java.lang.Boolean,? super K,? super V,? super V,kotlin.Unit> onEntryRemoved);
- }
-
- public final class PairKt {
- method public static inline operator <F, S> F component1(androidx.core.util.Pair<F,S>);
- method public static inline operator <F, S> F component1(android.util.Pair<F,S>);
- method public static inline operator <F, S> S component2(androidx.core.util.Pair<F,S>);
- method public static inline operator <F, S> S component2(android.util.Pair<F,S>);
- method public static inline <F, S> android.util.Pair<F,S> toAndroidPair(kotlin.Pair<? extends F,? extends S>);
- method public static inline <F, S> androidx.core.util.Pair<F,S> toAndroidXPair(kotlin.Pair<? extends F,? extends S>);
- method public static inline <F, S> kotlin.Pair<F,S> toKotlinPair(androidx.core.util.Pair<F,S>);
- method public static inline <F, S> kotlin.Pair<F,S> toKotlinPair(android.util.Pair<F,S>);
- }
-
- public final class RangeKt {
- method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> and(android.util.Range<T>, android.util.Range<T> other);
- method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, T value);
- method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, android.util.Range<T> other);
- method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> rangeTo(T, T that);
- method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> kotlin.ranges.ClosedRange<T> toClosedRange(android.util.Range<T>);
- method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> android.util.Range<T> toRange(kotlin.ranges.ClosedRange<T>);
- }
-
- public final class RunnableKt {
- method public static Runnable asRunnable(kotlin.coroutines.Continuation<? super kotlin.Unit>);
- }
-
- public final class SizeKt {
- method @RequiresApi(21) public static inline operator int component1(android.util.Size);
- method @RequiresApi(21) public static inline operator float component1(android.util.SizeF);
- method public static inline operator float component1(androidx.core.util.SizeFCompat);
- method @RequiresApi(21) public static inline operator int component2(android.util.Size);
- method @RequiresApi(21) public static inline operator float component2(android.util.SizeF);
- method public static inline operator float component2(androidx.core.util.SizeFCompat);
- }
-
- public final class SparseArrayKt {
- method public static inline operator <T> boolean contains(android.util.SparseArray<T>, int key);
- method public static inline <T> boolean containsKey(android.util.SparseArray<T>, int key);
- method public static inline <T> boolean containsValue(android.util.SparseArray<T>, T value);
- method public static inline <T> void forEach(android.util.SparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> action);
- method public static inline <T> T getOrDefault(android.util.SparseArray<T>, int key, T defaultValue);
- method public static inline <T> T getOrElse(android.util.SparseArray<T>, int key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
- method public static inline <T> int getSize(android.util.SparseArray<T>);
- method public static inline <T> boolean isEmpty(android.util.SparseArray<T>);
- method public static inline <T> boolean isNotEmpty(android.util.SparseArray<T>);
- method public static <T> kotlin.collections.IntIterator keyIterator(android.util.SparseArray<T>);
- method public static operator <T> android.util.SparseArray<T> plus(android.util.SparseArray<T>, android.util.SparseArray<T> other);
- method public static <T> void putAll(android.util.SparseArray<T>, android.util.SparseArray<T> other);
- method public static <T> boolean remove(android.util.SparseArray<T>, int key, T value);
- method public static inline operator <T> void set(android.util.SparseArray<T>, int key, T value);
- method public static <T> java.util.Iterator<T> valueIterator(android.util.SparseArray<T>);
- }
-
- public final class SparseBooleanArrayKt {
- method public static inline operator boolean contains(android.util.SparseBooleanArray, int key);
- method public static inline boolean containsKey(android.util.SparseBooleanArray, int key);
- method public static inline boolean containsValue(android.util.SparseBooleanArray, boolean value);
- method public static inline void forEach(android.util.SparseBooleanArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Boolean,kotlin.Unit> action);
- method public static inline boolean getOrDefault(android.util.SparseBooleanArray, int key, boolean defaultValue);
- method public static inline boolean getOrElse(android.util.SparseBooleanArray, int key, kotlin.jvm.functions.Function0<java.lang.Boolean> defaultValue);
- method public static inline int getSize(android.util.SparseBooleanArray);
- method public static inline boolean isEmpty(android.util.SparseBooleanArray);
- method public static inline boolean isNotEmpty(android.util.SparseBooleanArray);
- method public static kotlin.collections.IntIterator keyIterator(android.util.SparseBooleanArray);
- method public static operator android.util.SparseBooleanArray plus(android.util.SparseBooleanArray, android.util.SparseBooleanArray other);
- method public static void putAll(android.util.SparseBooleanArray, android.util.SparseBooleanArray other);
- method public static boolean remove(android.util.SparseBooleanArray, int key, boolean value);
- method public static inline operator void set(android.util.SparseBooleanArray, int key, boolean value);
- method public static kotlin.collections.BooleanIterator valueIterator(android.util.SparseBooleanArray);
- }
-
- public final class SparseIntArrayKt {
- method public static inline operator boolean contains(android.util.SparseIntArray, int key);
- method public static inline boolean containsKey(android.util.SparseIntArray, int key);
- method public static inline boolean containsValue(android.util.SparseIntArray, int value);
- method public static inline void forEach(android.util.SparseIntArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
- method public static inline int getOrDefault(android.util.SparseIntArray, int key, int defaultValue);
- method public static inline int getOrElse(android.util.SparseIntArray, int key, kotlin.jvm.functions.Function0<java.lang.Integer> defaultValue);
- method public static inline int getSize(android.util.SparseIntArray);
- method public static inline boolean isEmpty(android.util.SparseIntArray);
- method public static inline boolean isNotEmpty(android.util.SparseIntArray);
- method public static kotlin.collections.IntIterator keyIterator(android.util.SparseIntArray);
- method public static operator android.util.SparseIntArray plus(android.util.SparseIntArray, android.util.SparseIntArray other);
- method public static void putAll(android.util.SparseIntArray, android.util.SparseIntArray other);
- method public static boolean remove(android.util.SparseIntArray, int key, int value);
- method public static inline operator void set(android.util.SparseIntArray, int key, int value);
- method public static kotlin.collections.IntIterator valueIterator(android.util.SparseIntArray);
- }
-
- public final class SparseLongArrayKt {
- method @RequiresApi(18) public static inline operator boolean contains(android.util.SparseLongArray, int key);
- method @RequiresApi(18) public static inline boolean containsKey(android.util.SparseLongArray, int key);
- method @RequiresApi(18) public static inline boolean containsValue(android.util.SparseLongArray, long value);
- method @RequiresApi(18) public static inline void forEach(android.util.SparseLongArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Long,kotlin.Unit> action);
- method @RequiresApi(18) public static inline long getOrDefault(android.util.SparseLongArray, int key, long defaultValue);
- method @RequiresApi(18) public static inline long getOrElse(android.util.SparseLongArray, int key, kotlin.jvm.functions.Function0<java.lang.Long> defaultValue);
- method @RequiresApi(18) public static inline int getSize(android.util.SparseLongArray);
- method @RequiresApi(18) public static inline boolean isEmpty(android.util.SparseLongArray);
- method @RequiresApi(18) public static inline boolean isNotEmpty(android.util.SparseLongArray);
- method @RequiresApi(18) public static kotlin.collections.IntIterator keyIterator(android.util.SparseLongArray);
- method @RequiresApi(18) public static operator android.util.SparseLongArray plus(android.util.SparseLongArray, android.util.SparseLongArray other);
- method @RequiresApi(18) public static void putAll(android.util.SparseLongArray, android.util.SparseLongArray other);
- method @RequiresApi(18) public static boolean remove(android.util.SparseLongArray, int key, long value);
- method @RequiresApi(18) public static inline operator void set(android.util.SparseLongArray, int key, long value);
- method @RequiresApi(18) public static kotlin.collections.LongIterator valueIterator(android.util.SparseLongArray);
- }
-
-}
-
-package androidx.core.view {
-
- public final class MenuKt {
- method public static operator boolean contains(android.view.Menu, android.view.MenuItem item);
- method public static inline void forEach(android.view.Menu, kotlin.jvm.functions.Function1<? super android.view.MenuItem,kotlin.Unit> action);
- method public static inline void forEachIndexed(android.view.Menu, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super android.view.MenuItem,kotlin.Unit> action);
- method public static inline operator android.view.MenuItem get(android.view.Menu, int index);
- method public static kotlin.sequences.Sequence<android.view.MenuItem> getChildren(android.view.Menu);
- method public static inline int getSize(android.view.Menu);
- method public static inline boolean isEmpty(android.view.Menu);
- method public static inline boolean isNotEmpty(android.view.Menu);
- method public static operator java.util.Iterator<android.view.MenuItem> iterator(android.view.Menu);
- method public static inline operator void minusAssign(android.view.Menu, android.view.MenuItem item);
- method public static inline void removeItemAt(android.view.Menu, int index);
- }
-
- public final class ViewGroupKt {
- method public static inline operator boolean contains(android.view.ViewGroup, android.view.View view);
- method public static inline void forEach(android.view.ViewGroup, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
- method public static inline void forEachIndexed(android.view.ViewGroup, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super android.view.View,kotlin.Unit> action);
- method public static operator android.view.View get(android.view.ViewGroup, int index);
- method public static kotlin.sequences.Sequence<android.view.View> getChildren(android.view.ViewGroup);
- method public static kotlin.sequences.Sequence<android.view.View> getDescendants(android.view.ViewGroup);
- method public static inline kotlin.ranges.IntRange getIndices(android.view.ViewGroup);
- method public static inline int getSize(android.view.ViewGroup);
- method public static inline boolean isEmpty(android.view.ViewGroup);
- method public static inline boolean isNotEmpty(android.view.ViewGroup);
- method public static operator java.util.Iterator<android.view.View> iterator(android.view.ViewGroup);
- method public static inline operator void minusAssign(android.view.ViewGroup, android.view.View view);
- method public static inline operator void plusAssign(android.view.ViewGroup, android.view.View view);
- method public static inline void setMargins(android.view.ViewGroup.MarginLayoutParams, @Px int size);
- method public static inline void updateMargins(android.view.ViewGroup.MarginLayoutParams, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
- method @RequiresApi(17) public static inline void updateMarginsRelative(android.view.ViewGroup.MarginLayoutParams, optional @Px int start, optional @Px int top, optional @Px int end, optional @Px int bottom);
- }
-
- public final class ViewKt {
- method public static inline void doOnAttach(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
- method public static inline void doOnDetach(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
- method public static inline void doOnLayout(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
- method public static inline void doOnNextLayout(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
- method public static inline androidx.core.view.OneShotPreDrawListener doOnPreDraw(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
- method public static android.graphics.Bitmap drawToBitmap(android.view.View, optional android.graphics.Bitmap.Config config);
- method public static kotlin.sequences.Sequence<android.view.View> getAllViews(android.view.View);
- method public static kotlin.sequences.Sequence<android.view.ViewParent> getAncestors(android.view.View);
- method public static inline int getMarginBottom(android.view.View);
- method public static inline int getMarginEnd(android.view.View);
- method public static inline int getMarginLeft(android.view.View);
- method public static inline int getMarginRight(android.view.View);
- method public static inline int getMarginStart(android.view.View);
- method public static inline int getMarginTop(android.view.View);
- method public static inline boolean isGone(android.view.View);
- method public static inline boolean isInvisible(android.view.View);
- method public static inline boolean isVisible(android.view.View);
- method public static inline Runnable postDelayed(android.view.View, long delayInMillis, kotlin.jvm.functions.Function0<kotlin.Unit> action);
- method @RequiresApi(16) public static Runnable postOnAnimationDelayed(android.view.View, long delayInMillis, kotlin.jvm.functions.Function0<kotlin.Unit> action);
- method public static inline void setGone(android.view.View, boolean);
- method public static inline void setInvisible(android.view.View, boolean);
- method public static inline void setPadding(android.view.View, @Px int size);
- method public static inline void setVisible(android.view.View, boolean);
- method public static inline void updateLayoutParams(android.view.View, kotlin.jvm.functions.Function1<? super android.view.ViewGroup.LayoutParams,kotlin.Unit> block);
- method public static inline <reified T extends android.view.ViewGroup.LayoutParams> void updateLayoutParamsTyped(android.view.View, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> block);
- method public static inline void updatePadding(android.view.View, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
- method @RequiresApi(17) public static inline void updatePaddingRelative(android.view.View, optional @Px int start, optional @Px int top, optional @Px int end, optional @Px int bottom);
- }
-
-}
-
-package androidx.core.widget {
-
- public final class TextViewKt {
- method public static inline android.text.TextWatcher addTextChangedListener(android.widget.TextView, optional kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> beforeTextChanged, optional kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> onTextChanged, optional kotlin.jvm.functions.Function1<? super android.text.Editable,kotlin.Unit> afterTextChanged);
- method public static inline android.text.TextWatcher doAfterTextChanged(android.widget.TextView, kotlin.jvm.functions.Function1<? super android.text.Editable,kotlin.Unit> action);
- method public static inline android.text.TextWatcher doBeforeTextChanged(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
- method public static inline android.text.TextWatcher doOnTextChanged(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
- }
-
-}
-
diff --git a/core/core-ktx/api/restricted_current.txt b/core/core-ktx/api/restricted_current.txt
index 89ab047..578da41 100644
--- a/core/core-ktx/api/restricted_current.txt
+++ b/core/core-ktx/api/restricted_current.txt
@@ -91,11 +91,11 @@
}
public final class CanvasKt {
+ method public static inline void withClip(android.graphics.Canvas, android.graphics.Path clipPath, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
method public static inline void withClip(android.graphics.Canvas, android.graphics.Rect clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
method public static inline void withClip(android.graphics.Canvas, android.graphics.RectF clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withClip(android.graphics.Canvas, int left, int top, int right, int bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
method public static inline void withClip(android.graphics.Canvas, float left, float top, float right, float bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withClip(android.graphics.Canvas, android.graphics.Path clipPath, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withClip(android.graphics.Canvas, int left, int top, int right, int bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
method public static inline void withMatrix(android.graphics.Canvas, optional android.graphics.Matrix matrix, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
method public static inline void withRotation(android.graphics.Canvas, optional float degrees, optional float pivotX, optional float pivotY, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
method public static inline void withSave(android.graphics.Canvas, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
@@ -117,12 +117,12 @@
method @RequiresApi(26) public static inline operator float component4(android.graphics.Color);
method public static inline operator int component4(@ColorInt int);
method @RequiresApi(26) public static inline operator float component4(@ColorLong long);
- method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace.Named colorSpace);
- method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace colorSpace);
- method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace.Named colorSpace);
- method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace colorSpace);
- method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace.Named colorSpace);
method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace colorSpace);
+ method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace.Named colorSpace);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace colorSpace);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace.Named colorSpace);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace colorSpace);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace.Named colorSpace);
method public static inline int getAlpha(@ColorInt int);
method @RequiresApi(26) public static inline float getAlpha(@ColorLong long);
method public static inline int getBlue(@ColorInt int);
@@ -139,8 +139,8 @@
method @RequiresApi(26) public static operator android.graphics.Color plus(android.graphics.Color, android.graphics.Color c);
method @RequiresApi(26) public static inline android.graphics.Color toColor(@ColorInt int);
method @RequiresApi(26) public static inline android.graphics.Color toColor(@ColorLong long);
- method @ColorInt @RequiresApi(26) public static inline int toColorInt(@ColorLong long);
method @ColorInt public static inline int toColorInt(String);
+ method @ColorInt @RequiresApi(26) public static inline int toColorInt(@ColorLong long);
method @ColorLong @RequiresApi(26) public static inline long toColorLong(@ColorInt int);
}
@@ -182,12 +182,12 @@
method public static inline operator android.graphics.Point div(android.graphics.Point, float scalar);
method public static inline operator android.graphics.PointF div(android.graphics.PointF, float scalar);
method public static inline operator android.graphics.Point minus(android.graphics.Point, android.graphics.Point p);
- method public static inline operator android.graphics.PointF minus(android.graphics.PointF, android.graphics.PointF p);
method public static inline operator android.graphics.Point minus(android.graphics.Point, int xy);
+ method public static inline operator android.graphics.PointF minus(android.graphics.PointF, android.graphics.PointF p);
method public static inline operator android.graphics.PointF minus(android.graphics.PointF, float xy);
method public static inline operator android.graphics.Point plus(android.graphics.Point, android.graphics.Point p);
- method public static inline operator android.graphics.PointF plus(android.graphics.PointF, android.graphics.PointF p);
method public static inline operator android.graphics.Point plus(android.graphics.Point, int xy);
+ method public static inline operator android.graphics.PointF plus(android.graphics.PointF, android.graphics.PointF p);
method public static inline operator android.graphics.PointF plus(android.graphics.PointF, float xy);
method public static inline operator android.graphics.Point times(android.graphics.Point, float scalar);
method public static inline operator android.graphics.PointF times(android.graphics.PointF, float scalar);
@@ -215,23 +215,23 @@
method public static inline operator float component4(android.graphics.RectF);
method public static inline operator boolean contains(android.graphics.Rect, android.graphics.Point p);
method public static inline operator boolean contains(android.graphics.RectF, android.graphics.PointF p);
- method public static inline operator android.graphics.Region minus(android.graphics.Rect, android.graphics.Rect r);
- method public static inline operator android.graphics.Region minus(android.graphics.RectF, android.graphics.RectF r);
- method public static inline operator android.graphics.Rect minus(android.graphics.Rect, int xy);
- method public static inline operator android.graphics.RectF minus(android.graphics.RectF, float xy);
method public static inline operator android.graphics.Rect minus(android.graphics.Rect, android.graphics.Point xy);
+ method public static inline operator android.graphics.Region minus(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline operator android.graphics.Rect minus(android.graphics.Rect, int xy);
method public static inline operator android.graphics.RectF minus(android.graphics.RectF, android.graphics.PointF xy);
+ method public static inline operator android.graphics.Region minus(android.graphics.RectF, android.graphics.RectF r);
+ method public static inline operator android.graphics.RectF minus(android.graphics.RectF, float xy);
method public static inline infix android.graphics.Rect or(android.graphics.Rect, android.graphics.Rect r);
method public static inline infix android.graphics.RectF or(android.graphics.RectF, android.graphics.RectF r);
- method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Rect r);
- method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.RectF r);
- method public static inline operator android.graphics.Rect plus(android.graphics.Rect, int xy);
- method public static inline operator android.graphics.RectF plus(android.graphics.RectF, float xy);
method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Point xy);
+ method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline operator android.graphics.Rect plus(android.graphics.Rect, int xy);
method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.PointF xy);
+ method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.RectF r);
+ method public static inline operator android.graphics.RectF plus(android.graphics.RectF, float xy);
method public static inline operator android.graphics.Rect times(android.graphics.Rect, int factor);
- method public static inline operator android.graphics.RectF times(android.graphics.RectF, int factor);
method public static inline operator android.graphics.RectF times(android.graphics.RectF, float factor);
+ method public static inline operator android.graphics.RectF times(android.graphics.RectF, int factor);
method public static inline android.graphics.Rect toRect(android.graphics.RectF);
method public static inline android.graphics.RectF toRectF(android.graphics.Rect);
method public static inline android.graphics.Region toRegion(android.graphics.Rect);
@@ -272,8 +272,8 @@
}
public final class ColorDrawableKt {
- method public static inline android.graphics.drawable.ColorDrawable toDrawable(@ColorInt int);
method @RequiresApi(26) public static inline android.graphics.drawable.ColorDrawable toDrawable(android.graphics.Color);
+ method public static inline android.graphics.drawable.ColorDrawable toDrawable(@ColorInt int);
}
public final class DrawableKt {
@@ -304,8 +304,8 @@
public final class UriKt {
method public static java.io.File toFile(android.net.Uri);
- method public static inline android.net.Uri toUri(String);
method public static inline android.net.Uri toUri(java.io.File);
+ method public static inline android.net.Uri toUri(String);
}
}
@@ -313,8 +313,8 @@
package androidx.core.os {
public final class BundleKt {
- method public static android.os.Bundle bundleOf(kotlin.Pair<java.lang.String,?>... pairs);
method public static android.os.Bundle bundleOf();
+ method public static android.os.Bundle bundleOf(kotlin.Pair<java.lang.String,?>... pairs);
}
public final class HandlerKt {
@@ -327,8 +327,8 @@
}
public final class PersistableBundleKt {
- method @RequiresApi(21) public static android.os.PersistableBundle persistableBundleOf(kotlin.Pair<java.lang.String,?>... pairs);
method @RequiresApi(21) public static android.os.PersistableBundle persistableBundleOf();
+ method @RequiresApi(21) public static android.os.PersistableBundle persistableBundleOf(kotlin.Pair<java.lang.String,?>... pairs);
method @RequiresApi(21) public static android.os.PersistableBundle toPersistableBundle(java.util.Map<java.lang.String,?>);
}
@@ -359,8 +359,8 @@
method public static inline android.text.SpannableStringBuilder bold(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
method public static inline android.text.SpannedString buildSpannedString(kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
method public static inline android.text.SpannableStringBuilder color(android.text.SpannableStringBuilder, @ColorInt int color, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object![] spans, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object span, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object![] spans, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
method public static inline android.text.SpannableStringBuilder italic(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
method public static inline android.text.SpannableStringBuilder scale(android.text.SpannableStringBuilder, float proportion, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
method public static inline android.text.SpannableStringBuilder strikeThrough(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
@@ -419,10 +419,10 @@
}
public final class HalfKt {
- method @RequiresApi(26) public static inline android.util.Half toHalf(@HalfFloat short);
- method @RequiresApi(26) public static inline android.util.Half toHalf(float);
method @RequiresApi(26) public static inline android.util.Half toHalf(double);
+ method @RequiresApi(26) public static inline android.util.Half toHalf(float);
method @RequiresApi(26) public static inline android.util.Half toHalf(String);
+ method @RequiresApi(26) public static inline android.util.Half toHalf(@HalfFloat short);
}
public final class LongSparseArrayKt {
@@ -448,20 +448,20 @@
}
public final class PairKt {
- method public static inline operator <F, S> F component1(androidx.core.util.Pair<F,S>);
method public static inline operator <F, S> F component1(android.util.Pair<F,S>);
- method public static inline operator <F, S> S component2(androidx.core.util.Pair<F,S>);
+ method public static inline operator <F, S> F component1(androidx.core.util.Pair<F,S>);
method public static inline operator <F, S> S component2(android.util.Pair<F,S>);
+ method public static inline operator <F, S> S component2(androidx.core.util.Pair<F,S>);
method public static inline <F, S> android.util.Pair<F,S> toAndroidPair(kotlin.Pair<? extends F,? extends S>);
method public static inline <F, S> androidx.core.util.Pair<F,S> toAndroidXPair(kotlin.Pair<? extends F,? extends S>);
- method public static inline <F, S> kotlin.Pair<F,S> toKotlinPair(androidx.core.util.Pair<F,S>);
method public static inline <F, S> kotlin.Pair<F,S> toKotlinPair(android.util.Pair<F,S>);
+ method public static inline <F, S> kotlin.Pair<F,S> toKotlinPair(androidx.core.util.Pair<F,S>);
}
public final class RangeKt {
method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> and(android.util.Range<T>, android.util.Range<T> other);
- method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, T value);
method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, android.util.Range<T> other);
+ method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, T value);
method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> rangeTo(T, T that);
method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> kotlin.ranges.ClosedRange<T> toClosedRange(android.util.Range<T>);
method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> android.util.Range<T> toRange(kotlin.ranges.ClosedRange<T>);
diff --git a/core/core-ktx/src/androidTest/java/androidx/core/content/ContentValuesTest.kt b/core/core-ktx/src/androidTest/java/androidx/core/content/ContentValuesTest.kt
index a02e0f7..36c9173 100644
--- a/core/core-ktx/src/androidTest/java/androidx/core/content/ContentValuesTest.kt
+++ b/core/core-ktx/src/androidTest/java/androidx/core/content/ContentValuesTest.kt
@@ -18,11 +18,11 @@
import androidx.test.filters.SmallTest
import androidx.testutils.assertThrows
+import java.util.concurrent.atomic.AtomicInteger
import org.junit.Assert.assertArrayEquals
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNull
import org.junit.Test
-import java.util.concurrent.atomic.AtomicInteger
@SmallTest
class ContentValuesTest {
diff --git a/core/core-ktx/src/androidTest/java/androidx/core/content/ContextTest.kt b/core/core-ktx/src/androidTest/java/androidx/core/content/ContextTest.kt
index d733203..46c852a 100644
--- a/core/core-ktx/src/androidTest/java/androidx/core/content/ContextTest.kt
+++ b/core/core-ktx/src/androidTest/java/androidx/core/content/ContextTest.kt
@@ -17,8 +17,8 @@
package androidx.core.content
import android.content.ContextWrapper
-import androidx.core.ktx.test.R
import androidx.core.getAttributeSet
+import androidx.core.ktx.test.R
import androidx.test.core.app.ApplicationProvider
import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
diff --git a/core/core-ktx/src/androidTest/java/androidx/core/content/res/TypedArrayTest.kt b/core/core-ktx/src/androidTest/java/androidx/core/content/res/TypedArrayTest.kt
index fee7dd4..2c9a791 100644
--- a/core/core-ktx/src/androidTest/java/androidx/core/content/res/TypedArrayTest.kt
+++ b/core/core-ktx/src/androidTest/java/androidx/core/content/res/TypedArrayTest.kt
@@ -18,9 +18,9 @@
import android.graphics.Color
import androidx.core.getAttributeSet
+import androidx.core.ktx.test.R
import androidx.test.core.app.ApplicationProvider
import androidx.test.filters.SdkSuppress
-import androidx.core.ktx.test.R
import androidx.test.filters.SmallTest
import androidx.testutils.assertThrows
import org.junit.Assert.assertEquals
diff --git a/core/core-ktx/src/androidTest/java/androidx/core/graphics/ImageDecoderTest.kt b/core/core-ktx/src/androidTest/java/androidx/core/graphics/ImageDecoderTest.kt
index 34bdeec..5e0afa0 100644
--- a/core/core-ktx/src/androidTest/java/androidx/core/graphics/ImageDecoderTest.kt
+++ b/core/core-ktx/src/androidTest/java/androidx/core/graphics/ImageDecoderTest.kt
@@ -20,11 +20,11 @@
import android.graphics.ImageDecoder
import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
+import java.io.ByteArrayOutputStream
+import java.nio.ByteBuffer
import org.junit.Assert.assertEquals
import org.junit.BeforeClass
import org.junit.Test
-import java.io.ByteArrayOutputStream
-import java.nio.ByteBuffer
@SdkSuppress(minSdkVersion = 28)
@SmallTest
diff --git a/core/core-ktx/src/androidTest/java/androidx/core/graphics/drawable/IconTest.kt b/core/core-ktx/src/androidTest/java/androidx/core/graphics/drawable/IconTest.kt
index d124360..8392569 100644
--- a/core/core-ktx/src/androidTest/java/androidx/core/graphics/drawable/IconTest.kt
+++ b/core/core-ktx/src/androidTest/java/androidx/core/graphics/drawable/IconTest.kt
@@ -26,9 +26,9 @@
import androidx.test.core.app.ApplicationProvider
import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
+import java.io.File
import org.junit.Assert.assertEquals
import org.junit.Test
-import java.io.File
@SdkSuppress(minSdkVersion = 26)
@SmallTest
diff --git a/core/core-ktx/src/androidTest/java/androidx/core/net/UriTest.kt b/core/core-ktx/src/androidTest/java/androidx/core/net/UriTest.kt
index 600318f..129cd08 100644
--- a/core/core-ktx/src/androidTest/java/androidx/core/net/UriTest.kt
+++ b/core/core-ktx/src/androidTest/java/androidx/core/net/UriTest.kt
@@ -19,9 +19,9 @@
import android.net.Uri
import androidx.test.filters.SmallTest
import androidx.testutils.assertThrows
+import java.io.File
import org.junit.Assert.assertEquals
import org.junit.Test
-import java.io.File
@SmallTest
class UriTest {
diff --git a/core/core-ktx/src/androidTest/java/androidx/core/os/BundleTest.kt b/core/core-ktx/src/androidTest/java/androidx/core/os/BundleTest.kt
index c312bda..a1af056 100644
--- a/core/core-ktx/src/androidTest/java/androidx/core/os/BundleTest.kt
+++ b/core/core-ktx/src/androidTest/java/androidx/core/os/BundleTest.kt
@@ -29,12 +29,12 @@
import androidx.test.filters.SmallTest
import androidx.testutils.assertThrows
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.atomic.AtomicInteger
import org.junit.Assert.assertArrayEquals
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNull
import org.junit.Assert.assertSame
import org.junit.Test
-import java.util.concurrent.atomic.AtomicInteger
@SmallTest
class BundleTest {
diff --git a/core/core-ktx/src/androidTest/java/androidx/core/os/HandlerTest.kt b/core/core-ktx/src/androidTest/java/androidx/core/os/HandlerTest.kt
index e8cc7e2..f167abd 100644
--- a/core/core-ktx/src/androidTest/java/androidx/core/os/HandlerTest.kt
+++ b/core/core-ktx/src/androidTest/java/androidx/core/os/HandlerTest.kt
@@ -25,16 +25,16 @@
import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import java.util.concurrent.TimeUnit.MILLISECONDS
+import java.util.concurrent.TimeUnit.SECONDS
import org.junit.After
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
-import java.util.concurrent.TimeUnit.MILLISECONDS
-import java.util.concurrent.TimeUnit.SECONDS
@SmallTest
@SdkSuppress(minSdkVersion = 26)
diff --git a/core/core-ktx/src/androidTest/java/androidx/core/text/LocaleTest.kt b/core/core-ktx/src/androidTest/java/androidx/core/text/LocaleTest.kt
index 1a2f5ed..73cd538 100644
--- a/core/core-ktx/src/androidTest/java/androidx/core/text/LocaleTest.kt
+++ b/core/core-ktx/src/androidTest/java/androidx/core/text/LocaleTest.kt
@@ -19,9 +19,9 @@
import android.view.View
import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
+import java.util.Locale
import org.junit.Assert.assertEquals
import org.junit.Test
-import java.util.Locale
@SdkSuppress(minSdkVersion = 21)
@SmallTest
diff --git a/core/core-ktx/src/androidTest/java/androidx/core/transition/TransitionTest.kt b/core/core-ktx/src/androidTest/java/androidx/core/transition/TransitionTest.kt
index e2ec8f0..4abd56a 100644
--- a/core/core-ktx/src/androidTest/java/androidx/core/transition/TransitionTest.kt
+++ b/core/core-ktx/src/androidTest/java/androidx/core/transition/TransitionTest.kt
@@ -27,13 +27,13 @@
import androidx.test.filters.MediumTest
import androidx.test.filters.SdkSuppress
import androidx.test.platform.app.InstrumentationRegistry
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import java.util.concurrent.atomic.AtomicBoolean
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
-import java.util.concurrent.atomic.AtomicBoolean
@SdkSuppress(minSdkVersion = 19)
@MediumTest
diff --git a/core/core-ktx/src/androidTest/java/androidx/core/util/AtomicFileTest.kt b/core/core-ktx/src/androidTest/java/androidx/core/util/AtomicFileTest.kt
index e2586fd..9101f82 100644
--- a/core/core-ktx/src/androidTest/java/androidx/core/util/AtomicFileTest.kt
+++ b/core/core-ktx/src/androidTest/java/androidx/core/util/AtomicFileTest.kt
@@ -20,13 +20,13 @@
import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
import androidx.testutils.assertThrows
+import java.io.IOException
import org.junit.Assert.assertArrayEquals
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.rules.TemporaryFolder
-import java.io.IOException
@SdkSuppress(minSdkVersion = 17)
@SmallTest
diff --git a/core/core-ktx/src/androidTest/java/androidx/core/util/PairTest.kt b/core/core-ktx/src/androidTest/java/androidx/core/util/PairTest.kt
index 4be680d..dbc1686 100644
--- a/core/core-ktx/src/androidTest/java/androidx/core/util/PairTest.kt
+++ b/core/core-ktx/src/androidTest/java/androidx/core/util/PairTest.kt
@@ -16,12 +16,12 @@
package androidx.core.util
+import android.util.Pair as AndroidPair
import androidx.test.filters.SmallTest
+import kotlin.Pair as KotlinPair
import org.junit.Assert.assertEquals
import org.junit.Assert.assertSame
import org.junit.Test
-import android.util.Pair as AndroidPair
-import kotlin.Pair as KotlinPair
@SmallTest
class PairTest {
diff --git a/core/core-ktx/src/androidTest/java/androidx/core/widget/TextViewTest.kt b/core/core-ktx/src/androidTest/java/androidx/core/widget/TextViewTest.kt
index f20dbb4..b172a5d 100644
--- a/core/core-ktx/src/androidTest/java/androidx/core/widget/TextViewTest.kt
+++ b/core/core-ktx/src/androidTest/java/androidx/core/widget/TextViewTest.kt
@@ -21,11 +21,11 @@
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
+import java.util.concurrent.atomic.AtomicBoolean
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.atomic.AtomicBoolean
@RunWith(AndroidJUnit4::class)
@LargeTest
diff --git a/core/core-location-altitude/api/public_plus_experimental_current.txt b/core/core-location-altitude/api/public_plus_experimental_current.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/core/core-location-altitude/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/core/core-location-altitude/build.gradle b/core/core-location-altitude/build.gradle
index 6f5e108..ccee9b7 100644
--- a/core/core-location-altitude/build.gradle
+++ b/core/core-location-altitude/build.gradle
@@ -41,7 +41,7 @@
}
androidx {
- name = "Location Altitude Compatibility Library"
+ name = "Location Altitude"
type = LibraryType.PUBLISHED_LIBRARY
mavenVersion = LibraryVersions.CORE_LOCATION_ALTITUDE
inceptionYear = "2022"
diff --git a/core/core-performance/api/public_plus_experimental_current.txt b/core/core-performance/api/public_plus_experimental_current.txt
deleted file mode 100644
index 406c06f..0000000
--- a/core/core-performance/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-// Signature format: 4.0
-package androidx.core.performance {
-
- @kotlin.jvm.JvmDefaultWithCompatibility public interface DevicePerformance {
- method public default static androidx.core.performance.DevicePerformance create(android.content.Context context);
- method public int getMediaPerformanceClass();
- property public abstract int mediaPerformanceClass;
- field public static final androidx.core.performance.DevicePerformance.Companion Companion;
- }
-
- public static final class DevicePerformance.Companion {
- method public androidx.core.performance.DevicePerformance create(android.content.Context context);
- }
-
-}
-
diff --git a/core/core-remoteviews/api/1.0.0-beta04.txt b/core/core-remoteviews/api/1.0.0-beta04.txt
index 58dee29..f760371 100644
--- a/core/core-remoteviews/api/1.0.0-beta04.txt
+++ b/core/core-remoteviews/api/1.0.0-beta04.txt
@@ -4,8 +4,8 @@
public final class AppWidgetManagerCompat {
method public static android.widget.RemoteViews createExactSizeAppWidget(android.appwidget.AppWidgetManager appWidgetManager, int appWidgetId, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
method public static android.widget.RemoteViews createResponsiveSizeAppWidget(android.appwidget.AppWidgetManager appWidgetManager, int appWidgetId, java.util.Collection<androidx.core.util.SizeFCompat> dpSizes, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
- method public static void updateAppWidget(android.appwidget.AppWidgetManager, int appWidgetId, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
method public static void updateAppWidget(android.appwidget.AppWidgetManager, int appWidgetId, java.util.Collection<androidx.core.util.SizeFCompat> dpSizes, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
+ method public static void updateAppWidget(android.appwidget.AppWidgetManager, int appWidgetId, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
}
public final class RemoteViewsCompat {
@@ -47,12 +47,12 @@
method @RequiresApi(31) public static void setImageViewImageTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
method @RequiresApi(31) public static void setImageViewImageTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setImageViewImageTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method public static void setImageViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
method @RequiresApi(31) public static void setImageViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setImageViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
method @RequiresApi(31) public static void setImageViewMaxHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setImageViewMaxHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method public static void setImageViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
method @RequiresApi(31) public static void setImageViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setImageViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
method @RequiresApi(31) public static void setImageViewMaxWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setImageViewMaxWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setLinearLayoutBaselineAligned(android.widget.RemoteViews, @IdRes int viewId, boolean baselineAligned);
@@ -87,8 +87,8 @@
method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method @RequiresApi(31) public static void setProgressBarStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
method @RequiresApi(31) public static void setProgressBarStateDescription(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setProgressBarStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
method @RequiresApi(31) public static void setProgressBarStateDescriptionAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setRelativeLayoutGravity(android.widget.RemoteViews, @IdRes int viewId, int gravity);
method public static void setRelativeLayoutHorizontalGravity(android.widget.RemoteViews, @IdRes int viewId, int horizontalGravity);
@@ -103,11 +103,11 @@
method @RequiresApi(31) public static void setSwitchPaddingDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setSwitchShowText(android.widget.RemoteViews, @IdRes int viewId, boolean showText);
method @RequiresApi(31) public static void setSwitchSplitTrack(android.widget.RemoteViews, @IdRes int viewId, boolean splitTrack);
- method @RequiresApi(31) public static void setSwitchTextOff(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOff);
method @RequiresApi(31) public static void setSwitchTextOff(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setSwitchTextOff(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOff);
method @RequiresApi(31) public static void setSwitchTextOffAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method @RequiresApi(31) public static void setSwitchTextOn(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOn);
method @RequiresApi(31) public static void setSwitchTextOn(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setSwitchTextOn(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOn);
method @RequiresApi(31) public static void setSwitchTextOnAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setSwitchThumbIcon(android.widget.RemoteViews, @IdRes int viewId, android.graphics.drawable.Icon? icon);
method @RequiresApi(31) public static void setSwitchThumbIcon(android.widget.RemoteViews, @IdRes int viewId, android.graphics.drawable.Icon? notNight, android.graphics.drawable.Icon? night);
@@ -128,35 +128,35 @@
method @RequiresApi(31) public static void setSwitchTrackTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNight, android.content.res.ColorStateList? night);
method @RequiresApi(31) public static void setSwitchTrackTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setSwitchTrackTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method @RequiresApi(17) public static void setTextClockFormat12Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
method @RequiresApi(31) public static void setTextClockFormat12Hour(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(17) public static void setTextClockFormat12Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
method @RequiresApi(31) public static void setTextClockFormat12HourAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method @RequiresApi(17) public static void setTextClockFormat24Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
method @RequiresApi(31) public static void setTextClockFormat24Hour(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(17) public static void setTextClockFormat24Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
method @RequiresApi(31) public static void setTextClockFormat24HourAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(17) public static void setTextClockTimeZone(android.widget.RemoteViews, @IdRes int viewId, String? timeZone);
method @RequiresApi(31) public static void setTextViewAllCaps(android.widget.RemoteViews, @IdRes int viewId, boolean allCaps);
method public static void setTextViewAutoLinkMask(android.widget.RemoteViews, @IdRes int viewId, int mask);
- method @RequiresApi(16) public static void setTextViewCompoundDrawablePadding(android.widget.RemoteViews, @IdRes int viewId, @Px int pad);
method @RequiresApi(31) public static void setTextViewCompoundDrawablePadding(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(16) public static void setTextViewCompoundDrawablePadding(android.widget.RemoteViews, @IdRes int viewId, @Px int pad);
method @RequiresApi(31) public static void setTextViewCompoundDrawablePaddingDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewCompoundDrawablePaddingDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewEms(android.widget.RemoteViews, @IdRes int viewId, int ems);
- method public static void setTextViewError(android.widget.RemoteViews, @IdRes int viewId, CharSequence? error);
method @RequiresApi(31) public static void setTextViewError(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method public static void setTextViewError(android.widget.RemoteViews, @IdRes int viewId, CharSequence? error);
method @RequiresApi(31) public static void setTextViewErrorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(21) public static void setTextViewFontFeatureSettings(android.widget.RemoteViews, @IdRes int viewId, String fontFeatureSettings);
method @RequiresApi(31) public static void setTextViewGravity(android.widget.RemoteViews, @IdRes int viewId, int gravity);
- method public static void setTextViewHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
method @RequiresApi(31) public static void setTextViewHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
method @RequiresApi(31) public static void setTextViewHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewHighlightColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
method @RequiresApi(31) public static void setTextViewHighlightColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
method @RequiresApi(31) public static void setTextViewHighlightColorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setTextViewHighlightColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
- method public static void setTextViewHint(android.widget.RemoteViews, @IdRes int viewId, CharSequence? hint);
method public static void setTextViewHint(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method public static void setTextViewHint(android.widget.RemoteViews, @IdRes int viewId, CharSequence? hint);
method @RequiresApi(31) public static void setTextViewHintAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewHintTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
method @RequiresApi(31) public static void setTextViewHintTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
@@ -174,23 +174,23 @@
method @RequiresApi(31) public static void setTextViewLinkTextColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method public static void setTextViewLinksClickable(android.widget.RemoteViews, @IdRes int viewId, boolean whether);
method public static void setTextViewMaxEms(android.widget.RemoteViews, @IdRes int viewId, int maxems);
- method public static void setTextViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
method @RequiresApi(31) public static void setTextViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
method @RequiresApi(31) public static void setTextViewMaxHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewMaxHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewMaxLines(android.widget.RemoteViews, @IdRes int viewId, int maxLines);
- method public static void setTextViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
method @RequiresApi(31) public static void setTextViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
method @RequiresApi(31) public static void setTextViewMaxWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewMaxWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewMinEms(android.widget.RemoteViews, @IdRes int viewId, int minems);
- method public static void setTextViewMinHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
method @RequiresApi(31) public static void setTextViewMinHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewMinHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
method @RequiresApi(31) public static void setTextViewMinHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewMinHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewMinLines(android.widget.RemoteViews, @IdRes int viewId, int minLines);
- method public static void setTextViewMinWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int minWidth);
method @RequiresApi(31) public static void setTextViewMinWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewMinWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int minWidth);
method @RequiresApi(31) public static void setTextViewMinWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewMinWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewPaintFlags(android.widget.RemoteViews, @IdRes int viewId, int flags);
@@ -198,17 +198,17 @@
method public static void setTextViewSingleLine(android.widget.RemoteViews, @IdRes int viewId, boolean singleLine);
method public static void setTextViewText(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
method @RequiresApi(31) public static void setTextViewTextAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
method @RequiresApi(31) public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList colors);
method @RequiresApi(31) public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList notNight, android.content.res.ColorStateList night);
+ method public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
method @RequiresApi(31) public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
method @RequiresApi(31) public static void setTextViewTextColorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setTextViewTextColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method public static void setTextViewTextScaleX(android.widget.RemoteViews, @IdRes int viewId, float size);
method @RequiresApi(31) public static void setTextViewTextSizeDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewTextSizeDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method public static void setTextViewWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
method @RequiresApi(31) public static void setTextViewWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
method @RequiresApi(31) public static void setTextViewWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setViewAlpha(android.widget.RemoteViews, @IdRes int viewId, float alpha);
@@ -223,8 +223,8 @@
method @RequiresApi(31) public static void setViewBackgroundTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setViewBackgroundTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setViewClipToOutline(android.widget.RemoteViews, @IdRes int viewId, boolean clipToOutline);
- method public static void setViewContentDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? contentDescription);
method @RequiresApi(31) public static void setViewContentDescription(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method public static void setViewContentDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? contentDescription);
method @RequiresApi(31) public static void setViewContentDescriptionAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setViewElevationDimen(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
method @RequiresApi(31) public static void setViewElevationDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
@@ -240,8 +240,8 @@
method @RequiresApi(31) public static void setViewForegroundTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setViewForegroundTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(17) public static void setViewLayoutDirection(android.widget.RemoteViews, @IdRes int viewId, int layoutDirection);
- method @RequiresApi(24) public static void setViewMinimumHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
method @RequiresApi(31) public static void setViewMinimumHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(24) public static void setViewMinimumHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
method @RequiresApi(31) public static void setViewMinimumHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setViewMinimumHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setViewMinimumWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
@@ -255,8 +255,8 @@
method @RequiresApi(31) public static void setViewScaleX(android.widget.RemoteViews, @IdRes int viewId, float scaleX);
method @RequiresApi(31) public static void setViewScaleY(android.widget.RemoteViews, @IdRes int viewId, float scaleY);
method @RequiresApi(31) public static void setViewScrollIndicators(android.widget.RemoteViews, @IdRes int viewId, int scrollIndicators);
- method @RequiresApi(30) public static void setViewStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
method @RequiresApi(31) public static void setViewStateDescription(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(30) public static void setViewStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
method @RequiresApi(31) public static void setViewStateDescriptionAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(16) public static void setViewStubInflatedId(android.widget.RemoteViews, @IdRes int viewId, int inflatedId);
method @RequiresApi(16) public static void setViewStubLayoutResource(android.widget.RemoteViews, @IdRes int viewId, @LayoutRes int layoutResource);
diff --git a/core/core-remoteviews/api/public_plus_experimental_current.txt b/core/core-remoteviews/api/1.0.0-beta05.txt
similarity index 99%
rename from core/core-remoteviews/api/public_plus_experimental_current.txt
rename to core/core-remoteviews/api/1.0.0-beta05.txt
index 58dee29..f760371 100644
--- a/core/core-remoteviews/api/public_plus_experimental_current.txt
+++ b/core/core-remoteviews/api/1.0.0-beta05.txt
@@ -4,8 +4,8 @@
public final class AppWidgetManagerCompat {
method public static android.widget.RemoteViews createExactSizeAppWidget(android.appwidget.AppWidgetManager appWidgetManager, int appWidgetId, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
method public static android.widget.RemoteViews createResponsiveSizeAppWidget(android.appwidget.AppWidgetManager appWidgetManager, int appWidgetId, java.util.Collection<androidx.core.util.SizeFCompat> dpSizes, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
- method public static void updateAppWidget(android.appwidget.AppWidgetManager, int appWidgetId, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
method public static void updateAppWidget(android.appwidget.AppWidgetManager, int appWidgetId, java.util.Collection<androidx.core.util.SizeFCompat> dpSizes, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
+ method public static void updateAppWidget(android.appwidget.AppWidgetManager, int appWidgetId, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
}
public final class RemoteViewsCompat {
@@ -47,12 +47,12 @@
method @RequiresApi(31) public static void setImageViewImageTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
method @RequiresApi(31) public static void setImageViewImageTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setImageViewImageTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method public static void setImageViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
method @RequiresApi(31) public static void setImageViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setImageViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
method @RequiresApi(31) public static void setImageViewMaxHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setImageViewMaxHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method public static void setImageViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
method @RequiresApi(31) public static void setImageViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setImageViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
method @RequiresApi(31) public static void setImageViewMaxWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setImageViewMaxWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setLinearLayoutBaselineAligned(android.widget.RemoteViews, @IdRes int viewId, boolean baselineAligned);
@@ -87,8 +87,8 @@
method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method @RequiresApi(31) public static void setProgressBarStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
method @RequiresApi(31) public static void setProgressBarStateDescription(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setProgressBarStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
method @RequiresApi(31) public static void setProgressBarStateDescriptionAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setRelativeLayoutGravity(android.widget.RemoteViews, @IdRes int viewId, int gravity);
method public static void setRelativeLayoutHorizontalGravity(android.widget.RemoteViews, @IdRes int viewId, int horizontalGravity);
@@ -103,11 +103,11 @@
method @RequiresApi(31) public static void setSwitchPaddingDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setSwitchShowText(android.widget.RemoteViews, @IdRes int viewId, boolean showText);
method @RequiresApi(31) public static void setSwitchSplitTrack(android.widget.RemoteViews, @IdRes int viewId, boolean splitTrack);
- method @RequiresApi(31) public static void setSwitchTextOff(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOff);
method @RequiresApi(31) public static void setSwitchTextOff(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setSwitchTextOff(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOff);
method @RequiresApi(31) public static void setSwitchTextOffAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method @RequiresApi(31) public static void setSwitchTextOn(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOn);
method @RequiresApi(31) public static void setSwitchTextOn(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setSwitchTextOn(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOn);
method @RequiresApi(31) public static void setSwitchTextOnAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setSwitchThumbIcon(android.widget.RemoteViews, @IdRes int viewId, android.graphics.drawable.Icon? icon);
method @RequiresApi(31) public static void setSwitchThumbIcon(android.widget.RemoteViews, @IdRes int viewId, android.graphics.drawable.Icon? notNight, android.graphics.drawable.Icon? night);
@@ -128,35 +128,35 @@
method @RequiresApi(31) public static void setSwitchTrackTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNight, android.content.res.ColorStateList? night);
method @RequiresApi(31) public static void setSwitchTrackTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setSwitchTrackTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method @RequiresApi(17) public static void setTextClockFormat12Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
method @RequiresApi(31) public static void setTextClockFormat12Hour(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(17) public static void setTextClockFormat12Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
method @RequiresApi(31) public static void setTextClockFormat12HourAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method @RequiresApi(17) public static void setTextClockFormat24Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
method @RequiresApi(31) public static void setTextClockFormat24Hour(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(17) public static void setTextClockFormat24Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
method @RequiresApi(31) public static void setTextClockFormat24HourAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(17) public static void setTextClockTimeZone(android.widget.RemoteViews, @IdRes int viewId, String? timeZone);
method @RequiresApi(31) public static void setTextViewAllCaps(android.widget.RemoteViews, @IdRes int viewId, boolean allCaps);
method public static void setTextViewAutoLinkMask(android.widget.RemoteViews, @IdRes int viewId, int mask);
- method @RequiresApi(16) public static void setTextViewCompoundDrawablePadding(android.widget.RemoteViews, @IdRes int viewId, @Px int pad);
method @RequiresApi(31) public static void setTextViewCompoundDrawablePadding(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(16) public static void setTextViewCompoundDrawablePadding(android.widget.RemoteViews, @IdRes int viewId, @Px int pad);
method @RequiresApi(31) public static void setTextViewCompoundDrawablePaddingDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewCompoundDrawablePaddingDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewEms(android.widget.RemoteViews, @IdRes int viewId, int ems);
- method public static void setTextViewError(android.widget.RemoteViews, @IdRes int viewId, CharSequence? error);
method @RequiresApi(31) public static void setTextViewError(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method public static void setTextViewError(android.widget.RemoteViews, @IdRes int viewId, CharSequence? error);
method @RequiresApi(31) public static void setTextViewErrorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(21) public static void setTextViewFontFeatureSettings(android.widget.RemoteViews, @IdRes int viewId, String fontFeatureSettings);
method @RequiresApi(31) public static void setTextViewGravity(android.widget.RemoteViews, @IdRes int viewId, int gravity);
- method public static void setTextViewHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
method @RequiresApi(31) public static void setTextViewHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
method @RequiresApi(31) public static void setTextViewHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewHighlightColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
method @RequiresApi(31) public static void setTextViewHighlightColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
method @RequiresApi(31) public static void setTextViewHighlightColorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setTextViewHighlightColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
- method public static void setTextViewHint(android.widget.RemoteViews, @IdRes int viewId, CharSequence? hint);
method public static void setTextViewHint(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method public static void setTextViewHint(android.widget.RemoteViews, @IdRes int viewId, CharSequence? hint);
method @RequiresApi(31) public static void setTextViewHintAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewHintTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
method @RequiresApi(31) public static void setTextViewHintTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
@@ -174,23 +174,23 @@
method @RequiresApi(31) public static void setTextViewLinkTextColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method public static void setTextViewLinksClickable(android.widget.RemoteViews, @IdRes int viewId, boolean whether);
method public static void setTextViewMaxEms(android.widget.RemoteViews, @IdRes int viewId, int maxems);
- method public static void setTextViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
method @RequiresApi(31) public static void setTextViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
method @RequiresApi(31) public static void setTextViewMaxHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewMaxHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewMaxLines(android.widget.RemoteViews, @IdRes int viewId, int maxLines);
- method public static void setTextViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
method @RequiresApi(31) public static void setTextViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
method @RequiresApi(31) public static void setTextViewMaxWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewMaxWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewMinEms(android.widget.RemoteViews, @IdRes int viewId, int minems);
- method public static void setTextViewMinHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
method @RequiresApi(31) public static void setTextViewMinHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewMinHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
method @RequiresApi(31) public static void setTextViewMinHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewMinHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewMinLines(android.widget.RemoteViews, @IdRes int viewId, int minLines);
- method public static void setTextViewMinWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int minWidth);
method @RequiresApi(31) public static void setTextViewMinWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewMinWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int minWidth);
method @RequiresApi(31) public static void setTextViewMinWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewMinWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewPaintFlags(android.widget.RemoteViews, @IdRes int viewId, int flags);
@@ -198,17 +198,17 @@
method public static void setTextViewSingleLine(android.widget.RemoteViews, @IdRes int viewId, boolean singleLine);
method public static void setTextViewText(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
method @RequiresApi(31) public static void setTextViewTextAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
method @RequiresApi(31) public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList colors);
method @RequiresApi(31) public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList notNight, android.content.res.ColorStateList night);
+ method public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
method @RequiresApi(31) public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
method @RequiresApi(31) public static void setTextViewTextColorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setTextViewTextColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method public static void setTextViewTextScaleX(android.widget.RemoteViews, @IdRes int viewId, float size);
method @RequiresApi(31) public static void setTextViewTextSizeDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewTextSizeDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method public static void setTextViewWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
method @RequiresApi(31) public static void setTextViewWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
method @RequiresApi(31) public static void setTextViewWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setViewAlpha(android.widget.RemoteViews, @IdRes int viewId, float alpha);
@@ -223,8 +223,8 @@
method @RequiresApi(31) public static void setViewBackgroundTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setViewBackgroundTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setViewClipToOutline(android.widget.RemoteViews, @IdRes int viewId, boolean clipToOutline);
- method public static void setViewContentDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? contentDescription);
method @RequiresApi(31) public static void setViewContentDescription(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method public static void setViewContentDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? contentDescription);
method @RequiresApi(31) public static void setViewContentDescriptionAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setViewElevationDimen(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
method @RequiresApi(31) public static void setViewElevationDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
@@ -240,8 +240,8 @@
method @RequiresApi(31) public static void setViewForegroundTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setViewForegroundTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(17) public static void setViewLayoutDirection(android.widget.RemoteViews, @IdRes int viewId, int layoutDirection);
- method @RequiresApi(24) public static void setViewMinimumHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
method @RequiresApi(31) public static void setViewMinimumHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(24) public static void setViewMinimumHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
method @RequiresApi(31) public static void setViewMinimumHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setViewMinimumHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setViewMinimumWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
@@ -255,8 +255,8 @@
method @RequiresApi(31) public static void setViewScaleX(android.widget.RemoteViews, @IdRes int viewId, float scaleX);
method @RequiresApi(31) public static void setViewScaleY(android.widget.RemoteViews, @IdRes int viewId, float scaleY);
method @RequiresApi(31) public static void setViewScrollIndicators(android.widget.RemoteViews, @IdRes int viewId, int scrollIndicators);
- method @RequiresApi(30) public static void setViewStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
method @RequiresApi(31) public static void setViewStateDescription(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(30) public static void setViewStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
method @RequiresApi(31) public static void setViewStateDescriptionAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(16) public static void setViewStubInflatedId(android.widget.RemoteViews, @IdRes int viewId, int inflatedId);
method @RequiresApi(16) public static void setViewStubLayoutResource(android.widget.RemoteViews, @IdRes int viewId, @LayoutRes int layoutResource);
diff --git a/core/core-remoteviews/api/current.txt b/core/core-remoteviews/api/current.txt
index 58dee29..f760371 100644
--- a/core/core-remoteviews/api/current.txt
+++ b/core/core-remoteviews/api/current.txt
@@ -4,8 +4,8 @@
public final class AppWidgetManagerCompat {
method public static android.widget.RemoteViews createExactSizeAppWidget(android.appwidget.AppWidgetManager appWidgetManager, int appWidgetId, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
method public static android.widget.RemoteViews createResponsiveSizeAppWidget(android.appwidget.AppWidgetManager appWidgetManager, int appWidgetId, java.util.Collection<androidx.core.util.SizeFCompat> dpSizes, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
- method public static void updateAppWidget(android.appwidget.AppWidgetManager, int appWidgetId, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
method public static void updateAppWidget(android.appwidget.AppWidgetManager, int appWidgetId, java.util.Collection<androidx.core.util.SizeFCompat> dpSizes, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
+ method public static void updateAppWidget(android.appwidget.AppWidgetManager, int appWidgetId, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
}
public final class RemoteViewsCompat {
@@ -47,12 +47,12 @@
method @RequiresApi(31) public static void setImageViewImageTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
method @RequiresApi(31) public static void setImageViewImageTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setImageViewImageTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method public static void setImageViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
method @RequiresApi(31) public static void setImageViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setImageViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
method @RequiresApi(31) public static void setImageViewMaxHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setImageViewMaxHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method public static void setImageViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
method @RequiresApi(31) public static void setImageViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setImageViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
method @RequiresApi(31) public static void setImageViewMaxWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setImageViewMaxWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setLinearLayoutBaselineAligned(android.widget.RemoteViews, @IdRes int viewId, boolean baselineAligned);
@@ -87,8 +87,8 @@
method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method @RequiresApi(31) public static void setProgressBarStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
method @RequiresApi(31) public static void setProgressBarStateDescription(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setProgressBarStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
method @RequiresApi(31) public static void setProgressBarStateDescriptionAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setRelativeLayoutGravity(android.widget.RemoteViews, @IdRes int viewId, int gravity);
method public static void setRelativeLayoutHorizontalGravity(android.widget.RemoteViews, @IdRes int viewId, int horizontalGravity);
@@ -103,11 +103,11 @@
method @RequiresApi(31) public static void setSwitchPaddingDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setSwitchShowText(android.widget.RemoteViews, @IdRes int viewId, boolean showText);
method @RequiresApi(31) public static void setSwitchSplitTrack(android.widget.RemoteViews, @IdRes int viewId, boolean splitTrack);
- method @RequiresApi(31) public static void setSwitchTextOff(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOff);
method @RequiresApi(31) public static void setSwitchTextOff(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setSwitchTextOff(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOff);
method @RequiresApi(31) public static void setSwitchTextOffAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method @RequiresApi(31) public static void setSwitchTextOn(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOn);
method @RequiresApi(31) public static void setSwitchTextOn(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setSwitchTextOn(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOn);
method @RequiresApi(31) public static void setSwitchTextOnAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setSwitchThumbIcon(android.widget.RemoteViews, @IdRes int viewId, android.graphics.drawable.Icon? icon);
method @RequiresApi(31) public static void setSwitchThumbIcon(android.widget.RemoteViews, @IdRes int viewId, android.graphics.drawable.Icon? notNight, android.graphics.drawable.Icon? night);
@@ -128,35 +128,35 @@
method @RequiresApi(31) public static void setSwitchTrackTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNight, android.content.res.ColorStateList? night);
method @RequiresApi(31) public static void setSwitchTrackTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setSwitchTrackTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method @RequiresApi(17) public static void setTextClockFormat12Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
method @RequiresApi(31) public static void setTextClockFormat12Hour(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(17) public static void setTextClockFormat12Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
method @RequiresApi(31) public static void setTextClockFormat12HourAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method @RequiresApi(17) public static void setTextClockFormat24Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
method @RequiresApi(31) public static void setTextClockFormat24Hour(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(17) public static void setTextClockFormat24Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
method @RequiresApi(31) public static void setTextClockFormat24HourAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(17) public static void setTextClockTimeZone(android.widget.RemoteViews, @IdRes int viewId, String? timeZone);
method @RequiresApi(31) public static void setTextViewAllCaps(android.widget.RemoteViews, @IdRes int viewId, boolean allCaps);
method public static void setTextViewAutoLinkMask(android.widget.RemoteViews, @IdRes int viewId, int mask);
- method @RequiresApi(16) public static void setTextViewCompoundDrawablePadding(android.widget.RemoteViews, @IdRes int viewId, @Px int pad);
method @RequiresApi(31) public static void setTextViewCompoundDrawablePadding(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(16) public static void setTextViewCompoundDrawablePadding(android.widget.RemoteViews, @IdRes int viewId, @Px int pad);
method @RequiresApi(31) public static void setTextViewCompoundDrawablePaddingDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewCompoundDrawablePaddingDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewEms(android.widget.RemoteViews, @IdRes int viewId, int ems);
- method public static void setTextViewError(android.widget.RemoteViews, @IdRes int viewId, CharSequence? error);
method @RequiresApi(31) public static void setTextViewError(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method public static void setTextViewError(android.widget.RemoteViews, @IdRes int viewId, CharSequence? error);
method @RequiresApi(31) public static void setTextViewErrorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(21) public static void setTextViewFontFeatureSettings(android.widget.RemoteViews, @IdRes int viewId, String fontFeatureSettings);
method @RequiresApi(31) public static void setTextViewGravity(android.widget.RemoteViews, @IdRes int viewId, int gravity);
- method public static void setTextViewHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
method @RequiresApi(31) public static void setTextViewHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
method @RequiresApi(31) public static void setTextViewHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewHighlightColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
method @RequiresApi(31) public static void setTextViewHighlightColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
method @RequiresApi(31) public static void setTextViewHighlightColorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setTextViewHighlightColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
- method public static void setTextViewHint(android.widget.RemoteViews, @IdRes int viewId, CharSequence? hint);
method public static void setTextViewHint(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method public static void setTextViewHint(android.widget.RemoteViews, @IdRes int viewId, CharSequence? hint);
method @RequiresApi(31) public static void setTextViewHintAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewHintTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
method @RequiresApi(31) public static void setTextViewHintTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
@@ -174,23 +174,23 @@
method @RequiresApi(31) public static void setTextViewLinkTextColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method public static void setTextViewLinksClickable(android.widget.RemoteViews, @IdRes int viewId, boolean whether);
method public static void setTextViewMaxEms(android.widget.RemoteViews, @IdRes int viewId, int maxems);
- method public static void setTextViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
method @RequiresApi(31) public static void setTextViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
method @RequiresApi(31) public static void setTextViewMaxHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewMaxHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewMaxLines(android.widget.RemoteViews, @IdRes int viewId, int maxLines);
- method public static void setTextViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
method @RequiresApi(31) public static void setTextViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
method @RequiresApi(31) public static void setTextViewMaxWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewMaxWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewMinEms(android.widget.RemoteViews, @IdRes int viewId, int minems);
- method public static void setTextViewMinHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
method @RequiresApi(31) public static void setTextViewMinHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewMinHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
method @RequiresApi(31) public static void setTextViewMinHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewMinHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewMinLines(android.widget.RemoteViews, @IdRes int viewId, int minLines);
- method public static void setTextViewMinWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int minWidth);
method @RequiresApi(31) public static void setTextViewMinWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewMinWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int minWidth);
method @RequiresApi(31) public static void setTextViewMinWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewMinWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewPaintFlags(android.widget.RemoteViews, @IdRes int viewId, int flags);
@@ -198,17 +198,17 @@
method public static void setTextViewSingleLine(android.widget.RemoteViews, @IdRes int viewId, boolean singleLine);
method public static void setTextViewText(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
method @RequiresApi(31) public static void setTextViewTextAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
method @RequiresApi(31) public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList colors);
method @RequiresApi(31) public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList notNight, android.content.res.ColorStateList night);
+ method public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
method @RequiresApi(31) public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
method @RequiresApi(31) public static void setTextViewTextColorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setTextViewTextColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method public static void setTextViewTextScaleX(android.widget.RemoteViews, @IdRes int viewId, float size);
method @RequiresApi(31) public static void setTextViewTextSizeDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewTextSizeDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method public static void setTextViewWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
method @RequiresApi(31) public static void setTextViewWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
method @RequiresApi(31) public static void setTextViewWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setViewAlpha(android.widget.RemoteViews, @IdRes int viewId, float alpha);
@@ -223,8 +223,8 @@
method @RequiresApi(31) public static void setViewBackgroundTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setViewBackgroundTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setViewClipToOutline(android.widget.RemoteViews, @IdRes int viewId, boolean clipToOutline);
- method public static void setViewContentDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? contentDescription);
method @RequiresApi(31) public static void setViewContentDescription(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method public static void setViewContentDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? contentDescription);
method @RequiresApi(31) public static void setViewContentDescriptionAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setViewElevationDimen(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
method @RequiresApi(31) public static void setViewElevationDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
@@ -240,8 +240,8 @@
method @RequiresApi(31) public static void setViewForegroundTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setViewForegroundTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(17) public static void setViewLayoutDirection(android.widget.RemoteViews, @IdRes int viewId, int layoutDirection);
- method @RequiresApi(24) public static void setViewMinimumHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
method @RequiresApi(31) public static void setViewMinimumHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(24) public static void setViewMinimumHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
method @RequiresApi(31) public static void setViewMinimumHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setViewMinimumHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setViewMinimumWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
@@ -255,8 +255,8 @@
method @RequiresApi(31) public static void setViewScaleX(android.widget.RemoteViews, @IdRes int viewId, float scaleX);
method @RequiresApi(31) public static void setViewScaleY(android.widget.RemoteViews, @IdRes int viewId, float scaleY);
method @RequiresApi(31) public static void setViewScrollIndicators(android.widget.RemoteViews, @IdRes int viewId, int scrollIndicators);
- method @RequiresApi(30) public static void setViewStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
method @RequiresApi(31) public static void setViewStateDescription(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(30) public static void setViewStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
method @RequiresApi(31) public static void setViewStateDescriptionAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(16) public static void setViewStubInflatedId(android.widget.RemoteViews, @IdRes int viewId, int inflatedId);
method @RequiresApi(16) public static void setViewStubLayoutResource(android.widget.RemoteViews, @IdRes int viewId, @LayoutRes int layoutResource);
diff --git a/core/core-remoteviews/api/public_plus_experimental_1.0.0-beta04.txt b/core/core-remoteviews/api/public_plus_experimental_1.0.0-beta04.txt
index 58dee29..f760371 100644
--- a/core/core-remoteviews/api/public_plus_experimental_1.0.0-beta04.txt
+++ b/core/core-remoteviews/api/public_plus_experimental_1.0.0-beta04.txt
@@ -4,8 +4,8 @@
public final class AppWidgetManagerCompat {
method public static android.widget.RemoteViews createExactSizeAppWidget(android.appwidget.AppWidgetManager appWidgetManager, int appWidgetId, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
method public static android.widget.RemoteViews createResponsiveSizeAppWidget(android.appwidget.AppWidgetManager appWidgetManager, int appWidgetId, java.util.Collection<androidx.core.util.SizeFCompat> dpSizes, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
- method public static void updateAppWidget(android.appwidget.AppWidgetManager, int appWidgetId, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
method public static void updateAppWidget(android.appwidget.AppWidgetManager, int appWidgetId, java.util.Collection<androidx.core.util.SizeFCompat> dpSizes, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
+ method public static void updateAppWidget(android.appwidget.AppWidgetManager, int appWidgetId, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
}
public final class RemoteViewsCompat {
@@ -47,12 +47,12 @@
method @RequiresApi(31) public static void setImageViewImageTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
method @RequiresApi(31) public static void setImageViewImageTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setImageViewImageTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method public static void setImageViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
method @RequiresApi(31) public static void setImageViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setImageViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
method @RequiresApi(31) public static void setImageViewMaxHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setImageViewMaxHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method public static void setImageViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
method @RequiresApi(31) public static void setImageViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setImageViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
method @RequiresApi(31) public static void setImageViewMaxWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setImageViewMaxWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setLinearLayoutBaselineAligned(android.widget.RemoteViews, @IdRes int viewId, boolean baselineAligned);
@@ -87,8 +87,8 @@
method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method @RequiresApi(31) public static void setProgressBarStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
method @RequiresApi(31) public static void setProgressBarStateDescription(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setProgressBarStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
method @RequiresApi(31) public static void setProgressBarStateDescriptionAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setRelativeLayoutGravity(android.widget.RemoteViews, @IdRes int viewId, int gravity);
method public static void setRelativeLayoutHorizontalGravity(android.widget.RemoteViews, @IdRes int viewId, int horizontalGravity);
@@ -103,11 +103,11 @@
method @RequiresApi(31) public static void setSwitchPaddingDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setSwitchShowText(android.widget.RemoteViews, @IdRes int viewId, boolean showText);
method @RequiresApi(31) public static void setSwitchSplitTrack(android.widget.RemoteViews, @IdRes int viewId, boolean splitTrack);
- method @RequiresApi(31) public static void setSwitchTextOff(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOff);
method @RequiresApi(31) public static void setSwitchTextOff(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setSwitchTextOff(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOff);
method @RequiresApi(31) public static void setSwitchTextOffAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method @RequiresApi(31) public static void setSwitchTextOn(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOn);
method @RequiresApi(31) public static void setSwitchTextOn(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setSwitchTextOn(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOn);
method @RequiresApi(31) public static void setSwitchTextOnAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setSwitchThumbIcon(android.widget.RemoteViews, @IdRes int viewId, android.graphics.drawable.Icon? icon);
method @RequiresApi(31) public static void setSwitchThumbIcon(android.widget.RemoteViews, @IdRes int viewId, android.graphics.drawable.Icon? notNight, android.graphics.drawable.Icon? night);
@@ -128,35 +128,35 @@
method @RequiresApi(31) public static void setSwitchTrackTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNight, android.content.res.ColorStateList? night);
method @RequiresApi(31) public static void setSwitchTrackTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setSwitchTrackTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method @RequiresApi(17) public static void setTextClockFormat12Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
method @RequiresApi(31) public static void setTextClockFormat12Hour(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(17) public static void setTextClockFormat12Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
method @RequiresApi(31) public static void setTextClockFormat12HourAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method @RequiresApi(17) public static void setTextClockFormat24Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
method @RequiresApi(31) public static void setTextClockFormat24Hour(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(17) public static void setTextClockFormat24Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
method @RequiresApi(31) public static void setTextClockFormat24HourAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(17) public static void setTextClockTimeZone(android.widget.RemoteViews, @IdRes int viewId, String? timeZone);
method @RequiresApi(31) public static void setTextViewAllCaps(android.widget.RemoteViews, @IdRes int viewId, boolean allCaps);
method public static void setTextViewAutoLinkMask(android.widget.RemoteViews, @IdRes int viewId, int mask);
- method @RequiresApi(16) public static void setTextViewCompoundDrawablePadding(android.widget.RemoteViews, @IdRes int viewId, @Px int pad);
method @RequiresApi(31) public static void setTextViewCompoundDrawablePadding(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(16) public static void setTextViewCompoundDrawablePadding(android.widget.RemoteViews, @IdRes int viewId, @Px int pad);
method @RequiresApi(31) public static void setTextViewCompoundDrawablePaddingDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewCompoundDrawablePaddingDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewEms(android.widget.RemoteViews, @IdRes int viewId, int ems);
- method public static void setTextViewError(android.widget.RemoteViews, @IdRes int viewId, CharSequence? error);
method @RequiresApi(31) public static void setTextViewError(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method public static void setTextViewError(android.widget.RemoteViews, @IdRes int viewId, CharSequence? error);
method @RequiresApi(31) public static void setTextViewErrorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(21) public static void setTextViewFontFeatureSettings(android.widget.RemoteViews, @IdRes int viewId, String fontFeatureSettings);
method @RequiresApi(31) public static void setTextViewGravity(android.widget.RemoteViews, @IdRes int viewId, int gravity);
- method public static void setTextViewHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
method @RequiresApi(31) public static void setTextViewHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
method @RequiresApi(31) public static void setTextViewHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewHighlightColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
method @RequiresApi(31) public static void setTextViewHighlightColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
method @RequiresApi(31) public static void setTextViewHighlightColorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setTextViewHighlightColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
- method public static void setTextViewHint(android.widget.RemoteViews, @IdRes int viewId, CharSequence? hint);
method public static void setTextViewHint(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method public static void setTextViewHint(android.widget.RemoteViews, @IdRes int viewId, CharSequence? hint);
method @RequiresApi(31) public static void setTextViewHintAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewHintTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
method @RequiresApi(31) public static void setTextViewHintTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
@@ -174,23 +174,23 @@
method @RequiresApi(31) public static void setTextViewLinkTextColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method public static void setTextViewLinksClickable(android.widget.RemoteViews, @IdRes int viewId, boolean whether);
method public static void setTextViewMaxEms(android.widget.RemoteViews, @IdRes int viewId, int maxems);
- method public static void setTextViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
method @RequiresApi(31) public static void setTextViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
method @RequiresApi(31) public static void setTextViewMaxHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewMaxHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewMaxLines(android.widget.RemoteViews, @IdRes int viewId, int maxLines);
- method public static void setTextViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
method @RequiresApi(31) public static void setTextViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
method @RequiresApi(31) public static void setTextViewMaxWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewMaxWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewMinEms(android.widget.RemoteViews, @IdRes int viewId, int minems);
- method public static void setTextViewMinHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
method @RequiresApi(31) public static void setTextViewMinHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewMinHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
method @RequiresApi(31) public static void setTextViewMinHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewMinHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewMinLines(android.widget.RemoteViews, @IdRes int viewId, int minLines);
- method public static void setTextViewMinWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int minWidth);
method @RequiresApi(31) public static void setTextViewMinWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewMinWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int minWidth);
method @RequiresApi(31) public static void setTextViewMinWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewMinWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewPaintFlags(android.widget.RemoteViews, @IdRes int viewId, int flags);
@@ -198,17 +198,17 @@
method public static void setTextViewSingleLine(android.widget.RemoteViews, @IdRes int viewId, boolean singleLine);
method public static void setTextViewText(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
method @RequiresApi(31) public static void setTextViewTextAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
method @RequiresApi(31) public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList colors);
method @RequiresApi(31) public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList notNight, android.content.res.ColorStateList night);
+ method public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
method @RequiresApi(31) public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
method @RequiresApi(31) public static void setTextViewTextColorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setTextViewTextColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method public static void setTextViewTextScaleX(android.widget.RemoteViews, @IdRes int viewId, float size);
method @RequiresApi(31) public static void setTextViewTextSizeDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewTextSizeDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method public static void setTextViewWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
method @RequiresApi(31) public static void setTextViewWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
method @RequiresApi(31) public static void setTextViewWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setViewAlpha(android.widget.RemoteViews, @IdRes int viewId, float alpha);
@@ -223,8 +223,8 @@
method @RequiresApi(31) public static void setViewBackgroundTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setViewBackgroundTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setViewClipToOutline(android.widget.RemoteViews, @IdRes int viewId, boolean clipToOutline);
- method public static void setViewContentDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? contentDescription);
method @RequiresApi(31) public static void setViewContentDescription(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method public static void setViewContentDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? contentDescription);
method @RequiresApi(31) public static void setViewContentDescriptionAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setViewElevationDimen(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
method @RequiresApi(31) public static void setViewElevationDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
@@ -240,8 +240,8 @@
method @RequiresApi(31) public static void setViewForegroundTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setViewForegroundTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(17) public static void setViewLayoutDirection(android.widget.RemoteViews, @IdRes int viewId, int layoutDirection);
- method @RequiresApi(24) public static void setViewMinimumHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
method @RequiresApi(31) public static void setViewMinimumHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(24) public static void setViewMinimumHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
method @RequiresApi(31) public static void setViewMinimumHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setViewMinimumHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setViewMinimumWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
@@ -255,8 +255,8 @@
method @RequiresApi(31) public static void setViewScaleX(android.widget.RemoteViews, @IdRes int viewId, float scaleX);
method @RequiresApi(31) public static void setViewScaleY(android.widget.RemoteViews, @IdRes int viewId, float scaleY);
method @RequiresApi(31) public static void setViewScrollIndicators(android.widget.RemoteViews, @IdRes int viewId, int scrollIndicators);
- method @RequiresApi(30) public static void setViewStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
method @RequiresApi(31) public static void setViewStateDescription(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(30) public static void setViewStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
method @RequiresApi(31) public static void setViewStateDescriptionAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(16) public static void setViewStubInflatedId(android.widget.RemoteViews, @IdRes int viewId, int inflatedId);
method @RequiresApi(16) public static void setViewStubLayoutResource(android.widget.RemoteViews, @IdRes int viewId, @LayoutRes int layoutResource);
diff --git a/core/core-remoteviews/api/res-1.0.0-beta05.txt b/core/core-remoteviews/api/res-1.0.0-beta05.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/core/core-remoteviews/api/res-1.0.0-beta05.txt
diff --git a/core/core-remoteviews/api/restricted_1.0.0-beta04.txt b/core/core-remoteviews/api/restricted_1.0.0-beta04.txt
index 41be713..236d4b6 100644
--- a/core/core-remoteviews/api/restricted_1.0.0-beta04.txt
+++ b/core/core-remoteviews/api/restricted_1.0.0-beta04.txt
@@ -4,8 +4,8 @@
public final class AppWidgetManagerCompat {
method public static android.widget.RemoteViews createExactSizeAppWidget(android.appwidget.AppWidgetManager appWidgetManager, int appWidgetId, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
method public static android.widget.RemoteViews createResponsiveSizeAppWidget(android.appwidget.AppWidgetManager appWidgetManager, int appWidgetId, java.util.Collection<androidx.core.util.SizeFCompat> dpSizes, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
- method public static void updateAppWidget(android.appwidget.AppWidgetManager, int appWidgetId, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
method public static void updateAppWidget(android.appwidget.AppWidgetManager, int appWidgetId, java.util.Collection<androidx.core.util.SizeFCompat> dpSizes, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
+ method public static void updateAppWidget(android.appwidget.AppWidgetManager, int appWidgetId, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
}
public final class RemoteViewsCompat {
@@ -47,12 +47,12 @@
method @RequiresApi(31) public static void setImageViewImageTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
method @RequiresApi(31) public static void setImageViewImageTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setImageViewImageTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method public static void setImageViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
method @RequiresApi(31) public static void setImageViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setImageViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
method @RequiresApi(31) public static void setImageViewMaxHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setImageViewMaxHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method public static void setImageViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
method @RequiresApi(31) public static void setImageViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setImageViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
method @RequiresApi(31) public static void setImageViewMaxWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setImageViewMaxWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setLinearLayoutBaselineAligned(android.widget.RemoteViews, @IdRes int viewId, boolean baselineAligned);
@@ -87,8 +87,8 @@
method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method @RequiresApi(31) public static void setProgressBarStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
method @RequiresApi(31) public static void setProgressBarStateDescription(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setProgressBarStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
method @RequiresApi(31) public static void setProgressBarStateDescriptionAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setRelativeLayoutGravity(android.widget.RemoteViews, @IdRes int viewId, int gravity);
method public static void setRelativeLayoutHorizontalGravity(android.widget.RemoteViews, @IdRes int viewId, int horizontalGravity);
@@ -103,11 +103,11 @@
method @RequiresApi(31) public static void setSwitchPaddingDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setSwitchShowText(android.widget.RemoteViews, @IdRes int viewId, boolean showText);
method @RequiresApi(31) public static void setSwitchSplitTrack(android.widget.RemoteViews, @IdRes int viewId, boolean splitTrack);
- method @RequiresApi(31) public static void setSwitchTextOff(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOff);
method @RequiresApi(31) public static void setSwitchTextOff(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setSwitchTextOff(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOff);
method @RequiresApi(31) public static void setSwitchTextOffAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method @RequiresApi(31) public static void setSwitchTextOn(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOn);
method @RequiresApi(31) public static void setSwitchTextOn(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setSwitchTextOn(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOn);
method @RequiresApi(31) public static void setSwitchTextOnAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setSwitchThumbIcon(android.widget.RemoteViews, @IdRes int viewId, android.graphics.drawable.Icon? icon);
method @RequiresApi(31) public static void setSwitchThumbIcon(android.widget.RemoteViews, @IdRes int viewId, android.graphics.drawable.Icon? notNight, android.graphics.drawable.Icon? night);
@@ -128,35 +128,35 @@
method @RequiresApi(31) public static void setSwitchTrackTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNight, android.content.res.ColorStateList? night);
method @RequiresApi(31) public static void setSwitchTrackTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setSwitchTrackTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method @RequiresApi(17) public static void setTextClockFormat12Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
method @RequiresApi(31) public static void setTextClockFormat12Hour(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(17) public static void setTextClockFormat12Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
method @RequiresApi(31) public static void setTextClockFormat12HourAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method @RequiresApi(17) public static void setTextClockFormat24Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
method @RequiresApi(31) public static void setTextClockFormat24Hour(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(17) public static void setTextClockFormat24Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
method @RequiresApi(31) public static void setTextClockFormat24HourAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(17) public static void setTextClockTimeZone(android.widget.RemoteViews, @IdRes int viewId, String? timeZone);
method @RequiresApi(31) public static void setTextViewAllCaps(android.widget.RemoteViews, @IdRes int viewId, boolean allCaps);
method public static void setTextViewAutoLinkMask(android.widget.RemoteViews, @IdRes int viewId, int mask);
- method @RequiresApi(16) public static void setTextViewCompoundDrawablePadding(android.widget.RemoteViews, @IdRes int viewId, @Px int pad);
method @RequiresApi(31) public static void setTextViewCompoundDrawablePadding(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(16) public static void setTextViewCompoundDrawablePadding(android.widget.RemoteViews, @IdRes int viewId, @Px int pad);
method @RequiresApi(31) public static void setTextViewCompoundDrawablePaddingDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewCompoundDrawablePaddingDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewEms(android.widget.RemoteViews, @IdRes int viewId, int ems);
- method public static void setTextViewError(android.widget.RemoteViews, @IdRes int viewId, CharSequence? error);
method @RequiresApi(31) public static void setTextViewError(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method public static void setTextViewError(android.widget.RemoteViews, @IdRes int viewId, CharSequence? error);
method @RequiresApi(31) public static void setTextViewErrorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(21) public static void setTextViewFontFeatureSettings(android.widget.RemoteViews, @IdRes int viewId, String fontFeatureSettings);
method @RequiresApi(31) public static void setTextViewGravity(android.widget.RemoteViews, @IdRes int viewId, int gravity);
- method public static void setTextViewHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
method @RequiresApi(31) public static void setTextViewHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
method @RequiresApi(31) public static void setTextViewHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewHighlightColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
method @RequiresApi(31) public static void setTextViewHighlightColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
method @RequiresApi(31) public static void setTextViewHighlightColorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setTextViewHighlightColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
- method public static void setTextViewHint(android.widget.RemoteViews, @IdRes int viewId, CharSequence? hint);
method public static void setTextViewHint(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method public static void setTextViewHint(android.widget.RemoteViews, @IdRes int viewId, CharSequence? hint);
method @RequiresApi(31) public static void setTextViewHintAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewHintTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
method @RequiresApi(31) public static void setTextViewHintTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
@@ -174,23 +174,23 @@
method @RequiresApi(31) public static void setTextViewLinkTextColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method public static void setTextViewLinksClickable(android.widget.RemoteViews, @IdRes int viewId, boolean whether);
method public static void setTextViewMaxEms(android.widget.RemoteViews, @IdRes int viewId, int maxems);
- method public static void setTextViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
method @RequiresApi(31) public static void setTextViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
method @RequiresApi(31) public static void setTextViewMaxHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewMaxHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewMaxLines(android.widget.RemoteViews, @IdRes int viewId, int maxLines);
- method public static void setTextViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
method @RequiresApi(31) public static void setTextViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
method @RequiresApi(31) public static void setTextViewMaxWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewMaxWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewMinEms(android.widget.RemoteViews, @IdRes int viewId, int minems);
- method public static void setTextViewMinHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
method @RequiresApi(31) public static void setTextViewMinHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewMinHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
method @RequiresApi(31) public static void setTextViewMinHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewMinHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewMinLines(android.widget.RemoteViews, @IdRes int viewId, int minLines);
- method public static void setTextViewMinWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int minWidth);
method @RequiresApi(31) public static void setTextViewMinWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewMinWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int minWidth);
method @RequiresApi(31) public static void setTextViewMinWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewMinWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewPaintFlags(android.widget.RemoteViews, @IdRes int viewId, int flags);
@@ -198,17 +198,17 @@
method public static void setTextViewSingleLine(android.widget.RemoteViews, @IdRes int viewId, boolean singleLine);
method public static void setTextViewText(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
method @RequiresApi(31) public static void setTextViewTextAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
method @RequiresApi(31) public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList colors);
method @RequiresApi(31) public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList notNight, android.content.res.ColorStateList night);
+ method public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
method @RequiresApi(31) public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
method @RequiresApi(31) public static void setTextViewTextColorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setTextViewTextColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method public static void setTextViewTextScaleX(android.widget.RemoteViews, @IdRes int viewId, float size);
method @RequiresApi(31) public static void setTextViewTextSizeDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewTextSizeDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method public static void setTextViewWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
method @RequiresApi(31) public static void setTextViewWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
method @RequiresApi(31) public static void setTextViewWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setViewAlpha(android.widget.RemoteViews, @IdRes int viewId, float alpha);
@@ -223,8 +223,8 @@
method @RequiresApi(31) public static void setViewBackgroundTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setViewBackgroundTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setViewClipToOutline(android.widget.RemoteViews, @IdRes int viewId, boolean clipToOutline);
- method public static void setViewContentDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? contentDescription);
method @RequiresApi(31) public static void setViewContentDescription(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method public static void setViewContentDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? contentDescription);
method @RequiresApi(31) public static void setViewContentDescriptionAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setViewElevationDimen(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
method @RequiresApi(31) public static void setViewElevationDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
@@ -240,8 +240,8 @@
method @RequiresApi(31) public static void setViewForegroundTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setViewForegroundTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(17) public static void setViewLayoutDirection(android.widget.RemoteViews, @IdRes int viewId, int layoutDirection);
- method @RequiresApi(24) public static void setViewMinimumHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
method @RequiresApi(31) public static void setViewMinimumHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(24) public static void setViewMinimumHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
method @RequiresApi(31) public static void setViewMinimumHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setViewMinimumHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setViewMinimumWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
@@ -255,8 +255,8 @@
method @RequiresApi(31) public static void setViewScaleX(android.widget.RemoteViews, @IdRes int viewId, float scaleX);
method @RequiresApi(31) public static void setViewScaleY(android.widget.RemoteViews, @IdRes int viewId, float scaleY);
method @RequiresApi(31) public static void setViewScrollIndicators(android.widget.RemoteViews, @IdRes int viewId, int scrollIndicators);
- method @RequiresApi(30) public static void setViewStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
method @RequiresApi(31) public static void setViewStateDescription(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(30) public static void setViewStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
method @RequiresApi(31) public static void setViewStateDescriptionAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(16) public static void setViewStubInflatedId(android.widget.RemoteViews, @IdRes int viewId, int inflatedId);
method @RequiresApi(16) public static void setViewStubLayoutResource(android.widget.RemoteViews, @IdRes int viewId, @LayoutRes int layoutResource);
diff --git a/core/core-remoteviews/api/public_plus_experimental_current.txt b/core/core-remoteviews/api/restricted_1.0.0-beta05.txt
similarity index 98%
copy from core/core-remoteviews/api/public_plus_experimental_current.txt
copy to core/core-remoteviews/api/restricted_1.0.0-beta05.txt
index 58dee29..236d4b6 100644
--- a/core/core-remoteviews/api/public_plus_experimental_current.txt
+++ b/core/core-remoteviews/api/restricted_1.0.0-beta05.txt
@@ -4,8 +4,8 @@
public final class AppWidgetManagerCompat {
method public static android.widget.RemoteViews createExactSizeAppWidget(android.appwidget.AppWidgetManager appWidgetManager, int appWidgetId, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
method public static android.widget.RemoteViews createResponsiveSizeAppWidget(android.appwidget.AppWidgetManager appWidgetManager, int appWidgetId, java.util.Collection<androidx.core.util.SizeFCompat> dpSizes, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
- method public static void updateAppWidget(android.appwidget.AppWidgetManager, int appWidgetId, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
method public static void updateAppWidget(android.appwidget.AppWidgetManager, int appWidgetId, java.util.Collection<androidx.core.util.SizeFCompat> dpSizes, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
+ method public static void updateAppWidget(android.appwidget.AppWidgetManager, int appWidgetId, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
}
public final class RemoteViewsCompat {
@@ -47,12 +47,12 @@
method @RequiresApi(31) public static void setImageViewImageTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
method @RequiresApi(31) public static void setImageViewImageTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setImageViewImageTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method public static void setImageViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
method @RequiresApi(31) public static void setImageViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setImageViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
method @RequiresApi(31) public static void setImageViewMaxHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setImageViewMaxHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method public static void setImageViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
method @RequiresApi(31) public static void setImageViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setImageViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
method @RequiresApi(31) public static void setImageViewMaxWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setImageViewMaxWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setLinearLayoutBaselineAligned(android.widget.RemoteViews, @IdRes int viewId, boolean baselineAligned);
@@ -87,8 +87,8 @@
method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method @RequiresApi(31) public static void setProgressBarStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
method @RequiresApi(31) public static void setProgressBarStateDescription(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setProgressBarStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
method @RequiresApi(31) public static void setProgressBarStateDescriptionAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setRelativeLayoutGravity(android.widget.RemoteViews, @IdRes int viewId, int gravity);
method public static void setRelativeLayoutHorizontalGravity(android.widget.RemoteViews, @IdRes int viewId, int horizontalGravity);
@@ -103,11 +103,11 @@
method @RequiresApi(31) public static void setSwitchPaddingDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setSwitchShowText(android.widget.RemoteViews, @IdRes int viewId, boolean showText);
method @RequiresApi(31) public static void setSwitchSplitTrack(android.widget.RemoteViews, @IdRes int viewId, boolean splitTrack);
- method @RequiresApi(31) public static void setSwitchTextOff(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOff);
method @RequiresApi(31) public static void setSwitchTextOff(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setSwitchTextOff(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOff);
method @RequiresApi(31) public static void setSwitchTextOffAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method @RequiresApi(31) public static void setSwitchTextOn(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOn);
method @RequiresApi(31) public static void setSwitchTextOn(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setSwitchTextOn(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOn);
method @RequiresApi(31) public static void setSwitchTextOnAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setSwitchThumbIcon(android.widget.RemoteViews, @IdRes int viewId, android.graphics.drawable.Icon? icon);
method @RequiresApi(31) public static void setSwitchThumbIcon(android.widget.RemoteViews, @IdRes int viewId, android.graphics.drawable.Icon? notNight, android.graphics.drawable.Icon? night);
@@ -128,35 +128,35 @@
method @RequiresApi(31) public static void setSwitchTrackTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNight, android.content.res.ColorStateList? night);
method @RequiresApi(31) public static void setSwitchTrackTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setSwitchTrackTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method @RequiresApi(17) public static void setTextClockFormat12Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
method @RequiresApi(31) public static void setTextClockFormat12Hour(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(17) public static void setTextClockFormat12Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
method @RequiresApi(31) public static void setTextClockFormat12HourAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method @RequiresApi(17) public static void setTextClockFormat24Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
method @RequiresApi(31) public static void setTextClockFormat24Hour(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(17) public static void setTextClockFormat24Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
method @RequiresApi(31) public static void setTextClockFormat24HourAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(17) public static void setTextClockTimeZone(android.widget.RemoteViews, @IdRes int viewId, String? timeZone);
method @RequiresApi(31) public static void setTextViewAllCaps(android.widget.RemoteViews, @IdRes int viewId, boolean allCaps);
method public static void setTextViewAutoLinkMask(android.widget.RemoteViews, @IdRes int viewId, int mask);
- method @RequiresApi(16) public static void setTextViewCompoundDrawablePadding(android.widget.RemoteViews, @IdRes int viewId, @Px int pad);
method @RequiresApi(31) public static void setTextViewCompoundDrawablePadding(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(16) public static void setTextViewCompoundDrawablePadding(android.widget.RemoteViews, @IdRes int viewId, @Px int pad);
method @RequiresApi(31) public static void setTextViewCompoundDrawablePaddingDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewCompoundDrawablePaddingDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewEms(android.widget.RemoteViews, @IdRes int viewId, int ems);
- method public static void setTextViewError(android.widget.RemoteViews, @IdRes int viewId, CharSequence? error);
method @RequiresApi(31) public static void setTextViewError(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method public static void setTextViewError(android.widget.RemoteViews, @IdRes int viewId, CharSequence? error);
method @RequiresApi(31) public static void setTextViewErrorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(21) public static void setTextViewFontFeatureSettings(android.widget.RemoteViews, @IdRes int viewId, String fontFeatureSettings);
method @RequiresApi(31) public static void setTextViewGravity(android.widget.RemoteViews, @IdRes int viewId, int gravity);
- method public static void setTextViewHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
method @RequiresApi(31) public static void setTextViewHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
method @RequiresApi(31) public static void setTextViewHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewHighlightColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
method @RequiresApi(31) public static void setTextViewHighlightColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
method @RequiresApi(31) public static void setTextViewHighlightColorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setTextViewHighlightColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
- method public static void setTextViewHint(android.widget.RemoteViews, @IdRes int viewId, CharSequence? hint);
method public static void setTextViewHint(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method public static void setTextViewHint(android.widget.RemoteViews, @IdRes int viewId, CharSequence? hint);
method @RequiresApi(31) public static void setTextViewHintAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewHintTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
method @RequiresApi(31) public static void setTextViewHintTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
@@ -174,23 +174,23 @@
method @RequiresApi(31) public static void setTextViewLinkTextColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method public static void setTextViewLinksClickable(android.widget.RemoteViews, @IdRes int viewId, boolean whether);
method public static void setTextViewMaxEms(android.widget.RemoteViews, @IdRes int viewId, int maxems);
- method public static void setTextViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
method @RequiresApi(31) public static void setTextViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
method @RequiresApi(31) public static void setTextViewMaxHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewMaxHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewMaxLines(android.widget.RemoteViews, @IdRes int viewId, int maxLines);
- method public static void setTextViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
method @RequiresApi(31) public static void setTextViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
method @RequiresApi(31) public static void setTextViewMaxWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewMaxWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewMinEms(android.widget.RemoteViews, @IdRes int viewId, int minems);
- method public static void setTextViewMinHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
method @RequiresApi(31) public static void setTextViewMinHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewMinHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
method @RequiresApi(31) public static void setTextViewMinHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewMinHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewMinLines(android.widget.RemoteViews, @IdRes int viewId, int minLines);
- method public static void setTextViewMinWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int minWidth);
method @RequiresApi(31) public static void setTextViewMinWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewMinWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int minWidth);
method @RequiresApi(31) public static void setTextViewMinWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewMinWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewPaintFlags(android.widget.RemoteViews, @IdRes int viewId, int flags);
@@ -198,17 +198,17 @@
method public static void setTextViewSingleLine(android.widget.RemoteViews, @IdRes int viewId, boolean singleLine);
method public static void setTextViewText(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
method @RequiresApi(31) public static void setTextViewTextAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
method @RequiresApi(31) public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList colors);
method @RequiresApi(31) public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList notNight, android.content.res.ColorStateList night);
+ method public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
method @RequiresApi(31) public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
method @RequiresApi(31) public static void setTextViewTextColorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setTextViewTextColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method public static void setTextViewTextScaleX(android.widget.RemoteViews, @IdRes int viewId, float size);
method @RequiresApi(31) public static void setTextViewTextSizeDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewTextSizeDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method public static void setTextViewWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
method @RequiresApi(31) public static void setTextViewWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
method @RequiresApi(31) public static void setTextViewWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setViewAlpha(android.widget.RemoteViews, @IdRes int viewId, float alpha);
@@ -223,8 +223,8 @@
method @RequiresApi(31) public static void setViewBackgroundTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setViewBackgroundTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setViewClipToOutline(android.widget.RemoteViews, @IdRes int viewId, boolean clipToOutline);
- method public static void setViewContentDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? contentDescription);
method @RequiresApi(31) public static void setViewContentDescription(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method public static void setViewContentDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? contentDescription);
method @RequiresApi(31) public static void setViewContentDescriptionAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setViewElevationDimen(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
method @RequiresApi(31) public static void setViewElevationDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
@@ -240,8 +240,8 @@
method @RequiresApi(31) public static void setViewForegroundTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setViewForegroundTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(17) public static void setViewLayoutDirection(android.widget.RemoteViews, @IdRes int viewId, int layoutDirection);
- method @RequiresApi(24) public static void setViewMinimumHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
method @RequiresApi(31) public static void setViewMinimumHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(24) public static void setViewMinimumHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
method @RequiresApi(31) public static void setViewMinimumHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setViewMinimumHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setViewMinimumWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
@@ -255,8 +255,8 @@
method @RequiresApi(31) public static void setViewScaleX(android.widget.RemoteViews, @IdRes int viewId, float scaleX);
method @RequiresApi(31) public static void setViewScaleY(android.widget.RemoteViews, @IdRes int viewId, float scaleY);
method @RequiresApi(31) public static void setViewScrollIndicators(android.widget.RemoteViews, @IdRes int viewId, int scrollIndicators);
- method @RequiresApi(30) public static void setViewStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
method @RequiresApi(31) public static void setViewStateDescription(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(30) public static void setViewStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
method @RequiresApi(31) public static void setViewStateDescriptionAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(16) public static void setViewStubInflatedId(android.widget.RemoteViews, @IdRes int viewId, int inflatedId);
method @RequiresApi(16) public static void setViewStubLayoutResource(android.widget.RemoteViews, @IdRes int viewId, @LayoutRes int layoutResource);
@@ -290,5 +290,10 @@
method public androidx.core.widget.RemoteViewsCompat.RemoteCollectionItems.Builder setViewTypeCount(int viewTypeCount);
}
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class RemoteViewsCompatService extends android.widget.RemoteViewsService {
+ ctor public RemoteViewsCompatService();
+ method public android.widget.RemoteViewsService.RemoteViewsFactory onGetViewFactory(android.content.Intent intent);
+ }
+
}
diff --git a/core/core-remoteviews/api/restricted_current.txt b/core/core-remoteviews/api/restricted_current.txt
index 41be713..236d4b6 100644
--- a/core/core-remoteviews/api/restricted_current.txt
+++ b/core/core-remoteviews/api/restricted_current.txt
@@ -4,8 +4,8 @@
public final class AppWidgetManagerCompat {
method public static android.widget.RemoteViews createExactSizeAppWidget(android.appwidget.AppWidgetManager appWidgetManager, int appWidgetId, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
method public static android.widget.RemoteViews createResponsiveSizeAppWidget(android.appwidget.AppWidgetManager appWidgetManager, int appWidgetId, java.util.Collection<androidx.core.util.SizeFCompat> dpSizes, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
- method public static void updateAppWidget(android.appwidget.AppWidgetManager, int appWidgetId, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
method public static void updateAppWidget(android.appwidget.AppWidgetManager, int appWidgetId, java.util.Collection<androidx.core.util.SizeFCompat> dpSizes, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
+ method public static void updateAppWidget(android.appwidget.AppWidgetManager, int appWidgetId, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
}
public final class RemoteViewsCompat {
@@ -47,12 +47,12 @@
method @RequiresApi(31) public static void setImageViewImageTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
method @RequiresApi(31) public static void setImageViewImageTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setImageViewImageTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method public static void setImageViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
method @RequiresApi(31) public static void setImageViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setImageViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
method @RequiresApi(31) public static void setImageViewMaxHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setImageViewMaxHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method public static void setImageViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
method @RequiresApi(31) public static void setImageViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setImageViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
method @RequiresApi(31) public static void setImageViewMaxWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setImageViewMaxWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setLinearLayoutBaselineAligned(android.widget.RemoteViews, @IdRes int viewId, boolean baselineAligned);
@@ -87,8 +87,8 @@
method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method @RequiresApi(31) public static void setProgressBarStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
method @RequiresApi(31) public static void setProgressBarStateDescription(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setProgressBarStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
method @RequiresApi(31) public static void setProgressBarStateDescriptionAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setRelativeLayoutGravity(android.widget.RemoteViews, @IdRes int viewId, int gravity);
method public static void setRelativeLayoutHorizontalGravity(android.widget.RemoteViews, @IdRes int viewId, int horizontalGravity);
@@ -103,11 +103,11 @@
method @RequiresApi(31) public static void setSwitchPaddingDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setSwitchShowText(android.widget.RemoteViews, @IdRes int viewId, boolean showText);
method @RequiresApi(31) public static void setSwitchSplitTrack(android.widget.RemoteViews, @IdRes int viewId, boolean splitTrack);
- method @RequiresApi(31) public static void setSwitchTextOff(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOff);
method @RequiresApi(31) public static void setSwitchTextOff(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setSwitchTextOff(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOff);
method @RequiresApi(31) public static void setSwitchTextOffAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method @RequiresApi(31) public static void setSwitchTextOn(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOn);
method @RequiresApi(31) public static void setSwitchTextOn(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setSwitchTextOn(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOn);
method @RequiresApi(31) public static void setSwitchTextOnAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setSwitchThumbIcon(android.widget.RemoteViews, @IdRes int viewId, android.graphics.drawable.Icon? icon);
method @RequiresApi(31) public static void setSwitchThumbIcon(android.widget.RemoteViews, @IdRes int viewId, android.graphics.drawable.Icon? notNight, android.graphics.drawable.Icon? night);
@@ -128,35 +128,35 @@
method @RequiresApi(31) public static void setSwitchTrackTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNight, android.content.res.ColorStateList? night);
method @RequiresApi(31) public static void setSwitchTrackTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setSwitchTrackTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method @RequiresApi(17) public static void setTextClockFormat12Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
method @RequiresApi(31) public static void setTextClockFormat12Hour(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(17) public static void setTextClockFormat12Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
method @RequiresApi(31) public static void setTextClockFormat12HourAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method @RequiresApi(17) public static void setTextClockFormat24Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
method @RequiresApi(31) public static void setTextClockFormat24Hour(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(17) public static void setTextClockFormat24Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
method @RequiresApi(31) public static void setTextClockFormat24HourAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(17) public static void setTextClockTimeZone(android.widget.RemoteViews, @IdRes int viewId, String? timeZone);
method @RequiresApi(31) public static void setTextViewAllCaps(android.widget.RemoteViews, @IdRes int viewId, boolean allCaps);
method public static void setTextViewAutoLinkMask(android.widget.RemoteViews, @IdRes int viewId, int mask);
- method @RequiresApi(16) public static void setTextViewCompoundDrawablePadding(android.widget.RemoteViews, @IdRes int viewId, @Px int pad);
method @RequiresApi(31) public static void setTextViewCompoundDrawablePadding(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(16) public static void setTextViewCompoundDrawablePadding(android.widget.RemoteViews, @IdRes int viewId, @Px int pad);
method @RequiresApi(31) public static void setTextViewCompoundDrawablePaddingDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewCompoundDrawablePaddingDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewEms(android.widget.RemoteViews, @IdRes int viewId, int ems);
- method public static void setTextViewError(android.widget.RemoteViews, @IdRes int viewId, CharSequence? error);
method @RequiresApi(31) public static void setTextViewError(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method public static void setTextViewError(android.widget.RemoteViews, @IdRes int viewId, CharSequence? error);
method @RequiresApi(31) public static void setTextViewErrorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(21) public static void setTextViewFontFeatureSettings(android.widget.RemoteViews, @IdRes int viewId, String fontFeatureSettings);
method @RequiresApi(31) public static void setTextViewGravity(android.widget.RemoteViews, @IdRes int viewId, int gravity);
- method public static void setTextViewHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
method @RequiresApi(31) public static void setTextViewHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
method @RequiresApi(31) public static void setTextViewHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewHighlightColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
method @RequiresApi(31) public static void setTextViewHighlightColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
method @RequiresApi(31) public static void setTextViewHighlightColorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setTextViewHighlightColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
- method public static void setTextViewHint(android.widget.RemoteViews, @IdRes int viewId, CharSequence? hint);
method public static void setTextViewHint(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method public static void setTextViewHint(android.widget.RemoteViews, @IdRes int viewId, CharSequence? hint);
method @RequiresApi(31) public static void setTextViewHintAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewHintTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
method @RequiresApi(31) public static void setTextViewHintTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
@@ -174,23 +174,23 @@
method @RequiresApi(31) public static void setTextViewLinkTextColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method public static void setTextViewLinksClickable(android.widget.RemoteViews, @IdRes int viewId, boolean whether);
method public static void setTextViewMaxEms(android.widget.RemoteViews, @IdRes int viewId, int maxems);
- method public static void setTextViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
method @RequiresApi(31) public static void setTextViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
method @RequiresApi(31) public static void setTextViewMaxHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewMaxHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewMaxLines(android.widget.RemoteViews, @IdRes int viewId, int maxLines);
- method public static void setTextViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
method @RequiresApi(31) public static void setTextViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
method @RequiresApi(31) public static void setTextViewMaxWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewMaxWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewMinEms(android.widget.RemoteViews, @IdRes int viewId, int minems);
- method public static void setTextViewMinHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
method @RequiresApi(31) public static void setTextViewMinHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewMinHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
method @RequiresApi(31) public static void setTextViewMinHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewMinHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewMinLines(android.widget.RemoteViews, @IdRes int viewId, int minLines);
- method public static void setTextViewMinWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int minWidth);
method @RequiresApi(31) public static void setTextViewMinWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewMinWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int minWidth);
method @RequiresApi(31) public static void setTextViewMinWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewMinWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method public static void setTextViewPaintFlags(android.widget.RemoteViews, @IdRes int viewId, int flags);
@@ -198,17 +198,17 @@
method public static void setTextViewSingleLine(android.widget.RemoteViews, @IdRes int viewId, boolean singleLine);
method public static void setTextViewText(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
method @RequiresApi(31) public static void setTextViewTextAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
method @RequiresApi(31) public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList colors);
method @RequiresApi(31) public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList notNight, android.content.res.ColorStateList night);
+ method public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
method @RequiresApi(31) public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
method @RequiresApi(31) public static void setTextViewTextColorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setTextViewTextColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method public static void setTextViewTextScaleX(android.widget.RemoteViews, @IdRes int viewId, float size);
method @RequiresApi(31) public static void setTextViewTextSizeDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewTextSizeDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
- method public static void setTextViewWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
method @RequiresApi(31) public static void setTextViewWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method public static void setTextViewWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
method @RequiresApi(31) public static void setTextViewWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setTextViewWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setViewAlpha(android.widget.RemoteViews, @IdRes int viewId, float alpha);
@@ -223,8 +223,8 @@
method @RequiresApi(31) public static void setViewBackgroundTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setViewBackgroundTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setViewClipToOutline(android.widget.RemoteViews, @IdRes int viewId, boolean clipToOutline);
- method public static void setViewContentDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? contentDescription);
method @RequiresApi(31) public static void setViewContentDescription(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method public static void setViewContentDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? contentDescription);
method @RequiresApi(31) public static void setViewContentDescriptionAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setViewElevationDimen(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
method @RequiresApi(31) public static void setViewElevationDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
@@ -240,8 +240,8 @@
method @RequiresApi(31) public static void setViewForegroundTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
method @RequiresApi(31) public static void setViewForegroundTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(17) public static void setViewLayoutDirection(android.widget.RemoteViews, @IdRes int viewId, int layoutDirection);
- method @RequiresApi(24) public static void setViewMinimumHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
method @RequiresApi(31) public static void setViewMinimumHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(24) public static void setViewMinimumHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
method @RequiresApi(31) public static void setViewMinimumHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
method @RequiresApi(31) public static void setViewMinimumHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(31) public static void setViewMinimumWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
@@ -255,8 +255,8 @@
method @RequiresApi(31) public static void setViewScaleX(android.widget.RemoteViews, @IdRes int viewId, float scaleX);
method @RequiresApi(31) public static void setViewScaleY(android.widget.RemoteViews, @IdRes int viewId, float scaleY);
method @RequiresApi(31) public static void setViewScrollIndicators(android.widget.RemoteViews, @IdRes int viewId, int scrollIndicators);
- method @RequiresApi(30) public static void setViewStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
method @RequiresApi(31) public static void setViewStateDescription(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(30) public static void setViewStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
method @RequiresApi(31) public static void setViewStateDescriptionAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
method @RequiresApi(16) public static void setViewStubInflatedId(android.widget.RemoteViews, @IdRes int viewId, int inflatedId);
method @RequiresApi(16) public static void setViewStubLayoutResource(android.widget.RemoteViews, @IdRes int viewId, @LayoutRes int layoutResource);
diff --git a/core/core-remoteviews/build.gradle b/core/core-remoteviews/build.gradle
index eb33cc1..78adb5b 100644
--- a/core/core-remoteviews/build.gradle
+++ b/core/core-remoteviews/build.gradle
@@ -58,7 +58,7 @@
}
androidx {
- name = "AndroidX RemoteViews Support"
+ name = "RemoteViews"
type = LibraryType.PUBLISHED_LIBRARY
mavenVersion = LibraryVersions.CORE_REMOTEVIEWS
inceptionYear = "2021"
diff --git a/core/core-remoteviews/src/androidTest/java/androidx/core/widget/AppWidgetManagerDeviceTest.kt b/core/core-remoteviews/src/androidTest/java/androidx/core/widget/AppWidgetManagerDeviceTest.kt
index eaba22c..053b013 100644
--- a/core/core-remoteviews/src/androidTest/java/androidx/core/widget/AppWidgetManagerDeviceTest.kt
+++ b/core/core-remoteviews/src/androidTest/java/androidx/core/widget/AppWidgetManagerDeviceTest.kt
@@ -43,13 +43,13 @@
import androidx.test.filters.SdkSuppress
import androidx.test.platform.app.InstrumentationRegistry
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import kotlin.test.fail
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
-import kotlin.test.fail
@SdkSuppress(minSdkVersion = 29)
@MediumTest
diff --git a/core/core-remoteviews/src/androidTest/java/androidx/core/widget/RemoteViewsCompatTest.kt b/core/core-remoteviews/src/androidTest/java/androidx/core/widget/RemoteViewsCompatTest.kt
index 9282469..c5f9f09 100644
--- a/core/core-remoteviews/src/androidTest/java/androidx/core/widget/RemoteViewsCompatTest.kt
+++ b/core/core-remoteviews/src/androidTest/java/androidx/core/widget/RemoteViewsCompatTest.kt
@@ -42,15 +42,15 @@
import androidx.test.filters.SdkSuppress
import androidx.test.platform.app.InstrumentationRegistry
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import kotlin.test.assertFailsWith
+import kotlin.test.fail
import org.junit.After
import org.junit.Before
import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
-import kotlin.test.assertFailsWith
-import kotlin.test.fail
@SdkSuppress(minSdkVersion = 29)
@MediumTest
diff --git a/core/core-remoteviews/src/test/java/androidx/core/widget/AppWidgetManagerCompatTest.kt b/core/core-remoteviews/src/test/java/androidx/core/widget/AppWidgetManagerCompatTest.kt
index 9b160b0..dd00746 100644
--- a/core/core-remoteviews/src/test/java/androidx/core/widget/AppWidgetManagerCompatTest.kt
+++ b/core/core-remoteviews/src/test/java/androidx/core/widget/AppWidgetManagerCompatTest.kt
@@ -37,6 +37,7 @@
import androidx.core.util.component2
import androidx.test.core.app.ApplicationProvider
import com.google.common.truth.Truth.assertThat
+import kotlin.test.assertFailsWith
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
@@ -44,7 +45,6 @@
import org.robolectric.annotation.Config
import org.robolectric.annotation.internal.DoNotInstrument
import org.robolectric.util.ReflectionHelpers
-import kotlin.test.assertFailsWith
@RunWith(RobolectricTestRunner::class)
@DoNotInstrument
diff --git a/core/core-remoteviews/src/test/java/androidx/core/widget/RemoteViewsTest.kt b/core/core-remoteviews/src/test/java/androidx/core/widget/RemoteViewsTest.kt
index 181b000..0a38a01 100644
--- a/core/core-remoteviews/src/test/java/androidx/core/widget/RemoteViewsTest.kt
+++ b/core/core-remoteviews/src/test/java/androidx/core/widget/RemoteViewsTest.kt
@@ -28,7 +28,6 @@
import android.widget.RemoteViews
import android.widget.TextView
import androidx.annotation.RequiresApi
-import androidx.test.core.app.ApplicationProvider
import androidx.core.remoteviews.test.R
import androidx.core.widget.RemoteViewsCompat.setLinearLayoutWeightSum
import androidx.core.widget.RemoteViewsCompat.setTextViewError
@@ -36,16 +35,17 @@
import androidx.core.widget.RemoteViewsCompat.setTextViewMaxLines
import androidx.core.widget.RemoteViewsCompat.setViewBackgroundColorResource
import androidx.core.widget.RemoteViewsCompat.setViewEnabled
+import androidx.test.core.app.ApplicationProvider
import androidx.test.filters.SdkSuppress
import com.google.common.truth.Truth.assertThat
+import java.util.Locale
+import kotlin.test.assertIs
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config
import org.robolectric.annotation.internal.DoNotInstrument
-import java.util.Locale
-import kotlin.test.assertIs
@RunWith(RobolectricTestRunner::class)
@DoNotInstrument
diff --git a/core/core-role/api/public_plus_experimental_current.txt b/core/core-role/api/public_plus_experimental_current.txt
deleted file mode 100644
index 18ffe6f..0000000
--- a/core/core-role/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-// Signature format: 4.0
-package androidx.core.role {
-
- public final class RoleManagerCompat {
- field public static final String ROLE_ASSISTANT = "android.app.role.ASSISTANT";
- field public static final String ROLE_BROWSER = "android.app.role.BROWSER";
- field public static final String ROLE_CALL_REDIRECTION = "android.app.role.CALL_REDIRECTION";
- field public static final String ROLE_CALL_SCREENING = "android.app.role.CALL_SCREENING";
- field public static final String ROLE_DIALER = "android.app.role.DIALER";
- field public static final String ROLE_EMERGENCY = "android.app.role.EMERGENCY";
- field public static final String ROLE_HOME = "android.app.role.HOME";
- field public static final String ROLE_SMS = "android.app.role.SMS";
- field public static final String ROLE_SYSTEM_GALLERY = "android.app.role.SYSTEM_GALLERY";
- }
-
-}
-
diff --git a/core/core-role/build.gradle b/core/core-role/build.gradle
index e2f2c0a..f820a13 100644
--- a/core/core-role/build.gradle
+++ b/core/core-role/build.gradle
@@ -14,7 +14,7 @@
}
androidx {
- name = "Android Support Library Role"
+ name = "Role"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.CORE_ROLE
inceptionYear = "2019"
diff --git a/core/core-splashscreen/api/public_plus_experimental_current.txt b/core/core-splashscreen/api/public_plus_experimental_current.txt
deleted file mode 100644
index 5208466..0000000
--- a/core/core-splashscreen/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-// Signature format: 4.0
-package androidx.core.splashscreen {
-
- public final class SplashScreen {
- method public static androidx.core.splashscreen.SplashScreen installSplashScreen(android.app.Activity);
- method public void setKeepOnScreenCondition(androidx.core.splashscreen.SplashScreen.KeepOnScreenCondition condition);
- method public void setOnExitAnimationListener(androidx.core.splashscreen.SplashScreen.OnExitAnimationListener listener);
- field public static final androidx.core.splashscreen.SplashScreen.Companion Companion;
- }
-
- public static final class SplashScreen.Companion {
- method public androidx.core.splashscreen.SplashScreen installSplashScreen(android.app.Activity);
- }
-
- public static fun interface SplashScreen.KeepOnScreenCondition {
- method @MainThread public boolean shouldKeepOnScreen();
- }
-
- public static fun interface SplashScreen.OnExitAnimationListener {
- method @MainThread public void onSplashScreenExit(androidx.core.splashscreen.SplashScreenViewProvider splashScreenViewProvider);
- }
-
- public final class SplashScreenViewProvider {
- method public long getIconAnimationDurationMillis();
- method public long getIconAnimationStartMillis();
- method public android.view.View getIconView();
- method public android.view.View getView();
- method public void remove();
- property public final long iconAnimationDurationMillis;
- property public final long iconAnimationStartMillis;
- property public final android.view.View iconView;
- property public final android.view.View view;
- }
-
-}
-
diff --git a/core/core-splashscreen/samples/build.gradle b/core/core-splashscreen/samples/build.gradle
index 3c59a31..ae1d810 100644
--- a/core/core-splashscreen/samples/build.gradle
+++ b/core/core-splashscreen/samples/build.gradle
@@ -42,7 +42,7 @@
}
androidx {
- name = "AndroidX Splashscreen Samples"
+ name = "Splashscreen Samples"
type = LibraryType.SAMPLES
mavenVersion = LibraryVersions.CORE_SPLASHSCREEN
inceptionYear = "2021"
diff --git a/core/core-splashscreen/src/androidTest/java/androidx/core/splashscreen/test/SplashScreenTestController.kt b/core/core-splashscreen/src/androidTest/java/androidx/core/splashscreen/test/SplashScreenTestController.kt
index 27d75f7..4c96776 100644
--- a/core/core-splashscreen/src/androidTest/java/androidx/core/splashscreen/test/SplashScreenTestController.kt
+++ b/core/core-splashscreen/src/androidTest/java/androidx/core/splashscreen/test/SplashScreenTestController.kt
@@ -23,12 +23,12 @@
import android.util.TypedValue
import android.view.View
import androidx.appcompat.app.AppCompatActivity
+import androidx.core.splashscreen.R as SR
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import androidx.core.splashscreen.SplashScreenViewProvider
+import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
import java.util.concurrent.CountDownLatch
import java.util.concurrent.atomic.AtomicBoolean
-import androidx.core.splashscreen.R as SR
-import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
/**
* If true, sets an [androidx.core.splashscreen.SplashScreen.OnExitAnimationListener] on the
diff --git a/core/core-splashscreen/src/androidTest/java/androidx/core/splashscreen/test/SplashScreenTestUtils.kt b/core/core-splashscreen/src/androidTest/java/androidx/core/splashscreen/test/SplashScreenTestUtils.kt
index ab7c012..490eea2 100644
--- a/core/core-splashscreen/src/androidTest/java/androidx/core/splashscreen/test/SplashScreenTestUtils.kt
+++ b/core/core-splashscreen/src/androidTest/java/androidx/core/splashscreen/test/SplashScreenTestUtils.kt
@@ -26,10 +26,10 @@
import androidx.test.uiautomator.By
import androidx.test.uiautomator.UiDevice
import androidx.test.uiautomator.Until
-import org.hamcrest.core.IsNull
-import org.hamcrest.MatcherAssert.assertThat
-import org.junit.Assert
import kotlin.reflect.KClass
+import org.hamcrest.MatcherAssert.assertThat
+import org.hamcrest.core.IsNull
+import org.junit.Assert
private const val SPLASH_SCREEN_STYLE_ICON = 1
private const val KEY_SPLASH_SCREEN_STYLE: String = "android.activity.splashScreenStyle"
diff --git a/core/core-splashscreen/src/androidTest/java/androidx/core/splashscreen/test/SplashscreenParametrizedTest.kt b/core/core-splashscreen/src/androidTest/java/androidx/core/splashscreen/test/SplashscreenParametrizedTest.kt
index e84532f..b5df1b0 100644
--- a/core/core-splashscreen/src/androidTest/java/androidx/core/splashscreen/test/SplashscreenParametrizedTest.kt
+++ b/core/core-splashscreen/src/androidTest/java/androidx/core/splashscreen/test/SplashscreenParametrizedTest.kt
@@ -28,6 +28,12 @@
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.screenshot.matchers.MSSIMMatcher
import androidx.test.uiautomator.UiDevice
+import java.io.File
+import java.io.FileOutputStream
+import java.io.IOException
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import kotlin.reflect.KClass
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertNull
@@ -38,12 +44,6 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import java.io.File
-import java.io.FileOutputStream
-import java.io.IOException
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
-import kotlin.reflect.KClass
@LargeTest
@RunWith(Parameterized::class)
diff --git a/core/core-testing/api/public_plus_experimental_current.txt b/core/core-testing/api/public_plus_experimental_current.txt
deleted file mode 100644
index 40c6d07..0000000
--- a/core/core-testing/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-// Signature format: 4.0
-package androidx.core.testing.util {
-
- public final class TestConsumer<T> implements androidx.core.util.Consumer<T> {
- ctor public TestConsumer();
- method public void accept(T t);
- method public void assertValues(java.util.List<? extends T> values);
- }
-
-}
-
diff --git a/core/core-testing/build.gradle b/core/core-testing/build.gradle
index fdc6f76..1708420 100644
--- a/core/core-testing/build.gradle
+++ b/core/core-testing/build.gradle
@@ -41,9 +41,9 @@
}
androidx {
- name = "androidx.core:core-testing"
+ name = "Core Testing"
type = LibraryType.PUBLISHED_LIBRARY
mavenVersion = LibraryVersions.CORE
inceptionYear = "2023"
- description = "Write tests using core APIs."
+ description = "Provides extensions for tests using Core APIs."
}
diff --git a/core/core/api/current.txt b/core/core/api/current.txt
index c5f7d8c..be1967c 100644
--- a/core/core/api/current.txt
+++ b/core/core/api/current.txt
@@ -158,8 +158,8 @@
@Deprecated public abstract class JobIntentService extends android.app.Service {
ctor @Deprecated public JobIntentService();
- method @Deprecated public static void enqueueWork(android.content.Context, Class<?>, int, android.content.Intent);
method @Deprecated public static void enqueueWork(android.content.Context, android.content.ComponentName, int, android.content.Intent);
+ method @Deprecated public static void enqueueWork(android.content.Context, Class<?>, int, android.content.Intent);
method @Deprecated public boolean isStopped();
method @Deprecated public android.os.IBinder! onBind(android.content.Intent);
method @Deprecated protected abstract void onHandleWork(android.content.Intent);
@@ -168,6 +168,7 @@
}
public final class LocaleManagerCompat {
+ method @AnyThread public static androidx.core.os.LocaleListCompat getApplicationLocales(android.content.Context);
method @AnyThread public static androidx.core.os.LocaleListCompat getSystemLocales(android.content.Context);
}
@@ -180,8 +181,8 @@
public final class NavUtils {
method public static android.content.Intent? getParentActivityIntent(android.app.Activity);
- method public static android.content.Intent? getParentActivityIntent(android.content.Context, Class<?>) throws android.content.pm.PackageManager.NameNotFoundException;
method public static android.content.Intent? getParentActivityIntent(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static android.content.Intent? getParentActivityIntent(android.content.Context, Class<?>) throws android.content.pm.PackageManager.NameNotFoundException;
method public static String? getParentActivityName(android.app.Activity);
method public static String? getParentActivityName(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
method public static void navigateUpFromSameTask(android.app.Activity);
@@ -392,8 +393,8 @@
}
public static class NotificationCompat.Action {
- ctor public NotificationCompat.Action(int, CharSequence?, android.app.PendingIntent?);
ctor public NotificationCompat.Action(androidx.core.graphics.drawable.IconCompat?, CharSequence?, android.app.PendingIntent?);
+ ctor public NotificationCompat.Action(int, CharSequence?, android.app.PendingIntent?);
method public android.app.PendingIntent? getActionIntent();
method public boolean getAllowGeneratedReplies();
method public androidx.core.app.RemoteInput![]? getDataOnlyRemoteInputs();
@@ -423,9 +424,9 @@
}
public static final class NotificationCompat.Action.Builder {
+ ctor public NotificationCompat.Action.Builder(androidx.core.app.NotificationCompat.Action);
ctor public NotificationCompat.Action.Builder(androidx.core.graphics.drawable.IconCompat?, CharSequence?, android.app.PendingIntent?);
ctor public NotificationCompat.Action.Builder(int, CharSequence?, android.app.PendingIntent?);
- ctor public NotificationCompat.Action.Builder(androidx.core.app.NotificationCompat.Action);
method public androidx.core.app.NotificationCompat.Action.Builder addExtras(android.os.Bundle?);
method public androidx.core.app.NotificationCompat.Action.Builder addRemoteInput(androidx.core.app.RemoteInput?);
method public androidx.core.app.NotificationCompat.Action build();
@@ -500,8 +501,8 @@
public static final class NotificationCompat.BubbleMetadata.Builder {
ctor @Deprecated public NotificationCompat.BubbleMetadata.Builder();
- ctor @RequiresApi(30) public NotificationCompat.BubbleMetadata.Builder(String);
ctor public NotificationCompat.BubbleMetadata.Builder(android.app.PendingIntent, androidx.core.graphics.drawable.IconCompat);
+ ctor @RequiresApi(30) public NotificationCompat.BubbleMetadata.Builder(String);
method public androidx.core.app.NotificationCompat.BubbleMetadata build();
method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setAutoExpandBubble(boolean);
method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDeleteIntent(android.app.PendingIntent?);
@@ -513,16 +514,16 @@
}
public static class NotificationCompat.Builder {
+ ctor @Deprecated public NotificationCompat.Builder(android.content.Context);
ctor @RequiresApi(19) public NotificationCompat.Builder(android.content.Context, android.app.Notification);
ctor public NotificationCompat.Builder(android.content.Context, String);
- ctor @Deprecated public NotificationCompat.Builder(android.content.Context);
- method public androidx.core.app.NotificationCompat.Builder addAction(int, CharSequence?, android.app.PendingIntent?);
method public androidx.core.app.NotificationCompat.Builder addAction(androidx.core.app.NotificationCompat.Action?);
+ method public androidx.core.app.NotificationCompat.Builder addAction(int, CharSequence?, android.app.PendingIntent?);
method public androidx.core.app.NotificationCompat.Builder addExtras(android.os.Bundle?);
- method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder addInvisibleAction(int, CharSequence?, android.app.PendingIntent?);
method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder addInvisibleAction(androidx.core.app.NotificationCompat.Action?);
- method @Deprecated public androidx.core.app.NotificationCompat.Builder addPerson(String?);
+ method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder addInvisibleAction(int, CharSequence?, android.app.PendingIntent?);
method public androidx.core.app.NotificationCompat.Builder addPerson(androidx.core.app.Person?);
+ method @Deprecated public androidx.core.app.NotificationCompat.Builder addPerson(String?);
method public android.app.Notification build();
method public androidx.core.app.NotificationCompat.Builder clearActions();
method public androidx.core.app.NotificationCompat.Builder clearInvisibleActions();
@@ -604,8 +605,8 @@
method public androidx.core.app.NotificationCompat.CallStyle setAnswerButtonColorHint(@ColorInt int);
method public androidx.core.app.NotificationCompat.CallStyle setDeclineButtonColorHint(@ColorInt int);
method public androidx.core.app.NotificationCompat.CallStyle setIsVideo(boolean);
- method @RequiresApi(23) public androidx.core.app.NotificationCompat.CallStyle setVerificationIcon(android.graphics.drawable.Icon?);
method public androidx.core.app.NotificationCompat.CallStyle setVerificationIcon(android.graphics.Bitmap?);
+ method @RequiresApi(23) public androidx.core.app.NotificationCompat.CallStyle setVerificationIcon(android.graphics.drawable.Icon?);
method public androidx.core.app.NotificationCompat.CallStyle setVerificationText(CharSequence?);
field public static final int CALL_TYPE_INCOMING = 1; // 0x1
field public static final int CALL_TYPE_ONGOING = 2; // 0x2
@@ -661,13 +662,13 @@
}
public static class NotificationCompat.MessagingStyle extends androidx.core.app.NotificationCompat.Style {
- ctor @Deprecated public NotificationCompat.MessagingStyle(CharSequence);
ctor public NotificationCompat.MessagingStyle(androidx.core.app.Person);
+ ctor @Deprecated public NotificationCompat.MessagingStyle(CharSequence);
method public void addCompatExtras(android.os.Bundle);
method public androidx.core.app.NotificationCompat.MessagingStyle addHistoricMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message?);
- method @Deprecated public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, CharSequence?);
- method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, androidx.core.app.Person?);
method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message?);
+ method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, androidx.core.app.Person?);
+ method @Deprecated public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, CharSequence?);
method public static androidx.core.app.NotificationCompat.MessagingStyle? extractMessagingStyleFromNotification(android.app.Notification);
method public CharSequence? getConversationTitle();
method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!> getHistoricMessages();
@@ -842,8 +843,8 @@
}
public static class NotificationManagerCompat.NotificationWithIdAndTag {
- ctor public NotificationManagerCompat.NotificationWithIdAndTag(String?, int, android.app.Notification);
ctor public NotificationManagerCompat.NotificationWithIdAndTag(int, android.app.Notification);
+ ctor public NotificationManagerCompat.NotificationWithIdAndTag(String?, int, android.app.Notification);
}
public interface OnMultiWindowModeChangedProvider {
@@ -864,8 +865,8 @@
public final class PendingIntentCompat {
method public static android.app.PendingIntent getActivities(android.content.Context, int, android.content.Intent![], int, android.os.Bundle, boolean);
method public static android.app.PendingIntent getActivities(android.content.Context, int, android.content.Intent![], int, boolean);
- method public static android.app.PendingIntent getActivity(android.content.Context, int, android.content.Intent, int, boolean);
method public static android.app.PendingIntent getActivity(android.content.Context, int, android.content.Intent, int, android.os.Bundle, boolean);
+ method public static android.app.PendingIntent getActivity(android.content.Context, int, android.content.Intent, int, boolean);
method public static android.app.PendingIntent? getBroadcast(android.content.Context, int, android.content.Intent, int, boolean);
method @RequiresApi(26) public static android.app.PendingIntent getForegroundService(android.content.Context, int, android.content.Intent, int, boolean);
method public static android.app.PendingIntent getService(android.content.Context, int, android.content.Intent, int, boolean);
@@ -902,8 +903,8 @@
}
public final class RemoteActionCompat implements androidx.versionedparcelable.VersionedParcelable {
- ctor public RemoteActionCompat(androidx.core.graphics.drawable.IconCompat, CharSequence, CharSequence, android.app.PendingIntent);
ctor public RemoteActionCompat(androidx.core.app.RemoteActionCompat);
+ ctor public RemoteActionCompat(androidx.core.graphics.drawable.IconCompat, CharSequence, CharSequence, android.app.PendingIntent);
method @RequiresApi(26) public static androidx.core.app.RemoteActionCompat createFromRemoteAction(android.app.RemoteAction);
method public android.app.PendingIntent getActionIntent();
method public CharSequence getContentDescription();
@@ -960,8 +961,8 @@
}
public final class ShareCompat {
- method @Deprecated public static void configureMenuItem(android.view.MenuItem, androidx.core.app.ShareCompat.IntentBuilder);
method @Deprecated public static void configureMenuItem(android.view.Menu, @IdRes int, androidx.core.app.ShareCompat.IntentBuilder);
+ method @Deprecated public static void configureMenuItem(android.view.MenuItem, androidx.core.app.ShareCompat.IntentBuilder);
method public static android.content.ComponentName? getCallingActivity(android.app.Activity);
method public static String? getCallingPackage(android.app.Activity);
field public static final String EXTRA_CALLING_ACTIVITY = "androidx.core.app.EXTRA_CALLING_ACTIVITY";
@@ -982,8 +983,8 @@
method public android.content.Intent createChooserIntent();
method @Deprecated public static androidx.core.app.ShareCompat.IntentBuilder from(android.app.Activity);
method public android.content.Intent getIntent();
- method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(CharSequence?);
method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(@StringRes int);
+ method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(CharSequence?);
method public androidx.core.app.ShareCompat.IntentBuilder setEmailBcc(String![]?);
method public androidx.core.app.ShareCompat.IntentBuilder setEmailCc(String![]?);
method public androidx.core.app.ShareCompat.IntentBuilder setEmailTo(String![]?);
@@ -1038,8 +1039,8 @@
method public androidx.core.app.TaskStackBuilder addNextIntent(android.content.Intent);
method public androidx.core.app.TaskStackBuilder addNextIntentWithParentStack(android.content.Intent);
method public androidx.core.app.TaskStackBuilder addParentStack(android.app.Activity);
- method public androidx.core.app.TaskStackBuilder addParentStack(Class<?>);
method public androidx.core.app.TaskStackBuilder addParentStack(android.content.ComponentName);
+ method public androidx.core.app.TaskStackBuilder addParentStack(Class<?>);
method public static androidx.core.app.TaskStackBuilder create(android.content.Context);
method public android.content.Intent? editIntentAt(int);
method @Deprecated public static androidx.core.app.TaskStackBuilder! from(android.content.Context!);
@@ -1077,14 +1078,16 @@
method public static java.io.File getCodeCacheDir(android.content.Context);
method @ColorInt public static int getColor(android.content.Context, @ColorRes int);
method public static android.content.res.ColorStateList? getColorStateList(android.content.Context, @ColorRes int);
+ method public static android.content.Context getContextForLanguage(android.content.Context);
method public static java.io.File? getDataDir(android.content.Context);
- method public static android.view.Display getDisplay(@DisplayContext android.content.Context);
+ method public static android.view.Display getDisplayOrDefault(@DisplayContext android.content.Context);
method public static android.graphics.drawable.Drawable? getDrawable(android.content.Context, @DrawableRes int);
method public static java.io.File![] getExternalCacheDirs(android.content.Context);
method public static java.io.File![] getExternalFilesDirs(android.content.Context, String?);
method public static java.util.concurrent.Executor getMainExecutor(android.content.Context);
method public static java.io.File? getNoBackupFilesDir(android.content.Context);
method public static java.io.File![] getObbDirs(android.content.Context);
+ method public static String getString(android.content.Context, int);
method public static <T> T? getSystemService(android.content.Context, Class<T!>);
method public static String? getSystemServiceName(android.content.Context, Class<?>);
method public static boolean isDeviceProtectedStorage(android.content.Context);
@@ -1134,11 +1137,11 @@
public static final class IntentSanitizer.Builder {
ctor public IntentSanitizer.Builder();
- method public androidx.core.content.IntentSanitizer.Builder allowAction(String);
method public androidx.core.content.IntentSanitizer.Builder allowAction(androidx.core.util.Predicate<java.lang.String!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowAction(String);
method public androidx.core.content.IntentSanitizer.Builder allowAnyComponent();
- method public androidx.core.content.IntentSanitizer.Builder allowCategory(String);
method public androidx.core.content.IntentSanitizer.Builder allowCategory(androidx.core.util.Predicate<java.lang.String!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowCategory(String);
method public androidx.core.content.IntentSanitizer.Builder allowClipData(androidx.core.util.Predicate<android.content.ClipData!>);
method public androidx.core.content.IntentSanitizer.Builder allowClipDataText();
method public androidx.core.content.IntentSanitizer.Builder allowClipDataUri(androidx.core.util.Predicate<android.net.Uri!>);
@@ -1148,23 +1151,23 @@
method public androidx.core.content.IntentSanitizer.Builder allowComponentWithPackage(String);
method public androidx.core.content.IntentSanitizer.Builder allowData(androidx.core.util.Predicate<android.net.Uri!>);
method public androidx.core.content.IntentSanitizer.Builder allowDataWithAuthority(String);
+ method public androidx.core.content.IntentSanitizer.Builder allowExtra(String, androidx.core.util.Predicate<java.lang.Object!>);
method public androidx.core.content.IntentSanitizer.Builder allowExtra(String, Class<?>);
method public <T> androidx.core.content.IntentSanitizer.Builder allowExtra(String, Class<T!>, androidx.core.util.Predicate<T!>);
- method public androidx.core.content.IntentSanitizer.Builder allowExtra(String, androidx.core.util.Predicate<java.lang.Object!>);
- method public androidx.core.content.IntentSanitizer.Builder allowExtraOutput(String);
method public androidx.core.content.IntentSanitizer.Builder allowExtraOutput(androidx.core.util.Predicate<android.net.Uri!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowExtraOutput(String);
method public androidx.core.content.IntentSanitizer.Builder allowExtraStream(androidx.core.util.Predicate<android.net.Uri!>);
method public androidx.core.content.IntentSanitizer.Builder allowExtraStreamUriWithAuthority(String);
method public androidx.core.content.IntentSanitizer.Builder allowFlags(int);
method public androidx.core.content.IntentSanitizer.Builder allowHistoryStackFlags();
method public androidx.core.content.IntentSanitizer.Builder allowIdentifier();
- method public androidx.core.content.IntentSanitizer.Builder allowPackage(String);
method public androidx.core.content.IntentSanitizer.Builder allowPackage(androidx.core.util.Predicate<java.lang.String!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowPackage(String);
method public androidx.core.content.IntentSanitizer.Builder allowReceiverFlags();
method public androidx.core.content.IntentSanitizer.Builder allowSelector();
method public androidx.core.content.IntentSanitizer.Builder allowSourceBounds();
- method public androidx.core.content.IntentSanitizer.Builder allowType(String);
method public androidx.core.content.IntentSanitizer.Builder allowType(androidx.core.util.Predicate<java.lang.String!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowType(String);
method public androidx.core.content.IntentSanitizer build();
}
@@ -1459,8 +1462,8 @@
method public static void colorToLAB(@ColorInt int, double[]);
method public static void colorToM3HCT(@ColorInt int, float[]);
method public static void colorToXYZ(@ColorInt int, double[]);
- method public static int compositeColors(@ColorInt int, @ColorInt int);
method @RequiresApi(26) public static android.graphics.Color compositeColors(android.graphics.Color, android.graphics.Color);
+ method public static int compositeColors(@ColorInt int, @ColorInt int);
method public static double distanceEuclidean(double[], double[]);
method @ColorInt public static int setAlphaComponent(@ColorInt int, @IntRange(from=0, to=255) int);
}
@@ -1469,8 +1472,8 @@
method public static androidx.core.graphics.Insets add(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
method public static androidx.core.graphics.Insets max(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
method public static androidx.core.graphics.Insets min(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
- method public static androidx.core.graphics.Insets of(int, int, int, int);
method public static androidx.core.graphics.Insets of(android.graphics.Rect);
+ method public static androidx.core.graphics.Insets of(int, int, int, int);
method public static androidx.core.graphics.Insets subtract(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
method @RequiresApi(api=29) public static androidx.core.graphics.Insets toCompatInsets(android.graphics.Insets);
method @RequiresApi(29) public android.graphics.Insets toPlatformInsets();
@@ -1533,11 +1536,11 @@
method public static androidx.core.graphics.drawable.IconCompat? createFromBundle(android.os.Bundle);
method @RequiresApi(23) public static androidx.core.graphics.drawable.IconCompat? createFromIcon(android.content.Context, android.graphics.drawable.Icon);
method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmap(android.graphics.Bitmap);
- method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmapContentUri(String);
method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmapContentUri(android.net.Uri);
+ method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmapContentUri(String);
method public static androidx.core.graphics.drawable.IconCompat createWithBitmap(android.graphics.Bitmap);
- method public static androidx.core.graphics.drawable.IconCompat createWithContentUri(String);
method public static androidx.core.graphics.drawable.IconCompat createWithContentUri(android.net.Uri);
+ method public static androidx.core.graphics.drawable.IconCompat createWithContentUri(String);
method public static androidx.core.graphics.drawable.IconCompat createWithData(byte[], int, int);
method public static androidx.core.graphics.drawable.IconCompat createWithResource(android.content.Context, @DrawableRes int);
method @DrawableRes public int getResId();
@@ -1587,8 +1590,8 @@
public final class RoundedBitmapDrawableFactory {
method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, android.graphics.Bitmap?);
- method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, String);
method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, java.io.InputStream);
+ method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, String);
}
}
@@ -1719,8 +1722,8 @@
method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public static boolean registerGnssStatusCallback(android.location.LocationManager, androidx.core.location.GnssStatusCompat.Callback, android.os.Handler);
method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public static boolean registerGnssStatusCallback(android.location.LocationManager, java.util.concurrent.Executor, androidx.core.location.GnssStatusCompat.Callback);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void removeUpdates(android.location.LocationManager, androidx.core.location.LocationListenerCompat);
- method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void requestLocationUpdates(android.location.LocationManager, String, androidx.core.location.LocationRequestCompat, java.util.concurrent.Executor, androidx.core.location.LocationListenerCompat);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void requestLocationUpdates(android.location.LocationManager, String, androidx.core.location.LocationRequestCompat, androidx.core.location.LocationListenerCompat, android.os.Looper);
+ method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void requestLocationUpdates(android.location.LocationManager, String, androidx.core.location.LocationRequestCompat, java.util.concurrent.Executor, androidx.core.location.LocationListenerCompat);
method @RequiresApi(android.os.Build.VERSION_CODES.N) public static void unregisterGnssMeasurementsCallback(android.location.LocationManager, android.location.GnssMeasurementsEvent.Callback);
method public static void unregisterGnssStatusCallback(android.location.LocationManager, androidx.core.location.GnssStatusCompat.Callback);
}
@@ -1742,8 +1745,8 @@
}
public static final class LocationRequestCompat.Builder {
- ctor public LocationRequestCompat.Builder(long);
ctor public LocationRequestCompat.Builder(androidx.core.location.LocationRequestCompat);
+ ctor public LocationRequestCompat.Builder(long);
method public androidx.core.location.LocationRequestCompat build();
method public androidx.core.location.LocationRequestCompat.Builder clearMinUpdateIntervalMillis();
method public androidx.core.location.LocationRequestCompat.Builder setDurationMillis(@IntRange(from=1) long);
@@ -1762,8 +1765,8 @@
public class MathUtils {
method public static int addExact(int, int);
method public static long addExact(long, long);
- method public static float clamp(float, float, float);
method public static double clamp(double, double, double);
+ method public static float clamp(float, float, float);
method public static int clamp(int, int, int);
method public static long clamp(long, long, long);
method public static int decrementExact(int);
@@ -1799,10 +1802,10 @@
method public java.util.Map<java.lang.String!,java.lang.String!>? getHeaders();
method public String? getSubject();
method public String? getTo();
- method public static boolean isMailTo(String?);
method public static boolean isMailTo(android.net.Uri?);
- method public static androidx.core.net.MailTo parse(String) throws androidx.core.net.ParseException;
+ method public static boolean isMailTo(String?);
method public static androidx.core.net.MailTo parse(android.net.Uri) throws androidx.core.net.ParseException;
+ method public static androidx.core.net.MailTo parse(String) throws androidx.core.net.ParseException;
field public static final String MAILTO_SCHEME = "mailto:";
}
@@ -1869,6 +1872,7 @@
public final class ConfigurationCompat {
method public static androidx.core.os.LocaleListCompat getLocales(android.content.res.Configuration);
+ method public static void setLocales(android.content.res.Configuration, androidx.core.os.LocaleListCompat);
}
public final class EnvironmentCompat {
@@ -1901,8 +1905,8 @@
method @IntRange(from=0) public int size();
method public String toLanguageTags();
method public Object? unwrap();
- method @Deprecated @RequiresApi(24) public static androidx.core.os.LocaleListCompat! wrap(Object!);
method @RequiresApi(24) public static androidx.core.os.LocaleListCompat wrap(android.os.LocaleList);
+ method @Deprecated @RequiresApi(24) public static androidx.core.os.LocaleListCompat! wrap(Object!);
}
public final class MessageCompat {
@@ -1986,8 +1990,8 @@
}
public final class FontRequest {
- ctor public FontRequest(String, String, String, java.util.List<java.util.List<byte[]!>!>);
ctor public FontRequest(String, String, String, @ArrayRes int);
+ ctor public FontRequest(String, String, String, java.util.List<java.util.List<byte[]!>!>);
method public java.util.List<java.util.List<byte[]!>!>? getCertificates();
method @ArrayRes public int getCertificatesArrayResId();
method public String getProviderAuthority();
@@ -2074,17 +2078,17 @@
method public static androidx.core.text.BidiFormatter! getInstance(boolean);
method public static androidx.core.text.BidiFormatter! getInstance(java.util.Locale!);
method public boolean getStereoReset();
- method public boolean isRtl(String!);
method public boolean isRtl(CharSequence!);
+ method public boolean isRtl(String!);
method public boolean isRtlContext();
- method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
- method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
- method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!);
+ method public CharSequence! unicodeWrap(CharSequence!);
method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!);
- method public String! unicodeWrap(String!, boolean);
+ method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
method public CharSequence! unicodeWrap(CharSequence!, boolean);
method public String! unicodeWrap(String!);
- method public CharSequence! unicodeWrap(CharSequence!);
+ method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!);
+ method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
+ method public String! unicodeWrap(String!, boolean);
}
public static final class BidiFormatter.Builder {
@@ -2185,13 +2189,13 @@
public final class LinkifyCompat {
method public static boolean addLinks(android.text.Spannable, int);
+ method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?);
+ method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+ method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, String![]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
method public static boolean addLinks(android.widget.TextView, int);
method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?);
method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?, String![]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
- method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?);
- method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
- method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, String![]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
}
}
@@ -2316,8 +2320,8 @@
method public int getFlags();
method public android.net.Uri? getLinkUri();
method public int getSource();
- method public android.util.Pair<androidx.core.view.ContentInfoCompat!,androidx.core.view.ContentInfoCompat!> partition(androidx.core.util.Predicate<android.content.ClipData.Item!>);
method @RequiresApi(31) public static android.util.Pair<android.view.ContentInfo!,android.view.ContentInfo!> partition(android.view.ContentInfo, java.util.function.Predicate<android.content.ClipData.Item!>);
+ method public android.util.Pair<androidx.core.view.ContentInfoCompat!,androidx.core.view.ContentInfoCompat!> partition(androidx.core.util.Predicate<android.content.ClipData.Item!>);
method @RequiresApi(31) public android.view.ContentInfo toContentInfo();
method @RequiresApi(31) public static androidx.core.view.ContentInfoCompat toContentInfoCompat(android.view.ContentInfo);
field public static final int FLAG_CONVERT_TO_PLAIN_TEXT = 1; // 0x1
@@ -2330,8 +2334,8 @@
}
public static final class ContentInfoCompat.Builder {
- ctor public ContentInfoCompat.Builder(androidx.core.view.ContentInfoCompat);
ctor public ContentInfoCompat.Builder(android.content.ClipData, int);
+ ctor public ContentInfoCompat.Builder(androidx.core.view.ContentInfoCompat);
method public androidx.core.view.ContentInfoCompat build();
method public androidx.core.view.ContentInfoCompat.Builder setClip(android.content.ClipData);
method public androidx.core.view.ContentInfoCompat.Builder setExtras(android.os.Bundle?);
@@ -2400,6 +2404,31 @@
field public static final int START = 8388611; // 0x800003
}
+ public final class HapticFeedbackConstantsCompat {
+ field public static final int CLOCK_TICK = 4; // 0x4
+ field public static final int CONFIRM = 16; // 0x10
+ field public static final int CONTEXT_CLICK = 6; // 0x6
+ field public static final int DRAG_START = 25; // 0x19
+ field public static final int FLAG_IGNORE_VIEW_SETTING = 1; // 0x1
+ field public static final int GESTURE_END = 13; // 0xd
+ field public static final int GESTURE_START = 12; // 0xc
+ field public static final int GESTURE_THRESHOLD_ACTIVATE = 23; // 0x17
+ field public static final int GESTURE_THRESHOLD_DEACTIVATE = 24; // 0x18
+ field public static final int KEYBOARD_PRESS = 3; // 0x3
+ field public static final int KEYBOARD_RELEASE = 7; // 0x7
+ field public static final int KEYBOARD_TAP = 3; // 0x3
+ field public static final int LONG_PRESS = 0; // 0x0
+ field public static final int NO_HAPTICS = -1; // 0xffffffff
+ field public static final int REJECT = 17; // 0x11
+ field public static final int SEGMENT_FREQUENT_TICK = 27; // 0x1b
+ field public static final int SEGMENT_TICK = 26; // 0x1a
+ field public static final int TEXT_HANDLE_MOVE = 9; // 0x9
+ field public static final int TOGGLE_OFF = 22; // 0x16
+ field public static final int TOGGLE_ON = 21; // 0x15
+ field public static final int VIRTUAL_KEY = 1; // 0x1
+ field public static final int VIRTUAL_KEY_RELEASE = 8; // 0x8
+ }
+
public final class InputDeviceCompat {
field public static final int SOURCE_ANY = -256; // 0xffffff00
field public static final int SOURCE_CLASS_BUTTON = 1; // 0x1
@@ -2710,10 +2739,10 @@
}
public final class ScaleGestureDetectorCompat {
- method @Deprecated public static boolean isQuickScaleEnabled(Object!);
method public static boolean isQuickScaleEnabled(android.view.ScaleGestureDetector);
- method @Deprecated public static void setQuickScaleEnabled(Object!, boolean);
+ method @Deprecated public static boolean isQuickScaleEnabled(Object!);
method public static void setQuickScaleEnabled(android.view.ScaleGestureDetector, boolean);
+ method @Deprecated public static void setQuickScaleEnabled(Object!, boolean);
}
public interface ScrollingView {
@@ -2761,8 +2790,8 @@
method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[]?, int[]?);
method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[]?, int[]?, int);
method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]?);
- method public static void dispatchNestedScroll(android.view.View, int, int, int, int, int[]?, int, int[]);
method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]?, int);
+ method public static void dispatchNestedScroll(android.view.View, int, int, int, int, int[]?, int, int[]);
method public static void dispatchStartTemporaryDetach(android.view.View);
method public static void enableAccessibleClickableSpanSupport(android.view.View);
method public static int generateViewId();
@@ -2847,6 +2876,8 @@
method public static void onInitializeAccessibilityNodeInfo(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
method @Deprecated public static void onPopulateAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
method public static boolean performAccessibilityAction(android.view.View, int, android.os.Bundle?);
+ method public static boolean performHapticFeedback(android.view.View, int);
+ method public static boolean performHapticFeedback(android.view.View, int, int);
method public static androidx.core.view.ContentInfoCompat? performReceiveContent(android.view.View, androidx.core.view.ContentInfoCompat);
method public static void postInvalidateOnAnimation(android.view.View);
method public static void postInvalidateOnAnimation(android.view.View, int, int, int, int);
@@ -3159,8 +3190,8 @@
method public boolean isConsumed();
method public boolean isRound();
method public boolean isVisible(int);
- method @Deprecated public androidx.core.view.WindowInsetsCompat replaceSystemWindowInsets(int, int, int, int);
method @Deprecated public androidx.core.view.WindowInsetsCompat replaceSystemWindowInsets(android.graphics.Rect);
+ method @Deprecated public androidx.core.view.WindowInsetsCompat replaceSystemWindowInsets(int, int, int, int);
method @RequiresApi(20) public android.view.WindowInsets? toWindowInsets();
method @RequiresApi(20) public static androidx.core.view.WindowInsetsCompat toWindowInsetsCompat(android.view.WindowInsets);
method @RequiresApi(20) public static androidx.core.view.WindowInsetsCompat toWindowInsetsCompat(android.view.WindowInsets, android.view.View?);
@@ -3293,8 +3324,8 @@
public class AccessibilityNodeInfoCompat {
ctor @Deprecated public AccessibilityNodeInfoCompat(Object!);
- method public void addAction(int);
method public void addAction(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!);
+ method public void addAction(int);
method public void addChild(android.view.View!);
method public void addChild(android.view.View!, int);
method public boolean canOpenPopup();
@@ -3367,9 +3398,9 @@
method public boolean isTextEntryKey();
method public boolean isTextSelectable();
method public boolean isVisibleToUser();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain();
method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(android.view.View!);
method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(android.view.View!, int);
- method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain();
method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(androidx.core.view.accessibility.AccessibilityNodeInfoCompat!);
method public boolean performAction(int);
method public boolean performAction(int, android.os.Bundle!);
@@ -3544,8 +3575,8 @@
method public int getRowCount();
method public int getSelectionMode();
method public boolean isHierarchical();
- method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean, int);
method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean);
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean, int);
field public static final int SELECTION_MODE_MULTIPLE = 2; // 0x2
field public static final int SELECTION_MODE_NONE = 0; // 0x0
field public static final int SELECTION_MODE_SINGLE = 1; // 0x1
@@ -3558,8 +3589,8 @@
method public int getRowSpan();
method @Deprecated public boolean isHeading();
method public boolean isSelected();
- method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean, boolean);
method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean);
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean, boolean);
}
public static class AccessibilityNodeInfoCompat.RangeInfoCompat {
@@ -3621,8 +3652,8 @@
method @Deprecated public boolean isFullScreen();
method @Deprecated public boolean isPassword();
method @Deprecated public boolean isScrollable();
- method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain(androidx.core.view.accessibility.AccessibilityRecordCompat!);
method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain();
+ method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain(androidx.core.view.accessibility.AccessibilityRecordCompat!);
method @Deprecated public void recycle();
method @Deprecated public void setAddedCount(int);
method @Deprecated public void setBeforeText(CharSequence!);
@@ -3634,19 +3665,19 @@
method @Deprecated public void setFromIndex(int);
method @Deprecated public void setFullScreen(boolean);
method @Deprecated public void setItemCount(int);
- method @Deprecated public void setMaxScrollX(int);
method public static void setMaxScrollX(android.view.accessibility.AccessibilityRecord, int);
- method @Deprecated public void setMaxScrollY(int);
+ method @Deprecated public void setMaxScrollX(int);
method public static void setMaxScrollY(android.view.accessibility.AccessibilityRecord, int);
+ method @Deprecated public void setMaxScrollY(int);
method @Deprecated public void setParcelableData(android.os.Parcelable!);
method @Deprecated public void setPassword(boolean);
method @Deprecated public void setRemovedCount(int);
method @Deprecated public void setScrollX(int);
method @Deprecated public void setScrollY(int);
method @Deprecated public void setScrollable(boolean);
+ method public static void setSource(android.view.accessibility.AccessibilityRecord, android.view.View?, int);
method @Deprecated public void setSource(android.view.View!);
method @Deprecated public void setSource(android.view.View!, int);
- method public static void setSource(android.view.accessibility.AccessibilityRecord, android.view.View?, int);
method @Deprecated public void setToIndex(int);
}
@@ -3862,9 +3893,9 @@
method public static float getDistance(android.widget.EdgeEffect);
method @Deprecated public boolean isFinished();
method @Deprecated public boolean onAbsorb(int);
+ method public static void onPull(android.widget.EdgeEffect, float, float);
method @Deprecated public boolean onPull(float);
method @Deprecated public boolean onPull(float, float);
- method public static void onPull(android.widget.EdgeEffect, float, float);
method public static float onPullDistance(android.widget.EdgeEffect, float, float);
method @Deprecated public boolean onRelease();
method @Deprecated public void setSize(int, int);
@@ -3878,8 +3909,8 @@
}
public final class ListPopupWindowCompat {
- method @Deprecated public static android.view.View.OnTouchListener! createDragToOpenListener(Object!, android.view.View!);
method public static android.view.View.OnTouchListener? createDragToOpenListener(android.widget.ListPopupWindow, android.view.View);
+ method @Deprecated public static android.view.View.OnTouchListener! createDragToOpenListener(Object!, android.view.View!);
}
public class ListViewAutoScrollHelper extends androidx.core.widget.AutoScrollHelper {
@@ -3907,8 +3938,8 @@
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollOffset();
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollRange();
method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, int);
- method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]);
method public boolean dispatchNestedScroll(int, int, int, int, int[]?, int);
+ method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]);
method public boolean executeKeyEvent(android.view.KeyEvent);
method public void fling(int);
method public boolean fullScroll(int);
@@ -3918,8 +3949,8 @@
method public boolean isSmoothScrollingEnabled();
method public void onAttachedToWindow();
method public void onNestedPreScroll(android.view.View, int, int, int[], int);
- method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]);
method public void onNestedScroll(android.view.View, int, int, int, int, int);
+ method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]);
method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
method public void onStopNestedScroll(android.view.View, int);
diff --git a/core/core/api/public_plus_experimental_current.txt b/core/core/api/public_plus_experimental_current.txt
index a9d425f..0c385e3 100644
--- a/core/core/api/public_plus_experimental_current.txt
+++ b/core/core/api/public_plus_experimental_current.txt
@@ -158,8 +158,8 @@
@Deprecated public abstract class JobIntentService extends android.app.Service {
ctor @Deprecated public JobIntentService();
- method @Deprecated public static void enqueueWork(android.content.Context, Class<?>, int, android.content.Intent);
method @Deprecated public static void enqueueWork(android.content.Context, android.content.ComponentName, int, android.content.Intent);
+ method @Deprecated public static void enqueueWork(android.content.Context, Class<?>, int, android.content.Intent);
method @Deprecated public boolean isStopped();
method @Deprecated public android.os.IBinder! onBind(android.content.Intent);
method @Deprecated protected abstract void onHandleWork(android.content.Intent);
@@ -168,6 +168,7 @@
}
public final class LocaleManagerCompat {
+ method @AnyThread public static androidx.core.os.LocaleListCompat getApplicationLocales(android.content.Context);
method @AnyThread public static androidx.core.os.LocaleListCompat getSystemLocales(android.content.Context);
}
@@ -180,8 +181,8 @@
public final class NavUtils {
method public static android.content.Intent? getParentActivityIntent(android.app.Activity);
- method public static android.content.Intent? getParentActivityIntent(android.content.Context, Class<?>) throws android.content.pm.PackageManager.NameNotFoundException;
method public static android.content.Intent? getParentActivityIntent(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static android.content.Intent? getParentActivityIntent(android.content.Context, Class<?>) throws android.content.pm.PackageManager.NameNotFoundException;
method public static String? getParentActivityName(android.app.Activity);
method public static String? getParentActivityName(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
method public static void navigateUpFromSameTask(android.app.Activity);
@@ -392,8 +393,8 @@
}
public static class NotificationCompat.Action {
- ctor public NotificationCompat.Action(int, CharSequence?, android.app.PendingIntent?);
ctor public NotificationCompat.Action(androidx.core.graphics.drawable.IconCompat?, CharSequence?, android.app.PendingIntent?);
+ ctor public NotificationCompat.Action(int, CharSequence?, android.app.PendingIntent?);
method public android.app.PendingIntent? getActionIntent();
method public boolean getAllowGeneratedReplies();
method public androidx.core.app.RemoteInput![]? getDataOnlyRemoteInputs();
@@ -423,9 +424,9 @@
}
public static final class NotificationCompat.Action.Builder {
+ ctor public NotificationCompat.Action.Builder(androidx.core.app.NotificationCompat.Action);
ctor public NotificationCompat.Action.Builder(androidx.core.graphics.drawable.IconCompat?, CharSequence?, android.app.PendingIntent?);
ctor public NotificationCompat.Action.Builder(int, CharSequence?, android.app.PendingIntent?);
- ctor public NotificationCompat.Action.Builder(androidx.core.app.NotificationCompat.Action);
method public androidx.core.app.NotificationCompat.Action.Builder addExtras(android.os.Bundle?);
method public androidx.core.app.NotificationCompat.Action.Builder addRemoteInput(androidx.core.app.RemoteInput?);
method public androidx.core.app.NotificationCompat.Action build();
@@ -500,8 +501,8 @@
public static final class NotificationCompat.BubbleMetadata.Builder {
ctor @Deprecated public NotificationCompat.BubbleMetadata.Builder();
- ctor @RequiresApi(30) public NotificationCompat.BubbleMetadata.Builder(String);
ctor public NotificationCompat.BubbleMetadata.Builder(android.app.PendingIntent, androidx.core.graphics.drawable.IconCompat);
+ ctor @RequiresApi(30) public NotificationCompat.BubbleMetadata.Builder(String);
method public androidx.core.app.NotificationCompat.BubbleMetadata build();
method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setAutoExpandBubble(boolean);
method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDeleteIntent(android.app.PendingIntent?);
@@ -513,16 +514,16 @@
}
public static class NotificationCompat.Builder {
+ ctor @Deprecated public NotificationCompat.Builder(android.content.Context);
ctor @RequiresApi(19) public NotificationCompat.Builder(android.content.Context, android.app.Notification);
ctor public NotificationCompat.Builder(android.content.Context, String);
- ctor @Deprecated public NotificationCompat.Builder(android.content.Context);
- method public androidx.core.app.NotificationCompat.Builder addAction(int, CharSequence?, android.app.PendingIntent?);
method public androidx.core.app.NotificationCompat.Builder addAction(androidx.core.app.NotificationCompat.Action?);
+ method public androidx.core.app.NotificationCompat.Builder addAction(int, CharSequence?, android.app.PendingIntent?);
method public androidx.core.app.NotificationCompat.Builder addExtras(android.os.Bundle?);
- method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder addInvisibleAction(int, CharSequence?, android.app.PendingIntent?);
method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder addInvisibleAction(androidx.core.app.NotificationCompat.Action?);
- method @Deprecated public androidx.core.app.NotificationCompat.Builder addPerson(String?);
+ method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder addInvisibleAction(int, CharSequence?, android.app.PendingIntent?);
method public androidx.core.app.NotificationCompat.Builder addPerson(androidx.core.app.Person?);
+ method @Deprecated public androidx.core.app.NotificationCompat.Builder addPerson(String?);
method public android.app.Notification build();
method public androidx.core.app.NotificationCompat.Builder clearActions();
method public androidx.core.app.NotificationCompat.Builder clearInvisibleActions();
@@ -604,8 +605,8 @@
method public androidx.core.app.NotificationCompat.CallStyle setAnswerButtonColorHint(@ColorInt int);
method public androidx.core.app.NotificationCompat.CallStyle setDeclineButtonColorHint(@ColorInt int);
method public androidx.core.app.NotificationCompat.CallStyle setIsVideo(boolean);
- method @RequiresApi(23) public androidx.core.app.NotificationCompat.CallStyle setVerificationIcon(android.graphics.drawable.Icon?);
method public androidx.core.app.NotificationCompat.CallStyle setVerificationIcon(android.graphics.Bitmap?);
+ method @RequiresApi(23) public androidx.core.app.NotificationCompat.CallStyle setVerificationIcon(android.graphics.drawable.Icon?);
method public androidx.core.app.NotificationCompat.CallStyle setVerificationText(CharSequence?);
field public static final int CALL_TYPE_INCOMING = 1; // 0x1
field public static final int CALL_TYPE_ONGOING = 2; // 0x2
@@ -661,13 +662,13 @@
}
public static class NotificationCompat.MessagingStyle extends androidx.core.app.NotificationCompat.Style {
- ctor @Deprecated public NotificationCompat.MessagingStyle(CharSequence);
ctor public NotificationCompat.MessagingStyle(androidx.core.app.Person);
+ ctor @Deprecated public NotificationCompat.MessagingStyle(CharSequence);
method public void addCompatExtras(android.os.Bundle);
method public androidx.core.app.NotificationCompat.MessagingStyle addHistoricMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message?);
- method @Deprecated public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, CharSequence?);
- method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, androidx.core.app.Person?);
method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message?);
+ method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, androidx.core.app.Person?);
+ method @Deprecated public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, CharSequence?);
method public static androidx.core.app.NotificationCompat.MessagingStyle? extractMessagingStyleFromNotification(android.app.Notification);
method public CharSequence? getConversationTitle();
method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!> getHistoricMessages();
@@ -842,8 +843,8 @@
}
public static class NotificationManagerCompat.NotificationWithIdAndTag {
- ctor public NotificationManagerCompat.NotificationWithIdAndTag(String?, int, android.app.Notification);
ctor public NotificationManagerCompat.NotificationWithIdAndTag(int, android.app.Notification);
+ ctor public NotificationManagerCompat.NotificationWithIdAndTag(String?, int, android.app.Notification);
}
public interface OnMultiWindowModeChangedProvider {
@@ -864,8 +865,8 @@
public final class PendingIntentCompat {
method public static android.app.PendingIntent getActivities(android.content.Context, int, android.content.Intent![], int, android.os.Bundle, boolean);
method public static android.app.PendingIntent getActivities(android.content.Context, int, android.content.Intent![], int, boolean);
- method public static android.app.PendingIntent getActivity(android.content.Context, int, android.content.Intent, int, boolean);
method public static android.app.PendingIntent getActivity(android.content.Context, int, android.content.Intent, int, android.os.Bundle, boolean);
+ method public static android.app.PendingIntent getActivity(android.content.Context, int, android.content.Intent, int, boolean);
method public static android.app.PendingIntent? getBroadcast(android.content.Context, int, android.content.Intent, int, boolean);
method @RequiresApi(26) public static android.app.PendingIntent getForegroundService(android.content.Context, int, android.content.Intent, int, boolean);
method public static android.app.PendingIntent getService(android.content.Context, int, android.content.Intent, int, boolean);
@@ -902,8 +903,8 @@
}
public final class RemoteActionCompat implements androidx.versionedparcelable.VersionedParcelable {
- ctor public RemoteActionCompat(androidx.core.graphics.drawable.IconCompat, CharSequence, CharSequence, android.app.PendingIntent);
ctor public RemoteActionCompat(androidx.core.app.RemoteActionCompat);
+ ctor public RemoteActionCompat(androidx.core.graphics.drawable.IconCompat, CharSequence, CharSequence, android.app.PendingIntent);
method @RequiresApi(26) public static androidx.core.app.RemoteActionCompat createFromRemoteAction(android.app.RemoteAction);
method public android.app.PendingIntent getActionIntent();
method public CharSequence getContentDescription();
@@ -960,8 +961,8 @@
}
public final class ShareCompat {
- method @Deprecated public static void configureMenuItem(android.view.MenuItem, androidx.core.app.ShareCompat.IntentBuilder);
method @Deprecated public static void configureMenuItem(android.view.Menu, @IdRes int, androidx.core.app.ShareCompat.IntentBuilder);
+ method @Deprecated public static void configureMenuItem(android.view.MenuItem, androidx.core.app.ShareCompat.IntentBuilder);
method public static android.content.ComponentName? getCallingActivity(android.app.Activity);
method public static String? getCallingPackage(android.app.Activity);
field public static final String EXTRA_CALLING_ACTIVITY = "androidx.core.app.EXTRA_CALLING_ACTIVITY";
@@ -982,8 +983,8 @@
method public android.content.Intent createChooserIntent();
method @Deprecated public static androidx.core.app.ShareCompat.IntentBuilder from(android.app.Activity);
method public android.content.Intent getIntent();
- method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(CharSequence?);
method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(@StringRes int);
+ method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(CharSequence?);
method public androidx.core.app.ShareCompat.IntentBuilder setEmailBcc(String![]?);
method public androidx.core.app.ShareCompat.IntentBuilder setEmailCc(String![]?);
method public androidx.core.app.ShareCompat.IntentBuilder setEmailTo(String![]?);
@@ -1038,8 +1039,8 @@
method public androidx.core.app.TaskStackBuilder addNextIntent(android.content.Intent);
method public androidx.core.app.TaskStackBuilder addNextIntentWithParentStack(android.content.Intent);
method public androidx.core.app.TaskStackBuilder addParentStack(android.app.Activity);
- method public androidx.core.app.TaskStackBuilder addParentStack(Class<?>);
method public androidx.core.app.TaskStackBuilder addParentStack(android.content.ComponentName);
+ method public androidx.core.app.TaskStackBuilder addParentStack(Class<?>);
method public static androidx.core.app.TaskStackBuilder create(android.content.Context);
method public android.content.Intent? editIntentAt(int);
method @Deprecated public static androidx.core.app.TaskStackBuilder! from(android.content.Context!);
@@ -1077,14 +1078,16 @@
method public static java.io.File getCodeCacheDir(android.content.Context);
method @ColorInt public static int getColor(android.content.Context, @ColorRes int);
method public static android.content.res.ColorStateList? getColorStateList(android.content.Context, @ColorRes int);
+ method public static android.content.Context getContextForLanguage(android.content.Context);
method public static java.io.File? getDataDir(android.content.Context);
- method public static android.view.Display getDisplay(@DisplayContext android.content.Context);
+ method public static android.view.Display getDisplayOrDefault(@DisplayContext android.content.Context);
method public static android.graphics.drawable.Drawable? getDrawable(android.content.Context, @DrawableRes int);
method public static java.io.File![] getExternalCacheDirs(android.content.Context);
method public static java.io.File![] getExternalFilesDirs(android.content.Context, String?);
method public static java.util.concurrent.Executor getMainExecutor(android.content.Context);
method public static java.io.File? getNoBackupFilesDir(android.content.Context);
method public static java.io.File![] getObbDirs(android.content.Context);
+ method public static String getString(android.content.Context, int);
method public static <T> T? getSystemService(android.content.Context, Class<T!>);
method public static String? getSystemServiceName(android.content.Context, Class<?>);
method public static boolean isDeviceProtectedStorage(android.content.Context);
@@ -1134,11 +1137,11 @@
public static final class IntentSanitizer.Builder {
ctor public IntentSanitizer.Builder();
- method public androidx.core.content.IntentSanitizer.Builder allowAction(String);
method public androidx.core.content.IntentSanitizer.Builder allowAction(androidx.core.util.Predicate<java.lang.String!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowAction(String);
method public androidx.core.content.IntentSanitizer.Builder allowAnyComponent();
- method public androidx.core.content.IntentSanitizer.Builder allowCategory(String);
method public androidx.core.content.IntentSanitizer.Builder allowCategory(androidx.core.util.Predicate<java.lang.String!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowCategory(String);
method public androidx.core.content.IntentSanitizer.Builder allowClipData(androidx.core.util.Predicate<android.content.ClipData!>);
method public androidx.core.content.IntentSanitizer.Builder allowClipDataText();
method public androidx.core.content.IntentSanitizer.Builder allowClipDataUri(androidx.core.util.Predicate<android.net.Uri!>);
@@ -1148,23 +1151,23 @@
method public androidx.core.content.IntentSanitizer.Builder allowComponentWithPackage(String);
method public androidx.core.content.IntentSanitizer.Builder allowData(androidx.core.util.Predicate<android.net.Uri!>);
method public androidx.core.content.IntentSanitizer.Builder allowDataWithAuthority(String);
+ method public androidx.core.content.IntentSanitizer.Builder allowExtra(String, androidx.core.util.Predicate<java.lang.Object!>);
method public androidx.core.content.IntentSanitizer.Builder allowExtra(String, Class<?>);
method public <T> androidx.core.content.IntentSanitizer.Builder allowExtra(String, Class<T!>, androidx.core.util.Predicate<T!>);
- method public androidx.core.content.IntentSanitizer.Builder allowExtra(String, androidx.core.util.Predicate<java.lang.Object!>);
- method public androidx.core.content.IntentSanitizer.Builder allowExtraOutput(String);
method public androidx.core.content.IntentSanitizer.Builder allowExtraOutput(androidx.core.util.Predicate<android.net.Uri!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowExtraOutput(String);
method public androidx.core.content.IntentSanitizer.Builder allowExtraStream(androidx.core.util.Predicate<android.net.Uri!>);
method public androidx.core.content.IntentSanitizer.Builder allowExtraStreamUriWithAuthority(String);
method public androidx.core.content.IntentSanitizer.Builder allowFlags(int);
method public androidx.core.content.IntentSanitizer.Builder allowHistoryStackFlags();
method public androidx.core.content.IntentSanitizer.Builder allowIdentifier();
- method public androidx.core.content.IntentSanitizer.Builder allowPackage(String);
method public androidx.core.content.IntentSanitizer.Builder allowPackage(androidx.core.util.Predicate<java.lang.String!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowPackage(String);
method public androidx.core.content.IntentSanitizer.Builder allowReceiverFlags();
method public androidx.core.content.IntentSanitizer.Builder allowSelector();
method public androidx.core.content.IntentSanitizer.Builder allowSourceBounds();
- method public androidx.core.content.IntentSanitizer.Builder allowType(String);
method public androidx.core.content.IntentSanitizer.Builder allowType(androidx.core.util.Predicate<java.lang.String!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowType(String);
method public androidx.core.content.IntentSanitizer build();
}
@@ -1459,8 +1462,8 @@
method public static void colorToLAB(@ColorInt int, double[]);
method public static void colorToM3HCT(@ColorInt int, float[]);
method public static void colorToXYZ(@ColorInt int, double[]);
- method public static int compositeColors(@ColorInt int, @ColorInt int);
method @RequiresApi(26) public static android.graphics.Color compositeColors(android.graphics.Color, android.graphics.Color);
+ method public static int compositeColors(@ColorInt int, @ColorInt int);
method public static double distanceEuclidean(double[], double[]);
method @ColorInt public static int setAlphaComponent(@ColorInt int, @IntRange(from=0, to=255) int);
}
@@ -1469,8 +1472,8 @@
method public static androidx.core.graphics.Insets add(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
method public static androidx.core.graphics.Insets max(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
method public static androidx.core.graphics.Insets min(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
- method public static androidx.core.graphics.Insets of(int, int, int, int);
method public static androidx.core.graphics.Insets of(android.graphics.Rect);
+ method public static androidx.core.graphics.Insets of(int, int, int, int);
method public static androidx.core.graphics.Insets subtract(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
method @RequiresApi(api=29) public static androidx.core.graphics.Insets toCompatInsets(android.graphics.Insets);
method @RequiresApi(29) public android.graphics.Insets toPlatformInsets();
@@ -1533,11 +1536,11 @@
method public static androidx.core.graphics.drawable.IconCompat? createFromBundle(android.os.Bundle);
method @RequiresApi(23) public static androidx.core.graphics.drawable.IconCompat? createFromIcon(android.content.Context, android.graphics.drawable.Icon);
method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmap(android.graphics.Bitmap);
- method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmapContentUri(String);
method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmapContentUri(android.net.Uri);
+ method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmapContentUri(String);
method public static androidx.core.graphics.drawable.IconCompat createWithBitmap(android.graphics.Bitmap);
- method public static androidx.core.graphics.drawable.IconCompat createWithContentUri(String);
method public static androidx.core.graphics.drawable.IconCompat createWithContentUri(android.net.Uri);
+ method public static androidx.core.graphics.drawable.IconCompat createWithContentUri(String);
method public static androidx.core.graphics.drawable.IconCompat createWithData(byte[], int, int);
method public static androidx.core.graphics.drawable.IconCompat createWithResource(android.content.Context, @DrawableRes int);
method @DrawableRes public int getResId();
@@ -1587,8 +1590,8 @@
public final class RoundedBitmapDrawableFactory {
method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, android.graphics.Bitmap?);
- method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, String);
method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, java.io.InputStream);
+ method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, String);
}
}
@@ -1719,8 +1722,8 @@
method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public static boolean registerGnssStatusCallback(android.location.LocationManager, androidx.core.location.GnssStatusCompat.Callback, android.os.Handler);
method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public static boolean registerGnssStatusCallback(android.location.LocationManager, java.util.concurrent.Executor, androidx.core.location.GnssStatusCompat.Callback);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void removeUpdates(android.location.LocationManager, androidx.core.location.LocationListenerCompat);
- method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void requestLocationUpdates(android.location.LocationManager, String, androidx.core.location.LocationRequestCompat, java.util.concurrent.Executor, androidx.core.location.LocationListenerCompat);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void requestLocationUpdates(android.location.LocationManager, String, androidx.core.location.LocationRequestCompat, androidx.core.location.LocationListenerCompat, android.os.Looper);
+ method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void requestLocationUpdates(android.location.LocationManager, String, androidx.core.location.LocationRequestCompat, java.util.concurrent.Executor, androidx.core.location.LocationListenerCompat);
method @RequiresApi(android.os.Build.VERSION_CODES.N) public static void unregisterGnssMeasurementsCallback(android.location.LocationManager, android.location.GnssMeasurementsEvent.Callback);
method public static void unregisterGnssStatusCallback(android.location.LocationManager, androidx.core.location.GnssStatusCompat.Callback);
}
@@ -1742,8 +1745,8 @@
}
public static final class LocationRequestCompat.Builder {
- ctor public LocationRequestCompat.Builder(long);
ctor public LocationRequestCompat.Builder(androidx.core.location.LocationRequestCompat);
+ ctor public LocationRequestCompat.Builder(long);
method public androidx.core.location.LocationRequestCompat build();
method public androidx.core.location.LocationRequestCompat.Builder clearMinUpdateIntervalMillis();
method public androidx.core.location.LocationRequestCompat.Builder setDurationMillis(@IntRange(from=1) long);
@@ -1762,8 +1765,8 @@
public class MathUtils {
method public static int addExact(int, int);
method public static long addExact(long, long);
- method public static float clamp(float, float, float);
method public static double clamp(double, double, double);
+ method public static float clamp(float, float, float);
method public static int clamp(int, int, int);
method public static long clamp(long, long, long);
method public static int decrementExact(int);
@@ -1799,10 +1802,10 @@
method public java.util.Map<java.lang.String!,java.lang.String!>? getHeaders();
method public String? getSubject();
method public String? getTo();
- method public static boolean isMailTo(String?);
method public static boolean isMailTo(android.net.Uri?);
- method public static androidx.core.net.MailTo parse(String) throws androidx.core.net.ParseException;
+ method public static boolean isMailTo(String?);
method public static androidx.core.net.MailTo parse(android.net.Uri) throws androidx.core.net.ParseException;
+ method public static androidx.core.net.MailTo parse(String) throws androidx.core.net.ParseException;
field public static final String MAILTO_SCHEME = "mailto:";
}
@@ -1876,6 +1879,7 @@
public final class ConfigurationCompat {
method public static androidx.core.os.LocaleListCompat getLocales(android.content.res.Configuration);
+ method public static void setLocales(android.content.res.Configuration, androidx.core.os.LocaleListCompat);
}
public final class EnvironmentCompat {
@@ -1908,8 +1912,8 @@
method @IntRange(from=0) public int size();
method public String toLanguageTags();
method public Object? unwrap();
- method @Deprecated @RequiresApi(24) public static androidx.core.os.LocaleListCompat! wrap(Object!);
method @RequiresApi(24) public static androidx.core.os.LocaleListCompat wrap(android.os.LocaleList);
+ method @Deprecated @RequiresApi(24) public static androidx.core.os.LocaleListCompat! wrap(Object!);
}
public final class MessageCompat {
@@ -1993,8 +1997,8 @@
}
public final class FontRequest {
- ctor public FontRequest(String, String, String, java.util.List<java.util.List<byte[]!>!>);
ctor public FontRequest(String, String, String, @ArrayRes int);
+ ctor public FontRequest(String, String, String, java.util.List<java.util.List<byte[]!>!>);
method public java.util.List<java.util.List<byte[]!>!>? getCertificates();
method @ArrayRes public int getCertificatesArrayResId();
method public String getProviderAuthority();
@@ -2081,17 +2085,17 @@
method public static androidx.core.text.BidiFormatter! getInstance(boolean);
method public static androidx.core.text.BidiFormatter! getInstance(java.util.Locale!);
method public boolean getStereoReset();
- method public boolean isRtl(String!);
method public boolean isRtl(CharSequence!);
+ method public boolean isRtl(String!);
method public boolean isRtlContext();
- method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
- method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
- method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!);
+ method public CharSequence! unicodeWrap(CharSequence!);
method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!);
- method public String! unicodeWrap(String!, boolean);
+ method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
method public CharSequence! unicodeWrap(CharSequence!, boolean);
method public String! unicodeWrap(String!);
- method public CharSequence! unicodeWrap(CharSequence!);
+ method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!);
+ method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
+ method public String! unicodeWrap(String!, boolean);
}
public static final class BidiFormatter.Builder {
@@ -2192,13 +2196,13 @@
public final class LinkifyCompat {
method public static boolean addLinks(android.text.Spannable, int);
+ method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?);
+ method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+ method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, String![]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
method public static boolean addLinks(android.widget.TextView, int);
method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?);
method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?, String![]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
- method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?);
- method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
- method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, String![]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
}
}
@@ -2323,8 +2327,8 @@
method public int getFlags();
method public android.net.Uri? getLinkUri();
method public int getSource();
- method public android.util.Pair<androidx.core.view.ContentInfoCompat!,androidx.core.view.ContentInfoCompat!> partition(androidx.core.util.Predicate<android.content.ClipData.Item!>);
method @RequiresApi(31) public static android.util.Pair<android.view.ContentInfo!,android.view.ContentInfo!> partition(android.view.ContentInfo, java.util.function.Predicate<android.content.ClipData.Item!>);
+ method public android.util.Pair<androidx.core.view.ContentInfoCompat!,androidx.core.view.ContentInfoCompat!> partition(androidx.core.util.Predicate<android.content.ClipData.Item!>);
method @RequiresApi(31) public android.view.ContentInfo toContentInfo();
method @RequiresApi(31) public static androidx.core.view.ContentInfoCompat toContentInfoCompat(android.view.ContentInfo);
field public static final int FLAG_CONVERT_TO_PLAIN_TEXT = 1; // 0x1
@@ -2337,8 +2341,8 @@
}
public static final class ContentInfoCompat.Builder {
- ctor public ContentInfoCompat.Builder(androidx.core.view.ContentInfoCompat);
ctor public ContentInfoCompat.Builder(android.content.ClipData, int);
+ ctor public ContentInfoCompat.Builder(androidx.core.view.ContentInfoCompat);
method public androidx.core.view.ContentInfoCompat build();
method public androidx.core.view.ContentInfoCompat.Builder setClip(android.content.ClipData);
method public androidx.core.view.ContentInfoCompat.Builder setExtras(android.os.Bundle?);
@@ -2407,6 +2411,31 @@
field public static final int START = 8388611; // 0x800003
}
+ public final class HapticFeedbackConstantsCompat {
+ field public static final int CLOCK_TICK = 4; // 0x4
+ field public static final int CONFIRM = 16; // 0x10
+ field public static final int CONTEXT_CLICK = 6; // 0x6
+ field public static final int DRAG_START = 25; // 0x19
+ field public static final int FLAG_IGNORE_VIEW_SETTING = 1; // 0x1
+ field public static final int GESTURE_END = 13; // 0xd
+ field public static final int GESTURE_START = 12; // 0xc
+ field public static final int GESTURE_THRESHOLD_ACTIVATE = 23; // 0x17
+ field public static final int GESTURE_THRESHOLD_DEACTIVATE = 24; // 0x18
+ field public static final int KEYBOARD_PRESS = 3; // 0x3
+ field public static final int KEYBOARD_RELEASE = 7; // 0x7
+ field public static final int KEYBOARD_TAP = 3; // 0x3
+ field public static final int LONG_PRESS = 0; // 0x0
+ field public static final int NO_HAPTICS = -1; // 0xffffffff
+ field public static final int REJECT = 17; // 0x11
+ field public static final int SEGMENT_FREQUENT_TICK = 27; // 0x1b
+ field public static final int SEGMENT_TICK = 26; // 0x1a
+ field public static final int TEXT_HANDLE_MOVE = 9; // 0x9
+ field public static final int TOGGLE_OFF = 22; // 0x16
+ field public static final int TOGGLE_ON = 21; // 0x15
+ field public static final int VIRTUAL_KEY = 1; // 0x1
+ field public static final int VIRTUAL_KEY_RELEASE = 8; // 0x8
+ }
+
public final class InputDeviceCompat {
field public static final int SOURCE_ANY = -256; // 0xffffff00
field public static final int SOURCE_CLASS_BUTTON = 1; // 0x1
@@ -2717,10 +2746,10 @@
}
public final class ScaleGestureDetectorCompat {
- method @Deprecated public static boolean isQuickScaleEnabled(Object!);
method public static boolean isQuickScaleEnabled(android.view.ScaleGestureDetector);
- method @Deprecated public static void setQuickScaleEnabled(Object!, boolean);
+ method @Deprecated public static boolean isQuickScaleEnabled(Object!);
method public static void setQuickScaleEnabled(android.view.ScaleGestureDetector, boolean);
+ method @Deprecated public static void setQuickScaleEnabled(Object!, boolean);
}
public interface ScrollingView {
@@ -2768,8 +2797,8 @@
method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[]?, int[]?);
method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[]?, int[]?, int);
method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]?);
- method public static void dispatchNestedScroll(android.view.View, int, int, int, int, int[]?, int, int[]);
method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]?, int);
+ method public static void dispatchNestedScroll(android.view.View, int, int, int, int, int[]?, int, int[]);
method public static void dispatchStartTemporaryDetach(android.view.View);
method public static void enableAccessibleClickableSpanSupport(android.view.View);
method public static int generateViewId();
@@ -2854,6 +2883,8 @@
method public static void onInitializeAccessibilityNodeInfo(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
method @Deprecated public static void onPopulateAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
method public static boolean performAccessibilityAction(android.view.View, int, android.os.Bundle?);
+ method public static boolean performHapticFeedback(android.view.View, int);
+ method public static boolean performHapticFeedback(android.view.View, int, int);
method public static androidx.core.view.ContentInfoCompat? performReceiveContent(android.view.View, androidx.core.view.ContentInfoCompat);
method public static void postInvalidateOnAnimation(android.view.View);
method public static void postInvalidateOnAnimation(android.view.View, int, int, int, int);
@@ -3166,8 +3197,8 @@
method public boolean isConsumed();
method public boolean isRound();
method public boolean isVisible(int);
- method @Deprecated public androidx.core.view.WindowInsetsCompat replaceSystemWindowInsets(int, int, int, int);
method @Deprecated public androidx.core.view.WindowInsetsCompat replaceSystemWindowInsets(android.graphics.Rect);
+ method @Deprecated public androidx.core.view.WindowInsetsCompat replaceSystemWindowInsets(int, int, int, int);
method @RequiresApi(20) public android.view.WindowInsets? toWindowInsets();
method @RequiresApi(20) public static androidx.core.view.WindowInsetsCompat toWindowInsetsCompat(android.view.WindowInsets);
method @RequiresApi(20) public static androidx.core.view.WindowInsetsCompat toWindowInsetsCompat(android.view.WindowInsets, android.view.View?);
@@ -3300,8 +3331,8 @@
public class AccessibilityNodeInfoCompat {
ctor @Deprecated public AccessibilityNodeInfoCompat(Object!);
- method public void addAction(int);
method public void addAction(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!);
+ method public void addAction(int);
method public void addChild(android.view.View!);
method public void addChild(android.view.View!, int);
method public boolean canOpenPopup();
@@ -3374,9 +3405,9 @@
method public boolean isTextEntryKey();
method public boolean isTextSelectable();
method public boolean isVisibleToUser();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain();
method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(android.view.View!);
method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(android.view.View!, int);
- method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain();
method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(androidx.core.view.accessibility.AccessibilityNodeInfoCompat!);
method public boolean performAction(int);
method public boolean performAction(int, android.os.Bundle!);
@@ -3551,8 +3582,8 @@
method public int getRowCount();
method public int getSelectionMode();
method public boolean isHierarchical();
- method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean, int);
method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean);
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean, int);
field public static final int SELECTION_MODE_MULTIPLE = 2; // 0x2
field public static final int SELECTION_MODE_NONE = 0; // 0x0
field public static final int SELECTION_MODE_SINGLE = 1; // 0x1
@@ -3565,8 +3596,8 @@
method public int getRowSpan();
method @Deprecated public boolean isHeading();
method public boolean isSelected();
- method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean, boolean);
method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean);
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean, boolean);
}
public static class AccessibilityNodeInfoCompat.RangeInfoCompat {
@@ -3628,8 +3659,8 @@
method @Deprecated public boolean isFullScreen();
method @Deprecated public boolean isPassword();
method @Deprecated public boolean isScrollable();
- method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain(androidx.core.view.accessibility.AccessibilityRecordCompat!);
method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain();
+ method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain(androidx.core.view.accessibility.AccessibilityRecordCompat!);
method @Deprecated public void recycle();
method @Deprecated public void setAddedCount(int);
method @Deprecated public void setBeforeText(CharSequence!);
@@ -3641,19 +3672,19 @@
method @Deprecated public void setFromIndex(int);
method @Deprecated public void setFullScreen(boolean);
method @Deprecated public void setItemCount(int);
- method @Deprecated public void setMaxScrollX(int);
method public static void setMaxScrollX(android.view.accessibility.AccessibilityRecord, int);
- method @Deprecated public void setMaxScrollY(int);
+ method @Deprecated public void setMaxScrollX(int);
method public static void setMaxScrollY(android.view.accessibility.AccessibilityRecord, int);
+ method @Deprecated public void setMaxScrollY(int);
method @Deprecated public void setParcelableData(android.os.Parcelable!);
method @Deprecated public void setPassword(boolean);
method @Deprecated public void setRemovedCount(int);
method @Deprecated public void setScrollX(int);
method @Deprecated public void setScrollY(int);
method @Deprecated public void setScrollable(boolean);
+ method public static void setSource(android.view.accessibility.AccessibilityRecord, android.view.View?, int);
method @Deprecated public void setSource(android.view.View!);
method @Deprecated public void setSource(android.view.View!, int);
- method public static void setSource(android.view.accessibility.AccessibilityRecord, android.view.View?, int);
method @Deprecated public void setToIndex(int);
}
@@ -3869,9 +3900,9 @@
method public static float getDistance(android.widget.EdgeEffect);
method @Deprecated public boolean isFinished();
method @Deprecated public boolean onAbsorb(int);
+ method public static void onPull(android.widget.EdgeEffect, float, float);
method @Deprecated public boolean onPull(float);
method @Deprecated public boolean onPull(float, float);
- method public static void onPull(android.widget.EdgeEffect, float, float);
method public static float onPullDistance(android.widget.EdgeEffect, float, float);
method @Deprecated public boolean onRelease();
method @Deprecated public void setSize(int, int);
@@ -3885,8 +3916,8 @@
}
public final class ListPopupWindowCompat {
- method @Deprecated public static android.view.View.OnTouchListener! createDragToOpenListener(Object!, android.view.View!);
method public static android.view.View.OnTouchListener? createDragToOpenListener(android.widget.ListPopupWindow, android.view.View);
+ method @Deprecated public static android.view.View.OnTouchListener! createDragToOpenListener(Object!, android.view.View!);
}
public class ListViewAutoScrollHelper extends androidx.core.widget.AutoScrollHelper {
@@ -3914,8 +3945,8 @@
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollOffset();
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollRange();
method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, int);
- method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]);
method public boolean dispatchNestedScroll(int, int, int, int, int[]?, int);
+ method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]);
method public boolean executeKeyEvent(android.view.KeyEvent);
method public void fling(int);
method public boolean fullScroll(int);
@@ -3925,8 +3956,8 @@
method public boolean isSmoothScrollingEnabled();
method public void onAttachedToWindow();
method public void onNestedPreScroll(android.view.View, int, int, int[], int);
- method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]);
method public void onNestedScroll(android.view.View, int, int, int, int, int);
+ method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]);
method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
method public void onStopNestedScroll(android.view.View, int);
diff --git a/core/core/api/restricted_current.txt b/core/core/api/restricted_current.txt
index 6a02dd0..5f1829e 100644
--- a/core/core/api/restricted_current.txt
+++ b/core/core/api/restricted_current.txt
@@ -123,6 +123,11 @@
method public static void onActivityCreate(android.app.Activity);
}
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class AppLocalesStorageHelper {
+ method public static void persistLocales(android.content.Context, String);
+ method public static String readLocales(android.content.Context);
+ }
+
public final class AppOpsManagerCompat {
method public static int checkOrNoteProxyOp(android.content.Context, int, String, String);
method public static int noteOp(android.content.Context, String, int, String);
@@ -200,8 +205,8 @@
@Deprecated public abstract class JobIntentService extends android.app.Service {
ctor @Deprecated public JobIntentService();
- method @Deprecated public static void enqueueWork(android.content.Context, Class<?>, int, android.content.Intent);
method @Deprecated public static void enqueueWork(android.content.Context, android.content.ComponentName, int, android.content.Intent);
+ method @Deprecated public static void enqueueWork(android.content.Context, Class<?>, int, android.content.Intent);
method @Deprecated public boolean isStopped();
method @Deprecated public android.os.IBinder! onBind(android.content.Intent);
method @Deprecated protected abstract void onHandleWork(android.content.Intent);
@@ -210,6 +215,7 @@
}
public final class LocaleManagerCompat {
+ method @AnyThread public static androidx.core.os.LocaleListCompat getApplicationLocales(android.content.Context);
method @AnyThread public static androidx.core.os.LocaleListCompat getSystemLocales(android.content.Context);
}
@@ -222,8 +228,8 @@
public final class NavUtils {
method public static android.content.Intent? getParentActivityIntent(android.app.Activity);
- method public static android.content.Intent? getParentActivityIntent(android.content.Context, Class<?>) throws android.content.pm.PackageManager.NameNotFoundException;
method public static android.content.Intent? getParentActivityIntent(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static android.content.Intent? getParentActivityIntent(android.content.Context, Class<?>) throws android.content.pm.PackageManager.NameNotFoundException;
method public static String? getParentActivityName(android.app.Activity);
method public static String? getParentActivityName(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
method public static void navigateUpFromSameTask(android.app.Activity);
@@ -439,8 +445,8 @@
}
public static class NotificationCompat.Action {
- ctor public NotificationCompat.Action(int, CharSequence?, android.app.PendingIntent?);
ctor public NotificationCompat.Action(androidx.core.graphics.drawable.IconCompat?, CharSequence?, android.app.PendingIntent?);
+ ctor public NotificationCompat.Action(int, CharSequence?, android.app.PendingIntent?);
method public android.app.PendingIntent? getActionIntent();
method public boolean getAllowGeneratedReplies();
method public androidx.core.app.RemoteInput![]? getDataOnlyRemoteInputs();
@@ -470,9 +476,9 @@
}
public static final class NotificationCompat.Action.Builder {
+ ctor public NotificationCompat.Action.Builder(androidx.core.app.NotificationCompat.Action);
ctor public NotificationCompat.Action.Builder(androidx.core.graphics.drawable.IconCompat?, CharSequence?, android.app.PendingIntent?);
ctor public NotificationCompat.Action.Builder(int, CharSequence?, android.app.PendingIntent?);
- ctor public NotificationCompat.Action.Builder(androidx.core.app.NotificationCompat.Action);
method public androidx.core.app.NotificationCompat.Action.Builder addExtras(android.os.Bundle?);
method public androidx.core.app.NotificationCompat.Action.Builder addRemoteInput(androidx.core.app.RemoteInput?);
method public androidx.core.app.NotificationCompat.Action build();
@@ -553,8 +559,8 @@
public static final class NotificationCompat.BubbleMetadata.Builder {
ctor @Deprecated public NotificationCompat.BubbleMetadata.Builder();
- ctor @RequiresApi(30) public NotificationCompat.BubbleMetadata.Builder(String);
ctor public NotificationCompat.BubbleMetadata.Builder(android.app.PendingIntent, androidx.core.graphics.drawable.IconCompat);
+ ctor @RequiresApi(30) public NotificationCompat.BubbleMetadata.Builder(String);
method public androidx.core.app.NotificationCompat.BubbleMetadata build();
method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setAutoExpandBubble(boolean);
method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDeleteIntent(android.app.PendingIntent?);
@@ -566,16 +572,16 @@
}
public static class NotificationCompat.Builder {
+ ctor @Deprecated public NotificationCompat.Builder(android.content.Context);
ctor @RequiresApi(19) public NotificationCompat.Builder(android.content.Context, android.app.Notification);
ctor public NotificationCompat.Builder(android.content.Context, String);
- ctor @Deprecated public NotificationCompat.Builder(android.content.Context);
- method public androidx.core.app.NotificationCompat.Builder addAction(int, CharSequence?, android.app.PendingIntent?);
method public androidx.core.app.NotificationCompat.Builder addAction(androidx.core.app.NotificationCompat.Action?);
+ method public androidx.core.app.NotificationCompat.Builder addAction(int, CharSequence?, android.app.PendingIntent?);
method public androidx.core.app.NotificationCompat.Builder addExtras(android.os.Bundle?);
- method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder addInvisibleAction(int, CharSequence?, android.app.PendingIntent?);
method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder addInvisibleAction(androidx.core.app.NotificationCompat.Action?);
- method @Deprecated public androidx.core.app.NotificationCompat.Builder addPerson(String?);
+ method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder addInvisibleAction(int, CharSequence?, android.app.PendingIntent?);
method public androidx.core.app.NotificationCompat.Builder addPerson(androidx.core.app.Person?);
+ method @Deprecated public androidx.core.app.NotificationCompat.Builder addPerson(String?);
method public android.app.Notification build();
method public androidx.core.app.NotificationCompat.Builder clearActions();
method public androidx.core.app.NotificationCompat.Builder clearInvisibleActions();
@@ -669,8 +675,8 @@
method public androidx.core.app.NotificationCompat.CallStyle setAnswerButtonColorHint(@ColorInt int);
method public androidx.core.app.NotificationCompat.CallStyle setDeclineButtonColorHint(@ColorInt int);
method public androidx.core.app.NotificationCompat.CallStyle setIsVideo(boolean);
- method @RequiresApi(23) public androidx.core.app.NotificationCompat.CallStyle setVerificationIcon(android.graphics.drawable.Icon?);
method public androidx.core.app.NotificationCompat.CallStyle setVerificationIcon(android.graphics.Bitmap?);
+ method @RequiresApi(23) public androidx.core.app.NotificationCompat.CallStyle setVerificationIcon(android.graphics.drawable.Icon?);
method public androidx.core.app.NotificationCompat.CallStyle setVerificationText(CharSequence?);
field public static final int CALL_TYPE_INCOMING = 1; // 0x1
field public static final int CALL_TYPE_ONGOING = 2; // 0x2
@@ -732,12 +738,12 @@
}
public static class NotificationCompat.MessagingStyle extends androidx.core.app.NotificationCompat.Style {
- ctor @Deprecated public NotificationCompat.MessagingStyle(CharSequence);
ctor public NotificationCompat.MessagingStyle(androidx.core.app.Person);
+ ctor @Deprecated public NotificationCompat.MessagingStyle(CharSequence);
method public androidx.core.app.NotificationCompat.MessagingStyle addHistoricMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message?);
- method @Deprecated public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, CharSequence?);
- method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, androidx.core.app.Person?);
method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message?);
+ method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, androidx.core.app.Person?);
+ method @Deprecated public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, CharSequence?);
method public static androidx.core.app.NotificationCompat.MessagingStyle? extractMessagingStyleFromNotification(android.app.Notification);
method public CharSequence? getConversationTitle();
method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!> getHistoricMessages();
@@ -938,8 +944,8 @@
}
public static class NotificationManagerCompat.NotificationWithIdAndTag {
- ctor public NotificationManagerCompat.NotificationWithIdAndTag(String?, int, android.app.Notification);
ctor public NotificationManagerCompat.NotificationWithIdAndTag(int, android.app.Notification);
+ ctor public NotificationManagerCompat.NotificationWithIdAndTag(String?, int, android.app.Notification);
}
public interface OnMultiWindowModeChangedProvider {
@@ -960,8 +966,8 @@
public final class PendingIntentCompat {
method public static android.app.PendingIntent getActivities(android.content.Context, int, android.content.Intent![], int, android.os.Bundle, boolean);
method public static android.app.PendingIntent getActivities(android.content.Context, int, android.content.Intent![], int, boolean);
- method public static android.app.PendingIntent getActivity(android.content.Context, int, android.content.Intent, int, boolean);
method public static android.app.PendingIntent getActivity(android.content.Context, int, android.content.Intent, int, android.os.Bundle, boolean);
+ method public static android.app.PendingIntent getActivity(android.content.Context, int, android.content.Intent, int, boolean);
method public static android.app.PendingIntent? getBroadcast(android.content.Context, int, android.content.Intent, int, boolean);
method @RequiresApi(26) public static android.app.PendingIntent getForegroundService(android.content.Context, int, android.content.Intent, int, boolean);
method public static android.app.PendingIntent getService(android.content.Context, int, android.content.Intent, int, boolean);
@@ -1003,9 +1009,9 @@
}
@androidx.versionedparcelable.VersionedParcelize(jetifyAs="android.support.v4.app.RemoteActionCompat") public final class RemoteActionCompat implements androidx.versionedparcelable.VersionedParcelable {
- ctor public RemoteActionCompat(androidx.core.graphics.drawable.IconCompat, CharSequence, CharSequence, android.app.PendingIntent);
ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public RemoteActionCompat();
ctor public RemoteActionCompat(androidx.core.app.RemoteActionCompat);
+ ctor public RemoteActionCompat(androidx.core.graphics.drawable.IconCompat, CharSequence, CharSequence, android.app.PendingIntent);
method @RequiresApi(26) public static androidx.core.app.RemoteActionCompat createFromRemoteAction(android.app.RemoteAction);
method public android.app.PendingIntent getActionIntent();
method public CharSequence getContentDescription();
@@ -1077,8 +1083,8 @@
}
public final class ShareCompat {
- method @Deprecated public static void configureMenuItem(android.view.MenuItem, androidx.core.app.ShareCompat.IntentBuilder);
method @Deprecated public static void configureMenuItem(android.view.Menu, @IdRes int, androidx.core.app.ShareCompat.IntentBuilder);
+ method @Deprecated public static void configureMenuItem(android.view.MenuItem, androidx.core.app.ShareCompat.IntentBuilder);
method public static android.content.ComponentName? getCallingActivity(android.app.Activity);
method public static String? getCallingPackage(android.app.Activity);
field public static final String EXTRA_CALLING_ACTIVITY = "androidx.core.app.EXTRA_CALLING_ACTIVITY";
@@ -1099,8 +1105,8 @@
method public android.content.Intent createChooserIntent();
method @Deprecated public static androidx.core.app.ShareCompat.IntentBuilder from(android.app.Activity);
method public android.content.Intent getIntent();
- method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(CharSequence?);
method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(@StringRes int);
+ method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(CharSequence?);
method public androidx.core.app.ShareCompat.IntentBuilder setEmailBcc(String![]?);
method public androidx.core.app.ShareCompat.IntentBuilder setEmailCc(String![]?);
method public androidx.core.app.ShareCompat.IntentBuilder setEmailTo(String![]?);
@@ -1155,8 +1161,8 @@
method public androidx.core.app.TaskStackBuilder addNextIntent(android.content.Intent);
method public androidx.core.app.TaskStackBuilder addNextIntentWithParentStack(android.content.Intent);
method public androidx.core.app.TaskStackBuilder addParentStack(android.app.Activity);
- method public androidx.core.app.TaskStackBuilder addParentStack(Class<?>);
method public androidx.core.app.TaskStackBuilder addParentStack(android.content.ComponentName);
+ method public androidx.core.app.TaskStackBuilder addParentStack(Class<?>);
method public static androidx.core.app.TaskStackBuilder create(android.content.Context);
method public android.content.Intent? editIntentAt(int);
method @Deprecated public static androidx.core.app.TaskStackBuilder! from(android.content.Context!);
@@ -1194,14 +1200,16 @@
method public static java.io.File getCodeCacheDir(android.content.Context);
method @ColorInt public static int getColor(android.content.Context, @ColorRes int);
method public static android.content.res.ColorStateList? getColorStateList(android.content.Context, @ColorRes int);
+ method public static android.content.Context getContextForLanguage(android.content.Context);
method public static java.io.File? getDataDir(android.content.Context);
- method public static android.view.Display getDisplay(@DisplayContext android.content.Context);
+ method public static android.view.Display getDisplayOrDefault(@DisplayContext android.content.Context);
method public static android.graphics.drawable.Drawable? getDrawable(android.content.Context, @DrawableRes int);
method public static java.io.File![] getExternalCacheDirs(android.content.Context);
method public static java.io.File![] getExternalFilesDirs(android.content.Context, String?);
method public static java.util.concurrent.Executor getMainExecutor(android.content.Context);
method public static java.io.File? getNoBackupFilesDir(android.content.Context);
method public static java.io.File![] getObbDirs(android.content.Context);
+ method public static String getString(android.content.Context, int);
method public static <T> T? getSystemService(android.content.Context, Class<T!>);
method public static String? getSystemServiceName(android.content.Context, Class<?>);
method public static boolean isDeviceProtectedStorage(android.content.Context);
@@ -1251,11 +1259,11 @@
public static final class IntentSanitizer.Builder {
ctor public IntentSanitizer.Builder();
- method public androidx.core.content.IntentSanitizer.Builder allowAction(String);
method public androidx.core.content.IntentSanitizer.Builder allowAction(androidx.core.util.Predicate<java.lang.String!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowAction(String);
method public androidx.core.content.IntentSanitizer.Builder allowAnyComponent();
- method public androidx.core.content.IntentSanitizer.Builder allowCategory(String);
method public androidx.core.content.IntentSanitizer.Builder allowCategory(androidx.core.util.Predicate<java.lang.String!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowCategory(String);
method public androidx.core.content.IntentSanitizer.Builder allowClipData(androidx.core.util.Predicate<android.content.ClipData!>);
method public androidx.core.content.IntentSanitizer.Builder allowClipDataText();
method public androidx.core.content.IntentSanitizer.Builder allowClipDataUri(androidx.core.util.Predicate<android.net.Uri!>);
@@ -1265,23 +1273,23 @@
method public androidx.core.content.IntentSanitizer.Builder allowComponentWithPackage(String);
method public androidx.core.content.IntentSanitizer.Builder allowData(androidx.core.util.Predicate<android.net.Uri!>);
method public androidx.core.content.IntentSanitizer.Builder allowDataWithAuthority(String);
+ method public androidx.core.content.IntentSanitizer.Builder allowExtra(String, androidx.core.util.Predicate<java.lang.Object!>);
method public androidx.core.content.IntentSanitizer.Builder allowExtra(String, Class<?>);
method public <T> androidx.core.content.IntentSanitizer.Builder allowExtra(String, Class<T!>, androidx.core.util.Predicate<T!>);
- method public androidx.core.content.IntentSanitizer.Builder allowExtra(String, androidx.core.util.Predicate<java.lang.Object!>);
- method public androidx.core.content.IntentSanitizer.Builder allowExtraOutput(String);
method public androidx.core.content.IntentSanitizer.Builder allowExtraOutput(androidx.core.util.Predicate<android.net.Uri!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowExtraOutput(String);
method public androidx.core.content.IntentSanitizer.Builder allowExtraStream(androidx.core.util.Predicate<android.net.Uri!>);
method public androidx.core.content.IntentSanitizer.Builder allowExtraStreamUriWithAuthority(String);
method public androidx.core.content.IntentSanitizer.Builder allowFlags(int);
method public androidx.core.content.IntentSanitizer.Builder allowHistoryStackFlags();
method public androidx.core.content.IntentSanitizer.Builder allowIdentifier();
- method public androidx.core.content.IntentSanitizer.Builder allowPackage(String);
method public androidx.core.content.IntentSanitizer.Builder allowPackage(androidx.core.util.Predicate<java.lang.String!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowPackage(String);
method public androidx.core.content.IntentSanitizer.Builder allowReceiverFlags();
method public androidx.core.content.IntentSanitizer.Builder allowSelector();
method public androidx.core.content.IntentSanitizer.Builder allowSourceBounds();
- method public androidx.core.content.IntentSanitizer.Builder allowType(String);
method public androidx.core.content.IntentSanitizer.Builder allowType(androidx.core.util.Predicate<java.lang.String!>);
+ method public androidx.core.content.IntentSanitizer.Builder allowType(String);
method public androidx.core.content.IntentSanitizer build();
}
@@ -1419,9 +1427,9 @@
}
public static class ShortcutInfoCompat.Builder {
+ ctor @RequiresApi(25) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public ShortcutInfoCompat.Builder(android.content.Context, android.content.pm.ShortcutInfo);
ctor public ShortcutInfoCompat.Builder(android.content.Context, String);
ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public ShortcutInfoCompat.Builder(androidx.core.content.pm.ShortcutInfoCompat);
- ctor @RequiresApi(25) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public ShortcutInfoCompat.Builder(android.content.Context, android.content.pm.ShortcutInfo);
method public androidx.core.content.pm.ShortcutInfoCompat.Builder addCapabilityBinding(String);
method public androidx.core.content.pm.ShortcutInfoCompat.Builder addCapabilityBinding(String, String, java.util.List<java.lang.String!>);
method public androidx.core.content.pm.ShortcutInfoCompat build();
@@ -1568,8 +1576,8 @@
method public static android.graphics.drawable.Drawable? getDrawableForDensity(android.content.res.Resources, @DrawableRes int, int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
method public static float getFloat(android.content.res.Resources, @DimenRes int);
method public static android.graphics.Typeface? getFont(android.content.Context, @FontRes int) throws android.content.res.Resources.NotFoundException;
- method public static void getFont(android.content.Context, @FontRes int, androidx.core.content.res.ResourcesCompat.FontCallback, android.os.Handler?) throws android.content.res.Resources.NotFoundException;
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface? getFont(android.content.Context, @FontRes int, android.util.TypedValue, int, androidx.core.content.res.ResourcesCompat.FontCallback?) throws android.content.res.Resources.NotFoundException;
+ method public static void getFont(android.content.Context, @FontRes int, androidx.core.content.res.ResourcesCompat.FontCallback, android.os.Handler?) throws android.content.res.Resources.NotFoundException;
field @AnyRes public static final int ID_NULL = 0; // 0x0
}
@@ -1695,8 +1703,8 @@
method public static void colorToLAB(@ColorInt int, double[]);
method public static void colorToM3HCT(@ColorInt int, float[]);
method public static void colorToXYZ(@ColorInt int, double[]);
- method public static int compositeColors(@ColorInt int, @ColorInt int);
method @RequiresApi(26) public static android.graphics.Color compositeColors(android.graphics.Color, android.graphics.Color);
+ method public static int compositeColors(@ColorInt int, @ColorInt int);
method public static double distanceEuclidean(double[], double[]);
method @ColorInt public static int setAlphaComponent(@ColorInt int, @IntRange(from=0, to=255) int);
}
@@ -1705,8 +1713,8 @@
method public static androidx.core.graphics.Insets add(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
method public static androidx.core.graphics.Insets max(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
method public static androidx.core.graphics.Insets min(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
- method public static androidx.core.graphics.Insets of(int, int, int, int);
method public static androidx.core.graphics.Insets of(android.graphics.Rect);
+ method public static androidx.core.graphics.Insets of(int, int, int, int);
method public static androidx.core.graphics.Insets subtract(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
method @RequiresApi(api=29) public static androidx.core.graphics.Insets toCompatInsets(android.graphics.Insets);
method @RequiresApi(29) public android.graphics.Insets toPlatformInsets();
@@ -1784,8 +1792,8 @@
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class TypefaceCompatUtil {
method public static void closeQuietly(java.io.Closeable?);
method @RequiresApi(19) public static java.nio.ByteBuffer? copyToDirectBuffer(android.content.Context, android.content.res.Resources, int);
- method public static boolean copyToFile(java.io.File, java.io.InputStream);
method public static boolean copyToFile(java.io.File, android.content.res.Resources, int);
+ method public static boolean copyToFile(java.io.File, java.io.InputStream);
method public static java.io.File? getTempFile(android.content.Context);
method @RequiresApi(19) public static java.nio.ByteBuffer? mmap(android.content.Context, android.os.CancellationSignal?, android.net.Uri);
}
@@ -1823,11 +1831,11 @@
method @RequiresApi(23) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.graphics.drawable.IconCompat? createFromIcon(android.graphics.drawable.Icon);
method @RequiresApi(23) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.graphics.drawable.IconCompat? createFromIconOrNullIfZeroResId(android.graphics.drawable.Icon);
method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmap(android.graphics.Bitmap);
- method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmapContentUri(String);
method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmapContentUri(android.net.Uri);
+ method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmapContentUri(String);
method public static androidx.core.graphics.drawable.IconCompat createWithBitmap(android.graphics.Bitmap);
- method public static androidx.core.graphics.drawable.IconCompat createWithContentUri(String);
method public static androidx.core.graphics.drawable.IconCompat createWithContentUri(android.net.Uri);
+ method public static androidx.core.graphics.drawable.IconCompat createWithContentUri(String);
method public static androidx.core.graphics.drawable.IconCompat createWithData(byte[], int, int);
method public static androidx.core.graphics.drawable.IconCompat createWithResource(android.content.Context, @DrawableRes int);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.graphics.drawable.IconCompat createWithResource(android.content.res.Resources?, String, @DrawableRes int);
@@ -1879,8 +1887,8 @@
public final class RoundedBitmapDrawableFactory {
method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, android.graphics.Bitmap?);
- method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, String);
method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, java.io.InputStream);
+ method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, String);
}
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface TintAwareDrawable {
@@ -2064,8 +2072,8 @@
method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public static boolean registerGnssStatusCallback(android.location.LocationManager, androidx.core.location.GnssStatusCompat.Callback, android.os.Handler);
method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public static boolean registerGnssStatusCallback(android.location.LocationManager, java.util.concurrent.Executor, androidx.core.location.GnssStatusCompat.Callback);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void removeUpdates(android.location.LocationManager, androidx.core.location.LocationListenerCompat);
- method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void requestLocationUpdates(android.location.LocationManager, String, androidx.core.location.LocationRequestCompat, java.util.concurrent.Executor, androidx.core.location.LocationListenerCompat);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void requestLocationUpdates(android.location.LocationManager, String, androidx.core.location.LocationRequestCompat, androidx.core.location.LocationListenerCompat, android.os.Looper);
+ method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void requestLocationUpdates(android.location.LocationManager, String, androidx.core.location.LocationRequestCompat, java.util.concurrent.Executor, androidx.core.location.LocationListenerCompat);
method @RequiresApi(android.os.Build.VERSION_CODES.N) public static void unregisterGnssMeasurementsCallback(android.location.LocationManager, android.location.GnssMeasurementsEvent.Callback);
method public static void unregisterGnssStatusCallback(android.location.LocationManager, androidx.core.location.GnssStatusCompat.Callback);
}
@@ -2087,8 +2095,8 @@
}
public static final class LocationRequestCompat.Builder {
- ctor public LocationRequestCompat.Builder(long);
ctor public LocationRequestCompat.Builder(androidx.core.location.LocationRequestCompat);
+ ctor public LocationRequestCompat.Builder(long);
method public androidx.core.location.LocationRequestCompat build();
method public androidx.core.location.LocationRequestCompat.Builder clearMinUpdateIntervalMillis();
method public androidx.core.location.LocationRequestCompat.Builder setDurationMillis(@IntRange(from=1) long);
@@ -2107,8 +2115,8 @@
public class MathUtils {
method public static int addExact(int, int);
method public static long addExact(long, long);
- method public static float clamp(float, float, float);
method public static double clamp(double, double, double);
+ method public static float clamp(float, float, float);
method public static int clamp(int, int, int);
method public static long clamp(long, long, long);
method public static int decrementExact(int);
@@ -2147,10 +2155,10 @@
method public java.util.Map<java.lang.String!,java.lang.String!>? getHeaders();
method public String? getSubject();
method public String? getTo();
- method public static boolean isMailTo(String?);
method public static boolean isMailTo(android.net.Uri?);
- method public static androidx.core.net.MailTo parse(String) throws androidx.core.net.ParseException;
+ method public static boolean isMailTo(String?);
method public static androidx.core.net.MailTo parse(android.net.Uri) throws androidx.core.net.ParseException;
+ method public static androidx.core.net.MailTo parse(String) throws androidx.core.net.ParseException;
field public static final String MAILTO_SCHEME = "mailto:";
}
@@ -2217,6 +2225,7 @@
public final class ConfigurationCompat {
method public static androidx.core.os.LocaleListCompat getLocales(android.content.res.Configuration);
+ method public static void setLocales(android.content.res.Configuration, androidx.core.os.LocaleListCompat);
}
public final class EnvironmentCompat {
@@ -2249,8 +2258,8 @@
method @IntRange(from=0) public int size();
method public String toLanguageTags();
method public Object? unwrap();
- method @Deprecated @RequiresApi(24) public static androidx.core.os.LocaleListCompat! wrap(Object!);
method @RequiresApi(24) public static androidx.core.os.LocaleListCompat wrap(android.os.LocaleList);
+ method @Deprecated @RequiresApi(24) public static androidx.core.os.LocaleListCompat! wrap(Object!);
}
public final class MessageCompat {
@@ -2334,8 +2343,8 @@
}
public final class FontRequest {
- ctor public FontRequest(String, String, String, java.util.List<java.util.List<byte[]!>!>);
ctor public FontRequest(String, String, String, @ArrayRes int);
+ ctor public FontRequest(String, String, String, java.util.List<java.util.List<byte[]!>!>);
method public java.util.List<java.util.List<byte[]!>!>? getCertificates();
method @ArrayRes public int getCertificatesArrayResId();
method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public String! getIdentifier();
@@ -2446,17 +2455,17 @@
method public static androidx.core.text.BidiFormatter! getInstance(boolean);
method public static androidx.core.text.BidiFormatter! getInstance(java.util.Locale!);
method public boolean getStereoReset();
- method public boolean isRtl(String!);
method public boolean isRtl(CharSequence!);
+ method public boolean isRtl(String!);
method public boolean isRtlContext();
- method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
- method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
- method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!);
+ method public CharSequence! unicodeWrap(CharSequence!);
method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!);
- method public String! unicodeWrap(String!, boolean);
+ method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
method public CharSequence! unicodeWrap(CharSequence!, boolean);
method public String! unicodeWrap(String!);
- method public CharSequence! unicodeWrap(CharSequence!);
+ method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!);
+ method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
+ method public String! unicodeWrap(String!, boolean);
}
public static final class BidiFormatter.Builder {
@@ -2559,13 +2568,13 @@
public final class LinkifyCompat {
method public static boolean addLinks(android.text.Spannable, @androidx.core.text.util.LinkifyCompat.LinkifyMask int);
+ method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?);
+ method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+ method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, String![]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
method public static boolean addLinks(android.widget.TextView, @androidx.core.text.util.LinkifyCompat.LinkifyMask int);
method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?);
method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?, String![]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
- method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?);
- method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
- method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, String![]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
}
@IntDef(flag=true, value={android.text.util.Linkify.WEB_URLS, android.text.util.Linkify.EMAIL_ADDRESSES, android.text.util.Linkify.PHONE_NUMBERS, android.text.util.Linkify.MAP_ADDRESSES, android.text.util.Linkify.ALL}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface LinkifyCompat.LinkifyMask {
@@ -2649,17 +2658,17 @@
method public static void checkArgument(boolean, Object);
method public static void checkArgument(boolean, String, java.lang.Object!...);
method public static float checkArgumentFinite(float, String);
+ method public static double checkArgumentInRange(double, double, double, String);
+ method public static float checkArgumentInRange(float, float, float, String);
method public static int checkArgumentInRange(int, int, int, String);
method public static long checkArgumentInRange(long, long, long, String);
- method public static float checkArgumentInRange(float, float, float, String);
- method public static double checkArgumentInRange(double, double, double, String);
- method @IntRange(from=0) public static int checkArgumentNonnegative(int, String?);
method @IntRange(from=0) public static int checkArgumentNonnegative(int);
+ method @IntRange(from=0) public static int checkArgumentNonnegative(int, String?);
method public static int checkFlagsArgument(int, int);
method public static <T> T checkNotNull(T?);
method public static <T> T checkNotNull(T?, Object);
- method public static void checkState(boolean, String?);
method public static void checkState(boolean);
+ method public static void checkState(boolean, String?);
method public static <T extends java.lang.CharSequence> T checkStringNotEmpty(T?);
method public static <T extends java.lang.CharSequence> T checkStringNotEmpty(T?, Object);
method public static <T extends java.lang.CharSequence> T checkStringNotEmpty(T?, String, java.lang.Object!...);
@@ -2687,9 +2696,9 @@
}
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class TimeUtils {
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void formatDuration(long, StringBuilder!);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void formatDuration(long, java.io.PrintWriter!, int);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void formatDuration(long, java.io.PrintWriter!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void formatDuration(long, java.io.PrintWriter!, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void formatDuration(long, StringBuilder!);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void formatDuration(long, long, java.io.PrintWriter!);
field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final int HUNDRED_DAY_FIELD_LEN = 19; // 0x13
}
@@ -2743,8 +2752,8 @@
method @androidx.core.view.ContentInfoCompat.Flags public int getFlags();
method public android.net.Uri? getLinkUri();
method @androidx.core.view.ContentInfoCompat.Source public int getSource();
- method public android.util.Pair<androidx.core.view.ContentInfoCompat!,androidx.core.view.ContentInfoCompat!> partition(androidx.core.util.Predicate<android.content.ClipData.Item!>);
method @RequiresApi(31) public static android.util.Pair<android.view.ContentInfo!,android.view.ContentInfo!> partition(android.view.ContentInfo, java.util.function.Predicate<android.content.ClipData.Item!>);
+ method public android.util.Pair<androidx.core.view.ContentInfoCompat!,androidx.core.view.ContentInfoCompat!> partition(androidx.core.util.Predicate<android.content.ClipData.Item!>);
method @RequiresApi(31) public android.view.ContentInfo toContentInfo();
method @RequiresApi(31) public static androidx.core.view.ContentInfoCompat toContentInfoCompat(android.view.ContentInfo);
field public static final int FLAG_CONVERT_TO_PLAIN_TEXT = 1; // 0x1
@@ -2757,8 +2766,8 @@
}
public static final class ContentInfoCompat.Builder {
- ctor public ContentInfoCompat.Builder(androidx.core.view.ContentInfoCompat);
ctor public ContentInfoCompat.Builder(android.content.ClipData, @androidx.core.view.ContentInfoCompat.Source int);
+ ctor public ContentInfoCompat.Builder(androidx.core.view.ContentInfoCompat);
method public androidx.core.view.ContentInfoCompat build();
method public androidx.core.view.ContentInfoCompat.Builder setClip(android.content.ClipData);
method public androidx.core.view.ContentInfoCompat.Builder setExtras(android.os.Bundle?);
@@ -2834,6 +2843,31 @@
field public static final int START = 8388611; // 0x800003
}
+ public final class HapticFeedbackConstantsCompat {
+ field public static final int CLOCK_TICK = 4; // 0x4
+ field public static final int CONFIRM = 16; // 0x10
+ field public static final int CONTEXT_CLICK = 6; // 0x6
+ field public static final int DRAG_START = 25; // 0x19
+ field public static final int FLAG_IGNORE_VIEW_SETTING = 1; // 0x1
+ field public static final int GESTURE_END = 13; // 0xd
+ field public static final int GESTURE_START = 12; // 0xc
+ field public static final int GESTURE_THRESHOLD_ACTIVATE = 23; // 0x17
+ field public static final int GESTURE_THRESHOLD_DEACTIVATE = 24; // 0x18
+ field public static final int KEYBOARD_PRESS = 3; // 0x3
+ field public static final int KEYBOARD_RELEASE = 7; // 0x7
+ field public static final int KEYBOARD_TAP = 3; // 0x3
+ field public static final int LONG_PRESS = 0; // 0x0
+ field public static final int NO_HAPTICS = -1; // 0xffffffff
+ field public static final int REJECT = 17; // 0x11
+ field public static final int SEGMENT_FREQUENT_TICK = 27; // 0x1b
+ field public static final int SEGMENT_TICK = 26; // 0x1a
+ field public static final int TEXT_HANDLE_MOVE = 9; // 0x9
+ field public static final int TOGGLE_OFF = 22; // 0x16
+ field public static final int TOGGLE_ON = 21; // 0x15
+ field public static final int VIRTUAL_KEY = 1; // 0x1
+ field public static final int VIRTUAL_KEY_RELEASE = 8; // 0x8
+ }
+
public final class InputDeviceCompat {
field public static final int SOURCE_ANY = -256; // 0xffffff00
field public static final int SOURCE_CLASS_BUTTON = 1; // 0x1
@@ -3154,10 +3188,10 @@
}
public final class ScaleGestureDetectorCompat {
- method @Deprecated public static boolean isQuickScaleEnabled(Object!);
method public static boolean isQuickScaleEnabled(android.view.ScaleGestureDetector);
- method @Deprecated public static void setQuickScaleEnabled(Object!, boolean);
+ method @Deprecated public static boolean isQuickScaleEnabled(Object!);
method public static void setQuickScaleEnabled(android.view.ScaleGestureDetector, boolean);
+ method @Deprecated public static void setQuickScaleEnabled(Object!, boolean);
}
public interface ScrollingView {
@@ -3205,8 +3239,8 @@
method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[]?, int[]?);
method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[]?, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int);
method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]?);
- method public static void dispatchNestedScroll(android.view.View, int, int, int, int, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int, int[]);
method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public static void dispatchNestedScroll(android.view.View, int, int, int, int, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int, int[]);
method public static void dispatchStartTemporaryDetach(android.view.View);
method public static void enableAccessibleClickableSpanSupport(android.view.View);
method public static int generateViewId();
@@ -3291,6 +3325,8 @@
method public static void onInitializeAccessibilityNodeInfo(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
method @Deprecated public static void onPopulateAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
method public static boolean performAccessibilityAction(android.view.View, int, android.os.Bundle?);
+ method public static boolean performHapticFeedback(android.view.View, int);
+ method public static boolean performHapticFeedback(android.view.View, int, int);
method public static androidx.core.view.ContentInfoCompat? performReceiveContent(android.view.View, androidx.core.view.ContentInfoCompat);
method public static void postInvalidateOnAnimation(android.view.View);
method public static void postInvalidateOnAnimation(android.view.View, int, int, int, int);
@@ -3624,8 +3660,8 @@
method public boolean isConsumed();
method public boolean isRound();
method public boolean isVisible(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int);
- method @Deprecated public androidx.core.view.WindowInsetsCompat replaceSystemWindowInsets(int, int, int, int);
method @Deprecated public androidx.core.view.WindowInsetsCompat replaceSystemWindowInsets(android.graphics.Rect);
+ method @Deprecated public androidx.core.view.WindowInsetsCompat replaceSystemWindowInsets(int, int, int, int);
method @RequiresApi(20) public android.view.WindowInsets? toWindowInsets();
method @RequiresApi(20) public static androidx.core.view.WindowInsetsCompat toWindowInsetsCompat(android.view.WindowInsets);
method @RequiresApi(20) public static androidx.core.view.WindowInsetsCompat toWindowInsetsCompat(android.view.WindowInsets, android.view.View?);
@@ -3766,8 +3802,8 @@
public class AccessibilityNodeInfoCompat {
ctor @Deprecated public AccessibilityNodeInfoCompat(Object!);
- method public void addAction(int);
method public void addAction(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!);
+ method public void addAction(int);
method public void addChild(android.view.View!);
method public void addChild(android.view.View!, int);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void addSpansToExtras(CharSequence!, android.view.View!);
@@ -3842,9 +3878,9 @@
method public boolean isTextEntryKey();
method public boolean isTextSelectable();
method public boolean isVisibleToUser();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain();
method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(android.view.View!);
method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(android.view.View!, int);
- method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain();
method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(androidx.core.view.accessibility.AccessibilityNodeInfoCompat!);
method public boolean performAction(int);
method public boolean performAction(int, android.os.Bundle!);
@@ -4024,8 +4060,8 @@
method public int getRowCount();
method public int getSelectionMode();
method public boolean isHierarchical();
- method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean, int);
method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean);
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean, int);
field public static final int SELECTION_MODE_MULTIPLE = 2; // 0x2
field public static final int SELECTION_MODE_NONE = 0; // 0x0
field public static final int SELECTION_MODE_SINGLE = 1; // 0x1
@@ -4038,8 +4074,8 @@
method public int getRowSpan();
method @Deprecated public boolean isHeading();
method public boolean isSelected();
- method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean, boolean);
method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean);
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean, boolean);
}
public static class AccessibilityNodeInfoCompat.RangeInfoCompat {
@@ -4101,8 +4137,8 @@
method @Deprecated public boolean isFullScreen();
method @Deprecated public boolean isPassword();
method @Deprecated public boolean isScrollable();
- method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain(androidx.core.view.accessibility.AccessibilityRecordCompat!);
method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain();
+ method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain(androidx.core.view.accessibility.AccessibilityRecordCompat!);
method @Deprecated public void recycle();
method @Deprecated public void setAddedCount(int);
method @Deprecated public void setBeforeText(CharSequence!);
@@ -4114,19 +4150,19 @@
method @Deprecated public void setFromIndex(int);
method @Deprecated public void setFullScreen(boolean);
method @Deprecated public void setItemCount(int);
- method @Deprecated public void setMaxScrollX(int);
method public static void setMaxScrollX(android.view.accessibility.AccessibilityRecord, int);
- method @Deprecated public void setMaxScrollY(int);
+ method @Deprecated public void setMaxScrollX(int);
method public static void setMaxScrollY(android.view.accessibility.AccessibilityRecord, int);
+ method @Deprecated public void setMaxScrollY(int);
method @Deprecated public void setParcelableData(android.os.Parcelable!);
method @Deprecated public void setPassword(boolean);
method @Deprecated public void setRemovedCount(int);
method @Deprecated public void setScrollX(int);
method @Deprecated public void setScrollY(int);
method @Deprecated public void setScrollable(boolean);
+ method public static void setSource(android.view.accessibility.AccessibilityRecord, android.view.View?, int);
method @Deprecated public void setSource(android.view.View!);
method @Deprecated public void setSource(android.view.View!, int);
- method public static void setSource(android.view.accessibility.AccessibilityRecord, android.view.View?, int);
method @Deprecated public void setToIndex(int);
}
@@ -4355,9 +4391,9 @@
method public static float getDistance(android.widget.EdgeEffect);
method @Deprecated public boolean isFinished();
method @Deprecated public boolean onAbsorb(int);
+ method public static void onPull(android.widget.EdgeEffect, float, float);
method @Deprecated public boolean onPull(float);
method @Deprecated public boolean onPull(float, float);
- method public static void onPull(android.widget.EdgeEffect, float, float);
method public static float onPullDistance(android.widget.EdgeEffect, float, float);
method @Deprecated public boolean onRelease();
method @Deprecated public void setSize(int, int);
@@ -4371,8 +4407,8 @@
}
public final class ListPopupWindowCompat {
- method @Deprecated public static android.view.View.OnTouchListener! createDragToOpenListener(Object!, android.view.View!);
method public static android.view.View.OnTouchListener? createDragToOpenListener(android.widget.ListPopupWindow, android.view.View);
+ method @Deprecated public static android.view.View.OnTouchListener! createDragToOpenListener(Object!, android.view.View!);
}
public class ListViewAutoScrollHelper extends androidx.core.widget.AutoScrollHelper {
@@ -4400,8 +4436,8 @@
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollOffset();
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollRange();
method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, int);
- method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]);
method public boolean dispatchNestedScroll(int, int, int, int, int[]?, int);
+ method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]);
method public boolean executeKeyEvent(android.view.KeyEvent);
method public void fling(int);
method public boolean fullScroll(int);
@@ -4411,8 +4447,8 @@
method public boolean isSmoothScrollingEnabled();
method public void onAttachedToWindow();
method public void onNestedPreScroll(android.view.View, int, int, int[], int);
- method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]);
method public void onNestedScroll(android.view.View, int, int, int, int, int);
+ method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]);
method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
method public void onStopNestedScroll(android.view.View, int);
diff --git a/core/core/build.gradle b/core/core/build.gradle
index fa351a1..832085f 100644
--- a/core/core/build.gradle
+++ b/core/core/build.gradle
@@ -90,10 +90,11 @@
}
androidx {
- name = "Android Support Library compat"
+ name = "Core"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.CORE
inceptionYear = "2015"
- description = "The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren\'t a part of the framework APIs. Compatible on devices running API 14 or later."
+ description = "Provides backward-compatible implementations of Android platform APIs and " +
+ "features."
failOnDeprecationWarnings = false
}
diff --git a/core/core/src/androidTest/java/androidx/core/app/ActivityCompatRecreateFromLifecycleStatesTestCase.kt b/core/core/src/androidTest/java/androidx/core/app/ActivityCompatRecreateFromLifecycleStatesTestCase.kt
index 7f2a7de..36b0b0a 100644
--- a/core/core/src/androidTest/java/androidx/core/app/ActivityCompatRecreateFromLifecycleStatesTestCase.kt
+++ b/core/core/src/androidTest/java/androidx/core/app/ActivityCompatRecreateFromLifecycleStatesTestCase.kt
@@ -24,12 +24,12 @@
import androidx.test.rule.ActivityTestRule
import androidx.testutils.LifecycleOwnerUtils
import androidx.testutils.PollingCheck
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import junit.framework.Assert.assertEquals
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@LargeTest
@RunWith(AndroidJUnit4::class)
diff --git a/core/core/src/androidTest/java/androidx/core/app/NotificationTester.kt b/core/core/src/androidTest/java/androidx/core/app/NotificationTester.kt
index e73a557..aab6d1e 100644
--- a/core/core/src/androidTest/java/androidx/core/app/NotificationTester.kt
+++ b/core/core/src/androidTest/java/androidx/core/app/NotificationTester.kt
@@ -18,8 +18,8 @@
import android.app.Notification
import android.os.Build
import android.os.Bundle
-import org.junit.Assert.assertEquals
import java.util.TreeSet
+import org.junit.Assert.assertEquals
internal object NotificationTester {
@JvmStatic
diff --git a/core/core/src/androidTest/java/androidx/core/content/ContextCompatTest.java b/core/core/src/androidTest/java/androidx/core/content/ContextCompatTest.java
index 42fce77..c1e0eda 100644
--- a/core/core/src/androidTest/java/androidx/core/content/ContextCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/content/ContextCompatTest.java
@@ -147,18 +147,23 @@
import android.view.textservice.TextServicesManager;
import androidx.annotation.OptIn;
+import androidx.core.app.AppLocalesStorageHelper;
import androidx.core.app.NotificationManagerCompat;
import androidx.core.hardware.display.DisplayManagerCompat;
import androidx.core.os.BuildCompat;
+import androidx.core.os.ConfigurationCompat;
+import androidx.core.os.LocaleListCompat;
import androidx.core.test.R;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.filters.LargeTest;
import androidx.test.filters.SdkSuppress;
import androidx.test.platform.app.InstrumentationRegistry;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import java.util.Locale;
import java.util.concurrent.atomic.AtomicBoolean;
@LargeTest
@@ -182,6 +187,11 @@
mPermission = mContext.getPackageName() + ".DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION";
}
+ @After
+ public void tearDown() {
+ setAppLocales(mContext, "");
+ }
+
@Test
public void getSystemServiceName() {
assertEquals(ACCESSIBILITY_SERVICE,
@@ -608,7 +618,7 @@
@Test
public void testGetDisplayFromActivity() {
- final Display actualDisplay = ContextCompat.getDisplay(mContext);
+ final Display actualDisplay = ContextCompat.getDisplayOrDefault(mContext);
if (Build.VERSION.SDK_INT >= 30) {
assertEquals(mContext.getDisplay(), actualDisplay);
} else {
@@ -626,7 +636,7 @@
final Display defaultDisplay = displayManagerCompat.getDisplay(Display.DEFAULT_DISPLAY);
final Context displayContext = mContext.createDisplayContext(defaultDisplay);
- assertEquals(ContextCompat.getDisplay(displayContext), defaultDisplay);
+ assertEquals(ContextCompat.getDisplayOrDefault(displayContext), defaultDisplay);
}
@Test
@@ -634,14 +644,14 @@
public void testGetDisplayFromWindowContext() {
final Context windowContext = mContext.createWindowContext(TYPE_APPLICATION_OVERLAY, null);
- assertEquals(ContextCompat.getDisplay(windowContext), windowContext.getDisplay());
+ assertEquals(ContextCompat.getDisplayOrDefault(windowContext), windowContext.getDisplay());
}
@Test
public void testGetDisplayFromApplication() {
final Context applicationContext = ApplicationProvider.getApplicationContext();
final Context spyContext = spy(applicationContext);
- final Display actualDisplay = ContextCompat.getDisplay(spyContext);
+ final Display actualDisplay = ContextCompat.getDisplayOrDefault(spyContext);
if (Build.VERSION.SDK_INT >= 30) {
verify(spyContext).getSystemService(eq(DisplayManager.class));
@@ -659,4 +669,21 @@
actualDisplay.getDisplayId());
}
}
+
+ @Test
+ @SdkSuppress(minSdkVersion = 17, maxSdkVersion = 32)
+ public void testGetContextForLanguage17() {
+ setAppLocales(mContext, LocaleListCompat.create(Locale.JAPAN).toLanguageTags());
+
+ // verify the context that respects the per-app locales
+ Context newContext = ContextCompat.getContextForLanguage(mContext);
+ LocaleListCompat locales = ConfigurationCompat.getLocales(
+ newContext.getResources().getConfiguration());
+ assertEquals(1, locales.size());
+ assertEquals(Locale.JAPAN, locales.get(0));
+ }
+
+ private void setAppLocales(Context context, String locales) {
+ AppLocalesStorageHelper.persistLocales(context, locales);
+ }
}
diff --git a/core/core/src/androidTest/java/androidx/core/content/pm/PackageInfoCompatHasSignaturesTest.kt b/core/core/src/androidTest/java/androidx/core/content/pm/PackageInfoCompatHasSignaturesTest.kt
index bc98c5f..156affb 100644
--- a/core/core/src/androidTest/java/androidx/core/content/pm/PackageInfoCompatHasSignaturesTest.kt
+++ b/core/core/src/androidTest/java/androidx/core/content/pm/PackageInfoCompatHasSignaturesTest.kt
@@ -29,6 +29,7 @@
import androidx.testutils.mockito.mockThrowOnUnmocked
import androidx.testutils.mockito.whenever
import com.google.common.truth.Truth.assertThat
+import java.security.MessageDigest
import org.junit.After
import org.junit.Before
import org.junit.Test
@@ -38,7 +39,6 @@
import org.mockito.Mockito.anyInt
import org.mockito.Mockito.eq
import org.mockito.internal.util.reflection.FieldSetter
-import java.security.MessageDigest
/**
* Verifies [PackageInfoCompat.hasSignatures].
diff --git a/core/core/src/androidTest/java/androidx/core/view/ViewCompatTest.java b/core/core/src/androidTest/java/androidx/core/view/ViewCompatTest.java
index 41b6b15..a27a4e2 100644
--- a/core/core/src/androidTest/java/androidx/core/view/ViewCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/view/ViewCompatTest.java
@@ -15,6 +15,26 @@
*/
package androidx.core.view;
+import static androidx.core.view.HapticFeedbackConstantsCompat.CLOCK_TICK;
+import static androidx.core.view.HapticFeedbackConstantsCompat.CONFIRM;
+import static androidx.core.view.HapticFeedbackConstantsCompat.CONTEXT_CLICK;
+import static androidx.core.view.HapticFeedbackConstantsCompat.DRAG_START;
+import static androidx.core.view.HapticFeedbackConstantsCompat.GESTURE_END;
+import static androidx.core.view.HapticFeedbackConstantsCompat.GESTURE_START;
+import static androidx.core.view.HapticFeedbackConstantsCompat.GESTURE_THRESHOLD_ACTIVATE;
+import static androidx.core.view.HapticFeedbackConstantsCompat.GESTURE_THRESHOLD_DEACTIVATE;
+import static androidx.core.view.HapticFeedbackConstantsCompat.KEYBOARD_RELEASE;
+import static androidx.core.view.HapticFeedbackConstantsCompat.KEYBOARD_TAP;
+import static androidx.core.view.HapticFeedbackConstantsCompat.LONG_PRESS;
+import static androidx.core.view.HapticFeedbackConstantsCompat.NO_HAPTICS;
+import static androidx.core.view.HapticFeedbackConstantsCompat.REJECT;
+import static androidx.core.view.HapticFeedbackConstantsCompat.SEGMENT_FREQUENT_TICK;
+import static androidx.core.view.HapticFeedbackConstantsCompat.SEGMENT_TICK;
+import static androidx.core.view.HapticFeedbackConstantsCompat.TEXT_HANDLE_MOVE;
+import static androidx.core.view.HapticFeedbackConstantsCompat.TOGGLE_OFF;
+import static androidx.core.view.HapticFeedbackConstantsCompat.TOGGLE_ON;
+import static androidx.core.view.HapticFeedbackConstantsCompat.VIRTUAL_KEY;
+import static androidx.core.view.HapticFeedbackConstantsCompat.VIRTUAL_KEY_RELEASE;
import static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ARGUMENT_PRESS_AND_HOLD_DURATION_MILLIS_INT;
import static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat;
@@ -33,6 +53,7 @@
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import android.app.Activity;
@@ -401,6 +422,168 @@
assertEquals(contentCaptureSession, result.toContentCaptureSession());
}
+ @Test
+ public void testPerformHapticFeedback_skipsHapticFeedbackForNoHapticsConstant() {
+ View spyView = spy(mView);
+ ViewCompat.performHapticFeedback(spyView, NO_HAPTICS);
+ verify(spyView, never()).performHapticFeedback(anyInt(), anyInt());
+ }
+
+ @SdkSuppress(minSdkVersion = 34)
+ @Test
+ public void testPerformHapticFeedback_useSameInputFeedbackConstantOnSdk34() {
+ for (int constant = HapticFeedbackConstantsCompat.FIRST_CONSTANT_INT;
+ constant < HapticFeedbackConstantsCompat.LAST_CONSTANT_INT; constant++) {
+ assertHapticFeedbackPerformed(constant);
+ }
+ }
+
+ @SdkSuppress(minSdkVersion = 30, maxSdkVersion = 33)
+ @Test
+ public void testPerformHapticFeedback_useFallbackForConstantsFromSdk34() {
+ // Maintain constants supported in SDK >= 30
+ assertHapticFeedbackPerformed(CONFIRM);
+ assertHapticFeedbackPerformed(REJECT);
+ assertHapticFeedbackPerformed(GESTURE_START);
+ assertHapticFeedbackPerformed(GESTURE_END);
+
+ // Fallbacks for constants from SDK >= 34
+ assertFallbackHapticFeedbackPerformed(LONG_PRESS, DRAG_START);
+ assertFallbackHapticFeedbackPerformed(CONTEXT_CLICK, TOGGLE_ON);
+ assertFallbackHapticFeedbackPerformed(CONTEXT_CLICK, SEGMENT_TICK);
+ assertFallbackHapticFeedbackPerformed(CONTEXT_CLICK, GESTURE_THRESHOLD_ACTIVATE);
+ assertFallbackHapticFeedbackPerformed(CLOCK_TICK, TOGGLE_OFF);
+ assertFallbackHapticFeedbackPerformed(CLOCK_TICK, SEGMENT_FREQUENT_TICK);
+ assertFallbackHapticFeedbackPerformed(CLOCK_TICK, GESTURE_THRESHOLD_DEACTIVATE);
+ }
+
+ @SdkSuppress(minSdkVersion = 27, maxSdkVersion = 29)
+ @Test
+ public void testPerformHapticFeedback_useFallbackForConstantsFromSdk30() {
+ // Maintain constants supported in SDK >= 27
+ assertHapticFeedbackPerformed(TEXT_HANDLE_MOVE);
+ assertHapticFeedbackPerformed(KEYBOARD_RELEASE);
+ assertHapticFeedbackPerformed(VIRTUAL_KEY_RELEASE);
+
+ // Fallbacks for constants from SDK >= 30
+ assertFallbackHapticFeedbackPerformed(LONG_PRESS, DRAG_START);
+ assertFallbackHapticFeedbackPerformed(LONG_PRESS, REJECT);
+ assertFallbackHapticFeedbackPerformed(VIRTUAL_KEY, CONFIRM);
+ assertFallbackHapticFeedbackPerformed(VIRTUAL_KEY, GESTURE_START);
+ assertFallbackHapticFeedbackPerformed(CONTEXT_CLICK, GESTURE_END);
+ assertFallbackHapticFeedbackPerformed(CONTEXT_CLICK, TOGGLE_ON);
+ assertFallbackHapticFeedbackPerformed(CONTEXT_CLICK, SEGMENT_TICK);
+ assertFallbackHapticFeedbackPerformed(CONTEXT_CLICK, GESTURE_THRESHOLD_ACTIVATE);
+ assertFallbackHapticFeedbackPerformed(CLOCK_TICK, TOGGLE_OFF);
+ assertFallbackHapticFeedbackPerformed(CLOCK_TICK, SEGMENT_FREQUENT_TICK);
+ assertFallbackHapticFeedbackPerformed(CLOCK_TICK, GESTURE_THRESHOLD_DEACTIVATE);
+ }
+
+ @SdkSuppress(minSdkVersion = 23, maxSdkVersion = 26)
+ @Test
+ public void testPerformHapticFeedback_useFallbackForConstantsFromSdk27() {
+ // Maintain constants supported in SDK >= 23
+ assertHapticFeedbackPerformed(CONTEXT_CLICK);
+
+ // Fallbacks for constants from SDK >= 27
+ assertFallbackHapticFeedbackPerformed(LONG_PRESS, DRAG_START);
+ assertFallbackHapticFeedbackPerformed(LONG_PRESS, REJECT);
+ assertFallbackHapticFeedbackPerformed(VIRTUAL_KEY, CONFIRM);
+ assertFallbackHapticFeedbackPerformed(VIRTUAL_KEY, GESTURE_START);
+ assertFallbackHapticFeedbackPerformed(CONTEXT_CLICK, GESTURE_END);
+ assertFallbackHapticFeedbackPerformed(CONTEXT_CLICK, TOGGLE_ON);
+ assertFallbackHapticFeedbackPerformed(CONTEXT_CLICK, SEGMENT_TICK);
+ assertFallbackHapticFeedbackPerformed(CONTEXT_CLICK, GESTURE_THRESHOLD_ACTIVATE);
+ assertFallbackHapticFeedbackPerformed(CLOCK_TICK, TOGGLE_OFF);
+ assertFallbackHapticFeedbackPerformed(CLOCK_TICK, SEGMENT_FREQUENT_TICK);
+ assertFallbackHapticFeedbackPerformed(CLOCK_TICK, GESTURE_THRESHOLD_DEACTIVATE);
+ assertNoHapticFeedbackPerformed(TEXT_HANDLE_MOVE);
+ assertNoHapticFeedbackPerformed(KEYBOARD_RELEASE);
+ assertNoHapticFeedbackPerformed(VIRTUAL_KEY_RELEASE);
+ }
+
+ @SdkSuppress(minSdkVersion = 21, maxSdkVersion = 22)
+ @Test
+ public void testPerformHapticFeedback_useFallbackForConstantsFromSdk23() {
+ // Maintain constants supported in SDK >= 21
+ assertHapticFeedbackPerformed(CLOCK_TICK);
+
+ // Fallbacks for constants from SDK >= 23
+ assertFallbackHapticFeedbackPerformed(LONG_PRESS, DRAG_START);
+ assertFallbackHapticFeedbackPerformed(LONG_PRESS, REJECT);
+ assertFallbackHapticFeedbackPerformed(VIRTUAL_KEY, CONFIRM);
+ assertFallbackHapticFeedbackPerformed(VIRTUAL_KEY, GESTURE_START);
+ assertFallbackHapticFeedbackPerformed(CLOCK_TICK, GESTURE_END);
+ assertFallbackHapticFeedbackPerformed(CLOCK_TICK, TOGGLE_ON);
+ assertFallbackHapticFeedbackPerformed(CLOCK_TICK, SEGMENT_TICK);
+ assertFallbackHapticFeedbackPerformed(CLOCK_TICK, GESTURE_THRESHOLD_ACTIVATE);
+ assertFallbackHapticFeedbackPerformed(CLOCK_TICK, TOGGLE_OFF);
+ assertFallbackHapticFeedbackPerformed(CLOCK_TICK, SEGMENT_FREQUENT_TICK);
+ assertFallbackHapticFeedbackPerformed(CLOCK_TICK, GESTURE_THRESHOLD_DEACTIVATE);
+ assertFallbackHapticFeedbackPerformed(CLOCK_TICK, CONTEXT_CLICK);
+ assertNoHapticFeedbackPerformed(TEXT_HANDLE_MOVE);
+ assertNoHapticFeedbackPerformed(KEYBOARD_RELEASE);
+ assertNoHapticFeedbackPerformed(VIRTUAL_KEY_RELEASE);
+ }
+
+ @SdkSuppress(maxSdkVersion = 20)
+ @Test
+ public void testPerformHapticFeedback_useFallbackForConstantsFromSdk21() {
+ // Maintain constants supported in SDK < 21
+ assertHapticFeedbackPerformed(KEYBOARD_TAP);
+
+ // Fallbacks for constants from SDK >= 21
+ assertFallbackHapticFeedbackPerformed(LONG_PRESS, DRAG_START);
+ assertFallbackHapticFeedbackPerformed(LONG_PRESS, REJECT);
+ assertFallbackHapticFeedbackPerformed(VIRTUAL_KEY, CONFIRM);
+ assertFallbackHapticFeedbackPerformed(VIRTUAL_KEY, GESTURE_START);
+ assertNoHapticFeedbackPerformed(GESTURE_END);
+ assertNoHapticFeedbackPerformed(TOGGLE_ON);
+ assertNoHapticFeedbackPerformed(SEGMENT_TICK);
+ assertNoHapticFeedbackPerformed(GESTURE_THRESHOLD_ACTIVATE);
+ assertNoHapticFeedbackPerformed(TOGGLE_OFF);
+ assertNoHapticFeedbackPerformed(SEGMENT_FREQUENT_TICK);
+ assertNoHapticFeedbackPerformed(GESTURE_THRESHOLD_DEACTIVATE);
+ assertNoHapticFeedbackPerformed(CONTEXT_CLICK);
+ assertNoHapticFeedbackPerformed(CLOCK_TICK);
+ assertNoHapticFeedbackPerformed(TEXT_HANDLE_MOVE);
+ assertNoHapticFeedbackPerformed(KEYBOARD_RELEASE);
+ assertNoHapticFeedbackPerformed(VIRTUAL_KEY_RELEASE);
+ }
+
+ private void assertHapticFeedbackPerformed(int feedbackConstant) {
+ View spyView = spy(mView);
+ int flags = HapticFeedbackConstantsCompat.FLAG_IGNORE_VIEW_SETTING;
+
+ ViewCompat.performHapticFeedback(spyView, feedbackConstant);
+ verify(spyView).performHapticFeedback(eq(feedbackConstant));
+
+ ViewCompat.performHapticFeedback(spyView, feedbackConstant, flags);
+ verify(spyView).performHapticFeedback(eq(feedbackConstant), eq(flags));
+ }
+
+ private void assertNoHapticFeedbackPerformed(int feedbackConstant) {
+ View spyView = spy(mView);
+ int flags = HapticFeedbackConstantsCompat.FLAG_IGNORE_VIEW_SETTING;
+
+ ViewCompat.performHapticFeedback(spyView, feedbackConstant);
+ verify(spyView, never()).performHapticFeedback(anyInt());
+
+ ViewCompat.performHapticFeedback(spyView, feedbackConstant, flags);
+ verify(spyView, never()).performHapticFeedback(anyInt(), anyInt());
+ }
+
+ private void assertFallbackHapticFeedbackPerformed(int expectedFallback, int feedbackConstant) {
+ View spyView = spy(mView);
+ int flags = HapticFeedbackConstantsCompat.FLAG_IGNORE_VIEW_SETTING;
+
+ ViewCompat.performHapticFeedback(spyView, feedbackConstant);
+ verify(spyView).performHapticFeedback(eq(expectedFallback));
+
+ ViewCompat.performHapticFeedback(spyView, feedbackConstant, flags);
+ verify(spyView).performHapticFeedback(eq(expectedFallback), eq(flags));
+ }
+
private static boolean isViewIdGenerated(int id) {
return (id & 0xFF000000) == 0 && (id & 0x00FFFFFF) != 0;
}
diff --git a/core/core/src/androidTest/java/androidx/core/view/WindowCompatTest.kt b/core/core/src/androidTest/java/androidx/core/view/WindowCompatTest.kt
index 110a615..eb75b11 100644
--- a/core/core/src/androidTest/java/androidx/core/view/WindowCompatTest.kt
+++ b/core/core/src/androidTest/java/androidx/core/view/WindowCompatTest.kt
@@ -22,12 +22,12 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import androidx.test.filters.SdkSuppress
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotEquals
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@RunWith(AndroidJUnit4::class)
@LargeTest
diff --git a/core/core/src/androidTest/java/androidx/core/view/WindowInsetsAnimationCompatActivityTest.kt b/core/core/src/androidTest/java/androidx/core/view/WindowInsetsAnimationCompatActivityTest.kt
index 971024c..633908c 100644
--- a/core/core/src/androidTest/java/androidx/core/view/WindowInsetsAnimationCompatActivityTest.kt
+++ b/core/core/src/androidTest/java/androidx/core/view/WindowInsetsAnimationCompatActivityTest.kt
@@ -36,14 +36,14 @@
import androidx.test.filters.SdkSuppress
import androidx.testutils.withActivity
import com.google.common.truth.Truth
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Assume
import org.junit.Before
import org.junit.Test
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@SdkSuppress(minSdkVersion = 21)
@RequiresApi(21)
diff --git a/core/core/src/androidTest/java/androidx/core/view/WindowInsetsCompatActivityTest.kt b/core/core/src/androidTest/java/androidx/core/view/WindowInsetsCompatActivityTest.kt
index e50c0bf..ffa754f 100644
--- a/core/core/src/androidTest/java/androidx/core/view/WindowInsetsCompatActivityTest.kt
+++ b/core/core/src/androidTest/java/androidx/core/view/WindowInsetsCompatActivityTest.kt
@@ -40,6 +40,9 @@
import androidx.test.filters.LargeTest
import androidx.test.filters.SdkSuppress
import androidx.testutils.withActivity
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import java.util.concurrent.atomic.AtomicReference
import org.hamcrest.Matchers.`is`
import org.junit.After
import org.junit.Assert.assertEquals
@@ -52,9 +55,6 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
-import java.util.concurrent.atomic.AtomicReference
@Suppress("DEPRECATION") // Testing deprecated methods
@SdkSuppress(minSdkVersion = 16)
diff --git a/core/core/src/androidTest/java/androidx/core/view/WindowInsetsControllerCompatActivityTest.kt b/core/core/src/androidTest/java/androidx/core/view/WindowInsetsControllerCompatActivityTest.kt
index 6a40e06..42f97ba 100644
--- a/core/core/src/androidTest/java/androidx/core/view/WindowInsetsControllerCompatActivityTest.kt
+++ b/core/core/src/androidTest/java/androidx/core/view/WindowInsetsControllerCompatActivityTest.kt
@@ -36,8 +36,12 @@
import androidx.test.filters.LargeTest
import androidx.test.filters.SdkSuppress
import androidx.testutils.withActivity
-import org.hamcrest.Matchers.`is`
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import java.util.concurrent.atomic.AtomicReference
+import kotlin.concurrent.thread
import org.hamcrest.Matchers.equalTo
+import org.hamcrest.Matchers.`is`
import org.junit.After
import org.junit.Assert.assertEquals
import org.junit.Assert.fail
@@ -46,10 +50,6 @@
import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
-import java.util.concurrent.atomic.AtomicReference
-import kotlin.concurrent.thread
@Suppress("DEPRECATION")
@SdkSuppress(minSdkVersion = 23)
diff --git a/core/core/src/androidTest/java/androidx/core/widget/NestedScrollViewNestedScrollingFlingVelocityTest.kt b/core/core/src/androidTest/java/androidx/core/widget/NestedScrollViewNestedScrollingFlingVelocityTest.kt
index 4eed461..4f73447 100644
--- a/core/core/src/androidTest/java/androidx/core/widget/NestedScrollViewNestedScrollingFlingVelocityTest.kt
+++ b/core/core/src/androidTest/java/androidx/core/widget/NestedScrollViewNestedScrollingFlingVelocityTest.kt
@@ -25,6 +25,7 @@
import androidx.core.view.NestedScrollingParent3
import androidx.test.core.app.ApplicationProvider
import androidx.test.filters.LargeTest
+import java.util.Arrays
import org.hamcrest.MatcherAssert.assertThat
import org.hamcrest.Matchers.closeTo
import org.junit.Before
@@ -32,7 +33,6 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import java.util.Arrays
/**
* This test verifies that the velocity that NestedScrollView flings with in response to finger
diff --git a/core/core/src/main/java/androidx/core/app/AppLocalesStorageHelper.java b/core/core/src/main/java/androidx/core/app/AppLocalesStorageHelper.java
new file mode 100644
index 0000000..0753e84
--- /dev/null
+++ b/core/core/src/main/java/androidx/core/app/AppLocalesStorageHelper.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.core.app;
+
+import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;
+
+import android.content.Context;
+import android.util.Log;
+import android.util.Xml;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlSerializer;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+/**
+ * Helper class to manage storage of locales in app's persistent files.
+ */
+@RestrictTo(LIBRARY_GROUP_PREFIX)
+public class AppLocalesStorageHelper {
+ static final String APPLICATION_LOCALES_RECORD_FILE =
+ "androidx.appcompat.app.AppCompatDelegate.application_locales_record_file";
+ static final String LOCALE_RECORD_ATTRIBUTE_TAG = "application_locales";
+ static final String LOCALE_RECORD_FILE_TAG = "locales";
+
+ static final String TAG = "AppLocalesStorageHelper";
+ static final boolean DEBUG = false;
+
+ private AppLocalesStorageHelper() {}
+
+ /**
+ * Returns app locales after reading from storage, fetched using the application context.
+ */
+ @NonNull
+ public static String readLocales(@NonNull Context context) {
+ String appLocales = "";
+
+ FileInputStream fis;
+ try {
+ fis = context.openFileInput(APPLICATION_LOCALES_RECORD_FILE);
+ } catch (FileNotFoundException fnfe) {
+ if (DEBUG) {
+ Log.d(TAG, "Reading app Locales : Locales record file not found: "
+ + APPLICATION_LOCALES_RECORD_FILE);
+ }
+ return appLocales;
+ }
+ try {
+ XmlPullParser parser = Xml.newPullParser();
+ parser.setInput(fis, "UTF-8");
+ int type;
+ int outerDepth = parser.getDepth();
+ while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+ && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+ if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
+ continue;
+ }
+
+ String tagName = parser.getName();
+ if (tagName.equals(LOCALE_RECORD_FILE_TAG)) {
+ appLocales = parser.getAttributeValue(/*namespace= */ null,
+ LOCALE_RECORD_ATTRIBUTE_TAG);
+ break;
+ }
+ }
+ } catch (XmlPullParserException | IOException e) {
+ Log.w(TAG,
+ "Reading app Locales : Unable to parse through file :"
+ + APPLICATION_LOCALES_RECORD_FILE);
+ } finally {
+ if (fis != null) {
+ try {
+ fis.close();
+ } catch (IOException e) {
+ /* ignore */
+ }
+ }
+ }
+
+ if (!appLocales.isEmpty()) {
+ if (DEBUG) {
+ Log.d(TAG,
+ "Reading app Locales : Locales read from file: "
+ + APPLICATION_LOCALES_RECORD_FILE + " ," + " appLocales: "
+ + appLocales);
+ }
+ } else {
+ context.deleteFile(APPLICATION_LOCALES_RECORD_FILE);
+ }
+ return appLocales;
+ }
+
+ /**
+ * Stores the provided locales in internal app file, using the application context.
+ */
+ public static void persistLocales(@NonNull Context context, @NonNull String locales) {
+ if (locales.equals("")) {
+ context.deleteFile(APPLICATION_LOCALES_RECORD_FILE);
+ return;
+ }
+
+ FileOutputStream fos;
+ try {
+ fos = context.openFileOutput(APPLICATION_LOCALES_RECORD_FILE, Context.MODE_PRIVATE);
+ } catch (FileNotFoundException fnfe) {
+ Log.w(TAG, String.format("Storing App Locales : FileNotFoundException: Cannot open "
+ + "file %s for writing ", APPLICATION_LOCALES_RECORD_FILE));
+ return;
+ }
+ XmlSerializer serializer = Xml.newSerializer();
+ try {
+ serializer.setOutput(fos, /* encoding= */ null);
+ serializer.startDocument("UTF-8", true);
+ serializer.startTag(/* namespace= */ null, LOCALE_RECORD_FILE_TAG);
+ serializer.attribute(/* namespace= */ null, LOCALE_RECORD_ATTRIBUTE_TAG, locales);
+ serializer.endTag(/* namespace= */ null, LOCALE_RECORD_FILE_TAG);
+ serializer.endDocument();
+ if (DEBUG) {
+ Log.d(TAG, "Storing App Locales : app-locales: "
+ + locales + " persisted successfully.");
+ }
+ } catch (Exception e) {
+ Log.w(TAG, "Storing App Locales : Failed to persist app-locales in storage ",
+ e);
+ } finally {
+ if (fos != null) {
+ try {
+ fos.close();
+ } catch (IOException e) {
+ /* ignore */
+ }
+ }
+ }
+ }
+}
diff --git a/core/core/src/main/java/androidx/core/app/LocaleManagerCompat.java b/core/core/src/main/java/androidx/core/app/LocaleManagerCompat.java
index 9aabc8c..4e29425 100644
--- a/core/core/src/main/java/androidx/core/app/LocaleManagerCompat.java
+++ b/core/core/src/main/java/androidx/core/app/LocaleManagerCompat.java
@@ -25,10 +25,8 @@
import androidx.annotation.AnyThread;
import androidx.annotation.DoNotInline;
import androidx.annotation.NonNull;
-import androidx.annotation.OptIn;
import androidx.annotation.RequiresApi;
import androidx.annotation.VisibleForTesting;
-import androidx.core.os.BuildCompat;
import androidx.core.os.LocaleListCompat;
import java.util.Locale;
@@ -36,10 +34,6 @@
/**
* Helper for accessing features in {@link android.app.LocaleManager} in a backwards compatible
* fashion.
- *
- * <p><b>Note:</b> Backwards compatibility for
- * {@link LocaleManager#setApplicationLocales(LocaleList)} and
- * {@link LocaleManager#getApplicationLocales()} is available via AppCompatDelegate.
*/
public final class LocaleManagerCompat {
@@ -53,13 +47,12 @@
* is set, this method helps cater to rare use-cases which might require specifically knowing
* the system locale.
*/
- @OptIn(markerClass = androidx.core.os.BuildCompat.PrereleaseSdkCheck.class)
@NonNull
@AnyThread
public static LocaleListCompat getSystemLocales(@NonNull Context context) {
LocaleListCompat systemLocales = LocaleListCompat.getEmptyLocaleList();
// TODO: modify the check to Build.Version.SDK_INT >= 33.
- if (BuildCompat.isAtLeastT()) {
+ if (Build.VERSION.SDK_INT >= 33) {
// If the API version is 33 or above we want to redirect the call to the framework API.
Object localeManager = getLocaleManagerForApplication(context);
if (localeManager != null) {
@@ -77,6 +70,31 @@
}
/**
+ * Returns application locales for the calling app as a {@link LocaleListCompat}. This API
+ * for non-{@link androidx.appcompat.app.AppCompatDelegate} context to easily get the per-app
+ * locale on the prior API 33 devices.
+ *
+ * <p>Returns a {@link LocaleListCompat#getEmptyLocaleList()} if no app-specific locales are
+ * set.
+ */
+ @AnyThread
+ @NonNull
+ public static LocaleListCompat getApplicationLocales(@NonNull Context context) {
+ if (Build.VERSION.SDK_INT >= 33) {
+ // If the API version is 33 or above we want to redirect the call to the framework API.
+ Object localeManager = getLocaleManagerForApplication(context);
+ if (localeManager != null) {
+ return LocaleListCompat.wrap(Api33Impl.localeManagerGetApplicationLocales(
+ localeManager));
+ } else {
+ return LocaleListCompat.getEmptyLocaleList();
+ }
+ } else {
+ return LocaleListCompat.forLanguageTags(AppLocalesStorageHelper.readLocales(context));
+ }
+ }
+
+ /**
* Returns the localeManager for the current application.
*/
@RequiresApi(33)
@@ -126,5 +144,11 @@
LocaleManager mLocaleManager = (LocaleManager) localeManager;
return mLocaleManager.getSystemLocales();
}
+
+ @DoNotInline
+ static LocaleList localeManagerGetApplicationLocales(Object localeManager) {
+ LocaleManager mLocaleManager = (LocaleManager) localeManager;
+ return mLocaleManager.getApplicationLocales();
+ }
}
}
diff --git a/core/core/src/main/java/androidx/core/content/ContextCompat.java b/core/core/src/main/java/androidx/core/content/ContextCompat.java
index 172b452..d5d5f5a 100644
--- a/core/core/src/main/java/androidx/core/content/ContextCompat.java
+++ b/core/core/src/main/java/androidx/core/content/ContextCompat.java
@@ -96,6 +96,7 @@
import android.content.pm.LauncherApps;
import android.content.pm.PackageManager;
import android.content.res.ColorStateList;
+import android.content.res.Configuration;
import android.graphics.drawable.Drawable;
import android.hardware.ConsumerIrManager;
import android.hardware.SensorManager;
@@ -152,11 +153,14 @@
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
import androidx.core.app.ActivityOptionsCompat;
+import androidx.core.app.LocaleManagerCompat;
import androidx.core.app.NotificationManagerCompat;
import androidx.core.content.res.ResourcesCompat;
import androidx.core.os.BuildCompat;
+import androidx.core.os.ConfigurationCompat;
import androidx.core.os.EnvironmentCompat;
import androidx.core.os.ExecutorCompat;
+import androidx.core.os.LocaleListCompat;
import androidx.core.util.ObjectsCompat;
import java.io.File;
@@ -756,7 +760,9 @@
}
/**
- * Get the display this context is associated with.
+ * Get the display this context is associated with or the
+ * {@link Display#DEFAULT_DISPLAY default display} as the fallback if the context is not
+ * associated with any {@link Display}.
* <p>
* Applications must use this method with {@link Activity} or a context associated with a
* {@link Display} via {@link Context#createDisplayContext(Display)} or
@@ -764,12 +770,13 @@
* instance is not reliable. </p>
*
* @param context Context to obtain the associated display
- * @return The display associated with the Context.
+ * @return The display associated with the Context or the default display if the context
+ * doesn't associated with any display.
*/
@NonNull
- public static Display getDisplay(@NonNull @DisplayContext Context context) {
+ public static Display getDisplayOrDefault(@NonNull @DisplayContext Context context) {
if (Build.VERSION.SDK_INT >= 30) {
- return Api30Impl.getDisplayNoCrash(context);
+ return Api30Impl.getDisplayOrDefault(context);
} else {
final WindowManager windowManager =
(WindowManager) context.getSystemService(WINDOW_SERVICE);
@@ -897,6 +904,65 @@
}
/**
+ * Gets the resource string that also respects the per-app locales. If developers set the
+ * per-app locales via
+ * {@link androidx.appcompat.app.AppCompatDelegate#setApplicationLocales(LocaleListCompat)},
+ * this API returns localized strings even if the context is not
+ * {@link androidx.appcompat.app.AppCompatActivity}.
+ *
+ * <p>
+ * Compatibility behavior:
+ * <ul>
+ * <li>API 17 and above, this method return the localized string that respects per-app
+ * locales.</li>
+ * <li>API 16 and earlier, this method directly return the result of
+ * {@link Context#getString(int)}</li>
+ * </ul>
+ * </p>
+ */
+ @NonNull
+ public static String getString(@NonNull Context context, int resId) {
+ return getContextForLanguage(context).getString(resId);
+ }
+
+ /**
+ * Gets the context which respects the per-app locales locale. This API is specifically for
+ * developers who set the per-app locales via
+ * {@link androidx.appcompat.app.AppCompatDelegate#setApplicationLocales(LocaleListCompat)},
+ * but who needs to use the context out of {@link androidx.appcompat.app.AppCompatActivity}
+ * scope.
+ *
+ * <p>The developers can override the returned context in Application's
+ * {@link android.content.ContextWrapper#attachBaseContext(Context)}, so that developers can
+ * get the localized string via application's context.</p>
+ *
+ * <p>
+ * Compatibility behavior:
+ * <ul>
+ * <li>API 17 and above, the locale in the context returned by this method will respect the
+ * the per-app locale.</li>
+ * <li>API 16 and earlier, this method directly return the {@link Context}</li>
+ * </ul>
+ * </p>
+ */
+ @NonNull
+ public static Context getContextForLanguage(@NonNull Context context) {
+ LocaleListCompat locales = LocaleManagerCompat.getApplicationLocales(context);
+
+ // The Android framework supports per-app locales on API 33, so we assume the
+ // configuration has been updated after API 32.
+ if (Build.VERSION.SDK_INT <= 32 && Build.VERSION.SDK_INT >= 17) {
+ if (!locales.isEmpty()) {
+ Configuration newConfig = new Configuration(
+ context.getResources().getConfiguration());
+ ConfigurationCompat.setLocales(newConfig, locales);
+ return Api17Impl.createConfigurationContext(context, newConfig);
+ }
+ }
+ return context;
+ }
+
+ /**
* Gets the name of the permission required to unexport receivers on pre Tiramisu versions of
* Android, and then asserts that the app registering the receiver also has that permission
* so it can receiver its own broadcasts.
@@ -1003,6 +1069,18 @@
}
}
+ @RequiresApi(17)
+ static class Api17Impl {
+ private Api17Impl() {
+ // This class is not instantiable.
+ }
+
+ @DoNotInline
+ static Context createConfigurationContext(Context obj, Configuration config) {
+ return obj.createConfigurationContext(config);
+ }
+ }
+
@RequiresApi(19)
static class Api19Impl {
private Api19Impl() {
@@ -1140,7 +1218,7 @@
}
@DoNotInline
- static Display getDisplayNoCrash(Context obj) {
+ static Display getDisplayOrDefault(Context obj) {
try {
return obj.getDisplay();
} catch (UnsupportedOperationException e) {
diff --git a/core/core/src/main/java/androidx/core/os/ConfigurationCompat.java b/core/core/src/main/java/androidx/core/os/ConfigurationCompat.java
index ba35171..e5e80dc 100644
--- a/core/core/src/main/java/androidx/core/os/ConfigurationCompat.java
+++ b/core/core/src/main/java/androidx/core/os/ConfigurationCompat.java
@@ -19,11 +19,14 @@
import static android.os.Build.VERSION.SDK_INT;
import android.content.res.Configuration;
+import android.os.LocaleList;
import androidx.annotation.DoNotInline;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
+import java.util.Locale;
+
/**
* Helper class which allows access to properties of {@link Configuration} in
* a backward compatible fashion.
@@ -47,6 +50,33 @@
}
}
+ /**
+ * Set the {@link Locale} into {@link Configuration}. This API is no-op on API 16 and earlier.
+ */
+ public static void setLocales(
+ @NonNull Configuration configuration, @NonNull LocaleListCompat locales) {
+ if (SDK_INT >= 24) {
+ Api24Impl.setLocales(configuration, locales);
+ } else if (SDK_INT >= 17) {
+ Api17Impl.setLocale(configuration, locales);
+ }
+ }
+
+ @RequiresApi(17)
+ static class Api17Impl {
+ private Api17Impl() {
+ // This class is not instantiable.
+ }
+
+ @DoNotInline
+ static void setLocale(
+ @NonNull Configuration configuration, @NonNull LocaleListCompat locales) {
+ if (!locales.isEmpty()) {
+ configuration.setLocale(locales.get(0));
+ }
+ }
+ }
+
@RequiresApi(24)
static class Api24Impl {
private Api24Impl() {
@@ -57,5 +87,11 @@
static android.os.LocaleList getLocales(Configuration configuration) {
return configuration.getLocales();
}
+
+ @DoNotInline
+ static void setLocales(
+ @NonNull Configuration configuration, @NonNull LocaleListCompat locales) {
+ configuration.setLocales((LocaleList) locales.unwrap());
+ }
}
}
diff --git a/core/core/src/main/java/androidx/core/view/HapticFeedbackConstantsCompat.java b/core/core/src/main/java/androidx/core/view/HapticFeedbackConstantsCompat.java
new file mode 100644
index 0000000..4ed4078
--- /dev/null
+++ b/core/core/src/main/java/androidx/core/view/HapticFeedbackConstantsCompat.java
@@ -0,0 +1,384 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.core.view;
+
+import android.os.Build;
+
+import androidx.annotation.IntDef;
+import androidx.annotation.RestrictTo;
+import androidx.annotation.VisibleForTesting;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Helper class for accessing values in {@link android.view.HapticFeedbackConstants}.
+ */
+public final class HapticFeedbackConstantsCompat {
+
+ /**
+ * No haptic feedback should be performed. Applications may use this value to indicate skipping
+ * a call to {@link android.view.View#performHapticFeedback} entirely, or else rely that it
+ * will immediately return {@code false}.
+ *
+ * <p>Compatibility:
+ * <ul>
+ * <li>API < 34: Same behavior, immediately returns false</li>
+ * </ul>
+ */
+ public static final int NO_HAPTICS = -1;
+
+ /**
+ * The user has performed a long press on an object that is resulting in an action being
+ * performed.
+ */
+ public static final int LONG_PRESS = 0;
+
+ /**
+ * The user has pressed on a virtual on-screen key.
+ */
+ public static final int VIRTUAL_KEY = 1;
+
+ /**
+ * The user has pressed a soft keyboard key.
+ */
+ public static final int KEYBOARD_TAP = 3;
+
+ /**
+ * The user has pressed either an hour or minute tick of a Clock.
+ *
+ * <p>Compatibility:
+ * <ul>
+ * <li>API < 21: No-op</li>
+ * </ul>
+ */
+ public static final int CLOCK_TICK = 4;
+
+ /**
+ * The user has performed a context click on an object.
+ *
+ * <p>Compatibility:
+ * <ul>
+ * <li>API < 23: Same feedback as CLOCK_TICK</li>
+ * <li>API < 21: No-op</li>
+ * </ul>
+ */
+ public static final int CONTEXT_CLICK = 6;
+
+ /**
+ * The user has pressed a virtual or software keyboard key.
+ *
+ * <p>Compatibility:
+ * <ul>
+ * <li>API < 27: Same feedback as KEYBOARD_TAP</li>
+ * </ul>
+ */
+ public static final int KEYBOARD_PRESS = KEYBOARD_TAP; // Platform constant is also the same.
+
+ /**
+ * The user has released a virtual keyboard key.
+ *
+ * <p>Compatibility:
+ * <ul>
+ * <li>API < 27: No-op</li>
+ * </ul>
+ */
+ public static final int KEYBOARD_RELEASE = 7;
+
+ /**
+ * The user has released a virtual key.
+ *
+ * <p>Compatibility:
+ * <ul>
+ * <li>API < 27: No-op</li>
+ * </ul>
+ */
+ public static final int VIRTUAL_KEY_RELEASE = 8;
+
+ /**
+ * The user has performed a selection/insertion handle move on text field.
+ *
+ * <p>Compatibility:
+ * <ul>
+ * <li>API < 27: No-op</li>
+ * </ul>
+ */
+ public static final int TEXT_HANDLE_MOVE = 9;
+
+ /**
+ * The user has started a gesture (e.g. on the soft keyboard).
+ *
+ * <p>Compatibility:
+ * <ul>
+ * <li>API < 30: Same feedback as VIRTUAL_KEY</li>
+ * </ul>
+ */
+ public static final int GESTURE_START = 12;
+
+ /**
+ * The user has finished a gesture (e.g. on the soft keyboard).
+ *
+ * <p>Compatibility:
+ * <ul>
+ * <li>API < 30: Same feedback as CONTEXT_CLICK</li>
+ * <li>API < 21: No-op</li>
+ * </ul>
+ */
+ public static final int GESTURE_END = 13;
+
+ /**
+ * A haptic effect to signal the confirmation or successful completion of a user interaction.
+ *
+ * <p>Compatibility:
+ * <ul>
+ * <li>API < 30: Same feedback as VIRTUAL_KEY</li>
+ * </ul>
+ */
+ public static final int CONFIRM = 16;
+
+ /**
+ * A haptic effect to signal the rejection or failure of a user interaction.
+ *
+ * <p>Compatibility:
+ * <ul>
+ * <li>API < 30: Same feedback as LONG_PRESS</li>
+ * </ul>
+ */
+ public static final int REJECT = 17;
+
+ /**
+ * The user has toggled a switch or button into the on position.
+ *
+ * <p>Compatibility:
+ * <ul>
+ * <li>API < 34: Same feedback as CONTEXT_CLICK</li>
+ * <li>API < 21: No-op</li>
+ * </ul>
+ */
+ public static final int TOGGLE_ON = 21;
+
+ /**
+ * The user has toggled a switch or button into the off position.
+ *
+ * <p>Compatibility:
+ * <ul>
+ * <li>API < 34: Same feedback as CLOCK_TICK</li>
+ * <li>API < 21: No-op</li>
+ * </ul>
+ */
+ public static final int TOGGLE_OFF = 22;
+
+ /**
+ * The user is executing a swipe/drag-style gesture, such as pull-to-refresh, where the
+ * gesture action is “eligible” at a certain threshold of movement, and can be cancelled by
+ * moving back past the threshold. This constant indicates that the user's motion has just
+ * passed the threshold for the action to be activated on release.
+ *
+ * @see #GESTURE_THRESHOLD_DEACTIVATE
+ *
+ * <p>Compatibility:
+ * <ul>
+ * <li>API < 34: Same feedback as CONTEXT_CLICK</li>
+ * <li>API < 21: No-op</li>
+ * </ul>
+ */
+ public static final int GESTURE_THRESHOLD_ACTIVATE = 23;
+
+ /**
+ * The user is executing a swipe/drag-style gesture, such as pull-to-refresh, where the
+ * gesture action is “eligible” at a certain threshold of movement, and can be cancelled by
+ * moving back past the threshold. This constant indicates that the user's motion has just
+ * re-crossed back "under" the threshold for the action to be activated, meaning the gesture is
+ * currently in a cancelled state.
+ *
+ * @see #GESTURE_THRESHOLD_ACTIVATE
+ *
+ * <p>Compatibility:
+ * <ul>
+ * <li>API < 34: Same feedback as CLOCK_TICK</li>
+ * <li>API < 21: No-op</li>
+ * </ul>
+ */
+ public static final int GESTURE_THRESHOLD_DEACTIVATE = 24;
+
+ /**
+ * The user has started a drag-and-drop gesture. The drag target has just been "picked up".
+ *
+ * <p>Compatibility:
+ * <ul>
+ * <li>API < 34: Same feedback as LONG_PRESS</li>
+ * </ul>
+ */
+ public static final int DRAG_START = 25;
+
+ /**
+ * The user is switching between a series of potential choices, for example items in a list
+ * or discrete points on a slider.
+ *
+ * <p>See also {@link #SEGMENT_FREQUENT_TICK} for cases where density of choices is high, and
+ * the haptics should be lighter or suppressed for a better user experience.
+ *
+ * <p>Compatibility:
+ * <ul>
+ * <li>API < 34: Same feedback as CONTEXT_CLICK</li>
+ * <li>API < 21: No-op</li>
+ * </ul>
+ */
+ public static final int SEGMENT_TICK = 26;
+
+ /**
+ * The user is switching between a series of many potential choices, for example minutes on a
+ * clock face, or individual percentages. This constant is expected to be very soft, so as
+ * not to be uncomfortable when performed a lot in quick succession. If the device can’t make
+ * a suitably soft vibration, then it may not make any vibration.
+ *
+ * <p>Some specializations of this constant exist for specific actions, notably
+ * {@link #CLOCK_TICK} and {@link #TEXT_HANDLE_MOVE}.
+ *
+ * <p>See also {@link #SEGMENT_TICK}.
+ *
+ * <p>Compatibility:
+ * <ul>
+ * <li>API < 34: Same feedback as CLOCK_TICK</li>
+ * <li>API < 21: No-op</li>
+ * </ul>
+ */
+ public static final int SEGMENT_FREQUENT_TICK = 27;
+
+ /** First constant value, excluding {@link #NO_HAPTICS} constant. */
+ @VisibleForTesting
+ static final int FIRST_CONSTANT_INT = LONG_PRESS;
+
+ /** Last constant value used. */
+ @VisibleForTesting
+ static final int LAST_CONSTANT_INT = SEGMENT_FREQUENT_TICK;
+
+ /**
+ * Flag for {@link ViewCompat#performHapticFeedback(android.view.View, int, int)}: Ignore the
+ * setting in the view for whether to perform haptic feedback, do it always.
+ */
+ public static final int FLAG_IGNORE_VIEW_SETTING = 0x0001;
+
+ /** Haptic feedback types. */
+ @IntDef(value = {
+ NO_HAPTICS,
+ LONG_PRESS,
+ VIRTUAL_KEY,
+ KEYBOARD_TAP,
+ CLOCK_TICK,
+ CONTEXT_CLICK,
+ KEYBOARD_PRESS,
+ KEYBOARD_RELEASE,
+ VIRTUAL_KEY_RELEASE,
+ TEXT_HANDLE_MOVE,
+ GESTURE_START,
+ GESTURE_END,
+ CONFIRM,
+ REJECT,
+ TOGGLE_ON,
+ TOGGLE_OFF,
+ GESTURE_THRESHOLD_ACTIVATE,
+ GESTURE_THRESHOLD_DEACTIVATE,
+ DRAG_START,
+ SEGMENT_TICK,
+ SEGMENT_FREQUENT_TICK
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
+ public @interface HapticFeedbackType {
+ }
+
+ /** Flags for performing haptic feedback. */
+ @IntDef(flag = true, value = {
+ FLAG_IGNORE_VIEW_SETTING
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
+ public @interface HapticFeedbackFlags {
+ }
+
+ /**
+ * Returns a haptic feedback constant that is available for this platform build.
+ *
+ * @param feedbackConstant The feedback constant requested
+ * @return The same constant, if supported by this platform build, or a supported fallback.
+ */
+ @HapticFeedbackType
+ static int getFeedbackConstantOrFallback(@HapticFeedbackType int feedbackConstant) {
+ if (feedbackConstant == NO_HAPTICS) {
+ // Skip fallback logic if constant is no-op.
+ return NO_HAPTICS;
+ }
+ if (Build.VERSION.SDK_INT < 34) {
+ switch (feedbackConstant) {
+ case DRAG_START:
+ feedbackConstant = LONG_PRESS;
+ break;
+ case TOGGLE_ON:
+ case SEGMENT_TICK:
+ case GESTURE_THRESHOLD_ACTIVATE:
+ feedbackConstant = CONTEXT_CLICK;
+ break;
+ case TOGGLE_OFF:
+ case SEGMENT_FREQUENT_TICK:
+ case GESTURE_THRESHOLD_DEACTIVATE:
+ feedbackConstant = CLOCK_TICK;
+ break;
+ }
+ }
+ if (Build.VERSION.SDK_INT < 30) {
+ switch (feedbackConstant) {
+ case REJECT:
+ feedbackConstant = LONG_PRESS;
+ break;
+ case CONFIRM:
+ case GESTURE_START:
+ feedbackConstant = VIRTUAL_KEY;
+ break;
+ case GESTURE_END:
+ feedbackConstant = CONTEXT_CLICK;
+ break;
+ }
+ }
+ if (Build.VERSION.SDK_INT < 27) {
+ switch (feedbackConstant) {
+ case KEYBOARD_RELEASE:
+ case VIRTUAL_KEY_RELEASE:
+ case TEXT_HANDLE_MOVE:
+ feedbackConstant = NO_HAPTICS;
+ break;
+ }
+ }
+ if (Build.VERSION.SDK_INT < 23) {
+ switch (feedbackConstant) {
+ case CONTEXT_CLICK:
+ feedbackConstant = CLOCK_TICK;
+ break;
+ }
+ }
+ if (Build.VERSION.SDK_INT < 21) {
+ switch (feedbackConstant) {
+ case CLOCK_TICK:
+ feedbackConstant = NO_HAPTICS;
+ break;
+ }
+ }
+ return feedbackConstant;
+ }
+
+ private HapticFeedbackConstantsCompat() {}
+}
diff --git a/core/core/src/main/java/androidx/core/view/ViewCompat.java b/core/core/src/main/java/androidx/core/view/ViewCompat.java
index 856e06d..5f551cf 100644
--- a/core/core/src/main/java/androidx/core/view/ViewCompat.java
+++ b/core/core/src/main/java/androidx/core/view/ViewCompat.java
@@ -76,6 +76,8 @@
import androidx.core.R;
import androidx.core.util.Preconditions;
import androidx.core.view.AccessibilityDelegateCompat.AccessibilityDelegateAdapter;
+import androidx.core.view.HapticFeedbackConstantsCompat.HapticFeedbackFlags;
+import androidx.core.view.HapticFeedbackConstantsCompat.HapticFeedbackType;
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat;
import androidx.core.view.accessibility.AccessibilityNodeProviderCompat;
@@ -1483,6 +1485,58 @@
}
/**
+ * Perform a haptic feedback to the user for the view.
+ *
+ * <p>The framework will provide haptic feedback for some built in actions, such as long
+ * presses, but you may wish to provide feedback for your own widget.
+ *
+ * <p>The feedback will only be performed if {@link android.view.View#isHapticFeedbackEnabled()}
+ * is true.
+ *
+ * <em>Note:</em> Check compatibility support for each feedback constant described at
+ * {@link HapticFeedbackConstantsCompat}.
+ *
+ * @param view The view.
+ * @param feedbackConstant One of the constants defined in {@link HapticFeedbackConstantsCompat}
+ * @return Whether the feedback might be performed - generally this result should be ignored
+ */
+ public static boolean performHapticFeedback(@NonNull View view,
+ @HapticFeedbackType int feedbackConstant) {
+ feedbackConstant =
+ HapticFeedbackConstantsCompat.getFeedbackConstantOrFallback(feedbackConstant);
+ if (feedbackConstant == HapticFeedbackConstantsCompat.NO_HAPTICS) {
+ // This compat implementation is straightforward.
+ return false;
+ }
+ return view.performHapticFeedback(feedbackConstant);
+ }
+
+ /**
+ * Perform a haptic feedback to the user for the view.
+ *
+ * <p>This is similar to {@link #performHapticFeedback(android.view.View, int)}, with
+ * additional options.
+ *
+ * <em>Note:</em> Check compatibility support for each feedback constant described at
+ * {@link HapticFeedbackConstantsCompat}.
+ *
+ * @param view The view.
+ * @param feedbackConstant One of the constants defined in {@link HapticFeedbackConstantsCompat}
+ * @param flags Additional flags as per {@link HapticFeedbackConstantsCompat}
+ * @return Whether the feedback might be performed - generally this result should be ignored
+ */
+ public static boolean performHapticFeedback(@NonNull View view,
+ @HapticFeedbackType int feedbackConstant, @HapticFeedbackFlags int flags) {
+ feedbackConstant =
+ HapticFeedbackConstantsCompat.getFeedbackConstantOrFallback(feedbackConstant);
+ if (feedbackConstant == HapticFeedbackConstantsCompat.NO_HAPTICS) {
+ // This compat implementation is straightforward.
+ return false;
+ }
+ return view.performHapticFeedback(feedbackConstant, flags);
+ }
+
+ /**
* Adds an accessibility action that can be performed on a node associated with a view.
* A view can only have 32 actions created with this API.
*
diff --git a/core/uwb/uwb-rxjava3/api/public_plus_experimental_current.txt b/core/uwb/uwb-rxjava3/api/public_plus_experimental_current.txt
deleted file mode 100644
index 9f9d29f..0000000
--- a/core/uwb/uwb-rxjava3/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-// Signature format: 4.0
-package androidx.core.uwb.rxjava3 {
-
- public final class UwbClientSessionScopeRx {
- method public static io.reactivex.rxjava3.core.Flowable<androidx.core.uwb.RangingResult> rangingResultsFlowable(androidx.core.uwb.UwbClientSessionScope, androidx.core.uwb.RangingParameters parameters);
- method public static io.reactivex.rxjava3.core.Observable<androidx.core.uwb.RangingResult> rangingResultsObservable(androidx.core.uwb.UwbClientSessionScope, androidx.core.uwb.RangingParameters parameters);
- }
-
- public final class UwbControllerSessionScopeRx {
- method public static io.reactivex.rxjava3.core.Single<kotlin.Unit> addControleeSingle(androidx.core.uwb.UwbControllerSessionScope, androidx.core.uwb.UwbAddress address);
- method public static io.reactivex.rxjava3.core.Single<kotlin.Unit> removeControleeSingle(androidx.core.uwb.UwbControllerSessionScope, androidx.core.uwb.UwbAddress address);
- }
-
- public final class UwbManagerRx {
- method @Deprecated public static io.reactivex.rxjava3.core.Single<androidx.core.uwb.UwbClientSessionScope> clientSessionScopeSingle(androidx.core.uwb.UwbManager);
- method public static io.reactivex.rxjava3.core.Single<androidx.core.uwb.UwbControleeSessionScope> controleeSessionScopeSingle(androidx.core.uwb.UwbManager);
- method public static io.reactivex.rxjava3.core.Single<androidx.core.uwb.UwbControllerSessionScope> controllerSessionScopeSingle(androidx.core.uwb.UwbManager);
- }
-
-}
-
diff --git a/core/uwb/uwb-rxjava3/src/androidTest/java/androidx/core/uwb/rxjava3/mock/TestUwbManager.kt b/core/uwb/uwb-rxjava3/src/androidTest/java/androidx/core/uwb/rxjava3/mock/TestUwbManager.kt
index 92785bf3..112a643 100644
--- a/core/uwb/uwb-rxjava3/src/androidTest/java/androidx/core/uwb/rxjava3/mock/TestUwbManager.kt
+++ b/core/uwb/uwb-rxjava3/src/androidTest/java/androidx/core/uwb/rxjava3/mock/TestUwbManager.kt
@@ -16,12 +16,12 @@
package androidx.core.uwb.rxjava3.mock
-import androidx.core.uwb.UwbManager
-import androidx.core.uwb.UwbAddress
import androidx.core.uwb.RangingCapabilities
+import androidx.core.uwb.UwbAddress
import androidx.core.uwb.UwbClientSessionScope
import androidx.core.uwb.UwbControleeSessionScope
import androidx.core.uwb.UwbControllerSessionScope
+import androidx.core.uwb.UwbManager
import com.google.android.gms.nearby.uwb.UwbComplexChannel
/** A default implementation of [UwbManager] used in testing. */
diff --git a/core/uwb/uwb/api/current.txt b/core/uwb/uwb/api/current.txt
index 57ac364..569a8ef 100644
--- a/core/uwb/uwb/api/current.txt
+++ b/core/uwb/uwb/api/current.txt
@@ -118,16 +118,16 @@
public final class UwbDevice {
ctor public UwbDevice(androidx.core.uwb.UwbAddress address);
- method public static androidx.core.uwb.UwbDevice createForAddress(String address);
method public static androidx.core.uwb.UwbDevice createForAddress(byte[] address);
+ method public static androidx.core.uwb.UwbDevice createForAddress(String address);
method public androidx.core.uwb.UwbAddress getAddress();
property public final androidx.core.uwb.UwbAddress address;
field public static final androidx.core.uwb.UwbDevice.Companion Companion;
}
public static final class UwbDevice.Companion {
- method public androidx.core.uwb.UwbDevice createForAddress(String address);
method public androidx.core.uwb.UwbDevice createForAddress(byte[] address);
+ method public androidx.core.uwb.UwbDevice createForAddress(String address);
}
@kotlin.jvm.JvmDefaultWithCompatibility public interface UwbManager {
diff --git a/core/uwb/uwb/api/public_plus_experimental_current.txt b/core/uwb/uwb/api/public_plus_experimental_current.txt
deleted file mode 100644
index 57ac364..0000000
--- a/core/uwb/uwb/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,166 +0,0 @@
-// Signature format: 4.0
-package androidx.core.uwb {
-
- public final class RangingCapabilities {
- ctor public RangingCapabilities(boolean isDistanceSupported, boolean isAzimuthalAngleSupported, boolean isElevationAngleSupported, int minRangingInterval, java.util.Set<java.lang.Integer> supportedChannels, java.util.Set<java.lang.Integer> supportedConfigIds);
- method public int getMinRangingInterval();
- method public java.util.Set<java.lang.Integer> getSupportedChannels();
- method public java.util.Set<java.lang.Integer> getSupportedConfigIds();
- method public boolean isAzimuthalAngleSupported();
- method public boolean isDistanceSupported();
- method public boolean isElevationAngleSupported();
- property public final boolean isAzimuthalAngleSupported;
- property public final boolean isDistanceSupported;
- property public final boolean isElevationAngleSupported;
- property public final int minRangingInterval;
- property public final java.util.Set<java.lang.Integer> supportedChannels;
- property public final java.util.Set<java.lang.Integer> supportedConfigIds;
- }
-
- public final class RangingMeasurement {
- ctor public RangingMeasurement(float value);
- method public float getValue();
- property public final float value;
- }
-
- public final class RangingParameters {
- ctor public RangingParameters(int uwbConfigType, int sessionId, byte[]? sessionKeyInfo, androidx.core.uwb.UwbComplexChannel? complexChannel, java.util.List<androidx.core.uwb.UwbDevice> peerDevices, int updateRateType);
- method public androidx.core.uwb.UwbComplexChannel? getComplexChannel();
- method public java.util.List<androidx.core.uwb.UwbDevice> getPeerDevices();
- method public int getSessionId();
- method public byte[]? getSessionKeyInfo();
- method public int getUpdateRateType();
- method public int getUwbConfigType();
- property public final androidx.core.uwb.UwbComplexChannel? complexChannel;
- property public final java.util.List<androidx.core.uwb.UwbDevice> peerDevices;
- property public final int sessionId;
- property public final byte[]? sessionKeyInfo;
- property public final int updateRateType;
- property public final int uwbConfigType;
- field public static final int CONFIG_MULTICAST_DS_TWR;
- field public static final int CONFIG_UNICAST_DS_TWR;
- field public static final androidx.core.uwb.RangingParameters.Companion Companion;
- field public static final int RANGING_UPDATE_RATE_AUTOMATIC;
- field public static final int RANGING_UPDATE_RATE_FREQUENT;
- field public static final int RANGING_UPDATE_RATE_INFREQUENT;
- }
-
- public static final class RangingParameters.Companion {
- }
-
- public final class RangingPosition {
- ctor public RangingPosition(androidx.core.uwb.RangingMeasurement? distance, androidx.core.uwb.RangingMeasurement? azimuth, androidx.core.uwb.RangingMeasurement? elevation, long elapsedRealtimeNanos);
- method public androidx.core.uwb.RangingMeasurement? getAzimuth();
- method public androidx.core.uwb.RangingMeasurement? getDistance();
- method public long getElapsedRealtimeNanos();
- method public androidx.core.uwb.RangingMeasurement? getElevation();
- property public final androidx.core.uwb.RangingMeasurement? azimuth;
- property public final androidx.core.uwb.RangingMeasurement? distance;
- property public final long elapsedRealtimeNanos;
- property public final androidx.core.uwb.RangingMeasurement? elevation;
- }
-
- public abstract class RangingResult {
- method public abstract androidx.core.uwb.UwbDevice getDevice();
- property public abstract androidx.core.uwb.UwbDevice device;
- }
-
- public static final class RangingResult.RangingResultPeerDisconnected extends androidx.core.uwb.RangingResult {
- ctor public RangingResult.RangingResultPeerDisconnected(androidx.core.uwb.UwbDevice device);
- method public androidx.core.uwb.UwbDevice getDevice();
- property public androidx.core.uwb.UwbDevice device;
- }
-
- public static final class RangingResult.RangingResultPosition extends androidx.core.uwb.RangingResult {
- ctor public RangingResult.RangingResultPosition(androidx.core.uwb.UwbDevice device, androidx.core.uwb.RangingPosition position);
- method public androidx.core.uwb.UwbDevice getDevice();
- method public androidx.core.uwb.RangingPosition getPosition();
- property public androidx.core.uwb.UwbDevice device;
- property public final androidx.core.uwb.RangingPosition position;
- }
-
- public final class UwbAddress {
- ctor public UwbAddress(byte[] address);
- ctor public UwbAddress(String address);
- method public byte[] getAddress();
- property public final byte[] address;
- field public static final androidx.core.uwb.UwbAddress.Companion Companion;
- }
-
- public static final class UwbAddress.Companion {
- }
-
- public interface UwbClientSessionScope {
- method public androidx.core.uwb.UwbAddress getLocalAddress();
- method public androidx.core.uwb.RangingCapabilities getRangingCapabilities();
- method public kotlinx.coroutines.flow.Flow<androidx.core.uwb.RangingResult> prepareSession(androidx.core.uwb.RangingParameters parameters);
- property public abstract androidx.core.uwb.UwbAddress localAddress;
- property public abstract androidx.core.uwb.RangingCapabilities rangingCapabilities;
- }
-
- public final class UwbComplexChannel {
- ctor public UwbComplexChannel(int channel, int preambleIndex);
- method public int getChannel();
- method public int getPreambleIndex();
- property public final int channel;
- property public final int preambleIndex;
- }
-
- public interface UwbControleeSessionScope extends androidx.core.uwb.UwbClientSessionScope {
- }
-
- public interface UwbControllerSessionScope extends androidx.core.uwb.UwbClientSessionScope {
- method public suspend Object? addControlee(androidx.core.uwb.UwbAddress address, kotlin.coroutines.Continuation<? super kotlin.Unit>);
- method public androidx.core.uwb.UwbComplexChannel getUwbComplexChannel();
- method public suspend Object? removeControlee(androidx.core.uwb.UwbAddress address, kotlin.coroutines.Continuation<? super kotlin.Unit>);
- property public abstract androidx.core.uwb.UwbComplexChannel uwbComplexChannel;
- }
-
- public final class UwbDevice {
- ctor public UwbDevice(androidx.core.uwb.UwbAddress address);
- method public static androidx.core.uwb.UwbDevice createForAddress(String address);
- method public static androidx.core.uwb.UwbDevice createForAddress(byte[] address);
- method public androidx.core.uwb.UwbAddress getAddress();
- property public final androidx.core.uwb.UwbAddress address;
- field public static final androidx.core.uwb.UwbDevice.Companion Companion;
- }
-
- public static final class UwbDevice.Companion {
- method public androidx.core.uwb.UwbDevice createForAddress(String address);
- method public androidx.core.uwb.UwbDevice createForAddress(byte[] address);
- }
-
- @kotlin.jvm.JvmDefaultWithCompatibility public interface UwbManager {
- method @Deprecated public suspend Object? clientSessionScope(kotlin.coroutines.Continuation<? super androidx.core.uwb.UwbClientSessionScope>);
- method public suspend Object? controleeSessionScope(kotlin.coroutines.Continuation<? super androidx.core.uwb.UwbControleeSessionScope>);
- method public suspend Object? controllerSessionScope(kotlin.coroutines.Continuation<? super androidx.core.uwb.UwbControllerSessionScope>);
- method public default static androidx.core.uwb.UwbManager createInstance(android.content.Context context);
- field public static final androidx.core.uwb.UwbManager.Companion Companion;
- }
-
- public static final class UwbManager.Companion {
- method public androidx.core.uwb.UwbManager createInstance(android.content.Context context);
- }
-
-}
-
-package androidx.core.uwb.exceptions {
-
- public class UwbApiException extends java.lang.Exception {
- ctor public UwbApiException(String message);
- }
-
- public final class UwbHardwareNotAvailableException extends androidx.core.uwb.exceptions.UwbApiException {
- ctor public UwbHardwareNotAvailableException(String message);
- }
-
- public final class UwbServiceNotAvailableException extends androidx.core.uwb.exceptions.UwbApiException {
- ctor public UwbServiceNotAvailableException(String message);
- }
-
- public final class UwbSystemCallbackException extends androidx.core.uwb.exceptions.UwbApiException {
- ctor public UwbSystemCallbackException(String message);
- }
-
-}
-
diff --git a/core/uwb/uwb/api/restricted_current.txt b/core/uwb/uwb/api/restricted_current.txt
index 57ac364..569a8ef 100644
--- a/core/uwb/uwb/api/restricted_current.txt
+++ b/core/uwb/uwb/api/restricted_current.txt
@@ -118,16 +118,16 @@
public final class UwbDevice {
ctor public UwbDevice(androidx.core.uwb.UwbAddress address);
- method public static androidx.core.uwb.UwbDevice createForAddress(String address);
method public static androidx.core.uwb.UwbDevice createForAddress(byte[] address);
+ method public static androidx.core.uwb.UwbDevice createForAddress(String address);
method public androidx.core.uwb.UwbAddress getAddress();
property public final androidx.core.uwb.UwbAddress address;
field public static final androidx.core.uwb.UwbDevice.Companion Companion;
}
public static final class UwbDevice.Companion {
- method public androidx.core.uwb.UwbDevice createForAddress(String address);
method public androidx.core.uwb.UwbDevice createForAddress(byte[] address);
+ method public androidx.core.uwb.UwbDevice createForAddress(String address);
}
@kotlin.jvm.JvmDefaultWithCompatibility public interface UwbManager {
diff --git a/core/uwb/uwb/src/main/java/androidx/core/uwb/impl/UwbClientSessionScopeImpl.kt b/core/uwb/uwb/src/main/java/androidx/core/uwb/impl/UwbClientSessionScopeImpl.kt
index 86c1559..aafd713 100644
--- a/core/uwb/uwb/src/main/java/androidx/core/uwb/impl/UwbClientSessionScopeImpl.kt
+++ b/core/uwb/uwb/src/main/java/androidx/core/uwb/impl/UwbClientSessionScopeImpl.kt
@@ -20,10 +20,11 @@
import androidx.core.uwb.RangingCapabilities
import androidx.core.uwb.RangingMeasurement
import androidx.core.uwb.RangingParameters
-import androidx.core.uwb.RangingResult.RangingResultPosition
import androidx.core.uwb.RangingResult.RangingResultPeerDisconnected
+import androidx.core.uwb.RangingResult.RangingResultPosition
import androidx.core.uwb.UwbAddress
import androidx.core.uwb.UwbControleeSessionScope
+import androidx.core.uwb.helper.handleApiException
import com.google.android.gms.common.api.ApiException
import com.google.android.gms.nearby.uwb.RangingPosition
import com.google.android.gms.nearby.uwb.RangingSessionCallback
@@ -32,11 +33,10 @@
import com.google.android.gms.nearby.uwb.UwbDevice
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.launch
import kotlinx.coroutines.tasks.await
-import androidx.core.uwb.helper.handleApiException
-import kotlinx.coroutines.channels.awaitClose
internal class UwbClientSessionScopeImpl(
private val uwbClient: UwbClient,
diff --git a/core/uwb/uwb/src/main/java/androidx/core/uwb/impl/UwbManagerImpl.kt b/core/uwb/uwb/src/main/java/androidx/core/uwb/impl/UwbManagerImpl.kt
index 4edf85e..489bef6 100644
--- a/core/uwb/uwb/src/main/java/androidx/core/uwb/impl/UwbManagerImpl.kt
+++ b/core/uwb/uwb/src/main/java/androidx/core/uwb/impl/UwbManagerImpl.kt
@@ -30,13 +30,13 @@
import androidx.core.uwb.UwbControllerSessionScope
import androidx.core.uwb.UwbManager
import androidx.core.uwb.backend.IUwb
-import com.google.android.gms.common.api.ApiException
-import com.google.android.gms.nearby.Nearby
-import kotlinx.coroutines.tasks.await
import androidx.core.uwb.helper.checkSystemFeature
import androidx.core.uwb.helper.handleApiException
import com.google.android.gms.common.ConnectionResult
import com.google.android.gms.common.GoogleApiAvailability
+import com.google.android.gms.common.api.ApiException
+import com.google.android.gms.nearby.Nearby
+import kotlinx.coroutines.tasks.await
internal class UwbManagerImpl(private val context: Context) : UwbManager {
companion object {
@@ -83,6 +83,10 @@
Log.i(TAG, "Creating Gms Client session scope")
val uwbClient = if (isController)
Nearby.getUwbControllerClient(context) else Nearby.getUwbControleeClient(context)
+ if (!uwbClient.isAvailable().await()) {
+ Log.e(TAG, "Uwb availability : false")
+ throw RuntimeException("Cannot start a ranging session when UWB is unavailable")
+ }
try {
val nearbyLocalAddress = uwbClient.localAddress.await()
val nearbyRangingCapabilities = uwbClient.rangingCapabilities.await()
diff --git a/credentials/OWNERS b/credentials/OWNERS
index f306188..56a1ae0 100644
--- a/credentials/OWNERS
+++ b/credentials/OWNERS
@@ -4,3 +4,6 @@
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
diff --git a/credentials/credentials-play-services-auth/api/public_plus_experimental_current.txt b/credentials/credentials-play-services-auth/api/public_plus_experimental_current.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/credentials/credentials-play-services-auth/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/credentials/credentials-play-services-auth/build.gradle b/credentials/credentials-play-services-auth/build.gradle
index 4558801..dab1da2 100644
--- a/credentials/credentials-play-services-auth/build.gradle
+++ b/credentials/credentials-play-services-auth/build.gradle
@@ -68,7 +68,7 @@
}
androidx {
- name = "Credentials Play Services Auth Library"
+ name = "Credentials Play Services Auth"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2022"
description = "sign into apps using play-services-auth library"
diff --git a/credentials/credentials-play-services-auth/src/androidTest/java/androidx/credentials/playservices/beginsignin/CredentialProviderBeginSignInControllerTest.kt b/credentials/credentials-play-services-auth/src/androidTest/java/androidx/credentials/playservices/beginsignin/CredentialProviderBeginSignInControllerTest.kt
index 9652061..a783ea6 100644
--- a/credentials/credentials-play-services-auth/src/androidTest/java/androidx/credentials/playservices/beginsignin/CredentialProviderBeginSignInControllerTest.kt
+++ b/credentials/credentials-play-services-auth/src/androidTest/java/androidx/credentials/playservices/beginsignin/CredentialProviderBeginSignInControllerTest.kt
@@ -25,10 +25,10 @@
import androidx.test.core.app.ActivityScenario
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
+import com.google.android.libraries.identity.googleid.GetGoogleIdOption
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
-import com.google.android.libraries.identity.googleid.GetGoogleIdOption
@RunWith(AndroidJUnit4::class)
@SmallTest
diff --git a/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/CredentialProviderPlayServicesImpl.kt b/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/CredentialProviderPlayServicesImpl.kt
index 3524fe2..d4dc2c5 100644
--- a/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/CredentialProviderPlayServicesImpl.kt
+++ b/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/CredentialProviderPlayServicesImpl.kt
@@ -20,8 +20,8 @@
import android.content.Context
import android.os.CancellationSignal
import android.util.Log
-import androidx.credentials.ClearCredentialStateRequest
import androidx.annotation.VisibleForTesting
+import androidx.credentials.ClearCredentialStateRequest
import androidx.credentials.CreateCredentialRequest
import androidx.credentials.CreateCredentialResponse
import androidx.credentials.CreatePasswordRequest
diff --git a/credentials/credentials-provider/build.gradle b/credentials/credentials-provider/build.gradle
index 0f5fb6d..a2d506c 100644
--- a/credentials/credentials-provider/build.gradle
+++ b/credentials/credentials-provider/build.gradle
@@ -36,7 +36,7 @@
}
androidx {
- name = "Credentials Provider Library"
+ name = "Credentials Provider"
publish = Publish.NONE
inceptionYear = "2022"
description = "use utility APIs to process requests from, and return responses to the android" +
diff --git a/credentials/credentials/api/current.txt b/credentials/credentials/api/current.txt
index d15ea9a..5f71623 100644
--- a/credentials/credentials/api/current.txt
+++ b/credentials/credentials/api/current.txt
@@ -11,8 +11,8 @@
}
public static final class CreateCredentialRequest.DisplayInfo {
- ctor public CreateCredentialRequest.DisplayInfo(CharSequence userId, optional CharSequence? userDisplayName);
ctor public CreateCredentialRequest.DisplayInfo(CharSequence userId);
+ ctor public CreateCredentialRequest.DisplayInfo(CharSequence userId, optional CharSequence? userDisplayName);
method public CharSequence? getUserDisplayName();
method public CharSequence getUserId();
property public final CharSequence? userDisplayName;
@@ -23,9 +23,9 @@
}
public class CreateCustomCredentialRequest extends androidx.credentials.CreateCredentialRequest {
- ctor public CreateCustomCredentialRequest(String type, android.os.Bundle credentialData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, androidx.credentials.CreateCredentialRequest.DisplayInfo displayInfo, optional boolean isAutoSelectAllowed, optional String? origin);
- ctor public CreateCustomCredentialRequest(String type, android.os.Bundle credentialData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, androidx.credentials.CreateCredentialRequest.DisplayInfo displayInfo, optional boolean isAutoSelectAllowed);
ctor public CreateCustomCredentialRequest(String type, android.os.Bundle credentialData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, androidx.credentials.CreateCredentialRequest.DisplayInfo displayInfo);
+ ctor public CreateCustomCredentialRequest(String type, android.os.Bundle credentialData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, androidx.credentials.CreateCredentialRequest.DisplayInfo displayInfo, optional boolean isAutoSelectAllowed);
+ ctor public CreateCustomCredentialRequest(String type, android.os.Bundle credentialData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, androidx.credentials.CreateCredentialRequest.DisplayInfo displayInfo, optional boolean isAutoSelectAllowed, optional String? origin);
method public final android.os.Bundle getCandidateQueryData();
method public final android.os.Bundle getCredentialData();
method public final String getType();
@@ -47,8 +47,8 @@
}
public final class CreatePasswordRequest extends androidx.credentials.CreateCredentialRequest {
- ctor public CreatePasswordRequest(String id, String password, optional String? origin);
ctor public CreatePasswordRequest(String id, String password);
+ ctor public CreatePasswordRequest(String id, String password, optional String? origin);
method public String getId();
method public String getPassword();
property public final String id;
@@ -60,10 +60,10 @@
}
public final class CreatePublicKeyCredentialRequest extends androidx.credentials.CreateCredentialRequest {
- ctor public CreatePublicKeyCredentialRequest(String requestJson, optional String? clientDataHash, optional boolean preferImmediatelyAvailableCredentials, optional String? origin);
- ctor public CreatePublicKeyCredentialRequest(String requestJson, optional String? clientDataHash, optional boolean preferImmediatelyAvailableCredentials);
- ctor public CreatePublicKeyCredentialRequest(String requestJson, optional String? clientDataHash);
ctor public CreatePublicKeyCredentialRequest(String requestJson);
+ ctor public CreatePublicKeyCredentialRequest(String requestJson, optional String? clientDataHash);
+ ctor public CreatePublicKeyCredentialRequest(String requestJson, optional String? clientDataHash, optional boolean preferImmediatelyAvailableCredentials);
+ ctor public CreatePublicKeyCredentialRequest(String requestJson, optional String? clientDataHash, optional boolean preferImmediatelyAvailableCredentials, optional String? origin);
method public String? getClientDataHash();
method public boolean getPreferImmediatelyAvailableCredentials();
method public String getRequestJson();
@@ -120,8 +120,8 @@
}
public final class GetCredentialRequest {
- ctor public GetCredentialRequest(java.util.List<? extends androidx.credentials.CredentialOption> credentialOptions, optional String? origin);
ctor public GetCredentialRequest(java.util.List<? extends androidx.credentials.CredentialOption> credentialOptions);
+ ctor public GetCredentialRequest(java.util.List<? extends androidx.credentials.CredentialOption> credentialOptions, optional String? origin);
method public java.util.List<androidx.credentials.CredentialOption> getCredentialOptions();
method public String? getOrigin();
property public final java.util.List<androidx.credentials.CredentialOption> credentialOptions;
@@ -143,8 +143,8 @@
}
public class GetCustomCredentialOption extends androidx.credentials.CredentialOption {
- ctor public GetCustomCredentialOption(String type, android.os.Bundle requestData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, optional boolean isAutoSelectAllowed);
ctor public GetCustomCredentialOption(String type, android.os.Bundle requestData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired);
+ ctor public GetCustomCredentialOption(String type, android.os.Bundle requestData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, optional boolean isAutoSelectAllowed);
method public final android.os.Bundle getCandidateQueryData();
method public final android.os.Bundle getRequestData();
method public final String getType();
@@ -158,16 +158,16 @@
}
public final class GetPasswordOption extends androidx.credentials.CredentialOption {
- ctor public GetPasswordOption(optional boolean isAutoSelectAllowed);
ctor public GetPasswordOption();
+ ctor public GetPasswordOption(optional boolean isAutoSelectAllowed);
method public boolean isAutoSelectAllowed();
property public boolean isAutoSelectAllowed;
}
public final class GetPublicKeyCredentialOption extends androidx.credentials.CredentialOption {
- ctor public GetPublicKeyCredentialOption(String requestJson, optional String? clientDataHash, optional boolean preferImmediatelyAvailableCredentials);
- ctor public GetPublicKeyCredentialOption(String requestJson, optional String? clientDataHash);
ctor public GetPublicKeyCredentialOption(String requestJson);
+ ctor public GetPublicKeyCredentialOption(String requestJson, optional String? clientDataHash);
+ ctor public GetPublicKeyCredentialOption(String requestJson, optional String? clientDataHash, optional boolean preferImmediatelyAvailableCredentials);
method public String? getClientDataHash();
method public boolean getPreferImmediatelyAvailableCredentials();
method public String getRequestJson();
@@ -198,110 +198,110 @@
}
public final class ClearCredentialInterruptedException extends androidx.credentials.exceptions.ClearCredentialException {
- ctor public ClearCredentialInterruptedException(optional CharSequence? errorMessage);
ctor public ClearCredentialInterruptedException();
+ ctor public ClearCredentialInterruptedException(optional CharSequence? errorMessage);
}
public final class ClearCredentialProviderConfigurationException extends androidx.credentials.exceptions.ClearCredentialException {
- ctor public ClearCredentialProviderConfigurationException(optional CharSequence? errorMessage);
ctor public ClearCredentialProviderConfigurationException();
+ ctor public ClearCredentialProviderConfigurationException(optional CharSequence? errorMessage);
}
public final class ClearCredentialUnknownException extends androidx.credentials.exceptions.ClearCredentialException {
- ctor public ClearCredentialUnknownException(optional CharSequence? errorMessage);
ctor public ClearCredentialUnknownException();
+ ctor public ClearCredentialUnknownException(optional CharSequence? errorMessage);
}
public final class ClearCredentialUnsupportedException extends androidx.credentials.exceptions.ClearCredentialException {
- ctor public ClearCredentialUnsupportedException(optional CharSequence? errorMessage);
ctor public ClearCredentialUnsupportedException();
+ ctor public ClearCredentialUnsupportedException(optional CharSequence? errorMessage);
}
public final class ClearCustomCredentialException extends androidx.credentials.exceptions.ClearCredentialException {
- ctor public ClearCustomCredentialException(String type, optional CharSequence? errorMessage);
ctor public ClearCustomCredentialException(String type);
+ ctor public ClearCustomCredentialException(String type, optional CharSequence? errorMessage);
method public String getType();
property public String type;
}
public final class CreateCredentialCancellationException extends androidx.credentials.exceptions.CreateCredentialException {
- ctor public CreateCredentialCancellationException(optional CharSequence? errorMessage);
ctor public CreateCredentialCancellationException();
+ ctor public CreateCredentialCancellationException(optional CharSequence? errorMessage);
}
public abstract class CreateCredentialException extends java.lang.Exception {
}
public final class CreateCredentialInterruptedException extends androidx.credentials.exceptions.CreateCredentialException {
- ctor public CreateCredentialInterruptedException(optional CharSequence? errorMessage);
ctor public CreateCredentialInterruptedException();
+ ctor public CreateCredentialInterruptedException(optional CharSequence? errorMessage);
}
public final class CreateCredentialNoCreateOptionException extends androidx.credentials.exceptions.CreateCredentialException {
- ctor public CreateCredentialNoCreateOptionException(optional CharSequence? errorMessage);
ctor public CreateCredentialNoCreateOptionException();
+ ctor public CreateCredentialNoCreateOptionException(optional CharSequence? errorMessage);
}
public final class CreateCredentialProviderConfigurationException extends androidx.credentials.exceptions.CreateCredentialException {
- ctor public CreateCredentialProviderConfigurationException(optional CharSequence? errorMessage);
ctor public CreateCredentialProviderConfigurationException();
+ ctor public CreateCredentialProviderConfigurationException(optional CharSequence? errorMessage);
}
public final class CreateCredentialUnknownException extends androidx.credentials.exceptions.CreateCredentialException {
- ctor public CreateCredentialUnknownException(optional CharSequence? errorMessage);
ctor public CreateCredentialUnknownException();
+ ctor public CreateCredentialUnknownException(optional CharSequence? errorMessage);
}
public final class CreateCredentialUnsupportedException extends androidx.credentials.exceptions.CreateCredentialException {
- ctor public CreateCredentialUnsupportedException(optional CharSequence? errorMessage);
ctor public CreateCredentialUnsupportedException();
+ ctor public CreateCredentialUnsupportedException(optional CharSequence? errorMessage);
}
public final class CreateCustomCredentialException extends androidx.credentials.exceptions.CreateCredentialException {
- ctor public CreateCustomCredentialException(String type, optional CharSequence? errorMessage);
ctor public CreateCustomCredentialException(String type);
+ ctor public CreateCustomCredentialException(String type, optional CharSequence? errorMessage);
method public String getType();
property public String type;
}
public final class GetCredentialCancellationException extends androidx.credentials.exceptions.GetCredentialException {
- ctor public GetCredentialCancellationException(optional CharSequence? errorMessage);
ctor public GetCredentialCancellationException();
+ ctor public GetCredentialCancellationException(optional CharSequence? errorMessage);
}
public abstract class GetCredentialException extends java.lang.Exception {
}
public final class GetCredentialInterruptedException extends androidx.credentials.exceptions.GetCredentialException {
- ctor public GetCredentialInterruptedException(optional CharSequence? errorMessage);
ctor public GetCredentialInterruptedException();
+ ctor public GetCredentialInterruptedException(optional CharSequence? errorMessage);
}
public final class GetCredentialProviderConfigurationException extends androidx.credentials.exceptions.GetCredentialException {
- ctor public GetCredentialProviderConfigurationException(optional CharSequence? errorMessage);
ctor public GetCredentialProviderConfigurationException();
+ ctor public GetCredentialProviderConfigurationException(optional CharSequence? errorMessage);
}
public final class GetCredentialUnknownException extends androidx.credentials.exceptions.GetCredentialException {
- ctor public GetCredentialUnknownException(optional CharSequence? errorMessage);
ctor public GetCredentialUnknownException();
+ ctor public GetCredentialUnknownException(optional CharSequence? errorMessage);
}
public final class GetCredentialUnsupportedException extends androidx.credentials.exceptions.GetCredentialException {
- ctor public GetCredentialUnsupportedException(optional CharSequence? errorMessage);
ctor public GetCredentialUnsupportedException();
+ ctor public GetCredentialUnsupportedException(optional CharSequence? errorMessage);
}
public final class GetCustomCredentialException extends androidx.credentials.exceptions.GetCredentialException {
- ctor public GetCustomCredentialException(String type, optional CharSequence? errorMessage);
ctor public GetCustomCredentialException(String type);
+ ctor public GetCustomCredentialException(String type, optional CharSequence? errorMessage);
method public String getType();
property public String type;
}
public final class NoCredentialException extends androidx.credentials.exceptions.GetCredentialException {
- ctor public NoCredentialException(optional CharSequence? errorMessage);
ctor public NoCredentialException();
+ ctor public NoCredentialException(optional CharSequence? errorMessage);
}
}
@@ -433,8 +433,8 @@
package androidx.credentials.exceptions.publickeycredential {
public final class CreatePublicKeyCredentialDomException extends androidx.credentials.exceptions.publickeycredential.CreatePublicKeyCredentialException {
- ctor public CreatePublicKeyCredentialDomException(androidx.credentials.exceptions.domerrors.DomError domError, optional CharSequence? errorMessage);
ctor public CreatePublicKeyCredentialDomException(androidx.credentials.exceptions.domerrors.DomError domError);
+ ctor public CreatePublicKeyCredentialDomException(androidx.credentials.exceptions.domerrors.DomError domError, optional CharSequence? errorMessage);
method public androidx.credentials.exceptions.domerrors.DomError getDomError();
property public final androidx.credentials.exceptions.domerrors.DomError domError;
}
@@ -443,8 +443,8 @@
}
public final class GetPublicKeyCredentialDomException extends androidx.credentials.exceptions.publickeycredential.GetPublicKeyCredentialException {
- ctor public GetPublicKeyCredentialDomException(androidx.credentials.exceptions.domerrors.DomError domError, optional CharSequence? errorMessage);
ctor public GetPublicKeyCredentialDomException(androidx.credentials.exceptions.domerrors.DomError domError);
+ ctor public GetPublicKeyCredentialDomException(androidx.credentials.exceptions.domerrors.DomError domError, optional CharSequence? errorMessage);
method public androidx.credentials.exceptions.domerrors.DomError getDomError();
property public final androidx.credentials.exceptions.domerrors.DomError domError;
}
diff --git a/credentials/credentials/api/public_plus_experimental_current.txt b/credentials/credentials/api/public_plus_experimental_current.txt
index d15ea9a..5f71623 100644
--- a/credentials/credentials/api/public_plus_experimental_current.txt
+++ b/credentials/credentials/api/public_plus_experimental_current.txt
@@ -11,8 +11,8 @@
}
public static final class CreateCredentialRequest.DisplayInfo {
- ctor public CreateCredentialRequest.DisplayInfo(CharSequence userId, optional CharSequence? userDisplayName);
ctor public CreateCredentialRequest.DisplayInfo(CharSequence userId);
+ ctor public CreateCredentialRequest.DisplayInfo(CharSequence userId, optional CharSequence? userDisplayName);
method public CharSequence? getUserDisplayName();
method public CharSequence getUserId();
property public final CharSequence? userDisplayName;
@@ -23,9 +23,9 @@
}
public class CreateCustomCredentialRequest extends androidx.credentials.CreateCredentialRequest {
- ctor public CreateCustomCredentialRequest(String type, android.os.Bundle credentialData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, androidx.credentials.CreateCredentialRequest.DisplayInfo displayInfo, optional boolean isAutoSelectAllowed, optional String? origin);
- ctor public CreateCustomCredentialRequest(String type, android.os.Bundle credentialData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, androidx.credentials.CreateCredentialRequest.DisplayInfo displayInfo, optional boolean isAutoSelectAllowed);
ctor public CreateCustomCredentialRequest(String type, android.os.Bundle credentialData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, androidx.credentials.CreateCredentialRequest.DisplayInfo displayInfo);
+ ctor public CreateCustomCredentialRequest(String type, android.os.Bundle credentialData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, androidx.credentials.CreateCredentialRequest.DisplayInfo displayInfo, optional boolean isAutoSelectAllowed);
+ ctor public CreateCustomCredentialRequest(String type, android.os.Bundle credentialData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, androidx.credentials.CreateCredentialRequest.DisplayInfo displayInfo, optional boolean isAutoSelectAllowed, optional String? origin);
method public final android.os.Bundle getCandidateQueryData();
method public final android.os.Bundle getCredentialData();
method public final String getType();
@@ -47,8 +47,8 @@
}
public final class CreatePasswordRequest extends androidx.credentials.CreateCredentialRequest {
- ctor public CreatePasswordRequest(String id, String password, optional String? origin);
ctor public CreatePasswordRequest(String id, String password);
+ ctor public CreatePasswordRequest(String id, String password, optional String? origin);
method public String getId();
method public String getPassword();
property public final String id;
@@ -60,10 +60,10 @@
}
public final class CreatePublicKeyCredentialRequest extends androidx.credentials.CreateCredentialRequest {
- ctor public CreatePublicKeyCredentialRequest(String requestJson, optional String? clientDataHash, optional boolean preferImmediatelyAvailableCredentials, optional String? origin);
- ctor public CreatePublicKeyCredentialRequest(String requestJson, optional String? clientDataHash, optional boolean preferImmediatelyAvailableCredentials);
- ctor public CreatePublicKeyCredentialRequest(String requestJson, optional String? clientDataHash);
ctor public CreatePublicKeyCredentialRequest(String requestJson);
+ ctor public CreatePublicKeyCredentialRequest(String requestJson, optional String? clientDataHash);
+ ctor public CreatePublicKeyCredentialRequest(String requestJson, optional String? clientDataHash, optional boolean preferImmediatelyAvailableCredentials);
+ ctor public CreatePublicKeyCredentialRequest(String requestJson, optional String? clientDataHash, optional boolean preferImmediatelyAvailableCredentials, optional String? origin);
method public String? getClientDataHash();
method public boolean getPreferImmediatelyAvailableCredentials();
method public String getRequestJson();
@@ -120,8 +120,8 @@
}
public final class GetCredentialRequest {
- ctor public GetCredentialRequest(java.util.List<? extends androidx.credentials.CredentialOption> credentialOptions, optional String? origin);
ctor public GetCredentialRequest(java.util.List<? extends androidx.credentials.CredentialOption> credentialOptions);
+ ctor public GetCredentialRequest(java.util.List<? extends androidx.credentials.CredentialOption> credentialOptions, optional String? origin);
method public java.util.List<androidx.credentials.CredentialOption> getCredentialOptions();
method public String? getOrigin();
property public final java.util.List<androidx.credentials.CredentialOption> credentialOptions;
@@ -143,8 +143,8 @@
}
public class GetCustomCredentialOption extends androidx.credentials.CredentialOption {
- ctor public GetCustomCredentialOption(String type, android.os.Bundle requestData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, optional boolean isAutoSelectAllowed);
ctor public GetCustomCredentialOption(String type, android.os.Bundle requestData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired);
+ ctor public GetCustomCredentialOption(String type, android.os.Bundle requestData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, optional boolean isAutoSelectAllowed);
method public final android.os.Bundle getCandidateQueryData();
method public final android.os.Bundle getRequestData();
method public final String getType();
@@ -158,16 +158,16 @@
}
public final class GetPasswordOption extends androidx.credentials.CredentialOption {
- ctor public GetPasswordOption(optional boolean isAutoSelectAllowed);
ctor public GetPasswordOption();
+ ctor public GetPasswordOption(optional boolean isAutoSelectAllowed);
method public boolean isAutoSelectAllowed();
property public boolean isAutoSelectAllowed;
}
public final class GetPublicKeyCredentialOption extends androidx.credentials.CredentialOption {
- ctor public GetPublicKeyCredentialOption(String requestJson, optional String? clientDataHash, optional boolean preferImmediatelyAvailableCredentials);
- ctor public GetPublicKeyCredentialOption(String requestJson, optional String? clientDataHash);
ctor public GetPublicKeyCredentialOption(String requestJson);
+ ctor public GetPublicKeyCredentialOption(String requestJson, optional String? clientDataHash);
+ ctor public GetPublicKeyCredentialOption(String requestJson, optional String? clientDataHash, optional boolean preferImmediatelyAvailableCredentials);
method public String? getClientDataHash();
method public boolean getPreferImmediatelyAvailableCredentials();
method public String getRequestJson();
@@ -198,110 +198,110 @@
}
public final class ClearCredentialInterruptedException extends androidx.credentials.exceptions.ClearCredentialException {
- ctor public ClearCredentialInterruptedException(optional CharSequence? errorMessage);
ctor public ClearCredentialInterruptedException();
+ ctor public ClearCredentialInterruptedException(optional CharSequence? errorMessage);
}
public final class ClearCredentialProviderConfigurationException extends androidx.credentials.exceptions.ClearCredentialException {
- ctor public ClearCredentialProviderConfigurationException(optional CharSequence? errorMessage);
ctor public ClearCredentialProviderConfigurationException();
+ ctor public ClearCredentialProviderConfigurationException(optional CharSequence? errorMessage);
}
public final class ClearCredentialUnknownException extends androidx.credentials.exceptions.ClearCredentialException {
- ctor public ClearCredentialUnknownException(optional CharSequence? errorMessage);
ctor public ClearCredentialUnknownException();
+ ctor public ClearCredentialUnknownException(optional CharSequence? errorMessage);
}
public final class ClearCredentialUnsupportedException extends androidx.credentials.exceptions.ClearCredentialException {
- ctor public ClearCredentialUnsupportedException(optional CharSequence? errorMessage);
ctor public ClearCredentialUnsupportedException();
+ ctor public ClearCredentialUnsupportedException(optional CharSequence? errorMessage);
}
public final class ClearCustomCredentialException extends androidx.credentials.exceptions.ClearCredentialException {
- ctor public ClearCustomCredentialException(String type, optional CharSequence? errorMessage);
ctor public ClearCustomCredentialException(String type);
+ ctor public ClearCustomCredentialException(String type, optional CharSequence? errorMessage);
method public String getType();
property public String type;
}
public final class CreateCredentialCancellationException extends androidx.credentials.exceptions.CreateCredentialException {
- ctor public CreateCredentialCancellationException(optional CharSequence? errorMessage);
ctor public CreateCredentialCancellationException();
+ ctor public CreateCredentialCancellationException(optional CharSequence? errorMessage);
}
public abstract class CreateCredentialException extends java.lang.Exception {
}
public final class CreateCredentialInterruptedException extends androidx.credentials.exceptions.CreateCredentialException {
- ctor public CreateCredentialInterruptedException(optional CharSequence? errorMessage);
ctor public CreateCredentialInterruptedException();
+ ctor public CreateCredentialInterruptedException(optional CharSequence? errorMessage);
}
public final class CreateCredentialNoCreateOptionException extends androidx.credentials.exceptions.CreateCredentialException {
- ctor public CreateCredentialNoCreateOptionException(optional CharSequence? errorMessage);
ctor public CreateCredentialNoCreateOptionException();
+ ctor public CreateCredentialNoCreateOptionException(optional CharSequence? errorMessage);
}
public final class CreateCredentialProviderConfigurationException extends androidx.credentials.exceptions.CreateCredentialException {
- ctor public CreateCredentialProviderConfigurationException(optional CharSequence? errorMessage);
ctor public CreateCredentialProviderConfigurationException();
+ ctor public CreateCredentialProviderConfigurationException(optional CharSequence? errorMessage);
}
public final class CreateCredentialUnknownException extends androidx.credentials.exceptions.CreateCredentialException {
- ctor public CreateCredentialUnknownException(optional CharSequence? errorMessage);
ctor public CreateCredentialUnknownException();
+ ctor public CreateCredentialUnknownException(optional CharSequence? errorMessage);
}
public final class CreateCredentialUnsupportedException extends androidx.credentials.exceptions.CreateCredentialException {
- ctor public CreateCredentialUnsupportedException(optional CharSequence? errorMessage);
ctor public CreateCredentialUnsupportedException();
+ ctor public CreateCredentialUnsupportedException(optional CharSequence? errorMessage);
}
public final class CreateCustomCredentialException extends androidx.credentials.exceptions.CreateCredentialException {
- ctor public CreateCustomCredentialException(String type, optional CharSequence? errorMessage);
ctor public CreateCustomCredentialException(String type);
+ ctor public CreateCustomCredentialException(String type, optional CharSequence? errorMessage);
method public String getType();
property public String type;
}
public final class GetCredentialCancellationException extends androidx.credentials.exceptions.GetCredentialException {
- ctor public GetCredentialCancellationException(optional CharSequence? errorMessage);
ctor public GetCredentialCancellationException();
+ ctor public GetCredentialCancellationException(optional CharSequence? errorMessage);
}
public abstract class GetCredentialException extends java.lang.Exception {
}
public final class GetCredentialInterruptedException extends androidx.credentials.exceptions.GetCredentialException {
- ctor public GetCredentialInterruptedException(optional CharSequence? errorMessage);
ctor public GetCredentialInterruptedException();
+ ctor public GetCredentialInterruptedException(optional CharSequence? errorMessage);
}
public final class GetCredentialProviderConfigurationException extends androidx.credentials.exceptions.GetCredentialException {
- ctor public GetCredentialProviderConfigurationException(optional CharSequence? errorMessage);
ctor public GetCredentialProviderConfigurationException();
+ ctor public GetCredentialProviderConfigurationException(optional CharSequence? errorMessage);
}
public final class GetCredentialUnknownException extends androidx.credentials.exceptions.GetCredentialException {
- ctor public GetCredentialUnknownException(optional CharSequence? errorMessage);
ctor public GetCredentialUnknownException();
+ ctor public GetCredentialUnknownException(optional CharSequence? errorMessage);
}
public final class GetCredentialUnsupportedException extends androidx.credentials.exceptions.GetCredentialException {
- ctor public GetCredentialUnsupportedException(optional CharSequence? errorMessage);
ctor public GetCredentialUnsupportedException();
+ ctor public GetCredentialUnsupportedException(optional CharSequence? errorMessage);
}
public final class GetCustomCredentialException extends androidx.credentials.exceptions.GetCredentialException {
- ctor public GetCustomCredentialException(String type, optional CharSequence? errorMessage);
ctor public GetCustomCredentialException(String type);
+ ctor public GetCustomCredentialException(String type, optional CharSequence? errorMessage);
method public String getType();
property public String type;
}
public final class NoCredentialException extends androidx.credentials.exceptions.GetCredentialException {
- ctor public NoCredentialException(optional CharSequence? errorMessage);
ctor public NoCredentialException();
+ ctor public NoCredentialException(optional CharSequence? errorMessage);
}
}
@@ -433,8 +433,8 @@
package androidx.credentials.exceptions.publickeycredential {
public final class CreatePublicKeyCredentialDomException extends androidx.credentials.exceptions.publickeycredential.CreatePublicKeyCredentialException {
- ctor public CreatePublicKeyCredentialDomException(androidx.credentials.exceptions.domerrors.DomError domError, optional CharSequence? errorMessage);
ctor public CreatePublicKeyCredentialDomException(androidx.credentials.exceptions.domerrors.DomError domError);
+ ctor public CreatePublicKeyCredentialDomException(androidx.credentials.exceptions.domerrors.DomError domError, optional CharSequence? errorMessage);
method public androidx.credentials.exceptions.domerrors.DomError getDomError();
property public final androidx.credentials.exceptions.domerrors.DomError domError;
}
@@ -443,8 +443,8 @@
}
public final class GetPublicKeyCredentialDomException extends androidx.credentials.exceptions.publickeycredential.GetPublicKeyCredentialException {
- ctor public GetPublicKeyCredentialDomException(androidx.credentials.exceptions.domerrors.DomError domError, optional CharSequence? errorMessage);
ctor public GetPublicKeyCredentialDomException(androidx.credentials.exceptions.domerrors.DomError domError);
+ ctor public GetPublicKeyCredentialDomException(androidx.credentials.exceptions.domerrors.DomError domError, optional CharSequence? errorMessage);
method public androidx.credentials.exceptions.domerrors.DomError getDomError();
property public final androidx.credentials.exceptions.domerrors.DomError domError;
}
diff --git a/credentials/credentials/api/restricted_current.txt b/credentials/credentials/api/restricted_current.txt
index d15ea9a..5f71623 100644
--- a/credentials/credentials/api/restricted_current.txt
+++ b/credentials/credentials/api/restricted_current.txt
@@ -11,8 +11,8 @@
}
public static final class CreateCredentialRequest.DisplayInfo {
- ctor public CreateCredentialRequest.DisplayInfo(CharSequence userId, optional CharSequence? userDisplayName);
ctor public CreateCredentialRequest.DisplayInfo(CharSequence userId);
+ ctor public CreateCredentialRequest.DisplayInfo(CharSequence userId, optional CharSequence? userDisplayName);
method public CharSequence? getUserDisplayName();
method public CharSequence getUserId();
property public final CharSequence? userDisplayName;
@@ -23,9 +23,9 @@
}
public class CreateCustomCredentialRequest extends androidx.credentials.CreateCredentialRequest {
- ctor public CreateCustomCredentialRequest(String type, android.os.Bundle credentialData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, androidx.credentials.CreateCredentialRequest.DisplayInfo displayInfo, optional boolean isAutoSelectAllowed, optional String? origin);
- ctor public CreateCustomCredentialRequest(String type, android.os.Bundle credentialData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, androidx.credentials.CreateCredentialRequest.DisplayInfo displayInfo, optional boolean isAutoSelectAllowed);
ctor public CreateCustomCredentialRequest(String type, android.os.Bundle credentialData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, androidx.credentials.CreateCredentialRequest.DisplayInfo displayInfo);
+ ctor public CreateCustomCredentialRequest(String type, android.os.Bundle credentialData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, androidx.credentials.CreateCredentialRequest.DisplayInfo displayInfo, optional boolean isAutoSelectAllowed);
+ ctor public CreateCustomCredentialRequest(String type, android.os.Bundle credentialData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, androidx.credentials.CreateCredentialRequest.DisplayInfo displayInfo, optional boolean isAutoSelectAllowed, optional String? origin);
method public final android.os.Bundle getCandidateQueryData();
method public final android.os.Bundle getCredentialData();
method public final String getType();
@@ -47,8 +47,8 @@
}
public final class CreatePasswordRequest extends androidx.credentials.CreateCredentialRequest {
- ctor public CreatePasswordRequest(String id, String password, optional String? origin);
ctor public CreatePasswordRequest(String id, String password);
+ ctor public CreatePasswordRequest(String id, String password, optional String? origin);
method public String getId();
method public String getPassword();
property public final String id;
@@ -60,10 +60,10 @@
}
public final class CreatePublicKeyCredentialRequest extends androidx.credentials.CreateCredentialRequest {
- ctor public CreatePublicKeyCredentialRequest(String requestJson, optional String? clientDataHash, optional boolean preferImmediatelyAvailableCredentials, optional String? origin);
- ctor public CreatePublicKeyCredentialRequest(String requestJson, optional String? clientDataHash, optional boolean preferImmediatelyAvailableCredentials);
- ctor public CreatePublicKeyCredentialRequest(String requestJson, optional String? clientDataHash);
ctor public CreatePublicKeyCredentialRequest(String requestJson);
+ ctor public CreatePublicKeyCredentialRequest(String requestJson, optional String? clientDataHash);
+ ctor public CreatePublicKeyCredentialRequest(String requestJson, optional String? clientDataHash, optional boolean preferImmediatelyAvailableCredentials);
+ ctor public CreatePublicKeyCredentialRequest(String requestJson, optional String? clientDataHash, optional boolean preferImmediatelyAvailableCredentials, optional String? origin);
method public String? getClientDataHash();
method public boolean getPreferImmediatelyAvailableCredentials();
method public String getRequestJson();
@@ -120,8 +120,8 @@
}
public final class GetCredentialRequest {
- ctor public GetCredentialRequest(java.util.List<? extends androidx.credentials.CredentialOption> credentialOptions, optional String? origin);
ctor public GetCredentialRequest(java.util.List<? extends androidx.credentials.CredentialOption> credentialOptions);
+ ctor public GetCredentialRequest(java.util.List<? extends androidx.credentials.CredentialOption> credentialOptions, optional String? origin);
method public java.util.List<androidx.credentials.CredentialOption> getCredentialOptions();
method public String? getOrigin();
property public final java.util.List<androidx.credentials.CredentialOption> credentialOptions;
@@ -143,8 +143,8 @@
}
public class GetCustomCredentialOption extends androidx.credentials.CredentialOption {
- ctor public GetCustomCredentialOption(String type, android.os.Bundle requestData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, optional boolean isAutoSelectAllowed);
ctor public GetCustomCredentialOption(String type, android.os.Bundle requestData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired);
+ ctor public GetCustomCredentialOption(String type, android.os.Bundle requestData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, optional boolean isAutoSelectAllowed);
method public final android.os.Bundle getCandidateQueryData();
method public final android.os.Bundle getRequestData();
method public final String getType();
@@ -158,16 +158,16 @@
}
public final class GetPasswordOption extends androidx.credentials.CredentialOption {
- ctor public GetPasswordOption(optional boolean isAutoSelectAllowed);
ctor public GetPasswordOption();
+ ctor public GetPasswordOption(optional boolean isAutoSelectAllowed);
method public boolean isAutoSelectAllowed();
property public boolean isAutoSelectAllowed;
}
public final class GetPublicKeyCredentialOption extends androidx.credentials.CredentialOption {
- ctor public GetPublicKeyCredentialOption(String requestJson, optional String? clientDataHash, optional boolean preferImmediatelyAvailableCredentials);
- ctor public GetPublicKeyCredentialOption(String requestJson, optional String? clientDataHash);
ctor public GetPublicKeyCredentialOption(String requestJson);
+ ctor public GetPublicKeyCredentialOption(String requestJson, optional String? clientDataHash);
+ ctor public GetPublicKeyCredentialOption(String requestJson, optional String? clientDataHash, optional boolean preferImmediatelyAvailableCredentials);
method public String? getClientDataHash();
method public boolean getPreferImmediatelyAvailableCredentials();
method public String getRequestJson();
@@ -198,110 +198,110 @@
}
public final class ClearCredentialInterruptedException extends androidx.credentials.exceptions.ClearCredentialException {
- ctor public ClearCredentialInterruptedException(optional CharSequence? errorMessage);
ctor public ClearCredentialInterruptedException();
+ ctor public ClearCredentialInterruptedException(optional CharSequence? errorMessage);
}
public final class ClearCredentialProviderConfigurationException extends androidx.credentials.exceptions.ClearCredentialException {
- ctor public ClearCredentialProviderConfigurationException(optional CharSequence? errorMessage);
ctor public ClearCredentialProviderConfigurationException();
+ ctor public ClearCredentialProviderConfigurationException(optional CharSequence? errorMessage);
}
public final class ClearCredentialUnknownException extends androidx.credentials.exceptions.ClearCredentialException {
- ctor public ClearCredentialUnknownException(optional CharSequence? errorMessage);
ctor public ClearCredentialUnknownException();
+ ctor public ClearCredentialUnknownException(optional CharSequence? errorMessage);
}
public final class ClearCredentialUnsupportedException extends androidx.credentials.exceptions.ClearCredentialException {
- ctor public ClearCredentialUnsupportedException(optional CharSequence? errorMessage);
ctor public ClearCredentialUnsupportedException();
+ ctor public ClearCredentialUnsupportedException(optional CharSequence? errorMessage);
}
public final class ClearCustomCredentialException extends androidx.credentials.exceptions.ClearCredentialException {
- ctor public ClearCustomCredentialException(String type, optional CharSequence? errorMessage);
ctor public ClearCustomCredentialException(String type);
+ ctor public ClearCustomCredentialException(String type, optional CharSequence? errorMessage);
method public String getType();
property public String type;
}
public final class CreateCredentialCancellationException extends androidx.credentials.exceptions.CreateCredentialException {
- ctor public CreateCredentialCancellationException(optional CharSequence? errorMessage);
ctor public CreateCredentialCancellationException();
+ ctor public CreateCredentialCancellationException(optional CharSequence? errorMessage);
}
public abstract class CreateCredentialException extends java.lang.Exception {
}
public final class CreateCredentialInterruptedException extends androidx.credentials.exceptions.CreateCredentialException {
- ctor public CreateCredentialInterruptedException(optional CharSequence? errorMessage);
ctor public CreateCredentialInterruptedException();
+ ctor public CreateCredentialInterruptedException(optional CharSequence? errorMessage);
}
public final class CreateCredentialNoCreateOptionException extends androidx.credentials.exceptions.CreateCredentialException {
- ctor public CreateCredentialNoCreateOptionException(optional CharSequence? errorMessage);
ctor public CreateCredentialNoCreateOptionException();
+ ctor public CreateCredentialNoCreateOptionException(optional CharSequence? errorMessage);
}
public final class CreateCredentialProviderConfigurationException extends androidx.credentials.exceptions.CreateCredentialException {
- ctor public CreateCredentialProviderConfigurationException(optional CharSequence? errorMessage);
ctor public CreateCredentialProviderConfigurationException();
+ ctor public CreateCredentialProviderConfigurationException(optional CharSequence? errorMessage);
}
public final class CreateCredentialUnknownException extends androidx.credentials.exceptions.CreateCredentialException {
- ctor public CreateCredentialUnknownException(optional CharSequence? errorMessage);
ctor public CreateCredentialUnknownException();
+ ctor public CreateCredentialUnknownException(optional CharSequence? errorMessage);
}
public final class CreateCredentialUnsupportedException extends androidx.credentials.exceptions.CreateCredentialException {
- ctor public CreateCredentialUnsupportedException(optional CharSequence? errorMessage);
ctor public CreateCredentialUnsupportedException();
+ ctor public CreateCredentialUnsupportedException(optional CharSequence? errorMessage);
}
public final class CreateCustomCredentialException extends androidx.credentials.exceptions.CreateCredentialException {
- ctor public CreateCustomCredentialException(String type, optional CharSequence? errorMessage);
ctor public CreateCustomCredentialException(String type);
+ ctor public CreateCustomCredentialException(String type, optional CharSequence? errorMessage);
method public String getType();
property public String type;
}
public final class GetCredentialCancellationException extends androidx.credentials.exceptions.GetCredentialException {
- ctor public GetCredentialCancellationException(optional CharSequence? errorMessage);
ctor public GetCredentialCancellationException();
+ ctor public GetCredentialCancellationException(optional CharSequence? errorMessage);
}
public abstract class GetCredentialException extends java.lang.Exception {
}
public final class GetCredentialInterruptedException extends androidx.credentials.exceptions.GetCredentialException {
- ctor public GetCredentialInterruptedException(optional CharSequence? errorMessage);
ctor public GetCredentialInterruptedException();
+ ctor public GetCredentialInterruptedException(optional CharSequence? errorMessage);
}
public final class GetCredentialProviderConfigurationException extends androidx.credentials.exceptions.GetCredentialException {
- ctor public GetCredentialProviderConfigurationException(optional CharSequence? errorMessage);
ctor public GetCredentialProviderConfigurationException();
+ ctor public GetCredentialProviderConfigurationException(optional CharSequence? errorMessage);
}
public final class GetCredentialUnknownException extends androidx.credentials.exceptions.GetCredentialException {
- ctor public GetCredentialUnknownException(optional CharSequence? errorMessage);
ctor public GetCredentialUnknownException();
+ ctor public GetCredentialUnknownException(optional CharSequence? errorMessage);
}
public final class GetCredentialUnsupportedException extends androidx.credentials.exceptions.GetCredentialException {
- ctor public GetCredentialUnsupportedException(optional CharSequence? errorMessage);
ctor public GetCredentialUnsupportedException();
+ ctor public GetCredentialUnsupportedException(optional CharSequence? errorMessage);
}
public final class GetCustomCredentialException extends androidx.credentials.exceptions.GetCredentialException {
- ctor public GetCustomCredentialException(String type, optional CharSequence? errorMessage);
ctor public GetCustomCredentialException(String type);
+ ctor public GetCustomCredentialException(String type, optional CharSequence? errorMessage);
method public String getType();
property public String type;
}
public final class NoCredentialException extends androidx.credentials.exceptions.GetCredentialException {
- ctor public NoCredentialException(optional CharSequence? errorMessage);
ctor public NoCredentialException();
+ ctor public NoCredentialException(optional CharSequence? errorMessage);
}
}
@@ -433,8 +433,8 @@
package androidx.credentials.exceptions.publickeycredential {
public final class CreatePublicKeyCredentialDomException extends androidx.credentials.exceptions.publickeycredential.CreatePublicKeyCredentialException {
- ctor public CreatePublicKeyCredentialDomException(androidx.credentials.exceptions.domerrors.DomError domError, optional CharSequence? errorMessage);
ctor public CreatePublicKeyCredentialDomException(androidx.credentials.exceptions.domerrors.DomError domError);
+ ctor public CreatePublicKeyCredentialDomException(androidx.credentials.exceptions.domerrors.DomError domError, optional CharSequence? errorMessage);
method public androidx.credentials.exceptions.domerrors.DomError getDomError();
property public final androidx.credentials.exceptions.domerrors.DomError domError;
}
@@ -443,8 +443,8 @@
}
public final class GetPublicKeyCredentialDomException extends androidx.credentials.exceptions.publickeycredential.GetPublicKeyCredentialException {
- ctor public GetPublicKeyCredentialDomException(androidx.credentials.exceptions.domerrors.DomError domError, optional CharSequence? errorMessage);
ctor public GetPublicKeyCredentialDomException(androidx.credentials.exceptions.domerrors.DomError domError);
+ ctor public GetPublicKeyCredentialDomException(androidx.credentials.exceptions.domerrors.DomError domError, optional CharSequence? errorMessage);
method public androidx.credentials.exceptions.domerrors.DomError getDomError();
property public final androidx.credentials.exceptions.domerrors.DomError domError;
}
diff --git a/credentials/credentials/build.gradle b/credentials/credentials/build.gradle
index 0c8c3fb..c548aa0 100644
--- a/credentials/credentials/build.gradle
+++ b/credentials/credentials/build.gradle
@@ -47,7 +47,7 @@
}
androidx {
- name = "Credentials Core Library"
+ name = "Credentials"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2022"
description = "Android Credentials Library"
diff --git a/credentials/credentials/src/androidTest/java/androidx/credentials/GetCredentialRequestTest.kt b/credentials/credentials/src/androidTest/java/androidx/credentials/GetCredentialRequestTest.kt
index fafee67..1f477d4 100644
--- a/credentials/credentials/src/androidTest/java/androidx/credentials/GetCredentialRequestTest.kt
+++ b/credentials/credentials/src/androidTest/java/androidx/credentials/GetCredentialRequestTest.kt
@@ -16,13 +16,10 @@
package androidx.credentials
-import com.google.common.truth.Truth.assertThat
-
-import org.junit.Assert.assertThrows
-
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
-
+import com.google.common.truth.Truth.assertThat
+import org.junit.Assert.assertThrows
import org.junit.Test
import org.junit.runner.RunWith
diff --git a/cursoradapter/cursoradapter/api/public_plus_experimental_current.txt b/cursoradapter/cursoradapter/api/public_plus_experimental_current.txt
deleted file mode 100644
index 0d6024a..0000000
--- a/cursoradapter/cursoradapter/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-// Signature format: 4.0
-package androidx.cursoradapter.widget {
-
- public abstract class CursorAdapter extends android.widget.BaseAdapter implements android.widget.Filterable {
- ctor @Deprecated public CursorAdapter(android.content.Context!, android.database.Cursor!);
- ctor public CursorAdapter(android.content.Context, android.database.Cursor?, boolean);
- ctor public CursorAdapter(android.content.Context, android.database.Cursor?, int);
- method public abstract void bindView(android.view.View, android.content.Context, android.database.Cursor);
- method public void changeCursor(android.database.Cursor?);
- method public CharSequence convertToString(android.database.Cursor?);
- method public int getCount();
- method public android.database.Cursor? getCursor();
- method public android.widget.Filter! getFilter();
- method public android.widget.FilterQueryProvider? getFilterQueryProvider();
- method public Object! getItem(int);
- method public long getItemId(int);
- method public android.view.View! getView(int, android.view.View!, android.view.ViewGroup!);
- method @Deprecated protected void init(android.content.Context!, android.database.Cursor!, boolean);
- method public android.view.View newDropDownView(android.content.Context, android.database.Cursor, android.view.ViewGroup?);
- method public abstract android.view.View newView(android.content.Context, android.database.Cursor, android.view.ViewGroup?);
- method protected void onContentChanged();
- method public android.database.Cursor? runQueryOnBackgroundThread(CharSequence?);
- method public void setFilterQueryProvider(android.widget.FilterQueryProvider?);
- method public android.database.Cursor? swapCursor(android.database.Cursor?);
- field @Deprecated public static final int FLAG_AUTO_REQUERY = 1; // 0x1
- field public static final int FLAG_REGISTER_CONTENT_OBSERVER = 2; // 0x2
- }
-
- public abstract class ResourceCursorAdapter extends androidx.cursoradapter.widget.CursorAdapter {
- ctor @Deprecated public ResourceCursorAdapter(android.content.Context!, int, android.database.Cursor!);
- ctor @Deprecated public ResourceCursorAdapter(android.content.Context!, int, android.database.Cursor!, boolean);
- ctor public ResourceCursorAdapter(android.content.Context, int, android.database.Cursor?, int);
- method public android.view.View newView(android.content.Context, android.database.Cursor?, android.view.ViewGroup?);
- method public void setDropDownViewResource(int);
- method public void setViewResource(int);
- }
-
- public class SimpleCursorAdapter extends androidx.cursoradapter.widget.ResourceCursorAdapter {
- ctor @Deprecated public SimpleCursorAdapter(android.content.Context, int, android.database.Cursor?, String![]?, int[]?);
- ctor public SimpleCursorAdapter(android.content.Context, int, android.database.Cursor?, String![]?, int[]?, int);
- method public void bindView(android.view.View, android.content.Context, android.database.Cursor);
- method public void changeCursorAndColumns(android.database.Cursor?, String![]?, int[]?);
- method public androidx.cursoradapter.widget.SimpleCursorAdapter.CursorToStringConverter? getCursorToStringConverter();
- method public int getStringConversionColumn();
- method public androidx.cursoradapter.widget.SimpleCursorAdapter.ViewBinder? getViewBinder();
- method public void setCursorToStringConverter(androidx.cursoradapter.widget.SimpleCursorAdapter.CursorToStringConverter?);
- method public void setStringConversionColumn(int);
- method public void setViewBinder(androidx.cursoradapter.widget.SimpleCursorAdapter.ViewBinder?);
- method public void setViewImage(android.widget.ImageView, String);
- method public void setViewText(android.widget.TextView, String);
- }
-
- public static interface SimpleCursorAdapter.CursorToStringConverter {
- method public CharSequence convertToString(android.database.Cursor?);
- }
-
- public static interface SimpleCursorAdapter.ViewBinder {
- method public boolean setViewValue(android.view.View, android.database.Cursor, int);
- }
-
-}
-
diff --git a/cursoradapter/cursoradapter/build.gradle b/cursoradapter/cursoradapter/build.gradle
index 486beb8..05db38f 100644
--- a/cursoradapter/cursoradapter/build.gradle
+++ b/cursoradapter/cursoradapter/build.gradle
@@ -10,7 +10,7 @@
}
androidx {
- name = "Android Support Library Cursor Adapter"
+ name = "Cursor Adapter"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later."
diff --git a/customview/customview-poolingcontainer/api/public_plus_experimental_current.txt b/customview/customview-poolingcontainer/api/public_plus_experimental_current.txt
deleted file mode 100644
index 0f36bc7..0000000
--- a/customview/customview-poolingcontainer/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-// Signature format: 4.0
-package androidx.customview.poolingcontainer {
-
- public final class PoolingContainer {
- method public static void addPoolingContainerListener(android.view.View, androidx.customview.poolingcontainer.PoolingContainerListener listener);
- method public static void callPoolingContainerOnRelease(android.view.View);
- method public static void callPoolingContainerOnReleaseForChildren(android.view.ViewGroup);
- method public static boolean isPoolingContainer(android.view.View);
- method public static boolean isWithinPoolingContainer(android.view.View);
- method public static void removePoolingContainerListener(android.view.View, androidx.customview.poolingcontainer.PoolingContainerListener listener);
- method public static void setPoolingContainer(android.view.View, boolean);
- }
-
- public fun interface PoolingContainerListener {
- method @UiThread public void onRelease();
- }
-
-}
-
diff --git a/customview/customview-poolingcontainer/build.gradle b/customview/customview-poolingcontainer/build.gradle
index 49ae408..524083d 100644
--- a/customview/customview-poolingcontainer/build.gradle
+++ b/customview/customview-poolingcontainer/build.gradle
@@ -36,7 +36,7 @@
}
androidx {
- name = "androidx.customview:poolingcontainer"
+ name = "CustomView Pooling Container"
type = LibraryType.PUBLISHED_LIBRARY
mavenVersion = LibraryVersions.CUSTOMVIEW_POOLINGCONTAINER
inceptionYear = "2021"
diff --git a/customview/customview/api/current.txt b/customview/customview/api/current.txt
index 4850116..64f839b 100644
--- a/customview/customview/api/current.txt
+++ b/customview/customview/api/current.txt
@@ -2,9 +2,9 @@
package androidx.customview.view {
public abstract class AbsSavedState implements android.os.Parcelable {
- ctor protected AbsSavedState(android.os.Parcelable);
ctor protected AbsSavedState(android.os.Parcel);
ctor protected AbsSavedState(android.os.Parcel, ClassLoader?);
+ ctor protected AbsSavedState(android.os.Parcelable);
method public int describeContents();
method public final android.os.Parcelable? getSuperState();
method public void writeToParcel(android.os.Parcel!, int);
diff --git a/customview/customview/api/public_plus_experimental_current.txt b/customview/customview/api/public_plus_experimental_current.txt
deleted file mode 100644
index 4850116..0000000
--- a/customview/customview/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,115 +0,0 @@
-// Signature format: 4.0
-package androidx.customview.view {
-
- public abstract class AbsSavedState implements android.os.Parcelable {
- ctor protected AbsSavedState(android.os.Parcelable);
- ctor protected AbsSavedState(android.os.Parcel);
- ctor protected AbsSavedState(android.os.Parcel, ClassLoader?);
- method public int describeContents();
- method public final android.os.Parcelable? getSuperState();
- method public void writeToParcel(android.os.Parcel!, int);
- field public static final android.os.Parcelable.Creator<androidx.customview.view.AbsSavedState!>! CREATOR;
- field public static final androidx.customview.view.AbsSavedState! EMPTY_STATE;
- }
-
-}
-
-package androidx.customview.widget {
-
- public abstract class ExploreByTouchHelper extends androidx.core.view.AccessibilityDelegateCompat {
- ctor public ExploreByTouchHelper(android.view.View);
- method public final boolean clearKeyboardFocusForVirtualView(int);
- method public final boolean dispatchHoverEvent(android.view.MotionEvent);
- method public final boolean dispatchKeyEvent(android.view.KeyEvent);
- method public final int getAccessibilityFocusedVirtualViewId();
- method @Deprecated public int getFocusedVirtualView();
- method public final int getKeyboardFocusedVirtualViewId();
- method protected abstract int getVirtualViewAt(float, float);
- method protected abstract void getVisibleVirtualViews(java.util.List<java.lang.Integer!>!);
- method public final void invalidateRoot();
- method public final void invalidateVirtualView(int);
- method public final void invalidateVirtualView(int, int);
- method public final void onFocusChanged(boolean, int, android.graphics.Rect?);
- method protected abstract boolean onPerformActionForVirtualView(int, int, android.os.Bundle?);
- method protected void onPopulateEventForHost(android.view.accessibility.AccessibilityEvent);
- method protected void onPopulateEventForVirtualView(int, android.view.accessibility.AccessibilityEvent);
- method protected void onPopulateNodeForHost(androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
- method protected abstract void onPopulateNodeForVirtualView(int, androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
- method protected void onVirtualViewKeyboardFocusChanged(int, boolean);
- method public final boolean requestKeyboardFocusForVirtualView(int);
- method public final boolean sendEventForVirtualView(int, int);
- method public final void setBoundsInScreenFromBoundsInParent(androidx.core.view.accessibility.AccessibilityNodeInfoCompat, android.graphics.Rect);
- field public static final int HOST_ID = -1; // 0xffffffff
- field public static final int INVALID_ID = -2147483648; // 0x80000000
- }
-
- public interface Openable {
- method public void close();
- method public boolean isOpen();
- method public void open();
- }
-
- public class ViewDragHelper {
- method public void abort();
- method protected boolean canScroll(android.view.View, boolean, int, int, int, int);
- method public void cancel();
- method public void captureChildView(android.view.View, int);
- method public boolean checkTouchSlop(int);
- method public boolean checkTouchSlop(int, int);
- method public boolean continueSettling(boolean);
- method public static androidx.customview.widget.ViewDragHelper create(android.view.ViewGroup, androidx.customview.widget.ViewDragHelper.Callback);
- method public static androidx.customview.widget.ViewDragHelper create(android.view.ViewGroup, float, androidx.customview.widget.ViewDragHelper.Callback);
- method public android.view.View? findTopChildUnder(int, int);
- method public void flingCapturedView(int, int, int, int);
- method public int getActivePointerId();
- method public android.view.View? getCapturedView();
- method @Px public int getDefaultEdgeSize();
- method @Px public int getEdgeSize();
- method public float getMinVelocity();
- method @Px public int getTouchSlop();
- method public int getViewDragState();
- method public boolean isCapturedViewUnder(int, int);
- method public boolean isEdgeTouched(int);
- method public boolean isEdgeTouched(int, int);
- method public boolean isPointerDown(int);
- method public boolean isViewUnder(android.view.View?, int, int);
- method public void processTouchEvent(android.view.MotionEvent);
- method public void setEdgeSize(@IntRange(from=0) @Px int);
- method public void setEdgeTrackingEnabled(int);
- method public void setMinVelocity(float);
- method public boolean settleCapturedViewAt(int, int);
- method public boolean shouldInterceptTouchEvent(android.view.MotionEvent);
- method public boolean smoothSlideViewTo(android.view.View, int, int);
- field public static final int DIRECTION_ALL = 3; // 0x3
- field public static final int DIRECTION_HORIZONTAL = 1; // 0x1
- field public static final int DIRECTION_VERTICAL = 2; // 0x2
- field public static final int EDGE_ALL = 15; // 0xf
- field public static final int EDGE_BOTTOM = 8; // 0x8
- field public static final int EDGE_LEFT = 1; // 0x1
- field public static final int EDGE_RIGHT = 2; // 0x2
- field public static final int EDGE_TOP = 4; // 0x4
- field public static final int INVALID_POINTER = -1; // 0xffffffff
- field public static final int STATE_DRAGGING = 1; // 0x1
- field public static final int STATE_IDLE = 0; // 0x0
- field public static final int STATE_SETTLING = 2; // 0x2
- }
-
- public abstract static class ViewDragHelper.Callback {
- ctor public ViewDragHelper.Callback();
- method public int clampViewPositionHorizontal(android.view.View, int, int);
- method public int clampViewPositionVertical(android.view.View, int, int);
- method public int getOrderedChildIndex(int);
- method public int getViewHorizontalDragRange(android.view.View);
- method public int getViewVerticalDragRange(android.view.View);
- method public void onEdgeDragStarted(int, int);
- method public boolean onEdgeLock(int);
- method public void onEdgeTouched(int, int);
- method public void onViewCaptured(android.view.View, int);
- method public void onViewDragStateChanged(int);
- method public void onViewPositionChanged(android.view.View, int, int, @Px int, @Px int);
- method public void onViewReleased(android.view.View, float, float);
- method public abstract boolean tryCaptureView(android.view.View, int);
- }
-
-}
-
diff --git a/customview/customview/api/restricted_current.txt b/customview/customview/api/restricted_current.txt
index 4850116..64f839b 100644
--- a/customview/customview/api/restricted_current.txt
+++ b/customview/customview/api/restricted_current.txt
@@ -2,9 +2,9 @@
package androidx.customview.view {
public abstract class AbsSavedState implements android.os.Parcelable {
- ctor protected AbsSavedState(android.os.Parcelable);
ctor protected AbsSavedState(android.os.Parcel);
ctor protected AbsSavedState(android.os.Parcel, ClassLoader?);
+ ctor protected AbsSavedState(android.os.Parcelable);
method public int describeContents();
method public final android.os.Parcelable? getSuperState();
method public void writeToParcel(android.os.Parcel!, int);
diff --git a/customview/customview/build.gradle b/customview/customview/build.gradle
index 041da7f..e184a65 100644
--- a/customview/customview/build.gradle
+++ b/customview/customview/build.gradle
@@ -20,7 +20,7 @@
}
androidx {
- name = "Android Support Library Custom View"
+ name = "Custom View"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.CUSTOMVIEW
inceptionYear = "2018"
diff --git a/customview/customview/src/androidTest/java/androidx/customview/widget/TestActivity.kt b/customview/customview/src/androidTest/java/androidx/customview/widget/TestActivity.kt
index 65fd739..af04aa5 100644
--- a/customview/customview/src/androidTest/java/androidx/customview/widget/TestActivity.kt
+++ b/customview/customview/src/androidTest/java/androidx/customview/widget/TestActivity.kt
@@ -18,7 +18,6 @@
import android.app.Activity
import android.os.Bundle
-
import androidx.customview.test.R
class TestActivity : Activity() {
diff --git a/datastore/datastore-compose-samples/src/main/java/com/example/datastorecomposesamples/CountActivity.kt b/datastore/datastore-compose-samples/src/main/java/com/example/datastorecomposesamples/CountActivity.kt
index ec8bea7..ff0c660 100644
--- a/datastore/datastore-compose-samples/src/main/java/com/example/datastorecomposesamples/CountActivity.kt
+++ b/datastore/datastore-compose-samples/src/main/java/com/example/datastorecomposesamples/CountActivity.kt
@@ -18,7 +18,6 @@
import android.os.Bundle
import android.os.StrictMode
-
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.Arrangement
diff --git a/datastore/datastore-compose-samples/src/main/java/com/example/datastorecomposesamples/data/CountRepository.kt b/datastore/datastore-compose-samples/src/main/java/com/example/datastorecomposesamples/data/CountRepository.kt
index 52a3ec0..428b189 100644
--- a/datastore/datastore-compose-samples/src/main/java/com/example/datastorecomposesamples/data/CountRepository.kt
+++ b/datastore/datastore-compose-samples/src/main/java/com/example/datastorecomposesamples/data/CountRepository.kt
@@ -27,13 +27,13 @@
import androidx.datastore.preferences.preferencesDataStore
import com.example.datastorecomposesamples.CountPreferences
import java.io.File
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.catch
-import kotlinx.coroutines.flow.map
import java.io.IOException
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.catch
+import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
data class CountState(val count: Int)
diff --git a/datastore/datastore-core-okio/build.gradle b/datastore/datastore-core-okio/build.gradle
index d1c5ba1..99bb8ec 100644
--- a/datastore/datastore-core-okio/build.gradle
+++ b/datastore/datastore-core-okio/build.gradle
@@ -97,7 +97,7 @@
}
androidx {
- name = "Android DataStore Core Okio"
+ name = "DataStore Core Okio"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2020"
description = "Android DataStore Core Okio- contains APIs to use datastore-core in multiplatform via okio"
diff --git a/datastore/datastore-core-okio/src/commonMain/kotlin/androidx/datastore/core/okio/OkioStorage.kt b/datastore/datastore-core-okio/src/commonMain/kotlin/androidx/datastore/core/okio/OkioStorage.kt
index e2ff9fb..234680e 100644
--- a/datastore/datastore-core-okio/src/commonMain/kotlin/androidx/datastore/core/okio/OkioStorage.kt
+++ b/datastore/datastore-core-okio/src/commonMain/kotlin/androidx/datastore/core/okio/OkioStorage.kt
@@ -23,9 +23,9 @@
import androidx.datastore.core.WriteScope
import androidx.datastore.core.createSingleProcessCoordinator
import androidx.datastore.core.use
-import kotlinx.atomicfu.locks.synchronized
-import kotlinx.atomicfu.locks.SynchronizedObject
import kotlinx.atomicfu.atomic
+import kotlinx.atomicfu.locks.SynchronizedObject
+import kotlinx.atomicfu.locks.synchronized
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import okio.FileNotFoundException
diff --git a/datastore/datastore-core-okio/src/commonTest/kotlin/androidx/datastore/core/okio/OkioStorageTest.kt b/datastore/datastore-core-okio/src/commonTest/kotlin/androidx/datastore/core/okio/OkioStorageTest.kt
index f2b88b1..11db7e0 100644
--- a/datastore/datastore-core-okio/src/commonTest/kotlin/androidx/datastore/core/okio/OkioStorageTest.kt
+++ b/datastore/datastore-core-okio/src/commonTest/kotlin/androidx/datastore/core/okio/OkioStorageTest.kt
@@ -17,6 +17,8 @@
package androidx.datastore.core.okio
import androidx.datastore.OkioTestIO
+import androidx.datastore.TestingOkioSerializer
+import androidx.datastore.TestingSerializerConfig
import androidx.datastore.core.ReadScope
import androidx.datastore.core.Storage
import androidx.datastore.core.StorageConnection
@@ -24,19 +26,17 @@
import androidx.datastore.core.readData
import androidx.datastore.core.use
import androidx.datastore.core.writeData
-import androidx.datastore.TestingOkioSerializer
-import androidx.datastore.TestingSerializerConfig
import androidx.kruth.assertThat
import androidx.kruth.assertThrows
-import kotlin.test.Test
import kotlin.test.BeforeTest
+import kotlin.test.Test
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.async
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.test.TestScope
-import kotlinx.coroutines.test.runTest
import kotlinx.coroutines.test.UnconfinedTestDispatcher
+import kotlinx.coroutines.test.runTest
import kotlinx.coroutines.yield
import okio.FileSystem
import okio.IOException
diff --git a/datastore/datastore-core-okio/src/nativeMain/kotlin/androidx/datastore/core/okio/Atomic.native.kt b/datastore/datastore-core-okio/src/nativeMain/kotlin/androidx/datastore/core/okio/Atomic.native.kt
index 6498e6f..a27d82f 100644
--- a/datastore/datastore-core-okio/src/nativeMain/kotlin/androidx/datastore/core/okio/Atomic.native.kt
+++ b/datastore/datastore-core-okio/src/nativeMain/kotlin/androidx/datastore/core/okio/Atomic.native.kt
@@ -16,8 +16,8 @@
package androidx.datastore.core.okio
-import kotlinx.atomicfu.AtomicInt as AtomicFuAtomicInt
import kotlinx.atomicfu.AtomicBoolean as AtomicFuAtomicBoolean
+import kotlinx.atomicfu.AtomicInt as AtomicFuAtomicInt
import kotlinx.atomicfu.atomic
internal actual class AtomicInt actual constructor(initialValue: Int) {
diff --git a/datastore/datastore-core/api/current.txt b/datastore/datastore-core/api/current.txt
index 64db9d6..1c52e50 100644
--- a/datastore/datastore-core/api/current.txt
+++ b/datastore/datastore-core/api/current.txt
@@ -26,14 +26,17 @@
}
public final class DataStoreFactory {
- method public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Serializer<T> serializer, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, optional java.util.List<? extends androidx.datastore.core.DataMigration<T>> migrations, optional kotlinx.coroutines.CoroutineScope scope, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
method public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Serializer<T> serializer, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, optional java.util.List<? extends androidx.datastore.core.DataMigration<T>> migrations, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
+ method public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Serializer<T> serializer, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, optional java.util.List<? extends androidx.datastore.core.DataMigration<T>> migrations, optional kotlinx.coroutines.CoroutineScope scope, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
method public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Serializer<T> serializer, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
method public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Serializer<T> serializer, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
method public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Storage<T> storage, androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, java.util.List<? extends androidx.datastore.core.DataMigration<T>> migrations, kotlinx.coroutines.CoroutineScope scope);
field public static final androidx.datastore.core.DataStoreFactory INSTANCE;
}
+ @kotlin.RequiresOptIn(level=kotlin.RequiresOptIn.Level.WARNING, message="This API is experimental and is likely to change in the future.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.FUNCTION) public @interface ExperimentalMultiProcessDataStore {
+ }
+
public interface InterProcessCoordinator {
method public kotlinx.coroutines.flow.Flow<kotlin.Unit> getUpdateNotifications();
method public suspend Object? getVersion(kotlin.coroutines.Continuation<? super java.lang.Integer>);
@@ -52,6 +55,14 @@
}
public final class MultiProcessDataStoreFactory {
+ method @androidx.datastore.core.ExperimentalMultiProcessDataStore public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Serializer<T> serializer, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, optional java.util.List<? extends androidx.datastore.core.DataMigration<T>> migrations, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
+ method @androidx.datastore.core.ExperimentalMultiProcessDataStore public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Serializer<T> serializer, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, optional java.util.List<? extends androidx.datastore.core.DataMigration<T>> migrations, optional kotlinx.coroutines.CoroutineScope scope, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
+ method @androidx.datastore.core.ExperimentalMultiProcessDataStore public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Serializer<T> serializer, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
+ method @androidx.datastore.core.ExperimentalMultiProcessDataStore public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Serializer<T> serializer, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
+ method @androidx.datastore.core.ExperimentalMultiProcessDataStore public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Storage<T> storage);
+ method @androidx.datastore.core.ExperimentalMultiProcessDataStore public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Storage<T> storage, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler);
+ method @androidx.datastore.core.ExperimentalMultiProcessDataStore public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Storage<T> storage, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, optional java.util.List<? extends androidx.datastore.core.DataMigration<T>> migrations);
+ method @androidx.datastore.core.ExperimentalMultiProcessDataStore public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Storage<T> storage, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, optional java.util.List<? extends androidx.datastore.core.DataMigration<T>> migrations, optional kotlinx.coroutines.CoroutineScope scope);
field public static final androidx.datastore.core.MultiProcessDataStoreFactory INSTANCE;
}
diff --git a/datastore/datastore-core/api/public_plus_experimental_current.txt b/datastore/datastore-core/api/public_plus_experimental_current.txt
deleted file mode 100644
index 0518771..0000000
--- a/datastore/datastore-core/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,110 +0,0 @@
-// Signature format: 4.0
-package androidx.datastore.core {
-
- public interface Closeable {
- method public void close();
- }
-
- public final class CloseableKt {
- method public static inline <T extends androidx.datastore.core.Closeable, R> R use(T, kotlin.jvm.functions.Function1<? super T,? extends R> block);
- }
-
- public final class CorruptionException extends java.io.IOException {
- ctor public CorruptionException(String message, optional Throwable? cause);
- }
-
- public interface DataMigration<T> {
- method public suspend Object? cleanUp(kotlin.coroutines.Continuation<? super kotlin.Unit>);
- method public suspend Object? migrate(T currentData, kotlin.coroutines.Continuation<? super T>);
- method public suspend Object? shouldMigrate(T currentData, kotlin.coroutines.Continuation<? super java.lang.Boolean>);
- }
-
- public interface DataStore<T> {
- method public kotlinx.coroutines.flow.Flow<T> getData();
- method public suspend Object? updateData(kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super T>,?> transform, kotlin.coroutines.Continuation<? super T>);
- property public abstract kotlinx.coroutines.flow.Flow<T> data;
- }
-
- public final class DataStoreFactory {
- method public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Serializer<T> serializer, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, optional java.util.List<? extends androidx.datastore.core.DataMigration<T>> migrations, optional kotlinx.coroutines.CoroutineScope scope, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
- method public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Serializer<T> serializer, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, optional java.util.List<? extends androidx.datastore.core.DataMigration<T>> migrations, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
- method public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Serializer<T> serializer, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
- method public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Serializer<T> serializer, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
- method public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Storage<T> storage, androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, java.util.List<? extends androidx.datastore.core.DataMigration<T>> migrations, kotlinx.coroutines.CoroutineScope scope);
- field public static final androidx.datastore.core.DataStoreFactory INSTANCE;
- }
-
- @kotlin.RequiresOptIn(level=kotlin.RequiresOptIn.Level.WARNING, message="This API is experimental and is likely to change in the future.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.FUNCTION) public @interface ExperimentalMultiProcessDataStore {
- }
-
- public interface InterProcessCoordinator {
- method public kotlinx.coroutines.flow.Flow<kotlin.Unit> getUpdateNotifications();
- method public suspend Object? getVersion(kotlin.coroutines.Continuation<? super java.lang.Integer>);
- method public suspend Object? incrementAndGetVersion(kotlin.coroutines.Continuation<? super java.lang.Integer>);
- method public suspend <T> Object? lock(kotlin.jvm.functions.Function1<? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
- method public suspend <T> Object? tryLock(kotlin.jvm.functions.Function2<? super java.lang.Boolean,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
- property public abstract kotlinx.coroutines.flow.Flow<kotlin.Unit> updateNotifications;
- }
-
- public final class InterProcessCoordinatorKt {
- method public static androidx.datastore.core.InterProcessCoordinator createSingleProcessCoordinator();
- }
-
- public final class MultiProcessCoordinatorKt {
- method public static androidx.datastore.core.InterProcessCoordinator createMultiProcessCoordinator(kotlin.coroutines.CoroutineContext context, java.io.File file);
- }
-
- public final class MultiProcessDataStoreFactory {
- method @androidx.datastore.core.ExperimentalMultiProcessDataStore public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Storage<T> storage, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, optional java.util.List<? extends androidx.datastore.core.DataMigration<T>> migrations, optional kotlinx.coroutines.CoroutineScope scope);
- method @androidx.datastore.core.ExperimentalMultiProcessDataStore public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Storage<T> storage, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, optional java.util.List<? extends androidx.datastore.core.DataMigration<T>> migrations);
- method @androidx.datastore.core.ExperimentalMultiProcessDataStore public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Storage<T> storage, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler);
- method @androidx.datastore.core.ExperimentalMultiProcessDataStore public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Storage<T> storage);
- method @androidx.datastore.core.ExperimentalMultiProcessDataStore public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Serializer<T> serializer, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, optional java.util.List<? extends androidx.datastore.core.DataMigration<T>> migrations, optional kotlinx.coroutines.CoroutineScope scope, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
- method @androidx.datastore.core.ExperimentalMultiProcessDataStore public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Serializer<T> serializer, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, optional java.util.List<? extends androidx.datastore.core.DataMigration<T>> migrations, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
- method @androidx.datastore.core.ExperimentalMultiProcessDataStore public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Serializer<T> serializer, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
- method @androidx.datastore.core.ExperimentalMultiProcessDataStore public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Serializer<T> serializer, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
- field public static final androidx.datastore.core.MultiProcessDataStoreFactory INSTANCE;
- }
-
- public interface ReadScope<T> extends androidx.datastore.core.Closeable {
- method public suspend Object? readData(kotlin.coroutines.Continuation<? super T>);
- }
-
- public interface Serializer<T> {
- method public T getDefaultValue();
- method public suspend Object? readFrom(java.io.InputStream input, kotlin.coroutines.Continuation<? super T>);
- method public suspend Object? writeTo(T t, java.io.OutputStream output, kotlin.coroutines.Continuation<? super kotlin.Unit>);
- property public abstract T defaultValue;
- }
-
- public interface Storage<T> {
- method public androidx.datastore.core.StorageConnection<T> createConnection();
- }
-
- public interface StorageConnection<T> extends androidx.datastore.core.Closeable {
- method public androidx.datastore.core.InterProcessCoordinator getCoordinator();
- method public suspend <R> Object? readScope(kotlin.jvm.functions.Function3<? super androidx.datastore.core.ReadScope<T>,? super java.lang.Boolean,? super kotlin.coroutines.Continuation<? super R>,?> block, kotlin.coroutines.Continuation<? super R>);
- method public suspend Object? writeScope(kotlin.jvm.functions.Function2<? super androidx.datastore.core.WriteScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
- property public abstract androidx.datastore.core.InterProcessCoordinator coordinator;
- }
-
- public final class StorageConnectionKt {
- method public static suspend <T> Object? readData(androidx.datastore.core.StorageConnection<T>, kotlin.coroutines.Continuation<? super T>);
- method public static suspend <T> Object? writeData(androidx.datastore.core.StorageConnection<T>, T value, kotlin.coroutines.Continuation<? super kotlin.Unit>);
- }
-
- public interface WriteScope<T> extends androidx.datastore.core.ReadScope<T> {
- method public suspend Object? writeData(T value, kotlin.coroutines.Continuation<? super kotlin.Unit>);
- }
-
-}
-
-package androidx.datastore.core.handlers {
-
- public final class ReplaceFileCorruptionHandler<T> {
- ctor public ReplaceFileCorruptionHandler(kotlin.jvm.functions.Function1<? super androidx.datastore.core.CorruptionException,? extends T> produceNewData);
- method @kotlin.jvm.Throws(exceptionClasses=IOException::class) public suspend Object? handleCorruption(androidx.datastore.core.CorruptionException ex, kotlin.coroutines.Continuation<? super T>) throws java.io.IOException;
- }
-
-}
-
diff --git a/datastore/datastore-core/api/restricted_current.txt b/datastore/datastore-core/api/restricted_current.txt
index 64db9d6..1c52e50 100644
--- a/datastore/datastore-core/api/restricted_current.txt
+++ b/datastore/datastore-core/api/restricted_current.txt
@@ -26,14 +26,17 @@
}
public final class DataStoreFactory {
- method public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Serializer<T> serializer, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, optional java.util.List<? extends androidx.datastore.core.DataMigration<T>> migrations, optional kotlinx.coroutines.CoroutineScope scope, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
method public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Serializer<T> serializer, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, optional java.util.List<? extends androidx.datastore.core.DataMigration<T>> migrations, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
+ method public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Serializer<T> serializer, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, optional java.util.List<? extends androidx.datastore.core.DataMigration<T>> migrations, optional kotlinx.coroutines.CoroutineScope scope, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
method public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Serializer<T> serializer, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
method public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Serializer<T> serializer, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
method public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Storage<T> storage, androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, java.util.List<? extends androidx.datastore.core.DataMigration<T>> migrations, kotlinx.coroutines.CoroutineScope scope);
field public static final androidx.datastore.core.DataStoreFactory INSTANCE;
}
+ @kotlin.RequiresOptIn(level=kotlin.RequiresOptIn.Level.WARNING, message="This API is experimental and is likely to change in the future.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.FUNCTION) public @interface ExperimentalMultiProcessDataStore {
+ }
+
public interface InterProcessCoordinator {
method public kotlinx.coroutines.flow.Flow<kotlin.Unit> getUpdateNotifications();
method public suspend Object? getVersion(kotlin.coroutines.Continuation<? super java.lang.Integer>);
@@ -52,6 +55,14 @@
}
public final class MultiProcessDataStoreFactory {
+ method @androidx.datastore.core.ExperimentalMultiProcessDataStore public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Serializer<T> serializer, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, optional java.util.List<? extends androidx.datastore.core.DataMigration<T>> migrations, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
+ method @androidx.datastore.core.ExperimentalMultiProcessDataStore public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Serializer<T> serializer, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, optional java.util.List<? extends androidx.datastore.core.DataMigration<T>> migrations, optional kotlinx.coroutines.CoroutineScope scope, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
+ method @androidx.datastore.core.ExperimentalMultiProcessDataStore public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Serializer<T> serializer, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
+ method @androidx.datastore.core.ExperimentalMultiProcessDataStore public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Serializer<T> serializer, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
+ method @androidx.datastore.core.ExperimentalMultiProcessDataStore public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Storage<T> storage);
+ method @androidx.datastore.core.ExperimentalMultiProcessDataStore public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Storage<T> storage, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler);
+ method @androidx.datastore.core.ExperimentalMultiProcessDataStore public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Storage<T> storage, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, optional java.util.List<? extends androidx.datastore.core.DataMigration<T>> migrations);
+ method @androidx.datastore.core.ExperimentalMultiProcessDataStore public <T> androidx.datastore.core.DataStore<T> create(androidx.datastore.core.Storage<T> storage, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, optional java.util.List<? extends androidx.datastore.core.DataMigration<T>> migrations, optional kotlinx.coroutines.CoroutineScope scope);
field public static final androidx.datastore.core.MultiProcessDataStoreFactory INSTANCE;
}
diff --git a/datastore/datastore-core/build.gradle b/datastore/datastore-core/build.gradle
index da45ae9..67e6e17 100644
--- a/datastore/datastore-core/build.gradle
+++ b/datastore/datastore-core/build.gradle
@@ -156,7 +156,7 @@
}
androidx {
- name = "Android DataStore Core"
+ name = "DataStore Core"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2020"
description = "Android DataStore Core - contains the underlying store used by each serialization method"
diff --git a/datastore/datastore-core/src/androidTest/java/androidx/datastore/core/SharedCounterTest.kt b/datastore/datastore-core/src/androidTest/java/androidx/datastore/core/SharedCounterTest.kt
index d7f9f21..5179249 100644
--- a/datastore/datastore-core/src/androidTest/java/androidx/datastore/core/SharedCounterTest.kt
+++ b/datastore/datastore-core/src/androidTest/java/androidx/datastore/core/SharedCounterTest.kt
@@ -26,10 +26,10 @@
import kotlinx.coroutines.async
import kotlinx.coroutines.launch
import kotlinx.coroutines.test.runTest
-import org.junit.Rule
-import org.junit.rules.TemporaryFolder
import org.junit.Before
+import org.junit.Rule
import org.junit.Test
+import org.junit.rules.TemporaryFolder
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
diff --git a/datastore/datastore-core/src/commonTest/kotlin/androidx/datastore/core/DataMigrationInitializerTest.kt b/datastore/datastore-core/src/commonTest/kotlin/androidx/datastore/core/DataMigrationInitializerTest.kt
index ccc6edb..c61f858 100644
--- a/datastore/datastore-core/src/commonTest/kotlin/androidx/datastore/core/DataMigrationInitializerTest.kt
+++ b/datastore/datastore-core/src/commonTest/kotlin/androidx/datastore/core/DataMigrationInitializerTest.kt
@@ -23,13 +23,12 @@
import androidx.kruth.assertThrows
import kotlin.test.BeforeTest
import kotlin.test.Test
-import kotlinx.coroutines.test.TestScope
-import kotlinx.coroutines.test.UnconfinedTestDispatcher
-
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.async
import kotlinx.coroutines.flow.first
+import kotlinx.coroutines.test.TestScope
+import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.runTest
@OptIn(ExperimentalCoroutinesApi::class)
diff --git a/datastore/datastore-core/src/commonTest/kotlin/androidx/datastore/core/SingleProcessDataStoreTest.kt b/datastore/datastore-core/src/commonTest/kotlin/androidx/datastore/core/SingleProcessDataStoreTest.kt
index dfa3273..6d93034 100644
--- a/datastore/datastore-core/src/commonTest/kotlin/androidx/datastore/core/SingleProcessDataStoreTest.kt
+++ b/datastore/datastore-core/src/commonTest/kotlin/androidx/datastore/core/SingleProcessDataStoreTest.kt
@@ -24,16 +24,24 @@
import androidx.datastore.core.handlers.NoOpCorruptionHandler
import androidx.kruth.assertThat
import androidx.kruth.assertThrows
+import kotlin.coroutines.AbstractCoroutineContextElement
+import kotlin.coroutines.CoroutineContext
+import kotlin.coroutines.cancellation.CancellationException
+import kotlin.random.Random
+import kotlin.test.BeforeTest
+import kotlin.test.Test
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.Job
+import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitCancellation
import kotlinx.coroutines.cancel
import kotlinx.coroutines.cancelAndJoin
import kotlinx.coroutines.coroutineScope
+import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.take
import kotlinx.coroutines.flow.toList
@@ -41,17 +49,9 @@
import kotlinx.coroutines.launch
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.UnconfinedTestDispatcher
-import kotlinx.coroutines.withContext
-import kotlinx.coroutines.test.runTest
-import kotlin.coroutines.AbstractCoroutineContextElement
-import kotlin.coroutines.CoroutineContext
-import kotlin.coroutines.cancellation.CancellationException
-import kotlin.random.Random
-import kotlin.test.BeforeTest
-import kotlin.test.Test
-import kotlinx.coroutines.SupervisorJob
-import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.test.runCurrent
+import kotlinx.coroutines.test.runTest
+import kotlinx.coroutines.withContext
@OptIn(ExperimentalCoroutinesApi::class)
abstract class SingleProcessDataStoreTest<F : TestFile>(private val testIO: TestIO<F, *>) {
diff --git a/datastore/datastore-core/src/jvmMain/kotlin/androidx/datastore/core/DataStoreFactory.jvm.kt b/datastore/datastore-core/src/jvmMain/kotlin/androidx/datastore/core/DataStoreFactory.jvm.kt
index 285e940..5908528 100644
--- a/datastore/datastore-core/src/jvmMain/kotlin/androidx/datastore/core/DataStoreFactory.jvm.kt
+++ b/datastore/datastore-core/src/jvmMain/kotlin/androidx/datastore/core/DataStoreFactory.jvm.kt
@@ -18,10 +18,10 @@
import androidx.datastore.core.handlers.NoOpCorruptionHandler
import androidx.datastore.core.handlers.ReplaceFileCorruptionHandler
+import java.io.File
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
-import java.io.File
/**
* Public factory for creating DataStore instances.
diff --git a/datastore/datastore-core/src/jvmTest/kotlin/androidx/datastore/core/FileStorageTest.kt b/datastore/datastore-core/src/jvmTest/kotlin/androidx/datastore/core/FileStorageTest.kt
index 273bd30..b12adcb 100644
--- a/datastore/datastore-core/src/jvmTest/kotlin/androidx/datastore/core/FileStorageTest.kt
+++ b/datastore/datastore-core/src/jvmTest/kotlin/androidx/datastore/core/FileStorageTest.kt
@@ -22,15 +22,15 @@
import java.io.File
import java.io.IOException
import kotlin.random.Random
-import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlin.test.Test
import kotlin.test.BeforeTest
+import kotlin.test.Test
import kotlinx.coroutines.CompletableDeferred
+import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.async
+import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.runTest
-import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.yield
@ExperimentalCoroutinesApi
diff --git a/datastore/datastore-core/src/jvmTest/kotlin/androidx/datastore/core/JvmTests.kt b/datastore/datastore-core/src/jvmTest/kotlin/androidx/datastore/core/JvmTests.kt
index 033a8c9..b8a32d1 100644
--- a/datastore/datastore-core/src/jvmTest/kotlin/androidx/datastore/core/JvmTests.kt
+++ b/datastore/datastore-core/src/jvmTest/kotlin/androidx/datastore/core/JvmTests.kt
@@ -20,13 +20,13 @@
import androidx.datastore.JavaIOFile
import androidx.kruth.assertThat
import androidx.kruth.assertThrows
+import java.io.IOException
+import java.io.InputStream
+import java.io.OutputStream
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.InternalCoroutinesApi
import kotlinx.coroutines.ObsoleteCoroutinesApi
-import java.io.IOException
-import java.io.InputStream
-import java.io.OutputStream
import kotlinx.coroutines.flow.first
import org.junit.Test
diff --git a/datastore/datastore-core/src/jvmTest/kotlin/androidx/datastore/core/handlers/ReplaceFileCorruptionHandlerTest.kt b/datastore/datastore-core/src/jvmTest/kotlin/androidx/datastore/core/handlers/ReplaceFileCorruptionHandlerTest.kt
index c6cdd67..951f37c 100644
--- a/datastore/datastore-core/src/jvmTest/kotlin/androidx/datastore/core/handlers/ReplaceFileCorruptionHandlerTest.kt
+++ b/datastore/datastore-core/src/jvmTest/kotlin/androidx/datastore/core/handlers/ReplaceFileCorruptionHandlerTest.kt
@@ -17,11 +17,11 @@
package androidx.datastore.core.handlers
import androidx.datastore.TestingSerializerConfig
-import androidx.datastore.core.FileStorage
import androidx.datastore.core.DataStoreImpl
+import androidx.datastore.core.FileStorage
import androidx.datastore.core.TestingSerializer
-import androidx.kruth.assertThrows
import androidx.kruth.assertThat
+import androidx.kruth.assertThrows
import java.io.File
import java.io.IOException
import java.util.concurrent.TimeUnit
diff --git a/datastore/datastore-preferences-core/api/current.txt b/datastore/datastore-preferences-core/api/current.txt
index d3e249b..d7cd6ec 100644
--- a/datastore/datastore-preferences-core/api/current.txt
+++ b/datastore/datastore-preferences-core/api/current.txt
@@ -15,11 +15,11 @@
}
public final class PreferenceDataStoreFactory {
- method public androidx.datastore.core.DataStore<androidx.datastore.preferences.core.Preferences> create(optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<androidx.datastore.preferences.core.Preferences>? corruptionHandler, optional java.util.List<? extends androidx.datastore.core.DataMigration<androidx.datastore.preferences.core.Preferences>> migrations, optional kotlinx.coroutines.CoroutineScope scope, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
method public androidx.datastore.core.DataStore<androidx.datastore.preferences.core.Preferences> create(optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<androidx.datastore.preferences.core.Preferences>? corruptionHandler, optional java.util.List<? extends androidx.datastore.core.DataMigration<androidx.datastore.preferences.core.Preferences>> migrations, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
+ method public androidx.datastore.core.DataStore<androidx.datastore.preferences.core.Preferences> create(optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<androidx.datastore.preferences.core.Preferences>? corruptionHandler, optional java.util.List<? extends androidx.datastore.core.DataMigration<androidx.datastore.preferences.core.Preferences>> migrations, optional kotlinx.coroutines.CoroutineScope scope, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
method public androidx.datastore.core.DataStore<androidx.datastore.preferences.core.Preferences> create(optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<androidx.datastore.preferences.core.Preferences>? corruptionHandler, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
- method public androidx.datastore.core.DataStore<androidx.datastore.preferences.core.Preferences> create(kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
method public androidx.datastore.core.DataStore<androidx.datastore.preferences.core.Preferences> create(androidx.datastore.core.Storage<androidx.datastore.preferences.core.Preferences> storage, androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<androidx.datastore.preferences.core.Preferences>? corruptionHandler, java.util.List<? extends androidx.datastore.core.DataMigration<androidx.datastore.preferences.core.Preferences>> migrations, kotlinx.coroutines.CoroutineScope scope);
+ method public androidx.datastore.core.DataStore<androidx.datastore.preferences.core.Preferences> create(kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
method public androidx.datastore.core.DataStore<androidx.datastore.preferences.core.Preferences> createWithPath(androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<androidx.datastore.preferences.core.Preferences>? corruptionHandler, java.util.List<? extends androidx.datastore.core.DataMigration<androidx.datastore.preferences.core.Preferences>> migrations, kotlinx.coroutines.CoroutineScope scope, kotlin.jvm.functions.Function0<okio.Path> produceFile);
field public static final androidx.datastore.preferences.core.PreferenceDataStoreFactory INSTANCE;
}
diff --git a/datastore/datastore-preferences-core/api/public_plus_experimental_current.txt b/datastore/datastore-preferences-core/api/public_plus_experimental_current.txt
deleted file mode 100644
index d3e249b..0000000
--- a/datastore/datastore-preferences-core/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,74 +0,0 @@
-// Signature format: 4.0
-package androidx.datastore.preferences.core {
-
- public final class MutablePreferences extends androidx.datastore.preferences.core.Preferences {
- method public java.util.Map<androidx.datastore.preferences.core.Preferences.Key<?>,java.lang.Object> asMap();
- method public void clear();
- method public operator <T> boolean contains(androidx.datastore.preferences.core.Preferences.Key<T> key);
- method public operator <T> T? get(androidx.datastore.preferences.core.Preferences.Key<T> key);
- method public operator void minusAssign(androidx.datastore.preferences.core.Preferences.Key<?> key);
- method public operator void plusAssign(androidx.datastore.preferences.core.Preferences prefs);
- method public operator void plusAssign(androidx.datastore.preferences.core.Preferences.Pair<?> pair);
- method public void putAll(androidx.datastore.preferences.core.Preferences.Pair<?>... pairs);
- method public <T> T remove(androidx.datastore.preferences.core.Preferences.Key<T> key);
- method public operator <T> void set(androidx.datastore.preferences.core.Preferences.Key<T> key, T value);
- }
-
- public final class PreferenceDataStoreFactory {
- method public androidx.datastore.core.DataStore<androidx.datastore.preferences.core.Preferences> create(optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<androidx.datastore.preferences.core.Preferences>? corruptionHandler, optional java.util.List<? extends androidx.datastore.core.DataMigration<androidx.datastore.preferences.core.Preferences>> migrations, optional kotlinx.coroutines.CoroutineScope scope, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
- method public androidx.datastore.core.DataStore<androidx.datastore.preferences.core.Preferences> create(optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<androidx.datastore.preferences.core.Preferences>? corruptionHandler, optional java.util.List<? extends androidx.datastore.core.DataMigration<androidx.datastore.preferences.core.Preferences>> migrations, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
- method public androidx.datastore.core.DataStore<androidx.datastore.preferences.core.Preferences> create(optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<androidx.datastore.preferences.core.Preferences>? corruptionHandler, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
- method public androidx.datastore.core.DataStore<androidx.datastore.preferences.core.Preferences> create(kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
- method public androidx.datastore.core.DataStore<androidx.datastore.preferences.core.Preferences> create(androidx.datastore.core.Storage<androidx.datastore.preferences.core.Preferences> storage, androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<androidx.datastore.preferences.core.Preferences>? corruptionHandler, java.util.List<? extends androidx.datastore.core.DataMigration<androidx.datastore.preferences.core.Preferences>> migrations, kotlinx.coroutines.CoroutineScope scope);
- method public androidx.datastore.core.DataStore<androidx.datastore.preferences.core.Preferences> createWithPath(androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<androidx.datastore.preferences.core.Preferences>? corruptionHandler, java.util.List<? extends androidx.datastore.core.DataMigration<androidx.datastore.preferences.core.Preferences>> migrations, kotlinx.coroutines.CoroutineScope scope, kotlin.jvm.functions.Function0<okio.Path> produceFile);
- field public static final androidx.datastore.preferences.core.PreferenceDataStoreFactory INSTANCE;
- }
-
- public abstract class Preferences {
- method public abstract java.util.Map<androidx.datastore.preferences.core.Preferences.Key<?>,java.lang.Object> asMap();
- method public abstract operator <T> boolean contains(androidx.datastore.preferences.core.Preferences.Key<T> key);
- method public abstract operator <T> T? get(androidx.datastore.preferences.core.Preferences.Key<T> key);
- method public final androidx.datastore.preferences.core.MutablePreferences toMutablePreferences();
- method public final androidx.datastore.preferences.core.Preferences toPreferences();
- }
-
- public static final class Preferences.Key<T> {
- method public String getName();
- method public infix androidx.datastore.preferences.core.Preferences.Pair<T> to(T value);
- property public final String name;
- }
-
- public static final class Preferences.Pair<T> {
- }
-
- public final class PreferencesFactory {
- method public static androidx.datastore.preferences.core.Preferences create(androidx.datastore.preferences.core.Preferences.Pair<?>... pairs);
- method public static androidx.datastore.preferences.core.Preferences createEmpty();
- method public static androidx.datastore.preferences.core.MutablePreferences createMutable(androidx.datastore.preferences.core.Preferences.Pair<?>... pairs);
- }
-
- public final class PreferencesKeys {
- method public static androidx.datastore.preferences.core.Preferences.Key<java.lang.Boolean> booleanKey(String name);
- method public static androidx.datastore.preferences.core.Preferences.Key<byte[]> byteArrayKey(String name);
- method public static androidx.datastore.preferences.core.Preferences.Key<java.lang.Double> doubleKey(String name);
- method public static androidx.datastore.preferences.core.Preferences.Key<java.lang.Float> floatKey(String name);
- method public static androidx.datastore.preferences.core.Preferences.Key<java.lang.Integer> intKey(String name);
- method public static androidx.datastore.preferences.core.Preferences.Key<java.lang.Long> longKey(String name);
- method public static androidx.datastore.preferences.core.Preferences.Key<java.lang.String> stringKey(String name);
- method public static androidx.datastore.preferences.core.Preferences.Key<java.util.Set<java.lang.String>> stringSetKey(String name);
- }
-
- public final class PreferencesKt {
- method public static suspend Object? edit(androidx.datastore.core.DataStore<androidx.datastore.preferences.core.Preferences>, kotlin.jvm.functions.Function2<? super androidx.datastore.preferences.core.MutablePreferences,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> transform, kotlin.coroutines.Continuation<? super androidx.datastore.preferences.core.Preferences>);
- }
-
- public final class PreferencesSerializer implements androidx.datastore.core.okio.OkioSerializer<androidx.datastore.preferences.core.Preferences> {
- method public androidx.datastore.preferences.core.Preferences getDefaultValue();
- method @kotlin.jvm.Throws(exceptionClasses={IOException::class, CorruptionException::class}) public suspend Object? readFrom(okio.BufferedSource source, kotlin.coroutines.Continuation<? super androidx.datastore.preferences.core.Preferences>) throws androidx.datastore.core.CorruptionException, java.io.IOException;
- method @kotlin.jvm.Throws(exceptionClasses={IOException::class, CorruptionException::class}) public suspend Object? writeTo(androidx.datastore.preferences.core.Preferences t, okio.BufferedSink sink, kotlin.coroutines.Continuation<? super kotlin.Unit>) throws androidx.datastore.core.CorruptionException, java.io.IOException;
- property public androidx.datastore.preferences.core.Preferences defaultValue;
- field public static final androidx.datastore.preferences.core.PreferencesSerializer INSTANCE;
- }
-
-}
-
diff --git a/datastore/datastore-preferences-core/api/restricted_current.txt b/datastore/datastore-preferences-core/api/restricted_current.txt
index d3e249b..d7cd6ec 100644
--- a/datastore/datastore-preferences-core/api/restricted_current.txt
+++ b/datastore/datastore-preferences-core/api/restricted_current.txt
@@ -15,11 +15,11 @@
}
public final class PreferenceDataStoreFactory {
- method public androidx.datastore.core.DataStore<androidx.datastore.preferences.core.Preferences> create(optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<androidx.datastore.preferences.core.Preferences>? corruptionHandler, optional java.util.List<? extends androidx.datastore.core.DataMigration<androidx.datastore.preferences.core.Preferences>> migrations, optional kotlinx.coroutines.CoroutineScope scope, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
method public androidx.datastore.core.DataStore<androidx.datastore.preferences.core.Preferences> create(optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<androidx.datastore.preferences.core.Preferences>? corruptionHandler, optional java.util.List<? extends androidx.datastore.core.DataMigration<androidx.datastore.preferences.core.Preferences>> migrations, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
+ method public androidx.datastore.core.DataStore<androidx.datastore.preferences.core.Preferences> create(optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<androidx.datastore.preferences.core.Preferences>? corruptionHandler, optional java.util.List<? extends androidx.datastore.core.DataMigration<androidx.datastore.preferences.core.Preferences>> migrations, optional kotlinx.coroutines.CoroutineScope scope, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
method public androidx.datastore.core.DataStore<androidx.datastore.preferences.core.Preferences> create(optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<androidx.datastore.preferences.core.Preferences>? corruptionHandler, kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
- method public androidx.datastore.core.DataStore<androidx.datastore.preferences.core.Preferences> create(kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
method public androidx.datastore.core.DataStore<androidx.datastore.preferences.core.Preferences> create(androidx.datastore.core.Storage<androidx.datastore.preferences.core.Preferences> storage, androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<androidx.datastore.preferences.core.Preferences>? corruptionHandler, java.util.List<? extends androidx.datastore.core.DataMigration<androidx.datastore.preferences.core.Preferences>> migrations, kotlinx.coroutines.CoroutineScope scope);
+ method public androidx.datastore.core.DataStore<androidx.datastore.preferences.core.Preferences> create(kotlin.jvm.functions.Function0<? extends java.io.File> produceFile);
method public androidx.datastore.core.DataStore<androidx.datastore.preferences.core.Preferences> createWithPath(androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<androidx.datastore.preferences.core.Preferences>? corruptionHandler, java.util.List<? extends androidx.datastore.core.DataMigration<androidx.datastore.preferences.core.Preferences>> migrations, kotlinx.coroutines.CoroutineScope scope, kotlin.jvm.functions.Function0<okio.Path> produceFile);
field public static final androidx.datastore.preferences.core.PreferenceDataStoreFactory INSTANCE;
}
diff --git a/datastore/datastore-preferences-core/build.gradle b/datastore/datastore-preferences-core/build.gradle
index a9112b0..9567f6b 100644
--- a/datastore/datastore-preferences-core/build.gradle
+++ b/datastore/datastore-preferences-core/build.gradle
@@ -119,7 +119,7 @@
}
androidx {
- name = "Android Preferences DataStore Core"
+ name = "Preferences DataStore Core"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2020"
description = "Android Preferences DataStore without the Android Dependencies"
diff --git a/datastore/datastore-preferences-core/src/commonMain/kotlin/androidx/datastore/preferences/core/PreferenceDataStoreFactory.kt b/datastore/datastore-preferences-core/src/commonMain/kotlin/androidx/datastore/preferences/core/PreferenceDataStoreFactory.kt
index 20e6cbc..085b1a6 100644
--- a/datastore/datastore-preferences-core/src/commonMain/kotlin/androidx/datastore/preferences/core/PreferenceDataStoreFactory.kt
+++ b/datastore/datastore-preferences-core/src/commonMain/kotlin/androidx/datastore/preferences/core/PreferenceDataStoreFactory.kt
@@ -21,9 +21,9 @@
import androidx.datastore.core.DataStore
import androidx.datastore.core.Storage
import androidx.datastore.core.handlers.ReplaceFileCorruptionHandler
+import kotlin.jvm.JvmOverloads
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.SupervisorJob
-import kotlin.jvm.JvmOverloads
import okio.Path
expect object PreferenceDataStoreFactory {
diff --git a/datastore/datastore-preferences-core/src/commonTest/kotlin/androidx/datastore/preferences/core/PreferencesSerializerTest.kt b/datastore/datastore-preferences-core/src/commonTest/kotlin/androidx/datastore/preferences/core/PreferencesSerializerTest.kt
index aa06488..b216558 100644
--- a/datastore/datastore-preferences-core/src/commonTest/kotlin/androidx/datastore/preferences/core/PreferencesSerializerTest.kt
+++ b/datastore/datastore-preferences-core/src/commonTest/kotlin/androidx/datastore/preferences/core/PreferencesSerializerTest.kt
@@ -19,11 +19,11 @@
import androidx.datastore.OkioPath
import androidx.datastore.OkioTestIO
import androidx.datastore.core.okio.OkioSerializer
-import kotlinx.coroutines.test.runTest
-import kotlin.test.assertEquals
import kotlin.test.BeforeTest
import kotlin.test.Test
+import kotlin.test.assertEquals
import kotlinx.coroutines.test.TestScope
+import kotlinx.coroutines.test.runTest
import okio.FileSystem
@OptIn(
diff --git a/datastore/datastore-preferences-core/src/commonTest/kotlin/androidx/datastore/preferences/core/PreferencesTest.kt b/datastore/datastore-preferences-core/src/commonTest/kotlin/androidx/datastore/preferences/core/PreferencesTest.kt
index 7f2dc36..61d7c07 100644
--- a/datastore/datastore-preferences-core/src/commonTest/kotlin/androidx/datastore/preferences/core/PreferencesTest.kt
+++ b/datastore/datastore-preferences-core/src/commonTest/kotlin/androidx/datastore/preferences/core/PreferencesTest.kt
@@ -17,10 +17,10 @@
package androidx.datastore.preferences.core
import kotlin.test.Test
-import kotlin.test.assertNull
-import kotlin.test.assertTrue
import kotlin.test.assertEquals
import kotlin.test.assertNotEquals
+import kotlin.test.assertNull
+import kotlin.test.assertTrue
class PreferencesTest {
diff --git a/datastore/datastore-preferences-core/src/jvmMain/kotlin/androidx/datastore/preferences/core/Actual.jvm.kt b/datastore/datastore-preferences-core/src/jvmMain/kotlin/androidx/datastore/preferences/core/Actual.jvm.kt
index aaef346..1b12a57 100644
--- a/datastore/datastore-preferences-core/src/jvmMain/kotlin/androidx/datastore/preferences/core/Actual.jvm.kt
+++ b/datastore/datastore-preferences-core/src/jvmMain/kotlin/androidx/datastore/preferences/core/Actual.jvm.kt
@@ -19,7 +19,6 @@
package androidx.datastore.preferences.core
import androidx.annotation.RestrictTo
-
import java.util.Collections
import java.util.concurrent.atomic.AtomicBoolean
import kotlinx.coroutines.CoroutineDispatcher
diff --git a/datastore/datastore-preferences-core/src/jvmMain/kotlin/androidx/datastore/preferences/core/PreferenceDataStoreFactory.jvm.kt b/datastore/datastore-preferences-core/src/jvmMain/kotlin/androidx/datastore/preferences/core/PreferenceDataStoreFactory.jvm.kt
index d1bc635..d458300 100644
--- a/datastore/datastore-preferences-core/src/jvmMain/kotlin/androidx/datastore/preferences/core/PreferenceDataStoreFactory.jvm.kt
+++ b/datastore/datastore-preferences-core/src/jvmMain/kotlin/androidx/datastore/preferences/core/PreferenceDataStoreFactory.jvm.kt
@@ -23,10 +23,10 @@
import androidx.datastore.core.Storage
import androidx.datastore.core.handlers.ReplaceFileCorruptionHandler
import androidx.datastore.core.okio.OkioStorage
+import java.io.File
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
-import java.io.File
import okio.FileSystem
import okio.Path
import okio.Path.Companion.toOkioPath
diff --git a/datastore/datastore-preferences-core/src/jvmMain/kotlin/androidx/datastore/preferences/core/PreferencesSerializer.jvm.kt b/datastore/datastore-preferences-core/src/jvmMain/kotlin/androidx/datastore/preferences/core/PreferencesSerializer.jvm.kt
index c413194..3ba4afd 100644
--- a/datastore/datastore-preferences-core/src/jvmMain/kotlin/androidx/datastore/preferences/core/PreferencesSerializer.jvm.kt
+++ b/datastore/datastore-preferences-core/src/jvmMain/kotlin/androidx/datastore/preferences/core/PreferencesSerializer.jvm.kt
@@ -17,11 +17,11 @@
package androidx.datastore.preferences.core
import androidx.datastore.core.CorruptionException
-import androidx.datastore.preferences.PreferencesProto.PreferenceMap
-import androidx.datastore.preferences.PreferencesProto.Value
-import androidx.datastore.preferences.PreferencesProto.StringSet
import androidx.datastore.core.okio.OkioSerializer
import androidx.datastore.preferences.PreferencesMapCompat
+import androidx.datastore.preferences.PreferencesProto.PreferenceMap
+import androidx.datastore.preferences.PreferencesProto.StringSet
+import androidx.datastore.preferences.PreferencesProto.Value
import androidx.datastore.preferences.protobuf.ByteString
import kotlin.jvm.Throws
import okio.BufferedSink
diff --git a/datastore/datastore-preferences-core/src/jvmTest/kotlin/androidx/datastore/preferences/core/PreferenceDataStoreFactoryTest.kt b/datastore/datastore-preferences-core/src/jvmTest/kotlin/androidx/datastore/preferences/core/PreferenceDataStoreFactoryTest.kt
index 89aaab4..355b3c1 100644
--- a/datastore/datastore-preferences-core/src/jvmTest/kotlin/androidx/datastore/preferences/core/PreferenceDataStoreFactoryTest.kt
+++ b/datastore/datastore-preferences-core/src/jvmTest/kotlin/androidx/datastore/preferences/core/PreferenceDataStoreFactoryTest.kt
@@ -18,6 +18,10 @@
import androidx.datastore.core.DataMigration
import androidx.datastore.core.handlers.ReplaceFileCorruptionHandler
+import java.io.File
+import java.lang.IllegalStateException
+import kotlin.test.assertEquals
+import kotlin.test.assertFailsWith
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.ObsoleteCoroutinesApi
import kotlinx.coroutines.flow.first
@@ -28,10 +32,6 @@
import org.junit.Rule
import org.junit.Test
import org.junit.rules.TemporaryFolder
-import java.io.File
-import java.lang.IllegalStateException
-import kotlin.test.assertEquals
-import kotlin.test.assertFailsWith
@ObsoleteCoroutinesApi
@kotlinx.coroutines.ExperimentalCoroutinesApi
diff --git a/datastore/datastore-preferences-core/src/jvmTest/kotlin/androidx/datastore/preferences/core/PreferencesSerializerJavaTest.kt b/datastore/datastore-preferences-core/src/jvmTest/kotlin/androidx/datastore/preferences/core/PreferencesSerializerJavaTest.kt
index eed8f1f..74fb405 100644
--- a/datastore/datastore-preferences-core/src/jvmTest/kotlin/androidx/datastore/preferences/core/PreferencesSerializerJavaTest.kt
+++ b/datastore/datastore-preferences-core/src/jvmTest/kotlin/androidx/datastore/preferences/core/PreferencesSerializerJavaTest.kt
@@ -20,13 +20,13 @@
import androidx.datastore.OkioTestIO
import androidx.datastore.core.CorruptionException
import androidx.datastore.core.okio.OkioSerializer
-import kotlinx.coroutines.test.runTest
-import kotlin.test.assertEquals
-import kotlin.test.assertFailsWith
import kotlin.test.BeforeTest
import kotlin.test.Test
+import kotlin.test.assertEquals
+import kotlin.test.assertFailsWith
import kotlin.test.assertTrue
import kotlinx.coroutines.test.TestScope
+import kotlinx.coroutines.test.runTest
import okio.FileSystem
@kotlinx.coroutines.ExperimentalCoroutinesApi
diff --git a/datastore/datastore-preferences-core/src/nativeTest/kotlin/androidx/datastore/preferences/core/PreferenceDataStoreFactoryNativeTest.kt b/datastore/datastore-preferences-core/src/nativeTest/kotlin/androidx/datastore/preferences/core/PreferenceDataStoreFactoryNativeTest.kt
index a0a60f2..145b556 100644
--- a/datastore/datastore-preferences-core/src/nativeTest/kotlin/androidx/datastore/preferences/core/PreferenceDataStoreFactoryNativeTest.kt
+++ b/datastore/datastore-preferences-core/src/nativeTest/kotlin/androidx/datastore/preferences/core/PreferenceDataStoreFactoryNativeTest.kt
@@ -19,15 +19,15 @@
import androidx.datastore.OkioTestIO
import androidx.datastore.core.DataMigration
import androidx.datastore.core.handlers.ReplaceFileCorruptionHandler
+import kotlin.test.BeforeTest
+import kotlin.test.Test
+import kotlin.test.assertEquals
+import kotlin.test.assertFailsWith
+import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.runTest
-import kotlin.test.assertEquals
-import kotlin.test.assertFailsWith
-import kotlin.test.BeforeTest
-import kotlin.test.Test
-import kotlinx.coroutines.ExperimentalCoroutinesApi
import okio.FileSystem
import okio.Path
import okio.Path.Companion.toPath
diff --git a/datastore/datastore-preferences-proto/build.gradle b/datastore/datastore-preferences-proto/build.gradle
index 258630b..f599a23 100644
--- a/datastore/datastore-preferences-proto/build.gradle
+++ b/datastore/datastore-preferences-proto/build.gradle
@@ -73,7 +73,7 @@
artifacts.add(jarjarConf.name, preferencesProtoJarJarTask.flatMap { it.archiveFile })
androidx {
- name = "Android Preferences DataStore Proto"
+ name = "Preferences DataStore Proto"
publish = Publish.NONE
inceptionYear = "2020"
description = "Jarjar the generated proto and proto-lite dependency for use by " +
diff --git a/datastore/datastore-preferences-rxjava2/api/current.txt b/datastore/datastore-preferences-rxjava2/api/current.txt
index 66b2ceb..4a1028c 100644
--- a/datastore/datastore-preferences-rxjava2/api/current.txt
+++ b/datastore/datastore-preferences-rxjava2/api/current.txt
@@ -2,8 +2,8 @@
package androidx.datastore.preferences.rxjava2 {
public final class RxPreferenceDataStoreBuilder {
- ctor public RxPreferenceDataStoreBuilder(java.util.concurrent.Callable<java.io.File> produceFile);
ctor public RxPreferenceDataStoreBuilder(android.content.Context context, String name);
+ ctor public RxPreferenceDataStoreBuilder(java.util.concurrent.Callable<java.io.File> produceFile);
method public androidx.datastore.preferences.rxjava2.RxPreferenceDataStoreBuilder addDataMigration(androidx.datastore.core.DataMigration<androidx.datastore.preferences.core.Preferences> dataMigration);
method public androidx.datastore.preferences.rxjava2.RxPreferenceDataStoreBuilder addRxDataMigration(androidx.datastore.rxjava2.RxDataMigration<androidx.datastore.preferences.core.Preferences> rxDataMigration);
method public androidx.datastore.rxjava2.RxDataStore<androidx.datastore.preferences.core.Preferences> build();
diff --git a/datastore/datastore-preferences-rxjava2/api/public_plus_experimental_current.txt b/datastore/datastore-preferences-rxjava2/api/public_plus_experimental_current.txt
deleted file mode 100644
index 66b2ceb..0000000
--- a/datastore/datastore-preferences-rxjava2/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-// Signature format: 4.0
-package androidx.datastore.preferences.rxjava2 {
-
- public final class RxPreferenceDataStoreBuilder {
- ctor public RxPreferenceDataStoreBuilder(java.util.concurrent.Callable<java.io.File> produceFile);
- ctor public RxPreferenceDataStoreBuilder(android.content.Context context, String name);
- method public androidx.datastore.preferences.rxjava2.RxPreferenceDataStoreBuilder addDataMigration(androidx.datastore.core.DataMigration<androidx.datastore.preferences.core.Preferences> dataMigration);
- method public androidx.datastore.preferences.rxjava2.RxPreferenceDataStoreBuilder addRxDataMigration(androidx.datastore.rxjava2.RxDataMigration<androidx.datastore.preferences.core.Preferences> rxDataMigration);
- method public androidx.datastore.rxjava2.RxDataStore<androidx.datastore.preferences.core.Preferences> build();
- method public androidx.datastore.preferences.rxjava2.RxPreferenceDataStoreBuilder setCorruptionHandler(androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<androidx.datastore.preferences.core.Preferences> corruptionHandler);
- method public androidx.datastore.preferences.rxjava2.RxPreferenceDataStoreBuilder setIoScheduler(io.reactivex.Scheduler ioScheduler);
- }
-
- public final class RxPreferenceDataStoreDelegateKt {
- method public static kotlin.properties.ReadOnlyProperty<android.content.Context,androidx.datastore.rxjava2.RxDataStore<androidx.datastore.preferences.core.Preferences>> rxPreferencesDataStore(String name, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<androidx.datastore.preferences.core.Preferences>? corruptionHandler, optional kotlin.jvm.functions.Function1<? super android.content.Context,? extends java.util.List<? extends androidx.datastore.core.DataMigration<androidx.datastore.preferences.core.Preferences>>> produceMigrations, optional io.reactivex.Scheduler scheduler);
- }
-
-}
-
diff --git a/datastore/datastore-preferences-rxjava2/api/restricted_current.txt b/datastore/datastore-preferences-rxjava2/api/restricted_current.txt
index 66b2ceb..4a1028c 100644
--- a/datastore/datastore-preferences-rxjava2/api/restricted_current.txt
+++ b/datastore/datastore-preferences-rxjava2/api/restricted_current.txt
@@ -2,8 +2,8 @@
package androidx.datastore.preferences.rxjava2 {
public final class RxPreferenceDataStoreBuilder {
- ctor public RxPreferenceDataStoreBuilder(java.util.concurrent.Callable<java.io.File> produceFile);
ctor public RxPreferenceDataStoreBuilder(android.content.Context context, String name);
+ ctor public RxPreferenceDataStoreBuilder(java.util.concurrent.Callable<java.io.File> produceFile);
method public androidx.datastore.preferences.rxjava2.RxPreferenceDataStoreBuilder addDataMigration(androidx.datastore.core.DataMigration<androidx.datastore.preferences.core.Preferences> dataMigration);
method public androidx.datastore.preferences.rxjava2.RxPreferenceDataStoreBuilder addRxDataMigration(androidx.datastore.rxjava2.RxDataMigration<androidx.datastore.preferences.core.Preferences> rxDataMigration);
method public androidx.datastore.rxjava2.RxDataStore<androidx.datastore.preferences.core.Preferences> build();
diff --git a/datastore/datastore-preferences-rxjava2/build.gradle b/datastore/datastore-preferences-rxjava2/build.gradle
index d58618b..f80ea3d 100644
--- a/datastore/datastore-preferences-rxjava2/build.gradle
+++ b/datastore/datastore-preferences-rxjava2/build.gradle
@@ -56,7 +56,7 @@
}
androidx {
- name = "Android DataStore Core RxJava2 Wrappers"
+ name = "DataStore Preferences RxJava2"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2020"
description = "Android DataStore Core - contains wrappers for using DataStore using RxJava2"
diff --git a/datastore/datastore-preferences-rxjava2/src/androidTest/java/androidx/datastore/preferences/rxjava2/RxPreferenceDataStoreDelegateTest.kt b/datastore/datastore-preferences-rxjava2/src/androidTest/java/androidx/datastore/preferences/rxjava2/RxPreferenceDataStoreDelegateTest.kt
index d307a3a..225374a 100644
--- a/datastore/datastore-preferences-rxjava2/src/androidTest/java/androidx/datastore/preferences/rxjava2/RxPreferenceDataStoreDelegateTest.kt
+++ b/datastore/datastore-preferences-rxjava2/src/androidTest/java/androidx/datastore/preferences/rxjava2/RxPreferenceDataStoreDelegateTest.kt
@@ -26,13 +26,13 @@
import androidx.test.core.app.ApplicationProvider
import com.google.common.truth.Truth.assertThat
import io.reactivex.Single
+import java.io.File
+import java.io.FileOutputStream
import kotlinx.coroutines.ExperimentalCoroutinesApi
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.rules.TemporaryFolder
-import java.io.File
-import java.io.FileOutputStream
val intKey = intPreferencesKey("int_key")
diff --git a/datastore/datastore-preferences-rxjava2/src/main/java/androidx/datastore/preferences/rxjava2/RxPreferenceDataStoreBuilder.kt b/datastore/datastore-preferences-rxjava2/src/main/java/androidx/datastore/preferences/rxjava2/RxPreferenceDataStoreBuilder.kt
index f374b78..f3540b9 100644
--- a/datastore/datastore-preferences-rxjava2/src/main/java/androidx/datastore/preferences/rxjava2/RxPreferenceDataStoreBuilder.kt
+++ b/datastore/datastore-preferences-rxjava2/src/main/java/androidx/datastore/preferences/rxjava2/RxPreferenceDataStoreBuilder.kt
@@ -27,12 +27,12 @@
import androidx.datastore.rxjava2.RxDataStore
import io.reactivex.Scheduler
import io.reactivex.schedulers.Schedulers
+import java.io.File
+import java.util.concurrent.Callable
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.rx2.asCoroutineDispatcher
import kotlinx.coroutines.rx2.await
-import java.io.File
-import java.util.concurrent.Callable
/**
* Builder for a Preferences RxDataStore that works on a single process.
diff --git a/datastore/datastore-preferences-rxjava3/api/current.txt b/datastore/datastore-preferences-rxjava3/api/current.txt
index 4e0b0bf..b11bf51 100644
--- a/datastore/datastore-preferences-rxjava3/api/current.txt
+++ b/datastore/datastore-preferences-rxjava3/api/current.txt
@@ -2,8 +2,8 @@
package androidx.datastore.preferences.rxjava3 {
public final class RxPreferenceDataStoreBuilder {
- ctor public RxPreferenceDataStoreBuilder(java.util.concurrent.Callable<java.io.File> produceFile);
ctor public RxPreferenceDataStoreBuilder(android.content.Context context, String name);
+ ctor public RxPreferenceDataStoreBuilder(java.util.concurrent.Callable<java.io.File> produceFile);
method public androidx.datastore.preferences.rxjava3.RxPreferenceDataStoreBuilder addDataMigration(androidx.datastore.core.DataMigration<androidx.datastore.preferences.core.Preferences> dataMigration);
method public androidx.datastore.preferences.rxjava3.RxPreferenceDataStoreBuilder addRxDataMigration(androidx.datastore.rxjava3.RxDataMigration<androidx.datastore.preferences.core.Preferences> rxDataMigration);
method public androidx.datastore.rxjava3.RxDataStore<androidx.datastore.preferences.core.Preferences> build();
diff --git a/datastore/datastore-preferences-rxjava3/api/public_plus_experimental_current.txt b/datastore/datastore-preferences-rxjava3/api/public_plus_experimental_current.txt
deleted file mode 100644
index 4e0b0bf..0000000
--- a/datastore/datastore-preferences-rxjava3/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-// Signature format: 4.0
-package androidx.datastore.preferences.rxjava3 {
-
- public final class RxPreferenceDataStoreBuilder {
- ctor public RxPreferenceDataStoreBuilder(java.util.concurrent.Callable<java.io.File> produceFile);
- ctor public RxPreferenceDataStoreBuilder(android.content.Context context, String name);
- method public androidx.datastore.preferences.rxjava3.RxPreferenceDataStoreBuilder addDataMigration(androidx.datastore.core.DataMigration<androidx.datastore.preferences.core.Preferences> dataMigration);
- method public androidx.datastore.preferences.rxjava3.RxPreferenceDataStoreBuilder addRxDataMigration(androidx.datastore.rxjava3.RxDataMigration<androidx.datastore.preferences.core.Preferences> rxDataMigration);
- method public androidx.datastore.rxjava3.RxDataStore<androidx.datastore.preferences.core.Preferences> build();
- method public androidx.datastore.preferences.rxjava3.RxPreferenceDataStoreBuilder setCorruptionHandler(androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<androidx.datastore.preferences.core.Preferences> corruptionHandler);
- method public androidx.datastore.preferences.rxjava3.RxPreferenceDataStoreBuilder setIoScheduler(io.reactivex.rxjava3.core.Scheduler ioScheduler);
- }
-
- public final class RxPreferenceDataStoreDelegateKt {
- method public static kotlin.properties.ReadOnlyProperty<android.content.Context,androidx.datastore.rxjava3.RxDataStore<androidx.datastore.preferences.core.Preferences>> rxPreferencesDataStore(String name, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<androidx.datastore.preferences.core.Preferences>? corruptionHandler, optional kotlin.jvm.functions.Function1<? super android.content.Context,? extends java.util.List<? extends androidx.datastore.core.DataMigration<androidx.datastore.preferences.core.Preferences>>> produceMigrations, optional io.reactivex.rxjava3.core.Scheduler scheduler);
- }
-
-}
-
diff --git a/datastore/datastore-preferences-rxjava3/api/restricted_current.txt b/datastore/datastore-preferences-rxjava3/api/restricted_current.txt
index 4e0b0bf..b11bf51 100644
--- a/datastore/datastore-preferences-rxjava3/api/restricted_current.txt
+++ b/datastore/datastore-preferences-rxjava3/api/restricted_current.txt
@@ -2,8 +2,8 @@
package androidx.datastore.preferences.rxjava3 {
public final class RxPreferenceDataStoreBuilder {
- ctor public RxPreferenceDataStoreBuilder(java.util.concurrent.Callable<java.io.File> produceFile);
ctor public RxPreferenceDataStoreBuilder(android.content.Context context, String name);
+ ctor public RxPreferenceDataStoreBuilder(java.util.concurrent.Callable<java.io.File> produceFile);
method public androidx.datastore.preferences.rxjava3.RxPreferenceDataStoreBuilder addDataMigration(androidx.datastore.core.DataMigration<androidx.datastore.preferences.core.Preferences> dataMigration);
method public androidx.datastore.preferences.rxjava3.RxPreferenceDataStoreBuilder addRxDataMigration(androidx.datastore.rxjava3.RxDataMigration<androidx.datastore.preferences.core.Preferences> rxDataMigration);
method public androidx.datastore.rxjava3.RxDataStore<androidx.datastore.preferences.core.Preferences> build();
diff --git a/datastore/datastore-preferences-rxjava3/build.gradle b/datastore/datastore-preferences-rxjava3/build.gradle
index 8461448..7a06c51 100644
--- a/datastore/datastore-preferences-rxjava3/build.gradle
+++ b/datastore/datastore-preferences-rxjava3/build.gradle
@@ -56,7 +56,7 @@
}
androidx {
- name = "Android DataStore Core RxJava2 Wrappers"
+ name = "DataStore Preferences RxJava3"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2020"
description = "Android DataStore Core - contains wrappers for using DataStore using RxJava2"
diff --git a/datastore/datastore-preferences-rxjava3/src/androidTest/java/androidx/datastore/preferences/rxjava3/RxPreferenceDataStoreDelegateTest.kt b/datastore/datastore-preferences-rxjava3/src/androidTest/java/androidx/datastore/preferences/rxjava3/RxPreferenceDataStoreDelegateTest.kt
index d162a6f..74e85ff 100644
--- a/datastore/datastore-preferences-rxjava3/src/androidTest/java/androidx/datastore/preferences/rxjava3/RxPreferenceDataStoreDelegateTest.kt
+++ b/datastore/datastore-preferences-rxjava3/src/androidTest/java/androidx/datastore/preferences/rxjava3/RxPreferenceDataStoreDelegateTest.kt
@@ -26,13 +26,13 @@
import androidx.test.core.app.ApplicationProvider
import com.google.common.truth.Truth.assertThat
import io.reactivex.rxjava3.core.Single
+import java.io.File
+import java.io.FileOutputStream
import kotlinx.coroutines.ExperimentalCoroutinesApi
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.rules.TemporaryFolder
-import java.io.File
-import java.io.FileOutputStream
val intKey = intPreferencesKey("int_key")
diff --git a/datastore/datastore-preferences-rxjava3/src/main/java/androidx/datastore/preferences/rxjava3/RxPreferenceDataStoreBuilder.kt b/datastore/datastore-preferences-rxjava3/src/main/java/androidx/datastore/preferences/rxjava3/RxPreferenceDataStoreBuilder.kt
index a9cf37a..57bef8b 100644
--- a/datastore/datastore-preferences-rxjava3/src/main/java/androidx/datastore/preferences/rxjava3/RxPreferenceDataStoreBuilder.kt
+++ b/datastore/datastore-preferences-rxjava3/src/main/java/androidx/datastore/preferences/rxjava3/RxPreferenceDataStoreBuilder.kt
@@ -27,12 +27,12 @@
import androidx.datastore.rxjava3.RxDataStore
import io.reactivex.rxjava3.core.Scheduler
import io.reactivex.rxjava3.schedulers.Schedulers
+import java.io.File
+import java.util.concurrent.Callable
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.rx3.asCoroutineDispatcher
import kotlinx.coroutines.rx3.await
-import java.io.File
-import java.util.concurrent.Callable
/**
* Builder for a Preferences RxDataStore that works on a single process.
diff --git a/datastore/datastore-preferences/api/current.txt b/datastore/datastore-preferences/api/current.txt
index 722515f..3ee7f63 100644
--- a/datastore/datastore-preferences/api/current.txt
+++ b/datastore/datastore-preferences/api/current.txt
@@ -10,10 +10,10 @@
}
public final class SharedPreferencesMigrationKt {
- method public static androidx.datastore.migrations.SharedPreferencesMigration<androidx.datastore.preferences.core.Preferences> SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, optional java.util.Set<java.lang.String> keysToMigrate);
- method public static androidx.datastore.migrations.SharedPreferencesMigration<androidx.datastore.preferences.core.Preferences> SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences);
- method public static androidx.datastore.migrations.SharedPreferencesMigration<androidx.datastore.preferences.core.Preferences> SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, optional java.util.Set<java.lang.String> keysToMigrate);
method public static androidx.datastore.migrations.SharedPreferencesMigration<androidx.datastore.preferences.core.Preferences> SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName);
+ method public static androidx.datastore.migrations.SharedPreferencesMigration<androidx.datastore.preferences.core.Preferences> SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, optional java.util.Set<java.lang.String> keysToMigrate);
+ method public static androidx.datastore.migrations.SharedPreferencesMigration<androidx.datastore.preferences.core.Preferences> SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences);
+ method public static androidx.datastore.migrations.SharedPreferencesMigration<androidx.datastore.preferences.core.Preferences> SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, optional java.util.Set<java.lang.String> keysToMigrate);
}
}
diff --git a/datastore/datastore-preferences/api/public_plus_experimental_current.txt b/datastore/datastore-preferences/api/public_plus_experimental_current.txt
deleted file mode 100644
index 722515f..0000000
--- a/datastore/datastore-preferences/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-// Signature format: 4.0
-package androidx.datastore.preferences {
-
- public final class PreferenceDataStoreDelegateKt {
- method public static kotlin.properties.ReadOnlyProperty<android.content.Context,androidx.datastore.core.DataStore<androidx.datastore.preferences.core.Preferences>> preferencesDataStore(String name, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<androidx.datastore.preferences.core.Preferences>? corruptionHandler, optional kotlin.jvm.functions.Function1<? super android.content.Context,? extends java.util.List<? extends androidx.datastore.core.DataMigration<androidx.datastore.preferences.core.Preferences>>> produceMigrations, optional kotlinx.coroutines.CoroutineScope scope);
- }
-
- public final class PreferenceDataStoreFile {
- method public static java.io.File preferencesDataStoreFile(android.content.Context, String name);
- }
-
- public final class SharedPreferencesMigrationKt {
- method public static androidx.datastore.migrations.SharedPreferencesMigration<androidx.datastore.preferences.core.Preferences> SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, optional java.util.Set<java.lang.String> keysToMigrate);
- method public static androidx.datastore.migrations.SharedPreferencesMigration<androidx.datastore.preferences.core.Preferences> SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences);
- method public static androidx.datastore.migrations.SharedPreferencesMigration<androidx.datastore.preferences.core.Preferences> SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, optional java.util.Set<java.lang.String> keysToMigrate);
- method public static androidx.datastore.migrations.SharedPreferencesMigration<androidx.datastore.preferences.core.Preferences> SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName);
- }
-
-}
-
diff --git a/datastore/datastore-preferences/api/restricted_current.txt b/datastore/datastore-preferences/api/restricted_current.txt
index 722515f..3ee7f63 100644
--- a/datastore/datastore-preferences/api/restricted_current.txt
+++ b/datastore/datastore-preferences/api/restricted_current.txt
@@ -10,10 +10,10 @@
}
public final class SharedPreferencesMigrationKt {
- method public static androidx.datastore.migrations.SharedPreferencesMigration<androidx.datastore.preferences.core.Preferences> SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, optional java.util.Set<java.lang.String> keysToMigrate);
- method public static androidx.datastore.migrations.SharedPreferencesMigration<androidx.datastore.preferences.core.Preferences> SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences);
- method public static androidx.datastore.migrations.SharedPreferencesMigration<androidx.datastore.preferences.core.Preferences> SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, optional java.util.Set<java.lang.String> keysToMigrate);
method public static androidx.datastore.migrations.SharedPreferencesMigration<androidx.datastore.preferences.core.Preferences> SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName);
+ method public static androidx.datastore.migrations.SharedPreferencesMigration<androidx.datastore.preferences.core.Preferences> SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, optional java.util.Set<java.lang.String> keysToMigrate);
+ method public static androidx.datastore.migrations.SharedPreferencesMigration<androidx.datastore.preferences.core.Preferences> SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences);
+ method public static androidx.datastore.migrations.SharedPreferencesMigration<androidx.datastore.preferences.core.Preferences> SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, optional java.util.Set<java.lang.String> keysToMigrate);
}
}
diff --git a/datastore/datastore-preferences/build.gradle b/datastore/datastore-preferences/build.gradle
index 37dfd741e..0bbbbe6 100644
--- a/datastore/datastore-preferences/build.gradle
+++ b/datastore/datastore-preferences/build.gradle
@@ -77,7 +77,7 @@
androidx {
- name = "Android Preferences DataStore"
+ name = "Preferences DataStore"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2020"
description = "Android Preferences DataStore"
diff --git a/datastore/datastore-preferences/src/androidAndroidTest/kotlin/androidx/datastore/preferences/PreferenceDataStoreDelegateTest.kt b/datastore/datastore-preferences/src/androidAndroidTest/kotlin/androidx/datastore/preferences/PreferenceDataStoreDelegateTest.kt
index cce1184..031ec48 100644
--- a/datastore/datastore-preferences/src/androidAndroidTest/kotlin/androidx/datastore/preferences/PreferenceDataStoreDelegateTest.kt
+++ b/datastore/datastore-preferences/src/androidAndroidTest/kotlin/androidx/datastore/preferences/PreferenceDataStoreDelegateTest.kt
@@ -25,6 +25,7 @@
import androidx.datastore.preferences.core.preferencesOf
import androidx.datastore.preferences.core.stringPreferencesKey
import androidx.test.core.app.ApplicationProvider
+import kotlin.test.assertEquals
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.ObsoleteCoroutinesApi
import kotlinx.coroutines.flow.first
@@ -35,7 +36,6 @@
import org.junit.Rule
import org.junit.Test
import org.junit.rules.TemporaryFolder
-import kotlin.test.assertEquals
val stringKey = stringPreferencesKey("key1")
val booleanKey = booleanPreferencesKey("key2")
diff --git a/datastore/datastore-preferences/src/androidAndroidTest/kotlin/androidx/datastore/preferences/PreferenceDataStoreFileTest.kt b/datastore/datastore-preferences/src/androidAndroidTest/kotlin/androidx/datastore/preferences/PreferenceDataStoreFileTest.kt
index 55ac285..78989fa 100644
--- a/datastore/datastore-preferences/src/androidAndroidTest/kotlin/androidx/datastore/preferences/PreferenceDataStoreFileTest.kt
+++ b/datastore/datastore-preferences/src/androidAndroidTest/kotlin/androidx/datastore/preferences/PreferenceDataStoreFileTest.kt
@@ -18,9 +18,9 @@
import android.content.Context
import androidx.test.core.app.ApplicationProvider
-import org.junit.Test
import java.io.File
import kotlin.test.assertEquals
+import org.junit.Test
public class PreferenceDataStoreFileTest {
@Test
diff --git a/datastore/datastore-preferences/src/androidAndroidTest/kotlin/androidx/datastore/preferences/SharedPreferencesToPreferencesTest.kt b/datastore/datastore-preferences/src/androidAndroidTest/kotlin/androidx/datastore/preferences/SharedPreferencesToPreferencesTest.kt
index 21a14d2..76f1db1 100644
--- a/datastore/datastore-preferences/src/androidAndroidTest/kotlin/androidx/datastore/preferences/SharedPreferencesToPreferencesTest.kt
+++ b/datastore/datastore-preferences/src/androidAndroidTest/kotlin/androidx/datastore/preferences/SharedPreferencesToPreferencesTest.kt
@@ -29,19 +29,19 @@
import androidx.datastore.preferences.core.stringPreferencesKey
import androidx.test.core.app.ApplicationProvider
import androidx.test.filters.MediumTest
-import kotlinx.coroutines.flow.first
-import kotlinx.coroutines.runBlocking
-import kotlinx.coroutines.test.runTest
-import kotlinx.coroutines.test.TestScope
-import kotlinx.coroutines.test.UnconfinedTestDispatcher
-import org.junit.Before
-import org.junit.Rule
-import org.junit.Test
-import org.junit.rules.TemporaryFolder
import java.io.File
import kotlin.test.assertEquals
import kotlin.test.assertFalse
import kotlin.test.assertTrue
+import kotlinx.coroutines.flow.first
+import kotlinx.coroutines.runBlocking
+import kotlinx.coroutines.test.TestScope
+import kotlinx.coroutines.test.UnconfinedTestDispatcher
+import kotlinx.coroutines.test.runTest
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.rules.TemporaryFolder
private val sharedPrefsName = "shared_prefs_name"
diff --git a/datastore/datastore-preferences/src/androidMain/kotlin/androidx/datastore/preferences/PreferenceDataStoreDelegate.kt b/datastore/datastore-preferences/src/androidMain/kotlin/androidx/datastore/preferences/PreferenceDataStoreDelegate.kt
index 9d15f5a..7532736 100644
--- a/datastore/datastore-preferences/src/androidMain/kotlin/androidx/datastore/preferences/PreferenceDataStoreDelegate.kt
+++ b/datastore/datastore-preferences/src/androidMain/kotlin/androidx/datastore/preferences/PreferenceDataStoreDelegate.kt
@@ -25,11 +25,11 @@
import androidx.datastore.core.handlers.ReplaceFileCorruptionHandler
import androidx.datastore.preferences.core.PreferenceDataStoreFactory
import androidx.datastore.preferences.core.Preferences
+import kotlin.properties.ReadOnlyProperty
+import kotlin.reflect.KProperty
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
-import kotlin.properties.ReadOnlyProperty
-import kotlin.reflect.KProperty
/**
* Creates a property delegate for a single process DataStore. This should only be called once
diff --git a/datastore/datastore-preferences/src/androidMain/kotlin/androidx/datastore/preferences/SharedPreferencesMigration.kt b/datastore/datastore-preferences/src/androidMain/kotlin/androidx/datastore/preferences/SharedPreferencesMigration.kt
index 635df8e..c7e8c2a 100644
--- a/datastore/datastore-preferences/src/androidMain/kotlin/androidx/datastore/preferences/SharedPreferencesMigration.kt
+++ b/datastore/datastore-preferences/src/androidMain/kotlin/androidx/datastore/preferences/SharedPreferencesMigration.kt
@@ -18,8 +18,8 @@
import android.content.Context
import android.content.SharedPreferences
-import androidx.datastore.migrations.SharedPreferencesView
import androidx.datastore.migrations.SharedPreferencesMigration
+import androidx.datastore.migrations.SharedPreferencesView
import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.core.booleanPreferencesKey
import androidx.datastore.preferences.core.floatPreferencesKey
diff --git a/datastore/datastore-proto/build.gradle b/datastore/datastore-proto/build.gradle
index a3680b0..658823c 100644
--- a/datastore/datastore-proto/build.gradle
+++ b/datastore/datastore-proto/build.gradle
@@ -52,7 +52,7 @@
}
androidx {
- name = "Android Proto DataStore"
+ name = "Proto DataStore"
publish = Publish.NONE
inceptionYear = "2020"
description = "Android Proto DataStore"
diff --git a/datastore/datastore-proto/src/test/java/androidx/datastore/protos/ProtoSerializerTest.kt b/datastore/datastore-proto/src/test/java/androidx/datastore/protos/ProtoSerializerTest.kt
index 90d38c7..f093509 100644
--- a/datastore/datastore-proto/src/test/java/androidx/datastore/protos/ProtoSerializerTest.kt
+++ b/datastore/datastore-proto/src/test/java/androidx/datastore/protos/ProtoSerializerTest.kt
@@ -17,16 +17,16 @@
package androidx.datastore.protos
import androidx.datastore.core.CorruptionException
-import org.junit.Test
-import androidx.testing.TestMessageProto.FooProto
import androidx.testing.TestMessageProto.ExtendableProto
import androidx.testing.TestMessageProto.ExtensionProto
+import androidx.testing.TestMessageProto.FooProto
import androidx.testutils.assertThrows
import com.google.common.truth.Truth.assertThat
import com.google.protobuf.ExtensionRegistryLite
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runTest
import org.junit.Rule
+import org.junit.Test
import org.junit.rules.TemporaryFolder
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
diff --git a/datastore/datastore-rxjava2/api/current.txt b/datastore/datastore-rxjava2/api/current.txt
index 0f8fead..96e4a6c 100644
--- a/datastore/datastore-rxjava2/api/current.txt
+++ b/datastore/datastore-rxjava2/api/current.txt
@@ -8,14 +8,16 @@
}
public final class RxDataStore<T> implements io.reactivex.disposables.Disposable {
+ method @kotlinx.coroutines.ExperimentalCoroutinesApi public io.reactivex.Flowable<T> data();
method public void dispose();
method public boolean isDisposed();
method public io.reactivex.Completable shutdownComplete();
+ method @kotlinx.coroutines.ExperimentalCoroutinesApi public io.reactivex.Single<T> updateDataAsync(io.reactivex.functions.Function<T,io.reactivex.Single<T>> transform);
}
public final class RxDataStoreBuilder<T> {
- ctor public RxDataStoreBuilder(java.util.concurrent.Callable<java.io.File> produceFile, androidx.datastore.core.Serializer<T> serializer);
ctor public RxDataStoreBuilder(android.content.Context context, String fileName, androidx.datastore.core.Serializer<T> serializer);
+ ctor public RxDataStoreBuilder(java.util.concurrent.Callable<java.io.File> produceFile, androidx.datastore.core.Serializer<T> serializer);
method public androidx.datastore.rxjava2.RxDataStoreBuilder<T> addDataMigration(androidx.datastore.core.DataMigration<T> dataMigration);
method public androidx.datastore.rxjava2.RxDataStoreBuilder<T> addRxDataMigration(androidx.datastore.rxjava2.RxDataMigration<T> rxDataMigration);
method public androidx.datastore.rxjava2.RxDataStore<T> build();
diff --git a/datastore/datastore-rxjava2/api/public_plus_experimental_current.txt b/datastore/datastore-rxjava2/api/public_plus_experimental_current.txt
deleted file mode 100644
index 50486f6..0000000
--- a/datastore/datastore-rxjava2/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-// Signature format: 4.0
-package androidx.datastore.rxjava2 {
-
- public interface RxDataMigration<T> {
- method public io.reactivex.Completable cleanUp();
- method public io.reactivex.Single<T!> migrate(T?);
- method public io.reactivex.Single<java.lang.Boolean!> shouldMigrate(T?);
- }
-
- public final class RxDataStore<T> implements io.reactivex.disposables.Disposable {
- method @kotlinx.coroutines.ExperimentalCoroutinesApi public io.reactivex.Flowable<T> data();
- method public void dispose();
- method public boolean isDisposed();
- method public io.reactivex.Completable shutdownComplete();
- method @kotlinx.coroutines.ExperimentalCoroutinesApi public io.reactivex.Single<T> updateDataAsync(io.reactivex.functions.Function<T,io.reactivex.Single<T>> transform);
- }
-
- public final class RxDataStoreBuilder<T> {
- ctor public RxDataStoreBuilder(java.util.concurrent.Callable<java.io.File> produceFile, androidx.datastore.core.Serializer<T> serializer);
- ctor public RxDataStoreBuilder(android.content.Context context, String fileName, androidx.datastore.core.Serializer<T> serializer);
- method public androidx.datastore.rxjava2.RxDataStoreBuilder<T> addDataMigration(androidx.datastore.core.DataMigration<T> dataMigration);
- method public androidx.datastore.rxjava2.RxDataStoreBuilder<T> addRxDataMigration(androidx.datastore.rxjava2.RxDataMigration<T> rxDataMigration);
- method public androidx.datastore.rxjava2.RxDataStore<T> build();
- method public androidx.datastore.rxjava2.RxDataStoreBuilder<T> setCorruptionHandler(androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T> corruptionHandler);
- method public androidx.datastore.rxjava2.RxDataStoreBuilder<T> setIoScheduler(io.reactivex.Scheduler ioScheduler);
- }
-
- public final class RxDataStoreDelegateKt {
- method public static <T> kotlin.properties.ReadOnlyProperty<android.content.Context,androidx.datastore.rxjava2.RxDataStore<T>> rxDataStore(String fileName, androidx.datastore.core.Serializer<T> serializer, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, optional kotlin.jvm.functions.Function1<? super android.content.Context,? extends java.util.List<? extends androidx.datastore.core.DataMigration<T>>> produceMigrations, optional io.reactivex.Scheduler scheduler);
- }
-
- @kotlin.jvm.JvmDefaultWithCompatibility public interface RxSharedPreferencesMigration<T> {
- method public io.reactivex.Single<T> migrate(androidx.datastore.migrations.SharedPreferencesView sharedPreferencesView, T currentData);
- method public default io.reactivex.Single<java.lang.Boolean> shouldMigrate(T currentData);
- }
-
- public final class RxSharedPreferencesMigrationBuilder<T> {
- ctor public RxSharedPreferencesMigrationBuilder(android.content.Context context, String sharedPreferencesName, androidx.datastore.rxjava2.RxSharedPreferencesMigration<T> rxSharedPreferencesMigration);
- method public androidx.datastore.core.DataMigration<T> build();
- method public androidx.datastore.rxjava2.RxSharedPreferencesMigrationBuilder<T> setKeysToMigrate(java.lang.String... keys);
- }
-
-}
-
diff --git a/datastore/datastore-rxjava2/api/restricted_current.txt b/datastore/datastore-rxjava2/api/restricted_current.txt
index 0f8fead..96e4a6c 100644
--- a/datastore/datastore-rxjava2/api/restricted_current.txt
+++ b/datastore/datastore-rxjava2/api/restricted_current.txt
@@ -8,14 +8,16 @@
}
public final class RxDataStore<T> implements io.reactivex.disposables.Disposable {
+ method @kotlinx.coroutines.ExperimentalCoroutinesApi public io.reactivex.Flowable<T> data();
method public void dispose();
method public boolean isDisposed();
method public io.reactivex.Completable shutdownComplete();
+ method @kotlinx.coroutines.ExperimentalCoroutinesApi public io.reactivex.Single<T> updateDataAsync(io.reactivex.functions.Function<T,io.reactivex.Single<T>> transform);
}
public final class RxDataStoreBuilder<T> {
- ctor public RxDataStoreBuilder(java.util.concurrent.Callable<java.io.File> produceFile, androidx.datastore.core.Serializer<T> serializer);
ctor public RxDataStoreBuilder(android.content.Context context, String fileName, androidx.datastore.core.Serializer<T> serializer);
+ ctor public RxDataStoreBuilder(java.util.concurrent.Callable<java.io.File> produceFile, androidx.datastore.core.Serializer<T> serializer);
method public androidx.datastore.rxjava2.RxDataStoreBuilder<T> addDataMigration(androidx.datastore.core.DataMigration<T> dataMigration);
method public androidx.datastore.rxjava2.RxDataStoreBuilder<T> addRxDataMigration(androidx.datastore.rxjava2.RxDataMigration<T> rxDataMigration);
method public androidx.datastore.rxjava2.RxDataStore<T> build();
diff --git a/datastore/datastore-rxjava2/build.gradle b/datastore/datastore-rxjava2/build.gradle
index 20edf8fb..f2354c5 100644
--- a/datastore/datastore-rxjava2/build.gradle
+++ b/datastore/datastore-rxjava2/build.gradle
@@ -52,7 +52,7 @@
}
androidx {
- name = "Android DataStore Core RxJava2 Wrappers"
+ name = "DataStore RxJava2"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2020"
description = "Android DataStore Core - contains wrappers for using DataStore using RxJava2"
diff --git a/datastore/datastore-rxjava2/src/androidTest/java/androidx/datastore/rxjava2/RxDataStoreDelegateTest.kt b/datastore/datastore-rxjava2/src/androidTest/java/androidx/datastore/rxjava2/RxDataStoreDelegateTest.kt
index f0ec624..fb05a48 100644
--- a/datastore/datastore-rxjava2/src/androidTest/java/androidx/datastore/rxjava2/RxDataStoreDelegateTest.kt
+++ b/datastore/datastore-rxjava2/src/androidTest/java/androidx/datastore/rxjava2/RxDataStoreDelegateTest.kt
@@ -22,13 +22,13 @@
import androidx.test.core.app.ApplicationProvider
import com.google.common.truth.Truth.assertThat
import io.reactivex.Single
+import java.io.File
+import java.io.FileOutputStream
import kotlinx.coroutines.ExperimentalCoroutinesApi
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.rules.TemporaryFolder
-import java.io.File
-import java.io.FileOutputStream
val Context.rxDataStore by rxDataStore("file1", TestingSerializer())
diff --git a/datastore/datastore-rxjava2/src/main/java/androidx/datastore/rxjava2/RxDataStore.kt b/datastore/datastore-rxjava2/src/main/java/androidx/datastore/rxjava2/RxDataStore.kt
index dfe8026..468b761 100644
--- a/datastore/datastore-rxjava2/src/main/java/androidx/datastore/rxjava2/RxDataStore.kt
+++ b/datastore/datastore-rxjava2/src/main/java/androidx/datastore/rxjava2/RxDataStore.kt
@@ -21,16 +21,16 @@
import io.reactivex.Flowable
import io.reactivex.Single
import io.reactivex.disposables.Disposable
+import io.reactivex.functions.Function
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.async
+import kotlinx.coroutines.job
import kotlinx.coroutines.rx2.asFlowable
import kotlinx.coroutines.rx2.asSingle
import kotlinx.coroutines.rx2.await
-import io.reactivex.functions.Function
-import kotlinx.coroutines.Job
-import kotlinx.coroutines.SupervisorJob
-import kotlinx.coroutines.job
import kotlinx.coroutines.rx2.rxCompletable
/**
diff --git a/datastore/datastore-rxjava2/src/main/java/androidx/datastore/rxjava2/RxDataStoreBuilder.kt b/datastore/datastore-rxjava2/src/main/java/androidx/datastore/rxjava2/RxDataStoreBuilder.kt
index 1dee9d1..cf20f5e 100644
--- a/datastore/datastore-rxjava2/src/main/java/androidx/datastore/rxjava2/RxDataStoreBuilder.kt
+++ b/datastore/datastore-rxjava2/src/main/java/androidx/datastore/rxjava2/RxDataStoreBuilder.kt
@@ -25,12 +25,12 @@
import androidx.datastore.dataStoreFile
import io.reactivex.Scheduler
import io.reactivex.schedulers.Schedulers
+import java.io.File
+import java.util.concurrent.Callable
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.rx2.asCoroutineDispatcher
import kotlinx.coroutines.rx2.await
-import java.io.File
-import java.util.concurrent.Callable
/**
* Builder class for an RxDataStore that works on a single process.
diff --git a/datastore/datastore-rxjava3/api/current.txt b/datastore/datastore-rxjava3/api/current.txt
index ae8528e..df4df15 100644
--- a/datastore/datastore-rxjava3/api/current.txt
+++ b/datastore/datastore-rxjava3/api/current.txt
@@ -8,14 +8,16 @@
}
public final class RxDataStore<T> implements io.reactivex.rxjava3.disposables.Disposable {
+ method @kotlinx.coroutines.ExperimentalCoroutinesApi public io.reactivex.rxjava3.core.Flowable<T> data();
method public void dispose();
method public boolean isDisposed();
method public io.reactivex.rxjava3.core.Completable shutdownComplete();
+ method @kotlinx.coroutines.ExperimentalCoroutinesApi public io.reactivex.rxjava3.core.Single<T> updateDataAsync(io.reactivex.rxjava3.functions.Function<T,io.reactivex.rxjava3.core.Single<T>> transform);
}
public final class RxDataStoreBuilder<T> {
- ctor public RxDataStoreBuilder(java.util.concurrent.Callable<java.io.File> produceFile, androidx.datastore.core.Serializer<T> serializer);
ctor public RxDataStoreBuilder(android.content.Context context, String fileName, androidx.datastore.core.Serializer<T> serializer);
+ ctor public RxDataStoreBuilder(java.util.concurrent.Callable<java.io.File> produceFile, androidx.datastore.core.Serializer<T> serializer);
method public androidx.datastore.rxjava3.RxDataStoreBuilder<T> addDataMigration(androidx.datastore.core.DataMigration<T> dataMigration);
method public androidx.datastore.rxjava3.RxDataStoreBuilder<T> addRxDataMigration(androidx.datastore.rxjava3.RxDataMigration<T> rxDataMigration);
method public androidx.datastore.rxjava3.RxDataStore<T> build();
diff --git a/datastore/datastore-rxjava3/api/public_plus_experimental_current.txt b/datastore/datastore-rxjava3/api/public_plus_experimental_current.txt
deleted file mode 100644
index c451a45..0000000
--- a/datastore/datastore-rxjava3/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-// Signature format: 4.0
-package androidx.datastore.rxjava3 {
-
- public interface RxDataMigration<T> {
- method public io.reactivex.rxjava3.core.Completable cleanUp();
- method public io.reactivex.rxjava3.core.Single<T!> migrate(T?);
- method public io.reactivex.rxjava3.core.Single<java.lang.Boolean!> shouldMigrate(T?);
- }
-
- public final class RxDataStore<T> implements io.reactivex.rxjava3.disposables.Disposable {
- method @kotlinx.coroutines.ExperimentalCoroutinesApi public io.reactivex.rxjava3.core.Flowable<T> data();
- method public void dispose();
- method public boolean isDisposed();
- method public io.reactivex.rxjava3.core.Completable shutdownComplete();
- method @kotlinx.coroutines.ExperimentalCoroutinesApi public io.reactivex.rxjava3.core.Single<T> updateDataAsync(io.reactivex.rxjava3.functions.Function<T,io.reactivex.rxjava3.core.Single<T>> transform);
- }
-
- public final class RxDataStoreBuilder<T> {
- ctor public RxDataStoreBuilder(java.util.concurrent.Callable<java.io.File> produceFile, androidx.datastore.core.Serializer<T> serializer);
- ctor public RxDataStoreBuilder(android.content.Context context, String fileName, androidx.datastore.core.Serializer<T> serializer);
- method public androidx.datastore.rxjava3.RxDataStoreBuilder<T> addDataMigration(androidx.datastore.core.DataMigration<T> dataMigration);
- method public androidx.datastore.rxjava3.RxDataStoreBuilder<T> addRxDataMigration(androidx.datastore.rxjava3.RxDataMigration<T> rxDataMigration);
- method public androidx.datastore.rxjava3.RxDataStore<T> build();
- method public androidx.datastore.rxjava3.RxDataStoreBuilder<T> setCorruptionHandler(androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T> corruptionHandler);
- method public androidx.datastore.rxjava3.RxDataStoreBuilder<T> setIoScheduler(io.reactivex.rxjava3.core.Scheduler ioScheduler);
- }
-
- public final class RxDataStoreDelegateKt {
- method public static <T> kotlin.properties.ReadOnlyProperty<android.content.Context,androidx.datastore.rxjava3.RxDataStore<T>> rxDataStore(String fileName, androidx.datastore.core.Serializer<T> serializer, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, optional kotlin.jvm.functions.Function1<? super android.content.Context,? extends java.util.List<? extends androidx.datastore.core.DataMigration<T>>> produceMigrations, optional io.reactivex.rxjava3.core.Scheduler scheduler);
- }
-
- @kotlin.jvm.JvmDefaultWithCompatibility public interface RxSharedPreferencesMigration<T> {
- method public io.reactivex.rxjava3.core.Single<T> migrate(androidx.datastore.migrations.SharedPreferencesView sharedPreferencesView, T currentData);
- method public default io.reactivex.rxjava3.core.Single<java.lang.Boolean> shouldMigrate(T currentData);
- }
-
- public final class RxSharedPreferencesMigrationBuilder<T> {
- ctor public RxSharedPreferencesMigrationBuilder(android.content.Context context, String sharedPreferencesName, androidx.datastore.rxjava3.RxSharedPreferencesMigration<T> rxSharedPreferencesMigration);
- method public androidx.datastore.core.DataMigration<T> build();
- method public androidx.datastore.rxjava3.RxSharedPreferencesMigrationBuilder<T> setKeysToMigrate(java.lang.String... keys);
- }
-
-}
-
diff --git a/datastore/datastore-rxjava3/api/restricted_current.txt b/datastore/datastore-rxjava3/api/restricted_current.txt
index ae8528e..df4df15 100644
--- a/datastore/datastore-rxjava3/api/restricted_current.txt
+++ b/datastore/datastore-rxjava3/api/restricted_current.txt
@@ -8,14 +8,16 @@
}
public final class RxDataStore<T> implements io.reactivex.rxjava3.disposables.Disposable {
+ method @kotlinx.coroutines.ExperimentalCoroutinesApi public io.reactivex.rxjava3.core.Flowable<T> data();
method public void dispose();
method public boolean isDisposed();
method public io.reactivex.rxjava3.core.Completable shutdownComplete();
+ method @kotlinx.coroutines.ExperimentalCoroutinesApi public io.reactivex.rxjava3.core.Single<T> updateDataAsync(io.reactivex.rxjava3.functions.Function<T,io.reactivex.rxjava3.core.Single<T>> transform);
}
public final class RxDataStoreBuilder<T> {
- ctor public RxDataStoreBuilder(java.util.concurrent.Callable<java.io.File> produceFile, androidx.datastore.core.Serializer<T> serializer);
ctor public RxDataStoreBuilder(android.content.Context context, String fileName, androidx.datastore.core.Serializer<T> serializer);
+ ctor public RxDataStoreBuilder(java.util.concurrent.Callable<java.io.File> produceFile, androidx.datastore.core.Serializer<T> serializer);
method public androidx.datastore.rxjava3.RxDataStoreBuilder<T> addDataMigration(androidx.datastore.core.DataMigration<T> dataMigration);
method public androidx.datastore.rxjava3.RxDataStoreBuilder<T> addRxDataMigration(androidx.datastore.rxjava3.RxDataMigration<T> rxDataMigration);
method public androidx.datastore.rxjava3.RxDataStore<T> build();
diff --git a/datastore/datastore-rxjava3/build.gradle b/datastore/datastore-rxjava3/build.gradle
index c9bfe85..8de1572 100644
--- a/datastore/datastore-rxjava3/build.gradle
+++ b/datastore/datastore-rxjava3/build.gradle
@@ -52,7 +52,7 @@
}
androidx {
- name = "Android DataStore Core RxJava2 Wrappers"
+ name = "DataStore RxJava3"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2020"
description = "Android DataStore Core - contains wrappers for using DataStore using RxJava2"
diff --git a/datastore/datastore-rxjava3/src/androidTest/java/androidx/datastore/rxjava3/RxDataStoreDelegateTest.kt b/datastore/datastore-rxjava3/src/androidTest/java/androidx/datastore/rxjava3/RxDataStoreDelegateTest.kt
index dadae22..aca2cd7 100644
--- a/datastore/datastore-rxjava3/src/androidTest/java/androidx/datastore/rxjava3/RxDataStoreDelegateTest.kt
+++ b/datastore/datastore-rxjava3/src/androidTest/java/androidx/datastore/rxjava3/RxDataStoreDelegateTest.kt
@@ -22,13 +22,13 @@
import androidx.test.core.app.ApplicationProvider
import com.google.common.truth.Truth.assertThat
import io.reactivex.rxjava3.core.Single
+import java.io.File
+import java.io.FileOutputStream
import kotlinx.coroutines.ExperimentalCoroutinesApi
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.rules.TemporaryFolder
-import java.io.File
-import java.io.FileOutputStream
val Context.rxDataStore by rxDataStore("file1", TestingSerializer())
diff --git a/datastore/datastore-rxjava3/src/main/java/androidx/datastore/rxjava3/RxDataStoreBuilder.kt b/datastore/datastore-rxjava3/src/main/java/androidx/datastore/rxjava3/RxDataStoreBuilder.kt
index 8e05c50..68365dd 100644
--- a/datastore/datastore-rxjava3/src/main/java/androidx/datastore/rxjava3/RxDataStoreBuilder.kt
+++ b/datastore/datastore-rxjava3/src/main/java/androidx/datastore/rxjava3/RxDataStoreBuilder.kt
@@ -25,12 +25,12 @@
import androidx.datastore.dataStoreFile
import io.reactivex.rxjava3.core.Scheduler
import io.reactivex.rxjava3.schedulers.Schedulers
+import java.io.File
+import java.util.concurrent.Callable
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.rx3.asCoroutineDispatcher
import kotlinx.coroutines.rx3.await
-import java.io.File
-import java.util.concurrent.Callable
/**
* Builder class for an RxDataStore that works on a single process.
diff --git a/datastore/datastore-sampleapp/src/main/java/com/example/datastoresampleapp/KotlinSerializationActivity.kt b/datastore/datastore-sampleapp/src/main/java/com/example/datastoresampleapp/KotlinSerializationActivity.kt
index 1d78255..e1057f7 100644
--- a/datastore/datastore-sampleapp/src/main/java/com/example/datastoresampleapp/KotlinSerializationActivity.kt
+++ b/datastore/datastore-sampleapp/src/main/java/com/example/datastoresampleapp/KotlinSerializationActivity.kt
@@ -27,6 +27,10 @@
import androidx.datastore.core.DataStoreFactory
import androidx.datastore.core.Serializer
import androidx.lifecycle.lifecycleScope
+import java.io.File
+import java.io.IOException
+import java.io.InputStream
+import java.io.OutputStream
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.distinctUntilChanged
@@ -38,11 +42,6 @@
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
-import java.io.File
-import java.io.IOException
-import java.io.InputStream
-import java.io.OutputStream
-
@OptIn(kotlinx.coroutines.ExperimentalCoroutinesApi::class)
class KotlinSerializationActivity : AppCompatActivity() {
private val TAG = "SerializationActivity"
diff --git a/datastore/datastore-sampleapp/src/main/java/com/example/datastoresampleapp/PreferencesDataStoreActivity.kt b/datastore/datastore-sampleapp/src/main/java/com/example/datastoresampleapp/PreferencesDataStoreActivity.kt
index b8ed192..3ff3a6a 100644
--- a/datastore/datastore-sampleapp/src/main/java/com/example/datastoresampleapp/PreferencesDataStoreActivity.kt
+++ b/datastore/datastore-sampleapp/src/main/java/com/example/datastoresampleapp/PreferencesDataStoreActivity.kt
@@ -28,12 +28,12 @@
import androidx.datastore.preferences.core.intPreferencesKey
import androidx.datastore.preferences.preferencesDataStore
import androidx.lifecycle.lifecycleScope
+import java.io.IOException
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
-import java.io.IOException
val Context.prefsDs by preferencesDataStore("datastore_test_app")
diff --git a/datastore/datastore-sampleapp/src/main/java/com/example/datastoresampleapp/ProtoDataStoreActivity.kt b/datastore/datastore-sampleapp/src/main/java/com/example/datastoresampleapp/ProtoDataStoreActivity.kt
index 1bce259..476e5be 100644
--- a/datastore/datastore-sampleapp/src/main/java/com/example/datastoresampleapp/ProtoDataStoreActivity.kt
+++ b/datastore/datastore-sampleapp/src/main/java/com/example/datastoresampleapp/ProtoDataStoreActivity.kt
@@ -28,15 +28,15 @@
import androidx.datastore.core.Serializer
import androidx.lifecycle.lifecycleScope
import com.google.protobuf.InvalidProtocolBufferException
+import java.io.File
+import java.io.IOException
+import java.io.InputStream
+import java.io.OutputStream
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
-import java.io.File
-import java.io.IOException
-import java.io.InputStream
-import java.io.OutputStream
@OptIn(kotlinx.coroutines.ExperimentalCoroutinesApi::class)
class ProtoDataStoreActivity : AppCompatActivity() {
diff --git a/datastore/datastore-sampleapp/src/main/java/com/example/datastoresampleapp/SettingsFragment.kt b/datastore/datastore-sampleapp/src/main/java/com/example/datastoresampleapp/SettingsFragment.kt
index 246dbae..0b68e58 100644
--- a/datastore/datastore-sampleapp/src/main/java/com/example/datastoresampleapp/SettingsFragment.kt
+++ b/datastore/datastore-sampleapp/src/main/java/com/example/datastoresampleapp/SettingsFragment.kt
@@ -27,13 +27,17 @@
import androidx.datastore.core.DataStoreFactory
import androidx.datastore.core.Serializer
import androidx.lifecycle.Lifecycle
-import androidx.preference.Preference
-import androidx.preference.SwitchPreference
-import androidx.preference.PreferenceFragmentCompat
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
+import androidx.preference.Preference
+import androidx.preference.PreferenceFragmentCompat
+import androidx.preference.SwitchPreference
import androidx.preference.TwoStatePreference
import com.google.protobuf.InvalidProtocolBufferException
+import java.io.File
+import java.io.IOException
+import java.io.InputStream
+import java.io.OutputStream
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.Flow
@@ -42,10 +46,6 @@
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.launch
-import java.io.File
-import java.io.IOException
-import java.io.InputStream
-import java.io.OutputStream
private val TAG = "SettingsActivity"
diff --git a/datastore/datastore/api/current.txt b/datastore/datastore/api/current.txt
index 91d9597..288a16d1 100644
--- a/datastore/datastore/api/current.txt
+++ b/datastore/datastore/api/current.txt
@@ -14,12 +14,12 @@
package androidx.datastore.migrations {
public final class SharedPreferencesMigration<T> implements androidx.datastore.core.DataMigration<T> {
- ctor public SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, optional java.util.Set<java.lang.String> keysToMigrate, optional kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super java.lang.Boolean>,?> shouldRunMigration, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
- ctor public SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, optional java.util.Set<java.lang.String> keysToMigrate, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
- ctor public SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
ctor public SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, optional java.util.Set<java.lang.String> keysToMigrate, optional kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super java.lang.Boolean>,?> shouldRunMigration, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
ctor public SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, optional java.util.Set<java.lang.String> keysToMigrate, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
ctor public SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
+ ctor public SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, optional java.util.Set<java.lang.String> keysToMigrate, optional kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super java.lang.Boolean>,?> shouldRunMigration, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
+ ctor public SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, optional java.util.Set<java.lang.String> keysToMigrate, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
+ ctor public SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
method @kotlin.jvm.Throws(exceptionClasses=IOException::class) public suspend Object? cleanUp(kotlin.coroutines.Continuation<? super kotlin.Unit>) throws java.io.IOException;
method public suspend Object? migrate(T currentData, kotlin.coroutines.Continuation<? super T>);
method public suspend Object? shouldMigrate(T currentData, kotlin.coroutines.Continuation<? super java.lang.Boolean>);
diff --git a/datastore/datastore/api/public_plus_experimental_current.txt b/datastore/datastore/api/public_plus_experimental_current.txt
deleted file mode 100644
index 91d9597..0000000
--- a/datastore/datastore/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-// Signature format: 4.0
-package androidx.datastore {
-
- public final class DataStoreDelegateKt {
- method public static <T> kotlin.properties.ReadOnlyProperty<android.content.Context,androidx.datastore.core.DataStore<T>> dataStore(String fileName, androidx.datastore.core.Serializer<T> serializer, optional androidx.datastore.core.handlers.ReplaceFileCorruptionHandler<T>? corruptionHandler, optional kotlin.jvm.functions.Function1<? super android.content.Context,? extends java.util.List<? extends androidx.datastore.core.DataMigration<T>>> produceMigrations, optional kotlinx.coroutines.CoroutineScope scope);
- }
-
- public final class DataStoreFile {
- method public static java.io.File dataStoreFile(android.content.Context, String fileName);
- }
-
-}
-
-package androidx.datastore.migrations {
-
- public final class SharedPreferencesMigration<T> implements androidx.datastore.core.DataMigration<T> {
- ctor public SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, optional java.util.Set<java.lang.String> keysToMigrate, optional kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super java.lang.Boolean>,?> shouldRunMigration, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
- ctor public SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, optional java.util.Set<java.lang.String> keysToMigrate, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
- ctor public SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
- ctor public SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, optional java.util.Set<java.lang.String> keysToMigrate, optional kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super java.lang.Boolean>,?> shouldRunMigration, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
- ctor public SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, optional java.util.Set<java.lang.String> keysToMigrate, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
- ctor public SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
- method @kotlin.jvm.Throws(exceptionClasses=IOException::class) public suspend Object? cleanUp(kotlin.coroutines.Continuation<? super kotlin.Unit>) throws java.io.IOException;
- method public suspend Object? migrate(T currentData, kotlin.coroutines.Continuation<? super T>);
- method public suspend Object? shouldMigrate(T currentData, kotlin.coroutines.Continuation<? super java.lang.Boolean>);
- }
-
- public final class SharedPreferencesView {
- method public operator boolean contains(String key);
- method public java.util.Map<java.lang.String,java.lang.Object> getAll();
- method public boolean getBoolean(String key, boolean defValue);
- method public float getFloat(String key, float defValue);
- method public int getInt(String key, int defValue);
- method public long getLong(String key, long defValue);
- method public String? getString(String key, optional String? defValue);
- method public java.util.Set<java.lang.String>? getStringSet(String key, optional java.util.Set<java.lang.String>? defValues);
- }
-
-}
-
diff --git a/datastore/datastore/api/restricted_current.txt b/datastore/datastore/api/restricted_current.txt
index 91d9597..288a16d1 100644
--- a/datastore/datastore/api/restricted_current.txt
+++ b/datastore/datastore/api/restricted_current.txt
@@ -14,12 +14,12 @@
package androidx.datastore.migrations {
public final class SharedPreferencesMigration<T> implements androidx.datastore.core.DataMigration<T> {
- ctor public SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, optional java.util.Set<java.lang.String> keysToMigrate, optional kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super java.lang.Boolean>,?> shouldRunMigration, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
- ctor public SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, optional java.util.Set<java.lang.String> keysToMigrate, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
- ctor public SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
ctor public SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, optional java.util.Set<java.lang.String> keysToMigrate, optional kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super java.lang.Boolean>,?> shouldRunMigration, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
ctor public SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, optional java.util.Set<java.lang.String> keysToMigrate, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
ctor public SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
+ ctor public SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, optional java.util.Set<java.lang.String> keysToMigrate, optional kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super java.lang.Boolean>,?> shouldRunMigration, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
+ ctor public SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, optional java.util.Set<java.lang.String> keysToMigrate, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
+ ctor public SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
method @kotlin.jvm.Throws(exceptionClasses=IOException::class) public suspend Object? cleanUp(kotlin.coroutines.Continuation<? super kotlin.Unit>) throws java.io.IOException;
method public suspend Object? migrate(T currentData, kotlin.coroutines.Continuation<? super T>);
method public suspend Object? shouldMigrate(T currentData, kotlin.coroutines.Continuation<? super java.lang.Boolean>);
diff --git a/datastore/datastore/build.gradle b/datastore/datastore/build.gradle
index d450a9b..8b4451d 100644
--- a/datastore/datastore/build.gradle
+++ b/datastore/datastore/build.gradle
@@ -106,7 +106,7 @@
}
androidx {
- name = "Android DataStore"
+ name = "DataStore"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2020"
description = "Android DataStore - contains the underlying store used by each serialization " +
diff --git a/datastore/datastore/src/androidAndroidTest/kotlin/androidx/datastore/DataStoreDelegateTest.kt b/datastore/datastore/src/androidAndroidTest/kotlin/androidx/datastore/DataStoreDelegateTest.kt
index 68b88be..11ace8e 100644
--- a/datastore/datastore/src/androidAndroidTest/kotlin/androidx/datastore/DataStoreDelegateTest.kt
+++ b/datastore/datastore/src/androidAndroidTest/kotlin/androidx/datastore/DataStoreDelegateTest.kt
@@ -23,6 +23,9 @@
import androidx.test.filters.SdkSuppress
import androidx.testutils.assertThrows
import com.google.common.truth.Truth.assertThat
+import java.io.File
+import java.io.FileOutputStream
+import java.lang.IllegalStateException
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.coroutineScope
@@ -33,9 +36,6 @@
import org.junit.Rule
import org.junit.Test
import org.junit.rules.TemporaryFolder
-import java.io.File
-import java.io.FileOutputStream
-import java.lang.IllegalStateException
val Context.globalDs by dataStore("file1", TestingSerializer())
diff --git a/datastore/datastore/src/androidAndroidTest/kotlin/androidx/datastore/DataStoreFileTest.kt b/datastore/datastore/src/androidAndroidTest/kotlin/androidx/datastore/DataStoreFileTest.kt
index 3f8806b..7eca1d1 100644
--- a/datastore/datastore/src/androidAndroidTest/kotlin/androidx/datastore/DataStoreFileTest.kt
+++ b/datastore/datastore/src/androidAndroidTest/kotlin/androidx/datastore/DataStoreFileTest.kt
@@ -19,8 +19,8 @@
import android.content.Context
import androidx.test.core.app.ApplicationProvider
import com.google.common.truth.Truth.assertThat
-import org.junit.Test
import java.io.File
+import org.junit.Test
class DataStoreFileTest {
@Test
diff --git a/datastore/datastore/src/androidAndroidTest/kotlin/androidx/datastore/migrations/SharedPreferencesMigrationTest.kt b/datastore/datastore/src/androidAndroidTest/kotlin/androidx/datastore/migrations/SharedPreferencesMigrationTest.kt
index a0a2452..51dd177 100644
--- a/datastore/datastore/src/androidAndroidTest/kotlin/androidx/datastore/migrations/SharedPreferencesMigrationTest.kt
+++ b/datastore/datastore/src/androidAndroidTest/kotlin/androidx/datastore/migrations/SharedPreferencesMigrationTest.kt
@@ -18,15 +18,16 @@
import android.content.Context
import android.content.SharedPreferences
+import androidx.datastore.TestingSerializer
import androidx.datastore.core.DataMigration
import androidx.datastore.core.DataStore
import androidx.datastore.core.DataStoreFactory
-import androidx.datastore.TestingSerializer
import androidx.datastore.dataStore
import androidx.test.core.app.ApplicationProvider
import androidx.test.filters.MediumTest
import androidx.testutils.assertThrows
import com.google.common.truth.Truth.assertThat
+import java.io.File
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.TestScope
@@ -36,7 +37,6 @@
import org.junit.Rule
import org.junit.Test
import org.junit.rules.TemporaryFolder
-import java.io.File
private const val sharedPrefsName = "shared_prefs_name"
diff --git a/datastore/datastore/src/androidMain/kotlin/androidx/datastore/DataStoreDelegate.kt b/datastore/datastore/src/androidMain/kotlin/androidx/datastore/DataStoreDelegate.kt
index b53904f..aa35674 100644
--- a/datastore/datastore/src/androidMain/kotlin/androidx/datastore/DataStoreDelegate.kt
+++ b/datastore/datastore/src/androidMain/kotlin/androidx/datastore/DataStoreDelegate.kt
@@ -21,15 +21,15 @@
import androidx.datastore.core.DataMigration
import androidx.datastore.core.DataStore
import androidx.datastore.core.DataStoreFactory
-import androidx.datastore.core.handlers.ReplaceFileCorruptionHandler
import androidx.datastore.core.Serializer
+import androidx.datastore.core.handlers.ReplaceFileCorruptionHandler
import androidx.datastore.core.okio.OkioSerializer
import androidx.datastore.core.okio.OkioStorage
+import kotlin.properties.ReadOnlyProperty
+import kotlin.reflect.KProperty
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
-import kotlin.properties.ReadOnlyProperty
-import kotlin.reflect.KProperty
import okio.BufferedSink
import okio.BufferedSource
import okio.FileSystem
diff --git a/datastore/datastore/src/androidMain/kotlin/androidx/datastore/migrations/SharedPreferencesMigration.kt b/datastore/datastore/src/androidMain/kotlin/androidx/datastore/migrations/SharedPreferencesMigration.kt
index 4fc7b7c..2bb5174 100644
--- a/datastore/datastore/src/androidMain/kotlin/androidx/datastore/migrations/SharedPreferencesMigration.kt
+++ b/datastore/datastore/src/androidMain/kotlin/androidx/datastore/migrations/SharedPreferencesMigration.kt
@@ -16,10 +16,10 @@
package androidx.datastore.migrations
-import androidx.annotation.DoNotInline
import android.content.Context
import android.content.SharedPreferences
import android.os.Build
+import androidx.annotation.DoNotInline
import androidx.annotation.RequiresApi
import androidx.datastore.core.DataMigration
import java.io.File
diff --git a/development/build_log_simplifier/message-flakes.ignore b/development/build_log_simplifier/message-flakes.ignore
index 5305b10..a1437a4 100644
--- a/development/build_log_simplifier/message-flakes.ignore
+++ b/development/build_log_simplifier/message-flakes.ignore
@@ -7,8 +7,6 @@
ZipFile closed
# > Task :room:integration-tests:room-testapp:runErrorProne
java\.util\.zip\.ZipException\: ZipFile closed
-# > Task :compose:internal-lint-checks:lint
-Classpath entry points to a non\-existent location\: \$OUT_DIR\/ui\/compose\/internal\-lint\-checks\/build\/classes\/kotlin\/main
# > Task :compose:animation:animation-core:testDebugUnitTest
androidx\.compose\.animation\.core\.AnimationClockTest \> testSubscriptionDuringFrameCallback FAILED
kotlin\.UninitializedPropertyAccessException at AnimationClockTest\.kt\:[0-9]+
@@ -152,4 +150,4 @@
Using fallback strategy: Compile without Kotlin daemon
Try \./gradlew \-\-stop if this issue persists\.
# b/ 279739438
-w\: Detected multiple Kotlin daemon sessions at kotlin/sessions
\ No newline at end of file
+w\: Detected multiple Kotlin daemon sessions at kotlin/sessions
diff --git a/development/build_log_simplifier/messages.ignore b/development/build_log_simplifier/messages.ignore
index 10836a5..4884c02 100644
--- a/development/build_log_simplifier/messages.ignore
+++ b/development/build_log_simplifier/messages.ignore
@@ -250,6 +250,8 @@
WARNING: link to @throws type Renderer\.GlesException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un\-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\.`@throws java\.io\.IOException under some conditions\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=If any GL calls fail during initialization\., children=\[\], params=\{\}\)\], params=\{\}\)\], params=\{\}, name=MARKDOWN_FILE\), name=Renderer\.GlesException, exceptionAddress=null\)\.`
WARNING: link to @throws type ServiceStartFailureException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un\-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\.`@throws java\.io\.IOException under some conditions\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if the watchface dies during startup\., children=\[\], params=\{\}\)\], params=\{\}\)\], params=\{\}, name=MARKDOWN_FILE\), name=ServiceStartFailureException, exceptionAddress=null\)\.`
WARN: Sources for .+ is empty
+WARNING: link to @throws type UnsupportedDeviceOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un\-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\.`@throws java\.io\.IOException under some conditions\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if used on a real device\., children=\[\], params=\{\}\)\], params=\{\}\)\], params=\{\}, name=MARKDOWN_FILE\), name=UnsupportedDeviceOperationException, exceptionAddress=null\)\.`
+WARNING: link to @throws type DeviceControllerOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un\-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name, e\.g\.`@throws java\.io\.IOException under some conditions\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=when called on a non\-foldable Emulator\., children=\[\], params=\{\}\)\], params=\{\}\)\], params=\{\}, name=MARKDOWN_FILE\), name=DeviceControllerOperationException, exceptionAddress=null\)\.`
WARN\: Multiple sources exist for IOException\. Artifact ID metadata will not be displayed
WARN: Missing @param tag for parameter `startActivityIntent` of function androidx\.test\.core\.app/ActivityScenario/launch/\#android\.content\.Intent\#android\.os\.Bundle/PointingToDeclaration/
WARN: Missing @param tag for parameter `activityClass` of function androidx\.test\.core\.app/ActivityScenario/launch/\#java\.lang\.Class<A>\#android\.os\.Bundle/PointingToDeclaration/
diff --git a/development/update_studio.sh b/development/update_studio.sh
index 87535ad..60159c2 100755
--- a/development/update_studio.sh
+++ b/development/update_studio.sh
@@ -7,8 +7,8 @@
# Get versions
echo Getting Studio version and link
-AGP_VERSION=${1:-8.1.0-beta01}
-STUDIO_VERSION_STRING=${2:-"Android Studio Giraffe | 2022.3.1 Beta 1"}
+AGP_VERSION=${1:-8.1.0-beta02}
+STUDIO_VERSION_STRING=${2:-"Android Studio Giraffe | 2022.3.1 Beta 2"}
STUDIO_IFRAME_LINK=`curl "https://developer.android.com/studio/archive.html" | grep "<iframe " | sed "s/.* src=\"\([^\"]*\)\".*/\1/g"`
echo iframe link $STUDIO_IFRAME_LINK
STUDIO_IFRAME_REDIRECT=`curl -s $STUDIO_IFRAME_LINK | grep href | sed 's/.*href="\([^"]*\)".*/\1/g'`
diff --git a/docs-public/build.gradle b/docs-public/build.gradle
index d082aaf..b2b8c41 100644
--- a/docs-public/build.gradle
+++ b/docs-public/build.gradle
@@ -214,29 +214,30 @@
docs("androidx.media2:media2-session:1.2.1")
docs("androidx.media2:media2-widget:1.2.1")
docs("androidx.media:media:1.6.0")
- docs("androidx.media3:media3-cast:1.0.1")
- docs("androidx.media3:media3-common:1.0.1")
- docs("androidx.media3:media3-database:1.0.1")
- docs("androidx.media3:media3-datasource:1.0.1")
- docs("androidx.media3:media3-datasource-cronet:1.0.1")
- docs("androidx.media3:media3-datasource-okhttp:1.0.1")
- docs("androidx.media3:media3-datasource-rtmp:1.0.1")
- docs("androidx.media3:media3-decoder:1.0.1")
- docs("androidx.media3:media3-effect:1.0.1")
- docs("androidx.media3:media3-exoplayer:1.0.1")
- docs("androidx.media3:media3-exoplayer-dash:1.0.1")
- docs("androidx.media3:media3-exoplayer-hls:1.0.1")
- docs("androidx.media3:media3-exoplayer-ima:1.0.1")
- docs("androidx.media3:media3-exoplayer-rtsp:1.0.1")
- docs("androidx.media3:media3-exoplayer-smoothstreaming:1.0.1")
- docs("androidx.media3:media3-exoplayer-workmanager:1.0.1")
- docs("androidx.media3:media3-extractor:1.0.1")
- docs("androidx.media3:media3-session:1.0.1")
- docs("androidx.media3:media3-test-utils:1.0.1")
- docs("androidx.media3:media3-test-utils-robolectric:1.0.1")
- docs("androidx.media3:media3-transformer:1.0.1")
- docs("androidx.media3:media3-ui:1.0.1")
- docs("androidx.media3:media3-ui-leanback:1.0.1")
+ docs("androidx.media3:media3-cast:1.1.0-alpha01")
+ docs("androidx.media3:media3-common:1.1.0-alpha01")
+ docs("androidx.media3:media3-database:1.1.0-alpha01")
+ docs("androidx.media3:media3-datasource:1.1.0-alpha01")
+ docs("androidx.media3:media3-datasource-cronet:1.1.0-alpha01")
+ docs("androidx.media3:media3-datasource-okhttp:1.1.0-alpha01")
+ docs("androidx.media3:media3-datasource-rtmp:1.1.0-alpha01")
+ docs("androidx.media3:media3-decoder:1.1.0-alpha01")
+ docs("androidx.media3:media3-effect:1.1.0-alpha01")
+ docs("androidx.media3:media3-exoplayer:1.1.0-alpha01")
+ docs("androidx.media3:media3-exoplayer-dash:1.1.0-alpha01")
+ docs("androidx.media3:media3-exoplayer-hls:1.1.0-alpha01")
+ docs("androidx.media3:media3-exoplayer-ima:1.1.0-alpha01")
+ docs("androidx.media3:media3-exoplayer-rtsp:1.1.0-alpha01")
+ docs("androidx.media3:media3-exoplayer-smoothstreaming:1.1.0-alpha01")
+ docs("androidx.media3:media3-exoplayer-workmanager:1.1.0-alpha01")
+ docs("androidx.media3:media3-extractor:1.1.0-alpha01")
+ docs("androidx.media3:media3-muxer:1.1.0-alpha01")
+ docs("androidx.media3:media3-session:1.1.0-alpha01")
+ docs("androidx.media3:media3-test-utils:1.1.0-alpha01")
+ docs("androidx.media3:media3-test-utils-robolectric:1.1.0-alpha01")
+ docs("androidx.media3:media3-transformer:1.1.0-alpha01")
+ docs("androidx.media3:media3-ui:1.1.0-alpha01")
+ docs("androidx.media3:media3-ui-leanback:1.1.0-alpha01")
docs("androidx.mediarouter:mediarouter:1.6.0-alpha03")
docs("androidx.mediarouter:mediarouter-testing:1.6.0-alpha03")
docs("androidx.metrics:metrics-performance:1.0.0-alpha04")
@@ -327,7 +328,7 @@
docs("androidx.test.espresso:espresso-accessibility:3.6.0-alpha01")
docs("androidx.test.espresso:espresso-contrib:3.6.0-alpha01")
docs("androidx.test.espresso:espresso-core:3.6.0-alpha01")
- docs("androidx.test.espresso:espresso-device:1.0.0-alpha04")
+ docs("androidx.test.espresso:espresso-device:1.0.0-alpha05")
docs("androidx.test.espresso:espresso-idling-resource:3.6.0-alpha01")
docs("androidx.test.espresso:espresso-intents:3.6.0-alpha01")
docs("androidx.test.espresso:espresso-remote:3.6.0-alpha01")
diff --git a/docs-public/frameworks/support/README b/docs-public/frameworks/support/README
deleted file mode 100644
index 419a2b4..0000000
--- a/docs-public/frameworks/support/README
+++ /dev/null
@@ -1 +0,0 @@
-This directory exists for Doclava docs builds. Remove when Doclava is removed.
\ No newline at end of file
diff --git a/docs-public/frameworks/support/samples b/docs-public/frameworks/support/samples
deleted file mode 120000
index 6b7e1ad..0000000
--- a/docs-public/frameworks/support/samples
+++ /dev/null
@@ -1 +0,0 @@
-../../../samples
\ No newline at end of file
diff --git a/docs-tip-of-tree/frameworks/support/README b/docs-tip-of-tree/frameworks/support/README
deleted file mode 100644
index 419a2b4..0000000
--- a/docs-tip-of-tree/frameworks/support/README
+++ /dev/null
@@ -1 +0,0 @@
-This directory exists for Doclava docs builds. Remove when Doclava is removed.
\ No newline at end of file
diff --git a/docs-tip-of-tree/frameworks/support/samples b/docs-tip-of-tree/frameworks/support/samples
deleted file mode 120000
index 6b7e1ad..0000000
--- a/docs-tip-of-tree/frameworks/support/samples
+++ /dev/null
@@ -1 +0,0 @@
-../../../samples
\ No newline at end of file
diff --git a/docs/api_guidelines/compat.md b/docs/api_guidelines/compat.md
index 90860c8..ca1d990 100644
--- a/docs/api_guidelines/compat.md
+++ b/docs/api_guidelines/compat.md
@@ -272,15 +272,26 @@
cases -- may need to handle variations in platform behavior. Refer to the
following pages for version-specific behavior changes:
-* [API level 33](https://developer.android.com/about/versions/13/behavior-changes-13)
-* [API level 31](https://developer.android.com/about/versions/12/behavior-changes-12)
-* [API level 30](https://developer.android.com/about/versions/11/behavior-changes-11)
-* [API level 29](https://developer.android.com/about/versions/10/behavior-changes-10)
-* [API level 28](https://developer.android.com/about/versions/pie/android-9.0-changes-28)
-* [API level 26](https://developer.android.com/about/versions/oreo/android-8.0-changes)
-* [API level 24](https://developer.android.com/about/versions/nougat/android-7.0-changes)
-* [API level 21](https://developer.android.com/about/versions/lollipop/android-5.0-changes)
-* [API level 19](https://developer.android.com/about/versions/kitkat/android-4.4#Behaviors)
+* Android 14,
+ [API level 34](https://developer.android.com/about/versions/14/behavior-changes-14)
+* Android 13,
+ [API level 33](https://developer.android.com/about/versions/13/behavior-changes-13)
+* Android 12,
+ [API level 31](https://developer.android.com/about/versions/12/behavior-changes-12)
+* Android 11,
+ [API level 30](https://developer.android.com/about/versions/11/behavior-changes-11)
+* Android 10,
+ [API level 29](https://developer.android.com/about/versions/10/behavior-changes-10)
+* Android Pie (9.0),
+ [API level 28](https://developer.android.com/about/versions/pie/android-9.0-changes-28)
+* Android Oreo (8.0),
+ [API level 26](https://developer.android.com/about/versions/oreo/android-8.0-changes)
+* Android Nougat(7.0),
+ [API level 24](https://developer.android.com/about/versions/nougat/android-7.0-changes)
+* Android Lollipop (5.0),
+ [API level 21](https://developer.android.com/about/versions/lollipop/android-5.0-changes)
+* Android KitKat (4.4),
+ [API level 19](https://developer.android.com/about/versions/kitkat/android-4.4#Behaviors)
#### Working around Lint issues {#compat-lint}
@@ -291,6 +302,22 @@
annotation **must** be associated with an active bug, and the usage must be
removed when the bug is resolved.
+#### Java 8+ APIs and core library desugaring {#compat-desugar}
+
+While the DEX compiler (D8) supports
+[API desugaring](https://developer.android.com/studio/write/java8-support-table)
+to enable usage of Java 8+ APIs on a broader range of platform API levels, there
+is currently no way for a library to express the toolchain requirements
+necessary for desugaring to work as intended.
+
+As of 2023-05-11, there is still a
+[pending feature request](https://issuetracker.google.com/203113147) to allow
+Android libraries to express these requirements.
+
+Libraries **must not** rely on `coreLibraryDesugaring` to access Java language
+APIs on earlier platform API levels. For example, `java.time.*` may only be used
+in code paths targeting API level 26 and above.
+
### Delegating to API-specific implementations {#delegating-to-api-specific-implementations}
#### SDK-dependent reflection {#sdk-reflection}
diff --git a/documentfile/documentfile/api/public_plus_experimental_current.txt b/documentfile/documentfile/api/public_plus_experimental_current.txt
deleted file mode 100644
index d82769c..0000000
--- a/documentfile/documentfile/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-// Signature format: 4.0
-package androidx.documentfile.provider {
-
- public abstract class DocumentFile {
- method public abstract boolean canRead();
- method public abstract boolean canWrite();
- method public abstract androidx.documentfile.provider.DocumentFile? createDirectory(String);
- method public abstract androidx.documentfile.provider.DocumentFile? createFile(String, String);
- method public abstract boolean delete();
- method public abstract boolean exists();
- method public androidx.documentfile.provider.DocumentFile? findFile(String);
- method public static androidx.documentfile.provider.DocumentFile fromFile(java.io.File);
- method public static androidx.documentfile.provider.DocumentFile? fromSingleUri(android.content.Context, android.net.Uri);
- method public static androidx.documentfile.provider.DocumentFile? fromTreeUri(android.content.Context, android.net.Uri);
- method public abstract String? getName();
- method public androidx.documentfile.provider.DocumentFile? getParentFile();
- method public abstract String? getType();
- method public abstract android.net.Uri getUri();
- method public abstract boolean isDirectory();
- method public static boolean isDocumentUri(android.content.Context, android.net.Uri?);
- method public abstract boolean isFile();
- method public abstract boolean isVirtual();
- method public abstract long lastModified();
- method public abstract long length();
- method public abstract androidx.documentfile.provider.DocumentFile![] listFiles();
- method public abstract boolean renameTo(String);
- }
-
-}
-
diff --git a/documentfile/documentfile/build.gradle b/documentfile/documentfile/build.gradle
index 4993c26..f9ab3ec 100644
--- a/documentfile/documentfile/build.gradle
+++ b/documentfile/documentfile/build.gradle
@@ -17,7 +17,7 @@
}
androidx {
- name = "Android Support Library Document File"
+ name = "Document File"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later."
diff --git a/draganddrop/draganddrop/api/public_plus_experimental_current.txt b/draganddrop/draganddrop/api/public_plus_experimental_current.txt
deleted file mode 100644
index eb19b25..0000000
--- a/draganddrop/draganddrop/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-// Signature format: 4.0
-package androidx.draganddrop {
-
- public final class DropHelper {
- method public static void configureView(android.app.Activity, android.view.View, String![], androidx.core.view.OnReceiveContentListener);
- method public static void configureView(android.app.Activity, android.view.View, String![], androidx.draganddrop.DropHelper.Options, androidx.core.view.OnReceiveContentListener);
- }
-
- public static final class DropHelper.Options {
- method @ColorInt public int getHighlightColor();
- method public int getHighlightCornerRadiusPx();
- method public java.util.List<android.widget.EditText!> getInnerEditTexts();
- method public boolean hasHighlightColor();
- method public boolean hasHighlightCornerRadiusPx();
- method public boolean shouldAcceptDragsWithLocalState();
- }
-
- public static final class DropHelper.Options.Builder {
- ctor public DropHelper.Options.Builder();
- method public androidx.draganddrop.DropHelper.Options.Builder addInnerEditTexts(android.widget.EditText!...);
- method public androidx.draganddrop.DropHelper.Options build();
- method public androidx.draganddrop.DropHelper.Options.Builder setAcceptDragsWithLocalState(boolean);
- method public androidx.draganddrop.DropHelper.Options.Builder setHighlightColor(@ColorInt int);
- method public androidx.draganddrop.DropHelper.Options.Builder setHighlightCornerRadiusPx(int);
- }
-
-}
-
diff --git a/draganddrop/draganddrop/build.gradle b/draganddrop/draganddrop/build.gradle
index 37b0365..41c3462 100644
--- a/draganddrop/draganddrop/build.gradle
+++ b/draganddrop/draganddrop/build.gradle
@@ -44,7 +44,7 @@
}
androidx {
- name = "AndroidX Drag and Drop Library"
+ name = "Drag and Drop"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2021"
description = "This library makes it easy for developers to accept data dragged-and-dropped from another app, and show a consistent affordance."
diff --git a/drawerlayout/drawerlayout/api/current.txt b/drawerlayout/drawerlayout/api/current.txt
index d638832..1a9502a 100644
--- a/drawerlayout/drawerlayout/api/current.txt
+++ b/drawerlayout/drawerlayout/api/current.txt
@@ -13,8 +13,8 @@
method public void closeDrawer(int, boolean);
method public void closeDrawers();
method public float getDrawerElevation();
- method public int getDrawerLockMode(int);
method public int getDrawerLockMode(android.view.View);
+ method public int getDrawerLockMode(int);
method public CharSequence? getDrawerTitle(int);
method public android.graphics.drawable.Drawable? getStatusBarBackgroundDrawable();
method public boolean isDrawerOpen(android.view.View);
@@ -32,8 +32,8 @@
method public void setDrawerElevation(float);
method @Deprecated public void setDrawerListener(androidx.drawerlayout.widget.DrawerLayout.DrawerListener!);
method public void setDrawerLockMode(int);
- method public void setDrawerLockMode(int, int);
method public void setDrawerLockMode(int, android.view.View);
+ method public void setDrawerLockMode(int, int);
method public void setDrawerShadow(android.graphics.drawable.Drawable?, int);
method public void setDrawerShadow(@DrawableRes int, int);
method public void setDrawerTitle(int, CharSequence?);
@@ -59,11 +59,11 @@
public static class DrawerLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
ctor public DrawerLayout.LayoutParams(android.content.Context, android.util.AttributeSet?);
- ctor public DrawerLayout.LayoutParams(int, int);
- ctor public DrawerLayout.LayoutParams(int, int, int);
- ctor public DrawerLayout.LayoutParams(androidx.drawerlayout.widget.DrawerLayout.LayoutParams);
ctor public DrawerLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
ctor public DrawerLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public DrawerLayout.LayoutParams(androidx.drawerlayout.widget.DrawerLayout.LayoutParams);
+ ctor public DrawerLayout.LayoutParams(int, int);
+ ctor public DrawerLayout.LayoutParams(int, int, int);
field public int gravity;
}
diff --git a/drawerlayout/drawerlayout/api/public_plus_experimental_current.txt b/drawerlayout/drawerlayout/api/public_plus_experimental_current.txt
deleted file mode 100644
index d638832..0000000
--- a/drawerlayout/drawerlayout/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,85 +0,0 @@
-// Signature format: 4.0
-package androidx.drawerlayout.widget {
-
- public class DrawerLayout extends android.view.ViewGroup implements androidx.customview.widget.Openable {
- ctor public DrawerLayout(android.content.Context);
- ctor public DrawerLayout(android.content.Context, android.util.AttributeSet?);
- ctor public DrawerLayout(android.content.Context, android.util.AttributeSet?, int);
- method public void addDrawerListener(androidx.drawerlayout.widget.DrawerLayout.DrawerListener);
- method public void close();
- method public void closeDrawer(android.view.View);
- method public void closeDrawer(android.view.View, boolean);
- method public void closeDrawer(int);
- method public void closeDrawer(int, boolean);
- method public void closeDrawers();
- method public float getDrawerElevation();
- method public int getDrawerLockMode(int);
- method public int getDrawerLockMode(android.view.View);
- method public CharSequence? getDrawerTitle(int);
- method public android.graphics.drawable.Drawable? getStatusBarBackgroundDrawable();
- method public boolean isDrawerOpen(android.view.View);
- method public boolean isDrawerOpen(int);
- method public boolean isDrawerVisible(android.view.View);
- method public boolean isDrawerVisible(int);
- method public boolean isOpen();
- method public void onDraw(android.graphics.Canvas);
- method public void open();
- method public void openDrawer(android.view.View);
- method public void openDrawer(android.view.View, boolean);
- method public void openDrawer(int);
- method public void openDrawer(int, boolean);
- method public void removeDrawerListener(androidx.drawerlayout.widget.DrawerLayout.DrawerListener);
- method public void setDrawerElevation(float);
- method @Deprecated public void setDrawerListener(androidx.drawerlayout.widget.DrawerLayout.DrawerListener!);
- method public void setDrawerLockMode(int);
- method public void setDrawerLockMode(int, int);
- method public void setDrawerLockMode(int, android.view.View);
- method public void setDrawerShadow(android.graphics.drawable.Drawable?, int);
- method public void setDrawerShadow(@DrawableRes int, int);
- method public void setDrawerTitle(int, CharSequence?);
- method public void setScrimColor(@ColorInt int);
- method public void setStatusBarBackground(android.graphics.drawable.Drawable?);
- method public void setStatusBarBackground(int);
- method public void setStatusBarBackgroundColor(@ColorInt int);
- field public static final int LOCK_MODE_LOCKED_CLOSED = 1; // 0x1
- field public static final int LOCK_MODE_LOCKED_OPEN = 2; // 0x2
- field public static final int LOCK_MODE_UNDEFINED = 3; // 0x3
- field public static final int LOCK_MODE_UNLOCKED = 0; // 0x0
- field public static final int STATE_DRAGGING = 1; // 0x1
- field public static final int STATE_IDLE = 0; // 0x0
- field public static final int STATE_SETTLING = 2; // 0x2
- }
-
- public static interface DrawerLayout.DrawerListener {
- method public void onDrawerClosed(android.view.View);
- method public void onDrawerOpened(android.view.View);
- method public void onDrawerSlide(android.view.View, float);
- method public void onDrawerStateChanged(int);
- }
-
- public static class DrawerLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
- ctor public DrawerLayout.LayoutParams(android.content.Context, android.util.AttributeSet?);
- ctor public DrawerLayout.LayoutParams(int, int);
- ctor public DrawerLayout.LayoutParams(int, int, int);
- ctor public DrawerLayout.LayoutParams(androidx.drawerlayout.widget.DrawerLayout.LayoutParams);
- ctor public DrawerLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
- ctor public DrawerLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
- field public int gravity;
- }
-
- protected static class DrawerLayout.SavedState extends androidx.customview.view.AbsSavedState {
- ctor public DrawerLayout.SavedState(android.os.Parcel, ClassLoader?);
- ctor public DrawerLayout.SavedState(android.os.Parcelable);
- field public static final android.os.Parcelable.Creator<androidx.drawerlayout.widget.DrawerLayout.SavedState!>! CREATOR;
- }
-
- public abstract static class DrawerLayout.SimpleDrawerListener implements androidx.drawerlayout.widget.DrawerLayout.DrawerListener {
- ctor public DrawerLayout.SimpleDrawerListener();
- method public void onDrawerClosed(android.view.View);
- method public void onDrawerOpened(android.view.View);
- method public void onDrawerSlide(android.view.View, float);
- method public void onDrawerStateChanged(int);
- }
-
-}
-
diff --git a/drawerlayout/drawerlayout/api/restricted_current.txt b/drawerlayout/drawerlayout/api/restricted_current.txt
index 2e81e63..f6b961d 100644
--- a/drawerlayout/drawerlayout/api/restricted_current.txt
+++ b/drawerlayout/drawerlayout/api/restricted_current.txt
@@ -13,8 +13,8 @@
method public void closeDrawer(int, boolean);
method public void closeDrawers();
method public float getDrawerElevation();
- method public int getDrawerLockMode(int);
method public int getDrawerLockMode(android.view.View);
+ method public int getDrawerLockMode(int);
method public CharSequence? getDrawerTitle(int);
method public android.graphics.drawable.Drawable? getStatusBarBackgroundDrawable();
method public boolean isDrawerOpen(android.view.View);
@@ -33,8 +33,8 @@
method public void setDrawerElevation(float);
method @Deprecated public void setDrawerListener(androidx.drawerlayout.widget.DrawerLayout.DrawerListener!);
method public void setDrawerLockMode(int);
- method public void setDrawerLockMode(int, int);
method public void setDrawerLockMode(int, android.view.View);
+ method public void setDrawerLockMode(int, int);
method public void setDrawerShadow(android.graphics.drawable.Drawable?, int);
method public void setDrawerShadow(@DrawableRes int, int);
method public void setDrawerTitle(int, CharSequence?);
@@ -60,11 +60,11 @@
public static class DrawerLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
ctor public DrawerLayout.LayoutParams(android.content.Context, android.util.AttributeSet?);
- ctor public DrawerLayout.LayoutParams(int, int);
- ctor public DrawerLayout.LayoutParams(int, int, int);
- ctor public DrawerLayout.LayoutParams(androidx.drawerlayout.widget.DrawerLayout.LayoutParams);
ctor public DrawerLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
ctor public DrawerLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public DrawerLayout.LayoutParams(androidx.drawerlayout.widget.DrawerLayout.LayoutParams);
+ ctor public DrawerLayout.LayoutParams(int, int);
+ ctor public DrawerLayout.LayoutParams(int, int, int);
field public int gravity;
}
diff --git a/drawerlayout/drawerlayout/build.gradle b/drawerlayout/drawerlayout/build.gradle
index 6405b31..2e717e7 100644
--- a/drawerlayout/drawerlayout/build.gradle
+++ b/drawerlayout/drawerlayout/build.gradle
@@ -22,7 +22,7 @@
}
androidx {
- name = "Android Support Library Drawer Layout"
+ name = "Drawer Layout"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later."
diff --git a/dynamicanimation/dynamicanimation-ktx/api/public_plus_experimental_current.txt b/dynamicanimation/dynamicanimation-ktx/api/public_plus_experimental_current.txt
deleted file mode 100644
index f832992..0000000
--- a/dynamicanimation/dynamicanimation-ktx/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-// Signature format: 4.0
-package androidx.dynamicanimation.animation {
-
- public final class DynamicAnimationKt {
- method public static androidx.dynamicanimation.animation.FlingAnimation flingAnimationOf(kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> setter, kotlin.jvm.functions.Function0<java.lang.Float> getter);
- method public static androidx.dynamicanimation.animation.SpringAnimation springAnimationOf(kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> setter, kotlin.jvm.functions.Function0<java.lang.Float> getter, optional float finalPosition);
- method public static inline androidx.dynamicanimation.animation.SpringAnimation withSpringForceProperties(androidx.dynamicanimation.animation.SpringAnimation, kotlin.jvm.functions.Function1<? super androidx.dynamicanimation.animation.SpringForce,kotlin.Unit> func);
- }
-
-}
-
diff --git a/dynamicanimation/dynamicanimation-ktx/src/androidTest/java/androidx/dynamicanimation/tests/DynamicAnimationTest.kt b/dynamicanimation/dynamicanimation-ktx/src/androidTest/java/androidx/dynamicanimation/tests/DynamicAnimationTest.kt
index 13e3a47..0486ceb 100644
--- a/dynamicanimation/dynamicanimation-ktx/src/androidTest/java/androidx/dynamicanimation/tests/DynamicAnimationTest.kt
+++ b/dynamicanimation/dynamicanimation-ktx/src/androidTest/java/androidx/dynamicanimation/tests/DynamicAnimationTest.kt
@@ -17,7 +17,6 @@
package androidx.dynamicanimation.tests
import android.view.View
-
import androidx.dynamicanimation.animation.DynamicAnimation
import androidx.dynamicanimation.animation.SpringForce
import androidx.dynamicanimation.animation.flingAnimationOf
@@ -27,7 +26,6 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import androidx.test.platform.app.InstrumentationRegistry
-
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertNull
diff --git a/dynamicanimation/dynamicanimation/api/public_plus_experimental_current.txt b/dynamicanimation/dynamicanimation/api/public_plus_experimental_current.txt
deleted file mode 100644
index 1efc224..0000000
--- a/dynamicanimation/dynamicanimation/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,118 +0,0 @@
-// Signature format: 4.0
-package androidx.dynamicanimation.animation {
-
- public class AnimationHandler {
- ctor public AnimationHandler(androidx.dynamicanimation.animation.FrameCallbackScheduler);
- method @VisibleForTesting public float getDurationScale();
- }
-
- public abstract class DynamicAnimation<T extends androidx.dynamicanimation.animation.DynamicAnimation<T>> {
- method public T! addEndListener(androidx.dynamicanimation.animation.DynamicAnimation.OnAnimationEndListener!);
- method public T! addUpdateListener(androidx.dynamicanimation.animation.DynamicAnimation.OnAnimationUpdateListener!);
- method @MainThread public void cancel();
- method @VisibleForTesting public androidx.dynamicanimation.animation.AnimationHandler getAnimationHandler();
- method public float getMinimumVisibleChange();
- method public androidx.dynamicanimation.animation.FrameCallbackScheduler getScheduler();
- method public boolean isRunning();
- method public void removeEndListener(androidx.dynamicanimation.animation.DynamicAnimation.OnAnimationEndListener!);
- method public void removeUpdateListener(androidx.dynamicanimation.animation.DynamicAnimation.OnAnimationUpdateListener!);
- method public T! setMaxValue(float);
- method public T! setMinValue(float);
- method public T! setMinimumVisibleChange(@FloatRange(from=0.0, fromInclusive=false) float);
- method public void setScheduler(androidx.dynamicanimation.animation.FrameCallbackScheduler);
- method public T! setStartValue(float);
- method public T! setStartVelocity(float);
- method @MainThread public void start();
- field public static final androidx.dynamicanimation.animation.DynamicAnimation.ViewProperty! ALPHA;
- field public static final float MIN_VISIBLE_CHANGE_ALPHA = 0.00390625f;
- field public static final float MIN_VISIBLE_CHANGE_PIXELS = 1.0f;
- field public static final float MIN_VISIBLE_CHANGE_ROTATION_DEGREES = 0.1f;
- field public static final float MIN_VISIBLE_CHANGE_SCALE = 0.002f;
- field public static final androidx.dynamicanimation.animation.DynamicAnimation.ViewProperty! ROTATION;
- field public static final androidx.dynamicanimation.animation.DynamicAnimation.ViewProperty! ROTATION_X;
- field public static final androidx.dynamicanimation.animation.DynamicAnimation.ViewProperty! ROTATION_Y;
- field public static final androidx.dynamicanimation.animation.DynamicAnimation.ViewProperty! SCALE_X;
- field public static final androidx.dynamicanimation.animation.DynamicAnimation.ViewProperty! SCALE_Y;
- field public static final androidx.dynamicanimation.animation.DynamicAnimation.ViewProperty! SCROLL_X;
- field public static final androidx.dynamicanimation.animation.DynamicAnimation.ViewProperty! SCROLL_Y;
- field public static final androidx.dynamicanimation.animation.DynamicAnimation.ViewProperty! TRANSLATION_X;
- field public static final androidx.dynamicanimation.animation.DynamicAnimation.ViewProperty! TRANSLATION_Y;
- field public static final androidx.dynamicanimation.animation.DynamicAnimation.ViewProperty! TRANSLATION_Z;
- field public static final androidx.dynamicanimation.animation.DynamicAnimation.ViewProperty! X;
- field public static final androidx.dynamicanimation.animation.DynamicAnimation.ViewProperty! Y;
- field public static final androidx.dynamicanimation.animation.DynamicAnimation.ViewProperty! Z;
- }
-
- public static interface DynamicAnimation.OnAnimationEndListener {
- method public void onAnimationEnd(androidx.dynamicanimation.animation.DynamicAnimation!, boolean, float, float);
- }
-
- public static interface DynamicAnimation.OnAnimationUpdateListener {
- method public void onAnimationUpdate(androidx.dynamicanimation.animation.DynamicAnimation!, float, float);
- }
-
- public abstract static class DynamicAnimation.ViewProperty extends androidx.dynamicanimation.animation.FloatPropertyCompat<android.view.View> {
- }
-
- public final class FlingAnimation extends androidx.dynamicanimation.animation.DynamicAnimation<androidx.dynamicanimation.animation.FlingAnimation> {
- ctor public FlingAnimation(androidx.dynamicanimation.animation.FloatValueHolder!);
- ctor public <K> FlingAnimation(K!, androidx.dynamicanimation.animation.FloatPropertyCompat<K!>!);
- method public float getFriction();
- method public androidx.dynamicanimation.animation.FlingAnimation! setFriction(@FloatRange(from=0.0, fromInclusive=false) float);
- method public androidx.dynamicanimation.animation.FlingAnimation! setMaxValue(float);
- method public androidx.dynamicanimation.animation.FlingAnimation! setMinValue(float);
- method public androidx.dynamicanimation.animation.FlingAnimation! setStartVelocity(float);
- }
-
- public abstract class FloatPropertyCompat<T> {
- ctor public FloatPropertyCompat(String!);
- method @RequiresApi(24) public static <T> androidx.dynamicanimation.animation.FloatPropertyCompat<T!>! createFloatPropertyCompat(android.util.FloatProperty<T!>!);
- method public abstract float getValue(T!);
- method public abstract void setValue(T!, float);
- }
-
- public class FloatValueHolder {
- ctor public FloatValueHolder();
- ctor public FloatValueHolder(float);
- method public float getValue();
- method public void setValue(float);
- }
-
- public interface FrameCallbackScheduler {
- method public boolean isCurrentThread();
- method public void postFrameCallback(Runnable);
- }
-
- public final class SpringAnimation extends androidx.dynamicanimation.animation.DynamicAnimation<androidx.dynamicanimation.animation.SpringAnimation> {
- ctor public SpringAnimation(androidx.dynamicanimation.animation.FloatValueHolder!);
- ctor public SpringAnimation(androidx.dynamicanimation.animation.FloatValueHolder!, float);
- ctor public <K> SpringAnimation(K!, androidx.dynamicanimation.animation.FloatPropertyCompat<K!>!);
- ctor public <K> SpringAnimation(K!, androidx.dynamicanimation.animation.FloatPropertyCompat<K!>!, float);
- method public void animateToFinalPosition(float);
- method public boolean canSkipToEnd();
- method public androidx.dynamicanimation.animation.SpringForce! getSpring();
- method public androidx.dynamicanimation.animation.SpringAnimation! setSpring(androidx.dynamicanimation.animation.SpringForce!);
- method public void skipToEnd();
- }
-
- public final class SpringForce {
- ctor public SpringForce();
- ctor public SpringForce(float);
- method public float getDampingRatio();
- method public float getFinalPosition();
- method public float getStiffness();
- method public androidx.dynamicanimation.animation.SpringForce! setDampingRatio(@FloatRange(from=0.0) float);
- method public androidx.dynamicanimation.animation.SpringForce! setFinalPosition(float);
- method public androidx.dynamicanimation.animation.SpringForce! setStiffness(@FloatRange(from=0.0, fromInclusive=false) float);
- field public static final float DAMPING_RATIO_HIGH_BOUNCY = 0.2f;
- field public static final float DAMPING_RATIO_LOW_BOUNCY = 0.75f;
- field public static final float DAMPING_RATIO_MEDIUM_BOUNCY = 0.5f;
- field public static final float DAMPING_RATIO_NO_BOUNCY = 1.0f;
- field public static final float STIFFNESS_HIGH = 10000.0f;
- field public static final float STIFFNESS_LOW = 200.0f;
- field public static final float STIFFNESS_MEDIUM = 1500.0f;
- field public static final float STIFFNESS_VERY_LOW = 50.0f;
- }
-
-}
-
diff --git a/dynamicanimation/dynamicanimation/build.gradle b/dynamicanimation/dynamicanimation/build.gradle
index b3a6d81..29f51a5 100644
--- a/dynamicanimation/dynamicanimation/build.gradle
+++ b/dynamicanimation/dynamicanimation/build.gradle
@@ -19,7 +19,7 @@
}
androidx {
- name = "Android Support DynamicAnimation"
+ name = "DynamicAnimation"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.DYNAMICANIMATION
inceptionYear = "2017"
diff --git a/emoji/emoji-appcompat/api/public_plus_experimental_current.txt b/emoji/emoji-appcompat/api/public_plus_experimental_current.txt
deleted file mode 100644
index 78ba60b..0000000
--- a/emoji/emoji-appcompat/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-// Signature format: 4.0
-package androidx.emoji.widget {
-
- public class EmojiAppCompatButton extends androidx.appcompat.widget.AppCompatButton {
- ctor public EmojiAppCompatButton(android.content.Context!);
- ctor public EmojiAppCompatButton(android.content.Context!, android.util.AttributeSet!);
- ctor public EmojiAppCompatButton(android.content.Context!, android.util.AttributeSet!, int);
- }
-
- public class EmojiAppCompatEditText extends androidx.appcompat.widget.AppCompatEditText {
- ctor public EmojiAppCompatEditText(android.content.Context!);
- ctor public EmojiAppCompatEditText(android.content.Context!, android.util.AttributeSet!);
- ctor public EmojiAppCompatEditText(android.content.Context!, android.util.AttributeSet!, int);
- method public int getMaxEmojiCount();
- method public void setMaxEmojiCount(@IntRange(from=0) int);
- }
-
- public class EmojiAppCompatTextView extends androidx.appcompat.widget.AppCompatTextView {
- ctor public EmojiAppCompatTextView(android.content.Context!);
- ctor public EmojiAppCompatTextView(android.content.Context!, android.util.AttributeSet!);
- ctor public EmojiAppCompatTextView(android.content.Context!, android.util.AttributeSet!, int);
- }
-
-}
-
diff --git a/emoji/emoji-appcompat/build.gradle b/emoji/emoji-appcompat/build.gradle
index df0af37..b0e39af 100644
--- a/emoji/emoji-appcompat/build.gradle
+++ b/emoji/emoji-appcompat/build.gradle
@@ -27,7 +27,7 @@
}
androidx {
- name = "Android Emoji AppCompat"
+ name = "Emoji AppCompat"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.EMOJI
inceptionYear = "2017"
diff --git a/emoji/emoji-bundled/api/public_plus_experimental_current.txt b/emoji/emoji-bundled/api/public_plus_experimental_current.txt
deleted file mode 100644
index add1eb8..0000000
--- a/emoji/emoji-bundled/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-// Signature format: 4.0
-package androidx.emoji.bundled {
-
- public class BundledEmojiCompatConfig extends androidx.emoji.text.EmojiCompat.Config {
- ctor public BundledEmojiCompatConfig(android.content.Context);
- }
-
-}
-
diff --git a/emoji/emoji-bundled/build.gradle b/emoji/emoji-bundled/build.gradle
index d757fb1..3414c36 100644
--- a/emoji/emoji-bundled/build.gradle
+++ b/emoji/emoji-bundled/build.gradle
@@ -21,7 +21,7 @@
}
androidx {
- name = "Android Emoji Compat"
+ name = "Emoji Bundled"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.EMOJI
inceptionYear = "2017"
diff --git a/emoji/emoji/api/current.txt b/emoji/emoji/api/current.txt
index c472e4e..7991572 100644
--- a/emoji/emoji/api/current.txt
+++ b/emoji/emoji/api/current.txt
@@ -85,9 +85,9 @@
}
@AnyThread @RequiresApi(19) public final class MetadataRepo {
+ method public static androidx.emoji.text.MetadataRepo! create(android.content.res.AssetManager, String!) throws java.io.IOException;
method public static androidx.emoji.text.MetadataRepo! create(android.graphics.Typeface, java.io.InputStream) throws java.io.IOException;
method public static androidx.emoji.text.MetadataRepo! create(android.graphics.Typeface, java.nio.ByteBuffer) throws java.io.IOException;
- method public static androidx.emoji.text.MetadataRepo! create(android.content.res.AssetManager, String!) throws java.io.IOException;
}
}
diff --git a/emoji/emoji/api/public_plus_experimental_current.txt b/emoji/emoji/api/public_plus_experimental_current.txt
deleted file mode 100644
index c472e4e..0000000
--- a/emoji/emoji/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,147 +0,0 @@
-// Signature format: 4.0
-package androidx.emoji.text {
-
- @AnyThread public class EmojiCompat {
- method public static androidx.emoji.text.EmojiCompat! get();
- method public String getAssetSignature();
- method public int getLoadState();
- method public static boolean handleDeleteSurroundingText(android.view.inputmethod.InputConnection, android.text.Editable, @IntRange(from=0) int, @IntRange(from=0) int, boolean);
- method public static boolean handleOnKeyDown(android.text.Editable, int, android.view.KeyEvent!);
- method public boolean hasEmojiGlyph(CharSequence);
- method public boolean hasEmojiGlyph(CharSequence, @IntRange(from=0) int);
- method public static androidx.emoji.text.EmojiCompat! init(androidx.emoji.text.EmojiCompat.Config);
- method public void load();
- method @CheckResult public CharSequence! process(CharSequence);
- method @CheckResult public CharSequence! process(CharSequence, @IntRange(from=0) int, @IntRange(from=0) int);
- method @CheckResult public CharSequence! process(CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int);
- method @CheckResult public CharSequence! process(CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int, int);
- method public void registerInitCallback(androidx.emoji.text.EmojiCompat.InitCallback);
- method public void unregisterInitCallback(androidx.emoji.text.EmojiCompat.InitCallback);
- field public static final String EDITOR_INFO_METAVERSION_KEY = "android.support.text.emoji.emojiCompat_metadataVersion";
- field public static final String EDITOR_INFO_REPLACE_ALL_KEY = "android.support.text.emoji.emojiCompat_replaceAll";
- field public static final int LOAD_STATE_DEFAULT = 3; // 0x3
- field public static final int LOAD_STATE_FAILED = 2; // 0x2
- field public static final int LOAD_STATE_LOADING = 0; // 0x0
- field public static final int LOAD_STATE_SUCCEEDED = 1; // 0x1
- field public static final int LOAD_STRATEGY_DEFAULT = 0; // 0x0
- field public static final int LOAD_STRATEGY_MANUAL = 1; // 0x1
- field public static final int REPLACE_STRATEGY_ALL = 1; // 0x1
- field public static final int REPLACE_STRATEGY_DEFAULT = 0; // 0x0
- field public static final int REPLACE_STRATEGY_NON_EXISTENT = 2; // 0x2
- }
-
- public abstract static class EmojiCompat.Config {
- ctor protected EmojiCompat.Config(androidx.emoji.text.EmojiCompat.MetadataRepoLoader);
- method protected final androidx.emoji.text.EmojiCompat.MetadataRepoLoader! getMetadataRepoLoader();
- method public androidx.emoji.text.EmojiCompat.Config! registerInitCallback(androidx.emoji.text.EmojiCompat.InitCallback);
- method public androidx.emoji.text.EmojiCompat.Config! setEmojiSpanIndicatorColor(@ColorInt int);
- method public androidx.emoji.text.EmojiCompat.Config! setEmojiSpanIndicatorEnabled(boolean);
- method public androidx.emoji.text.EmojiCompat.Config setGlyphChecker(androidx.emoji.text.EmojiCompat.GlyphChecker);
- method public androidx.emoji.text.EmojiCompat.Config! setMetadataLoadStrategy(int);
- method public androidx.emoji.text.EmojiCompat.Config! setReplaceAll(boolean);
- method public androidx.emoji.text.EmojiCompat.Config! setUseEmojiAsDefaultStyle(boolean);
- method public androidx.emoji.text.EmojiCompat.Config! setUseEmojiAsDefaultStyle(boolean, java.util.List<java.lang.Integer!>?);
- method public androidx.emoji.text.EmojiCompat.Config! unregisterInitCallback(androidx.emoji.text.EmojiCompat.InitCallback);
- }
-
- public static interface EmojiCompat.GlyphChecker {
- method public boolean hasGlyph(CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int);
- }
-
- public abstract static class EmojiCompat.InitCallback {
- ctor public EmojiCompat.InitCallback();
- method public void onFailed(Throwable?);
- method public void onInitialized();
- }
-
- public static interface EmojiCompat.MetadataRepoLoader {
- method public void load(androidx.emoji.text.EmojiCompat.MetadataRepoLoaderCallback);
- }
-
- public abstract static class EmojiCompat.MetadataRepoLoaderCallback {
- ctor public EmojiCompat.MetadataRepoLoaderCallback();
- method public abstract void onFailed(Throwable?);
- method public abstract void onLoaded(androidx.emoji.text.MetadataRepo);
- }
-
- @RequiresApi(19) public abstract class EmojiSpan extends android.text.style.ReplacementSpan {
- method public int getSize(android.graphics.Paint, CharSequence!, int, int, android.graphics.Paint.FontMetricsInt!);
- }
-
- public class FontRequestEmojiCompatConfig extends androidx.emoji.text.EmojiCompat.Config {
- ctor public FontRequestEmojiCompatConfig(android.content.Context, androidx.core.provider.FontRequest);
- method public androidx.emoji.text.FontRequestEmojiCompatConfig! setHandler(android.os.Handler!);
- method public androidx.emoji.text.FontRequestEmojiCompatConfig! setRetryPolicy(androidx.emoji.text.FontRequestEmojiCompatConfig.RetryPolicy!);
- }
-
- public static class FontRequestEmojiCompatConfig.ExponentialBackoffRetryPolicy extends androidx.emoji.text.FontRequestEmojiCompatConfig.RetryPolicy {
- ctor public FontRequestEmojiCompatConfig.ExponentialBackoffRetryPolicy(long);
- method public long getRetryDelay();
- }
-
- public abstract static class FontRequestEmojiCompatConfig.RetryPolicy {
- ctor public FontRequestEmojiCompatConfig.RetryPolicy();
- method public abstract long getRetryDelay();
- }
-
- @AnyThread @RequiresApi(19) public final class MetadataRepo {
- method public static androidx.emoji.text.MetadataRepo! create(android.graphics.Typeface, java.io.InputStream) throws java.io.IOException;
- method public static androidx.emoji.text.MetadataRepo! create(android.graphics.Typeface, java.nio.ByteBuffer) throws java.io.IOException;
- method public static androidx.emoji.text.MetadataRepo! create(android.content.res.AssetManager, String!) throws java.io.IOException;
- }
-
-}
-
-package androidx.emoji.widget {
-
- public class EmojiButton extends android.widget.Button {
- ctor public EmojiButton(android.content.Context!);
- ctor public EmojiButton(android.content.Context!, android.util.AttributeSet!);
- ctor public EmojiButton(android.content.Context!, android.util.AttributeSet!, int);
- ctor @RequiresApi(android.os.Build.VERSION_CODES.LOLLIPOP) public EmojiButton(android.content.Context!, android.util.AttributeSet!, int, int);
- }
-
- public class EmojiEditText extends android.widget.EditText {
- ctor public EmojiEditText(android.content.Context!);
- ctor public EmojiEditText(android.content.Context!, android.util.AttributeSet!);
- ctor public EmojiEditText(android.content.Context!, android.util.AttributeSet!, int);
- ctor @RequiresApi(android.os.Build.VERSION_CODES.LOLLIPOP) public EmojiEditText(android.content.Context!, android.util.AttributeSet!, int, int);
- method public int getMaxEmojiCount();
- method public void setMaxEmojiCount(@IntRange(from=0) int);
- }
-
- public final class EmojiEditTextHelper {
- ctor public EmojiEditTextHelper(android.widget.EditText);
- method public android.text.method.KeyListener getKeyListener(android.text.method.KeyListener);
- method public int getMaxEmojiCount();
- method public android.view.inputmethod.InputConnection? onCreateInputConnection(android.view.inputmethod.InputConnection?, android.view.inputmethod.EditorInfo);
- method public void setMaxEmojiCount(@IntRange(from=0) int);
- }
-
- public class EmojiExtractTextLayout extends android.widget.LinearLayout {
- ctor public EmojiExtractTextLayout(android.content.Context!);
- ctor public EmojiExtractTextLayout(android.content.Context!, android.util.AttributeSet?);
- ctor public EmojiExtractTextLayout(android.content.Context!, android.util.AttributeSet?, int);
- ctor @RequiresApi(api=android.os.Build.VERSION_CODES.LOLLIPOP) public EmojiExtractTextLayout(android.content.Context!, android.util.AttributeSet!, int, int);
- method public int getEmojiReplaceStrategy();
- method public void onUpdateExtractingViews(android.inputmethodservice.InputMethodService!, android.view.inputmethod.EditorInfo!);
- method public void setEmojiReplaceStrategy(int);
- }
-
- public class EmojiTextView extends android.widget.TextView {
- ctor public EmojiTextView(android.content.Context!);
- ctor public EmojiTextView(android.content.Context!, android.util.AttributeSet!);
- ctor public EmojiTextView(android.content.Context!, android.util.AttributeSet!, int);
- ctor @RequiresApi(api=android.os.Build.VERSION_CODES.LOLLIPOP) public EmojiTextView(android.content.Context!, android.util.AttributeSet!, int, int);
- }
-
- public final class EmojiTextViewHelper {
- ctor public EmojiTextViewHelper(android.widget.TextView);
- method public android.text.InputFilter![] getFilters(android.text.InputFilter![]);
- method public void setAllCaps(boolean);
- method public void updateTransformationMethod();
- method public android.text.method.TransformationMethod? wrapTransformationMethod(android.text.method.TransformationMethod?);
- }
-
-}
-
diff --git a/emoji/emoji/api/restricted_current.txt b/emoji/emoji/api/restricted_current.txt
index dd1967a..5578fbe 100644
--- a/emoji/emoji/api/restricted_current.txt
+++ b/emoji/emoji/api/restricted_current.txt
@@ -16,8 +16,8 @@
method @CheckResult public CharSequence! process(CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int);
method @CheckResult public CharSequence! process(CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int, @androidx.emoji.text.EmojiCompat.ReplaceStrategy int);
method public void registerInitCallback(androidx.emoji.text.EmojiCompat.InitCallback);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @VisibleForTesting public static androidx.emoji.text.EmojiCompat! reset(androidx.emoji.text.EmojiCompat.Config);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @VisibleForTesting public static androidx.emoji.text.EmojiCompat! reset(androidx.emoji.text.EmojiCompat!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @VisibleForTesting public static androidx.emoji.text.EmojiCompat! reset(androidx.emoji.text.EmojiCompat.Config);
method public void unregisterInitCallback(androidx.emoji.text.EmojiCompat.InitCallback);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void updateEditorInfoAttrs(android.view.inputmethod.EditorInfo);
field public static final String EDITOR_INFO_METAVERSION_KEY = "android.support.text.emoji.emojiCompat_metadataVersion";
@@ -128,9 +128,9 @@
}
@AnyThread @RequiresApi(19) public final class MetadataRepo {
+ method public static androidx.emoji.text.MetadataRepo! create(android.content.res.AssetManager, String!) throws java.io.IOException;
method public static androidx.emoji.text.MetadataRepo! create(android.graphics.Typeface, java.io.InputStream) throws java.io.IOException;
method public static androidx.emoji.text.MetadataRepo! create(android.graphics.Typeface, java.nio.ByteBuffer) throws java.io.IOException;
- method public static androidx.emoji.text.MetadataRepo! create(android.content.res.AssetManager, String!) throws java.io.IOException;
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public char[]! getEmojiCharArray();
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.text.emoji.flatbuffer.MetadataList! getMetadataList();
}
diff --git a/emoji/emoji/build.gradle b/emoji/emoji/build.gradle
index 5e135b6..cfb14e4 100644
--- a/emoji/emoji/build.gradle
+++ b/emoji/emoji/build.gradle
@@ -54,7 +54,7 @@
}
androidx {
- name = "Android Emoji Compat"
+ name = "Emoji"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.EMOJI
inceptionYear = "2017"
diff --git a/emoji2/emoji2-bundled/api/public_plus_experimental_current.txt b/emoji2/emoji2-bundled/api/1.4.0-beta04.txt
similarity index 100%
rename from emoji2/emoji2-bundled/api/public_plus_experimental_current.txt
rename to emoji2/emoji2-bundled/api/1.4.0-beta04.txt
diff --git a/emoji2/emoji2-bundled/api/res-1.4.0-beta04.txt b/emoji2/emoji2-bundled/api/res-1.4.0-beta04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/emoji2/emoji2-bundled/api/res-1.4.0-beta04.txt
diff --git a/emoji2/emoji2-bundled/api/public_plus_experimental_current.txt b/emoji2/emoji2-bundled/api/restricted_1.4.0-beta04.txt
similarity index 100%
copy from emoji2/emoji2-bundled/api/public_plus_experimental_current.txt
copy to emoji2/emoji2-bundled/api/restricted_1.4.0-beta04.txt
diff --git a/emoji2/emoji2-bundled/build.gradle b/emoji2/emoji2-bundled/build.gradle
index 5be609e..da5a158 100644
--- a/emoji2/emoji2-bundled/build.gradle
+++ b/emoji2/emoji2-bundled/build.gradle
@@ -46,7 +46,7 @@
}
androidx {
- name = "Android Emoji2 Compat"
+ name = "Emoji2 Bundled"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2017"
description = "Library bundled with assets to enable emoji compatibility in Kitkat and newer " +
diff --git a/emoji2/emoji2-emojipicker/api/1.4.0-beta03.txt b/emoji2/emoji2-emojipicker/api/1.4.0-beta03.txt
index e2360fa..65d3ad7 100644
--- a/emoji2/emoji2-emojipicker/api/1.4.0-beta03.txt
+++ b/emoji2/emoji2-emojipicker/api/1.4.0-beta03.txt
@@ -2,9 +2,9 @@
package androidx.emoji2.emojipicker {
public final class EmojiPickerView extends android.widget.FrameLayout {
- ctor public EmojiPickerView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
- ctor public EmojiPickerView(android.content.Context context, optional android.util.AttributeSet? attrs);
ctor public EmojiPickerView(android.content.Context context);
+ ctor public EmojiPickerView(android.content.Context context, optional android.util.AttributeSet? attrs);
+ ctor public EmojiPickerView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
method public int getEmojiGridColumns();
method public float getEmojiGridRows();
method public void setEmojiGridColumns(int);
diff --git a/emoji2/emoji2-emojipicker/api/public_plus_experimental_current.txt b/emoji2/emoji2-emojipicker/api/1.4.0-beta04.txt
similarity index 99%
rename from emoji2/emoji2-emojipicker/api/public_plus_experimental_current.txt
rename to emoji2/emoji2-emojipicker/api/1.4.0-beta04.txt
index e2360fa..65d3ad7 100644
--- a/emoji2/emoji2-emojipicker/api/public_plus_experimental_current.txt
+++ b/emoji2/emoji2-emojipicker/api/1.4.0-beta04.txt
@@ -2,9 +2,9 @@
package androidx.emoji2.emojipicker {
public final class EmojiPickerView extends android.widget.FrameLayout {
- ctor public EmojiPickerView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
- ctor public EmojiPickerView(android.content.Context context, optional android.util.AttributeSet? attrs);
ctor public EmojiPickerView(android.content.Context context);
+ ctor public EmojiPickerView(android.content.Context context, optional android.util.AttributeSet? attrs);
+ ctor public EmojiPickerView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
method public int getEmojiGridColumns();
method public float getEmojiGridRows();
method public void setEmojiGridColumns(int);
diff --git a/emoji2/emoji2-emojipicker/api/current.txt b/emoji2/emoji2-emojipicker/api/current.txt
index e2360fa..65d3ad7 100644
--- a/emoji2/emoji2-emojipicker/api/current.txt
+++ b/emoji2/emoji2-emojipicker/api/current.txt
@@ -2,9 +2,9 @@
package androidx.emoji2.emojipicker {
public final class EmojiPickerView extends android.widget.FrameLayout {
- ctor public EmojiPickerView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
- ctor public EmojiPickerView(android.content.Context context, optional android.util.AttributeSet? attrs);
ctor public EmojiPickerView(android.content.Context context);
+ ctor public EmojiPickerView(android.content.Context context, optional android.util.AttributeSet? attrs);
+ ctor public EmojiPickerView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
method public int getEmojiGridColumns();
method public float getEmojiGridRows();
method public void setEmojiGridColumns(int);
diff --git a/emoji2/emoji2-emojipicker/api/public_plus_experimental_1.4.0-beta03.txt b/emoji2/emoji2-emojipicker/api/public_plus_experimental_1.4.0-beta03.txt
index e2360fa..65d3ad7 100644
--- a/emoji2/emoji2-emojipicker/api/public_plus_experimental_1.4.0-beta03.txt
+++ b/emoji2/emoji2-emojipicker/api/public_plus_experimental_1.4.0-beta03.txt
@@ -2,9 +2,9 @@
package androidx.emoji2.emojipicker {
public final class EmojiPickerView extends android.widget.FrameLayout {
- ctor public EmojiPickerView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
- ctor public EmojiPickerView(android.content.Context context, optional android.util.AttributeSet? attrs);
ctor public EmojiPickerView(android.content.Context context);
+ ctor public EmojiPickerView(android.content.Context context, optional android.util.AttributeSet? attrs);
+ ctor public EmojiPickerView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
method public int getEmojiGridColumns();
method public float getEmojiGridRows();
method public void setEmojiGridColumns(int);
diff --git a/emoji2/emoji2-emojipicker/api/res-1.4.0-beta04.txt b/emoji2/emoji2-emojipicker/api/res-1.4.0-beta04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/api/res-1.4.0-beta04.txt
diff --git a/emoji2/emoji2-emojipicker/api/restricted_1.4.0-beta03.txt b/emoji2/emoji2-emojipicker/api/restricted_1.4.0-beta03.txt
index e2360fa..65d3ad7 100644
--- a/emoji2/emoji2-emojipicker/api/restricted_1.4.0-beta03.txt
+++ b/emoji2/emoji2-emojipicker/api/restricted_1.4.0-beta03.txt
@@ -2,9 +2,9 @@
package androidx.emoji2.emojipicker {
public final class EmojiPickerView extends android.widget.FrameLayout {
- ctor public EmojiPickerView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
- ctor public EmojiPickerView(android.content.Context context, optional android.util.AttributeSet? attrs);
ctor public EmojiPickerView(android.content.Context context);
+ ctor public EmojiPickerView(android.content.Context context, optional android.util.AttributeSet? attrs);
+ ctor public EmojiPickerView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
method public int getEmojiGridColumns();
method public float getEmojiGridRows();
method public void setEmojiGridColumns(int);
diff --git a/emoji2/emoji2-emojipicker/api/public_plus_experimental_current.txt b/emoji2/emoji2-emojipicker/api/restricted_1.4.0-beta04.txt
similarity index 99%
copy from emoji2/emoji2-emojipicker/api/public_plus_experimental_current.txt
copy to emoji2/emoji2-emojipicker/api/restricted_1.4.0-beta04.txt
index e2360fa..65d3ad7 100644
--- a/emoji2/emoji2-emojipicker/api/public_plus_experimental_current.txt
+++ b/emoji2/emoji2-emojipicker/api/restricted_1.4.0-beta04.txt
@@ -2,9 +2,9 @@
package androidx.emoji2.emojipicker {
public final class EmojiPickerView extends android.widget.FrameLayout {
- ctor public EmojiPickerView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
- ctor public EmojiPickerView(android.content.Context context, optional android.util.AttributeSet? attrs);
ctor public EmojiPickerView(android.content.Context context);
+ ctor public EmojiPickerView(android.content.Context context, optional android.util.AttributeSet? attrs);
+ ctor public EmojiPickerView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
method public int getEmojiGridColumns();
method public float getEmojiGridRows();
method public void setEmojiGridColumns(int);
diff --git a/emoji2/emoji2-emojipicker/api/restricted_current.txt b/emoji2/emoji2-emojipicker/api/restricted_current.txt
index e2360fa..65d3ad7 100644
--- a/emoji2/emoji2-emojipicker/api/restricted_current.txt
+++ b/emoji2/emoji2-emojipicker/api/restricted_current.txt
@@ -2,9 +2,9 @@
package androidx.emoji2.emojipicker {
public final class EmojiPickerView extends android.widget.FrameLayout {
- ctor public EmojiPickerView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
- ctor public EmojiPickerView(android.content.Context context, optional android.util.AttributeSet? attrs);
ctor public EmojiPickerView(android.content.Context context);
+ ctor public EmojiPickerView(android.content.Context context, optional android.util.AttributeSet? attrs);
+ ctor public EmojiPickerView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
method public int getEmojiGridColumns();
method public float getEmojiGridRows();
method public void setEmojiGridColumns(int);
diff --git a/emoji2/emoji2-emojipicker/build.gradle b/emoji2/emoji2-emojipicker/build.gradle
index 2ab0c6a..0761e00 100644
--- a/emoji2/emoji2-emojipicker/build.gradle
+++ b/emoji2/emoji2-emojipicker/build.gradle
@@ -57,7 +57,7 @@
}
androidx {
- name = "androidx.emoji2:emoji2-emojipicker"
+ name = "Emoji2 Emoji Picker"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2022"
description = "This library provides the latest emoji support and emoji picker UI to input " +
diff --git a/emoji2/emoji2-emojipicker/src/androidTest/java/androidx/emoji2/emojipicker/EmojiPickerViewTest.kt b/emoji2/emoji2-emojipicker/src/androidTest/java/androidx/emoji2/emojipicker/EmojiPickerViewTest.kt
index f6bbac1..77f976d 100644
--- a/emoji2/emoji2-emojipicker/src/androidTest/java/androidx/emoji2/emojipicker/EmojiPickerViewTest.kt
+++ b/emoji2/emoji2-emojipicker/src/androidTest/java/androidx/emoji2/emojipicker/EmojiPickerViewTest.kt
@@ -16,7 +16,6 @@
package androidx.emoji2.emojipicker
-import androidx.emoji2.emojipicker.R as EmojiPickerViewR
import android.app.Activity
import android.content.Context
import android.os.Bundle
@@ -25,6 +24,7 @@
import android.widget.ImageView
import androidx.core.view.children
import androidx.core.view.isVisible
+import androidx.emoji2.emojipicker.R as EmojiPickerViewR
import androidx.emoji2.emojipicker.test.R
import androidx.recyclerview.widget.RecyclerView
import androidx.test.core.app.ApplicationProvider
diff --git a/emoji2/emoji2-views-helper/api/public_plus_experimental_current.txt b/emoji2/emoji2-views-helper/api/1.4.0-beta04.txt
similarity index 100%
rename from emoji2/emoji2-views-helper/api/public_plus_experimental_current.txt
rename to emoji2/emoji2-views-helper/api/1.4.0-beta04.txt
diff --git a/emoji2/emoji2-views-helper/api/res-1.4.0-beta04.txt b/emoji2/emoji2-views-helper/api/res-1.4.0-beta04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/emoji2/emoji2-views-helper/api/res-1.4.0-beta04.txt
diff --git a/emoji2/emoji2-views-helper/api/public_plus_experimental_current.txt b/emoji2/emoji2-views-helper/api/restricted_1.4.0-beta04.txt
similarity index 100%
copy from emoji2/emoji2-views-helper/api/public_plus_experimental_current.txt
copy to emoji2/emoji2-views-helper/api/restricted_1.4.0-beta04.txt
diff --git a/emoji2/emoji2-views-helper/build.gradle b/emoji2/emoji2-views-helper/build.gradle
index ed51ab7..62b7b69 100644
--- a/emoji2/emoji2-views-helper/build.gradle
+++ b/emoji2/emoji2-views-helper/build.gradle
@@ -27,8 +27,8 @@
}
androidx {
- name = "Android Emoji2 Compat view helpers"
+ name = "Emoji2 Views Helper"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2017"
- description = "View helpers for Emoji2"
+ description = "Provide helper classes for Emoji2 views."
}
diff --git a/emoji2/emoji2-views/api/public_plus_experimental_current.txt b/emoji2/emoji2-views/api/1.4.0-beta04.txt
similarity index 100%
rename from emoji2/emoji2-views/api/public_plus_experimental_current.txt
rename to emoji2/emoji2-views/api/1.4.0-beta04.txt
diff --git a/emoji2/emoji2-views/api/res-1.4.0-beta04.txt b/emoji2/emoji2-views/api/res-1.4.0-beta04.txt
new file mode 100644
index 0000000..8bc8423
--- /dev/null
+++ b/emoji2/emoji2-views/api/res-1.4.0-beta04.txt
@@ -0,0 +1,2 @@
+attr emojiReplaceStrategy
+attr maxEmojiCount
diff --git a/emoji2/emoji2-views/api/public_plus_experimental_current.txt b/emoji2/emoji2-views/api/restricted_1.4.0-beta04.txt
similarity index 100%
copy from emoji2/emoji2-views/api/public_plus_experimental_current.txt
copy to emoji2/emoji2-views/api/restricted_1.4.0-beta04.txt
diff --git a/emoji2/emoji2-views/build.gradle b/emoji2/emoji2-views/build.gradle
index 597d3b1..eae7eb2 100644
--- a/emoji2/emoji2-views/build.gradle
+++ b/emoji2/emoji2-views/build.gradle
@@ -33,7 +33,7 @@
}
androidx {
- name = "Android Emoji2 Compat Views"
+ name = "Emoji2 Views"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2017"
description = "Support for using emoji2 directly with Android Views, for use in apps without " +
diff --git a/emoji2/emoji2/api/1.4.0-beta03.txt b/emoji2/emoji2/api/1.4.0-beta03.txt
index 11d9335..42809f9 100644
--- a/emoji2/emoji2/api/1.4.0-beta03.txt
+++ b/emoji2/emoji2/api/1.4.0-beta03.txt
@@ -111,9 +111,9 @@
}
@AnyThread @RequiresApi(19) public final class MetadataRepo {
+ method public static androidx.emoji2.text.MetadataRepo create(android.content.res.AssetManager, String) throws java.io.IOException;
method public static androidx.emoji2.text.MetadataRepo create(android.graphics.Typeface, java.io.InputStream) throws java.io.IOException;
method public static androidx.emoji2.text.MetadataRepo create(android.graphics.Typeface, java.nio.ByteBuffer) throws java.io.IOException;
- method public static androidx.emoji2.text.MetadataRepo create(android.content.res.AssetManager, String) throws java.io.IOException;
}
@AnyThread @RequiresApi(19) public class TypefaceEmojiRasterizer {
diff --git a/emoji2/emoji2/api/public_plus_experimental_current.txt b/emoji2/emoji2/api/1.4.0-beta04.txt
similarity index 99%
rename from emoji2/emoji2/api/public_plus_experimental_current.txt
rename to emoji2/emoji2/api/1.4.0-beta04.txt
index 11d9335..42809f9 100644
--- a/emoji2/emoji2/api/public_plus_experimental_current.txt
+++ b/emoji2/emoji2/api/1.4.0-beta04.txt
@@ -111,9 +111,9 @@
}
@AnyThread @RequiresApi(19) public final class MetadataRepo {
+ method public static androidx.emoji2.text.MetadataRepo create(android.content.res.AssetManager, String) throws java.io.IOException;
method public static androidx.emoji2.text.MetadataRepo create(android.graphics.Typeface, java.io.InputStream) throws java.io.IOException;
method public static androidx.emoji2.text.MetadataRepo create(android.graphics.Typeface, java.nio.ByteBuffer) throws java.io.IOException;
- method public static androidx.emoji2.text.MetadataRepo create(android.content.res.AssetManager, String) throws java.io.IOException;
}
@AnyThread @RequiresApi(19) public class TypefaceEmojiRasterizer {
diff --git a/emoji2/emoji2/api/current.txt b/emoji2/emoji2/api/current.txt
index 11d9335..42809f9 100644
--- a/emoji2/emoji2/api/current.txt
+++ b/emoji2/emoji2/api/current.txt
@@ -111,9 +111,9 @@
}
@AnyThread @RequiresApi(19) public final class MetadataRepo {
+ method public static androidx.emoji2.text.MetadataRepo create(android.content.res.AssetManager, String) throws java.io.IOException;
method public static androidx.emoji2.text.MetadataRepo create(android.graphics.Typeface, java.io.InputStream) throws java.io.IOException;
method public static androidx.emoji2.text.MetadataRepo create(android.graphics.Typeface, java.nio.ByteBuffer) throws java.io.IOException;
- method public static androidx.emoji2.text.MetadataRepo create(android.content.res.AssetManager, String) throws java.io.IOException;
}
@AnyThread @RequiresApi(19) public class TypefaceEmojiRasterizer {
diff --git a/emoji2/emoji2/api/public_plus_experimental_1.4.0-beta03.txt b/emoji2/emoji2/api/public_plus_experimental_1.4.0-beta03.txt
index 11d9335..42809f9 100644
--- a/emoji2/emoji2/api/public_plus_experimental_1.4.0-beta03.txt
+++ b/emoji2/emoji2/api/public_plus_experimental_1.4.0-beta03.txt
@@ -111,9 +111,9 @@
}
@AnyThread @RequiresApi(19) public final class MetadataRepo {
+ method public static androidx.emoji2.text.MetadataRepo create(android.content.res.AssetManager, String) throws java.io.IOException;
method public static androidx.emoji2.text.MetadataRepo create(android.graphics.Typeface, java.io.InputStream) throws java.io.IOException;
method public static androidx.emoji2.text.MetadataRepo create(android.graphics.Typeface, java.nio.ByteBuffer) throws java.io.IOException;
- method public static androidx.emoji2.text.MetadataRepo create(android.content.res.AssetManager, String) throws java.io.IOException;
}
@AnyThread @RequiresApi(19) public class TypefaceEmojiRasterizer {
diff --git a/emoji2/emoji2/api/res-1.4.0-beta04.txt b/emoji2/emoji2/api/res-1.4.0-beta04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/emoji2/emoji2/api/res-1.4.0-beta04.txt
diff --git a/emoji2/emoji2/api/restricted_1.4.0-beta03.txt b/emoji2/emoji2/api/restricted_1.4.0-beta03.txt
index 11d9335..42809f9 100644
--- a/emoji2/emoji2/api/restricted_1.4.0-beta03.txt
+++ b/emoji2/emoji2/api/restricted_1.4.0-beta03.txt
@@ -111,9 +111,9 @@
}
@AnyThread @RequiresApi(19) public final class MetadataRepo {
+ method public static androidx.emoji2.text.MetadataRepo create(android.content.res.AssetManager, String) throws java.io.IOException;
method public static androidx.emoji2.text.MetadataRepo create(android.graphics.Typeface, java.io.InputStream) throws java.io.IOException;
method public static androidx.emoji2.text.MetadataRepo create(android.graphics.Typeface, java.nio.ByteBuffer) throws java.io.IOException;
- method public static androidx.emoji2.text.MetadataRepo create(android.content.res.AssetManager, String) throws java.io.IOException;
}
@AnyThread @RequiresApi(19) public class TypefaceEmojiRasterizer {
diff --git a/emoji2/emoji2/api/public_plus_experimental_current.txt b/emoji2/emoji2/api/restricted_1.4.0-beta04.txt
similarity index 99%
copy from emoji2/emoji2/api/public_plus_experimental_current.txt
copy to emoji2/emoji2/api/restricted_1.4.0-beta04.txt
index 11d9335..42809f9 100644
--- a/emoji2/emoji2/api/public_plus_experimental_current.txt
+++ b/emoji2/emoji2/api/restricted_1.4.0-beta04.txt
@@ -111,9 +111,9 @@
}
@AnyThread @RequiresApi(19) public final class MetadataRepo {
+ method public static androidx.emoji2.text.MetadataRepo create(android.content.res.AssetManager, String) throws java.io.IOException;
method public static androidx.emoji2.text.MetadataRepo create(android.graphics.Typeface, java.io.InputStream) throws java.io.IOException;
method public static androidx.emoji2.text.MetadataRepo create(android.graphics.Typeface, java.nio.ByteBuffer) throws java.io.IOException;
- method public static androidx.emoji2.text.MetadataRepo create(android.content.res.AssetManager, String) throws java.io.IOException;
}
@AnyThread @RequiresApi(19) public class TypefaceEmojiRasterizer {
diff --git a/emoji2/emoji2/api/restricted_current.txt b/emoji2/emoji2/api/restricted_current.txt
index 11d9335..42809f9 100644
--- a/emoji2/emoji2/api/restricted_current.txt
+++ b/emoji2/emoji2/api/restricted_current.txt
@@ -111,9 +111,9 @@
}
@AnyThread @RequiresApi(19) public final class MetadataRepo {
+ method public static androidx.emoji2.text.MetadataRepo create(android.content.res.AssetManager, String) throws java.io.IOException;
method public static androidx.emoji2.text.MetadataRepo create(android.graphics.Typeface, java.io.InputStream) throws java.io.IOException;
method public static androidx.emoji2.text.MetadataRepo create(android.graphics.Typeface, java.nio.ByteBuffer) throws java.io.IOException;
- method public static androidx.emoji2.text.MetadataRepo create(android.content.res.AssetManager, String) throws java.io.IOException;
}
@AnyThread @RequiresApi(19) public class TypefaceEmojiRasterizer {
diff --git a/emoji2/emoji2/build.gradle b/emoji2/emoji2/build.gradle
index f1a2cdd..3ab8724 100644
--- a/emoji2/emoji2/build.gradle
+++ b/emoji2/emoji2/build.gradle
@@ -37,7 +37,7 @@
}
androidx {
- name = "Android Emoji2 Compat"
+ name = "Emoji2"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2017"
description = "Core library to enable emoji compatibility in Kitkat and newer devices to avoid the empty emoji characters."
diff --git a/enterprise/enterprise-feedback-testing/api/public_plus_experimental_current.txt b/enterprise/enterprise-feedback-testing/api/public_plus_experimental_current.txt
deleted file mode 100644
index c9b9e87..0000000
--- a/enterprise/enterprise-feedback-testing/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-// Signature format: 4.0
-package androidx.enterprise.feedback {
-
- public class FakeKeyedAppStatesReporter extends androidx.enterprise.feedback.KeyedAppStatesReporter {
- ctor public FakeKeyedAppStatesReporter();
- method public java.util.List<androidx.enterprise.feedback.KeyedAppState!> getKeyedAppStates();
- method public java.util.Map<java.lang.String!,androidx.enterprise.feedback.KeyedAppState!> getKeyedAppStatesByKey();
- method public int getNumberOfUploads();
- method public java.util.List<androidx.enterprise.feedback.KeyedAppState!> getOnDeviceKeyedAppStates();
- method public java.util.Map<java.lang.String!,androidx.enterprise.feedback.KeyedAppState!> getOnDeviceKeyedAppStatesByKey();
- method public java.util.List<androidx.enterprise.feedback.KeyedAppState!> getUploadedKeyedAppStates();
- method public java.util.Map<java.lang.String!,androidx.enterprise.feedback.KeyedAppState!> getUploadedKeyedAppStatesByKey();
- method @Deprecated public void setStates(java.util.Collection<androidx.enterprise.feedback.KeyedAppState!>);
- method @Deprecated public void setStatesImmediate(java.util.Collection<androidx.enterprise.feedback.KeyedAppState!>);
- }
-
-}
-
diff --git a/enterprise/enterprise-feedback/api/public_plus_experimental_current.txt b/enterprise/enterprise-feedback/api/public_plus_experimental_current.txt
deleted file mode 100644
index cd74364..0000000
--- a/enterprise/enterprise-feedback/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,72 +0,0 @@
-// Signature format: 4.0
-package androidx.enterprise.feedback {
-
- @com.google.auto.value.AutoValue public abstract class KeyedAppState {
- method public static androidx.enterprise.feedback.KeyedAppState.KeyedAppStateBuilder builder();
- method public abstract String? getData();
- method public abstract String getKey();
- method public static final int getMaxDataLength();
- method public static final int getMaxKeyLength();
- method public static final int getMaxMessageLength();
- method public abstract String? getMessage();
- method public abstract int getSeverity();
- field @Deprecated public static final int MAX_DATA_LENGTH = 1000; // 0x3e8
- field @Deprecated public static final int MAX_KEY_LENGTH = 100; // 0x64
- field @Deprecated public static final int MAX_MESSAGE_LENGTH = 1000; // 0x3e8
- field public static final int SEVERITY_ERROR = 2; // 0x2
- field public static final int SEVERITY_INFO = 1; // 0x1
- }
-
- @com.google.auto.value.AutoValue.Builder public abstract static class KeyedAppState.KeyedAppStateBuilder {
- method public androidx.enterprise.feedback.KeyedAppState build();
- method public abstract androidx.enterprise.feedback.KeyedAppState.KeyedAppStateBuilder setData(String?);
- method public abstract androidx.enterprise.feedback.KeyedAppState.KeyedAppStateBuilder setKey(String);
- method public abstract androidx.enterprise.feedback.KeyedAppState.KeyedAppStateBuilder setMessage(String?);
- method public abstract androidx.enterprise.feedback.KeyedAppState.KeyedAppStateBuilder setSeverity(int);
- }
-
- public interface KeyedAppStatesCallback {
- method public void onResult(int, Throwable?);
- field public static final int STATUS_EXCEEDED_BUFFER_ERROR = 3; // 0x3
- field public static final int STATUS_SUCCESS = 0; // 0x0
- field public static final int STATUS_TRANSACTION_TOO_LARGE_ERROR = 2; // 0x2
- field public static final int STATUS_UNKNOWN_ERROR = 1; // 0x1
- }
-
- public abstract class KeyedAppStatesReporter {
- method public static androidx.enterprise.feedback.KeyedAppStatesReporter create(android.content.Context);
- method public static androidx.enterprise.feedback.KeyedAppStatesReporter create(android.content.Context, java.util.concurrent.Executor);
- method @Deprecated public abstract void setStates(java.util.Collection<androidx.enterprise.feedback.KeyedAppState!>);
- method public void setStates(java.util.Collection<androidx.enterprise.feedback.KeyedAppState!>, androidx.enterprise.feedback.KeyedAppStatesCallback?);
- method @Deprecated public abstract void setStatesImmediate(java.util.Collection<androidx.enterprise.feedback.KeyedAppState!>);
- method public void setStatesImmediate(java.util.Collection<androidx.enterprise.feedback.KeyedAppState!>, androidx.enterprise.feedback.KeyedAppStatesCallback?);
- }
-
- public abstract class KeyedAppStatesService extends android.app.Service {
- ctor public KeyedAppStatesService();
- method public android.os.IBinder onBind(android.content.Intent);
- method public abstract void onReceive(java.util.Collection<androidx.enterprise.feedback.ReceivedKeyedAppState!>, boolean);
- }
-
- @com.google.auto.value.AutoValue public abstract class ReceivedKeyedAppState {
- method public static androidx.enterprise.feedback.ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder builder();
- method public abstract String? getData();
- method public abstract String getKey();
- method public abstract String? getMessage();
- method public abstract String getPackageName();
- method public abstract int getSeverity();
- method public abstract long getTimestamp();
- }
-
- @com.google.auto.value.AutoValue.Builder public abstract static class ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder {
- method public abstract androidx.enterprise.feedback.ReceivedKeyedAppState build();
- method public abstract androidx.enterprise.feedback.ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder setData(String?);
- method public abstract androidx.enterprise.feedback.ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder setKey(String);
- method public abstract androidx.enterprise.feedback.ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder setMessage(String?);
- method public abstract androidx.enterprise.feedback.ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder setPackageName(String);
- method public abstract androidx.enterprise.feedback.ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder setSeverity(int);
- method public abstract androidx.enterprise.feedback.ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder setTimestamp(long);
- }
-
-}
-
diff --git a/exifinterface/exifinterface/api/current.txt b/exifinterface/exifinterface/api/current.txt
index a1554c4..e2c3b54 100644
--- a/exifinterface/exifinterface/api/current.txt
+++ b/exifinterface/exifinterface/api/current.txt
@@ -3,10 +3,10 @@
public class ExifInterface {
ctor public ExifInterface(java.io.File) throws java.io.IOException;
- ctor public ExifInterface(String) throws java.io.IOException;
ctor public ExifInterface(java.io.FileDescriptor) throws java.io.IOException;
ctor public ExifInterface(java.io.InputStream) throws java.io.IOException;
ctor public ExifInterface(java.io.InputStream, int) throws java.io.IOException;
+ ctor public ExifInterface(String) throws java.io.IOException;
method public void flipHorizontally();
method public void flipVertically();
method public double getAltitude(double);
@@ -16,8 +16,8 @@
method public int getAttributeInt(String, int);
method public long[]? getAttributeRange(String);
method public Long? getGpsDateTime();
- method @Deprecated public boolean getLatLong(float[]!);
method public double[]? getLatLong();
+ method @Deprecated public boolean getLatLong(float[]!);
method public int getRotationDegrees();
method public byte[]? getThumbnail();
method public android.graphics.Bitmap? getThumbnailBitmap();
diff --git a/exifinterface/exifinterface/api/public_plus_experimental_current.txt b/exifinterface/exifinterface/api/public_plus_experimental_current.txt
deleted file mode 100644
index a1554c4..0000000
--- a/exifinterface/exifinterface/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,348 +0,0 @@
-// Signature format: 4.0
-package androidx.exifinterface.media {
-
- public class ExifInterface {
- ctor public ExifInterface(java.io.File) throws java.io.IOException;
- ctor public ExifInterface(String) throws java.io.IOException;
- ctor public ExifInterface(java.io.FileDescriptor) throws java.io.IOException;
- ctor public ExifInterface(java.io.InputStream) throws java.io.IOException;
- ctor public ExifInterface(java.io.InputStream, int) throws java.io.IOException;
- method public void flipHorizontally();
- method public void flipVertically();
- method public double getAltitude(double);
- method public String? getAttribute(String);
- method public byte[]? getAttributeBytes(String);
- method public double getAttributeDouble(String, double);
- method public int getAttributeInt(String, int);
- method public long[]? getAttributeRange(String);
- method public Long? getGpsDateTime();
- method @Deprecated public boolean getLatLong(float[]!);
- method public double[]? getLatLong();
- method public int getRotationDegrees();
- method public byte[]? getThumbnail();
- method public android.graphics.Bitmap? getThumbnailBitmap();
- method public byte[]? getThumbnailBytes();
- method public long[]? getThumbnailRange();
- method public boolean hasAttribute(String);
- method public boolean hasThumbnail();
- method public boolean isFlipped();
- method public static boolean isSupportedMimeType(String);
- method public boolean isThumbnailCompressed();
- method public void resetOrientation();
- method public void rotate(int);
- method public void saveAttributes() throws java.io.IOException;
- method public void setAltitude(double);
- method public void setAttribute(String, String?);
- method public void setGpsInfo(android.location.Location?);
- method public void setLatLong(double, double);
- field public static final short ALTITUDE_ABOVE_SEA_LEVEL = 0; // 0x0
- field public static final short ALTITUDE_BELOW_SEA_LEVEL = 1; // 0x1
- field public static final int[]! BITS_PER_SAMPLE_GREYSCALE_1;
- field public static final int[]! BITS_PER_SAMPLE_GREYSCALE_2;
- field public static final int[]! BITS_PER_SAMPLE_RGB;
- field public static final int COLOR_SPACE_S_RGB = 1; // 0x1
- field public static final int COLOR_SPACE_UNCALIBRATED = 65535; // 0xffff
- field public static final short CONTRAST_HARD = 2; // 0x2
- field public static final short CONTRAST_NORMAL = 0; // 0x0
- field public static final short CONTRAST_SOFT = 1; // 0x1
- field public static final int DATA_DEFLATE_ZIP = 8; // 0x8
- field public static final int DATA_HUFFMAN_COMPRESSED = 2; // 0x2
- field public static final int DATA_JPEG = 6; // 0x6
- field public static final int DATA_JPEG_COMPRESSED = 7; // 0x7
- field public static final int DATA_LOSSY_JPEG = 34892; // 0x884c
- field public static final int DATA_PACK_BITS_COMPRESSED = 32773; // 0x8005
- field public static final int DATA_UNCOMPRESSED = 1; // 0x1
- field public static final short EXPOSURE_MODE_AUTO = 0; // 0x0
- field public static final short EXPOSURE_MODE_AUTO_BRACKET = 2; // 0x2
- field public static final short EXPOSURE_MODE_MANUAL = 1; // 0x1
- field public static final short EXPOSURE_PROGRAM_ACTION = 6; // 0x6
- field public static final short EXPOSURE_PROGRAM_APERTURE_PRIORITY = 3; // 0x3
- field public static final short EXPOSURE_PROGRAM_CREATIVE = 5; // 0x5
- field public static final short EXPOSURE_PROGRAM_LANDSCAPE_MODE = 8; // 0x8
- field public static final short EXPOSURE_PROGRAM_MANUAL = 1; // 0x1
- field public static final short EXPOSURE_PROGRAM_NORMAL = 2; // 0x2
- field public static final short EXPOSURE_PROGRAM_NOT_DEFINED = 0; // 0x0
- field public static final short EXPOSURE_PROGRAM_PORTRAIT_MODE = 7; // 0x7
- field public static final short EXPOSURE_PROGRAM_SHUTTER_PRIORITY = 4; // 0x4
- field public static final short FILE_SOURCE_DSC = 3; // 0x3
- field public static final short FILE_SOURCE_OTHER = 0; // 0x0
- field public static final short FILE_SOURCE_REFLEX_SCANNER = 2; // 0x2
- field public static final short FILE_SOURCE_TRANSPARENT_SCANNER = 1; // 0x1
- field public static final short FLAG_FLASH_FIRED = 1; // 0x1
- field public static final short FLAG_FLASH_MODE_AUTO = 24; // 0x18
- field public static final short FLAG_FLASH_MODE_COMPULSORY_FIRING = 8; // 0x8
- field public static final short FLAG_FLASH_MODE_COMPULSORY_SUPPRESSION = 16; // 0x10
- field public static final short FLAG_FLASH_NO_FLASH_FUNCTION = 32; // 0x20
- field public static final short FLAG_FLASH_RED_EYE_SUPPORTED = 64; // 0x40
- field public static final short FLAG_FLASH_RETURN_LIGHT_DETECTED = 6; // 0x6
- field public static final short FLAG_FLASH_RETURN_LIGHT_NOT_DETECTED = 4; // 0x4
- field public static final short FORMAT_CHUNKY = 1; // 0x1
- field public static final short FORMAT_PLANAR = 2; // 0x2
- field public static final short GAIN_CONTROL_HIGH_GAIN_DOWN = 4; // 0x4
- field public static final short GAIN_CONTROL_HIGH_GAIN_UP = 2; // 0x2
- field public static final short GAIN_CONTROL_LOW_GAIN_DOWN = 3; // 0x3
- field public static final short GAIN_CONTROL_LOW_GAIN_UP = 1; // 0x1
- field public static final short GAIN_CONTROL_NONE = 0; // 0x0
- field public static final String GPS_DIRECTION_MAGNETIC = "M";
- field public static final String GPS_DIRECTION_TRUE = "T";
- field public static final String GPS_DISTANCE_KILOMETERS = "K";
- field public static final String GPS_DISTANCE_MILES = "M";
- field public static final String GPS_DISTANCE_NAUTICAL_MILES = "N";
- field public static final String GPS_MEASUREMENT_2D = "2";
- field public static final String GPS_MEASUREMENT_3D = "3";
- field public static final short GPS_MEASUREMENT_DIFFERENTIAL_CORRECTED = 1; // 0x1
- field public static final String GPS_MEASUREMENT_INTERRUPTED = "V";
- field public static final String GPS_MEASUREMENT_IN_PROGRESS = "A";
- field public static final short GPS_MEASUREMENT_NO_DIFFERENTIAL = 0; // 0x0
- field public static final String GPS_SPEED_KILOMETERS_PER_HOUR = "K";
- field public static final String GPS_SPEED_KNOTS = "N";
- field public static final String GPS_SPEED_MILES_PER_HOUR = "M";
- field public static final String LATITUDE_NORTH = "N";
- field public static final String LATITUDE_SOUTH = "S";
- field public static final short LIGHT_SOURCE_CLOUDY_WEATHER = 10; // 0xa
- field public static final short LIGHT_SOURCE_COOL_WHITE_FLUORESCENT = 14; // 0xe
- field public static final short LIGHT_SOURCE_D50 = 23; // 0x17
- field public static final short LIGHT_SOURCE_D55 = 20; // 0x14
- field public static final short LIGHT_SOURCE_D65 = 21; // 0x15
- field public static final short LIGHT_SOURCE_D75 = 22; // 0x16
- field public static final short LIGHT_SOURCE_DAYLIGHT = 1; // 0x1
- field public static final short LIGHT_SOURCE_DAYLIGHT_FLUORESCENT = 12; // 0xc
- field public static final short LIGHT_SOURCE_DAY_WHITE_FLUORESCENT = 13; // 0xd
- field public static final short LIGHT_SOURCE_FINE_WEATHER = 9; // 0x9
- field public static final short LIGHT_SOURCE_FLASH = 4; // 0x4
- field public static final short LIGHT_SOURCE_FLUORESCENT = 2; // 0x2
- field public static final short LIGHT_SOURCE_ISO_STUDIO_TUNGSTEN = 24; // 0x18
- field public static final short LIGHT_SOURCE_OTHER = 255; // 0xff
- field public static final short LIGHT_SOURCE_SHADE = 11; // 0xb
- field public static final short LIGHT_SOURCE_STANDARD_LIGHT_A = 17; // 0x11
- field public static final short LIGHT_SOURCE_STANDARD_LIGHT_B = 18; // 0x12
- field public static final short LIGHT_SOURCE_STANDARD_LIGHT_C = 19; // 0x13
- field public static final short LIGHT_SOURCE_TUNGSTEN = 3; // 0x3
- field public static final short LIGHT_SOURCE_UNKNOWN = 0; // 0x0
- field public static final short LIGHT_SOURCE_WARM_WHITE_FLUORESCENT = 16; // 0x10
- field public static final short LIGHT_SOURCE_WHITE_FLUORESCENT = 15; // 0xf
- field public static final String LONGITUDE_EAST = "E";
- field public static final String LONGITUDE_WEST = "W";
- field public static final short METERING_MODE_AVERAGE = 1; // 0x1
- field public static final short METERING_MODE_CENTER_WEIGHT_AVERAGE = 2; // 0x2
- field public static final short METERING_MODE_MULTI_SPOT = 4; // 0x4
- field public static final short METERING_MODE_OTHER = 255; // 0xff
- field public static final short METERING_MODE_PARTIAL = 6; // 0x6
- field public static final short METERING_MODE_PATTERN = 5; // 0x5
- field public static final short METERING_MODE_SPOT = 3; // 0x3
- field public static final short METERING_MODE_UNKNOWN = 0; // 0x0
- field public static final int ORIENTATION_FLIP_HORIZONTAL = 2; // 0x2
- field public static final int ORIENTATION_FLIP_VERTICAL = 4; // 0x4
- field public static final int ORIENTATION_NORMAL = 1; // 0x1
- field public static final int ORIENTATION_ROTATE_180 = 3; // 0x3
- field public static final int ORIENTATION_ROTATE_270 = 8; // 0x8
- field public static final int ORIENTATION_ROTATE_90 = 6; // 0x6
- field public static final int ORIENTATION_TRANSPOSE = 5; // 0x5
- field public static final int ORIENTATION_TRANSVERSE = 7; // 0x7
- field public static final int ORIENTATION_UNDEFINED = 0; // 0x0
- field public static final int ORIGINAL_RESOLUTION_IMAGE = 0; // 0x0
- field public static final int PHOTOMETRIC_INTERPRETATION_BLACK_IS_ZERO = 1; // 0x1
- field public static final int PHOTOMETRIC_INTERPRETATION_RGB = 2; // 0x2
- field public static final int PHOTOMETRIC_INTERPRETATION_WHITE_IS_ZERO = 0; // 0x0
- field public static final int PHOTOMETRIC_INTERPRETATION_YCBCR = 6; // 0x6
- field public static final int REDUCED_RESOLUTION_IMAGE = 1; // 0x1
- field public static final short RENDERED_PROCESS_CUSTOM = 1; // 0x1
- field public static final short RENDERED_PROCESS_NORMAL = 0; // 0x0
- field public static final short RESOLUTION_UNIT_CENTIMETERS = 3; // 0x3
- field public static final short RESOLUTION_UNIT_INCHES = 2; // 0x2
- field public static final short SATURATION_HIGH = 0; // 0x0
- field public static final short SATURATION_LOW = 0; // 0x0
- field public static final short SATURATION_NORMAL = 0; // 0x0
- field public static final short SCENE_CAPTURE_TYPE_LANDSCAPE = 1; // 0x1
- field public static final short SCENE_CAPTURE_TYPE_NIGHT = 3; // 0x3
- field public static final short SCENE_CAPTURE_TYPE_PORTRAIT = 2; // 0x2
- field public static final short SCENE_CAPTURE_TYPE_STANDARD = 0; // 0x0
- field public static final short SCENE_TYPE_DIRECTLY_PHOTOGRAPHED = 1; // 0x1
- field public static final short SENSITIVITY_TYPE_ISO_SPEED = 3; // 0x3
- field public static final short SENSITIVITY_TYPE_REI = 2; // 0x2
- field public static final short SENSITIVITY_TYPE_REI_AND_ISO = 6; // 0x6
- field public static final short SENSITIVITY_TYPE_SOS = 1; // 0x1
- field public static final short SENSITIVITY_TYPE_SOS_AND_ISO = 5; // 0x5
- field public static final short SENSITIVITY_TYPE_SOS_AND_REI = 4; // 0x4
- field public static final short SENSITIVITY_TYPE_SOS_AND_REI_AND_ISO = 7; // 0x7
- field public static final short SENSITIVITY_TYPE_UNKNOWN = 0; // 0x0
- field public static final short SENSOR_TYPE_COLOR_SEQUENTIAL = 5; // 0x5
- field public static final short SENSOR_TYPE_COLOR_SEQUENTIAL_LINEAR = 8; // 0x8
- field public static final short SENSOR_TYPE_NOT_DEFINED = 1; // 0x1
- field public static final short SENSOR_TYPE_ONE_CHIP = 2; // 0x2
- field public static final short SENSOR_TYPE_THREE_CHIP = 4; // 0x4
- field public static final short SENSOR_TYPE_TRILINEAR = 7; // 0x7
- field public static final short SENSOR_TYPE_TWO_CHIP = 3; // 0x3
- field public static final short SHARPNESS_HARD = 2; // 0x2
- field public static final short SHARPNESS_NORMAL = 0; // 0x0
- field public static final short SHARPNESS_SOFT = 1; // 0x1
- field public static final int STREAM_TYPE_EXIF_DATA_ONLY = 1; // 0x1
- field public static final int STREAM_TYPE_FULL_IMAGE_DATA = 0; // 0x0
- field public static final short SUBJECT_DISTANCE_RANGE_CLOSE_VIEW = 2; // 0x2
- field public static final short SUBJECT_DISTANCE_RANGE_DISTANT_VIEW = 3; // 0x3
- field public static final short SUBJECT_DISTANCE_RANGE_MACRO = 1; // 0x1
- field public static final short SUBJECT_DISTANCE_RANGE_UNKNOWN = 0; // 0x0
- field public static final String TAG_APERTURE_VALUE = "ApertureValue";
- field public static final String TAG_ARTIST = "Artist";
- field public static final String TAG_BITS_PER_SAMPLE = "BitsPerSample";
- field public static final String TAG_BODY_SERIAL_NUMBER = "BodySerialNumber";
- field public static final String TAG_BRIGHTNESS_VALUE = "BrightnessValue";
- field @Deprecated public static final String TAG_CAMARA_OWNER_NAME = "CameraOwnerName";
- field public static final String TAG_CAMERA_OWNER_NAME = "CameraOwnerName";
- field public static final String TAG_CFA_PATTERN = "CFAPattern";
- field public static final String TAG_COLOR_SPACE = "ColorSpace";
- field public static final String TAG_COMPONENTS_CONFIGURATION = "ComponentsConfiguration";
- field public static final String TAG_COMPRESSED_BITS_PER_PIXEL = "CompressedBitsPerPixel";
- field public static final String TAG_COMPRESSION = "Compression";
- field public static final String TAG_CONTRAST = "Contrast";
- field public static final String TAG_COPYRIGHT = "Copyright";
- field public static final String TAG_CUSTOM_RENDERED = "CustomRendered";
- field public static final String TAG_DATETIME = "DateTime";
- field public static final String TAG_DATETIME_DIGITIZED = "DateTimeDigitized";
- field public static final String TAG_DATETIME_ORIGINAL = "DateTimeOriginal";
- field public static final String TAG_DEFAULT_CROP_SIZE = "DefaultCropSize";
- field public static final String TAG_DEVICE_SETTING_DESCRIPTION = "DeviceSettingDescription";
- field public static final String TAG_DIGITAL_ZOOM_RATIO = "DigitalZoomRatio";
- field public static final String TAG_DNG_VERSION = "DNGVersion";
- field public static final String TAG_EXIF_VERSION = "ExifVersion";
- field public static final String TAG_EXPOSURE_BIAS_VALUE = "ExposureBiasValue";
- field public static final String TAG_EXPOSURE_INDEX = "ExposureIndex";
- field public static final String TAG_EXPOSURE_MODE = "ExposureMode";
- field public static final String TAG_EXPOSURE_PROGRAM = "ExposureProgram";
- field public static final String TAG_EXPOSURE_TIME = "ExposureTime";
- field public static final String TAG_FILE_SOURCE = "FileSource";
- field public static final String TAG_FLASH = "Flash";
- field public static final String TAG_FLASHPIX_VERSION = "FlashpixVersion";
- field public static final String TAG_FLASH_ENERGY = "FlashEnergy";
- field public static final String TAG_FOCAL_LENGTH = "FocalLength";
- field public static final String TAG_FOCAL_LENGTH_IN_35MM_FILM = "FocalLengthIn35mmFilm";
- field public static final String TAG_FOCAL_PLANE_RESOLUTION_UNIT = "FocalPlaneResolutionUnit";
- field public static final String TAG_FOCAL_PLANE_X_RESOLUTION = "FocalPlaneXResolution";
- field public static final String TAG_FOCAL_PLANE_Y_RESOLUTION = "FocalPlaneYResolution";
- field public static final String TAG_F_NUMBER = "FNumber";
- field public static final String TAG_GAIN_CONTROL = "GainControl";
- field public static final String TAG_GAMMA = "Gamma";
- field public static final String TAG_GPS_ALTITUDE = "GPSAltitude";
- field public static final String TAG_GPS_ALTITUDE_REF = "GPSAltitudeRef";
- field public static final String TAG_GPS_AREA_INFORMATION = "GPSAreaInformation";
- field public static final String TAG_GPS_DATESTAMP = "GPSDateStamp";
- field public static final String TAG_GPS_DEST_BEARING = "GPSDestBearing";
- field public static final String TAG_GPS_DEST_BEARING_REF = "GPSDestBearingRef";
- field public static final String TAG_GPS_DEST_DISTANCE = "GPSDestDistance";
- field public static final String TAG_GPS_DEST_DISTANCE_REF = "GPSDestDistanceRef";
- field public static final String TAG_GPS_DEST_LATITUDE = "GPSDestLatitude";
- field public static final String TAG_GPS_DEST_LATITUDE_REF = "GPSDestLatitudeRef";
- field public static final String TAG_GPS_DEST_LONGITUDE = "GPSDestLongitude";
- field public static final String TAG_GPS_DEST_LONGITUDE_REF = "GPSDestLongitudeRef";
- field public static final String TAG_GPS_DIFFERENTIAL = "GPSDifferential";
- field public static final String TAG_GPS_DOP = "GPSDOP";
- field public static final String TAG_GPS_H_POSITIONING_ERROR = "GPSHPositioningError";
- field public static final String TAG_GPS_IMG_DIRECTION = "GPSImgDirection";
- field public static final String TAG_GPS_IMG_DIRECTION_REF = "GPSImgDirectionRef";
- field public static final String TAG_GPS_LATITUDE = "GPSLatitude";
- field public static final String TAG_GPS_LATITUDE_REF = "GPSLatitudeRef";
- field public static final String TAG_GPS_LONGITUDE = "GPSLongitude";
- field public static final String TAG_GPS_LONGITUDE_REF = "GPSLongitudeRef";
- field public static final String TAG_GPS_MAP_DATUM = "GPSMapDatum";
- field public static final String TAG_GPS_MEASURE_MODE = "GPSMeasureMode";
- field public static final String TAG_GPS_PROCESSING_METHOD = "GPSProcessingMethod";
- field public static final String TAG_GPS_SATELLITES = "GPSSatellites";
- field public static final String TAG_GPS_SPEED = "GPSSpeed";
- field public static final String TAG_GPS_SPEED_REF = "GPSSpeedRef";
- field public static final String TAG_GPS_STATUS = "GPSStatus";
- field public static final String TAG_GPS_TIMESTAMP = "GPSTimeStamp";
- field public static final String TAG_GPS_TRACK = "GPSTrack";
- field public static final String TAG_GPS_TRACK_REF = "GPSTrackRef";
- field public static final String TAG_GPS_VERSION_ID = "GPSVersionID";
- field public static final String TAG_IMAGE_DESCRIPTION = "ImageDescription";
- field public static final String TAG_IMAGE_LENGTH = "ImageLength";
- field public static final String TAG_IMAGE_UNIQUE_ID = "ImageUniqueID";
- field public static final String TAG_IMAGE_WIDTH = "ImageWidth";
- field public static final String TAG_INTEROPERABILITY_INDEX = "InteroperabilityIndex";
- field public static final String TAG_ISO_SPEED = "ISOSpeed";
- field public static final String TAG_ISO_SPEED_LATITUDE_YYY = "ISOSpeedLatitudeyyy";
- field public static final String TAG_ISO_SPEED_LATITUDE_ZZZ = "ISOSpeedLatitudezzz";
- field @Deprecated public static final String TAG_ISO_SPEED_RATINGS = "ISOSpeedRatings";
- field public static final String TAG_JPEG_INTERCHANGE_FORMAT = "JPEGInterchangeFormat";
- field public static final String TAG_JPEG_INTERCHANGE_FORMAT_LENGTH = "JPEGInterchangeFormatLength";
- field public static final String TAG_LENS_MAKE = "LensMake";
- field public static final String TAG_LENS_MODEL = "LensModel";
- field public static final String TAG_LENS_SERIAL_NUMBER = "LensSerialNumber";
- field public static final String TAG_LENS_SPECIFICATION = "LensSpecification";
- field public static final String TAG_LIGHT_SOURCE = "LightSource";
- field public static final String TAG_MAKE = "Make";
- field public static final String TAG_MAKER_NOTE = "MakerNote";
- field public static final String TAG_MAX_APERTURE_VALUE = "MaxApertureValue";
- field public static final String TAG_METERING_MODE = "MeteringMode";
- field public static final String TAG_MODEL = "Model";
- field public static final String TAG_NEW_SUBFILE_TYPE = "NewSubfileType";
- field public static final String TAG_OECF = "OECF";
- field public static final String TAG_OFFSET_TIME = "OffsetTime";
- field public static final String TAG_OFFSET_TIME_DIGITIZED = "OffsetTimeDigitized";
- field public static final String TAG_OFFSET_TIME_ORIGINAL = "OffsetTimeOriginal";
- field public static final String TAG_ORF_ASPECT_FRAME = "AspectFrame";
- field public static final String TAG_ORF_PREVIEW_IMAGE_LENGTH = "PreviewImageLength";
- field public static final String TAG_ORF_PREVIEW_IMAGE_START = "PreviewImageStart";
- field public static final String TAG_ORF_THUMBNAIL_IMAGE = "ThumbnailImage";
- field public static final String TAG_ORIENTATION = "Orientation";
- field public static final String TAG_PHOTOGRAPHIC_SENSITIVITY = "PhotographicSensitivity";
- field public static final String TAG_PHOTOMETRIC_INTERPRETATION = "PhotometricInterpretation";
- field public static final String TAG_PIXEL_X_DIMENSION = "PixelXDimension";
- field public static final String TAG_PIXEL_Y_DIMENSION = "PixelYDimension";
- field public static final String TAG_PLANAR_CONFIGURATION = "PlanarConfiguration";
- field public static final String TAG_PRIMARY_CHROMATICITIES = "PrimaryChromaticities";
- field public static final String TAG_RECOMMENDED_EXPOSURE_INDEX = "RecommendedExposureIndex";
- field public static final String TAG_REFERENCE_BLACK_WHITE = "ReferenceBlackWhite";
- field public static final String TAG_RELATED_SOUND_FILE = "RelatedSoundFile";
- field public static final String TAG_RESOLUTION_UNIT = "ResolutionUnit";
- field public static final String TAG_ROWS_PER_STRIP = "RowsPerStrip";
- field public static final String TAG_RW2_ISO = "ISO";
- field public static final String TAG_RW2_JPG_FROM_RAW = "JpgFromRaw";
- field public static final String TAG_RW2_SENSOR_BOTTOM_BORDER = "SensorBottomBorder";
- field public static final String TAG_RW2_SENSOR_LEFT_BORDER = "SensorLeftBorder";
- field public static final String TAG_RW2_SENSOR_RIGHT_BORDER = "SensorRightBorder";
- field public static final String TAG_RW2_SENSOR_TOP_BORDER = "SensorTopBorder";
- field public static final String TAG_SAMPLES_PER_PIXEL = "SamplesPerPixel";
- field public static final String TAG_SATURATION = "Saturation";
- field public static final String TAG_SCENE_CAPTURE_TYPE = "SceneCaptureType";
- field public static final String TAG_SCENE_TYPE = "SceneType";
- field public static final String TAG_SENSING_METHOD = "SensingMethod";
- field public static final String TAG_SENSITIVITY_TYPE = "SensitivityType";
- field public static final String TAG_SHARPNESS = "Sharpness";
- field public static final String TAG_SHUTTER_SPEED_VALUE = "ShutterSpeedValue";
- field public static final String TAG_SOFTWARE = "Software";
- field public static final String TAG_SPATIAL_FREQUENCY_RESPONSE = "SpatialFrequencyResponse";
- field public static final String TAG_SPECTRAL_SENSITIVITY = "SpectralSensitivity";
- field public static final String TAG_STANDARD_OUTPUT_SENSITIVITY = "StandardOutputSensitivity";
- field public static final String TAG_STRIP_BYTE_COUNTS = "StripByteCounts";
- field public static final String TAG_STRIP_OFFSETS = "StripOffsets";
- field public static final String TAG_SUBFILE_TYPE = "SubfileType";
- field public static final String TAG_SUBJECT_AREA = "SubjectArea";
- field public static final String TAG_SUBJECT_DISTANCE = "SubjectDistance";
- field public static final String TAG_SUBJECT_DISTANCE_RANGE = "SubjectDistanceRange";
- field public static final String TAG_SUBJECT_LOCATION = "SubjectLocation";
- field public static final String TAG_SUBSEC_TIME = "SubSecTime";
- field public static final String TAG_SUBSEC_TIME_DIGITIZED = "SubSecTimeDigitized";
- field public static final String TAG_SUBSEC_TIME_ORIGINAL = "SubSecTimeOriginal";
- field public static final String TAG_THUMBNAIL_IMAGE_LENGTH = "ThumbnailImageLength";
- field public static final String TAG_THUMBNAIL_IMAGE_WIDTH = "ThumbnailImageWidth";
- field public static final String TAG_TRANSFER_FUNCTION = "TransferFunction";
- field public static final String TAG_USER_COMMENT = "UserComment";
- field public static final String TAG_WHITE_BALANCE = "WhiteBalance";
- field public static final String TAG_WHITE_POINT = "WhitePoint";
- field public static final String TAG_XMP = "Xmp";
- field public static final String TAG_X_RESOLUTION = "XResolution";
- field public static final String TAG_Y_CB_CR_COEFFICIENTS = "YCbCrCoefficients";
- field public static final String TAG_Y_CB_CR_POSITIONING = "YCbCrPositioning";
- field public static final String TAG_Y_CB_CR_SUB_SAMPLING = "YCbCrSubSampling";
- field public static final String TAG_Y_RESOLUTION = "YResolution";
- field @Deprecated public static final int WHITEBALANCE_AUTO = 0; // 0x0
- field @Deprecated public static final int WHITEBALANCE_MANUAL = 1; // 0x1
- field public static final short WHITE_BALANCE_AUTO = 0; // 0x0
- field public static final short WHITE_BALANCE_MANUAL = 1; // 0x1
- field public static final short Y_CB_CR_POSITIONING_CENTERED = 1; // 0x1
- field public static final short Y_CB_CR_POSITIONING_CO_SITED = 2; // 0x2
- }
-
-}
-
diff --git a/exifinterface/exifinterface/api/restricted_current.txt b/exifinterface/exifinterface/api/restricted_current.txt
index a1554c4..e2c3b54 100644
--- a/exifinterface/exifinterface/api/restricted_current.txt
+++ b/exifinterface/exifinterface/api/restricted_current.txt
@@ -3,10 +3,10 @@
public class ExifInterface {
ctor public ExifInterface(java.io.File) throws java.io.IOException;
- ctor public ExifInterface(String) throws java.io.IOException;
ctor public ExifInterface(java.io.FileDescriptor) throws java.io.IOException;
ctor public ExifInterface(java.io.InputStream) throws java.io.IOException;
ctor public ExifInterface(java.io.InputStream, int) throws java.io.IOException;
+ ctor public ExifInterface(String) throws java.io.IOException;
method public void flipHorizontally();
method public void flipVertically();
method public double getAltitude(double);
@@ -16,8 +16,8 @@
method public int getAttributeInt(String, int);
method public long[]? getAttributeRange(String);
method public Long? getGpsDateTime();
- method @Deprecated public boolean getLatLong(float[]!);
method public double[]? getLatLong();
+ method @Deprecated public boolean getLatLong(float[]!);
method public int getRotationDegrees();
method public byte[]? getThumbnail();
method public android.graphics.Bitmap? getThumbnailBitmap();
diff --git a/exifinterface/exifinterface/build.gradle b/exifinterface/exifinterface/build.gradle
index b6bcaab..12e623a 100644
--- a/exifinterface/exifinterface/build.gradle
+++ b/exifinterface/exifinterface/build.gradle
@@ -16,7 +16,7 @@
}
androidx {
- name = "Android Support ExifInterface"
+ name = "ExifInterface"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2016"
description = "Android Support ExifInterface"
diff --git a/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/DeviceConfig.kt b/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/DeviceConfig.kt
index 745753a..7345548 100644
--- a/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/DeviceConfig.kt
+++ b/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/DeviceConfig.kt
@@ -47,13 +47,13 @@
import com.android.resources.TouchScreen
import com.android.resources.UiMode
import com.google.android.collect.Maps
-import org.xmlpull.v1.XmlPullParser
-import org.xmlpull.v1.XmlPullParserException
-import org.xmlpull.v1.XmlPullParserFactory
import java.io.File
import java.io.FileInputStream
import java.io.IOException
import java.util.Properties
+import org.xmlpull.v1.XmlPullParser
+import org.xmlpull.v1.XmlPullParserException
+import org.xmlpull.v1.XmlPullParserFactory
/**
* Provides [FolderConfiguration] and [HardwareConfig] for various devices. Also provides utility
diff --git a/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/HtmlReportWriter.kt b/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/HtmlReportWriter.kt
index 4c1eabc..c43f4fb 100644
--- a/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/HtmlReportWriter.kt
+++ b/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/HtmlReportWriter.kt
@@ -18,13 +18,6 @@
import app.cash.paparazzi.SnapshotHandler.FrameHandler
import app.cash.paparazzi.internal.PaparazziJson
import com.google.common.base.CharMatcher
-import okio.BufferedSink
-import okio.HashingSink
-import okio.blackholeSink
-import okio.buffer
-import okio.sink
-import okio.source
-import org.jcodec.api.awt.AWTSequenceEncoder
import java.awt.image.BufferedImage
import java.io.File
import java.text.SimpleDateFormat
@@ -32,6 +25,13 @@
import java.util.Locale
import java.util.UUID
import javax.imageio.ImageIO
+import okio.BufferedSink
+import okio.HashingSink
+import okio.blackholeSink
+import okio.buffer
+import okio.sink
+import okio.source
+import org.jcodec.api.awt.AWTSequenceEncoder
/**
* Creates an HTML report that avoids writing files that have already been written.
diff --git a/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/Paparazzi.kt b/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/Paparazzi.kt
index 40ce39e..c6f0042 100644
--- a/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/Paparazzi.kt
+++ b/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/Paparazzi.kt
@@ -70,13 +70,13 @@
import com.android.layoutlib.bridge.BridgeRenderSession
import com.android.layoutlib.bridge.impl.RenderAction
import com.android.layoutlib.bridge.impl.RenderSessionImpl
-import org.junit.rules.TestRule
-import org.junit.runner.Description
-import org.junit.runners.model.Statement
import java.awt.image.BufferedImage
import java.util.Date
import java.util.concurrent.TimeUnit
import kotlin.coroutines.ContinuationInterceptor
+import org.junit.rules.TestRule
+import org.junit.runner.Description
+import org.junit.runners.model.Statement
class Paparazzi @JvmOverloads constructor(
private val environment: Environment = detectEnvironment(),
diff --git a/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/Reflections.kt b/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/Reflections.kt
index b6a4ac6..15617f0 100644
--- a/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/Reflections.kt
+++ b/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/Reflections.kt
@@ -1,9 +1,9 @@
package app.cash.paparazzi
-import sun.misc.Unsafe
import java.lang.reflect.Field
import java.lang.reflect.Modifier
import java.security.PrivilegedAction
+import sun.misc.Unsafe
/**
* Inspired by and ported from:
diff --git a/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/internal/ImageUtils.kt b/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/internal/ImageUtils.kt
index 8406d6d3..8e7111c 100644
--- a/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/internal/ImageUtils.kt
+++ b/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/internal/ImageUtils.kt
@@ -16,9 +16,6 @@
package app.cash.paparazzi.internal
-import org.junit.Assert.assertEquals
-import org.junit.Assert.assertTrue
-import org.junit.Assert.fail
import java.awt.AlphaComposite
import java.awt.Color
import java.awt.Graphics2D
@@ -35,6 +32,9 @@
import java.io.IOException
import javax.imageio.ImageIO
import kotlin.math.max
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertTrue
+import org.junit.Assert.fail
/**
* Utilities related to image processing.
diff --git a/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/internal/PaparazziCallback.kt b/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/internal/PaparazziCallback.kt
index f6e164c..6e2b62e 100644
--- a/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/internal/PaparazziCallback.kt
+++ b/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/internal/PaparazziCallback.kt
@@ -30,9 +30,6 @@
import com.android.resources.ResourceType
import com.android.resources.ResourceType.STYLE
import com.google.common.io.ByteStreams
-import org.kxml2.io.KXmlParser
-import org.xmlpull.v1.XmlPullParser
-import org.xmlpull.v1.XmlPullParserException
import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream
import java.io.File
@@ -40,6 +37,9 @@
import java.io.FileNotFoundException
import java.io.IOException
import java.lang.reflect.Modifier
+import org.kxml2.io.KXmlParser
+import org.xmlpull.v1.XmlPullParser
+import org.xmlpull.v1.XmlPullParserException
internal class PaparazziCallback(
private val logger: PaparazziLogger,
diff --git a/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/internal/parsers/LayoutPullParser.kt b/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/internal/parsers/LayoutPullParser.kt
index dd4a7f1..8f1a94a 100644
--- a/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/internal/parsers/LayoutPullParser.kt
+++ b/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/internal/parsers/LayoutPullParser.kt
@@ -24,9 +24,6 @@
import com.android.SdkConstants.TOOLS_URI
import com.android.ide.common.rendering.api.ILayoutPullParser
import com.android.ide.common.rendering.api.ResourceNamespace
-import okio.buffer
-import okio.source
-import org.xmlpull.v1.XmlPullParserException
import java.io.ByteArrayInputStream
import java.io.File
import java.io.FileInputStream
@@ -34,6 +31,9 @@
import java.io.IOError
import java.io.InputStream
import java.nio.charset.Charset
+import okio.buffer
+import okio.source
+import org.xmlpull.v1.XmlPullParserException
/**
* A layout parser that holds an in-memory tree of a given resource for subsequent traversal
diff --git a/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/internal/parsers/ResourceParser.kt b/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/internal/parsers/ResourceParser.kt
index 574e18d..f90475b 100644
--- a/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/internal/parsers/ResourceParser.kt
+++ b/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/internal/parsers/ResourceParser.kt
@@ -17,8 +17,8 @@
import com.android.SdkConstants.AAPT_URI
import com.android.SdkConstants.TAG_ATTR
-import org.kxml2.io.KXmlParser
import java.io.InputStream
+import org.kxml2.io.KXmlParser
/**
* An XML resource parser that creates a tree of [TagSnapshot]s
diff --git a/external/paparazzi/paparazzi/src/test/java/app/cash/paparazzi/HtmlReportWriterTest.kt b/external/paparazzi/paparazzi/src/test/java/app/cash/paparazzi/HtmlReportWriterTest.kt
index dc38b1c..80979c7 100644
--- a/external/paparazzi/paparazzi/src/test/java/app/cash/paparazzi/HtmlReportWriterTest.kt
+++ b/external/paparazzi/paparazzi/src/test/java/app/cash/paparazzi/HtmlReportWriterTest.kt
@@ -15,10 +15,6 @@
*/
package app.cash.paparazzi
-import org.assertj.core.api.Assertions.assertThat
-import org.junit.Rule
-import org.junit.Test
-import org.junit.rules.TemporaryFolder
import java.awt.image.BufferedImage
import java.io.File
import java.nio.file.Files
@@ -27,6 +23,10 @@
import java.nio.file.attribute.FileTime
import java.time.Instant
import java.util.Date
+import org.assertj.core.api.Assertions.assertThat
+import org.junit.Rule
+import org.junit.Test
+import org.junit.rules.TemporaryFolder
class HtmlReportWriterTest {
@get:Rule
diff --git a/external/paparazzi/paparazzi/src/test/java/app/cash/paparazzi/PaparazziTest.kt b/external/paparazzi/paparazzi/src/test/java/app/cash/paparazzi/PaparazziTest.kt
index 498d456..356a6c8 100644
--- a/external/paparazzi/paparazzi/src/test/java/app/cash/paparazzi/PaparazziTest.kt
+++ b/external/paparazzi/paparazzi/src/test/java/app/cash/paparazzi/PaparazziTest.kt
@@ -27,11 +27,11 @@
import android.view.animation.LinearInterpolator
import android.widget.Button
import com.android.internal.lang.System_Delegate
+import java.util.concurrent.TimeUnit
import org.assertj.core.api.Assertions.assertThat
import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
-import java.util.concurrent.TimeUnit
class PaparazziTest {
@get:Rule
diff --git a/external/paparazzi/paparazzi/src/test/java/app/cash/paparazzi/RenderingModeTest.kt b/external/paparazzi/paparazzi/src/test/java/app/cash/paparazzi/RenderingModeTest.kt
index c67ab76..d774099 100644
--- a/external/paparazzi/paparazzi/src/test/java/app/cash/paparazzi/RenderingModeTest.kt
+++ b/external/paparazzi/paparazzi/src/test/java/app/cash/paparazzi/RenderingModeTest.kt
@@ -11,12 +11,12 @@
import android.widget.TextView
import app.cash.paparazzi.internal.ImageUtils
import com.android.ide.common.rendering.api.SessionParams
-import org.junit.Test
-import org.junit.runner.Description
import java.awt.image.BufferedImage
import java.io.File
import javax.imageio.ImageIO
import org.junit.Ignore
+import org.junit.Test
+import org.junit.runner.Description
class RenderingModeTest {
diff --git a/external/paparazzi/paparazzi/src/test/java/app/cash/paparazzi/accessibility/AccessibilityRenderExtensionTest.kt b/external/paparazzi/paparazzi/src/test/java/app/cash/paparazzi/accessibility/AccessibilityRenderExtensionTest.kt
index 6399c8c..b9afe6e 100644
--- a/external/paparazzi/paparazzi/src/test/java/app/cash/paparazzi/accessibility/AccessibilityRenderExtensionTest.kt
+++ b/external/paparazzi/paparazzi/src/test/java/app/cash/paparazzi/accessibility/AccessibilityRenderExtensionTest.kt
@@ -16,12 +16,12 @@
import app.cash.paparazzi.Snapshot
import app.cash.paparazzi.SnapshotHandler
import app.cash.paparazzi.internal.ImageUtils
-import org.junit.Rule
-import org.junit.Test
import java.awt.image.BufferedImage
import java.io.File
import javax.imageio.ImageIO
import org.junit.Ignore
+import org.junit.Rule
+import org.junit.Test
class AccessibilityRenderExtensionTest {
private val snapshotHandler = TestSnapshotVerifier()
diff --git a/external/paparazzi/paparazzi/src/test/java/app/cash/paparazzi/internal/PaparazziLoggerTest.kt b/external/paparazzi/paparazzi/src/test/java/app/cash/paparazzi/internal/PaparazziLoggerTest.kt
index e1ab916..89d7823 100644
--- a/external/paparazzi/paparazzi/src/test/java/app/cash/paparazzi/internal/PaparazziLoggerTest.kt
+++ b/external/paparazzi/paparazzi/src/test/java/app/cash/paparazzi/internal/PaparazziLoggerTest.kt
@@ -1,10 +1,10 @@
package app.cash.paparazzi.internal
import app.cash.paparazzi.internal.PaparazziLogger.MultipleFailuresException
+import java.io.FileNotFoundException
import org.assertj.core.api.Assertions.assertThat
import org.assertj.core.api.Assertions.fail
import org.junit.Test
-import java.io.FileNotFoundException
class PaparazziLoggerTest {
@Test
diff --git a/fragment/fragment-ktx/api/current.txt b/fragment/fragment-ktx/api/current.txt
index b93e06b..8d67e0b 100644
--- a/fragment/fragment-ktx/api/current.txt
+++ b/fragment/fragment-ktx/api/current.txt
@@ -21,12 +21,12 @@
}
public final class FragmentViewModelLazyKt {
- method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> activityViewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> activityViewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+ method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> activityViewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
method @MainThread public static <VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> createViewModelLazy(androidx.fragment.app.Fragment, kotlin.reflect.KClass<VM> viewModelClass, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStore> storeProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras> extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
method @Deprecated @MainThread public static <VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> createViewModelLazy(androidx.fragment.app.Fragment, kotlin.reflect.KClass<VM> viewModelClass, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStore> storeProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
- method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> viewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStoreOwner> ownerProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> viewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStoreOwner> ownerProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+ method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> viewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStoreOwner> ownerProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
}
public final class ViewKt {
diff --git a/fragment/fragment-ktx/api/public_plus_experimental_current.txt b/fragment/fragment-ktx/api/public_plus_experimental_current.txt
deleted file mode 100644
index b93e06b..0000000
--- a/fragment/fragment-ktx/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-// Signature format: 4.0
-package androidx.fragment.app {
-
- public final class FragmentKt {
- method public static void clearFragmentResult(androidx.fragment.app.Fragment, String requestKey);
- method public static void clearFragmentResultListener(androidx.fragment.app.Fragment, String requestKey);
- method public static void setFragmentResult(androidx.fragment.app.Fragment, String requestKey, android.os.Bundle result);
- method public static void setFragmentResultListener(androidx.fragment.app.Fragment, String requestKey, kotlin.jvm.functions.Function2<? super java.lang.String,? super android.os.Bundle,kotlin.Unit> listener);
- }
-
- public final class FragmentManagerKt {
- method public static inline void commit(androidx.fragment.app.FragmentManager, optional boolean allowStateLoss, kotlin.jvm.functions.Function1<? super androidx.fragment.app.FragmentTransaction,kotlin.Unit> body);
- method @MainThread public static inline void commitNow(androidx.fragment.app.FragmentManager, optional boolean allowStateLoss, kotlin.jvm.functions.Function1<? super androidx.fragment.app.FragmentTransaction,kotlin.Unit> body);
- method @Deprecated public static inline void transaction(androidx.fragment.app.FragmentManager, optional boolean now, optional boolean allowStateLoss, kotlin.jvm.functions.Function1<? super androidx.fragment.app.FragmentTransaction,kotlin.Unit> body);
- }
-
- public final class FragmentTransactionKt {
- method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.FragmentTransaction add(androidx.fragment.app.FragmentTransaction, @IdRes int containerViewId, optional String? tag, optional android.os.Bundle? args);
- method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.FragmentTransaction add(androidx.fragment.app.FragmentTransaction, String tag, optional android.os.Bundle? args);
- method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.FragmentTransaction replace(androidx.fragment.app.FragmentTransaction, @IdRes int containerViewId, optional String? tag, optional android.os.Bundle? args);
- }
-
- public final class FragmentViewModelLazyKt {
- method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> activityViewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
- method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> activityViewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
- method @MainThread public static <VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> createViewModelLazy(androidx.fragment.app.Fragment, kotlin.reflect.KClass<VM> viewModelClass, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStore> storeProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras> extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
- method @Deprecated @MainThread public static <VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> createViewModelLazy(androidx.fragment.app.Fragment, kotlin.reflect.KClass<VM> viewModelClass, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStore> storeProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
- method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> viewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStoreOwner> ownerProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
- method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> viewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStoreOwner> ownerProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
- }
-
- public final class ViewKt {
- method public static <F extends androidx.fragment.app.Fragment> F findFragment(android.view.View);
- }
-
-}
-
diff --git a/fragment/fragment-ktx/api/restricted_current.txt b/fragment/fragment-ktx/api/restricted_current.txt
index b93e06b..8d67e0b 100644
--- a/fragment/fragment-ktx/api/restricted_current.txt
+++ b/fragment/fragment-ktx/api/restricted_current.txt
@@ -21,12 +21,12 @@
}
public final class FragmentViewModelLazyKt {
- method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> activityViewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> activityViewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+ method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> activityViewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
method @MainThread public static <VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> createViewModelLazy(androidx.fragment.app.Fragment, kotlin.reflect.KClass<VM> viewModelClass, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStore> storeProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras> extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
method @Deprecated @MainThread public static <VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> createViewModelLazy(androidx.fragment.app.Fragment, kotlin.reflect.KClass<VM> viewModelClass, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStore> storeProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
- method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> viewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStoreOwner> ownerProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> viewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStoreOwner> ownerProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+ method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> viewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStoreOwner> ownerProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
}
public final class ViewKt {
diff --git a/fragment/fragment-lint/build.gradle b/fragment/fragment-lint/build.gradle
index 9a091e2..b4f8162 100644
--- a/fragment/fragment-lint/build.gradle
+++ b/fragment/fragment-lint/build.gradle
@@ -36,7 +36,7 @@
}
androidx {
- name = "Android Fragment Lint Checks"
+ name = "Fragment Lint Checks"
type = LibraryType.LINT
inceptionYear = "2019"
description = "Android Fragment Lint Checks"
diff --git a/fragment/fragment-lint/src/main/java/androidx/fragment/lint/FragmentTagDetector.kt b/fragment/fragment-lint/src/main/java/androidx/fragment/lint/FragmentTagDetector.kt
index ac26747e..8a5cd4c 100644
--- a/fragment/fragment-lint/src/main/java/androidx/fragment/lint/FragmentTagDetector.kt
+++ b/fragment/fragment-lint/src/main/java/androidx/fragment/lint/FragmentTagDetector.kt
@@ -26,8 +26,8 @@
import com.android.tools.lint.detector.api.Scope
import com.android.tools.lint.detector.api.Severity
import com.android.tools.lint.detector.api.XmlContext
-import org.w3c.dom.Element
import java.util.Collections
+import org.w3c.dom.Element
/**
* Lint check for detecting use of fragment tag in layout xml files. This provides a warning that
diff --git a/fragment/fragment-lint/src/main/java/androidx/fragment/lint/UseRequireInsteadOfGet.kt b/fragment/fragment-lint/src/main/java/androidx/fragment/lint/UseRequireInsteadOfGet.kt
index 9529d0c..0e8b728c 100644
--- a/fragment/fragment-lint/src/main/java/androidx/fragment/lint/UseRequireInsteadOfGet.kt
+++ b/fragment/fragment-lint/src/main/java/androidx/fragment/lint/UseRequireInsteadOfGet.kt
@@ -29,6 +29,7 @@
import com.android.tools.lint.detector.api.isKotlin
import com.intellij.psi.PsiClass
import com.intellij.psi.PsiMethod
+import java.util.Locale
import org.jetbrains.uast.UCallExpression
import org.jetbrains.uast.UElement
import org.jetbrains.uast.UExpression
@@ -42,7 +43,6 @@
import org.jetbrains.uast.skipParenthesizedExprUp
import org.jetbrains.uast.toUElement
import org.jetbrains.uast.tryResolve
-import java.util.Locale
/**
* Androidx added new "require____()" versions of common "get___()" APIs, such as
diff --git a/fragment/fragment-testing-lint/build.gradle b/fragment/fragment-testing-lint/build.gradle
index 91a6a84..a9641c7 100644
--- a/fragment/fragment-testing-lint/build.gradle
+++ b/fragment/fragment-testing-lint/build.gradle
@@ -33,7 +33,7 @@
}
androidx {
- name = "Android Fragment-Testing Lint Checks"
+ name = "Fragment-Testing Lint Checks"
type = LibraryType.LINT
inceptionYear = "2019"
description = "Lint Checks for the Fragment Testing module"
diff --git a/fragment/fragment-testing-manifest-lint/build.gradle b/fragment/fragment-testing-manifest-lint/build.gradle
index 3f8af05..9b4b9f4 100644
--- a/fragment/fragment-testing-manifest-lint/build.gradle
+++ b/fragment/fragment-testing-manifest-lint/build.gradle
@@ -33,7 +33,7 @@
}
androidx {
- name = "Android Fragment-Testing-Manifest Lint Checks"
+ name = "Fragment-Testing-Manifest Lint Checks"
type = LibraryType.LINT
inceptionYear = "2022"
description = "Lint Checks for the Fragment Testing Manifest module"
diff --git a/fragment/fragment-testing-manifest/api/public_plus_experimental_current.txt b/fragment/fragment-testing-manifest/api/public_plus_experimental_current.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/fragment/fragment-testing-manifest/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/fragment/fragment-testing/api/current.txt b/fragment/fragment-testing/api/current.txt
index d5c260e..81734a0 100644
--- a/fragment/fragment-testing/api/current.txt
+++ b/fragment/fragment-testing/api/current.txt
@@ -3,20 +3,20 @@
public final class FragmentScenario<F extends androidx.fragment.app.Fragment> implements java.io.Closeable {
method public void close();
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
+ method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
+ method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
+ method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
+ method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
+ method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
+ method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass);
+ method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
+ method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
+ method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
+ method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
+ method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
+ method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
method public androidx.fragment.app.testing.FragmentScenario<F> moveToState(androidx.lifecycle.Lifecycle.State newState);
method public androidx.fragment.app.testing.FragmentScenario<F> onFragment(androidx.fragment.app.testing.FragmentScenario.FragmentAction<F> action);
method public androidx.fragment.app.testing.FragmentScenario<F> recreate();
@@ -24,20 +24,20 @@
}
public static final class FragmentScenario.Companion {
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
+ method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
+ method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
+ method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
+ method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
+ method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
+ method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass);
+ method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
+ method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
+ method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
+ method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
+ method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
+ method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
}
public static fun interface FragmentScenario.FragmentAction<F extends androidx.fragment.app.Fragment> {
@@ -46,13 +46,13 @@
public final class FragmentScenarioKt {
method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.fragment.app.FragmentFactory? factory);
- method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, kotlin.jvm.functions.Function0<? extends F> instantiate);
method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, kotlin.jvm.functions.Function0<? extends F> instantiate);
+ method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, kotlin.jvm.functions.Function0<? extends F> instantiate);
method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.fragment.app.FragmentFactory? factory);
- method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, kotlin.jvm.functions.Function0<? extends F> instantiate);
method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, kotlin.jvm.functions.Function0<? extends F> instantiate);
+ method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, kotlin.jvm.functions.Function0<? extends F> instantiate);
method public static inline <reified F extends androidx.fragment.app.Fragment, T> T withFragment(androidx.fragment.app.testing.FragmentScenario<F>, kotlin.jvm.functions.Function1<? super F,? extends T> block);
}
diff --git a/fragment/fragment-testing/api/public_plus_experimental_current.txt b/fragment/fragment-testing/api/public_plus_experimental_current.txt
deleted file mode 100644
index d5c260e..0000000
--- a/fragment/fragment-testing/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-// Signature format: 4.0
-package androidx.fragment.app.testing {
-
- public final class FragmentScenario<F extends androidx.fragment.app.Fragment> implements java.io.Closeable {
- method public void close();
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass);
- method public androidx.fragment.app.testing.FragmentScenario<F> moveToState(androidx.lifecycle.Lifecycle.State newState);
- method public androidx.fragment.app.testing.FragmentScenario<F> onFragment(androidx.fragment.app.testing.FragmentScenario.FragmentAction<F> action);
- method public androidx.fragment.app.testing.FragmentScenario<F> recreate();
- field public static final androidx.fragment.app.testing.FragmentScenario.Companion Companion;
- }
-
- public static final class FragmentScenario.Companion {
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass);
- }
-
- public static fun interface FragmentScenario.FragmentAction<F extends androidx.fragment.app.Fragment> {
- method public void perform(F fragment);
- }
-
- public final class FragmentScenarioKt {
- method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.fragment.app.FragmentFactory? factory);
- method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, kotlin.jvm.functions.Function0<? extends F> instantiate);
- method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, kotlin.jvm.functions.Function0<? extends F> instantiate);
- method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.fragment.app.FragmentFactory? factory);
- method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, kotlin.jvm.functions.Function0<? extends F> instantiate);
- method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, kotlin.jvm.functions.Function0<? extends F> instantiate);
- method public static inline <reified F extends androidx.fragment.app.Fragment, T> T withFragment(androidx.fragment.app.testing.FragmentScenario<F>, kotlin.jvm.functions.Function1<? super F,? extends T> block);
- }
-
-}
-
diff --git a/fragment/fragment-testing/api/restricted_current.txt b/fragment/fragment-testing/api/restricted_current.txt
index d5c260e..81734a0 100644
--- a/fragment/fragment-testing/api/restricted_current.txt
+++ b/fragment/fragment-testing/api/restricted_current.txt
@@ -3,20 +3,20 @@
public final class FragmentScenario<F extends androidx.fragment.app.Fragment> implements java.io.Closeable {
method public void close();
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
+ method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
+ method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
+ method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
+ method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
+ method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
+ method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass);
+ method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
+ method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
+ method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
+ method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
+ method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
+ method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
method public androidx.fragment.app.testing.FragmentScenario<F> moveToState(androidx.lifecycle.Lifecycle.State newState);
method public androidx.fragment.app.testing.FragmentScenario<F> onFragment(androidx.fragment.app.testing.FragmentScenario.FragmentAction<F> action);
method public androidx.fragment.app.testing.FragmentScenario<F> recreate();
@@ -24,20 +24,20 @@
}
public static final class FragmentScenario.Companion {
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
+ method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
+ method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
+ method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
+ method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
+ method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
+ method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass);
+ method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
+ method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
+ method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
+ method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
+ method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
+ method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
}
public static fun interface FragmentScenario.FragmentAction<F extends androidx.fragment.app.Fragment> {
@@ -46,13 +46,13 @@
public final class FragmentScenarioKt {
method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.fragment.app.FragmentFactory? factory);
- method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, kotlin.jvm.functions.Function0<? extends F> instantiate);
method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, kotlin.jvm.functions.Function0<? extends F> instantiate);
+ method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, kotlin.jvm.functions.Function0<? extends F> instantiate);
method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.fragment.app.FragmentFactory? factory);
- method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, kotlin.jvm.functions.Function0<? extends F> instantiate);
method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, kotlin.jvm.functions.Function0<? extends F> instantiate);
+ method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, kotlin.jvm.functions.Function0<? extends F> instantiate);
method public static inline <reified F extends androidx.fragment.app.Fragment, T> T withFragment(androidx.fragment.app.testing.FragmentScenario<F>, kotlin.jvm.functions.Function1<? super F,? extends T> block);
}
diff --git a/fragment/fragment-testing/build.gradle b/fragment/fragment-testing/build.gradle
index 4ef2ed4..0230108 100644
--- a/fragment/fragment-testing/build.gradle
+++ b/fragment/fragment-testing/build.gradle
@@ -43,7 +43,7 @@
}
androidx {
- name = "Fragment Test Extensions"
+ name = "Fragment Testing Extensions"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "Extensions for testing 'fragment' artifact"
diff --git a/fragment/fragment-testing/src/androidTest/java/androidx/fragment/app/testing/FragmentScenarioViewModelTest.kt b/fragment/fragment-testing/src/androidTest/java/androidx/fragment/app/testing/FragmentScenarioViewModelTest.kt
index d88bcba..2ff83ba 100644
--- a/fragment/fragment-testing/src/androidTest/java/androidx/fragment/app/testing/FragmentScenarioViewModelTest.kt
+++ b/fragment/fragment-testing/src/androidTest/java/androidx/fragment/app/testing/FragmentScenarioViewModelTest.kt
@@ -25,8 +25,8 @@
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
-import org.mockito.Mockito.`when`
import org.mockito.Mockito.mock
+import org.mockito.Mockito.`when`
/**
* End-to-end integration test using a mock [ViewModel] injected in via a
diff --git a/fragment/fragment/api/current.txt b/fragment/fragment/api/current.txt
index 4d44df2..553ab8a 100644
--- a/fragment/fragment/api/current.txt
+++ b/fragment/fragment/api/current.txt
@@ -81,8 +81,8 @@
method public final boolean isVisible();
method @Deprecated @CallSuper @MainThread public void onActivityCreated(android.os.Bundle?);
method @Deprecated public void onActivityResult(int, int, android.content.Intent?);
- method @CallSuper @MainThread public void onAttach(android.content.Context);
method @Deprecated @CallSuper @MainThread public void onAttach(android.app.Activity);
+ method @CallSuper @MainThread public void onAttach(android.content.Context);
method @Deprecated @MainThread public void onAttachFragment(androidx.fragment.app.Fragment);
method @CallSuper public void onConfigurationChanged(android.content.res.Configuration);
method @MainThread public boolean onContextItemSelected(android.view.MenuItem);
@@ -98,8 +98,8 @@
method @CallSuper @MainThread public void onDetach();
method public android.view.LayoutInflater onGetLayoutInflater(android.os.Bundle?);
method @MainThread public void onHiddenChanged(boolean);
- method @CallSuper @UiThread public void onInflate(android.content.Context, android.util.AttributeSet, android.os.Bundle?);
method @Deprecated @CallSuper @UiThread public void onInflate(android.app.Activity, android.util.AttributeSet, android.os.Bundle?);
+ method @CallSuper @UiThread public void onInflate(android.content.Context, android.util.AttributeSet, android.os.Bundle?);
method @CallSuper @MainThread public void onLowMemory();
method public void onMultiWindowModeChanged(boolean);
method @Deprecated @MainThread public boolean onOptionsItemSelected(android.view.MenuItem);
@@ -194,8 +194,8 @@
public final class FragmentContainerView extends android.widget.FrameLayout {
ctor public FragmentContainerView(android.content.Context context);
- ctor public FragmentContainerView(android.content.Context context, android.util.AttributeSet? attrs, optional int defStyleAttr);
ctor public FragmentContainerView(android.content.Context context, android.util.AttributeSet? attrs);
+ ctor public FragmentContainerView(android.content.Context context, android.util.AttributeSet? attrs, optional int defStyleAttr);
method public <F extends androidx.fragment.app.Fragment> F getFragment();
}
@@ -234,8 +234,8 @@
method public void noteStateNotSaved();
method public android.view.View? onCreateView(android.view.View?, String, android.content.Context, android.util.AttributeSet);
method @Deprecated public void reportLoaderStart();
- method @Deprecated public void restoreAllState(android.os.Parcelable?, java.util.List<androidx.fragment.app.Fragment!>?);
method @Deprecated public void restoreAllState(android.os.Parcelable?, androidx.fragment.app.FragmentManagerNonConfig?);
+ method @Deprecated public void restoreAllState(android.os.Parcelable?, java.util.List<androidx.fragment.app.Fragment!>?);
method @Deprecated public void restoreLoaderNonConfig(androidx.collection.SimpleArrayMap<java.lang.String!,androidx.loader.app.LoaderManager!>!);
method @Deprecated public void restoreSaveState(android.os.Parcelable?);
method @Deprecated public androidx.collection.SimpleArrayMap<java.lang.String!,androidx.loader.app.LoaderManager!>? retainLoaderNonConfig();
@@ -292,11 +292,11 @@
method public boolean isDestroyed();
method public boolean isStateSaved();
method public void popBackStack();
- method public void popBackStack(String?, int);
method public void popBackStack(int, int);
+ method public void popBackStack(String?, int);
method @MainThread public boolean popBackStackImmediate();
- method @MainThread public boolean popBackStackImmediate(String?, int);
method public boolean popBackStackImmediate(int, int);
+ method @MainThread public boolean popBackStackImmediate(String?, int);
method public void putFragment(android.os.Bundle, String, androidx.fragment.app.Fragment);
method public void registerFragmentLifecycleCallbacks(androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks, boolean);
method public void removeFragmentOnAttachListener(androidx.fragment.app.FragmentOnAttachListener);
@@ -393,12 +393,12 @@
public abstract class FragmentTransaction {
ctor @Deprecated public FragmentTransaction();
- method public final androidx.fragment.app.FragmentTransaction add(Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?, String?);
method public androidx.fragment.app.FragmentTransaction add(androidx.fragment.app.Fragment, String?);
- method public final androidx.fragment.app.FragmentTransaction add(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?);
method public androidx.fragment.app.FragmentTransaction add(@IdRes int, androidx.fragment.app.Fragment);
- method public final androidx.fragment.app.FragmentTransaction add(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?, String?);
method public androidx.fragment.app.FragmentTransaction add(@IdRes int, androidx.fragment.app.Fragment, String?);
+ method public final androidx.fragment.app.FragmentTransaction add(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?);
+ method public final androidx.fragment.app.FragmentTransaction add(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?, String?);
+ method public final androidx.fragment.app.FragmentTransaction add(Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?, String?);
method public androidx.fragment.app.FragmentTransaction addSharedElement(android.view.View, String);
method public androidx.fragment.app.FragmentTransaction addToBackStack(String?);
method public androidx.fragment.app.FragmentTransaction attach(androidx.fragment.app.Fragment);
@@ -412,10 +412,10 @@
method public boolean isAddToBackStackAllowed();
method public boolean isEmpty();
method public androidx.fragment.app.FragmentTransaction remove(androidx.fragment.app.Fragment);
- method public final androidx.fragment.app.FragmentTransaction replace(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?);
method public androidx.fragment.app.FragmentTransaction replace(@IdRes int, androidx.fragment.app.Fragment);
- method public final androidx.fragment.app.FragmentTransaction replace(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?, String?);
method public androidx.fragment.app.FragmentTransaction replace(@IdRes int, androidx.fragment.app.Fragment, String?);
+ method public final androidx.fragment.app.FragmentTransaction replace(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?);
+ method public final androidx.fragment.app.FragmentTransaction replace(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?, String?);
method public androidx.fragment.app.FragmentTransaction runOnCommit(Runnable);
method @Deprecated public androidx.fragment.app.FragmentTransaction setAllowOptimization(boolean);
method @Deprecated public androidx.fragment.app.FragmentTransaction setBreadCrumbShortTitle(@StringRes int);
diff --git a/fragment/fragment/api/public_plus_experimental_current.txt b/fragment/fragment/api/public_plus_experimental_current.txt
deleted file mode 100644
index 4d44df2..0000000
--- a/fragment/fragment/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,554 +0,0 @@
-// Signature format: 4.0
-package androidx.fragment.app {
-
- public class DialogFragment extends androidx.fragment.app.Fragment implements android.content.DialogInterface.OnCancelListener android.content.DialogInterface.OnDismissListener {
- ctor public DialogFragment();
- ctor public DialogFragment(@LayoutRes int);
- method public void dismiss();
- method public void dismissAllowingStateLoss();
- method @MainThread public void dismissNow();
- method public android.app.Dialog? getDialog();
- method public boolean getShowsDialog();
- method @StyleRes public int getTheme();
- method public boolean isCancelable();
- method public void onCancel(android.content.DialogInterface);
- method @MainThread public android.app.Dialog onCreateDialog(android.os.Bundle?);
- method @CallSuper public void onDismiss(android.content.DialogInterface);
- method public final androidx.activity.ComponentDialog requireComponentDialog();
- method public final android.app.Dialog requireDialog();
- method public void setCancelable(boolean);
- method public void setShowsDialog(boolean);
- method public void setStyle(int, @StyleRes int);
- method public void show(androidx.fragment.app.FragmentManager, String?);
- method public int show(androidx.fragment.app.FragmentTransaction, String?);
- method public void showNow(androidx.fragment.app.FragmentManager, String?);
- field public static final int STYLE_NORMAL = 0; // 0x0
- field public static final int STYLE_NO_FRAME = 2; // 0x2
- field public static final int STYLE_NO_INPUT = 3; // 0x3
- field public static final int STYLE_NO_TITLE = 1; // 0x1
- }
-
- public class Fragment implements androidx.activity.result.ActivityResultCaller android.content.ComponentCallbacks androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.savedstate.SavedStateRegistryOwner android.view.View.OnCreateContextMenuListener androidx.lifecycle.ViewModelStoreOwner {
- ctor public Fragment();
- ctor @ContentView public Fragment(@LayoutRes int);
- method public void dump(String, java.io.FileDescriptor?, java.io.PrintWriter, String![]?);
- method public final boolean equals(Object?);
- method public final androidx.fragment.app.FragmentActivity? getActivity();
- method public boolean getAllowEnterTransitionOverlap();
- method public boolean getAllowReturnTransitionOverlap();
- method public final android.os.Bundle? getArguments();
- method public final androidx.fragment.app.FragmentManager getChildFragmentManager();
- method public android.content.Context? getContext();
- method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
- method public Object? getEnterTransition();
- method public Object? getExitTransition();
- method @Deprecated public final androidx.fragment.app.FragmentManager? getFragmentManager();
- method public final Object? getHost();
- method public final int getId();
- method public final android.view.LayoutInflater getLayoutInflater();
- method public androidx.lifecycle.Lifecycle getLifecycle();
- method @Deprecated public androidx.loader.app.LoaderManager getLoaderManager();
- method public final androidx.fragment.app.Fragment? getParentFragment();
- method public final androidx.fragment.app.FragmentManager getParentFragmentManager();
- method public Object? getReenterTransition();
- method public final android.content.res.Resources getResources();
- method @Deprecated public final boolean getRetainInstance();
- method public Object? getReturnTransition();
- method public final androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
- method public Object? getSharedElementEnterTransition();
- method public Object? getSharedElementReturnTransition();
- method public final String getString(@StringRes int);
- method public final String getString(@StringRes int, java.lang.Object!...);
- method public final String? getTag();
- method @Deprecated public final androidx.fragment.app.Fragment? getTargetFragment();
- method @Deprecated public final int getTargetRequestCode();
- method public final CharSequence getText(@StringRes int);
- method @Deprecated public boolean getUserVisibleHint();
- method public android.view.View? getView();
- method @MainThread public androidx.lifecycle.LifecycleOwner getViewLifecycleOwner();
- method public androidx.lifecycle.LiveData<androidx.lifecycle.LifecycleOwner!> getViewLifecycleOwnerLiveData();
- method public androidx.lifecycle.ViewModelStore getViewModelStore();
- method public final int hashCode();
- method @Deprecated public static androidx.fragment.app.Fragment instantiate(android.content.Context, String);
- method @Deprecated public static androidx.fragment.app.Fragment instantiate(android.content.Context, String, android.os.Bundle?);
- method public final boolean isAdded();
- method public final boolean isDetached();
- method public final boolean isHidden();
- method public final boolean isInLayout();
- method public final boolean isRemoving();
- method public final boolean isResumed();
- method public final boolean isStateSaved();
- method public final boolean isVisible();
- method @Deprecated @CallSuper @MainThread public void onActivityCreated(android.os.Bundle?);
- method @Deprecated public void onActivityResult(int, int, android.content.Intent?);
- method @CallSuper @MainThread public void onAttach(android.content.Context);
- method @Deprecated @CallSuper @MainThread public void onAttach(android.app.Activity);
- method @Deprecated @MainThread public void onAttachFragment(androidx.fragment.app.Fragment);
- method @CallSuper public void onConfigurationChanged(android.content.res.Configuration);
- method @MainThread public boolean onContextItemSelected(android.view.MenuItem);
- method @CallSuper @MainThread public void onCreate(android.os.Bundle?);
- method @MainThread public android.view.animation.Animation? onCreateAnimation(int, boolean, int);
- method @MainThread public android.animation.Animator? onCreateAnimator(int, boolean, int);
- method @MainThread public void onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo?);
- method @Deprecated @MainThread public void onCreateOptionsMenu(android.view.Menu, android.view.MenuInflater);
- method @MainThread public android.view.View? onCreateView(android.view.LayoutInflater, android.view.ViewGroup?, android.os.Bundle?);
- method @CallSuper @MainThread public void onDestroy();
- method @Deprecated @MainThread public void onDestroyOptionsMenu();
- method @CallSuper @MainThread public void onDestroyView();
- method @CallSuper @MainThread public void onDetach();
- method public android.view.LayoutInflater onGetLayoutInflater(android.os.Bundle?);
- method @MainThread public void onHiddenChanged(boolean);
- method @CallSuper @UiThread public void onInflate(android.content.Context, android.util.AttributeSet, android.os.Bundle?);
- method @Deprecated @CallSuper @UiThread public void onInflate(android.app.Activity, android.util.AttributeSet, android.os.Bundle?);
- method @CallSuper @MainThread public void onLowMemory();
- method public void onMultiWindowModeChanged(boolean);
- method @Deprecated @MainThread public boolean onOptionsItemSelected(android.view.MenuItem);
- method @Deprecated @MainThread public void onOptionsMenuClosed(android.view.Menu);
- method @CallSuper @MainThread public void onPause();
- method public void onPictureInPictureModeChanged(boolean);
- method @Deprecated @MainThread public void onPrepareOptionsMenu(android.view.Menu);
- method @MainThread public void onPrimaryNavigationFragmentChanged(boolean);
- method @Deprecated public void onRequestPermissionsResult(int, String![], int[]);
- method @CallSuper @MainThread public void onResume();
- method @MainThread public void onSaveInstanceState(android.os.Bundle);
- method @CallSuper @MainThread public void onStart();
- method @CallSuper @MainThread public void onStop();
- method @MainThread public void onViewCreated(android.view.View, android.os.Bundle?);
- method @CallSuper @MainThread public void onViewStateRestored(android.os.Bundle?);
- method public void postponeEnterTransition();
- method public final void postponeEnterTransition(long, java.util.concurrent.TimeUnit);
- method @MainThread public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
- method @MainThread public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultRegistry, androidx.activity.result.ActivityResultCallback<O!>);
- method public void registerForContextMenu(android.view.View);
- method @Deprecated public final void requestPermissions(String![], int);
- method public final androidx.fragment.app.FragmentActivity requireActivity();
- method public final android.os.Bundle requireArguments();
- method public final android.content.Context requireContext();
- method @Deprecated public final androidx.fragment.app.FragmentManager requireFragmentManager();
- method public final Object requireHost();
- method public final androidx.fragment.app.Fragment requireParentFragment();
- method public final android.view.View requireView();
- method public void setAllowEnterTransitionOverlap(boolean);
- method public void setAllowReturnTransitionOverlap(boolean);
- method public void setArguments(android.os.Bundle?);
- method public void setEnterSharedElementCallback(androidx.core.app.SharedElementCallback?);
- method public void setEnterTransition(Object?);
- method public void setExitSharedElementCallback(androidx.core.app.SharedElementCallback?);
- method public void setExitTransition(Object?);
- method @Deprecated public void setHasOptionsMenu(boolean);
- method public void setInitialSavedState(androidx.fragment.app.Fragment.SavedState?);
- method public void setMenuVisibility(boolean);
- method public void setReenterTransition(Object?);
- method @Deprecated public void setRetainInstance(boolean);
- method public void setReturnTransition(Object?);
- method public void setSharedElementEnterTransition(Object?);
- method public void setSharedElementReturnTransition(Object?);
- method @Deprecated public void setTargetFragment(androidx.fragment.app.Fragment?, int);
- method @Deprecated public void setUserVisibleHint(boolean);
- method public boolean shouldShowRequestPermissionRationale(String);
- method public void startActivity(android.content.Intent);
- method public void startActivity(android.content.Intent, android.os.Bundle?);
- method @Deprecated public void startActivityForResult(android.content.Intent, int);
- method @Deprecated public void startActivityForResult(android.content.Intent, int, android.os.Bundle?);
- method @Deprecated public void startIntentSenderForResult(android.content.IntentSender, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
- method public void startPostponedEnterTransition();
- method public void unregisterForContextMenu(android.view.View);
- }
-
- public static class Fragment.InstantiationException extends java.lang.RuntimeException {
- ctor public Fragment.InstantiationException(String, Exception?);
- }
-
- public static class Fragment.SavedState implements android.os.Parcelable {
- method public int describeContents();
- method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<androidx.fragment.app.Fragment.SavedState!> CREATOR;
- }
-
- public class FragmentActivity extends androidx.activity.ComponentActivity implements androidx.core.app.ActivityCompat.OnRequestPermissionsResultCallback androidx.lifecycle.LifecycleOwner {
- ctor public FragmentActivity();
- ctor @ContentView public FragmentActivity(@LayoutRes int);
- method public androidx.fragment.app.FragmentManager getSupportFragmentManager();
- method @Deprecated public androidx.loader.app.LoaderManager getSupportLoaderManager();
- method @Deprecated @MainThread public void onAttachFragment(androidx.fragment.app.Fragment);
- method protected void onResumeFragments();
- method public void onStateNotSaved();
- method public void setEnterSharedElementCallback(androidx.core.app.SharedElementCallback?);
- method public void setExitSharedElementCallback(androidx.core.app.SharedElementCallback?);
- method public void startActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent, int);
- method public void startActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent, int, android.os.Bundle?);
- method @Deprecated public void startIntentSenderFromFragment(androidx.fragment.app.Fragment, android.content.IntentSender, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
- method public void supportFinishAfterTransition();
- method @Deprecated public void supportInvalidateOptionsMenu();
- method public void supportPostponeEnterTransition();
- method public void supportStartPostponedEnterTransition();
- method @Deprecated public final void validateRequestPermissionsRequestCode(int);
- }
-
- public abstract class FragmentContainer {
- ctor public FragmentContainer();
- method @Deprecated public androidx.fragment.app.Fragment instantiate(android.content.Context, String, android.os.Bundle?);
- method public abstract android.view.View? onFindViewById(@IdRes int);
- method public abstract boolean onHasView();
- }
-
- public final class FragmentContainerView extends android.widget.FrameLayout {
- ctor public FragmentContainerView(android.content.Context context);
- ctor public FragmentContainerView(android.content.Context context, android.util.AttributeSet? attrs, optional int defStyleAttr);
- ctor public FragmentContainerView(android.content.Context context, android.util.AttributeSet? attrs);
- method public <F extends androidx.fragment.app.Fragment> F getFragment();
- }
-
- public class FragmentController {
- method public void attachHost(androidx.fragment.app.Fragment?);
- method public static androidx.fragment.app.FragmentController createController(androidx.fragment.app.FragmentHostCallback<?>);
- method public void dispatchActivityCreated();
- method @Deprecated public void dispatchConfigurationChanged(android.content.res.Configuration);
- method public boolean dispatchContextItemSelected(android.view.MenuItem);
- method public void dispatchCreate();
- method @Deprecated public boolean dispatchCreateOptionsMenu(android.view.Menu, android.view.MenuInflater);
- method public void dispatchDestroy();
- method public void dispatchDestroyView();
- method @Deprecated public void dispatchLowMemory();
- method @Deprecated public void dispatchMultiWindowModeChanged(boolean);
- method @Deprecated public boolean dispatchOptionsItemSelected(android.view.MenuItem);
- method @Deprecated public void dispatchOptionsMenuClosed(android.view.Menu);
- method public void dispatchPause();
- method @Deprecated public void dispatchPictureInPictureModeChanged(boolean);
- method @Deprecated public boolean dispatchPrepareOptionsMenu(android.view.Menu);
- method @Deprecated public void dispatchReallyStop();
- method public void dispatchResume();
- method public void dispatchStart();
- method public void dispatchStop();
- method @Deprecated public void doLoaderDestroy();
- method @Deprecated public void doLoaderRetain();
- method @Deprecated public void doLoaderStart();
- method @Deprecated public void doLoaderStop(boolean);
- method @Deprecated public void dumpLoaders(String, java.io.FileDescriptor?, java.io.PrintWriter, String![]?);
- method public boolean execPendingActions();
- method public androidx.fragment.app.Fragment? findFragmentByWho(String);
- method public java.util.List<androidx.fragment.app.Fragment!> getActiveFragments(java.util.List<androidx.fragment.app.Fragment!>!);
- method public int getActiveFragmentsCount();
- method public androidx.fragment.app.FragmentManager getSupportFragmentManager();
- method @Deprecated public androidx.loader.app.LoaderManager! getSupportLoaderManager();
- method public void noteStateNotSaved();
- method public android.view.View? onCreateView(android.view.View?, String, android.content.Context, android.util.AttributeSet);
- method @Deprecated public void reportLoaderStart();
- method @Deprecated public void restoreAllState(android.os.Parcelable?, java.util.List<androidx.fragment.app.Fragment!>?);
- method @Deprecated public void restoreAllState(android.os.Parcelable?, androidx.fragment.app.FragmentManagerNonConfig?);
- method @Deprecated public void restoreLoaderNonConfig(androidx.collection.SimpleArrayMap<java.lang.String!,androidx.loader.app.LoaderManager!>!);
- method @Deprecated public void restoreSaveState(android.os.Parcelable?);
- method @Deprecated public androidx.collection.SimpleArrayMap<java.lang.String!,androidx.loader.app.LoaderManager!>? retainLoaderNonConfig();
- method @Deprecated public androidx.fragment.app.FragmentManagerNonConfig? retainNestedNonConfig();
- method @Deprecated public java.util.List<androidx.fragment.app.Fragment!>? retainNonConfig();
- method @Deprecated public android.os.Parcelable? saveAllState();
- }
-
- public class FragmentFactory {
- ctor public FragmentFactory();
- method public androidx.fragment.app.Fragment instantiate(ClassLoader, String);
- method public static Class<? extends androidx.fragment.app.Fragment> loadFragmentClass(ClassLoader, String);
- }
-
- public abstract class FragmentHostCallback<E> extends androidx.fragment.app.FragmentContainer {
- ctor public FragmentHostCallback(android.content.Context, android.os.Handler, int);
- method public void onDump(String, java.io.FileDescriptor?, java.io.PrintWriter, String![]?);
- method public android.view.View? onFindViewById(int);
- method public abstract E? onGetHost();
- method public android.view.LayoutInflater onGetLayoutInflater();
- method public int onGetWindowAnimations();
- method public boolean onHasView();
- method public boolean onHasWindowAnimations();
- method @Deprecated public void onRequestPermissionsFromFragment(androidx.fragment.app.Fragment, String![], int);
- method public boolean onShouldSaveFragmentState(androidx.fragment.app.Fragment);
- method public boolean onShouldShowRequestPermissionRationale(String);
- method public void onStartActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent, int);
- method public void onStartActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent, int, android.os.Bundle?);
- method @Deprecated public void onStartIntentSenderFromFragment(androidx.fragment.app.Fragment, android.content.IntentSender, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
- method public void onSupportInvalidateOptionsMenu();
- }
-
- public abstract class FragmentManager implements androidx.fragment.app.FragmentResultOwner {
- ctor public FragmentManager();
- method public void addFragmentOnAttachListener(androidx.fragment.app.FragmentOnAttachListener);
- method public void addOnBackStackChangedListener(androidx.fragment.app.FragmentManager.OnBackStackChangedListener);
- method public androidx.fragment.app.FragmentTransaction beginTransaction();
- method public void clearBackStack(String);
- method public final void clearFragmentResult(String);
- method public final void clearFragmentResultListener(String);
- method public void dump(String, java.io.FileDescriptor?, java.io.PrintWriter, String![]?);
- method @Deprecated public static void enableDebugLogging(boolean);
- method @MainThread public boolean executePendingTransactions();
- method public static <F extends androidx.fragment.app.Fragment> F findFragment(android.view.View);
- method public androidx.fragment.app.Fragment? findFragmentById(@IdRes int);
- method public androidx.fragment.app.Fragment? findFragmentByTag(String?);
- method public androidx.fragment.app.FragmentManager.BackStackEntry getBackStackEntryAt(int);
- method public int getBackStackEntryCount();
- method public androidx.fragment.app.Fragment? getFragment(android.os.Bundle, String);
- method public androidx.fragment.app.FragmentFactory getFragmentFactory();
- method public java.util.List<androidx.fragment.app.Fragment!> getFragments();
- method public androidx.fragment.app.Fragment? getPrimaryNavigationFragment();
- method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy? getStrictModePolicy();
- method public boolean isDestroyed();
- method public boolean isStateSaved();
- method public void popBackStack();
- method public void popBackStack(String?, int);
- method public void popBackStack(int, int);
- method @MainThread public boolean popBackStackImmediate();
- method @MainThread public boolean popBackStackImmediate(String?, int);
- method public boolean popBackStackImmediate(int, int);
- method public void putFragment(android.os.Bundle, String, androidx.fragment.app.Fragment);
- method public void registerFragmentLifecycleCallbacks(androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks, boolean);
- method public void removeFragmentOnAttachListener(androidx.fragment.app.FragmentOnAttachListener);
- method public void removeOnBackStackChangedListener(androidx.fragment.app.FragmentManager.OnBackStackChangedListener);
- method public void restoreBackStack(String);
- method public void saveBackStack(String);
- method public androidx.fragment.app.Fragment.SavedState? saveFragmentInstanceState(androidx.fragment.app.Fragment);
- method public void setFragmentFactory(androidx.fragment.app.FragmentFactory);
- method public final void setFragmentResult(String, android.os.Bundle);
- method public final void setFragmentResultListener(String, androidx.lifecycle.LifecycleOwner, androidx.fragment.app.FragmentResultListener);
- method public void setStrictModePolicy(androidx.fragment.app.strictmode.FragmentStrictMode.Policy?);
- method public void unregisterFragmentLifecycleCallbacks(androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks);
- field public static final int POP_BACK_STACK_INCLUSIVE = 1; // 0x1
- }
-
- public static interface FragmentManager.BackStackEntry {
- method @Deprecated public CharSequence? getBreadCrumbShortTitle();
- method @Deprecated @StringRes public int getBreadCrumbShortTitleRes();
- method @Deprecated public CharSequence? getBreadCrumbTitle();
- method @Deprecated @StringRes public int getBreadCrumbTitleRes();
- method public int getId();
- method public String? getName();
- }
-
- public abstract static class FragmentManager.FragmentLifecycleCallbacks {
- ctor public FragmentManager.FragmentLifecycleCallbacks();
- method @Deprecated public void onFragmentActivityCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle?);
- method public void onFragmentAttached(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.content.Context);
- method public void onFragmentCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle?);
- method public void onFragmentDestroyed(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
- method public void onFragmentDetached(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
- method public void onFragmentPaused(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
- method public void onFragmentPreAttached(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.content.Context);
- method public void onFragmentPreCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle?);
- method public void onFragmentResumed(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
- method public void onFragmentSaveInstanceState(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle);
- method public void onFragmentStarted(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
- method public void onFragmentStopped(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
- method public void onFragmentViewCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.view.View, android.os.Bundle?);
- method public void onFragmentViewDestroyed(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
- }
-
- public static interface FragmentManager.OnBackStackChangedListener {
- method @MainThread public default void onBackStackChangeCommitted(androidx.fragment.app.Fragment, boolean);
- method @MainThread public default void onBackStackChangeStarted(androidx.fragment.app.Fragment, boolean);
- method @MainThread public void onBackStackChanged();
- }
-
- @Deprecated public class FragmentManagerNonConfig {
- }
-
- public interface FragmentOnAttachListener {
- method @MainThread public void onAttachFragment(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
- }
-
- @Deprecated public abstract class FragmentPagerAdapter extends androidx.viewpager.widget.PagerAdapter {
- ctor @Deprecated public FragmentPagerAdapter(androidx.fragment.app.FragmentManager);
- ctor @Deprecated public FragmentPagerAdapter(androidx.fragment.app.FragmentManager, int);
- method @Deprecated public abstract androidx.fragment.app.Fragment getItem(int);
- method @Deprecated public long getItemId(int);
- method @Deprecated public boolean isViewFromObject(android.view.View, Object);
- field @Deprecated public static final int BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT = 1; // 0x1
- field @Deprecated public static final int BEHAVIOR_SET_USER_VISIBLE_HINT = 0; // 0x0
- }
-
- public interface FragmentResultListener {
- method public void onFragmentResult(String, android.os.Bundle);
- }
-
- public interface FragmentResultOwner {
- method public void clearFragmentResult(String);
- method public void clearFragmentResultListener(String);
- method public void setFragmentResult(String, android.os.Bundle);
- method public void setFragmentResultListener(String, androidx.lifecycle.LifecycleOwner, androidx.fragment.app.FragmentResultListener);
- }
-
- @Deprecated public abstract class FragmentStatePagerAdapter extends androidx.viewpager.widget.PagerAdapter {
- ctor @Deprecated public FragmentStatePagerAdapter(androidx.fragment.app.FragmentManager);
- ctor @Deprecated public FragmentStatePagerAdapter(androidx.fragment.app.FragmentManager, int);
- method @Deprecated public abstract androidx.fragment.app.Fragment getItem(int);
- method @Deprecated public boolean isViewFromObject(android.view.View, Object);
- field @Deprecated public static final int BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT = 1; // 0x1
- field @Deprecated public static final int BEHAVIOR_SET_USER_VISIBLE_HINT = 0; // 0x0
- }
-
- @Deprecated public class FragmentTabHost extends android.widget.TabHost implements android.widget.TabHost.OnTabChangeListener {
- ctor @Deprecated public FragmentTabHost(android.content.Context);
- ctor @Deprecated public FragmentTabHost(android.content.Context, android.util.AttributeSet?);
- method @Deprecated public void addTab(android.widget.TabHost.TabSpec, Class<?>, android.os.Bundle?);
- method @Deprecated public void onTabChanged(String?);
- method @Deprecated public void setup(android.content.Context, androidx.fragment.app.FragmentManager);
- method @Deprecated public void setup(android.content.Context, androidx.fragment.app.FragmentManager, int);
- }
-
- public abstract class FragmentTransaction {
- ctor @Deprecated public FragmentTransaction();
- method public final androidx.fragment.app.FragmentTransaction add(Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?, String?);
- method public androidx.fragment.app.FragmentTransaction add(androidx.fragment.app.Fragment, String?);
- method public final androidx.fragment.app.FragmentTransaction add(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?);
- method public androidx.fragment.app.FragmentTransaction add(@IdRes int, androidx.fragment.app.Fragment);
- method public final androidx.fragment.app.FragmentTransaction add(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?, String?);
- method public androidx.fragment.app.FragmentTransaction add(@IdRes int, androidx.fragment.app.Fragment, String?);
- method public androidx.fragment.app.FragmentTransaction addSharedElement(android.view.View, String);
- method public androidx.fragment.app.FragmentTransaction addToBackStack(String?);
- method public androidx.fragment.app.FragmentTransaction attach(androidx.fragment.app.Fragment);
- method public abstract int commit();
- method public abstract int commitAllowingStateLoss();
- method @MainThread public abstract void commitNow();
- method @MainThread public abstract void commitNowAllowingStateLoss();
- method public androidx.fragment.app.FragmentTransaction detach(androidx.fragment.app.Fragment);
- method public androidx.fragment.app.FragmentTransaction disallowAddToBackStack();
- method public androidx.fragment.app.FragmentTransaction hide(androidx.fragment.app.Fragment);
- method public boolean isAddToBackStackAllowed();
- method public boolean isEmpty();
- method public androidx.fragment.app.FragmentTransaction remove(androidx.fragment.app.Fragment);
- method public final androidx.fragment.app.FragmentTransaction replace(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?);
- method public androidx.fragment.app.FragmentTransaction replace(@IdRes int, androidx.fragment.app.Fragment);
- method public final androidx.fragment.app.FragmentTransaction replace(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?, String?);
- method public androidx.fragment.app.FragmentTransaction replace(@IdRes int, androidx.fragment.app.Fragment, String?);
- method public androidx.fragment.app.FragmentTransaction runOnCommit(Runnable);
- method @Deprecated public androidx.fragment.app.FragmentTransaction setAllowOptimization(boolean);
- method @Deprecated public androidx.fragment.app.FragmentTransaction setBreadCrumbShortTitle(@StringRes int);
- method @Deprecated public androidx.fragment.app.FragmentTransaction setBreadCrumbShortTitle(CharSequence?);
- method @Deprecated public androidx.fragment.app.FragmentTransaction setBreadCrumbTitle(@StringRes int);
- method @Deprecated public androidx.fragment.app.FragmentTransaction setBreadCrumbTitle(CharSequence?);
- method public androidx.fragment.app.FragmentTransaction setCustomAnimations(@AnimRes @AnimatorRes int, @AnimRes @AnimatorRes int);
- method public androidx.fragment.app.FragmentTransaction setCustomAnimations(@AnimRes @AnimatorRes int, @AnimRes @AnimatorRes int, @AnimRes @AnimatorRes int, @AnimRes @AnimatorRes int);
- method public androidx.fragment.app.FragmentTransaction setMaxLifecycle(androidx.fragment.app.Fragment, androidx.lifecycle.Lifecycle.State);
- method public androidx.fragment.app.FragmentTransaction setPrimaryNavigationFragment(androidx.fragment.app.Fragment?);
- method public androidx.fragment.app.FragmentTransaction setReorderingAllowed(boolean);
- method public androidx.fragment.app.FragmentTransaction setTransition(int);
- method @Deprecated public androidx.fragment.app.FragmentTransaction setTransitionStyle(@StyleRes int);
- method public androidx.fragment.app.FragmentTransaction show(androidx.fragment.app.Fragment);
- field public static final int TRANSIT_ENTER_MASK = 4096; // 0x1000
- field public static final int TRANSIT_EXIT_MASK = 8192; // 0x2000
- field public static final int TRANSIT_FRAGMENT_CLOSE = 8194; // 0x2002
- field public static final int TRANSIT_FRAGMENT_FADE = 4099; // 0x1003
- field public static final int TRANSIT_FRAGMENT_MATCH_ACTIVITY_CLOSE = 8197; // 0x2005
- field public static final int TRANSIT_FRAGMENT_MATCH_ACTIVITY_OPEN = 4100; // 0x1004
- field public static final int TRANSIT_FRAGMENT_OPEN = 4097; // 0x1001
- field public static final int TRANSIT_NONE = 0; // 0x0
- field public static final int TRANSIT_UNSET = -1; // 0xffffffff
- }
-
- public class ListFragment extends androidx.fragment.app.Fragment {
- ctor public ListFragment();
- method public android.widget.ListAdapter? getListAdapter();
- method public android.widget.ListView getListView();
- method public long getSelectedItemId();
- method public int getSelectedItemPosition();
- method public void onListItemClick(android.widget.ListView, android.view.View, int, long);
- method public final android.widget.ListAdapter requireListAdapter();
- method public void setEmptyText(CharSequence?);
- method public void setListAdapter(android.widget.ListAdapter?);
- method public void setListShown(boolean);
- method public void setListShownNoAnimation(boolean);
- method public void setSelection(int);
- }
-
-}
-
-package androidx.fragment.app.strictmode {
-
- public final class FragmentReuseViolation extends androidx.fragment.app.strictmode.Violation {
- method public String getPreviousFragmentId();
- property public final String previousFragmentId;
- }
-
- public final class FragmentStrictMode {
- method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy getDefaultPolicy();
- method @VisibleForTesting public void onPolicyViolation(androidx.fragment.app.strictmode.Violation violation);
- method public void setDefaultPolicy(androidx.fragment.app.strictmode.FragmentStrictMode.Policy);
- property public final androidx.fragment.app.strictmode.FragmentStrictMode.Policy defaultPolicy;
- field public static final androidx.fragment.app.strictmode.FragmentStrictMode INSTANCE;
- }
-
- public static fun interface FragmentStrictMode.OnViolationListener {
- method public void onViolation(androidx.fragment.app.strictmode.Violation violation);
- }
-
- public static final class FragmentStrictMode.Policy {
- field public static final androidx.fragment.app.strictmode.FragmentStrictMode.Policy LAX;
- }
-
- public static final class FragmentStrictMode.Policy.Builder {
- ctor public FragmentStrictMode.Policy.Builder();
- method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder allowViolation(Class<? extends androidx.fragment.app.Fragment> fragmentClass, Class<? extends androidx.fragment.app.strictmode.Violation> violationClass);
- method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder allowViolation(String fragmentClass, Class<? extends androidx.fragment.app.strictmode.Violation> violationClass);
- method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy build();
- method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectFragmentReuse();
- method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectFragmentTagUsage();
- method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectRetainInstanceUsage();
- method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectSetUserVisibleHint();
- method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectTargetFragmentUsage();
- method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectWrongFragmentContainer();
- method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectWrongNestedHierarchy();
- method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder penaltyDeath();
- method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder penaltyListener(androidx.fragment.app.strictmode.FragmentStrictMode.OnViolationListener listener);
- method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder penaltyLog();
- }
-
- public final class FragmentTagUsageViolation extends androidx.fragment.app.strictmode.Violation {
- method public android.view.ViewGroup? getParentContainer();
- property public final android.view.ViewGroup? parentContainer;
- }
-
- public final class GetRetainInstanceUsageViolation extends androidx.fragment.app.strictmode.RetainInstanceUsageViolation {
- }
-
- public final class GetTargetFragmentRequestCodeUsageViolation extends androidx.fragment.app.strictmode.TargetFragmentUsageViolation {
- }
-
- public final class GetTargetFragmentUsageViolation extends androidx.fragment.app.strictmode.TargetFragmentUsageViolation {
- }
-
- public abstract class RetainInstanceUsageViolation extends androidx.fragment.app.strictmode.Violation {
- }
-
- public final class SetRetainInstanceUsageViolation extends androidx.fragment.app.strictmode.RetainInstanceUsageViolation {
- }
-
- public final class SetTargetFragmentUsageViolation extends androidx.fragment.app.strictmode.TargetFragmentUsageViolation {
- method public int getRequestCode();
- method public androidx.fragment.app.Fragment getTargetFragment();
- property public final int requestCode;
- property public final androidx.fragment.app.Fragment targetFragment;
- }
-
- public final class SetUserVisibleHintViolation extends androidx.fragment.app.strictmode.Violation {
- method public boolean isVisibleToUser();
- property public final boolean isVisibleToUser;
- }
-
- public abstract class TargetFragmentUsageViolation extends androidx.fragment.app.strictmode.Violation {
- }
-
- public abstract class Violation extends java.lang.RuntimeException {
- method public final androidx.fragment.app.Fragment getFragment();
- property public final androidx.fragment.app.Fragment fragment;
- }
-
- public final class WrongFragmentContainerViolation extends androidx.fragment.app.strictmode.Violation {
- method public android.view.ViewGroup getContainer();
- property public final android.view.ViewGroup container;
- }
-
- public final class WrongNestedHierarchyViolation extends androidx.fragment.app.strictmode.Violation {
- method public int getContainerId();
- method public androidx.fragment.app.Fragment getExpectedParentFragment();
- property public final int containerId;
- property public final androidx.fragment.app.Fragment expectedParentFragment;
- }
-
-}
-
diff --git a/fragment/fragment/api/restricted_current.txt b/fragment/fragment/api/restricted_current.txt
index 369fe63..aed956b 100644
--- a/fragment/fragment/api/restricted_current.txt
+++ b/fragment/fragment/api/restricted_current.txt
@@ -85,8 +85,8 @@
method public final boolean isVisible();
method @Deprecated @CallSuper @MainThread public void onActivityCreated(android.os.Bundle?);
method @Deprecated public void onActivityResult(int, int, android.content.Intent?);
- method @CallSuper @MainThread public void onAttach(android.content.Context);
method @Deprecated @CallSuper @MainThread public void onAttach(android.app.Activity);
+ method @CallSuper @MainThread public void onAttach(android.content.Context);
method @Deprecated @MainThread public void onAttachFragment(androidx.fragment.app.Fragment);
method @CallSuper public void onConfigurationChanged(android.content.res.Configuration);
method @MainThread public boolean onContextItemSelected(android.view.MenuItem);
@@ -102,8 +102,8 @@
method @CallSuper @MainThread public void onDetach();
method public android.view.LayoutInflater onGetLayoutInflater(android.os.Bundle?);
method @MainThread public void onHiddenChanged(boolean);
- method @CallSuper @UiThread public void onInflate(android.content.Context, android.util.AttributeSet, android.os.Bundle?);
method @Deprecated @CallSuper @UiThread public void onInflate(android.app.Activity, android.util.AttributeSet, android.os.Bundle?);
+ method @CallSuper @UiThread public void onInflate(android.content.Context, android.util.AttributeSet, android.os.Bundle?);
method @CallSuper @MainThread public void onLowMemory();
method public void onMultiWindowModeChanged(boolean);
method @Deprecated @MainThread public boolean onOptionsItemSelected(android.view.MenuItem);
@@ -198,8 +198,8 @@
public final class FragmentContainerView extends android.widget.FrameLayout {
ctor public FragmentContainerView(android.content.Context context);
- ctor public FragmentContainerView(android.content.Context context, android.util.AttributeSet? attrs, optional int defStyleAttr);
ctor public FragmentContainerView(android.content.Context context, android.util.AttributeSet? attrs);
+ ctor public FragmentContainerView(android.content.Context context, android.util.AttributeSet? attrs, optional int defStyleAttr);
method public <F extends androidx.fragment.app.Fragment> F getFragment();
}
@@ -238,8 +238,8 @@
method public void noteStateNotSaved();
method public android.view.View? onCreateView(android.view.View?, String, android.content.Context, android.util.AttributeSet);
method @Deprecated public void reportLoaderStart();
- method @Deprecated public void restoreAllState(android.os.Parcelable?, java.util.List<androidx.fragment.app.Fragment!>?);
method @Deprecated public void restoreAllState(android.os.Parcelable?, androidx.fragment.app.FragmentManagerNonConfig?);
+ method @Deprecated public void restoreAllState(android.os.Parcelable?, java.util.List<androidx.fragment.app.Fragment!>?);
method @Deprecated public void restoreLoaderNonConfig(androidx.collection.SimpleArrayMap<java.lang.String!,androidx.loader.app.LoaderManager!>!);
method @Deprecated public void restoreSaveState(android.os.Parcelable?);
method @Deprecated public androidx.collection.SimpleArrayMap<java.lang.String!,androidx.loader.app.LoaderManager!>? retainLoaderNonConfig();
@@ -297,11 +297,11 @@
method public boolean isStateSaved();
method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.fragment.app.FragmentTransaction openTransaction();
method public void popBackStack();
- method public void popBackStack(String?, int);
method public void popBackStack(int, int);
+ method public void popBackStack(String?, int);
method @MainThread public boolean popBackStackImmediate();
- method @MainThread public boolean popBackStackImmediate(String?, int);
method public boolean popBackStackImmediate(int, int);
+ method @MainThread public boolean popBackStackImmediate(String?, int);
method public void putFragment(android.os.Bundle, String, androidx.fragment.app.Fragment);
method public void registerFragmentLifecycleCallbacks(androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks, boolean);
method public void removeFragmentOnAttachListener(androidx.fragment.app.FragmentOnAttachListener);
@@ -398,12 +398,12 @@
public abstract class FragmentTransaction {
ctor @Deprecated public FragmentTransaction();
- method public final androidx.fragment.app.FragmentTransaction add(Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?, String?);
method public androidx.fragment.app.FragmentTransaction add(androidx.fragment.app.Fragment, String?);
- method public final androidx.fragment.app.FragmentTransaction add(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?);
method public androidx.fragment.app.FragmentTransaction add(@IdRes int, androidx.fragment.app.Fragment);
- method public final androidx.fragment.app.FragmentTransaction add(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?, String?);
method public androidx.fragment.app.FragmentTransaction add(@IdRes int, androidx.fragment.app.Fragment, String?);
+ method public final androidx.fragment.app.FragmentTransaction add(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?);
+ method public final androidx.fragment.app.FragmentTransaction add(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?, String?);
+ method public final androidx.fragment.app.FragmentTransaction add(Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?, String?);
method public androidx.fragment.app.FragmentTransaction addSharedElement(android.view.View, String);
method public androidx.fragment.app.FragmentTransaction addToBackStack(String?);
method public androidx.fragment.app.FragmentTransaction attach(androidx.fragment.app.Fragment);
@@ -417,10 +417,10 @@
method public boolean isAddToBackStackAllowed();
method public boolean isEmpty();
method public androidx.fragment.app.FragmentTransaction remove(androidx.fragment.app.Fragment);
- method public final androidx.fragment.app.FragmentTransaction replace(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?);
method public androidx.fragment.app.FragmentTransaction replace(@IdRes int, androidx.fragment.app.Fragment);
- method public final androidx.fragment.app.FragmentTransaction replace(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?, String?);
method public androidx.fragment.app.FragmentTransaction replace(@IdRes int, androidx.fragment.app.Fragment, String?);
+ method public final androidx.fragment.app.FragmentTransaction replace(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?);
+ method public final androidx.fragment.app.FragmentTransaction replace(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?, String?);
method public androidx.fragment.app.FragmentTransaction runOnCommit(Runnable);
method @Deprecated public androidx.fragment.app.FragmentTransaction setAllowOptimization(boolean);
method @Deprecated public androidx.fragment.app.FragmentTransaction setBreadCrumbShortTitle(@StringRes int);
@@ -462,8 +462,8 @@
method public abstract void replaceTargets(Object, java.util.ArrayList<android.view.View!>!, java.util.ArrayList<android.view.View!>!);
method public abstract void scheduleHideFragmentView(Object, android.view.View, java.util.ArrayList<android.view.View!>);
method public abstract void scheduleRemoveTargets(Object, Object?, java.util.ArrayList<android.view.View!>?, Object?, java.util.ArrayList<android.view.View!>?, Object?, java.util.ArrayList<android.view.View!>?);
- method public abstract void setEpicenter(Object, android.view.View?);
method public abstract void setEpicenter(Object, android.graphics.Rect);
+ method public abstract void setEpicenter(Object, android.view.View?);
method public void setListenerForTransitionEnd(androidx.fragment.app.Fragment, Object, androidx.core.os.CancellationSignal, Runnable);
method public abstract void setSharedElementTargets(Object, android.view.View, java.util.ArrayList<android.view.View!>);
method public abstract void swapSharedElementTargets(Object?, java.util.ArrayList<android.view.View!>?, java.util.ArrayList<android.view.View!>?);
diff --git a/fragment/fragment/build.gradle b/fragment/fragment/build.gradle
index 91b6c0f..e2863b8 100644
--- a/fragment/fragment/build.gradle
+++ b/fragment/fragment/build.gradle
@@ -71,7 +71,7 @@
}
androidx {
- name = "Android Support Library fragment"
+ name = "fragment"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2011"
description = "The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren\'t a part of the framework APIs. Compatible on devices running API 14 or later."
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/ChildFragmentStateTest.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/ChildFragmentStateTest.kt
index f9ed241..cdb4b07 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/ChildFragmentStateTest.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/ChildFragmentStateTest.kt
@@ -23,7 +23,6 @@
import androidx.test.filters.LargeTest
import com.google.common.truth.Truth.assertThat
import leakcanary.DetectLeaksAfterTestSuccess
-
import org.junit.Rule
import org.junit.Test
import org.junit.rules.RuleChain
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentAnimationTest.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentAnimationTest.kt
index e312fa9..c2dea61 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentAnimationTest.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentAnimationTest.kt
@@ -39,14 +39,14 @@
import androidx.testutils.waitForExecution
import androidx.testutils.withActivity
import com.google.common.truth.Truth.assertThat
-import org.junit.Before
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
import leakcanary.DetectLeaksAfterTestSuccess
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
import org.junit.rules.RuleChain
+import org.junit.runner.RunWith
@LargeTest
@RunWith(AndroidJUnit4::class)
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentContainerViewTest.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentContainerViewTest.kt
index 9afccb3..7874c18 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentContainerViewTest.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentContainerViewTest.kt
@@ -39,15 +39,15 @@
import androidx.testutils.waitForExecution
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import leakcanary.DetectLeaksAfterTestSuccess
import org.junit.Assert.fail
import org.junit.Before
import org.junit.Rule
import org.junit.Test
-import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
-import leakcanary.DetectLeaksAfterTestSuccess
import org.junit.rules.RuleChain
+import org.junit.runner.RunWith
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentReceiveResultTest.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentReceiveResultTest.kt
index b897a54..9567a88 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentReceiveResultTest.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentReceiveResultTest.kt
@@ -29,14 +29,14 @@
import androidx.test.platform.app.InstrumentationRegistry
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
-import org.junit.Assert.fail
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
import leakcanary.DetectLeaksAfterTestSuccess
+import org.junit.Assert.fail
+import org.junit.Rule
+import org.junit.Test
import org.junit.rules.RuleChain
+import org.junit.runner.RunWith
/**
* Tests for Fragment startActivityForResult and startIntentSenderForResult.
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentStateManagerTest.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentStateManagerTest.kt
index 1af6505..b8096d2 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentStateManagerTest.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentStateManagerTest.kt
@@ -25,7 +25,6 @@
import org.junit.Before
import org.junit.Rule
import org.junit.Test
-
import org.junit.runner.RunWith
import org.mockito.Mockito.mock
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentTransitionTest.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentTransitionTest.kt
index e10aa608..2f174b5 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentTransitionTest.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentTransitionTest.kt
@@ -38,17 +38,17 @@
import androidx.testutils.withUse
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
-import org.junit.After
-import org.junit.Before
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.Parameterized
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
import leakcanary.DetectLeaksAfterTestSuccess
+import org.junit.After
import org.junit.Assert.fail
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
import org.junit.rules.RuleChain
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
@MediumTest
@RunWith(Parameterized::class)
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/NestedFragmentTest.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/NestedFragmentTest.kt
index 5004ac0..e7a22a9 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/NestedFragmentTest.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/NestedFragmentTest.kt
@@ -26,13 +26,13 @@
import androidx.test.filters.LargeTest
import androidx.test.platform.app.InstrumentationRegistry
import com.google.common.truth.Truth.assertThat
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
import leakcanary.DetectLeaksAfterTestSuccess
+import org.junit.Rule
+import org.junit.Test
import org.junit.rules.RuleChain
+import org.junit.runner.RunWith
@Suppress("DEPRECATION")
@RunWith(AndroidJUnit4::class)
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/PostponedTransitionTest.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/PostponedTransitionTest.kt
index fb7c81e..c5378713 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/PostponedTransitionTest.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/PostponedTransitionTest.kt
@@ -33,13 +33,13 @@
import androidx.testutils.waitForExecution
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
import leakcanary.DetectLeaksAfterTestSuccess
+import org.junit.Rule
+import org.junit.Test
import org.junit.rules.RuleChain
+import org.junit.runner.RunWith
@LargeTest
@RunWith(AndroidJUnit4::class)
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/test/NewIntentActivity.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/test/NewIntentActivity.kt
index cbd332d..bdccc7a 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/test/NewIntentActivity.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/test/NewIntentActivity.kt
@@ -18,10 +18,8 @@
import android.content.Intent
import android.os.Bundle
-
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
-
import java.util.concurrent.CountDownLatch
class NewIntentActivity : FragmentActivity() {
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentContainerView.kt b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentContainerView.kt
index 2f826a4..c659047 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentContainerView.kt
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentContainerView.kt
@@ -15,8 +15,6 @@
*/
package androidx.fragment.app
-import android.widget.FrameLayout
-import androidx.fragment.R
import android.animation.LayoutTransition
import android.content.Context
import android.graphics.Canvas
@@ -25,10 +23,12 @@
import android.view.View
import android.view.ViewGroup
import android.view.WindowInsets
+import android.widget.FrameLayout
import androidx.annotation.RequiresApi
import androidx.core.content.withStyledAttributes
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
+import androidx.fragment.R
/**
* FragmentContainerView is a customized Layout designed specifically for Fragments. It extends
diff --git a/glance/glance-appwidget-preview/api/public_plus_experimental_current.txt b/glance/glance-appwidget-preview/api/public_plus_experimental_current.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/glance/glance-appwidget-preview/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/glance/glance-appwidget-preview/build.gradle b/glance/glance-appwidget-preview/build.gradle
index 07567f5..392729b 100644
--- a/glance/glance-appwidget-preview/build.gradle
+++ b/glance/glance-appwidget-preview/build.gradle
@@ -14,19 +14,15 @@
* limitations under the License.
*/
-import androidx.build.AndroidXComposePlugin
import androidx.build.LibraryType
-import androidx.build.Publish
plugins {
id("AndroidXComposePlugin")
id("AndroidXPlugin")
+ id("org.jetbrains.kotlin.android")
id("com.android.library")
}
-// Disable multi-platform; this will only be used on Android.
-AndroidXComposePlugin.applyAndConfigureKotlinPlugin(project, /* isMultiplatformEnabled= */false)
-
dependencies {
api(libs.kotlinStdlib)
@@ -52,7 +48,7 @@
}
androidx {
- name = "Android Glance AppWidget Preview"
+ name = "Glance AppWidget Preview"
type = LibraryType.PUBLISHED_LIBRARY
mavenVersion = LibraryVersions.GLANCE_PREVIEW
inceptionYear = "2022"
diff --git a/glance/glance-appwidget-preview/src/androidAndroidTest/AndroidManifest.xml b/glance/glance-appwidget-preview/src/androidTest/AndroidManifest.xml
similarity index 100%
rename from glance/glance-appwidget-preview/src/androidAndroidTest/AndroidManifest.xml
rename to glance/glance-appwidget-preview/src/androidTest/AndroidManifest.xml
diff --git a/glance/glance-appwidget-preview/src/androidAndroidTest/kotlin/androidx/glance/appwidget/preview/GlanceAppWidgetPreviews.kt b/glance/glance-appwidget-preview/src/androidTest/kotlin/androidx/glance/appwidget/preview/GlanceAppWidgetPreviews.kt
similarity index 99%
rename from glance/glance-appwidget-preview/src/androidAndroidTest/kotlin/androidx/glance/appwidget/preview/GlanceAppWidgetPreviews.kt
rename to glance/glance-appwidget-preview/src/androidTest/kotlin/androidx/glance/appwidget/preview/GlanceAppWidgetPreviews.kt
index 5d35a4f..de68697 100644
--- a/glance/glance-appwidget-preview/src/androidAndroidTest/kotlin/androidx/glance/appwidget/preview/GlanceAppWidgetPreviews.kt
+++ b/glance/glance-appwidget-preview/src/androidTest/kotlin/androidx/glance/appwidget/preview/GlanceAppWidgetPreviews.kt
@@ -18,9 +18,9 @@
import androidx.compose.runtime.Composable
import androidx.compose.ui.unit.dp
-import androidx.glance.action.Action
import androidx.glance.Button
import androidx.glance.GlanceModifier
+import androidx.glance.action.Action
import androidx.glance.appwidget.appWidgetBackground
import androidx.glance.layout.Alignment
import androidx.glance.layout.Column
diff --git a/glance/glance-appwidget-preview/src/androidAndroidTest/kotlin/androidx/glance/appwidget/preview/GlanceAppWidgetViewAdapterTest.kt b/glance/glance-appwidget-preview/src/androidTest/kotlin/androidx/glance/appwidget/preview/GlanceAppWidgetViewAdapterTest.kt
similarity index 99%
rename from glance/glance-appwidget-preview/src/androidAndroidTest/kotlin/androidx/glance/appwidget/preview/GlanceAppWidgetViewAdapterTest.kt
rename to glance/glance-appwidget-preview/src/androidTest/kotlin/androidx/glance/appwidget/preview/GlanceAppWidgetViewAdapterTest.kt
index 92d17b07..20f1961 100644
--- a/glance/glance-appwidget-preview/src/androidAndroidTest/kotlin/androidx/glance/appwidget/preview/GlanceAppWidgetViewAdapterTest.kt
+++ b/glance/glance-appwidget-preview/src/androidTest/kotlin/androidx/glance/appwidget/preview/GlanceAppWidgetViewAdapterTest.kt
@@ -16,7 +16,6 @@
package androidx.glance.appwidget.preview
-import androidx.glance.appwidget.preview.test.R
import android.app.Activity
import android.os.Bundle
import android.view.View
@@ -26,6 +25,7 @@
import android.widget.LinearLayout
import android.widget.RelativeLayout
import android.widget.TextView
+import androidx.glance.appwidget.preview.test.R
import androidx.test.filters.MediumTest
import org.junit.Assert.assertNotNull
import org.junit.Before
diff --git a/glance/glance-appwidget-preview/src/androidAndroidTest/res/layout/glance_appwidget_adapter_test.xml b/glance/glance-appwidget-preview/src/androidTest/res/layout/glance_appwidget_adapter_test.xml
similarity index 100%
rename from glance/glance-appwidget-preview/src/androidAndroidTest/res/layout/glance_appwidget_adapter_test.xml
rename to glance/glance-appwidget-preview/src/androidTest/res/layout/glance_appwidget_adapter_test.xml
diff --git a/glance/glance-appwidget-preview/src/androidAndroidTest/res/values/styles.xml b/glance/glance-appwidget-preview/src/androidTest/res/values/styles.xml
similarity index 100%
rename from glance/glance-appwidget-preview/src/androidAndroidTest/res/values/styles.xml
rename to glance/glance-appwidget-preview/src/androidTest/res/values/styles.xml
diff --git a/glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/ComposableInvoker.kt b/glance/glance-appwidget-preview/src/main/java/androidx/glance/appwidget/preview/ComposableInvoker.kt
similarity index 100%
rename from glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/ComposableInvoker.kt
rename to glance/glance-appwidget-preview/src/main/java/androidx/glance/appwidget/preview/ComposableInvoker.kt
diff --git a/glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/GlanceAppWidgetViewAdapter.kt b/glance/glance-appwidget-preview/src/main/java/androidx/glance/appwidget/preview/GlanceAppWidgetViewAdapter.kt
similarity index 99%
rename from glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/GlanceAppWidgetViewAdapter.kt
rename to glance/glance-appwidget-preview/src/main/java/androidx/glance/appwidget/preview/GlanceAppWidgetViewAdapter.kt
index fab1843..53c5222 100644
--- a/glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/GlanceAppWidgetViewAdapter.kt
+++ b/glance/glance-appwidget-preview/src/main/java/androidx/glance/appwidget/preview/GlanceAppWidgetViewAdapter.kt
@@ -19,14 +19,12 @@
import android.appwidget.AppWidgetHostView
import android.content.Context
import android.util.AttributeSet
-
import androidx.compose.runtime.Composable
import androidx.compose.runtime.currentComposer
import androidx.compose.ui.unit.DpSize
import androidx.glance.appwidget.ExperimentalGlanceRemoteViewsApi
import androidx.glance.appwidget.GlanceRemoteViews
import androidx.glance.appwidget.preview.ComposableInvoker.invokeComposable
-
import kotlinx.coroutines.runBlocking
private const val TOOLS_NS_URI = "http://schemas.android.com/tools"
diff --git a/glance/glance-appwidget/api/1.0.0-beta01.txt b/glance/glance-appwidget/api/1.0.0-beta01.txt
index 72717d0..67c71dc 100644
--- a/glance/glance-appwidget/api/1.0.0-beta01.txt
+++ b/glance/glance-appwidget/api/1.0.0-beta01.txt
@@ -27,9 +27,9 @@
}
public final class CheckboxDefaults {
+ method @androidx.compose.runtime.Composable public androidx.glance.appwidget.CheckBoxColors colors();
method @androidx.compose.runtime.Composable public androidx.glance.appwidget.CheckBoxColors colors(androidx.glance.unit.ColorProvider checkedColor, androidx.glance.unit.ColorProvider uncheckedColor);
method @androidx.compose.runtime.Composable public androidx.glance.appwidget.CheckBoxColors colors(long checkedColor, long uncheckedColor);
- method @androidx.compose.runtime.Composable public androidx.glance.appwidget.CheckBoxColors colors();
field public static final androidx.glance.appwidget.CheckboxDefaults INSTANCE;
}
@@ -68,8 +68,8 @@
ctor public GlanceAppWidgetManager(android.content.Context context);
method public int getAppWidgetId(androidx.glance.GlanceId glanceId);
method public suspend Object? getAppWidgetSizes(androidx.glance.GlanceId glanceId, kotlin.coroutines.Continuation<? super java.util.List<? extends androidx.compose.ui.unit.DpSize>>);
- method public androidx.glance.GlanceId getGlanceIdBy(int appWidgetId);
method public androidx.glance.GlanceId? getGlanceIdBy(android.content.Intent configurationIntent);
+ method public androidx.glance.GlanceId getGlanceIdBy(int appWidgetId);
method public suspend <T extends androidx.glance.appwidget.GlanceAppWidget> Object? getGlanceIds(Class<T> provider, kotlin.coroutines.Continuation<? super java.util.List<? extends androidx.glance.GlanceId>>);
method public suspend <T extends androidx.glance.appwidget.GlanceAppWidgetReceiver> Object? requestPinGlanceAppWidget(Class<T> receiver, optional androidx.glance.appwidget.GlanceAppWidget? preview, optional Object? previewState, optional android.app.PendingIntent? successCallback, optional kotlin.coroutines.Continuation<? super java.lang.Boolean>);
}
@@ -90,8 +90,8 @@
}
public final class LinearProgressIndicatorKt {
- method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.glance.GlanceModifier modifier, optional androidx.glance.unit.ColorProvider color, optional androidx.glance.unit.ColorProvider backgroundColor);
method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.glance.GlanceModifier modifier, optional androidx.glance.unit.ColorProvider color, optional androidx.glance.unit.ColorProvider backgroundColor);
+ method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.glance.GlanceModifier modifier, optional androidx.glance.unit.ColorProvider color, optional androidx.glance.unit.ColorProvider backgroundColor);
}
public final class ProgressIndicatorDefaults {
@@ -106,9 +106,9 @@
}
public final class RadioButtonDefaults {
+ method @androidx.compose.runtime.Composable public androidx.glance.appwidget.RadioButtonColors colors();
method public androidx.glance.appwidget.RadioButtonColors colors(androidx.glance.unit.ColorProvider checkedColor, androidx.glance.unit.ColorProvider uncheckedColor);
method public androidx.glance.appwidget.RadioButtonColors colors(long checkedColor, long uncheckedColor);
- method @androidx.compose.runtime.Composable public androidx.glance.appwidget.RadioButtonColors colors();
field public static final androidx.glance.appwidget.RadioButtonDefaults INSTANCE;
}
@@ -139,8 +139,8 @@
}
public final class SwitchDefaults {
- method @androidx.compose.runtime.Composable public androidx.glance.appwidget.SwitchColors colors(androidx.glance.unit.ColorProvider checkedThumbColor, androidx.glance.unit.ColorProvider uncheckedThumbColor, androidx.glance.unit.ColorProvider checkedTrackColor, androidx.glance.unit.ColorProvider uncheckedTrackColor);
method @androidx.compose.runtime.Composable public androidx.glance.appwidget.SwitchColors colors();
+ method @androidx.compose.runtime.Composable public androidx.glance.appwidget.SwitchColors colors(androidx.glance.unit.ColorProvider checkedThumbColor, androidx.glance.unit.ColorProvider uncheckedThumbColor, androidx.glance.unit.ColorProvider checkedTrackColor, androidx.glance.unit.ColorProvider uncheckedTrackColor);
field public static final androidx.glance.appwidget.SwitchDefaults INSTANCE;
}
@@ -158,16 +158,16 @@
}
public final class RunCallbackActionKt {
- method public static <T extends androidx.glance.appwidget.action.ActionCallback> androidx.glance.action.Action actionRunCallback(Class<T> callbackClass, optional androidx.glance.action.ActionParameters parameters);
method public static inline <reified T extends androidx.glance.appwidget.action.ActionCallback> androidx.glance.action.Action actionRunCallback(optional androidx.glance.action.ActionParameters parameters);
+ method public static <T extends androidx.glance.appwidget.action.ActionCallback> androidx.glance.action.Action actionRunCallback(Class<T> callbackClass, optional androidx.glance.action.ActionParameters parameters);
}
public final class SendBroadcastActionKt {
- method public static androidx.glance.action.Action actionSendBroadcast(String action, optional android.content.ComponentName? componentName);
- method public static androidx.glance.action.Action actionSendBroadcast(android.content.Intent intent);
- method public static androidx.glance.action.Action actionSendBroadcast(android.content.ComponentName componentName);
- method public static <T extends android.content.BroadcastReceiver> androidx.glance.action.Action actionSendBroadcast(Class<T> receiver);
method public static inline <reified T extends android.content.BroadcastReceiver> androidx.glance.action.Action actionSendBroadcast();
+ method public static androidx.glance.action.Action actionSendBroadcast(android.content.ComponentName componentName);
+ method public static androidx.glance.action.Action actionSendBroadcast(android.content.Intent intent);
+ method public static <T extends android.content.BroadcastReceiver> androidx.glance.action.Action actionSendBroadcast(Class<T> receiver);
+ method public static androidx.glance.action.Action actionSendBroadcast(String action, optional android.content.ComponentName? componentName);
}
public final class StartActivityIntentActionKt {
@@ -175,10 +175,10 @@
}
public final class StartServiceActionKt {
- method public static androidx.glance.action.Action actionStartService(android.content.Intent intent, optional boolean isForegroundService);
method public static androidx.glance.action.Action actionStartService(android.content.ComponentName componentName, optional boolean isForegroundService);
- method public static <T extends android.app.Service> androidx.glance.action.Action actionStartService(Class<T> service, optional boolean isForegroundService);
+ method public static androidx.glance.action.Action actionStartService(android.content.Intent intent, optional boolean isForegroundService);
method public static inline <reified T extends android.app.Service> androidx.glance.action.Action actionStartService(optional boolean isForegroundService);
+ method public static <T extends android.app.Service> androidx.glance.action.Action actionStartService(Class<T> service, optional boolean isForegroundService);
}
public final class ToggleableKt {
@@ -256,8 +256,8 @@
public final class GlanceAppWidgetStateKt {
method public static suspend <T> Object? getAppWidgetState(android.content.Context context, androidx.glance.state.GlanceStateDefinition<T> definition, androidx.glance.GlanceId glanceId, kotlin.coroutines.Continuation<? super T>);
method public static suspend <T> Object? getAppWidgetState(androidx.glance.appwidget.GlanceAppWidget, android.content.Context context, androidx.glance.GlanceId glanceId, kotlin.coroutines.Continuation<? super T>);
- method public static suspend <T> Object? updateAppWidgetState(android.content.Context context, androidx.glance.state.GlanceStateDefinition<T> definition, androidx.glance.GlanceId glanceId, kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super T>,?> updateState, kotlin.coroutines.Continuation<? super T>);
method public static suspend Object? updateAppWidgetState(android.content.Context context, androidx.glance.GlanceId glanceId, kotlin.jvm.functions.Function2<? super androidx.datastore.preferences.core.MutablePreferences,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> updateState, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend <T> Object? updateAppWidgetState(android.content.Context context, androidx.glance.state.GlanceStateDefinition<T> definition, androidx.glance.GlanceId glanceId, kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super T>,?> updateState, kotlin.coroutines.Continuation<? super T>);
}
}
diff --git a/glance/glance-appwidget/api/public_plus_experimental_current.txt b/glance/glance-appwidget/api/1.0.0-beta02.txt
similarity index 99%
rename from glance/glance-appwidget/api/public_plus_experimental_current.txt
rename to glance/glance-appwidget/api/1.0.0-beta02.txt
index 4ac3223..37f992a 100644
--- a/glance/glance-appwidget/api/public_plus_experimental_current.txt
+++ b/glance/glance-appwidget/api/1.0.0-beta02.txt
@@ -27,9 +27,9 @@
}
public final class CheckboxDefaults {
+ method @androidx.compose.runtime.Composable public androidx.glance.appwidget.CheckBoxColors colors();
method @androidx.compose.runtime.Composable public androidx.glance.appwidget.CheckBoxColors colors(androidx.glance.unit.ColorProvider checkedColor, androidx.glance.unit.ColorProvider uncheckedColor);
method @androidx.compose.runtime.Composable public androidx.glance.appwidget.CheckBoxColors colors(long checkedColor, long uncheckedColor);
- method @androidx.compose.runtime.Composable public androidx.glance.appwidget.CheckBoxColors colors();
field public static final androidx.glance.appwidget.CheckboxDefaults INSTANCE;
}
@@ -71,8 +71,8 @@
ctor public GlanceAppWidgetManager(android.content.Context context);
method public int getAppWidgetId(androidx.glance.GlanceId glanceId);
method public suspend Object? getAppWidgetSizes(androidx.glance.GlanceId glanceId, kotlin.coroutines.Continuation<? super java.util.List<? extends androidx.compose.ui.unit.DpSize>>);
- method public androidx.glance.GlanceId getGlanceIdBy(int appWidgetId);
method public androidx.glance.GlanceId? getGlanceIdBy(android.content.Intent configurationIntent);
+ method public androidx.glance.GlanceId getGlanceIdBy(int appWidgetId);
method public suspend <T extends androidx.glance.appwidget.GlanceAppWidget> Object? getGlanceIds(Class<T> provider, kotlin.coroutines.Continuation<? super java.util.List<? extends androidx.glance.GlanceId>>);
method public suspend <T extends androidx.glance.appwidget.GlanceAppWidgetReceiver> Object? requestPinGlanceAppWidget(Class<T> receiver, optional androidx.glance.appwidget.GlanceAppWidget? preview, optional Object? previewState, optional android.app.PendingIntent? successCallback, optional kotlin.coroutines.Continuation<? super java.lang.Boolean>);
}
@@ -98,8 +98,8 @@
}
public final class LinearProgressIndicatorKt {
- method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.glance.GlanceModifier modifier, optional androidx.glance.unit.ColorProvider color, optional androidx.glance.unit.ColorProvider backgroundColor);
method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.glance.GlanceModifier modifier, optional androidx.glance.unit.ColorProvider color, optional androidx.glance.unit.ColorProvider backgroundColor);
+ method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.glance.GlanceModifier modifier, optional androidx.glance.unit.ColorProvider color, optional androidx.glance.unit.ColorProvider backgroundColor);
}
public final class ProgressIndicatorDefaults {
@@ -114,9 +114,9 @@
}
public final class RadioButtonDefaults {
+ method @androidx.compose.runtime.Composable public androidx.glance.appwidget.RadioButtonColors colors();
method public androidx.glance.appwidget.RadioButtonColors colors(androidx.glance.unit.ColorProvider checkedColor, androidx.glance.unit.ColorProvider uncheckedColor);
method public androidx.glance.appwidget.RadioButtonColors colors(long checkedColor, long uncheckedColor);
- method @androidx.compose.runtime.Composable public androidx.glance.appwidget.RadioButtonColors colors();
field public static final androidx.glance.appwidget.RadioButtonDefaults INSTANCE;
}
@@ -153,8 +153,8 @@
}
public final class SwitchDefaults {
- method @androidx.compose.runtime.Composable public androidx.glance.appwidget.SwitchColors colors(androidx.glance.unit.ColorProvider checkedThumbColor, androidx.glance.unit.ColorProvider uncheckedThumbColor, androidx.glance.unit.ColorProvider checkedTrackColor, androidx.glance.unit.ColorProvider uncheckedTrackColor);
method @androidx.compose.runtime.Composable public androidx.glance.appwidget.SwitchColors colors();
+ method @androidx.compose.runtime.Composable public androidx.glance.appwidget.SwitchColors colors(androidx.glance.unit.ColorProvider checkedThumbColor, androidx.glance.unit.ColorProvider uncheckedThumbColor, androidx.glance.unit.ColorProvider checkedTrackColor, androidx.glance.unit.ColorProvider uncheckedTrackColor);
field public static final androidx.glance.appwidget.SwitchDefaults INSTANCE;
}
@@ -172,16 +172,16 @@
}
public final class RunCallbackActionKt {
- method public static <T extends androidx.glance.appwidget.action.ActionCallback> androidx.glance.action.Action actionRunCallback(Class<T> callbackClass, optional androidx.glance.action.ActionParameters parameters);
method public static inline <reified T extends androidx.glance.appwidget.action.ActionCallback> androidx.glance.action.Action actionRunCallback(optional androidx.glance.action.ActionParameters parameters);
+ method public static <T extends androidx.glance.appwidget.action.ActionCallback> androidx.glance.action.Action actionRunCallback(Class<T> callbackClass, optional androidx.glance.action.ActionParameters parameters);
}
public final class SendBroadcastActionKt {
- method public static androidx.glance.action.Action actionSendBroadcast(String action, optional android.content.ComponentName? componentName);
- method public static androidx.glance.action.Action actionSendBroadcast(android.content.Intent intent);
- method public static androidx.glance.action.Action actionSendBroadcast(android.content.ComponentName componentName);
- method public static <T extends android.content.BroadcastReceiver> androidx.glance.action.Action actionSendBroadcast(Class<T> receiver);
method public static inline <reified T extends android.content.BroadcastReceiver> androidx.glance.action.Action actionSendBroadcast();
+ method public static androidx.glance.action.Action actionSendBroadcast(android.content.ComponentName componentName);
+ method public static androidx.glance.action.Action actionSendBroadcast(android.content.Intent intent);
+ method public static <T extends android.content.BroadcastReceiver> androidx.glance.action.Action actionSendBroadcast(Class<T> receiver);
+ method public static androidx.glance.action.Action actionSendBroadcast(String action, optional android.content.ComponentName? componentName);
}
public final class StartActivityIntentActionKt {
@@ -189,10 +189,10 @@
}
public final class StartServiceActionKt {
- method public static androidx.glance.action.Action actionStartService(android.content.Intent intent, optional boolean isForegroundService);
method public static androidx.glance.action.Action actionStartService(android.content.ComponentName componentName, optional boolean isForegroundService);
- method public static <T extends android.app.Service> androidx.glance.action.Action actionStartService(Class<T> service, optional boolean isForegroundService);
+ method public static androidx.glance.action.Action actionStartService(android.content.Intent intent, optional boolean isForegroundService);
method public static inline <reified T extends android.app.Service> androidx.glance.action.Action actionStartService(optional boolean isForegroundService);
+ method public static <T extends android.app.Service> androidx.glance.action.Action actionStartService(Class<T> service, optional boolean isForegroundService);
}
public final class ToggleableKt {
@@ -270,8 +270,8 @@
public final class GlanceAppWidgetStateKt {
method public static suspend <T> Object? getAppWidgetState(android.content.Context context, androidx.glance.state.GlanceStateDefinition<T> definition, androidx.glance.GlanceId glanceId, kotlin.coroutines.Continuation<? super T>);
method public static suspend <T> Object? getAppWidgetState(androidx.glance.appwidget.GlanceAppWidget, android.content.Context context, androidx.glance.GlanceId glanceId, kotlin.coroutines.Continuation<? super T>);
- method public static suspend <T> Object? updateAppWidgetState(android.content.Context context, androidx.glance.state.GlanceStateDefinition<T> definition, androidx.glance.GlanceId glanceId, kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super T>,?> updateState, kotlin.coroutines.Continuation<? super T>);
method public static suspend Object? updateAppWidgetState(android.content.Context context, androidx.glance.GlanceId glanceId, kotlin.jvm.functions.Function2<? super androidx.datastore.preferences.core.MutablePreferences,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> updateState, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend <T> Object? updateAppWidgetState(android.content.Context context, androidx.glance.state.GlanceStateDefinition<T> definition, androidx.glance.GlanceId glanceId, kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super T>,?> updateState, kotlin.coroutines.Continuation<? super T>);
}
}
diff --git a/glance/glance-appwidget/api/current.txt b/glance/glance-appwidget/api/current.txt
index 72717d0..37f992a 100644
--- a/glance/glance-appwidget/api/current.txt
+++ b/glance/glance-appwidget/api/current.txt
@@ -27,9 +27,9 @@
}
public final class CheckboxDefaults {
+ method @androidx.compose.runtime.Composable public androidx.glance.appwidget.CheckBoxColors colors();
method @androidx.compose.runtime.Composable public androidx.glance.appwidget.CheckBoxColors colors(androidx.glance.unit.ColorProvider checkedColor, androidx.glance.unit.ColorProvider uncheckedColor);
method @androidx.compose.runtime.Composable public androidx.glance.appwidget.CheckBoxColors colors(long checkedColor, long uncheckedColor);
- method @androidx.compose.runtime.Composable public androidx.glance.appwidget.CheckBoxColors colors();
field public static final androidx.glance.appwidget.CheckboxDefaults INSTANCE;
}
@@ -47,6 +47,9 @@
method public static androidx.glance.GlanceModifier cornerRadius(androidx.glance.GlanceModifier, @DimenRes int radius);
}
+ @kotlin.RequiresOptIn(message="This API is experimental and is likely to change in the future.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalGlanceRemoteViewsApi {
+ }
+
public abstract class GlanceAppWidget {
ctor public GlanceAppWidget(optional @LayoutRes int errorUiLayout);
method public androidx.glance.appwidget.SizeMode getSizeMode();
@@ -68,8 +71,8 @@
ctor public GlanceAppWidgetManager(android.content.Context context);
method public int getAppWidgetId(androidx.glance.GlanceId glanceId);
method public suspend Object? getAppWidgetSizes(androidx.glance.GlanceId glanceId, kotlin.coroutines.Continuation<? super java.util.List<? extends androidx.compose.ui.unit.DpSize>>);
- method public androidx.glance.GlanceId getGlanceIdBy(int appWidgetId);
method public androidx.glance.GlanceId? getGlanceIdBy(android.content.Intent configurationIntent);
+ method public androidx.glance.GlanceId getGlanceIdBy(int appWidgetId);
method public suspend <T extends androidx.glance.appwidget.GlanceAppWidget> Object? getGlanceIds(Class<T> provider, kotlin.coroutines.Continuation<? super java.util.List<? extends androidx.glance.GlanceId>>);
method public suspend <T extends androidx.glance.appwidget.GlanceAppWidgetReceiver> Object? requestPinGlanceAppWidget(Class<T> receiver, optional androidx.glance.appwidget.GlanceAppWidget? preview, optional Object? previewState, optional android.app.PendingIntent? successCallback, optional kotlin.coroutines.Continuation<? super java.lang.Boolean>);
}
@@ -85,13 +88,18 @@
public static final class GlanceAppWidgetReceiver.Companion {
}
+ @androidx.glance.appwidget.ExperimentalGlanceRemoteViewsApi public final class GlanceRemoteViews {
+ ctor public GlanceRemoteViews();
+ method public suspend Object? compose(android.content.Context context, long size, optional Object? state, optional android.os.Bundle appWidgetOptions, kotlin.jvm.functions.Function0<kotlin.Unit> content, kotlin.coroutines.Continuation<? super androidx.glance.appwidget.RemoteViewsCompositionResult>);
+ }
+
public final class ImageProvidersKt {
method public static androidx.glance.ImageProvider ImageProvider(android.net.Uri uri);
}
public final class LinearProgressIndicatorKt {
- method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.glance.GlanceModifier modifier, optional androidx.glance.unit.ColorProvider color, optional androidx.glance.unit.ColorProvider backgroundColor);
method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.glance.GlanceModifier modifier, optional androidx.glance.unit.ColorProvider color, optional androidx.glance.unit.ColorProvider backgroundColor);
+ method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.glance.GlanceModifier modifier, optional androidx.glance.unit.ColorProvider color, optional androidx.glance.unit.ColorProvider backgroundColor);
}
public final class ProgressIndicatorDefaults {
@@ -106,9 +114,9 @@
}
public final class RadioButtonDefaults {
+ method @androidx.compose.runtime.Composable public androidx.glance.appwidget.RadioButtonColors colors();
method public androidx.glance.appwidget.RadioButtonColors colors(androidx.glance.unit.ColorProvider checkedColor, androidx.glance.unit.ColorProvider uncheckedColor);
method public androidx.glance.appwidget.RadioButtonColors colors(long checkedColor, long uncheckedColor);
- method @androidx.compose.runtime.Composable public androidx.glance.appwidget.RadioButtonColors colors();
field public static final androidx.glance.appwidget.RadioButtonDefaults INSTANCE;
}
@@ -118,6 +126,12 @@
method public static androidx.glance.GlanceModifier selectableGroup(androidx.glance.GlanceModifier);
}
+ @androidx.glance.appwidget.ExperimentalGlanceRemoteViewsApi public final class RemoteViewsCompositionResult {
+ ctor public RemoteViewsCompositionResult(android.widget.RemoteViews remoteViews);
+ method public android.widget.RemoteViews getRemoteViews();
+ property public final android.widget.RemoteViews remoteViews;
+ }
+
public sealed interface SizeMode {
}
@@ -139,8 +153,8 @@
}
public final class SwitchDefaults {
- method @androidx.compose.runtime.Composable public androidx.glance.appwidget.SwitchColors colors(androidx.glance.unit.ColorProvider checkedThumbColor, androidx.glance.unit.ColorProvider uncheckedThumbColor, androidx.glance.unit.ColorProvider checkedTrackColor, androidx.glance.unit.ColorProvider uncheckedTrackColor);
method @androidx.compose.runtime.Composable public androidx.glance.appwidget.SwitchColors colors();
+ method @androidx.compose.runtime.Composable public androidx.glance.appwidget.SwitchColors colors(androidx.glance.unit.ColorProvider checkedThumbColor, androidx.glance.unit.ColorProvider uncheckedThumbColor, androidx.glance.unit.ColorProvider checkedTrackColor, androidx.glance.unit.ColorProvider uncheckedTrackColor);
field public static final androidx.glance.appwidget.SwitchDefaults INSTANCE;
}
@@ -158,16 +172,16 @@
}
public final class RunCallbackActionKt {
- method public static <T extends androidx.glance.appwidget.action.ActionCallback> androidx.glance.action.Action actionRunCallback(Class<T> callbackClass, optional androidx.glance.action.ActionParameters parameters);
method public static inline <reified T extends androidx.glance.appwidget.action.ActionCallback> androidx.glance.action.Action actionRunCallback(optional androidx.glance.action.ActionParameters parameters);
+ method public static <T extends androidx.glance.appwidget.action.ActionCallback> androidx.glance.action.Action actionRunCallback(Class<T> callbackClass, optional androidx.glance.action.ActionParameters parameters);
}
public final class SendBroadcastActionKt {
- method public static androidx.glance.action.Action actionSendBroadcast(String action, optional android.content.ComponentName? componentName);
- method public static androidx.glance.action.Action actionSendBroadcast(android.content.Intent intent);
- method public static androidx.glance.action.Action actionSendBroadcast(android.content.ComponentName componentName);
- method public static <T extends android.content.BroadcastReceiver> androidx.glance.action.Action actionSendBroadcast(Class<T> receiver);
method public static inline <reified T extends android.content.BroadcastReceiver> androidx.glance.action.Action actionSendBroadcast();
+ method public static androidx.glance.action.Action actionSendBroadcast(android.content.ComponentName componentName);
+ method public static androidx.glance.action.Action actionSendBroadcast(android.content.Intent intent);
+ method public static <T extends android.content.BroadcastReceiver> androidx.glance.action.Action actionSendBroadcast(Class<T> receiver);
+ method public static androidx.glance.action.Action actionSendBroadcast(String action, optional android.content.ComponentName? componentName);
}
public final class StartActivityIntentActionKt {
@@ -175,10 +189,10 @@
}
public final class StartServiceActionKt {
- method public static androidx.glance.action.Action actionStartService(android.content.Intent intent, optional boolean isForegroundService);
method public static androidx.glance.action.Action actionStartService(android.content.ComponentName componentName, optional boolean isForegroundService);
- method public static <T extends android.app.Service> androidx.glance.action.Action actionStartService(Class<T> service, optional boolean isForegroundService);
+ method public static androidx.glance.action.Action actionStartService(android.content.Intent intent, optional boolean isForegroundService);
method public static inline <reified T extends android.app.Service> androidx.glance.action.Action actionStartService(optional boolean isForegroundService);
+ method public static <T extends android.app.Service> androidx.glance.action.Action actionStartService(Class<T> service, optional boolean isForegroundService);
}
public final class ToggleableKt {
@@ -256,8 +270,8 @@
public final class GlanceAppWidgetStateKt {
method public static suspend <T> Object? getAppWidgetState(android.content.Context context, androidx.glance.state.GlanceStateDefinition<T> definition, androidx.glance.GlanceId glanceId, kotlin.coroutines.Continuation<? super T>);
method public static suspend <T> Object? getAppWidgetState(androidx.glance.appwidget.GlanceAppWidget, android.content.Context context, androidx.glance.GlanceId glanceId, kotlin.coroutines.Continuation<? super T>);
- method public static suspend <T> Object? updateAppWidgetState(android.content.Context context, androidx.glance.state.GlanceStateDefinition<T> definition, androidx.glance.GlanceId glanceId, kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super T>,?> updateState, kotlin.coroutines.Continuation<? super T>);
method public static suspend Object? updateAppWidgetState(android.content.Context context, androidx.glance.GlanceId glanceId, kotlin.jvm.functions.Function2<? super androidx.datastore.preferences.core.MutablePreferences,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> updateState, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend <T> Object? updateAppWidgetState(android.content.Context context, androidx.glance.state.GlanceStateDefinition<T> definition, androidx.glance.GlanceId glanceId, kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super T>,?> updateState, kotlin.coroutines.Continuation<? super T>);
}
}
diff --git a/glance/glance-appwidget/api/public_plus_experimental_1.0.0-beta01.txt b/glance/glance-appwidget/api/public_plus_experimental_1.0.0-beta01.txt
index 4ac3223..37f992a 100644
--- a/glance/glance-appwidget/api/public_plus_experimental_1.0.0-beta01.txt
+++ b/glance/glance-appwidget/api/public_plus_experimental_1.0.0-beta01.txt
@@ -27,9 +27,9 @@
}
public final class CheckboxDefaults {
+ method @androidx.compose.runtime.Composable public androidx.glance.appwidget.CheckBoxColors colors();
method @androidx.compose.runtime.Composable public androidx.glance.appwidget.CheckBoxColors colors(androidx.glance.unit.ColorProvider checkedColor, androidx.glance.unit.ColorProvider uncheckedColor);
method @androidx.compose.runtime.Composable public androidx.glance.appwidget.CheckBoxColors colors(long checkedColor, long uncheckedColor);
- method @androidx.compose.runtime.Composable public androidx.glance.appwidget.CheckBoxColors colors();
field public static final androidx.glance.appwidget.CheckboxDefaults INSTANCE;
}
@@ -71,8 +71,8 @@
ctor public GlanceAppWidgetManager(android.content.Context context);
method public int getAppWidgetId(androidx.glance.GlanceId glanceId);
method public suspend Object? getAppWidgetSizes(androidx.glance.GlanceId glanceId, kotlin.coroutines.Continuation<? super java.util.List<? extends androidx.compose.ui.unit.DpSize>>);
- method public androidx.glance.GlanceId getGlanceIdBy(int appWidgetId);
method public androidx.glance.GlanceId? getGlanceIdBy(android.content.Intent configurationIntent);
+ method public androidx.glance.GlanceId getGlanceIdBy(int appWidgetId);
method public suspend <T extends androidx.glance.appwidget.GlanceAppWidget> Object? getGlanceIds(Class<T> provider, kotlin.coroutines.Continuation<? super java.util.List<? extends androidx.glance.GlanceId>>);
method public suspend <T extends androidx.glance.appwidget.GlanceAppWidgetReceiver> Object? requestPinGlanceAppWidget(Class<T> receiver, optional androidx.glance.appwidget.GlanceAppWidget? preview, optional Object? previewState, optional android.app.PendingIntent? successCallback, optional kotlin.coroutines.Continuation<? super java.lang.Boolean>);
}
@@ -98,8 +98,8 @@
}
public final class LinearProgressIndicatorKt {
- method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.glance.GlanceModifier modifier, optional androidx.glance.unit.ColorProvider color, optional androidx.glance.unit.ColorProvider backgroundColor);
method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.glance.GlanceModifier modifier, optional androidx.glance.unit.ColorProvider color, optional androidx.glance.unit.ColorProvider backgroundColor);
+ method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.glance.GlanceModifier modifier, optional androidx.glance.unit.ColorProvider color, optional androidx.glance.unit.ColorProvider backgroundColor);
}
public final class ProgressIndicatorDefaults {
@@ -114,9 +114,9 @@
}
public final class RadioButtonDefaults {
+ method @androidx.compose.runtime.Composable public androidx.glance.appwidget.RadioButtonColors colors();
method public androidx.glance.appwidget.RadioButtonColors colors(androidx.glance.unit.ColorProvider checkedColor, androidx.glance.unit.ColorProvider uncheckedColor);
method public androidx.glance.appwidget.RadioButtonColors colors(long checkedColor, long uncheckedColor);
- method @androidx.compose.runtime.Composable public androidx.glance.appwidget.RadioButtonColors colors();
field public static final androidx.glance.appwidget.RadioButtonDefaults INSTANCE;
}
@@ -153,8 +153,8 @@
}
public final class SwitchDefaults {
- method @androidx.compose.runtime.Composable public androidx.glance.appwidget.SwitchColors colors(androidx.glance.unit.ColorProvider checkedThumbColor, androidx.glance.unit.ColorProvider uncheckedThumbColor, androidx.glance.unit.ColorProvider checkedTrackColor, androidx.glance.unit.ColorProvider uncheckedTrackColor);
method @androidx.compose.runtime.Composable public androidx.glance.appwidget.SwitchColors colors();
+ method @androidx.compose.runtime.Composable public androidx.glance.appwidget.SwitchColors colors(androidx.glance.unit.ColorProvider checkedThumbColor, androidx.glance.unit.ColorProvider uncheckedThumbColor, androidx.glance.unit.ColorProvider checkedTrackColor, androidx.glance.unit.ColorProvider uncheckedTrackColor);
field public static final androidx.glance.appwidget.SwitchDefaults INSTANCE;
}
@@ -172,16 +172,16 @@
}
public final class RunCallbackActionKt {
- method public static <T extends androidx.glance.appwidget.action.ActionCallback> androidx.glance.action.Action actionRunCallback(Class<T> callbackClass, optional androidx.glance.action.ActionParameters parameters);
method public static inline <reified T extends androidx.glance.appwidget.action.ActionCallback> androidx.glance.action.Action actionRunCallback(optional androidx.glance.action.ActionParameters parameters);
+ method public static <T extends androidx.glance.appwidget.action.ActionCallback> androidx.glance.action.Action actionRunCallback(Class<T> callbackClass, optional androidx.glance.action.ActionParameters parameters);
}
public final class SendBroadcastActionKt {
- method public static androidx.glance.action.Action actionSendBroadcast(String action, optional android.content.ComponentName? componentName);
- method public static androidx.glance.action.Action actionSendBroadcast(android.content.Intent intent);
- method public static androidx.glance.action.Action actionSendBroadcast(android.content.ComponentName componentName);
- method public static <T extends android.content.BroadcastReceiver> androidx.glance.action.Action actionSendBroadcast(Class<T> receiver);
method public static inline <reified T extends android.content.BroadcastReceiver> androidx.glance.action.Action actionSendBroadcast();
+ method public static androidx.glance.action.Action actionSendBroadcast(android.content.ComponentName componentName);
+ method public static androidx.glance.action.Action actionSendBroadcast(android.content.Intent intent);
+ method public static <T extends android.content.BroadcastReceiver> androidx.glance.action.Action actionSendBroadcast(Class<T> receiver);
+ method public static androidx.glance.action.Action actionSendBroadcast(String action, optional android.content.ComponentName? componentName);
}
public final class StartActivityIntentActionKt {
@@ -189,10 +189,10 @@
}
public final class StartServiceActionKt {
- method public static androidx.glance.action.Action actionStartService(android.content.Intent intent, optional boolean isForegroundService);
method public static androidx.glance.action.Action actionStartService(android.content.ComponentName componentName, optional boolean isForegroundService);
- method public static <T extends android.app.Service> androidx.glance.action.Action actionStartService(Class<T> service, optional boolean isForegroundService);
+ method public static androidx.glance.action.Action actionStartService(android.content.Intent intent, optional boolean isForegroundService);
method public static inline <reified T extends android.app.Service> androidx.glance.action.Action actionStartService(optional boolean isForegroundService);
+ method public static <T extends android.app.Service> androidx.glance.action.Action actionStartService(Class<T> service, optional boolean isForegroundService);
}
public final class ToggleableKt {
@@ -270,8 +270,8 @@
public final class GlanceAppWidgetStateKt {
method public static suspend <T> Object? getAppWidgetState(android.content.Context context, androidx.glance.state.GlanceStateDefinition<T> definition, androidx.glance.GlanceId glanceId, kotlin.coroutines.Continuation<? super T>);
method public static suspend <T> Object? getAppWidgetState(androidx.glance.appwidget.GlanceAppWidget, android.content.Context context, androidx.glance.GlanceId glanceId, kotlin.coroutines.Continuation<? super T>);
- method public static suspend <T> Object? updateAppWidgetState(android.content.Context context, androidx.glance.state.GlanceStateDefinition<T> definition, androidx.glance.GlanceId glanceId, kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super T>,?> updateState, kotlin.coroutines.Continuation<? super T>);
method public static suspend Object? updateAppWidgetState(android.content.Context context, androidx.glance.GlanceId glanceId, kotlin.jvm.functions.Function2<? super androidx.datastore.preferences.core.MutablePreferences,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> updateState, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend <T> Object? updateAppWidgetState(android.content.Context context, androidx.glance.state.GlanceStateDefinition<T> definition, androidx.glance.GlanceId glanceId, kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super T>,?> updateState, kotlin.coroutines.Continuation<? super T>);
}
}
diff --git a/glance/glance-appwidget/api/res-1.0.0-beta02.txt b/glance/glance-appwidget/api/res-1.0.0-beta02.txt
new file mode 100644
index 0000000..dba4906
--- /dev/null
+++ b/glance/glance-appwidget/api/res-1.0.0-beta02.txt
@@ -0,0 +1,2 @@
+bool glance_appwidget_available
+layout glance_default_loading_layout
diff --git a/glance/glance-appwidget/api/restricted_1.0.0-beta01.txt b/glance/glance-appwidget/api/restricted_1.0.0-beta01.txt
index 72717d0..67c71dc 100644
--- a/glance/glance-appwidget/api/restricted_1.0.0-beta01.txt
+++ b/glance/glance-appwidget/api/restricted_1.0.0-beta01.txt
@@ -27,9 +27,9 @@
}
public final class CheckboxDefaults {
+ method @androidx.compose.runtime.Composable public androidx.glance.appwidget.CheckBoxColors colors();
method @androidx.compose.runtime.Composable public androidx.glance.appwidget.CheckBoxColors colors(androidx.glance.unit.ColorProvider checkedColor, androidx.glance.unit.ColorProvider uncheckedColor);
method @androidx.compose.runtime.Composable public androidx.glance.appwidget.CheckBoxColors colors(long checkedColor, long uncheckedColor);
- method @androidx.compose.runtime.Composable public androidx.glance.appwidget.CheckBoxColors colors();
field public static final androidx.glance.appwidget.CheckboxDefaults INSTANCE;
}
@@ -68,8 +68,8 @@
ctor public GlanceAppWidgetManager(android.content.Context context);
method public int getAppWidgetId(androidx.glance.GlanceId glanceId);
method public suspend Object? getAppWidgetSizes(androidx.glance.GlanceId glanceId, kotlin.coroutines.Continuation<? super java.util.List<? extends androidx.compose.ui.unit.DpSize>>);
- method public androidx.glance.GlanceId getGlanceIdBy(int appWidgetId);
method public androidx.glance.GlanceId? getGlanceIdBy(android.content.Intent configurationIntent);
+ method public androidx.glance.GlanceId getGlanceIdBy(int appWidgetId);
method public suspend <T extends androidx.glance.appwidget.GlanceAppWidget> Object? getGlanceIds(Class<T> provider, kotlin.coroutines.Continuation<? super java.util.List<? extends androidx.glance.GlanceId>>);
method public suspend <T extends androidx.glance.appwidget.GlanceAppWidgetReceiver> Object? requestPinGlanceAppWidget(Class<T> receiver, optional androidx.glance.appwidget.GlanceAppWidget? preview, optional Object? previewState, optional android.app.PendingIntent? successCallback, optional kotlin.coroutines.Continuation<? super java.lang.Boolean>);
}
@@ -90,8 +90,8 @@
}
public final class LinearProgressIndicatorKt {
- method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.glance.GlanceModifier modifier, optional androidx.glance.unit.ColorProvider color, optional androidx.glance.unit.ColorProvider backgroundColor);
method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.glance.GlanceModifier modifier, optional androidx.glance.unit.ColorProvider color, optional androidx.glance.unit.ColorProvider backgroundColor);
+ method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.glance.GlanceModifier modifier, optional androidx.glance.unit.ColorProvider color, optional androidx.glance.unit.ColorProvider backgroundColor);
}
public final class ProgressIndicatorDefaults {
@@ -106,9 +106,9 @@
}
public final class RadioButtonDefaults {
+ method @androidx.compose.runtime.Composable public androidx.glance.appwidget.RadioButtonColors colors();
method public androidx.glance.appwidget.RadioButtonColors colors(androidx.glance.unit.ColorProvider checkedColor, androidx.glance.unit.ColorProvider uncheckedColor);
method public androidx.glance.appwidget.RadioButtonColors colors(long checkedColor, long uncheckedColor);
- method @androidx.compose.runtime.Composable public androidx.glance.appwidget.RadioButtonColors colors();
field public static final androidx.glance.appwidget.RadioButtonDefaults INSTANCE;
}
@@ -139,8 +139,8 @@
}
public final class SwitchDefaults {
- method @androidx.compose.runtime.Composable public androidx.glance.appwidget.SwitchColors colors(androidx.glance.unit.ColorProvider checkedThumbColor, androidx.glance.unit.ColorProvider uncheckedThumbColor, androidx.glance.unit.ColorProvider checkedTrackColor, androidx.glance.unit.ColorProvider uncheckedTrackColor);
method @androidx.compose.runtime.Composable public androidx.glance.appwidget.SwitchColors colors();
+ method @androidx.compose.runtime.Composable public androidx.glance.appwidget.SwitchColors colors(androidx.glance.unit.ColorProvider checkedThumbColor, androidx.glance.unit.ColorProvider uncheckedThumbColor, androidx.glance.unit.ColorProvider checkedTrackColor, androidx.glance.unit.ColorProvider uncheckedTrackColor);
field public static final androidx.glance.appwidget.SwitchDefaults INSTANCE;
}
@@ -158,16 +158,16 @@
}
public final class RunCallbackActionKt {
- method public static <T extends androidx.glance.appwidget.action.ActionCallback> androidx.glance.action.Action actionRunCallback(Class<T> callbackClass, optional androidx.glance.action.ActionParameters parameters);
method public static inline <reified T extends androidx.glance.appwidget.action.ActionCallback> androidx.glance.action.Action actionRunCallback(optional androidx.glance.action.ActionParameters parameters);
+ method public static <T extends androidx.glance.appwidget.action.ActionCallback> androidx.glance.action.Action actionRunCallback(Class<T> callbackClass, optional androidx.glance.action.ActionParameters parameters);
}
public final class SendBroadcastActionKt {
- method public static androidx.glance.action.Action actionSendBroadcast(String action, optional android.content.ComponentName? componentName);
- method public static androidx.glance.action.Action actionSendBroadcast(android.content.Intent intent);
- method public static androidx.glance.action.Action actionSendBroadcast(android.content.ComponentName componentName);
- method public static <T extends android.content.BroadcastReceiver> androidx.glance.action.Action actionSendBroadcast(Class<T> receiver);
method public static inline <reified T extends android.content.BroadcastReceiver> androidx.glance.action.Action actionSendBroadcast();
+ method public static androidx.glance.action.Action actionSendBroadcast(android.content.ComponentName componentName);
+ method public static androidx.glance.action.Action actionSendBroadcast(android.content.Intent intent);
+ method public static <T extends android.content.BroadcastReceiver> androidx.glance.action.Action actionSendBroadcast(Class<T> receiver);
+ method public static androidx.glance.action.Action actionSendBroadcast(String action, optional android.content.ComponentName? componentName);
}
public final class StartActivityIntentActionKt {
@@ -175,10 +175,10 @@
}
public final class StartServiceActionKt {
- method public static androidx.glance.action.Action actionStartService(android.content.Intent intent, optional boolean isForegroundService);
method public static androidx.glance.action.Action actionStartService(android.content.ComponentName componentName, optional boolean isForegroundService);
- method public static <T extends android.app.Service> androidx.glance.action.Action actionStartService(Class<T> service, optional boolean isForegroundService);
+ method public static androidx.glance.action.Action actionStartService(android.content.Intent intent, optional boolean isForegroundService);
method public static inline <reified T extends android.app.Service> androidx.glance.action.Action actionStartService(optional boolean isForegroundService);
+ method public static <T extends android.app.Service> androidx.glance.action.Action actionStartService(Class<T> service, optional boolean isForegroundService);
}
public final class ToggleableKt {
@@ -256,8 +256,8 @@
public final class GlanceAppWidgetStateKt {
method public static suspend <T> Object? getAppWidgetState(android.content.Context context, androidx.glance.state.GlanceStateDefinition<T> definition, androidx.glance.GlanceId glanceId, kotlin.coroutines.Continuation<? super T>);
method public static suspend <T> Object? getAppWidgetState(androidx.glance.appwidget.GlanceAppWidget, android.content.Context context, androidx.glance.GlanceId glanceId, kotlin.coroutines.Continuation<? super T>);
- method public static suspend <T> Object? updateAppWidgetState(android.content.Context context, androidx.glance.state.GlanceStateDefinition<T> definition, androidx.glance.GlanceId glanceId, kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super T>,?> updateState, kotlin.coroutines.Continuation<? super T>);
method public static suspend Object? updateAppWidgetState(android.content.Context context, androidx.glance.GlanceId glanceId, kotlin.jvm.functions.Function2<? super androidx.datastore.preferences.core.MutablePreferences,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> updateState, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend <T> Object? updateAppWidgetState(android.content.Context context, androidx.glance.state.GlanceStateDefinition<T> definition, androidx.glance.GlanceId glanceId, kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super T>,?> updateState, kotlin.coroutines.Continuation<? super T>);
}
}
diff --git a/glance/glance-appwidget/api/public_plus_experimental_current.txt b/glance/glance-appwidget/api/restricted_1.0.0-beta02.txt
similarity index 99%
copy from glance/glance-appwidget/api/public_plus_experimental_current.txt
copy to glance/glance-appwidget/api/restricted_1.0.0-beta02.txt
index 4ac3223..37f992a 100644
--- a/glance/glance-appwidget/api/public_plus_experimental_current.txt
+++ b/glance/glance-appwidget/api/restricted_1.0.0-beta02.txt
@@ -27,9 +27,9 @@
}
public final class CheckboxDefaults {
+ method @androidx.compose.runtime.Composable public androidx.glance.appwidget.CheckBoxColors colors();
method @androidx.compose.runtime.Composable public androidx.glance.appwidget.CheckBoxColors colors(androidx.glance.unit.ColorProvider checkedColor, androidx.glance.unit.ColorProvider uncheckedColor);
method @androidx.compose.runtime.Composable public androidx.glance.appwidget.CheckBoxColors colors(long checkedColor, long uncheckedColor);
- method @androidx.compose.runtime.Composable public androidx.glance.appwidget.CheckBoxColors colors();
field public static final androidx.glance.appwidget.CheckboxDefaults INSTANCE;
}
@@ -71,8 +71,8 @@
ctor public GlanceAppWidgetManager(android.content.Context context);
method public int getAppWidgetId(androidx.glance.GlanceId glanceId);
method public suspend Object? getAppWidgetSizes(androidx.glance.GlanceId glanceId, kotlin.coroutines.Continuation<? super java.util.List<? extends androidx.compose.ui.unit.DpSize>>);
- method public androidx.glance.GlanceId getGlanceIdBy(int appWidgetId);
method public androidx.glance.GlanceId? getGlanceIdBy(android.content.Intent configurationIntent);
+ method public androidx.glance.GlanceId getGlanceIdBy(int appWidgetId);
method public suspend <T extends androidx.glance.appwidget.GlanceAppWidget> Object? getGlanceIds(Class<T> provider, kotlin.coroutines.Continuation<? super java.util.List<? extends androidx.glance.GlanceId>>);
method public suspend <T extends androidx.glance.appwidget.GlanceAppWidgetReceiver> Object? requestPinGlanceAppWidget(Class<T> receiver, optional androidx.glance.appwidget.GlanceAppWidget? preview, optional Object? previewState, optional android.app.PendingIntent? successCallback, optional kotlin.coroutines.Continuation<? super java.lang.Boolean>);
}
@@ -98,8 +98,8 @@
}
public final class LinearProgressIndicatorKt {
- method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.glance.GlanceModifier modifier, optional androidx.glance.unit.ColorProvider color, optional androidx.glance.unit.ColorProvider backgroundColor);
method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.glance.GlanceModifier modifier, optional androidx.glance.unit.ColorProvider color, optional androidx.glance.unit.ColorProvider backgroundColor);
+ method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.glance.GlanceModifier modifier, optional androidx.glance.unit.ColorProvider color, optional androidx.glance.unit.ColorProvider backgroundColor);
}
public final class ProgressIndicatorDefaults {
@@ -114,9 +114,9 @@
}
public final class RadioButtonDefaults {
+ method @androidx.compose.runtime.Composable public androidx.glance.appwidget.RadioButtonColors colors();
method public androidx.glance.appwidget.RadioButtonColors colors(androidx.glance.unit.ColorProvider checkedColor, androidx.glance.unit.ColorProvider uncheckedColor);
method public androidx.glance.appwidget.RadioButtonColors colors(long checkedColor, long uncheckedColor);
- method @androidx.compose.runtime.Composable public androidx.glance.appwidget.RadioButtonColors colors();
field public static final androidx.glance.appwidget.RadioButtonDefaults INSTANCE;
}
@@ -153,8 +153,8 @@
}
public final class SwitchDefaults {
- method @androidx.compose.runtime.Composable public androidx.glance.appwidget.SwitchColors colors(androidx.glance.unit.ColorProvider checkedThumbColor, androidx.glance.unit.ColorProvider uncheckedThumbColor, androidx.glance.unit.ColorProvider checkedTrackColor, androidx.glance.unit.ColorProvider uncheckedTrackColor);
method @androidx.compose.runtime.Composable public androidx.glance.appwidget.SwitchColors colors();
+ method @androidx.compose.runtime.Composable public androidx.glance.appwidget.SwitchColors colors(androidx.glance.unit.ColorProvider checkedThumbColor, androidx.glance.unit.ColorProvider uncheckedThumbColor, androidx.glance.unit.ColorProvider checkedTrackColor, androidx.glance.unit.ColorProvider uncheckedTrackColor);
field public static final androidx.glance.appwidget.SwitchDefaults INSTANCE;
}
@@ -172,16 +172,16 @@
}
public final class RunCallbackActionKt {
- method public static <T extends androidx.glance.appwidget.action.ActionCallback> androidx.glance.action.Action actionRunCallback(Class<T> callbackClass, optional androidx.glance.action.ActionParameters parameters);
method public static inline <reified T extends androidx.glance.appwidget.action.ActionCallback> androidx.glance.action.Action actionRunCallback(optional androidx.glance.action.ActionParameters parameters);
+ method public static <T extends androidx.glance.appwidget.action.ActionCallback> androidx.glance.action.Action actionRunCallback(Class<T> callbackClass, optional androidx.glance.action.ActionParameters parameters);
}
public final class SendBroadcastActionKt {
- method public static androidx.glance.action.Action actionSendBroadcast(String action, optional android.content.ComponentName? componentName);
- method public static androidx.glance.action.Action actionSendBroadcast(android.content.Intent intent);
- method public static androidx.glance.action.Action actionSendBroadcast(android.content.ComponentName componentName);
- method public static <T extends android.content.BroadcastReceiver> androidx.glance.action.Action actionSendBroadcast(Class<T> receiver);
method public static inline <reified T extends android.content.BroadcastReceiver> androidx.glance.action.Action actionSendBroadcast();
+ method public static androidx.glance.action.Action actionSendBroadcast(android.content.ComponentName componentName);
+ method public static androidx.glance.action.Action actionSendBroadcast(android.content.Intent intent);
+ method public static <T extends android.content.BroadcastReceiver> androidx.glance.action.Action actionSendBroadcast(Class<T> receiver);
+ method public static androidx.glance.action.Action actionSendBroadcast(String action, optional android.content.ComponentName? componentName);
}
public final class StartActivityIntentActionKt {
@@ -189,10 +189,10 @@
}
public final class StartServiceActionKt {
- method public static androidx.glance.action.Action actionStartService(android.content.Intent intent, optional boolean isForegroundService);
method public static androidx.glance.action.Action actionStartService(android.content.ComponentName componentName, optional boolean isForegroundService);
- method public static <T extends android.app.Service> androidx.glance.action.Action actionStartService(Class<T> service, optional boolean isForegroundService);
+ method public static androidx.glance.action.Action actionStartService(android.content.Intent intent, optional boolean isForegroundService);
method public static inline <reified T extends android.app.Service> androidx.glance.action.Action actionStartService(optional boolean isForegroundService);
+ method public static <T extends android.app.Service> androidx.glance.action.Action actionStartService(Class<T> service, optional boolean isForegroundService);
}
public final class ToggleableKt {
@@ -270,8 +270,8 @@
public final class GlanceAppWidgetStateKt {
method public static suspend <T> Object? getAppWidgetState(android.content.Context context, androidx.glance.state.GlanceStateDefinition<T> definition, androidx.glance.GlanceId glanceId, kotlin.coroutines.Continuation<? super T>);
method public static suspend <T> Object? getAppWidgetState(androidx.glance.appwidget.GlanceAppWidget, android.content.Context context, androidx.glance.GlanceId glanceId, kotlin.coroutines.Continuation<? super T>);
- method public static suspend <T> Object? updateAppWidgetState(android.content.Context context, androidx.glance.state.GlanceStateDefinition<T> definition, androidx.glance.GlanceId glanceId, kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super T>,?> updateState, kotlin.coroutines.Continuation<? super T>);
method public static suspend Object? updateAppWidgetState(android.content.Context context, androidx.glance.GlanceId glanceId, kotlin.jvm.functions.Function2<? super androidx.datastore.preferences.core.MutablePreferences,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> updateState, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend <T> Object? updateAppWidgetState(android.content.Context context, androidx.glance.state.GlanceStateDefinition<T> definition, androidx.glance.GlanceId glanceId, kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super T>,?> updateState, kotlin.coroutines.Continuation<? super T>);
}
}
diff --git a/glance/glance-appwidget/api/restricted_current.txt b/glance/glance-appwidget/api/restricted_current.txt
index 72717d0..37f992a 100644
--- a/glance/glance-appwidget/api/restricted_current.txt
+++ b/glance/glance-appwidget/api/restricted_current.txt
@@ -27,9 +27,9 @@
}
public final class CheckboxDefaults {
+ method @androidx.compose.runtime.Composable public androidx.glance.appwidget.CheckBoxColors colors();
method @androidx.compose.runtime.Composable public androidx.glance.appwidget.CheckBoxColors colors(androidx.glance.unit.ColorProvider checkedColor, androidx.glance.unit.ColorProvider uncheckedColor);
method @androidx.compose.runtime.Composable public androidx.glance.appwidget.CheckBoxColors colors(long checkedColor, long uncheckedColor);
- method @androidx.compose.runtime.Composable public androidx.glance.appwidget.CheckBoxColors colors();
field public static final androidx.glance.appwidget.CheckboxDefaults INSTANCE;
}
@@ -47,6 +47,9 @@
method public static androidx.glance.GlanceModifier cornerRadius(androidx.glance.GlanceModifier, @DimenRes int radius);
}
+ @kotlin.RequiresOptIn(message="This API is experimental and is likely to change in the future.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalGlanceRemoteViewsApi {
+ }
+
public abstract class GlanceAppWidget {
ctor public GlanceAppWidget(optional @LayoutRes int errorUiLayout);
method public androidx.glance.appwidget.SizeMode getSizeMode();
@@ -68,8 +71,8 @@
ctor public GlanceAppWidgetManager(android.content.Context context);
method public int getAppWidgetId(androidx.glance.GlanceId glanceId);
method public suspend Object? getAppWidgetSizes(androidx.glance.GlanceId glanceId, kotlin.coroutines.Continuation<? super java.util.List<? extends androidx.compose.ui.unit.DpSize>>);
- method public androidx.glance.GlanceId getGlanceIdBy(int appWidgetId);
method public androidx.glance.GlanceId? getGlanceIdBy(android.content.Intent configurationIntent);
+ method public androidx.glance.GlanceId getGlanceIdBy(int appWidgetId);
method public suspend <T extends androidx.glance.appwidget.GlanceAppWidget> Object? getGlanceIds(Class<T> provider, kotlin.coroutines.Continuation<? super java.util.List<? extends androidx.glance.GlanceId>>);
method public suspend <T extends androidx.glance.appwidget.GlanceAppWidgetReceiver> Object? requestPinGlanceAppWidget(Class<T> receiver, optional androidx.glance.appwidget.GlanceAppWidget? preview, optional Object? previewState, optional android.app.PendingIntent? successCallback, optional kotlin.coroutines.Continuation<? super java.lang.Boolean>);
}
@@ -85,13 +88,18 @@
public static final class GlanceAppWidgetReceiver.Companion {
}
+ @androidx.glance.appwidget.ExperimentalGlanceRemoteViewsApi public final class GlanceRemoteViews {
+ ctor public GlanceRemoteViews();
+ method public suspend Object? compose(android.content.Context context, long size, optional Object? state, optional android.os.Bundle appWidgetOptions, kotlin.jvm.functions.Function0<kotlin.Unit> content, kotlin.coroutines.Continuation<? super androidx.glance.appwidget.RemoteViewsCompositionResult>);
+ }
+
public final class ImageProvidersKt {
method public static androidx.glance.ImageProvider ImageProvider(android.net.Uri uri);
}
public final class LinearProgressIndicatorKt {
- method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.glance.GlanceModifier modifier, optional androidx.glance.unit.ColorProvider color, optional androidx.glance.unit.ColorProvider backgroundColor);
method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(optional androidx.glance.GlanceModifier modifier, optional androidx.glance.unit.ColorProvider color, optional androidx.glance.unit.ColorProvider backgroundColor);
+ method @androidx.compose.runtime.Composable public static void LinearProgressIndicator(float progress, optional androidx.glance.GlanceModifier modifier, optional androidx.glance.unit.ColorProvider color, optional androidx.glance.unit.ColorProvider backgroundColor);
}
public final class ProgressIndicatorDefaults {
@@ -106,9 +114,9 @@
}
public final class RadioButtonDefaults {
+ method @androidx.compose.runtime.Composable public androidx.glance.appwidget.RadioButtonColors colors();
method public androidx.glance.appwidget.RadioButtonColors colors(androidx.glance.unit.ColorProvider checkedColor, androidx.glance.unit.ColorProvider uncheckedColor);
method public androidx.glance.appwidget.RadioButtonColors colors(long checkedColor, long uncheckedColor);
- method @androidx.compose.runtime.Composable public androidx.glance.appwidget.RadioButtonColors colors();
field public static final androidx.glance.appwidget.RadioButtonDefaults INSTANCE;
}
@@ -118,6 +126,12 @@
method public static androidx.glance.GlanceModifier selectableGroup(androidx.glance.GlanceModifier);
}
+ @androidx.glance.appwidget.ExperimentalGlanceRemoteViewsApi public final class RemoteViewsCompositionResult {
+ ctor public RemoteViewsCompositionResult(android.widget.RemoteViews remoteViews);
+ method public android.widget.RemoteViews getRemoteViews();
+ property public final android.widget.RemoteViews remoteViews;
+ }
+
public sealed interface SizeMode {
}
@@ -139,8 +153,8 @@
}
public final class SwitchDefaults {
- method @androidx.compose.runtime.Composable public androidx.glance.appwidget.SwitchColors colors(androidx.glance.unit.ColorProvider checkedThumbColor, androidx.glance.unit.ColorProvider uncheckedThumbColor, androidx.glance.unit.ColorProvider checkedTrackColor, androidx.glance.unit.ColorProvider uncheckedTrackColor);
method @androidx.compose.runtime.Composable public androidx.glance.appwidget.SwitchColors colors();
+ method @androidx.compose.runtime.Composable public androidx.glance.appwidget.SwitchColors colors(androidx.glance.unit.ColorProvider checkedThumbColor, androidx.glance.unit.ColorProvider uncheckedThumbColor, androidx.glance.unit.ColorProvider checkedTrackColor, androidx.glance.unit.ColorProvider uncheckedTrackColor);
field public static final androidx.glance.appwidget.SwitchDefaults INSTANCE;
}
@@ -158,16 +172,16 @@
}
public final class RunCallbackActionKt {
- method public static <T extends androidx.glance.appwidget.action.ActionCallback> androidx.glance.action.Action actionRunCallback(Class<T> callbackClass, optional androidx.glance.action.ActionParameters parameters);
method public static inline <reified T extends androidx.glance.appwidget.action.ActionCallback> androidx.glance.action.Action actionRunCallback(optional androidx.glance.action.ActionParameters parameters);
+ method public static <T extends androidx.glance.appwidget.action.ActionCallback> androidx.glance.action.Action actionRunCallback(Class<T> callbackClass, optional androidx.glance.action.ActionParameters parameters);
}
public final class SendBroadcastActionKt {
- method public static androidx.glance.action.Action actionSendBroadcast(String action, optional android.content.ComponentName? componentName);
- method public static androidx.glance.action.Action actionSendBroadcast(android.content.Intent intent);
- method public static androidx.glance.action.Action actionSendBroadcast(android.content.ComponentName componentName);
- method public static <T extends android.content.BroadcastReceiver> androidx.glance.action.Action actionSendBroadcast(Class<T> receiver);
method public static inline <reified T extends android.content.BroadcastReceiver> androidx.glance.action.Action actionSendBroadcast();
+ method public static androidx.glance.action.Action actionSendBroadcast(android.content.ComponentName componentName);
+ method public static androidx.glance.action.Action actionSendBroadcast(android.content.Intent intent);
+ method public static <T extends android.content.BroadcastReceiver> androidx.glance.action.Action actionSendBroadcast(Class<T> receiver);
+ method public static androidx.glance.action.Action actionSendBroadcast(String action, optional android.content.ComponentName? componentName);
}
public final class StartActivityIntentActionKt {
@@ -175,10 +189,10 @@
}
public final class StartServiceActionKt {
- method public static androidx.glance.action.Action actionStartService(android.content.Intent intent, optional boolean isForegroundService);
method public static androidx.glance.action.Action actionStartService(android.content.ComponentName componentName, optional boolean isForegroundService);
- method public static <T extends android.app.Service> androidx.glance.action.Action actionStartService(Class<T> service, optional boolean isForegroundService);
+ method public static androidx.glance.action.Action actionStartService(android.content.Intent intent, optional boolean isForegroundService);
method public static inline <reified T extends android.app.Service> androidx.glance.action.Action actionStartService(optional boolean isForegroundService);
+ method public static <T extends android.app.Service> androidx.glance.action.Action actionStartService(Class<T> service, optional boolean isForegroundService);
}
public final class ToggleableKt {
@@ -256,8 +270,8 @@
public final class GlanceAppWidgetStateKt {
method public static suspend <T> Object? getAppWidgetState(android.content.Context context, androidx.glance.state.GlanceStateDefinition<T> definition, androidx.glance.GlanceId glanceId, kotlin.coroutines.Continuation<? super T>);
method public static suspend <T> Object? getAppWidgetState(androidx.glance.appwidget.GlanceAppWidget, android.content.Context context, androidx.glance.GlanceId glanceId, kotlin.coroutines.Continuation<? super T>);
- method public static suspend <T> Object? updateAppWidgetState(android.content.Context context, androidx.glance.state.GlanceStateDefinition<T> definition, androidx.glance.GlanceId glanceId, kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super T>,?> updateState, kotlin.coroutines.Continuation<? super T>);
method public static suspend Object? updateAppWidgetState(android.content.Context context, androidx.glance.GlanceId glanceId, kotlin.jvm.functions.Function2<? super androidx.datastore.preferences.core.MutablePreferences,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> updateState, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend <T> Object? updateAppWidgetState(android.content.Context context, androidx.glance.state.GlanceStateDefinition<T> definition, androidx.glance.GlanceId glanceId, kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super T>,?> updateState, kotlin.coroutines.Continuation<? super T>);
}
}
diff --git a/glance/glance-appwidget/build.gradle b/glance/glance-appwidget/build.gradle
index 85a163f..4b59ee3 100644
--- a/glance/glance-appwidget/build.gradle
+++ b/glance/glance-appwidget/build.gradle
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-import androidx.build.AndroidXComposePlugin
import androidx.build.BundleInsideHelper
import androidx.build.LibraryType
import androidx.glance.appwidget.layoutgenerator.gradle.LayoutGeneratorTask
plugins {
id("AndroidXPlugin")
+ id("org.jetbrains.kotlin.android")
id("com.android.library")
id("AndroidXComposePlugin")
id("com.google.protobuf")
@@ -32,9 +32,6 @@
/* to = */ "androidx.glance.appwidget.protobuf"
)
-// Disable multi-platform; this will only be used on Android.
-AndroidXComposePlugin.applyAndConfigureKotlinPlugin(project, /* isMultiplatformEnabled= */ false)
-
dependencies {
bundleInside(project(path: ":glance:glance-appwidget-proto", configuration: "export"))
@@ -70,6 +67,7 @@
androidTestImplementation(project(":test:screenshot:screenshot"))
androidTestImplementation("androidx.test.uiautomator:uiautomator:2.2.0")
+ androidTestImplementation("androidx.room:room-runtime:2.4.3")
androidTestImplementation('androidx.core:core-ktx:1.7.0')
androidTestImplementation("androidx.work:work-testing:2.7.1")
androidTestImplementation(libs.espressoCore)
@@ -120,6 +118,6 @@
LayoutGeneratorTask.registerLayoutGenerator(
project,
android,
- /* containerLayoutDirectory= */ file("src/androidMain/layoutTemplates"),
- /* childLayoutDirectory= */ file("src/androidMain/res/layout")
+ /* containerLayoutDirectory= */ file("src/main/layoutTemplates"),
+ /* childLayoutDirectory= */ file("src/main/res/layout")
)
diff --git a/glance/glance-appwidget/glance-layout-generator/src/main/kotlin/androidx/glance/appwidget/layoutgenerator/GenerateRegistry.kt b/glance/glance-appwidget/glance-layout-generator/src/main/kotlin/androidx/glance/appwidget/layoutgenerator/GenerateRegistry.kt
index ccbb397..9886504 100644
--- a/glance/glance-appwidget/glance-layout-generator/src/main/kotlin/androidx/glance/appwidget/layoutgenerator/GenerateRegistry.kt
+++ b/glance/glance-appwidget/glance-layout-generator/src/main/kotlin/androidx/glance/appwidget/layoutgenerator/GenerateRegistry.kt
@@ -23,8 +23,8 @@
import com.squareup.kotlinpoet.FunSpec
import com.squareup.kotlinpoet.INT
import com.squareup.kotlinpoet.KModifier
-import com.squareup.kotlinpoet.KModifier.PRIVATE
import com.squareup.kotlinpoet.KModifier.INTERNAL
+import com.squareup.kotlinpoet.KModifier.PRIVATE
import com.squareup.kotlinpoet.MemberName
import com.squareup.kotlinpoet.MemberName.Companion.member
import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy
diff --git a/glance/glance-appwidget/glance-layout-generator/src/main/kotlin/androidx/glance/appwidget/layoutgenerator/LayoutGenerator.kt b/glance/glance-appwidget/glance-layout-generator/src/main/kotlin/androidx/glance/appwidget/layoutgenerator/LayoutGenerator.kt
index 480095c4..aae62fc 100644
--- a/glance/glance-appwidget/glance-layout-generator/src/main/kotlin/androidx/glance/appwidget/layoutgenerator/LayoutGenerator.kt
+++ b/glance/glance-appwidget/glance-layout-generator/src/main/kotlin/androidx/glance/appwidget/layoutgenerator/LayoutGenerator.kt
@@ -17,14 +17,14 @@
package androidx.glance.appwidget.layoutgenerator
import com.squareup.kotlinpoet.MemberName
-import org.w3c.dom.Document
-import org.w3c.dom.Node
import java.io.File
import javax.xml.parsers.DocumentBuilderFactory
import javax.xml.transform.OutputKeys
import javax.xml.transform.TransformerFactory
import javax.xml.transform.dom.DOMSource
import javax.xml.transform.stream.StreamResult
+import org.w3c.dom.Document
+import org.w3c.dom.Node
/**
* Generate the layouts from the templates provided to the task.
diff --git a/glance/glance-appwidget/glance-layout-generator/src/main/kotlin/androidx/glance/appwidget/layoutgenerator/gradle/LayoutGeneratorTask.kt b/glance/glance-appwidget/glance-layout-generator/src/main/kotlin/androidx/glance/appwidget/layoutgenerator/gradle/LayoutGeneratorTask.kt
index fbe5c31..75f6129 100644
--- a/glance/glance-appwidget/glance-layout-generator/src/main/kotlin/androidx/glance/appwidget/layoutgenerator/gradle/LayoutGeneratorTask.kt
+++ b/glance/glance-appwidget/glance-layout-generator/src/main/kotlin/androidx/glance/appwidget/layoutgenerator/gradle/LayoutGeneratorTask.kt
@@ -21,6 +21,7 @@
import androidx.glance.appwidget.layoutgenerator.cleanResources
import androidx.glance.appwidget.layoutgenerator.generateRegistry
import com.android.build.gradle.LibraryExtension
+import java.io.File
import org.gradle.api.DefaultTask
import org.gradle.api.Project
import org.gradle.api.file.DirectoryProperty
@@ -30,7 +31,6 @@
import org.gradle.api.tasks.PathSensitive
import org.gradle.api.tasks.PathSensitivity
import org.gradle.api.tasks.TaskAction
-import java.io.File
/**
* Task generating the layouts from a set of Layout templates.
diff --git a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/CompoundButtonAppWidget.kt b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/CompoundButtonAppWidget.kt
index 597ba896..6c4eaec 100644
--- a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/CompoundButtonAppWidget.kt
+++ b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/CompoundButtonAppWidget.kt
@@ -37,8 +37,8 @@
import androidx.glance.appwidget.SwitchDefaults
import androidx.glance.appwidget.appWidgetBackground
import androidx.glance.appwidget.cornerRadius
-import androidx.glance.appwidget.selectableGroup
import androidx.glance.appwidget.provideContent
+import androidx.glance.appwidget.selectableGroup
import androidx.glance.background
import androidx.glance.color.ColorProvider
import androidx.glance.layout.Alignment
diff --git a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ScrollableAppWidget.kt b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ScrollableAppWidget.kt
index 8cdae1e..dcb80bb 100644
--- a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ScrollableAppWidget.kt
+++ b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ScrollableAppWidget.kt
@@ -16,13 +16,13 @@
package androidx.glance.appwidget.demos
-import androidx.compose.material.Text as ComposeText
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.util.Log
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
+import androidx.compose.material.Text as ComposeText
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
@@ -84,14 +84,15 @@
modifier = GlanceModifier.fillMaxSize()
.background(R.color.default_widget_background)
) {
+ val localSize = LocalSize.current
Text(
- text = "Fix header",
+ text = "Fix header, LocalSize: ${localSize.width}x${localSize.height}",
modifier = GlanceModifier
.fillMaxWidth()
.padding(16.dp)
.background(Color(0x0a000000))
)
- val width = LocalSize.current.width
+ val width = localSize.width
when {
width <= singleColumn.width -> ScrollColumn(GlanceModifier.fillMaxSize())
width <= doubleColumn.width -> Row {
@@ -107,9 +108,22 @@
@Composable
private fun ScrollColumn(modifier: GlanceModifier) {
+ val localSize = LocalSize.current
LazyColumn(modifier) {
item {
SectionHeading(
+ title = "LocalSize",
+ description = "inside lazyColumn"
+ )
+ }
+ item {
+ Text(
+ text = "${localSize.width}x${localSize.height}",
+ modifier = GlanceModifier.padding(10.dp)
+ )
+ }
+ item {
+ SectionHeading(
title = "Activities",
description = "Click the buttons to open activities"
)
diff --git a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/VerticalGridAppWidget.kt b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/VerticalGridAppWidget.kt
index 9c4f452..ef88370 100644
--- a/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/VerticalGridAppWidget.kt
+++ b/glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/VerticalGridAppWidget.kt
@@ -17,14 +17,15 @@
package androidx.glance.appwidget.demos
import android.content.Context
-import android.os.Build
import android.content.Intent
+import android.os.Build
import androidx.compose.runtime.Composable
import androidx.compose.ui.unit.dp
import androidx.glance.Button
import androidx.glance.GlanceId
import androidx.glance.GlanceModifier
import androidx.glance.LocalContext
+import androidx.glance.LocalSize
import androidx.glance.appwidget.GlanceAppWidget
import androidx.glance.appwidget.GlanceAppWidgetReceiver
import androidx.glance.appwidget.action.actionStartActivity
@@ -66,6 +67,7 @@
@Composable
fun SampleGrid(cells: GridCells, modifier: GlanceModifier = GlanceModifier.fillMaxSize()) {
+ val localSize = LocalSize.current
LazyVerticalGrid(
modifier = modifier,
gridCells = cells
@@ -73,6 +75,9 @@
item {
Text("LazyVerticalGrid")
}
+ item {
+ Text("${localSize.width}x${localSize.height}")
+ }
items(count = 20, itemId = { it * 2L }) { index ->
Text("Item $index")
}
diff --git a/glance/glance-appwidget/lint-baseline.xml b/glance/glance-appwidget/lint-baseline.xml
index e61bfc7..805d083 100644
--- a/glance/glance-appwidget/lint-baseline.xml
+++ b/glance/glance-appwidget/lint-baseline.xml
@@ -7,7 +7,7 @@
errorLine1=" Thread.sleep(5000)"
errorLine2=" ~~~~~">
<location
- file="src/androidAndroidTest/kotlin/androidx/glance/appwidget/AppWidgetHostRule.kt"/>
+ file="src/androidTest/kotlin/androidx/glance/appwidget/AppWidgetHostRule.kt"/>
</issue>
<issue
@@ -16,7 +16,7 @@
errorLine1=" Thread.sleep(500)"
errorLine2=" ~~~~~">
<location
- file="src/androidAndroidTest/kotlin/androidx/glance/appwidget/AppWidgetHostRule.kt"/>
+ file="src/androidTest/kotlin/androidx/glance/appwidget/AppWidgetHostRule.kt"/>
</issue>
<issue
@@ -25,7 +25,7 @@
errorLine1=" Thread.sleep(sleepMs)"
errorLine2=" ~~~~~">
<location
- file="src/androidAndroidTest/kotlin/androidx/glance/appwidget/CoroutineBroadcastReceiverTest.kt"/>
+ file="src/androidTest/kotlin/androidx/glance/appwidget/CoroutineBroadcastReceiverTest.kt"/>
</issue>
<issue
@@ -34,7 +34,7 @@
errorLine1=" Thread.sleep(interval)"
errorLine2=" ~~~~~">
<location
- file="src/androidAndroidTest/kotlin/androidx/glance/appwidget/GlanceAppWidgetReceiverTest.kt"/>
+ file="src/androidTest/kotlin/androidx/glance/appwidget/GlanceAppWidgetReceiverTest.kt"/>
</issue>
</issues>
diff --git a/glance/glance-appwidget/samples/src/main/java/androidx/glance/appwidget/samples/GlanceAppWidgetSamples.kt b/glance/glance-appwidget/samples/src/main/java/androidx/glance/appwidget/samples/GlanceAppWidgetSamples.kt
index 43fec19..c290ed7 100644
--- a/glance/glance-appwidget/samples/src/main/java/androidx/glance/appwidget/samples/GlanceAppWidgetSamples.kt
+++ b/glance/glance-appwidget/samples/src/main/java/androidx/glance/appwidget/samples/GlanceAppWidgetSamples.kt
@@ -24,13 +24,17 @@
import androidx.glance.text.Text
@Sampled
-suspend fun GlanceAppWidget.provideGlanceSample(
- @Suppress("UNUSED_PARAMETER") context: Context,
- @Suppress("UNUSED_PARAMETER") id: GlanceId,
-) {
- // Load data needed to render the AppWidget.
- provideContent {
- // create your AppWidget here
- Text("Hello World")
+fun provideGlanceSample() {
+ class MyWidget : GlanceAppWidget() {
+ override suspend fun provideGlance(context: Context, id: GlanceId) {
+ // Load data needed to render the AppWidget here. Prefer doing heavy work before
+ // provideContent, as the provideGlance function will timeout shortly after
+ // provideContent is called.
+
+ provideContent {
+ // Declare your @Composable layout here.
+ Text("Hello World")
+ }
+ }
}
}
\ No newline at end of file
diff --git a/glance/glance-appwidget/src/androidAndroidTest/AndroidManifest.xml b/glance/glance-appwidget/src/androidTest/AndroidManifest.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidAndroidTest/AndroidManifest.xml
rename to glance/glance-appwidget/src/androidTest/AndroidManifest.xml
diff --git a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/AndroidTestUtils.kt b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/AndroidTestUtils.kt
similarity index 95%
rename from glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/AndroidTestUtils.kt
rename to glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/AndroidTestUtils.kt
index fa6fcab..164ee74 100644
--- a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/AndroidTestUtils.kt
+++ b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/AndroidTestUtils.kt
@@ -161,6 +161,17 @@
findViewById<View>(emptyLoadingViewID) != null
}
+fun ListView.isItemLoaded(text: String): Boolean {
+ if (childCount > 0 && adapter != null) {
+ return children.any {
+ val matches = arrayListOf<View>()
+ it.findViewsWithText(matches, text, View.FIND_VIEWS_WITH_TEXT)
+ matches.isNotEmpty()
+ }
+ }
+ return false
+}
+
/**
* Returns true if list items are fully loaded (i.e. not in loading... state).
*/
diff --git a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/AppWidgetHostRule.kt b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/AppWidgetHostRule.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/AppWidgetHostRule.kt
rename to glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/AppWidgetHostRule.kt
diff --git a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/AppWidgetHostTestActivity.kt b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/AppWidgetHostTestActivity.kt
similarity index 99%
rename from glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/AppWidgetHostTestActivity.kt
rename to glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/AppWidgetHostTestActivity.kt
index e8dc6c6..f42506b 100644
--- a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/AppWidgetHostTestActivity.kt
+++ b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/AppWidgetHostTestActivity.kt
@@ -35,13 +35,13 @@
import android.widget.FrameLayout
import android.widget.RemoteViews
import androidx.annotation.RequiresApi
-import androidx.glance.appwidget.test.R
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp
-import org.junit.Assert.fail
+import androidx.glance.appwidget.test.R
import java.util.Locale
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
+import org.junit.Assert.fail
private const val TAG = "AppWidgetHostTestActivity"
diff --git a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/CheckBoxTest.kt b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/CheckBoxTest.kt
similarity index 99%
rename from glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/CheckBoxTest.kt
rename to glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/CheckBoxTest.kt
index 29ea48be..8b42c7c 100644
--- a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/CheckBoxTest.kt
+++ b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/CheckBoxTest.kt
@@ -31,10 +31,10 @@
import androidx.test.filters.MediumTest
import androidx.test.filters.SdkSuppress
import com.google.common.truth.Truth.assertThat
-import org.junit.Rule
-import org.junit.Test
import kotlin.test.assertIs
import kotlin.test.assertNotNull
+import org.junit.Rule
+import org.junit.Test
@SdkSuppress(minSdkVersion = 29)
@MediumTest
diff --git a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/CoroutineBroadcastReceiverTest.kt b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/CoroutineBroadcastReceiverTest.kt
similarity index 99%
rename from glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/CoroutineBroadcastReceiverTest.kt
rename to glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/CoroutineBroadcastReceiverTest.kt
index 40ad5f8..74454f9 100644
--- a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/CoroutineBroadcastReceiverTest.kt
+++ b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/CoroutineBroadcastReceiverTest.kt
@@ -26,9 +26,6 @@
import androidx.test.platform.app.InstrumentationRegistry
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.isActive
-import org.junit.Test
import java.io.FileInputStream
import java.nio.charset.StandardCharsets
import java.time.Duration
@@ -37,6 +34,9 @@
import java.util.concurrent.TimeUnit
import java.util.concurrent.atomic.AtomicReference
import kotlin.math.min
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.isActive
+import org.junit.Test
@SdkSuppress(minSdkVersion = 26)
class CoroutineBroadcastReceiverTest {
diff --git a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/GlanceAppWidgetManagerTest.kt b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/GlanceAppWidgetManagerTest.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/GlanceAppWidgetManagerTest.kt
rename to glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/GlanceAppWidgetManagerTest.kt
diff --git a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/GlanceAppWidgetReceiverScreenshotTest.kt b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/GlanceAppWidgetReceiverScreenshotTest.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/GlanceAppWidgetReceiverScreenshotTest.kt
rename to glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/GlanceAppWidgetReceiverScreenshotTest.kt
diff --git a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/GlanceAppWidgetReceiverTest.kt b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/GlanceAppWidgetReceiverTest.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/GlanceAppWidgetReceiverTest.kt
rename to glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/GlanceAppWidgetReceiverTest.kt
diff --git a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/GlanceRemoteViewsTest.kt b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/GlanceRemoteViewsTest.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/GlanceRemoteViewsTest.kt
rename to glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/GlanceRemoteViewsTest.kt
diff --git a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/LazyColumnTest.kt b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/LazyColumnTest.kt
similarity index 88%
rename from glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/LazyColumnTest.kt
rename to glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/LazyColumnTest.kt
index af28347..927111b 100644
--- a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/LazyColumnTest.kt
+++ b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/LazyColumnTest.kt
@@ -27,6 +27,9 @@
import android.widget.TextView
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.glance.Button
@@ -332,6 +335,48 @@
}
@Test
+ fun adapter_emptyList() {
+ TestGlanceAppWidget.uiDefinition = {
+ LazyColumn { }
+ }
+
+ mHostRule.startHost()
+
+ mHostRule.waitForListView { list ->
+ assertThat(list.childCount).isEqualTo(0)
+ assertThat(list.adapter.count).isEqualTo(0)
+ assertThat(list.adapter.viewTypeCount).isAtLeast(1)
+ assertThat(list.adapter.hasStableIds()).isFalse()
+ }
+ }
+
+ @Test
+ fun adapter_itemContentChangesOnClick_appliedCorrectly() {
+ TestGlanceAppWidget.uiDefinition = {
+ var count by remember { mutableStateOf(1) }
+ LazyColumn {
+ item {
+ Text(
+ text = "Row item 0, count $count",
+ modifier = GlanceModifier.clickable {
+ count++
+ })
+ }
+ }
+ }
+
+ mHostRule.startHost()
+
+ mHostRule.waitForListViewChildren { list ->
+ val row = list.getUnboxedListItem<FrameLayout>(0)
+ val rowItem0 = row.notGoneChildren.first()
+ rowItem0.performClick()
+ }
+
+ mHostRule.waitForListViewChildWithText(text = "Row item 0, count 1") {}
+ }
+
+ @Test
@SdkSuppress(minSdkVersion = 31)
fun clickable_addsClickHandlers() {
TestGlanceAppWidget.uiDefinition = {
@@ -503,6 +548,23 @@
}
}
+/**
+ * Wait until the ListView is loaded and has an adapter (irrespective of whether it has children or
+ * not). Use waitForListViewChildren if the list is expected to have children.
+ */
+internal fun AppWidgetHostRule.waitForListView(action: (list: ListView) -> Unit = {}) {
+ onHostView { }
+
+ runAndObserveUntilDraw(condition = "ListView did not load in time") {
+ mHostView.let { host ->
+ val list = host.findChildByType<ListView>()
+ host.childCount > 0 && list != null && list.adapter != null
+ }
+ }
+
+ onUnboxedHostView(action)
+}
+
internal fun AppWidgetHostRule.waitForListViewChildren(action: (list: ListView) -> Unit = {}) {
onHostView { }
@@ -516,6 +578,22 @@
onUnboxedHostView(action)
}
+internal fun AppWidgetHostRule.waitForListViewChildWithText(
+ text: String,
+ action: (list: ListView) -> Unit = {}
+) {
+ onHostView { }
+
+ runAndObserveUntilDraw(condition = "List child with text '$text' not load in time") {
+ mHostView.let { host ->
+ val list = host.findChildByType<ListView>()
+ host.childCount > 0 && list?.isItemLoaded(text) ?: false
+ }
+ }
+
+ onUnboxedHostView(action)
+}
+
/**
* Wait until the first ListView child under the root AppWidgetHostView has [count] children.
*
diff --git a/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/RemoteCollectionItemsTest.kt b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/RemoteCollectionItemsTest.kt
new file mode 100644
index 0000000..41561f8
--- /dev/null
+++ b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/RemoteCollectionItemsTest.kt
@@ -0,0 +1,112 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.glance.appwidget
+
+import android.content.Context
+import android.widget.RemoteViews
+import androidx.glance.appwidget.test.R
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.filters.MediumTest
+import androidx.test.filters.SdkSuppress
+import com.google.common.truth.Truth.assertThat
+import kotlin.test.assertFailsWith
+import org.junit.Test
+
+@SdkSuppress(maxSdkVersion = 29)
+@MediumTest
+class RemoteCollectionItemsTest {
+ private val context = ApplicationProvider.getApplicationContext<Context>()
+ private val packageName = context.packageName
+
+ @Test
+ fun testBuilder_empty() {
+ val items = RemoteCollectionItems.Builder().build()
+
+ assertThat(items.itemCount).isEqualTo(0)
+ assertThat(items.viewTypeCount).isEqualTo(1)
+ assertThat(items.hasStableIds()).isFalse()
+ }
+
+ @Test
+ fun testBuilder_viewTypeCountUnspecified() {
+ val firstItem = RemoteViews(packageName, R.layout.list_view_row)
+ val secondItem = RemoteViews(packageName, R.layout.list_view_row_2)
+ val items = RemoteCollectionItems.Builder()
+ .setHasStableIds(true)
+ .addItem(id = 3, firstItem)
+ .addItem(id = 5, secondItem)
+ .build()
+
+ assertThat(items.itemCount).isEqualTo(2)
+ assertThat(items.getItemId(0)).isEqualTo(3)
+ assertThat(items.getItemId(1)).isEqualTo(5)
+ assertThat(items.getItemView(0).layoutId).isEqualTo(R.layout.list_view_row)
+ assertThat(items.getItemView(1).layoutId).isEqualTo(R.layout.list_view_row_2)
+ assertThat(items.hasStableIds()).isTrue()
+ // The view type count should be derived from the number of different layout ids if
+ // unspecified.
+ assertThat(items.viewTypeCount).isEqualTo(2)
+ }
+
+ @Test
+ fun testBuilder_viewTypeCountSpecified() {
+ val firstItem = RemoteViews(packageName, R.layout.list_view_row)
+ val secondItem = RemoteViews(packageName, R.layout.list_view_row_2)
+ val items = RemoteCollectionItems.Builder()
+ .addItem(id = 3, firstItem)
+ .addItem(id = 5, secondItem)
+ .setViewTypeCount(15)
+ .build()
+
+ assertThat(items.viewTypeCount).isEqualTo(15)
+ }
+
+ @Test
+ fun testBuilder_repeatedIdsAndLayouts() {
+ val firstItem = RemoteViews(packageName, R.layout.list_view_row)
+ val secondItem = RemoteViews(packageName, R.layout.list_view_row)
+ val thirdItem = RemoteViews(packageName, R.layout.list_view_row)
+ val items = RemoteCollectionItems.Builder()
+ .setHasStableIds(false)
+ .addItem(id = 42, firstItem)
+ .addItem(id = 42, secondItem)
+ .addItem(id = 42, thirdItem)
+ .build()
+
+ assertThat(items.itemCount).isEqualTo(3)
+ assertThat(items.getItemId(0)).isEqualTo(42)
+ assertThat(items.getItemId(1)).isEqualTo(42)
+ assertThat(items.getItemId(2)).isEqualTo(42)
+ assertThat(items.getItemView(0)).isSameInstanceAs(firstItem)
+ assertThat(items.getItemView(1)).isSameInstanceAs(secondItem)
+ assertThat(items.getItemView(2)).isSameInstanceAs(thirdItem)
+ assertThat(items.hasStableIds()).isFalse()
+ assertThat(items.viewTypeCount).isEqualTo(1)
+ }
+
+ @Test
+ fun testBuilder_viewTypeCountLowerThanLayoutCount() {
+ assertFailsWith(IllegalArgumentException::class) {
+ RemoteCollectionItems.Builder()
+ .setHasStableIds(true)
+ .setViewTypeCount(1)
+ .addItem(3, RemoteViews(packageName, R.layout.list_view_row))
+ .addItem(5, RemoteViews(packageName, R.layout.list_view_row_2))
+ .build()
+ }
+ }
+}
\ No newline at end of file
diff --git a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/ResourceResolutionTest.kt b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/ResourceResolutionTest.kt
similarity index 99%
rename from glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/ResourceResolutionTest.kt
rename to glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/ResourceResolutionTest.kt
index c733193..35ef162 100644
--- a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/ResourceResolutionTest.kt
+++ b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/ResourceResolutionTest.kt
@@ -28,9 +28,9 @@
import androidx.test.filters.MediumTest
import androidx.test.filters.SdkSuppress
import com.google.common.truth.Truth.assertThat
+import kotlin.test.assertNotNull
import org.junit.Rule
import org.junit.Test
-import kotlin.test.assertNotNull
@SdkSuppress(minSdkVersion = 29)
@MediumTest
diff --git a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/ScreenshotsTests.kt b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/ScreenshotsTests.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/ScreenshotsTests.kt
rename to glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/ScreenshotsTests.kt
diff --git a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/StrictModeTest.kt b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/StrictModeTest.kt
similarity index 96%
rename from glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/StrictModeTest.kt
rename to glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/StrictModeTest.kt
index 6a3e51f..a2f2e22 100644
--- a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/StrictModeTest.kt
+++ b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/StrictModeTest.kt
@@ -36,6 +36,7 @@
import androidx.test.filters.SdkSuppress
import androidx.test.platform.app.InstrumentationRegistry
import com.google.common.truth.Truth
+import java.util.Arrays
import java.util.concurrent.CountDownLatch
import java.util.concurrent.Executors
import java.util.concurrent.TimeUnit
@@ -65,7 +66,9 @@
.penaltyListener(executor) {
Log.e("StrictModeTest", "Logging violation:")
Log.e("StrictModeTest", "$it")
- Log.e("StrictModeTest", "Stack trace: ${it.stackTrace}", it.cause)
+ Log.e("StrictModeTest", "Stack trace: ${Arrays.toString(it.stackTrace)}",
+ it.cause)
+ Log.e("StrictModeTest", "${it.cause}", it.cause)
fail("Received violation: $it")
}.build()
)
@@ -168,4 +171,4 @@
Truth.assertThat(CallbackTest.latch.await(5, TimeUnit.SECONDS)).isTrue()
Truth.assertThat(CallbackTest.received.get()).containsExactly(1, 2)
}
-}
\ No newline at end of file
+}
diff --git a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/TestGlanceAppWidgetReceiver.kt b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/TestGlanceAppWidgetReceiver.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/TestGlanceAppWidgetReceiver.kt
rename to glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/TestGlanceAppWidgetReceiver.kt
diff --git a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/WithNightMode.kt b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/WithNightMode.kt
similarity index 99%
rename from glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/WithNightMode.kt
rename to glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/WithNightMode.kt
index 45492af..cf36c45 100644
--- a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/WithNightMode.kt
+++ b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/WithNightMode.kt
@@ -18,11 +18,11 @@
import android.content.res.Configuration
import android.os.Build
+import java.lang.reflect.AnnotatedElement
+import java.lang.reflect.Method
import org.junit.rules.TestRule
import org.junit.runner.Description
import org.junit.runners.model.Statement
-import java.lang.reflect.AnnotatedElement
-import java.lang.reflect.Method
/**
* Annotation for specifying a per-test or per-method override of the device night mode
diff --git a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/WithRtl.kt b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/WithRtl.kt
similarity index 99%
rename from glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/WithRtl.kt
rename to glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/WithRtl.kt
index b15b830..b7f7961 100644
--- a/glance/glance-appwidget/src/androidAndroidTest/kotlin/androidx/glance/appwidget/WithRtl.kt
+++ b/glance/glance-appwidget/src/androidTest/kotlin/androidx/glance/appwidget/WithRtl.kt
@@ -16,12 +16,12 @@
package androidx.glance.appwidget
-import org.junit.rules.TestRule
-import org.junit.runner.Description
-import org.junit.runners.model.Statement
import java.lang.reflect.AnnotatedElement
import java.lang.reflect.Method
import java.util.Locale
+import org.junit.rules.TestRule
+import org.junit.runner.Description
+import org.junit.runners.model.Statement
/**
* Annotation for specifying a per-test or per-method override of the default locale. Multiple
diff --git a/glance/glance-appwidget/src/androidAndroidTest/res/drawable/compose.png b/glance/glance-appwidget/src/androidTest/res/drawable/compose.png
similarity index 100%
rename from glance/glance-appwidget/src/androidAndroidTest/res/drawable/compose.png
rename to glance/glance-appwidget/src/androidTest/res/drawable/compose.png
Binary files differ
diff --git a/glance/glance-appwidget/src/androidAndroidTest/res/drawable/filled_oval.xml b/glance/glance-appwidget/src/androidTest/res/drawable/filled_oval.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidAndroidTest/res/drawable/filled_oval.xml
rename to glance/glance-appwidget/src/androidTest/res/drawable/filled_oval.xml
diff --git a/glance/glance-appwidget/src/androidAndroidTest/res/drawable/oval.xml b/glance/glance-appwidget/src/androidTest/res/drawable/oval.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidAndroidTest/res/drawable/oval.xml
rename to glance/glance-appwidget/src/androidTest/res/drawable/oval.xml
diff --git a/glance/glance-appwidget/src/androidAndroidTest/res/layout/app_widget_host_activity.xml b/glance/glance-appwidget/src/androidTest/res/layout/app_widget_host_activity.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidAndroidTest/res/layout/app_widget_host_activity.xml
rename to glance/glance-appwidget/src/androidTest/res/layout/app_widget_host_activity.xml
diff --git a/glance/glance-appwidget/src/androidAndroidTest/res/layout/empty_layout.xml b/glance/glance-appwidget/src/androidTest/res/layout/empty_layout.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidAndroidTest/res/layout/empty_layout.xml
rename to glance/glance-appwidget/src/androidTest/res/layout/empty_layout.xml
diff --git a/glance/glance-appwidget/src/androidTest/res/layout/list_view_row.xml b/glance/glance-appwidget/src/androidTest/res/layout/list_view_row.xml
new file mode 100644
index 0000000..73eeb18
--- /dev/null
+++ b/glance/glance-appwidget/src/androidTest/res/layout/list_view_row.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2023 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
+
+ http://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.
+ -->
+
+<TextView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/text"
+ android:layout_width="match_parent"
+ android:layout_height="48dp"/>
\ No newline at end of file
diff --git a/glance/glance-appwidget/src/androidTest/res/layout/list_view_row_2.xml b/glance/glance-appwidget/src/androidTest/res/layout/list_view_row_2.xml
new file mode 100644
index 0000000..7d2ccd3
--- /dev/null
+++ b/glance/glance-appwidget/src/androidTest/res/layout/list_view_row_2.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2023 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
+
+ http://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.
+ -->
+<FrameLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+ <TextView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/text"
+ android:layout_width="match_parent"
+ android:layout_height="48dp"/>
+</FrameLayout>
\ No newline at end of file
diff --git a/glance/glance-appwidget/src/androidTest/res/layout/remote_views_list.xml b/glance/glance-appwidget/src/androidTest/res/layout/remote_views_list.xml
new file mode 100644
index 0000000..8d0b5c9
--- /dev/null
+++ b/glance/glance-appwidget/src/androidTest/res/layout/remote_views_list.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+ Copyright 2023 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
+
+ http://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.
+ -->
+
+<ListView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/list_view"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"/>
\ No newline at end of file
diff --git a/glance/glance-appwidget/src/androidAndroidTest/res/values-night/colors.xml b/glance/glance-appwidget/src/androidTest/res/values-night/colors.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidAndroidTest/res/values-night/colors.xml
rename to glance/glance-appwidget/src/androidTest/res/values-night/colors.xml
diff --git a/glance/glance-appwidget/src/androidAndroidTest/res/values-v29/themes.xml b/glance/glance-appwidget/src/androidTest/res/values-v29/themes.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidAndroidTest/res/values-v29/themes.xml
rename to glance/glance-appwidget/src/androidTest/res/values-v29/themes.xml
diff --git a/glance/glance-appwidget/src/androidAndroidTest/res/values/attrs.xml b/glance/glance-appwidget/src/androidTest/res/values/attrs.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidAndroidTest/res/values/attrs.xml
rename to glance/glance-appwidget/src/androidTest/res/values/attrs.xml
diff --git a/glance/glance-appwidget/src/androidAndroidTest/res/values/colors.xml b/glance/glance-appwidget/src/androidTest/res/values/colors.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidAndroidTest/res/values/colors.xml
rename to glance/glance-appwidget/src/androidTest/res/values/colors.xml
diff --git a/glance/glance-appwidget/src/androidAndroidTest/res/values/dimens.xml b/glance/glance-appwidget/src/androidTest/res/values/dimens.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidAndroidTest/res/values/dimens.xml
rename to glance/glance-appwidget/src/androidTest/res/values/dimens.xml
diff --git a/glance/glance-appwidget/src/androidAndroidTest/res/values/themes.xml b/glance/glance-appwidget/src/androidTest/res/values/themes.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidAndroidTest/res/values/themes.xml
rename to glance/glance-appwidget/src/androidTest/res/values/themes.xml
diff --git a/glance/glance-appwidget/src/androidAndroidTest/res/xml/app_widget_info.xml b/glance/glance-appwidget/src/androidTest/res/xml/app_widget_info.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidAndroidTest/res/xml/app_widget_info.xml
rename to glance/glance-appwidget/src/androidTest/res/xml/app_widget_info.xml
diff --git a/glance/glance-appwidget/src/androidMain/AndroidManifest.xml b/glance/glance-appwidget/src/main/AndroidManifest.xml
similarity index 89%
rename from glance/glance-appwidget/src/androidMain/AndroidManifest.xml
rename to glance/glance-appwidget/src/main/AndroidManifest.xml
index 9bcafb2..a78692f 100644
--- a/glance/glance-appwidget/src/androidMain/AndroidManifest.xml
+++ b/glance/glance-appwidget/src/main/AndroidManifest.xml
@@ -41,5 +41,9 @@
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
</intent-filter>
</receiver>
+ <service
+ android:name="androidx.glance.appwidget.GlanceRemoteViewsService"
+ android:permission="android.permission.BIND_REMOTEVIEWS"
+ android:exported="true" />
</application>
</manifest>
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/AlignmentModifier.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/AlignmentModifier.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/AlignmentModifier.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/AlignmentModifier.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/AndroidRemoteViews.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/AndroidRemoteViews.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/AndroidRemoteViews.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/AndroidRemoteViews.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/AppWidgetBackground.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/AppWidgetBackground.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/AppWidgetBackground.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/AppWidgetBackground.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/AppWidgetComposer.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/AppWidgetComposer.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/AppWidgetComposer.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/AppWidgetComposer.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/AppWidgetModifiers.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/AppWidgetModifiers.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/AppWidgetModifiers.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/AppWidgetModifiers.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/AppWidgetSession.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/AppWidgetSession.kt
similarity index 95%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/AppWidgetSession.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/AppWidgetSession.kt
index 92f688c..74bc2e5 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/AppWidgetSession.kt
+++ b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/AppWidgetSession.kt
@@ -42,6 +42,7 @@
import androidx.glance.state.ConfigManager
import androidx.glance.state.GlanceState
import kotlinx.coroutines.CancellationException
+import kotlinx.coroutines.channels.Channel
/**
* A session that composes UI for a single app widget.
@@ -73,6 +74,7 @@
private val glanceState = mutableStateOf<Any?>(null, neverEqualPolicy())
private val options = mutableStateOf(Bundle(), neverEqualPolicy())
private var lambdas = mapOf<String, List<LambdaAction>>()
+
@VisibleForTesting
internal var lastRemoteViews: RemoteViews? = null
private set
@@ -184,6 +186,7 @@
lambdas[event.key]?.forEach { it.block() }
} ?: Log.w(TAG, "Triggering Action(${event.key}) for session($key) failed")
}
+ is WaitForReady -> event.resume.send(Unit)
else -> {
throw IllegalArgumentException(
"Sent unrecognized event type ${event.javaClass} to AppWidgetSession"
@@ -204,6 +207,13 @@
sendEvent(RunLambda(key))
}
+ suspend fun waitForReady() {
+ WaitForReady().let {
+ sendEvent(it)
+ it.resume.receive()
+ }
+ }
+
// Event types that this session supports.
@VisibleForTesting
internal object UpdateGlanceState
@@ -211,4 +221,8 @@
internal class UpdateAppWidgetOptions(val newOptions: Bundle)
@VisibleForTesting
internal class RunLambda(val key: String)
+ @VisibleForTesting
+ internal class WaitForReady(
+ val resume: Channel<Unit> = Channel(Channel.CONFLATED)
+ )
}
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/AppWidgetUtils.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/AppWidgetUtils.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/AppWidgetUtils.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/AppWidgetUtils.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/ApplyModifiers.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/ApplyModifiers.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/ApplyModifiers.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/ApplyModifiers.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/Background.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/Background.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/Background.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/Background.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/CheckBox.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/CheckBox.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/CheckBox.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/CheckBox.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/CircularProgressIndicator.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/CircularProgressIndicator.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/CircularProgressIndicator.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/CircularProgressIndicator.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/CompositionLocals.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/CompositionLocals.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/CompositionLocals.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/CompositionLocals.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/CornerRadius.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/CornerRadius.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/CornerRadius.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/CornerRadius.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/CoroutineBroadcastReceiver.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/CoroutineBroadcastReceiver.kt
similarity index 99%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/CoroutineBroadcastReceiver.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/CoroutineBroadcastReceiver.kt
index 7ab9e6a..b963763 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/CoroutineBroadcastReceiver.kt
+++ b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/CoroutineBroadcastReceiver.kt
@@ -18,13 +18,13 @@
import android.content.BroadcastReceiver
import android.util.Log
+import kotlin.coroutines.CoroutineContext
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.cancel
import kotlinx.coroutines.launch
-import kotlin.coroutines.CoroutineContext
/**
* Execute the block asynchronously in a scope with the lifetime of the broadcast.
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/ExperimentalGlanceRemoteViewsApi.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/ExperimentalGlanceRemoteViewsApi.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/ExperimentalGlanceRemoteViewsApi.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/ExperimentalGlanceRemoteViewsApi.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/GlanceAppWidget.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/GlanceAppWidget.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/GlanceAppWidget.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/GlanceAppWidget.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/GlanceAppWidgetManager.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/GlanceAppWidgetManager.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/GlanceAppWidgetManager.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/GlanceAppWidgetManager.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/GlanceAppWidgetReceiver.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/GlanceAppWidgetReceiver.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/GlanceAppWidgetReceiver.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/GlanceAppWidgetReceiver.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/GlanceRemoteViews.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/GlanceRemoteViews.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/GlanceRemoteViews.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/GlanceRemoteViews.kt
diff --git a/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/GlanceRemoteViewsService.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/GlanceRemoteViewsService.kt
new file mode 100644
index 0000000..a9b49c7
--- /dev/null
+++ b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/GlanceRemoteViewsService.kt
@@ -0,0 +1,252 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.glance.appwidget
+
+import android.appwidget.AppWidgetManager
+import android.content.Context
+import android.content.Intent
+import android.net.Uri
+import android.os.Build
+import android.widget.RemoteViews
+import android.widget.RemoteViewsService
+import androidx.annotation.DoNotInline
+import androidx.annotation.RequiresApi
+import androidx.annotation.RestrictTo
+import androidx.glance.session.GlanceSessionManager
+import kotlinx.coroutines.runBlocking
+
+/**
+ * [RemoteViewsService] to be connected to for a remote adapter that returns RemoteViews for lazy
+ * lists / grids.
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+class GlanceRemoteViewsService : RemoteViewsService() {
+ override fun onGetViewFactory(intent: Intent): RemoteViewsFactory {
+ val appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, -1)
+ check(appWidgetId != -1) { "No app widget id was present in the intent" }
+
+ val viewId = intent.getIntExtra(EXTRA_VIEW_ID, -1)
+ check(viewId != -1) { "No view id was present in the intent" }
+
+ val sizeInfo = intent.getStringExtra(EXTRA_SIZE_INFO)
+ check(!sizeInfo.isNullOrEmpty()) { "No size info was present in the intent" }
+
+ return GlanceRemoteViewsFactory(this, appWidgetId, viewId, sizeInfo)
+ }
+
+ companion object {
+ const val EXTRA_VIEW_ID = "androidx.glance.widget.extra.view_id"
+ const val EXTRA_SIZE_INFO = "androidx.glance.widget.extra.size_info"
+
+ // An in-memory store containing items to be returned via the adapter when requested.
+ private val InMemoryStore = RemoteCollectionItemsInMemoryStore()
+
+ // Adds items to the store for later use by the list adapter to display the items.
+ internal fun saveItems(
+ appWidgetId: Int,
+ viewId: Int,
+ sizeInfo: String,
+ remoteCollectionItems: RemoteCollectionItems
+ ) {
+ synchronized(InMemoryStore) {
+ InMemoryStore.save(appWidgetId, viewId, sizeInfo, remoteCollectionItems)
+ }
+ }
+
+ // Returns items in the store for the requested view in appwidget for the specified size.
+ private fun getItems(
+ appWidgetId: Int,
+ viewId: Int,
+ sizeInfo: String
+ ): RemoteCollectionItems {
+ return synchronized(InMemoryStore) {
+ InMemoryStore.getItems(appWidgetId, viewId, sizeInfo)
+ }
+ }
+
+ // Removes items in the store for the requested view in appwidget for the specified size.
+ private fun removeItems(appWidgetId: Int, viewId: Int, sizeInfo: String) {
+ synchronized(InMemoryStore) {
+ InMemoryStore.removeItems(appWidgetId, viewId, sizeInfo)
+ }
+ }
+ }
+
+ /**
+ * A RemoteViewsFactory that holds items in memory and provides it to the host when requested.
+ *
+ * <p>Starts glance session if needed to reload items in memory e.g. when app process was killed
+ * and user scrolled on an existing list / grid view.
+ */
+ internal class GlanceRemoteViewsFactory(
+ private val context: Context,
+ private val appWidgetId: Int,
+ private val viewId: Int,
+ private val size: String
+ ) : RemoteViewsFactory {
+ override fun onCreate() {
+ // OnDataSetChanged is always called even onCreate, so we don't need to load data here.
+ }
+
+ override fun onDataSetChanged() = loadData()
+
+ private fun loadData() {
+ runBlocking {
+ val glanceId = AppWidgetId(appWidgetId)
+ // If session is already running, data must have already been loaded into the store
+ // during composition.
+ if (!GlanceSessionManager.isSessionRunning(context, glanceId.toSessionKey())) {
+ startSessionAndWaitUntilReady(glanceId)
+ }
+ }
+ }
+
+ private suspend fun startSessionAndWaitUntilReady(glanceId: AppWidgetId) {
+ val appWidgetManager = AppWidgetManager.getInstance(context)
+ val providerInfo = appWidgetManager.getAppWidgetInfo(appWidgetId)
+ if (providerInfo?.provider != null) {
+ val receiverClass = Class.forName(providerInfo.provider.className)
+ val glanceAppWidget =
+ (receiverClass.getDeclaredConstructor()
+ .newInstance() as GlanceAppWidgetReceiver).glanceAppWidget
+ AppWidgetSession(glanceAppWidget, glanceId)
+ .also { GlanceSessionManager.startSession(context, it) }
+ .waitForReady()
+ }
+ }
+
+ override fun onDestroy() {
+ removeItems(appWidgetId, viewId, size)
+ }
+
+ private fun items() = getItems(appWidgetId, viewId, size)
+
+ override fun getCount(): Int {
+ return items().itemCount
+ }
+
+ override fun getViewAt(position: Int): RemoteViews {
+ return items().getItemView(position)
+ }
+
+ override fun getLoadingView() = null
+
+ override fun getViewTypeCount(): Int = items().viewTypeCount
+
+ override fun getItemId(position: Int): Long = items().getItemId(position)
+
+ override fun hasStableIds(): Boolean = items().hasStableIds()
+ }
+}
+
+/**
+ * An in-memory store holding [RemoteCollectionItems] for each sized lazy view in appWidgets.
+ */
+private class RemoteCollectionItemsInMemoryStore {
+ private val items = mutableMapOf<String, RemoteCollectionItems>()
+
+ fun save(
+ appWidgetId: Int,
+ viewId: Int,
+ sizeInfo: String,
+ remoteCollectionItems: RemoteCollectionItems
+ ) {
+ items[key(appWidgetId, viewId, sizeInfo)] = remoteCollectionItems
+ }
+
+ /**
+ * Returns the collection items corresponding to the requested view in appwidget and size.
+ */
+ fun getItems(appWidgetId: Int, viewId: Int, sizeInfo: String): RemoteCollectionItems {
+ return items[key(appWidgetId, viewId, sizeInfo)] ?: RemoteCollectionItems.Empty
+ }
+
+ /**
+ * Removes the collection items corresponding to the requested view in appwidget and size.
+ */
+ fun removeItems(appWidgetId: Int, viewId: Int, sizeInfo: String) {
+ items.remove(key(appWidgetId, viewId, sizeInfo))
+ }
+
+ // A unique key for RemoteCollectionItems in the store. Including size info allows us to compose
+ // for different sizes and maintain separate collection items for each size.
+ private fun key(appWidgetId: Int, viewId: Int, sizeInfo: String): String {
+ return "$appWidgetId-$viewId-$sizeInfo"
+ }
+}
+
+/**
+ * Sets remote views adapter.
+ *
+ * <p>For SDKs higher than S, passes the items in the adapter. For S and below SDKs, connects to a
+ * GlanceRemoteViewsService using an intent.
+ */
+@Suppress("DEPRECATION")
+@DoNotInline
+internal fun RemoteViews.setRemoteAdapter(
+ context: Context,
+ appWidgetId: Int,
+ viewId: Int,
+ sizeInfo: String,
+ items: RemoteCollectionItems
+) {
+ if (Build.VERSION.SDK_INT > Build.VERSION_CODES.S) {
+ CollectionItemsApi31Impl.setRemoteAdapter(this, viewId, items)
+ } else {
+ val intent = Intent(context, GlanceRemoteViewsService::class.java)
+ .putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId)
+ .putExtra(GlanceRemoteViewsService.EXTRA_VIEW_ID, viewId)
+ .putExtra(GlanceRemoteViewsService.EXTRA_SIZE_INFO, sizeInfo)
+ .apply {
+ // Set a data Uri to disambiguate Intents for different widget/view ids.
+ data = Uri.parse(toUri(Intent.URI_INTENT_SCHEME))
+ }
+ check(context.packageManager.resolveService(intent, 0) != null) {
+ "GlanceRemoteViewsService could not be resolved, check the app manifest."
+ }
+ setRemoteAdapter(viewId, intent)
+ GlanceRemoteViewsService.saveItems(
+ appWidgetId,
+ viewId,
+ sizeInfo,
+ items
+ )
+ AppWidgetManager.getInstance(context).notifyAppWidgetViewDataChanged(appWidgetId, viewId)
+ }
+}
+
+@RequiresApi(Build.VERSION_CODES.S)
+private object CollectionItemsApi31Impl {
+ @DoNotInline
+ fun setRemoteAdapter(remoteViews: RemoteViews, viewId: Int, items: RemoteCollectionItems) {
+ remoteViews.setRemoteAdapter(viewId, toPlatformCollectionItems(items))
+ }
+
+ @DoNotInline
+ fun toPlatformCollectionItems(items: RemoteCollectionItems):
+ RemoteViews.RemoteCollectionItems {
+ return RemoteViews.RemoteCollectionItems.Builder()
+ .setHasStableIds(items.hasStableIds())
+ .setViewTypeCount(items.viewTypeCount)
+ .also { builder ->
+ repeat(items.itemCount) { index ->
+ builder.addItem(items.getItemId(index), items.getItemView(index))
+ }
+ }
+ .build()
+ }
+}
\ No newline at end of file
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/IgnoreResult.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/IgnoreResult.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/IgnoreResult.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/IgnoreResult.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/ImageProviders.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/ImageProviders.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/ImageProviders.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/ImageProviders.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/LayoutSelection.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/LayoutSelection.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/LayoutSelection.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/LayoutSelection.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/LinearProgressIndicator.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/LinearProgressIndicator.kt
similarity index 99%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/LinearProgressIndicator.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/LinearProgressIndicator.kt
index 409413f..e314c1a 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/LinearProgressIndicator.kt
+++ b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/LinearProgressIndicator.kt
@@ -17,10 +17,10 @@
package androidx.glance.appwidget
import androidx.compose.runtime.Composable
+import androidx.compose.ui.graphics.Color
import androidx.glance.Emittable
import androidx.glance.GlanceModifier
import androidx.glance.GlanceNode
-import androidx.compose.ui.graphics.Color
import androidx.glance.unit.ColorProvider
/**
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/MyPackageReplacedReceiver.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/MyPackageReplacedReceiver.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/MyPackageReplacedReceiver.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/MyPackageReplacedReceiver.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/NormalizeCompositionTree.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/NormalizeCompositionTree.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/NormalizeCompositionTree.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/NormalizeCompositionTree.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/RadioButton.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/RadioButton.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/RadioButton.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/RadioButton.kt
diff --git a/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/RemoteCollectionItems.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/RemoteCollectionItems.kt
new file mode 100644
index 0000000..61c8bcb
--- /dev/null
+++ b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/RemoteCollectionItems.kt
@@ -0,0 +1,153 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.glance.appwidget
+
+import android.annotation.SuppressLint
+import android.widget.RemoteViews
+
+/** Representation of a fixed list of items to be displayed in a RemoteViews collection. */
+internal class RemoteCollectionItems private constructor(
+ private val ids: LongArray,
+ private val views: Array<RemoteViews>,
+ private val hasStableIds: Boolean,
+ private val _viewTypeCount: Int
+) {
+ init {
+ require(ids.size == views.size) {
+ "RemoteCollectionItems has different number of ids and views"
+ }
+ require(_viewTypeCount >= 1) { "View type count must be >= 1" }
+ val layoutIdCount = views.map { it.layoutId }.distinct().count()
+ require(layoutIdCount <= _viewTypeCount) {
+ "View type count is set to $_viewTypeCount, but the collection contains " +
+ "$layoutIdCount different layout ids"
+ }
+ }
+
+ /**
+ * Returns the id for [position]. See [hasStableIds] for whether this id should be
+ * considered meaningful across collection updates.
+ *
+ * @return Id for the position.
+ */
+ fun getItemId(position: Int): Long = ids[position]
+
+ /**
+ * Returns the [RemoteViews] to display at [position].
+ *
+ * @return RemoteViews for the position.
+ */
+ fun getItemView(position: Int): RemoteViews = views[position]
+
+ /**
+ * Returns the number of elements in the collection.
+ *
+ * @return Count of items.
+ */
+ val itemCount: Int
+ get() = ids.size
+
+ /**
+ * Returns the view type count for the collection when used in an adapter
+ *
+ * @return Count of view types for the collection when used in an adapter.
+ * @see android.widget.Adapter.getViewTypeCount
+ */
+ val viewTypeCount: Int
+ get() = _viewTypeCount
+
+ /**
+ * Indicates whether the item ids are stable across changes to the underlying data.
+ *
+ * @return True if the same id always refers to the same object.
+ * @see android.widget.Adapter.hasStableIds
+ */
+ fun hasStableIds(): Boolean = hasStableIds
+
+ /** Builder class for [RemoteCollectionItems] objects. */
+ class Builder {
+ private val ids = arrayListOf<Long>()
+ private val views = arrayListOf<RemoteViews>()
+ private var hasStableIds = false
+ private var viewTypeCount = 0
+
+ /**
+ * Adds a [RemoteViews] to the collection.
+ *
+ * @param id Id to associate with the row. Use [.setHasStableIds] to indicate that ids are
+ * stable across changes to the collection.
+ * @param view RemoteViews to display for the row.
+ */
+ // Covered by getItemId, getItemView, getItemCount.
+ @SuppressLint("MissingGetterMatchingBuilder")
+ fun addItem(id: Long, view: RemoteViews): Builder {
+ ids.add(id)
+ views.add(view)
+ return this
+ }
+
+ /**
+ * Sets whether the item ids are stable across changes to the underlying data.
+ *
+ * @see android.widget.Adapter.hasStableIds
+ */
+ fun setHasStableIds(hasStableIds: Boolean): Builder {
+ this.hasStableIds = hasStableIds
+ return this
+ }
+
+ /**
+ * Sets the view type count for the collection when used in an adapter. This can be set
+ * to the maximum number of different layout ids that will be used by RemoteViews in
+ * this collection.
+ *
+ * If this value is not set, then a value will be inferred from the provided items. As
+ * a result, the adapter may need to be recreated when the list is updated with
+ * previously unseen RemoteViews layouts for new items.
+ *
+ * @see android.widget.Adapter.getViewTypeCount
+ */
+ fun setViewTypeCount(viewTypeCount: Int): Builder {
+ this.viewTypeCount = viewTypeCount
+ return this
+ }
+
+ /** Creates the [RemoteCollectionItems] defined by this builder. */
+ fun build(): RemoteCollectionItems {
+ if (viewTypeCount < 1) {
+ // If a view type count wasn't specified, set it to be the number of distinct
+ // layout ids used in the items.
+ viewTypeCount = views.map { it.layoutId }.distinct().count()
+ }
+ return RemoteCollectionItems(
+ ids.toLongArray(),
+ views.toTypedArray(),
+ hasStableIds,
+ maxOf(viewTypeCount, 1)
+ )
+ }
+ }
+
+ companion object {
+ val Empty = RemoteCollectionItems(
+ ids = longArrayOf(),
+ views = emptyArray(),
+ hasStableIds = false,
+ _viewTypeCount = 1
+ )
+ }
+}
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/RemoteViewsRoot.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/RemoteViewsRoot.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/RemoteViewsRoot.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/RemoteViewsRoot.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/RemoteViewsTranslator.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/RemoteViewsTranslator.kt
similarity index 95%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/RemoteViewsTranslator.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/RemoteViewsTranslator.kt
index e6a5fed..2618cbc 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/RemoteViewsTranslator.kt
+++ b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/RemoteViewsTranslator.kt
@@ -30,6 +30,7 @@
import androidx.annotation.VisibleForTesting
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.isSpecified
import androidx.core.widget.RemoteViewsCompat.setLinearLayoutGravity
import androidx.glance.Emittable
import androidx.glance.EmittableButton
@@ -114,7 +115,10 @@
val size = (child as EmittableSizeBox).size
val remoteViewsInfo = createRootView(translationContext, child.modifier, rootViewIndex)
val rv = remoteViewsInfo.remoteViews.apply {
- translateChild(translationContext.forRoot(root = remoteViewsInfo), child)
+ translateChild(
+ translationContext.forRootAndSize(root = remoteViewsInfo, size),
+ child
+ )
}
size.toSizeF() to rv
}
@@ -146,7 +150,7 @@
else -> throw IllegalArgumentException("There must be between 1 and 2 views.")
}
-private const val LastInvalidViewId = 1
+private const val LAST_INVALID_VIEW_ID = 1
internal data class TranslationContext(
val context: Context,
@@ -155,7 +159,7 @@
val layoutConfiguration: LayoutConfiguration?,
val itemPosition: Int,
val isLazyCollectionDescendant: Boolean = false,
- val lastViewId: AtomicInteger = AtomicInteger(LastInvalidViewId),
+ val lastViewId: AtomicInteger = AtomicInteger(LAST_INVALID_VIEW_ID),
val parentContext: InsertedViewInfo = InsertedViewInfo(),
val isBackgroundSpecified: AtomicBoolean = AtomicBoolean(false),
val layoutSize: DpSize = DpSize.Zero,
@@ -174,7 +178,15 @@
forChild(pos = 0, parent = root.view)
.copy(
isBackgroundSpecified = AtomicBoolean(false),
- lastViewId = AtomicInteger(LastInvalidViewId),
+ lastViewId = AtomicInteger(LAST_INVALID_VIEW_ID),
+ )
+
+ fun forRootAndSize(root: RemoteViewsInfo, layoutSize: DpSize): TranslationContext =
+ forChild(pos = 0, parent = root.view)
+ .copy(
+ isBackgroundSpecified = AtomicBoolean(false),
+ lastViewId = AtomicInteger(LAST_INVALID_VIEW_ID),
+ layoutSize = layoutSize
)
fun resetViewId(newViewId: Int = 0) = copy(lastViewId = AtomicInteger(newViewId))
@@ -190,6 +202,14 @@
fun forActionTargetId(viewId: Int) = copy(actionTargetId = viewId)
}
+internal fun DpSize.toSizeString(): String {
+ return if (isSpecified) {
+ "${width}x$height"
+ } else {
+ "Unspecified"
+ }
+}
+
internal fun RemoteViews.translateChild(
translationContext: TranslationContext,
element: Emittable
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/SizeBox.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/SizeBox.kt
similarity index 98%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/SizeBox.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/SizeBox.kt
index f4dd6cd..4c41537 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/SizeBox.kt
+++ b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/SizeBox.kt
@@ -110,7 +110,7 @@
.ifEmpty { listOf(smallestSize, smallestSize) }
}
}
- sizes.map { size ->
+ sizes.distinct().map { size ->
SizeBox(size, sizeMode, content)
}
}
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/SizeMode.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/SizeMode.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/SizeMode.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/SizeMode.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/Switch.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/Switch.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/Switch.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/Switch.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/TintAndAlphaColorFilterParams.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/TintAndAlphaColorFilterParams.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/TintAndAlphaColorFilterParams.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/TintAndAlphaColorFilterParams.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/Utils.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/Utils.kt
similarity index 99%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/Utils.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/Utils.kt
index b106440..cea6860 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/Utils.kt
+++ b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/Utils.kt
@@ -23,10 +23,10 @@
import android.widget.RemoteViews
import androidx.annotation.IdRes
import androidx.annotation.LayoutRes
-import androidx.core.widget.RemoteViewsCompat.setViewStubInflatedId
-import androidx.core.widget.RemoteViewsCompat.setViewStubLayoutResource
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
+import androidx.core.widget.RemoteViewsCompat.setViewStubInflatedId
+import androidx.core.widget.RemoteViewsCompat.setViewStubLayoutResource
internal fun Dp.toPixels(context: Context) = toPixels(context.resources.displayMetrics)
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/WidgetLayout.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/WidgetLayout.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/WidgetLayout.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/WidgetLayout.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/ActionCallbackBroadcastReceiver.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/action/ActionCallbackBroadcastReceiver.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/ActionCallbackBroadcastReceiver.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/action/ActionCallbackBroadcastReceiver.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/ActionTrampoline.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/action/ActionTrampoline.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/ActionTrampoline.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/action/ActionTrampoline.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/ActionTrampolineActivity.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/action/ActionTrampolineActivity.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/ActionTrampolineActivity.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/action/ActionTrampolineActivity.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/ApplyAction.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/action/ApplyAction.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/ApplyAction.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/action/ApplyAction.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/CompoundButtonAction.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/action/CompoundButtonAction.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/CompoundButtonAction.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/action/CompoundButtonAction.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/InvisibleActionTrampolineActivity.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/action/InvisibleActionTrampolineActivity.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/InvisibleActionTrampolineActivity.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/action/InvisibleActionTrampolineActivity.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/LambdaActionBroadcasts.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/action/LambdaActionBroadcasts.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/LambdaActionBroadcasts.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/action/LambdaActionBroadcasts.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/RunCallbackAction.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/action/RunCallbackAction.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/RunCallbackAction.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/action/RunCallbackAction.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/SendBroadcastAction.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/action/SendBroadcastAction.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/SendBroadcastAction.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/action/SendBroadcastAction.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/StartActivityIntentAction.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/action/StartActivityIntentAction.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/StartActivityIntentAction.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/action/StartActivityIntentAction.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/StartServiceAction.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/action/StartServiceAction.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/StartServiceAction.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/action/StartServiceAction.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/Toggleable.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/action/Toggleable.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/Toggleable.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/action/Toggleable.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/lazy/LazyList.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/lazy/LazyList.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/lazy/LazyList.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/lazy/LazyList.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/lazy/LazyVerticalGrid.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/lazy/LazyVerticalGrid.kt
similarity index 99%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/lazy/LazyVerticalGrid.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/lazy/LazyVerticalGrid.kt
index 0efa461..77a2e9d 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/lazy/LazyVerticalGrid.kt
+++ b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/lazy/LazyVerticalGrid.kt
@@ -15,17 +15,17 @@
*/
package androidx.glance.appwidget.lazy
-import androidx.compose.runtime.Composable
-import androidx.glance.GlanceModifier
-import androidx.glance.GlanceNode
-import androidx.glance.layout.Alignment
-import androidx.glance.EmittableWithChildren
-import androidx.glance.layout.fillMaxWidth
-import androidx.glance.layout.wrapContentHeight
import androidx.annotation.RequiresApi
+import androidx.compose.runtime.Composable
import androidx.compose.runtime.key
import androidx.compose.ui.unit.Dp
import androidx.glance.Emittable
+import androidx.glance.EmittableWithChildren
+import androidx.glance.GlanceModifier
+import androidx.glance.GlanceNode
+import androidx.glance.layout.Alignment
+import androidx.glance.layout.fillMaxWidth
+import androidx.glance.layout.wrapContentHeight
/**
* The DSL implementation of a lazy grid layout. It composes only visible rows of the grid.
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/state/GlanceAppWidgetState.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/state/GlanceAppWidgetState.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/state/GlanceAppWidgetState.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/state/GlanceAppWidgetState.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/translators/CheckBoxTranslator.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/translators/CheckBoxTranslator.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/translators/CheckBoxTranslator.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/translators/CheckBoxTranslator.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/translators/CircularProgressIndicatorTranslator.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/translators/CircularProgressIndicatorTranslator.kt
similarity index 99%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/translators/CircularProgressIndicatorTranslator.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/translators/CircularProgressIndicatorTranslator.kt
index 33a20ed..aa002f4 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/translators/CircularProgressIndicatorTranslator.kt
+++ b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/translators/CircularProgressIndicatorTranslator.kt
@@ -16,23 +16,22 @@
package androidx.glance.appwidget.translators
+import android.content.res.ColorStateList
import android.os.Build
+import android.util.Log
import android.widget.RemoteViews
+import androidx.compose.ui.graphics.toArgb
+import androidx.core.widget.RemoteViewsCompat.setProgressBarIndeterminateTintList
+import androidx.glance.appwidget.EmittableCircularProgressIndicator
+import androidx.glance.appwidget.GlanceAppWidgetTag
import androidx.glance.appwidget.LayoutType
import androidx.glance.appwidget.TranslationContext
import androidx.glance.appwidget.applyModifiers
import androidx.glance.appwidget.insertView
-import androidx.core.widget.RemoteViewsCompat.setProgressBarIndeterminateTintList
-import androidx.compose.ui.graphics.toArgb
-import android.content.res.ColorStateList
-import android.util.Log
+import androidx.glance.color.DayNightColorProvider
import androidx.glance.unit.FixedColorProvider
import androidx.glance.unit.ResourceColorProvider
-import androidx.glance.appwidget.EmittableCircularProgressIndicator
-import androidx.glance.appwidget.GlanceAppWidgetTag
-import androidx.glance.color.DayNightColorProvider
-
internal fun RemoteViews.translateEmittableCircularProgressIndicator(
translationContext: TranslationContext,
element: EmittableCircularProgressIndicator
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/translators/CompoundButtonApi31Impl.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/translators/CompoundButtonApi31Impl.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/translators/CompoundButtonApi31Impl.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/translators/CompoundButtonApi31Impl.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/translators/CompoundButtonTranslator.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/translators/CompoundButtonTranslator.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/translators/CompoundButtonTranslator.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/translators/CompoundButtonTranslator.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/translators/ImageTranslator.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/translators/ImageTranslator.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/translators/ImageTranslator.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/translators/ImageTranslator.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/translators/LazyListTranslator.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/translators/LazyListTranslator.kt
similarity index 93%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/translators/LazyListTranslator.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/translators/LazyListTranslator.kt
index 6c02991..2698f76 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/translators/LazyListTranslator.kt
+++ b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/translators/LazyListTranslator.kt
@@ -22,9 +22,9 @@
import android.content.Intent
import android.content.Intent.FILL_IN_COMPONENT
import android.widget.RemoteViews
-import androidx.core.widget.RemoteViewsCompat
import androidx.glance.appwidget.InsertedViewInfo
import androidx.glance.appwidget.LayoutType
+import androidx.glance.appwidget.RemoteCollectionItems
import androidx.glance.appwidget.TopLevelLayoutsCount
import androidx.glance.appwidget.TranslationContext
import androidx.glance.appwidget.applyModifiers
@@ -33,6 +33,8 @@
import androidx.glance.appwidget.lazy.EmittableLazyList
import androidx.glance.appwidget.lazy.EmittableLazyListItem
import androidx.glance.appwidget.lazy.ReservedItemIdRangeEnd
+import androidx.glance.appwidget.setRemoteAdapter
+import androidx.glance.appwidget.toSizeString
import androidx.glance.appwidget.translateChild
import androidx.glance.appwidget.translateComposition
import androidx.glance.layout.Alignment
@@ -67,7 +69,7 @@
FILL_IN_COMPONENT or FLAG_MUTABLE or FLAG_UPDATE_CURRENT,
)
)
- val items = RemoteViewsCompat.RemoteCollectionItems.Builder().apply {
+ val items = RemoteCollectionItems.Builder().apply {
val childContext = translationContext.forLazyCollection(viewDef.mainViewId)
element.children.foldIndexed(false) { position, previous, itemEmittable ->
itemEmittable as EmittableLazyListItem
@@ -85,11 +87,11 @@
}.let { setHasStableIds(it) }
setViewTypeCount(TopLevelLayoutsCount)
}.build()
- RemoteViewsCompat.setRemoteAdapter(
+ setRemoteAdapter(
translationContext.context,
- this,
translationContext.appWidgetId,
viewDef.mainViewId,
+ translationContext.layoutSize.toSizeString(),
items
)
applyModifiers(translationContext, this, element.modifier, viewDef)
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/translators/LazyVerticalGridTranslator.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/translators/LazyVerticalGridTranslator.kt
similarity index 94%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/translators/LazyVerticalGridTranslator.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/translators/LazyVerticalGridTranslator.kt
index b81a8c9..805c1f7 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/translators/LazyVerticalGridTranslator.kt
+++ b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/translators/LazyVerticalGridTranslator.kt
@@ -16,17 +16,17 @@
package androidx.glance.appwidget.translators
-import android.os.Build
import android.app.PendingIntent
import android.app.PendingIntent.FLAG_MUTABLE
import android.app.PendingIntent.FLAG_UPDATE_CURRENT
import android.content.Intent
import android.content.Intent.FILL_IN_COMPONENT
+import android.os.Build
import android.widget.RemoteViews
-import androidx.core.widget.RemoteViewsCompat
import androidx.core.widget.RemoteViewsCompat.setGridViewColumnWidth
import androidx.glance.appwidget.InsertedViewInfo
import androidx.glance.appwidget.LayoutType
+import androidx.glance.appwidget.RemoteCollectionItems
import androidx.glance.appwidget.TopLevelLayoutsCount
import androidx.glance.appwidget.TranslationContext
import androidx.glance.appwidget.applyModifiers
@@ -35,6 +35,8 @@
import androidx.glance.appwidget.lazy.EmittableLazyVerticalGridListItem
import androidx.glance.appwidget.lazy.GridCells
import androidx.glance.appwidget.lazy.ReservedItemIdRangeEnd
+import androidx.glance.appwidget.setRemoteAdapter
+import androidx.glance.appwidget.toSizeString
import androidx.glance.appwidget.translateChild
import androidx.glance.appwidget.translateComposition
import androidx.glance.layout.Alignment
@@ -80,7 +82,7 @@
FILL_IN_COMPONENT or FLAG_MUTABLE or FLAG_UPDATE_CURRENT,
)
)
- val items = RemoteViewsCompat.RemoteCollectionItems.Builder().apply {
+ val items = RemoteCollectionItems.Builder().apply {
val childContext = translationContext.forLazyCollection(viewDef.mainViewId)
element.children.foldIndexed(false) { position, previous, itemEmittable ->
itemEmittable as EmittableLazyVerticalGridListItem
@@ -98,11 +100,11 @@
}.let { setHasStableIds(it) }
setViewTypeCount(TopLevelLayoutsCount)
}.build()
- RemoteViewsCompat.setRemoteAdapter(
+ setRemoteAdapter(
translationContext.context,
- this,
translationContext.appWidgetId,
viewDef.mainViewId,
+ translationContext.layoutSize.toSizeString(),
items
)
if (Build.VERSION.SDK_INT >= 31 && gridCells is GridCells.Adaptive) {
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/translators/LinearProgressIndicatorTranslator.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/translators/LinearProgressIndicatorTranslator.kt
similarity index 99%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/translators/LinearProgressIndicatorTranslator.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/translators/LinearProgressIndicatorTranslator.kt
index 5b9aca4..b3d72ae 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/translators/LinearProgressIndicatorTranslator.kt
+++ b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/translators/LinearProgressIndicatorTranslator.kt
@@ -16,24 +16,23 @@
package androidx.glance.appwidget.translators
+import android.content.res.ColorStateList
import android.os.Build
+import android.util.Log
import android.widget.RemoteViews
+import androidx.compose.ui.graphics.toArgb
+import androidx.core.widget.RemoteViewsCompat.setProgressBarProgressBackgroundTintList
+import androidx.core.widget.RemoteViewsCompat.setProgressBarProgressTintList
+import androidx.glance.appwidget.EmittableLinearProgressIndicator
+import androidx.glance.appwidget.GlanceAppWidgetTag
import androidx.glance.appwidget.LayoutType
import androidx.glance.appwidget.TranslationContext
import androidx.glance.appwidget.applyModifiers
import androidx.glance.appwidget.insertView
-import androidx.core.widget.RemoteViewsCompat.setProgressBarProgressTintList
-import androidx.core.widget.RemoteViewsCompat.setProgressBarProgressBackgroundTintList
-import androidx.compose.ui.graphics.toArgb
-import android.content.res.ColorStateList
-import android.util.Log
+import androidx.glance.color.DayNightColorProvider
import androidx.glance.unit.FixedColorProvider
import androidx.glance.unit.ResourceColorProvider
-import androidx.glance.appwidget.EmittableLinearProgressIndicator
-import androidx.glance.appwidget.GlanceAppWidgetTag
-import androidx.glance.color.DayNightColorProvider
-
internal fun RemoteViews.translateEmittableLinearProgressIndicator(
translationContext: TranslationContext,
element: EmittableLinearProgressIndicator
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/translators/RadioButtonTranslator.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/translators/RadioButtonTranslator.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/translators/RadioButtonTranslator.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/translators/RadioButtonTranslator.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/translators/SwitchTranslator.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/translators/SwitchTranslator.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/translators/SwitchTranslator.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/translators/SwitchTranslator.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/translators/TextTranslator.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/translators/TextTranslator.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/translators/TextTranslator.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/translators/TextTranslator.kt
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/unit/ColorProvider.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/unit/ColorProvider.kt
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/unit/ColorProvider.kt
rename to glance/glance-appwidget/src/main/java/androidx/glance/appwidget/unit/ColorProvider.kt
diff --git a/glance/glance-appwidget/src/androidMain/layoutTemplates/box.xml b/glance/glance-appwidget/src/main/layoutTemplates/box.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/layoutTemplates/box.xml
rename to glance/glance-appwidget/src/main/layoutTemplates/box.xml
diff --git a/glance/glance-appwidget/src/androidMain/layoutTemplates/column.xml b/glance/glance-appwidget/src/main/layoutTemplates/column.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/layoutTemplates/column.xml
rename to glance/glance-appwidget/src/main/layoutTemplates/column.xml
diff --git a/glance/glance-appwidget/src/androidMain/layoutTemplates/radio_column.xml b/glance/glance-appwidget/src/main/layoutTemplates/radio_column.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/layoutTemplates/radio_column.xml
rename to glance/glance-appwidget/src/main/layoutTemplates/radio_column.xml
diff --git a/glance/glance-appwidget/src/androidMain/layoutTemplates/radio_row.xml b/glance/glance-appwidget/src/main/layoutTemplates/radio_row.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/layoutTemplates/radio_row.xml
rename to glance/glance-appwidget/src/main/layoutTemplates/radio_row.xml
diff --git a/glance/glance-appwidget/src/androidMain/layoutTemplates/row.xml b/glance/glance-appwidget/src/main/layoutTemplates/row.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/layoutTemplates/row.xml
rename to glance/glance-appwidget/src/main/layoutTemplates/row.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/anim/glance_btn_checkbox_to_checked_box_inner_merged_animation.xml b/glance/glance-appwidget/src/main/res/anim/glance_btn_checkbox_to_checked_box_inner_merged_animation.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/anim/glance_btn_checkbox_to_checked_box_inner_merged_animation.xml
rename to glance/glance-appwidget/src/main/res/anim/glance_btn_checkbox_to_checked_box_inner_merged_animation.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/anim/glance_btn_checkbox_to_checked_box_outer_merged_animation.xml b/glance/glance-appwidget/src/main/res/anim/glance_btn_checkbox_to_checked_box_outer_merged_animation.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/anim/glance_btn_checkbox_to_checked_box_outer_merged_animation.xml
rename to glance/glance-appwidget/src/main/res/anim/glance_btn_checkbox_to_checked_box_outer_merged_animation.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/anim/glance_btn_checkbox_to_checked_icon_null_animation.xml b/glance/glance-appwidget/src/main/res/anim/glance_btn_checkbox_to_checked_icon_null_animation.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/anim/glance_btn_checkbox_to_checked_icon_null_animation.xml
rename to glance/glance-appwidget/src/main/res/anim/glance_btn_checkbox_to_checked_icon_null_animation.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/anim/glance_btn_checkbox_to_unchecked_box_inner_merged_animation.xml b/glance/glance-appwidget/src/main/res/anim/glance_btn_checkbox_to_unchecked_box_inner_merged_animation.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/anim/glance_btn_checkbox_to_unchecked_box_inner_merged_animation.xml
rename to glance/glance-appwidget/src/main/res/anim/glance_btn_checkbox_to_unchecked_box_inner_merged_animation.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/anim/glance_btn_checkbox_to_unchecked_check_path_merged_animation.xml b/glance/glance-appwidget/src/main/res/anim/glance_btn_checkbox_to_unchecked_check_path_merged_animation.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/anim/glance_btn_checkbox_to_unchecked_check_path_merged_animation.xml
rename to glance/glance-appwidget/src/main/res/anim/glance_btn_checkbox_to_unchecked_check_path_merged_animation.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/anim/glance_btn_checkbox_to_unchecked_icon_null_animation.xml b/glance/glance-appwidget/src/main/res/anim/glance_btn_checkbox_to_unchecked_icon_null_animation.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/anim/glance_btn_checkbox_to_unchecked_icon_null_animation.xml
rename to glance/glance-appwidget/src/main/res/anim/glance_btn_checkbox_to_unchecked_icon_null_animation.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/anim/glance_btn_radio_to_off_mtrl_dot_group_animation.xml b/glance/glance-appwidget/src/main/res/anim/glance_btn_radio_to_off_mtrl_dot_group_animation.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/anim/glance_btn_radio_to_off_mtrl_dot_group_animation.xml
rename to glance/glance-appwidget/src/main/res/anim/glance_btn_radio_to_off_mtrl_dot_group_animation.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/anim/glance_btn_radio_to_off_mtrl_ring_outer_animation.xml b/glance/glance-appwidget/src/main/res/anim/glance_btn_radio_to_off_mtrl_ring_outer_animation.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/anim/glance_btn_radio_to_off_mtrl_ring_outer_animation.xml
rename to glance/glance-appwidget/src/main/res/anim/glance_btn_radio_to_off_mtrl_ring_outer_animation.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/anim/glance_btn_radio_to_off_mtrl_ring_outer_path_animation.xml b/glance/glance-appwidget/src/main/res/anim/glance_btn_radio_to_off_mtrl_ring_outer_path_animation.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/anim/glance_btn_radio_to_off_mtrl_ring_outer_path_animation.xml
rename to glance/glance-appwidget/src/main/res/anim/glance_btn_radio_to_off_mtrl_ring_outer_path_animation.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/anim/glance_btn_radio_to_on_mtrl_dot_group_animation.xml b/glance/glance-appwidget/src/main/res/anim/glance_btn_radio_to_on_mtrl_dot_group_animation.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/anim/glance_btn_radio_to_on_mtrl_dot_group_animation.xml
rename to glance/glance-appwidget/src/main/res/anim/glance_btn_radio_to_on_mtrl_dot_group_animation.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/anim/glance_btn_radio_to_on_mtrl_ring_outer_animation.xml b/glance/glance-appwidget/src/main/res/anim/glance_btn_radio_to_on_mtrl_ring_outer_animation.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/anim/glance_btn_radio_to_on_mtrl_ring_outer_animation.xml
rename to glance/glance-appwidget/src/main/res/anim/glance_btn_radio_to_on_mtrl_ring_outer_animation.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/anim/glance_btn_radio_to_on_mtrl_ring_outer_path_animation.xml b/glance/glance-appwidget/src/main/res/anim/glance_btn_radio_to_on_mtrl_ring_outer_path_animation.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/anim/glance_btn_radio_to_on_mtrl_ring_outer_path_animation.xml
rename to glance/glance-appwidget/src/main/res/anim/glance_btn_radio_to_on_mtrl_ring_outer_path_animation.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/color-night/glance_default_switch_thumb.xml b/glance/glance-appwidget/src/main/res/color-night/glance_default_switch_thumb.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/color-night/glance_default_switch_thumb.xml
rename to glance/glance-appwidget/src/main/res/color-night/glance_default_switch_thumb.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/color/glance_default_check_box.xml b/glance/glance-appwidget/src/main/res/color/glance_default_check_box.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/color/glance_default_check_box.xml
rename to glance/glance-appwidget/src/main/res/color/glance_default_check_box.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/color/glance_default_radio_button.xml b/glance/glance-appwidget/src/main/res/color/glance_default_radio_button.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/color/glance_default_radio_button.xml
rename to glance/glance-appwidget/src/main/res/color/glance_default_radio_button.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/color/glance_default_switch_thumb.xml b/glance/glance-appwidget/src/main/res/color/glance_default_switch_thumb.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/color/glance_default_switch_thumb.xml
rename to glance/glance-appwidget/src/main/res/color/glance_default_switch_thumb.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/color/glance_default_switch_track.xml b/glance/glance-appwidget/src/main/res/color/glance_default_switch_track.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/color/glance_default_switch_track.xml
rename to glance/glance-appwidget/src/main/res/color/glance_default_switch_track.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/color/glance_switch_off_ambient_shadow.xml b/glance/glance-appwidget/src/main/res/color/glance_switch_off_ambient_shadow.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/color/glance_switch_off_ambient_shadow.xml
rename to glance/glance-appwidget/src/main/res/color/glance_switch_off_ambient_shadow.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/color/glance_switch_off_key_shadow.xml b/glance/glance-appwidget/src/main/res/color/glance_switch_off_key_shadow.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/color/glance_switch_off_key_shadow.xml
rename to glance/glance-appwidget/src/main/res/color/glance_switch_off_key_shadow.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/color/glance_switch_on_ambient_shadow.xml b/glance/glance-appwidget/src/main/res/color/glance_switch_on_ambient_shadow.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/color/glance_switch_on_ambient_shadow.xml
rename to glance/glance-appwidget/src/main/res/color/glance_switch_on_ambient_shadow.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/color/glance_switch_on_key_shadow.xml b/glance/glance-appwidget/src/main/res/color/glance_switch_on_key_shadow.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/color/glance_switch_on_key_shadow.xml
rename to glance/glance-appwidget/src/main/res/color/glance_switch_on_key_shadow.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/color/glance_white_disabled_material_anim.xml b/glance/glance-appwidget/src/main/res/color/glance_white_disabled_material_anim.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/color/glance_white_disabled_material_anim.xml
rename to glance/glance-appwidget/src/main/res/color/glance_white_disabled_material_anim.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/drawable-v24/glance_switch_thumb_off.xml b/glance/glance-appwidget/src/main/res/drawable-v24/glance_switch_thumb_off.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/drawable-v24/glance_switch_thumb_off.xml
rename to glance/glance-appwidget/src/main/res/drawable-v24/glance_switch_thumb_off.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/drawable-v24/glance_switch_thumb_on.xml b/glance/glance-appwidget/src/main/res/drawable-v24/glance_switch_thumb_on.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/drawable-v24/glance_switch_thumb_on.xml
rename to glance/glance-appwidget/src/main/res/drawable-v24/glance_switch_thumb_on.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/drawable-v31/glance_error_layout_background.xml b/glance/glance-appwidget/src/main/res/drawable-v31/glance_error_layout_background.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/drawable-v31/glance_error_layout_background.xml
rename to glance/glance-appwidget/src/main/res/drawable-v31/glance_error_layout_background.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/drawable-v31/glance_loading_layout_background.xml b/glance/glance-appwidget/src/main/res/drawable-v31/glance_loading_layout_background.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/drawable-v31/glance_loading_layout_background.xml
rename to glance/glance-appwidget/src/main/res/drawable-v31/glance_loading_layout_background.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/drawable/glance_abc_btn_check_material_anim_enabled.xml b/glance/glance-appwidget/src/main/res/drawable/glance_abc_btn_check_material_anim_enabled.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/drawable/glance_abc_btn_check_material_anim_enabled.xml
rename to glance/glance-appwidget/src/main/res/drawable/glance_abc_btn_check_material_anim_enabled.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/drawable/glance_btn_checkbox_checked_mtrl.xml b/glance/glance-appwidget/src/main/res/drawable/glance_btn_checkbox_checked_mtrl.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/drawable/glance_btn_checkbox_checked_mtrl.xml
rename to glance/glance-appwidget/src/main/res/drawable/glance_btn_checkbox_checked_mtrl.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/drawable/glance_btn_checkbox_checked_to_unchecked_mtrl_animation.xml b/glance/glance-appwidget/src/main/res/drawable/glance_btn_checkbox_checked_to_unchecked_mtrl_animation.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/drawable/glance_btn_checkbox_checked_to_unchecked_mtrl_animation.xml
rename to glance/glance-appwidget/src/main/res/drawable/glance_btn_checkbox_checked_to_unchecked_mtrl_animation.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/drawable/glance_btn_checkbox_unchecked_mtrl.xml b/glance/glance-appwidget/src/main/res/drawable/glance_btn_checkbox_unchecked_mtrl.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/drawable/glance_btn_checkbox_unchecked_mtrl.xml
rename to glance/glance-appwidget/src/main/res/drawable/glance_btn_checkbox_unchecked_mtrl.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/drawable/glance_btn_checkbox_unchecked_to_checked_mtrl_animation.xml b/glance/glance-appwidget/src/main/res/drawable/glance_btn_checkbox_unchecked_to_checked_mtrl_animation.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/drawable/glance_btn_checkbox_unchecked_to_checked_mtrl_animation.xml
rename to glance/glance-appwidget/src/main/res/drawable/glance_btn_checkbox_unchecked_to_checked_mtrl_animation.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/drawable/glance_btn_radio_material_anim.xml b/glance/glance-appwidget/src/main/res/drawable/glance_btn_radio_material_anim.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/drawable/glance_btn_radio_material_anim.xml
rename to glance/glance-appwidget/src/main/res/drawable/glance_btn_radio_material_anim.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/drawable/glance_btn_radio_off_mtrl.xml b/glance/glance-appwidget/src/main/res/drawable/glance_btn_radio_off_mtrl.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/drawable/glance_btn_radio_off_mtrl.xml
rename to glance/glance-appwidget/src/main/res/drawable/glance_btn_radio_off_mtrl.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/drawable/glance_btn_radio_off_to_on_mtrl_animation.xml b/glance/glance-appwidget/src/main/res/drawable/glance_btn_radio_off_to_on_mtrl_animation.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/drawable/glance_btn_radio_off_to_on_mtrl_animation.xml
rename to glance/glance-appwidget/src/main/res/drawable/glance_btn_radio_off_to_on_mtrl_animation.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/drawable/glance_btn_radio_on_mtrl.xml b/glance/glance-appwidget/src/main/res/drawable/glance_btn_radio_on_mtrl.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/drawable/glance_btn_radio_on_mtrl.xml
rename to glance/glance-appwidget/src/main/res/drawable/glance_btn_radio_on_mtrl.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/drawable/glance_btn_radio_on_to_off_mtrl_animation.xml b/glance/glance-appwidget/src/main/res/drawable/glance_btn_radio_on_to_off_mtrl_animation.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/drawable/glance_btn_radio_on_to_off_mtrl_animation.xml
rename to glance/glance-appwidget/src/main/res/drawable/glance_btn_radio_on_to_off_mtrl_animation.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/drawable/glance_button_outline.xml b/glance/glance-appwidget/src/main/res/drawable/glance_button_outline.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/drawable/glance_button_outline.xml
rename to glance/glance-appwidget/src/main/res/drawable/glance_button_outline.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/drawable/glance_button_ripple.xml b/glance/glance-appwidget/src/main/res/drawable/glance_button_ripple.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/drawable/glance_button_ripple.xml
rename to glance/glance-appwidget/src/main/res/drawable/glance_button_ripple.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/drawable/glance_error_layout_background.xml b/glance/glance-appwidget/src/main/res/drawable/glance_error_layout_background.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/drawable/glance_error_layout_background.xml
rename to glance/glance-appwidget/src/main/res/drawable/glance_error_layout_background.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/drawable/glance_loading_layout_background.xml b/glance/glance-appwidget/src/main/res/drawable/glance_loading_layout_background.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/drawable/glance_loading_layout_background.xml
rename to glance/glance-appwidget/src/main/res/drawable/glance_loading_layout_background.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/drawable/glance_ripple.xml b/glance/glance-appwidget/src/main/res/drawable/glance_ripple.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/drawable/glance_ripple.xml
rename to glance/glance-appwidget/src/main/res/drawable/glance_ripple.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/drawable/glance_switch_thumb_animated.xml b/glance/glance-appwidget/src/main/res/drawable/glance_switch_thumb_animated.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/drawable/glance_switch_thumb_animated.xml
rename to glance/glance-appwidget/src/main/res/drawable/glance_switch_thumb_animated.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/drawable/glance_switch_thumb_off.xml b/glance/glance-appwidget/src/main/res/drawable/glance_switch_thumb_off.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/drawable/glance_switch_thumb_off.xml
rename to glance/glance-appwidget/src/main/res/drawable/glance_switch_thumb_off.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/drawable/glance_switch_thumb_off_to_on.xml b/glance/glance-appwidget/src/main/res/drawable/glance_switch_thumb_off_to_on.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/drawable/glance_switch_thumb_off_to_on.xml
rename to glance/glance-appwidget/src/main/res/drawable/glance_switch_thumb_off_to_on.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/drawable/glance_switch_thumb_on.xml b/glance/glance-appwidget/src/main/res/drawable/glance_switch_thumb_on.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/drawable/glance_switch_thumb_on.xml
rename to glance/glance-appwidget/src/main/res/drawable/glance_switch_thumb_on.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/drawable/glance_switch_thumb_on_to_off.xml b/glance/glance-appwidget/src/main/res/drawable/glance_switch_thumb_on_to_off.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/drawable/glance_switch_thumb_on_to_off.xml
rename to glance/glance-appwidget/src/main/res/drawable/glance_switch_thumb_on_to_off.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/drawable/glance_switch_track.xml b/glance/glance-appwidget/src/main/res/drawable/glance_switch_track.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/drawable/glance_switch_track.xml
rename to glance/glance-appwidget/src/main/res/drawable/glance_switch_track.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/interpolator/glance_btn_checkbox_checked_mtrl_animation_interpolator_0.xml b/glance/glance-appwidget/src/main/res/interpolator/glance_btn_checkbox_checked_mtrl_animation_interpolator_0.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/interpolator/glance_btn_checkbox_checked_mtrl_animation_interpolator_0.xml
rename to glance/glance-appwidget/src/main/res/interpolator/glance_btn_checkbox_checked_mtrl_animation_interpolator_0.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/interpolator/glance_btn_checkbox_checked_mtrl_animation_interpolator_1.xml b/glance/glance-appwidget/src/main/res/interpolator/glance_btn_checkbox_checked_mtrl_animation_interpolator_1.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/interpolator/glance_btn_checkbox_checked_mtrl_animation_interpolator_1.xml
rename to glance/glance-appwidget/src/main/res/interpolator/glance_btn_checkbox_checked_mtrl_animation_interpolator_1.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/interpolator/glance_btn_checkbox_unchecked_mtrl_animation_interpolator_0.xml b/glance/glance-appwidget/src/main/res/interpolator/glance_btn_checkbox_unchecked_mtrl_animation_interpolator_0.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/interpolator/glance_btn_checkbox_unchecked_mtrl_animation_interpolator_0.xml
rename to glance/glance-appwidget/src/main/res/interpolator/glance_btn_checkbox_unchecked_mtrl_animation_interpolator_0.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/interpolator/glance_btn_checkbox_unchecked_mtrl_animation_interpolator_1.xml b/glance/glance-appwidget/src/main/res/interpolator/glance_btn_checkbox_unchecked_mtrl_animation_interpolator_1.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/interpolator/glance_btn_checkbox_unchecked_mtrl_animation_interpolator_1.xml
rename to glance/glance-appwidget/src/main/res/interpolator/glance_btn_checkbox_unchecked_mtrl_animation_interpolator_1.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/interpolator/glance_btn_radio_to_off_mtrl_animation_interpolator_0.xml b/glance/glance-appwidget/src/main/res/interpolator/glance_btn_radio_to_off_mtrl_animation_interpolator_0.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/interpolator/glance_btn_radio_to_off_mtrl_animation_interpolator_0.xml
rename to glance/glance-appwidget/src/main/res/interpolator/glance_btn_radio_to_off_mtrl_animation_interpolator_0.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/interpolator/glance_btn_radio_to_on_mtrl_animation_interpolator_0.xml b/glance/glance-appwidget/src/main/res/interpolator/glance_btn_radio_to_on_mtrl_animation_interpolator_0.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/interpolator/glance_btn_radio_to_on_mtrl_animation_interpolator_0.xml
rename to glance/glance-appwidget/src/main/res/interpolator/glance_btn_radio_to_on_mtrl_animation_interpolator_0.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_button.xml b/glance/glance-appwidget/src/main/res/layout/glance_button.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_button.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_button.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_check_box.xml b/glance/glance-appwidget/src/main/res/layout/glance_check_box.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_check_box.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_check_box.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_check_box_backport.xml b/glance/glance-appwidget/src/main/res/layout/glance_check_box_backport.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_check_box_backport.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_check_box_backport.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_check_box_image.xml b/glance/glance-appwidget/src/main/res/layout/glance_check_box_image.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_check_box_image.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_check_box_image.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_check_box_text.xml b/glance/glance-appwidget/src/main/res/layout/glance_check_box_text.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_check_box_text.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_check_box_text.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_check_box_view.xml b/glance/glance-appwidget/src/main/res/layout/glance_check_box_view.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_check_box_view.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_check_box_view.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_circular_progress_indicator.xml b/glance/glance-appwidget/src/main/res/layout/glance_circular_progress_indicator.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_circular_progress_indicator.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_circular_progress_indicator.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_default_loading_layout.xml b/glance/glance-appwidget/src/main/res/layout/glance_default_loading_layout.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_default_loading_layout.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_default_loading_layout.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_deleted_view.xml b/glance/glance-appwidget/src/main/res/layout/glance_deleted_view.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_deleted_view.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_deleted_view.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_error_layout.xml b/glance/glance-appwidget/src/main/res/layout/glance_error_layout.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_error_layout.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_error_layout.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_frame.xml b/glance/glance-appwidget/src/main/res/layout/glance_frame.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_frame.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_frame.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_image_crop.xml b/glance/glance-appwidget/src/main/res/layout/glance_image_crop.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_image_crop.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_image_crop.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_image_fill_bounds.xml b/glance/glance-appwidget/src/main/res/layout/glance_image_fill_bounds.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_image_fill_bounds.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_image_fill_bounds.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_image_fit.xml b/glance/glance-appwidget/src/main/res/layout/glance_image_fit.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_image_fit.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_image_fit.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_linear_progress_indicator.xml b/glance/glance-appwidget/src/main/res/layout/glance_linear_progress_indicator.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_linear_progress_indicator.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_linear_progress_indicator.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_list.xml b/glance/glance-appwidget/src/main/res/layout/glance_list.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_list.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_list.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_radio_button.xml b/glance/glance-appwidget/src/main/res/layout/glance_radio_button.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_radio_button.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_radio_button.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_radio_button_backport.xml b/glance/glance-appwidget/src/main/res/layout/glance_radio_button_backport.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_radio_button_backport.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_radio_button_backport.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_radio_icon.xml b/glance/glance-appwidget/src/main/res/layout/glance_radio_icon.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_radio_icon.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_radio_icon.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_radio_text.xml b/glance/glance-appwidget/src/main/res/layout/glance_radio_text.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_radio_text.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_radio_text.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_switch_text.xml b/glance/glance-appwidget/src/main/res/layout/glance_switch_text.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_switch_text.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_switch_text.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_switch_thumb.xml b/glance/glance-appwidget/src/main/res/layout/glance_switch_thumb.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_switch_thumb.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_switch_thumb.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_switch_track.xml b/glance/glance-appwidget/src/main/res/layout/glance_switch_track.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_switch_track.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_switch_track.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_swtch.xml b/glance/glance-appwidget/src/main/res/layout/glance_swtch.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_swtch.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_swtch.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_swtch_backport.xml b/glance/glance-appwidget/src/main/res/layout/glance_swtch_backport.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_swtch_backport.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_swtch_backport.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_text.xml b/glance/glance-appwidget/src/main/res/layout/glance_text.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_text.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_text.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_auto_fit.xml b/glance/glance-appwidget/src/main/res/layout/glance_vertical_grid_auto_fit.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_auto_fit.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_vertical_grid_auto_fit.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_five_columns.xml b/glance/glance-appwidget/src/main/res/layout/glance_vertical_grid_five_columns.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_five_columns.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_vertical_grid_five_columns.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_four_columns.xml b/glance/glance-appwidget/src/main/res/layout/glance_vertical_grid_four_columns.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_four_columns.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_vertical_grid_four_columns.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_one_column.xml b/glance/glance-appwidget/src/main/res/layout/glance_vertical_grid_one_column.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_one_column.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_vertical_grid_one_column.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_three_columns.xml b/glance/glance-appwidget/src/main/res/layout/glance_vertical_grid_three_columns.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_three_columns.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_vertical_grid_three_columns.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_two_columns.xml b/glance/glance-appwidget/src/main/res/layout/glance_vertical_grid_two_columns.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/layout/glance_vertical_grid_two_columns.xml
rename to glance/glance-appwidget/src/main/res/layout/glance_vertical_grid_two_columns.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-af/strings.xml b/glance/glance-appwidget/src/main/res/values-af/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-af/strings.xml
rename to glance/glance-appwidget/src/main/res/values-af/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-am/strings.xml b/glance/glance-appwidget/src/main/res/values-am/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-am/strings.xml
rename to glance/glance-appwidget/src/main/res/values-am/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-ar/strings.xml b/glance/glance-appwidget/src/main/res/values-ar/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-ar/strings.xml
rename to glance/glance-appwidget/src/main/res/values-ar/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-as/strings.xml b/glance/glance-appwidget/src/main/res/values-as/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-as/strings.xml
rename to glance/glance-appwidget/src/main/res/values-as/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-az/strings.xml b/glance/glance-appwidget/src/main/res/values-az/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-az/strings.xml
rename to glance/glance-appwidget/src/main/res/values-az/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-b+sr+Latn/strings.xml b/glance/glance-appwidget/src/main/res/values-b+sr+Latn/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-b+sr+Latn/strings.xml
rename to glance/glance-appwidget/src/main/res/values-b+sr+Latn/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-be/strings.xml b/glance/glance-appwidget/src/main/res/values-be/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-be/strings.xml
rename to glance/glance-appwidget/src/main/res/values-be/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-bg/strings.xml b/glance/glance-appwidget/src/main/res/values-bg/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-bg/strings.xml
rename to glance/glance-appwidget/src/main/res/values-bg/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-bn/strings.xml b/glance/glance-appwidget/src/main/res/values-bn/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-bn/strings.xml
rename to glance/glance-appwidget/src/main/res/values-bn/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-bs/strings.xml b/glance/glance-appwidget/src/main/res/values-bs/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-bs/strings.xml
rename to glance/glance-appwidget/src/main/res/values-bs/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-ca/strings.xml b/glance/glance-appwidget/src/main/res/values-ca/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-ca/strings.xml
rename to glance/glance-appwidget/src/main/res/values-ca/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-cs/strings.xml b/glance/glance-appwidget/src/main/res/values-cs/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-cs/strings.xml
rename to glance/glance-appwidget/src/main/res/values-cs/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-da/strings.xml b/glance/glance-appwidget/src/main/res/values-da/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-da/strings.xml
rename to glance/glance-appwidget/src/main/res/values-da/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-de/strings.xml b/glance/glance-appwidget/src/main/res/values-de/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-de/strings.xml
rename to glance/glance-appwidget/src/main/res/values-de/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-el/strings.xml b/glance/glance-appwidget/src/main/res/values-el/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-el/strings.xml
rename to glance/glance-appwidget/src/main/res/values-el/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-en-rAU/strings.xml b/glance/glance-appwidget/src/main/res/values-en-rAU/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-en-rAU/strings.xml
rename to glance/glance-appwidget/src/main/res/values-en-rAU/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-en-rCA/strings.xml b/glance/glance-appwidget/src/main/res/values-en-rCA/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-en-rCA/strings.xml
rename to glance/glance-appwidget/src/main/res/values-en-rCA/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-en-rGB/strings.xml b/glance/glance-appwidget/src/main/res/values-en-rGB/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-en-rGB/strings.xml
rename to glance/glance-appwidget/src/main/res/values-en-rGB/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-en-rIN/strings.xml b/glance/glance-appwidget/src/main/res/values-en-rIN/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-en-rIN/strings.xml
rename to glance/glance-appwidget/src/main/res/values-en-rIN/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-en-rXC/strings.xml b/glance/glance-appwidget/src/main/res/values-en-rXC/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-en-rXC/strings.xml
rename to glance/glance-appwidget/src/main/res/values-en-rXC/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-es-rUS/strings.xml b/glance/glance-appwidget/src/main/res/values-es-rUS/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-es-rUS/strings.xml
rename to glance/glance-appwidget/src/main/res/values-es-rUS/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-es/strings.xml b/glance/glance-appwidget/src/main/res/values-es/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-es/strings.xml
rename to glance/glance-appwidget/src/main/res/values-es/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-et/strings.xml b/glance/glance-appwidget/src/main/res/values-et/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-et/strings.xml
rename to glance/glance-appwidget/src/main/res/values-et/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-eu/strings.xml b/glance/glance-appwidget/src/main/res/values-eu/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-eu/strings.xml
rename to glance/glance-appwidget/src/main/res/values-eu/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-fa/strings.xml b/glance/glance-appwidget/src/main/res/values-fa/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-fa/strings.xml
rename to glance/glance-appwidget/src/main/res/values-fa/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-fi/strings.xml b/glance/glance-appwidget/src/main/res/values-fi/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-fi/strings.xml
rename to glance/glance-appwidget/src/main/res/values-fi/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-fr-rCA/strings.xml b/glance/glance-appwidget/src/main/res/values-fr-rCA/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-fr-rCA/strings.xml
rename to glance/glance-appwidget/src/main/res/values-fr-rCA/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-fr/strings.xml b/glance/glance-appwidget/src/main/res/values-fr/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-fr/strings.xml
rename to glance/glance-appwidget/src/main/res/values-fr/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-gl/strings.xml b/glance/glance-appwidget/src/main/res/values-gl/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-gl/strings.xml
rename to glance/glance-appwidget/src/main/res/values-gl/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-gu/strings.xml b/glance/glance-appwidget/src/main/res/values-gu/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-gu/strings.xml
rename to glance/glance-appwidget/src/main/res/values-gu/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-hi/strings.xml b/glance/glance-appwidget/src/main/res/values-hi/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-hi/strings.xml
rename to glance/glance-appwidget/src/main/res/values-hi/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-hr/strings.xml b/glance/glance-appwidget/src/main/res/values-hr/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-hr/strings.xml
rename to glance/glance-appwidget/src/main/res/values-hr/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-hu/strings.xml b/glance/glance-appwidget/src/main/res/values-hu/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-hu/strings.xml
rename to glance/glance-appwidget/src/main/res/values-hu/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-hy/strings.xml b/glance/glance-appwidget/src/main/res/values-hy/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-hy/strings.xml
rename to glance/glance-appwidget/src/main/res/values-hy/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-in/strings.xml b/glance/glance-appwidget/src/main/res/values-in/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-in/strings.xml
rename to glance/glance-appwidget/src/main/res/values-in/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-is/strings.xml b/glance/glance-appwidget/src/main/res/values-is/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-is/strings.xml
rename to glance/glance-appwidget/src/main/res/values-is/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-it/strings.xml b/glance/glance-appwidget/src/main/res/values-it/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-it/strings.xml
rename to glance/glance-appwidget/src/main/res/values-it/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-iw/strings.xml b/glance/glance-appwidget/src/main/res/values-iw/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-iw/strings.xml
rename to glance/glance-appwidget/src/main/res/values-iw/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-ja/strings.xml b/glance/glance-appwidget/src/main/res/values-ja/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-ja/strings.xml
rename to glance/glance-appwidget/src/main/res/values-ja/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-ka/strings.xml b/glance/glance-appwidget/src/main/res/values-ka/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-ka/strings.xml
rename to glance/glance-appwidget/src/main/res/values-ka/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-kk/strings.xml b/glance/glance-appwidget/src/main/res/values-kk/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-kk/strings.xml
rename to glance/glance-appwidget/src/main/res/values-kk/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-km/strings.xml b/glance/glance-appwidget/src/main/res/values-km/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-km/strings.xml
rename to glance/glance-appwidget/src/main/res/values-km/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-kn/strings.xml b/glance/glance-appwidget/src/main/res/values-kn/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-kn/strings.xml
rename to glance/glance-appwidget/src/main/res/values-kn/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-ko/strings.xml b/glance/glance-appwidget/src/main/res/values-ko/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-ko/strings.xml
rename to glance/glance-appwidget/src/main/res/values-ko/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-ky/strings.xml b/glance/glance-appwidget/src/main/res/values-ky/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-ky/strings.xml
rename to glance/glance-appwidget/src/main/res/values-ky/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-lo/strings.xml b/glance/glance-appwidget/src/main/res/values-lo/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-lo/strings.xml
rename to glance/glance-appwidget/src/main/res/values-lo/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-lt/strings.xml b/glance/glance-appwidget/src/main/res/values-lt/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-lt/strings.xml
rename to glance/glance-appwidget/src/main/res/values-lt/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-lv/strings.xml b/glance/glance-appwidget/src/main/res/values-lv/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-lv/strings.xml
rename to glance/glance-appwidget/src/main/res/values-lv/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-mk/strings.xml b/glance/glance-appwidget/src/main/res/values-mk/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-mk/strings.xml
rename to glance/glance-appwidget/src/main/res/values-mk/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-ml/strings.xml b/glance/glance-appwidget/src/main/res/values-ml/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-ml/strings.xml
rename to glance/glance-appwidget/src/main/res/values-ml/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-mn/strings.xml b/glance/glance-appwidget/src/main/res/values-mn/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-mn/strings.xml
rename to glance/glance-appwidget/src/main/res/values-mn/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-mr/strings.xml b/glance/glance-appwidget/src/main/res/values-mr/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-mr/strings.xml
rename to glance/glance-appwidget/src/main/res/values-mr/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-ms/strings.xml b/glance/glance-appwidget/src/main/res/values-ms/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-ms/strings.xml
rename to glance/glance-appwidget/src/main/res/values-ms/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-my/strings.xml b/glance/glance-appwidget/src/main/res/values-my/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-my/strings.xml
rename to glance/glance-appwidget/src/main/res/values-my/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-nb/strings.xml b/glance/glance-appwidget/src/main/res/values-nb/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-nb/strings.xml
rename to glance/glance-appwidget/src/main/res/values-nb/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-ne/strings.xml b/glance/glance-appwidget/src/main/res/values-ne/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-ne/strings.xml
rename to glance/glance-appwidget/src/main/res/values-ne/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-nl/strings.xml b/glance/glance-appwidget/src/main/res/values-nl/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-nl/strings.xml
rename to glance/glance-appwidget/src/main/res/values-nl/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-or/strings.xml b/glance/glance-appwidget/src/main/res/values-or/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-or/strings.xml
rename to glance/glance-appwidget/src/main/res/values-or/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-pa/strings.xml b/glance/glance-appwidget/src/main/res/values-pa/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-pa/strings.xml
rename to glance/glance-appwidget/src/main/res/values-pa/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-pl/strings.xml b/glance/glance-appwidget/src/main/res/values-pl/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-pl/strings.xml
rename to glance/glance-appwidget/src/main/res/values-pl/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-pt-rBR/strings.xml b/glance/glance-appwidget/src/main/res/values-pt-rBR/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-pt-rBR/strings.xml
rename to glance/glance-appwidget/src/main/res/values-pt-rBR/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-pt-rPT/strings.xml b/glance/glance-appwidget/src/main/res/values-pt-rPT/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-pt-rPT/strings.xml
rename to glance/glance-appwidget/src/main/res/values-pt-rPT/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-pt/strings.xml b/glance/glance-appwidget/src/main/res/values-pt/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-pt/strings.xml
rename to glance/glance-appwidget/src/main/res/values-pt/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-ro/strings.xml b/glance/glance-appwidget/src/main/res/values-ro/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-ro/strings.xml
rename to glance/glance-appwidget/src/main/res/values-ro/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-ru/strings.xml b/glance/glance-appwidget/src/main/res/values-ru/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-ru/strings.xml
rename to glance/glance-appwidget/src/main/res/values-ru/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-si/strings.xml b/glance/glance-appwidget/src/main/res/values-si/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-si/strings.xml
rename to glance/glance-appwidget/src/main/res/values-si/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-sk/strings.xml b/glance/glance-appwidget/src/main/res/values-sk/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-sk/strings.xml
rename to glance/glance-appwidget/src/main/res/values-sk/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-sl/strings.xml b/glance/glance-appwidget/src/main/res/values-sl/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-sl/strings.xml
rename to glance/glance-appwidget/src/main/res/values-sl/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-sq/strings.xml b/glance/glance-appwidget/src/main/res/values-sq/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-sq/strings.xml
rename to glance/glance-appwidget/src/main/res/values-sq/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-sr/strings.xml b/glance/glance-appwidget/src/main/res/values-sr/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-sr/strings.xml
rename to glance/glance-appwidget/src/main/res/values-sr/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-sv/strings.xml b/glance/glance-appwidget/src/main/res/values-sv/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-sv/strings.xml
rename to glance/glance-appwidget/src/main/res/values-sv/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-sw/strings.xml b/glance/glance-appwidget/src/main/res/values-sw/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-sw/strings.xml
rename to glance/glance-appwidget/src/main/res/values-sw/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-ta/strings.xml b/glance/glance-appwidget/src/main/res/values-ta/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-ta/strings.xml
rename to glance/glance-appwidget/src/main/res/values-ta/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-te/strings.xml b/glance/glance-appwidget/src/main/res/values-te/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-te/strings.xml
rename to glance/glance-appwidget/src/main/res/values-te/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-th/strings.xml b/glance/glance-appwidget/src/main/res/values-th/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-th/strings.xml
rename to glance/glance-appwidget/src/main/res/values-th/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-tl/strings.xml b/glance/glance-appwidget/src/main/res/values-tl/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-tl/strings.xml
rename to glance/glance-appwidget/src/main/res/values-tl/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-tr/strings.xml b/glance/glance-appwidget/src/main/res/values-tr/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-tr/strings.xml
rename to glance/glance-appwidget/src/main/res/values-tr/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-uk/strings.xml b/glance/glance-appwidget/src/main/res/values-uk/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-uk/strings.xml
rename to glance/glance-appwidget/src/main/res/values-uk/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-ur/strings.xml b/glance/glance-appwidget/src/main/res/values-ur/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-ur/strings.xml
rename to glance/glance-appwidget/src/main/res/values-ur/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-uz/strings.xml b/glance/glance-appwidget/src/main/res/values-uz/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-uz/strings.xml
rename to glance/glance-appwidget/src/main/res/values-uz/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-v23/bools.xml b/glance/glance-appwidget/src/main/res/values-v23/bools.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-v23/bools.xml
rename to glance/glance-appwidget/src/main/res/values-v23/bools.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-v29/textAppearance_styles.xml b/glance/glance-appwidget/src/main/res/values-v29/textAppearance_styles.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-v29/textAppearance_styles.xml
rename to glance/glance-appwidget/src/main/res/values-v29/textAppearance_styles.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-v31/styles.xml b/glance/glance-appwidget/src/main/res/values-v31/styles.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-v31/styles.xml
rename to glance/glance-appwidget/src/main/res/values-v31/styles.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-vi/strings.xml b/glance/glance-appwidget/src/main/res/values-vi/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-vi/strings.xml
rename to glance/glance-appwidget/src/main/res/values-vi/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-zh-rCN/strings.xml b/glance/glance-appwidget/src/main/res/values-zh-rCN/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-zh-rCN/strings.xml
rename to glance/glance-appwidget/src/main/res/values-zh-rCN/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-zh-rHK/strings.xml b/glance/glance-appwidget/src/main/res/values-zh-rHK/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-zh-rHK/strings.xml
rename to glance/glance-appwidget/src/main/res/values-zh-rHK/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-zh-rTW/strings.xml b/glance/glance-appwidget/src/main/res/values-zh-rTW/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-zh-rTW/strings.xml
rename to glance/glance-appwidget/src/main/res/values-zh-rTW/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values-zu/strings.xml b/glance/glance-appwidget/src/main/res/values-zu/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values-zu/strings.xml
rename to glance/glance-appwidget/src/main/res/values-zu/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values/attrs.xml b/glance/glance-appwidget/src/main/res/values/attrs.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values/attrs.xml
rename to glance/glance-appwidget/src/main/res/values/attrs.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values/bools.xml b/glance/glance-appwidget/src/main/res/values/bools.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values/bools.xml
rename to glance/glance-appwidget/src/main/res/values/bools.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values/colors.xml b/glance/glance-appwidget/src/main/res/values/colors.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values/colors.xml
rename to glance/glance-appwidget/src/main/res/values/colors.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values/ids.xml b/glance/glance-appwidget/src/main/res/values/ids.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values/ids.xml
rename to glance/glance-appwidget/src/main/res/values/ids.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values/public.xml b/glance/glance-appwidget/src/main/res/values/public.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values/public.xml
rename to glance/glance-appwidget/src/main/res/values/public.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values/strings.xml b/glance/glance-appwidget/src/main/res/values/strings.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values/strings.xml
rename to glance/glance-appwidget/src/main/res/values/strings.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values/styles.xml b/glance/glance-appwidget/src/main/res/values/styles.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values/styles.xml
rename to glance/glance-appwidget/src/main/res/values/styles.xml
diff --git a/glance/glance-appwidget/src/androidMain/res/values/textAppearance_styles.xml b/glance/glance-appwidget/src/main/res/values/textAppearance_styles.xml
similarity index 100%
rename from glance/glance-appwidget/src/androidMain/res/values/textAppearance_styles.xml
rename to glance/glance-appwidget/src/main/res/values/textAppearance_styles.xml
diff --git a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/ActionCallbackBroadcastReceiverTest.kt b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/ActionCallbackBroadcastReceiverTest.kt
index 8cb1cda..310431e 100644
--- a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/ActionCallbackBroadcastReceiverTest.kt
+++ b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/ActionCallbackBroadcastReceiverTest.kt
@@ -26,10 +26,10 @@
import androidx.glance.appwidget.action.createUniqueUri
import androidx.test.core.app.ApplicationProvider
import com.google.common.truth.Truth.assertThat
+import java.io.Serializable
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
-import java.io.Serializable
@RunWith(RobolectricTestRunner::class)
class ActionCallbackBroadcastReceiverTest {
diff --git a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/ApplyDimensionModifierTest.kt b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/ApplyDimensionModifierTest.kt
index 46c84a9..378cecf 100644
--- a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/ApplyDimensionModifierTest.kt
+++ b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/ApplyDimensionModifierTest.kt
@@ -43,6 +43,8 @@
import androidx.glance.text.Text
import androidx.test.core.app.ApplicationProvider
import com.google.common.truth.Truth.assertThat
+import kotlin.test.assertIs
+import kotlin.test.assertNotNull
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runTest
@@ -50,8 +52,6 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
-import kotlin.test.assertIs
-import kotlin.test.assertNotNull
@OptIn(ExperimentalCoroutinesApi::class)
@RunWith(RobolectricTestRunner::class)
diff --git a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/SizeBoxTest.kt b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/SizeBoxTest.kt
index ba438eb..d72e0f2 100644
--- a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/SizeBoxTest.kt
+++ b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/SizeBoxTest.kt
@@ -35,236 +35,241 @@
@OptIn(ExperimentalCoroutinesApi::class)
@RunWith(RobolectricTestRunner::class)
class SizeBoxTest {
- private val minSize = DpSize(50.dp, 100.dp)
+ private val minAppWidgetSize = DpSize(50.dp, 100.dp)
@Test
- fun sizeModeSingle() = runTest {
+ fun sizeModeSingle_usesMinAppWidgetSize() = runTest {
val root = runTestingComposition {
- ForEachSize(SizeMode.Single, minSize) {
+ ForEachSize(SizeMode.Single, minAppWidgetSize) {
val size = LocalSize.current
- Text("${size.width} x ${size.height}")
+ Text(size.toSizeString())
}
}
+
val sizeBox = assertIs<EmittableSizeBox>(root.children.single())
- assertThat(sizeBox.size).isEqualTo(minSize)
+ assertThat(sizeBox.size).isEqualTo(minAppWidgetSize)
assertThat(sizeBox.sizeMode).isEqualTo(SizeMode.Single)
val text = assertIs<EmittableText>(sizeBox.children.single())
- assertThat(text.text).isEqualTo("50.0.dp x 100.0.dp")
+ assertThat(text.text).isEqualTo(minAppWidgetSize.toSizeString())
}
- @Config(sdk = [30])
+ @Config(maxSdk = 30)
@Test
- fun sizeModeExactPreS() = runTest {
- val options = optionsBundleOf(
- listOf(
- DpSize(100.dp, 50.dp),
- DpSize(50.dp, 100.dp),
- DpSize(75.dp, 75.dp),
- )
+ fun sizeModeExact_onlyMinMaxSizes_usesOrientationSizesDerivedFromMinMax() = runTest {
+ val displaySizes = listOf(
+ DpSize(100.dp, 50.dp),
+ DpSize(50.dp, 100.dp),
+ DpSize(75.dp, 75.dp),
)
+ // Following utility function populates only
+ // AppWidgetManager.OPTION_APPWIDGET_{MIN,MAX}_{HEIGHT,WIDTH} to mimic Pre-S behavior, so
+ // actual possible sizes aren't available.
+ val options = optionsBundleOf(displaySizes)
+
val root = runTestingComposition {
CompositionLocalProvider(LocalAppWidgetOptions provides options) {
- ForEachSize(SizeMode.Exact, minSize) {
+ ForEachSize(SizeMode.Exact, minAppWidgetSize) {
val size = LocalSize.current
- Text("${size.width} x ${size.height}")
+ Text(size.toSizeString())
}
}
}
+
// On Pre-S, since AppWidgetManager.OPTION_APPWIDGET_SIZES isn't available, we use
// AppWidgetManager.OPTION_APPWIDGET_{MIN,MAX}_{HEIGHT,WIDTH} to find the landscape and
// portrait sizes.
assertThat(root.children).hasSize(2)
+ val maxWidthMinHeightSize = DpSize(100.dp, 50.dp) // Landscape
val sizeBox1 = assertIs<EmittableSizeBox>(root.children[0])
- assertThat(sizeBox1.size).isEqualTo(DpSize(100.dp, 50.dp))
+ assertThat(sizeBox1.size).isEqualTo(maxWidthMinHeightSize)
assertThat(sizeBox1.sizeMode).isEqualTo(SizeMode.Exact)
val text1 = assertIs<EmittableText>(sizeBox1.children.single())
- assertThat(text1.text).isEqualTo("100.0.dp x 50.0.dp")
+ assertThat(text1.text).isEqualTo(maxWidthMinHeightSize.toSizeString())
+ val minWidthMaxHeightSize = DpSize(50.dp, 100.dp) // Portrait
val sizeBox2 = assertIs<EmittableSizeBox>(root.children[1])
- assertThat(sizeBox2.size).isEqualTo(DpSize(50.dp, 100.dp))
+ assertThat(sizeBox2.size).isEqualTo(minWidthMaxHeightSize)
assertThat(sizeBox2.sizeMode).isEqualTo(SizeMode.Exact)
val text2 = assertIs<EmittableText>(sizeBox2.children.single())
- assertThat(text2.text).isEqualTo("50.0.dp x 100.0.dp")
+ assertThat(text2.text).isEqualTo(minWidthMaxHeightSize.toSizeString())
}
- @Config(sdk = [31])
+ @Config(minSdk = 31)
@Test
- fun sizeModeExactS() = runTest {
- val options = optionsBundleOf(
- listOf(
- DpSize(100.dp, 50.dp),
+ fun sizeModeExact_possibleSizesAvailable_usesEachDistinctPossibleSize() {
+ runTest {
+ val displaySizes = listOf(
+ DpSize(100.dp, 50.dp), // duplicate for testing
DpSize(50.dp, 100.dp),
DpSize(75.dp, 75.dp),
+ DpSize(100.dp, 50.dp),
)
- )
- val root = runTestingComposition {
- CompositionLocalProvider(LocalAppWidgetOptions provides options) {
- ForEachSize(SizeMode.Exact, minSize) {
- val size = LocalSize.current
- Text("${size.width} x ${size.height}")
+ val distinctDisplaySizes = displaySizes.distinct() // distinct maintains order.
+ // In S+, following utility function populates
+ // AppWidgetManager.OPTION_APPWIDGET_OPTIONS with given sizes.
+ val options = optionsBundleOf(displaySizes)
+
+ val root = runTestingComposition {
+ CompositionLocalProvider(LocalAppWidgetOptions provides options) {
+ ForEachSize(SizeMode.Exact, minAppWidgetSize) {
+ val size = LocalSize.current
+ Text(size.toSizeString())
+ }
}
}
+
+ // On S+, AppWidgetManager.OPTION_APPWIDGET_SIZES is available so we create a SizeBox
+ // for each size.
+ assertThat(root.children).hasSize(distinctDisplaySizes.size)
+ distinctDisplaySizes.forEachIndexed { index, dpSize ->
+ val sizeBox = assertIs<EmittableSizeBox>(root.children[index])
+ assertThat(sizeBox.size).isEqualTo(dpSize)
+ assertThat(sizeBox.sizeMode).isEqualTo(SizeMode.Exact)
+ val text = assertIs<EmittableText>(sizeBox.children.single())
+ assertThat(text.text).isEqualTo(dpSize.toSizeString())
+ }
}
- // On S+, AppWidgetManager.OPTION_APPWIDGET_SIZES is available so we create a SizeBox for
- // each size.
- assertThat(root.children).hasSize(3)
- val sizeBox1 = assertIs<EmittableSizeBox>(root.children[0])
- assertThat(sizeBox1.size).isEqualTo(DpSize(100.dp, 50.dp))
- assertThat(sizeBox1.sizeMode).isEqualTo(SizeMode.Exact)
- val text1 = assertIs<EmittableText>(sizeBox1.children.single())
- assertThat(text1.text).isEqualTo("100.0.dp x 50.0.dp")
-
- val sizeBox2 = assertIs<EmittableSizeBox>(root.children[1])
- assertThat(sizeBox2.size).isEqualTo(DpSize(50.dp, 100.dp))
- assertThat(sizeBox2.sizeMode).isEqualTo(SizeMode.Exact)
- val text2 = assertIs<EmittableText>(sizeBox2.children.single())
- assertThat(text2.text).isEqualTo("50.0.dp x 100.0.dp")
-
- val sizeBox3 = assertIs<EmittableSizeBox>(root.children[2])
- assertThat(sizeBox3.size).isEqualTo(DpSize(75.dp, 75.dp))
- assertThat(sizeBox3.sizeMode).isEqualTo(SizeMode.Exact)
- val text3 = assertIs<EmittableText>(sizeBox3.children.single())
- assertThat(text3.text).isEqualTo("75.0.dp x 75.0.dp")
}
@Test
- fun sizeModeExactEmptySizes() = runTest {
+ fun sizeModeExact_emptySizes_usesMinAppWidgetSize() = runTest {
val options = Bundle()
+
val root = runTestingComposition {
CompositionLocalProvider(LocalAppWidgetOptions provides options) {
- ForEachSize(SizeMode.Exact, minSize) {
+ ForEachSize(SizeMode.Exact, minAppWidgetSize) {
val size = LocalSize.current
- Text("${size.width} x ${size.height}")
+ Text(size.toSizeString())
}
}
}
+
// When no sizes are available, a single SizeBox for minSize should be created
assertThat(root.children).hasSize(1)
- val sizeBox1 = assertIs<EmittableSizeBox>(root.children[0])
- assertThat(sizeBox1.size).isEqualTo(minSize)
- assertThat(sizeBox1.sizeMode).isEqualTo(SizeMode.Exact)
- val text1 = assertIs<EmittableText>(sizeBox1.children.single())
- assertThat(text1.text).isEqualTo("50.0.dp x 100.0.dp")
+ val sizeBox = assertIs<EmittableSizeBox>(root.children[0])
+ assertThat(sizeBox.size).isEqualTo(minAppWidgetSize)
+ assertThat(sizeBox.sizeMode).isEqualTo(SizeMode.Exact)
+ val text = assertIs<EmittableText>(sizeBox.children.single())
+ assertThat(text.text).isEqualTo(minAppWidgetSize.toSizeString())
}
- @Config(sdk = [30])
+ @Config(maxSdk = 30)
@Test
- fun sizeModeResponsivePreS() = runTest {
- val options = optionsBundleOf(
- listOf(
+ fun sizeModeResponsive_onlyMinMaxSizes_usesBestFitsFromInputResponsiveSizes() {
+ runTest {
+ val displaySizes = listOf(
DpSize(100.dp, 50.dp),
DpSize(50.dp, 100.dp),
DpSize(75.dp, 75.dp),
)
- )
- val sizeMode = SizeMode.Responsive(
- setOf(
+ val responsiveSizes = setOf(
DpSize(99.dp, 49.dp),
DpSize(49.dp, 99.dp),
DpSize(75.dp, 75.dp),
)
- )
- val root = runTestingComposition {
- CompositionLocalProvider(LocalAppWidgetOptions provides options) {
- ForEachSize(sizeMode, minSize) {
- val size = LocalSize.current
- Text("${size.width} x ${size.height}")
+ // Following utility function populates only
+ // AppWidgetManager.OPTION_APPWIDGET_{MIN,MAX}_{HEIGHT,WIDTH} to mimic Pre-S behavior,
+ // so actual possible sizes aren't available.
+ val options = optionsBundleOf(displaySizes)
+ val sizeMode = SizeMode.Responsive(responsiveSizes)
+
+ val root = runTestingComposition {
+ CompositionLocalProvider(LocalAppWidgetOptions provides options) {
+ ForEachSize(sizeMode, minAppWidgetSize) {
+ val size = LocalSize.current
+ Text(size.toSizeString())
+ }
}
}
- }
- // On Pre-S, we extract orientation sizes from
- // AppWidgetManager.OPTION_APPWIDGET_{MIN,MAX}_{HEIGHT,WIDTH} to find the landscape and
- // portrait sizes, then find which responsive size fits best for each.
- assertThat(root.children).hasSize(2)
- val sizeBox1 = assertIs<EmittableSizeBox>(root.children[0])
- assertThat(sizeBox1.size).isEqualTo(DpSize(99.dp, 49.dp))
- assertThat(sizeBox1.sizeMode).isEqualTo(sizeMode)
- val text1 = assertIs<EmittableText>(sizeBox1.children.single())
- assertThat(text1.text).isEqualTo("99.0.dp x 49.0.dp")
- val sizeBox2 = assertIs<EmittableSizeBox>(root.children[1])
- assertThat(sizeBox2.size).isEqualTo(DpSize(49.dp, 99.dp))
- assertThat(sizeBox2.sizeMode).isEqualTo(sizeMode)
- val text2 = assertIs<EmittableText>(sizeBox2.children.single())
- assertThat(text2.text).isEqualTo("49.0.dp x 99.0.dp")
+ // On Pre-S, we extract orientation sizes from
+ // AppWidgetManager.OPTION_APPWIDGET_{MIN,MAX}_{HEIGHT,WIDTH} to find the landscape and
+ // portrait sizes, then find which responsive size fits best for each.
+ assertThat(root.children).hasSize(2)
+ val bestLandscapeFit = DpSize(99.dp, 49.dp)
+ val sizeBox1 = assertIs<EmittableSizeBox>(root.children[0])
+ assertThat(sizeBox1.size).isEqualTo(bestLandscapeFit)
+ assertThat(sizeBox1.sizeMode).isEqualTo(sizeMode)
+ val text1 = assertIs<EmittableText>(sizeBox1.children.single())
+ assertThat(text1.text).isEqualTo(bestLandscapeFit.toSizeString())
+
+ val bestPortraitFit = DpSize(49.dp, 99.dp)
+ val sizeBox2 = assertIs<EmittableSizeBox>(root.children[1])
+ assertThat(sizeBox2.size).isEqualTo(bestPortraitFit)
+ assertThat(sizeBox2.sizeMode).isEqualTo(sizeMode)
+ val text2 = assertIs<EmittableText>(sizeBox2.children.single())
+ assertThat(text2.text).isEqualTo(bestPortraitFit.toSizeString())
+ }
}
- @Config(sdk = [30])
+ @Config(maxSdk = 30)
@Test
- fun sizeModeResponsiveUseSmallestSize() = runTest {
- val options = optionsBundleOf(
- listOf(
- DpSize(100.dp, 50.dp),
- DpSize(50.dp, 100.dp),
- )
+ fun responsive_onlyMinMaxSizesAndNoFit_usesMinFromInputResponsiveSizes() = runTest {
+ val displaySizes = listOf(
+ DpSize(100.dp, 50.dp),
+ DpSize(50.dp, 100.dp),
)
- val sizeMode = SizeMode.Responsive(
- setOf(
- DpSize(200.dp, 200.dp),
- DpSize(300.dp, 300.dp),
- DpSize(75.dp, 75.dp),
- )
+ val responsiveSizes = setOf(
+ DpSize(200.dp, 200.dp),
+ DpSize(300.dp, 300.dp),
+ DpSize(75.dp, 75.dp),
)
+ // Following utility function populates only
+ // AppWidgetManager.OPTION_APPWIDGET_{MIN,MAX}_{HEIGHT,WIDTH} to mimic Pre-S behavior,
+ // so actual possible sizes aren't available.
+ val options = optionsBundleOf(displaySizes)
+ val sizeMode = SizeMode.Responsive(responsiveSizes)
+ val minResponsiveSize = DpSize(75.dp, 75.dp)
+
val root = runTestingComposition {
CompositionLocalProvider(LocalAppWidgetOptions provides options) {
- ForEachSize(sizeMode, minSize) {
+ ForEachSize(sizeMode, minResponsiveSize) {
val size = LocalSize.current
- Text("${size.width} x ${size.height}")
+ Text(size.toSizeString())
}
}
}
+
// On Pre-S, we extract orientation sizes from
// AppWidgetManager.OPTION_APPWIDGET_{MIN,MAX}_{HEIGHT,WIDTH} to find the landscape and
// portrait sizes, then find which responsive size fits best for each. If none fits, then we
- // use the smallest size for both landscape and portrait.
- assertThat(root.children).hasSize(2)
- val sizeBox1 = assertIs<EmittableSizeBox>(root.children[0])
- assertThat(sizeBox1.size).isEqualTo(DpSize(75.dp, 75.dp))
- assertThat(sizeBox1.sizeMode).isEqualTo(sizeMode)
- val text1 = assertIs<EmittableText>(sizeBox1.children.single())
- assertThat(text1.text).isEqualTo("75.0.dp x 75.0.dp")
-
- val sizeBox2 = assertIs<EmittableSizeBox>(root.children[1])
- assertThat(sizeBox2.size).isEqualTo(DpSize(75.dp, 75.dp))
- assertThat(sizeBox2.sizeMode).isEqualTo(sizeMode)
- val text2 = assertIs<EmittableText>(sizeBox2.children.single())
- assertThat(text2.text).isEqualTo("75.0.dp x 75.0.dp")
+ // use the smallest size for both landscape and portrait - and since same size is used for
+ // both, we effectively compose for single size.
+ assertThat(root.children).hasSize(1)
+ val sizeBox = assertIs<EmittableSizeBox>(root.children[0])
+ assertThat(sizeBox.size).isEqualTo(minResponsiveSize)
+ assertThat(sizeBox.sizeMode).isEqualTo(sizeMode)
+ val text = assertIs<EmittableText>(sizeBox.children.single())
+ assertThat(text.text).isEqualTo(minResponsiveSize.toSizeString())
}
- @Config(sdk = [31])
+ @Config(minSdk = 31)
@Test
- fun sizeModeResponsiveS() = runTest {
- val sizeMode = SizeMode.Responsive(
- setOf(
+ fun sizeModeResponsive_usesEachResponsiveInputSize() {
+ runTest {
+ val responsiveSizes = setOf(
DpSize(100.dp, 50.dp),
DpSize(50.dp, 100.dp),
DpSize(75.dp, 75.dp),
)
- )
- val root = runTestingComposition {
- ForEachSize(sizeMode, minSize) {
- val size = LocalSize.current
- Text("${size.width} x ${size.height}")
+ val sizeMode = SizeMode.Responsive(responsiveSizes)
+
+ val root = runTestingComposition {
+ ForEachSize(sizeMode, minAppWidgetSize) {
+ val size = LocalSize.current
+ Text(size.toSizeString())
+ }
+ }
+
+ // On S, we create a SizeBox for each given size.
+ assertThat(root.children).hasSize(responsiveSizes.size)
+ responsiveSizes.forEachIndexed { index, dpSize ->
+ val sizeBox = assertIs<EmittableSizeBox>(root.children[index])
+ assertThat(sizeBox.size).isEqualTo(dpSize)
+ assertThat(sizeBox.sizeMode).isEqualTo(sizeMode)
+ val text = assertIs<EmittableText>(sizeBox.children.single())
+ assertThat(text.text).isEqualTo(dpSize.toSizeString())
}
}
- // On S, we create a SizeBox for each given size.
- assertThat(root.children).hasSize(3)
- val sizeBox1 = assertIs<EmittableSizeBox>(root.children[0])
- assertThat(sizeBox1.size).isEqualTo(DpSize(100.dp, 50.dp))
- assertThat(sizeBox1.sizeMode).isEqualTo(sizeMode)
- val text1 = assertIs<EmittableText>(sizeBox1.children.single())
- assertThat(text1.text).isEqualTo("100.0.dp x 50.0.dp")
-
- val sizeBox2 = assertIs<EmittableSizeBox>(root.children[1])
- assertThat(sizeBox2.size).isEqualTo(DpSize(50.dp, 100.dp))
- assertThat(sizeBox2.sizeMode).isEqualTo(sizeMode)
- val text2 = assertIs<EmittableText>(sizeBox2.children.single())
- assertThat(text2.text).isEqualTo("50.0.dp x 100.0.dp")
-
- val sizeBox3 = assertIs<EmittableSizeBox>(root.children[2])
- assertThat(sizeBox3.size).isEqualTo(DpSize(75.dp, 75.dp))
- assertThat(sizeBox3.sizeMode).isEqualTo(sizeMode)
- val text3 = assertIs<EmittableText>(sizeBox3.children.single())
- assertThat(text3.text).isEqualTo("75.0.dp x 75.0.dp")
}
}
\ No newline at end of file
diff --git a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/TestUtils.kt b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/TestUtils.kt
index 04e1faf..2be2889 100644
--- a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/TestUtils.kt
+++ b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/TestUtils.kt
@@ -42,13 +42,13 @@
import androidx.glance.session.GlobalSnapshotManager
import androidx.test.core.app.ApplicationProvider
import com.google.common.truth.Truth.assertThat
-import kotlinx.coroutines.coroutineScope
-import kotlinx.coroutines.currentCoroutineContext
-import kotlinx.coroutines.launch
import java.util.Locale
import java.util.concurrent.atomic.AtomicBoolean
import kotlin.test.assertIs
+import kotlinx.coroutines.coroutineScope
+import kotlinx.coroutines.currentCoroutineContext
import kotlinx.coroutines.flow.first
+import kotlinx.coroutines.launch
internal suspend fun runTestingComposition(
content: @Composable @GlanceComposable () -> Unit,
diff --git a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/ViewSubject.kt b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/ViewSubject.kt
index d8a66f2..caf58cc 100644
--- a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/ViewSubject.kt
+++ b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/ViewSubject.kt
@@ -34,11 +34,11 @@
import androidx.glance.layout.Alignment
import com.google.common.truth.FailureMetadata
import com.google.common.truth.Subject
-import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertAbout
-import org.robolectric.Shadows.shadowOf
+import com.google.common.truth.Truth.assertThat
import kotlin.test.assertIs
import kotlin.test.assertNotNull
+import org.robolectric.Shadows.shadowOf
internal open class ViewSubject(
metaData: FailureMetadata,
diff --git a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/action/LaunchActivityIntentActionTest.kt b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/action/LaunchActivityIntentActionTest.kt
index acded2e..b07dfcf 100644
--- a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/action/LaunchActivityIntentActionTest.kt
+++ b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/action/LaunchActivityIntentActionTest.kt
@@ -25,11 +25,11 @@
import androidx.glance.findModifier
import androidx.test.core.app.ApplicationProvider
import com.google.common.truth.Truth.assertThat
+import kotlin.test.assertIs
import kotlinx.coroutines.ExperimentalCoroutinesApi
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
-import kotlin.test.assertIs
@OptIn(ExperimentalCoroutinesApi::class)
@RunWith(RobolectricTestRunner::class)
diff --git a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/action/RunCallbackActionTest.kt b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/action/RunCallbackActionTest.kt
index 47f979d..cbc0ff6 100644
--- a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/action/RunCallbackActionTest.kt
+++ b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/action/RunCallbackActionTest.kt
@@ -23,13 +23,13 @@
import androidx.glance.action.ActionParameters
import androidx.glance.action.clickable
import androidx.glance.findModifier
+import kotlin.test.assertIs
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
-import kotlin.test.assertIs
@OptIn(ExperimentalCoroutinesApi::class)
@RunWith(RobolectricTestRunner::class)
diff --git a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/action/SendBroadcastActionTest.kt b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/action/SendBroadcastActionTest.kt
index 061d7ef..303a6d6 100644
--- a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/action/SendBroadcastActionTest.kt
+++ b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/action/SendBroadcastActionTest.kt
@@ -26,11 +26,11 @@
import androidx.glance.findModifier
import androidx.test.core.app.ApplicationProvider
import com.google.common.truth.Truth.assertThat
+import kotlin.test.assertIs
import kotlinx.coroutines.ExperimentalCoroutinesApi
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
-import kotlin.test.assertIs
@OptIn(ExperimentalCoroutinesApi::class)
@RunWith(RobolectricTestRunner::class)
diff --git a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/action/StartServiceActionTest.kt b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/action/StartServiceActionTest.kt
index 431e9f0..a19b0e9 100644
--- a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/action/StartServiceActionTest.kt
+++ b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/action/StartServiceActionTest.kt
@@ -27,11 +27,11 @@
import androidx.glance.findModifier
import androidx.test.core.app.ApplicationProvider
import com.google.common.truth.Truth.assertThat
+import kotlin.test.assertIs
import kotlinx.coroutines.ExperimentalCoroutinesApi
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
-import kotlin.test.assertIs
@OptIn(ExperimentalCoroutinesApi::class)
@RunWith(RobolectricTestRunner::class)
diff --git a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/layout/LazyColumnTest.kt b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/layout/LazyColumnTest.kt
index 7da7812..22c6a6c 100644
--- a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/layout/LazyColumnTest.kt
+++ b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/layout/LazyColumnTest.kt
@@ -28,12 +28,12 @@
import androidx.glance.text.EmittableText
import androidx.glance.text.Text
import com.google.common.truth.Truth.assertThat
+import kotlin.test.assertIs
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
-import kotlin.test.assertIs
@OptIn(ExperimentalCoroutinesApi::class)
class LazyColumnTest {
diff --git a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/layout/LazyVerticalGridTest.kt b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/layout/LazyVerticalGridTest.kt
index 207f899..0e686ff 100644
--- a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/layout/LazyVerticalGridTest.kt
+++ b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/layout/LazyVerticalGridTest.kt
@@ -17,10 +17,11 @@
package androidx.glance.appwidget.layout
import android.annotation.TargetApi
+import androidx.compose.ui.unit.dp
import androidx.glance.appwidget.lazy.EmittableLazyVerticalGrid
import androidx.glance.appwidget.lazy.EmittableLazyVerticalGridListItem
-import androidx.glance.appwidget.lazy.LazyVerticalGrid
import androidx.glance.appwidget.lazy.GridCells
+import androidx.glance.appwidget.lazy.LazyVerticalGrid
import androidx.glance.appwidget.lazy.ReservedItemIdRangeEnd
import androidx.glance.appwidget.lazy.items
import androidx.glance.appwidget.lazy.itemsIndexed
@@ -29,14 +30,13 @@
import androidx.glance.layout.Row
import androidx.glance.text.EmittableText
import androidx.glance.text.Text
-import androidx.compose.ui.unit.dp
import com.google.common.truth.Truth.assertThat
+import kotlin.test.assertIs
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
-import kotlin.test.assertIs
@OptIn(ExperimentalCoroutinesApi::class)
class LazyVerticalGridTest {
diff --git a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/translators/RadioButtonBackportTranslatorTest.kt b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/translators/RadioButtonBackportTranslatorTest.kt
index cddb9bd..cc9f17e 100644
--- a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/translators/RadioButtonBackportTranslatorTest.kt
+++ b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/translators/RadioButtonBackportTranslatorTest.kt
@@ -39,6 +39,7 @@
import androidx.glance.unit.ColorProvider
import androidx.test.core.app.ApplicationProvider
import com.google.common.truth.Truth.assertThat
+import kotlin.test.assertIs
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runTest
@@ -48,7 +49,6 @@
import org.robolectric.RobolectricTestRunner
import org.robolectric.Shadows.shadowOf
import org.robolectric.annotation.Config
-import kotlin.test.assertIs
@Config(minSdk = 23, maxSdk = 30)
@OptIn(ExperimentalCoroutinesApi::class)
diff --git a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/translators/SwitchBackportTranslatorTest.kt b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/translators/SwitchBackportTranslatorTest.kt
index ec11aab..fbb441e 100644
--- a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/translators/SwitchBackportTranslatorTest.kt
+++ b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/translators/SwitchBackportTranslatorTest.kt
@@ -24,13 +24,13 @@
import androidx.glance.GlanceModifier
import androidx.glance.appwidget.ImageViewSubject.Companion.assertThat
import androidx.glance.appwidget.Switch
+import androidx.glance.appwidget.SwitchDefaults
import androidx.glance.appwidget.action.ActionCallback
import androidx.glance.appwidget.action.actionRunCallback
import androidx.glance.appwidget.applyRemoteViews
import androidx.glance.appwidget.configurationContext
import androidx.glance.appwidget.findView
import androidx.glance.appwidget.runAndTranslate
-import androidx.glance.appwidget.SwitchDefaults
import androidx.glance.color.ColorProvider
import androidx.glance.semantics.contentDescription
import androidx.glance.semantics.semantics
diff --git a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/unit/ColorProviderTest.kt b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/unit/ColorProviderTest.kt
index 55f242d..dfe943a 100644
--- a/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/unit/ColorProviderTest.kt
+++ b/glance/glance-appwidget/src/test/kotlin/androidx/glance/appwidget/unit/ColorProviderTest.kt
@@ -18,19 +18,19 @@
import android.content.Context
import androidx.compose.ui.graphics.Color
+import androidx.glance.appwidget.ColorSubject.Companion.assertThat
import androidx.glance.appwidget.test.R
import androidx.glance.appwidget.unit.CheckedUncheckedColorProvider.Companion.createCheckableColorProvider
+import androidx.glance.color.ColorProvider
import androidx.glance.unit.ColorProvider
import androidx.test.core.app.ApplicationProvider
import com.google.common.truth.Truth.assertThat
-import androidx.glance.appwidget.ColorSubject.Companion.assertThat
-import androidx.glance.color.ColorProvider
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.robolectric.annotation.Config
-import org.robolectric.RobolectricTestRunner
import kotlin.test.assertFailsWith
import kotlin.test.assertIs
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.robolectric.RobolectricTestRunner
+import org.robolectric.annotation.Config
@RunWith(RobolectricTestRunner::class)
class ColorProviderTest {
diff --git a/glance/glance-material/api/1.0.0-beta01.txt b/glance/glance-material/api/1.0.0-beta01.txt
index 25d2aeb..3df106d 100644
--- a/glance/glance-material/api/1.0.0-beta01.txt
+++ b/glance/glance-material/api/1.0.0-beta01.txt
@@ -2,8 +2,8 @@
package androidx.glance.material {
public final class MaterialThemesKt {
- method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material.Colors light, androidx.compose.material.Colors dark);
method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material.Colors colors);
+ method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material.Colors light, androidx.compose.material.Colors dark);
}
}
diff --git a/glance/glance-material/api/public_plus_experimental_current.txt b/glance/glance-material/api/1.0.0-beta02.txt
similarity index 99%
rename from glance/glance-material/api/public_plus_experimental_current.txt
rename to glance/glance-material/api/1.0.0-beta02.txt
index 25d2aeb..3df106d 100644
--- a/glance/glance-material/api/public_plus_experimental_current.txt
+++ b/glance/glance-material/api/1.0.0-beta02.txt
@@ -2,8 +2,8 @@
package androidx.glance.material {
public final class MaterialThemesKt {
- method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material.Colors light, androidx.compose.material.Colors dark);
method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material.Colors colors);
+ method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material.Colors light, androidx.compose.material.Colors dark);
}
}
diff --git a/glance/glance-material/api/current.txt b/glance/glance-material/api/current.txt
index 25d2aeb..3df106d 100644
--- a/glance/glance-material/api/current.txt
+++ b/glance/glance-material/api/current.txt
@@ -2,8 +2,8 @@
package androidx.glance.material {
public final class MaterialThemesKt {
- method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material.Colors light, androidx.compose.material.Colors dark);
method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material.Colors colors);
+ method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material.Colors light, androidx.compose.material.Colors dark);
}
}
diff --git a/glance/glance-material/api/public_plus_experimental_1.0.0-beta01.txt b/glance/glance-material/api/public_plus_experimental_1.0.0-beta01.txt
index 25d2aeb..3df106d 100644
--- a/glance/glance-material/api/public_plus_experimental_1.0.0-beta01.txt
+++ b/glance/glance-material/api/public_plus_experimental_1.0.0-beta01.txt
@@ -2,8 +2,8 @@
package androidx.glance.material {
public final class MaterialThemesKt {
- method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material.Colors light, androidx.compose.material.Colors dark);
method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material.Colors colors);
+ method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material.Colors light, androidx.compose.material.Colors dark);
}
}
diff --git a/glance/glance-material/api/res-1.0.0-beta02.txt b/glance/glance-material/api/res-1.0.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/glance/glance-material/api/res-1.0.0-beta02.txt
diff --git a/glance/glance-material/api/restricted_1.0.0-beta01.txt b/glance/glance-material/api/restricted_1.0.0-beta01.txt
index 25d2aeb..3df106d 100644
--- a/glance/glance-material/api/restricted_1.0.0-beta01.txt
+++ b/glance/glance-material/api/restricted_1.0.0-beta01.txt
@@ -2,8 +2,8 @@
package androidx.glance.material {
public final class MaterialThemesKt {
- method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material.Colors light, androidx.compose.material.Colors dark);
method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material.Colors colors);
+ method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material.Colors light, androidx.compose.material.Colors dark);
}
}
diff --git a/glance/glance-material/api/public_plus_experimental_current.txt b/glance/glance-material/api/restricted_1.0.0-beta02.txt
similarity index 99%
copy from glance/glance-material/api/public_plus_experimental_current.txt
copy to glance/glance-material/api/restricted_1.0.0-beta02.txt
index 25d2aeb..3df106d 100644
--- a/glance/glance-material/api/public_plus_experimental_current.txt
+++ b/glance/glance-material/api/restricted_1.0.0-beta02.txt
@@ -2,8 +2,8 @@
package androidx.glance.material {
public final class MaterialThemesKt {
- method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material.Colors light, androidx.compose.material.Colors dark);
method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material.Colors colors);
+ method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material.Colors light, androidx.compose.material.Colors dark);
}
}
diff --git a/glance/glance-material/api/restricted_current.txt b/glance/glance-material/api/restricted_current.txt
index 25d2aeb..3df106d 100644
--- a/glance/glance-material/api/restricted_current.txt
+++ b/glance/glance-material/api/restricted_current.txt
@@ -2,8 +2,8 @@
package androidx.glance.material {
public final class MaterialThemesKt {
- method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material.Colors light, androidx.compose.material.Colors dark);
method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material.Colors colors);
+ method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material.Colors light, androidx.compose.material.Colors dark);
}
}
diff --git a/glance/glance-material/build.gradle b/glance/glance-material/build.gradle
index 5a02590..9c75b74 100644
--- a/glance/glance-material/build.gradle
+++ b/glance/glance-material/build.gradle
@@ -1,15 +1,12 @@
-import androidx.build.AndroidXComposePlugin
import androidx.build.LibraryType
plugins {
id("AndroidXComposePlugin")
id("AndroidXPlugin")
+ id("org.jetbrains.kotlin.android")
id("com.android.library")
}
-// Disable multi-platform; this will only be used on Android.
-AndroidXComposePlugin.applyAndConfigureKotlinPlugin(project, /* isMultiplatformEnabled= */false)
-
dependencies {
implementation(libs.kotlinStdlib)
api("androidx.annotation:annotation:1.4.0")
@@ -26,7 +23,7 @@
}
androidx {
- name = "Android Glance Material"
+ name = "Glance Material"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2022"
description = "Glance Material 2 integration library." +
diff --git a/glance/glance-material/src/androidMain/kotlin/androidx/glance/material/MaterialThemes.kt b/glance/glance-material/src/main/java/androidx/glance/material/MaterialThemes.kt
similarity index 100%
rename from glance/glance-material/src/androidMain/kotlin/androidx/glance/material/MaterialThemes.kt
rename to glance/glance-material/src/main/java/androidx/glance/material/MaterialThemes.kt
diff --git a/glance/glance-material3/api/1.0.0-beta01.txt b/glance/glance-material3/api/1.0.0-beta01.txt
index 8ff1aa6..36479f9 100644
--- a/glance/glance-material3/api/1.0.0-beta01.txt
+++ b/glance/glance-material3/api/1.0.0-beta01.txt
@@ -2,8 +2,8 @@
package androidx.glance.material3 {
public final class Material3ThemesKt {
- method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material3.ColorScheme light, androidx.compose.material3.ColorScheme dark);
method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material3.ColorScheme scheme);
+ method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material3.ColorScheme light, androidx.compose.material3.ColorScheme dark);
}
}
diff --git a/glance/glance-material3/api/public_plus_experimental_current.txt b/glance/glance-material3/api/1.0.0-beta02.txt
similarity index 99%
rename from glance/glance-material3/api/public_plus_experimental_current.txt
rename to glance/glance-material3/api/1.0.0-beta02.txt
index 8ff1aa6..36479f9 100644
--- a/glance/glance-material3/api/public_plus_experimental_current.txt
+++ b/glance/glance-material3/api/1.0.0-beta02.txt
@@ -2,8 +2,8 @@
package androidx.glance.material3 {
public final class Material3ThemesKt {
- method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material3.ColorScheme light, androidx.compose.material3.ColorScheme dark);
method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material3.ColorScheme scheme);
+ method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material3.ColorScheme light, androidx.compose.material3.ColorScheme dark);
}
}
diff --git a/glance/glance-material3/api/current.txt b/glance/glance-material3/api/current.txt
index 8ff1aa6..36479f9 100644
--- a/glance/glance-material3/api/current.txt
+++ b/glance/glance-material3/api/current.txt
@@ -2,8 +2,8 @@
package androidx.glance.material3 {
public final class Material3ThemesKt {
- method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material3.ColorScheme light, androidx.compose.material3.ColorScheme dark);
method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material3.ColorScheme scheme);
+ method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material3.ColorScheme light, androidx.compose.material3.ColorScheme dark);
}
}
diff --git a/glance/glance-material3/api/public_plus_experimental_1.0.0-beta01.txt b/glance/glance-material3/api/public_plus_experimental_1.0.0-beta01.txt
index 8ff1aa6..36479f9 100644
--- a/glance/glance-material3/api/public_plus_experimental_1.0.0-beta01.txt
+++ b/glance/glance-material3/api/public_plus_experimental_1.0.0-beta01.txt
@@ -2,8 +2,8 @@
package androidx.glance.material3 {
public final class Material3ThemesKt {
- method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material3.ColorScheme light, androidx.compose.material3.ColorScheme dark);
method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material3.ColorScheme scheme);
+ method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material3.ColorScheme light, androidx.compose.material3.ColorScheme dark);
}
}
diff --git a/glance/glance-material3/api/res-1.0.0-beta02.txt b/glance/glance-material3/api/res-1.0.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/glance/glance-material3/api/res-1.0.0-beta02.txt
diff --git a/glance/glance-material3/api/restricted_1.0.0-beta01.txt b/glance/glance-material3/api/restricted_1.0.0-beta01.txt
index 8ff1aa6..36479f9 100644
--- a/glance/glance-material3/api/restricted_1.0.0-beta01.txt
+++ b/glance/glance-material3/api/restricted_1.0.0-beta01.txt
@@ -2,8 +2,8 @@
package androidx.glance.material3 {
public final class Material3ThemesKt {
- method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material3.ColorScheme light, androidx.compose.material3.ColorScheme dark);
method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material3.ColorScheme scheme);
+ method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material3.ColorScheme light, androidx.compose.material3.ColorScheme dark);
}
}
diff --git a/glance/glance-material3/api/public_plus_experimental_current.txt b/glance/glance-material3/api/restricted_1.0.0-beta02.txt
similarity index 99%
copy from glance/glance-material3/api/public_plus_experimental_current.txt
copy to glance/glance-material3/api/restricted_1.0.0-beta02.txt
index 8ff1aa6..36479f9 100644
--- a/glance/glance-material3/api/public_plus_experimental_current.txt
+++ b/glance/glance-material3/api/restricted_1.0.0-beta02.txt
@@ -2,8 +2,8 @@
package androidx.glance.material3 {
public final class Material3ThemesKt {
- method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material3.ColorScheme light, androidx.compose.material3.ColorScheme dark);
method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material3.ColorScheme scheme);
+ method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material3.ColorScheme light, androidx.compose.material3.ColorScheme dark);
}
}
diff --git a/glance/glance-material3/api/restricted_current.txt b/glance/glance-material3/api/restricted_current.txt
index 8ff1aa6..36479f9 100644
--- a/glance/glance-material3/api/restricted_current.txt
+++ b/glance/glance-material3/api/restricted_current.txt
@@ -2,8 +2,8 @@
package androidx.glance.material3 {
public final class Material3ThemesKt {
- method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material3.ColorScheme light, androidx.compose.material3.ColorScheme dark);
method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material3.ColorScheme scheme);
+ method public static androidx.glance.color.ColorProviders ColorProviders(androidx.compose.material3.ColorScheme light, androidx.compose.material3.ColorScheme dark);
}
}
diff --git a/glance/glance-material3/build.gradle b/glance/glance-material3/build.gradle
index 4177903..fbd965c 100644
--- a/glance/glance-material3/build.gradle
+++ b/glance/glance-material3/build.gradle
@@ -1,15 +1,12 @@
-import androidx.build.AndroidXComposePlugin
import androidx.build.LibraryType
plugins {
id("AndroidXComposePlugin")
id("AndroidXPlugin")
+ id("org.jetbrains.kotlin.android")
id("com.android.library")
}
-// Disable multi-platform; this will only be used on Android.
-AndroidXComposePlugin.applyAndConfigureKotlinPlugin(project, /* isMultiplatformEnabled= */false)
-
dependencies {
implementation(libs.kotlinStdlib)
api("androidx.annotation:annotation:1.4.0")
@@ -26,7 +23,7 @@
}
androidx {
- name = "Android Glance Material"
+ name = "Glance Material"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2022"
description = "Glance Material integration library." +
diff --git a/glance/glance-material3/src/androidMain/kotlin/androidx/glance/material3/Material3Themes.kt b/glance/glance-material3/src/main/java/androidx/glance/material3/Material3Themes.kt
similarity index 100%
rename from glance/glance-material3/src/androidMain/kotlin/androidx/glance/material3/Material3Themes.kt
rename to glance/glance-material3/src/main/java/androidx/glance/material3/Material3Themes.kt
diff --git a/glance/glance-preview/api/current.txt b/glance/glance-preview/api/current.txt
index e6f50d0..1fc4543 100644
--- a/glance/glance-preview/api/current.txt
+++ b/glance/glance-preview/api/current.txt
@@ -1 +1,23 @@
// Signature format: 4.0
+package androidx.glance.preview {
+
+ @kotlin.RequiresOptIn(message="This API is experimental and is likely to change in the future.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalGlancePreviewApi {
+ }
+
+ @androidx.glance.preview.ExperimentalGlancePreviewApi @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface GlancePreview {
+ method public abstract String surface();
+ property public abstract String surface;
+ }
+
+ @androidx.glance.preview.ExperimentalGlancePreviewApi @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public static @interface GlancePreview.Container {
+ method public abstract androidx.glance.preview.GlancePreview[] value();
+ }
+
+ @androidx.glance.preview.ExperimentalGlancePreviewApi public final class Surfaces {
+ field public static final String APP_WIDGET = "AppWidget";
+ field public static final androidx.glance.preview.Surfaces INSTANCE;
+ field public static final String TILE = "Tile";
+ }
+
+}
+
diff --git a/glance/glance-preview/api/public_plus_experimental_current.txt b/glance/glance-preview/api/public_plus_experimental_current.txt
deleted file mode 100644
index 1fc4543..0000000
--- a/glance/glance-preview/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-// Signature format: 4.0
-package androidx.glance.preview {
-
- @kotlin.RequiresOptIn(message="This API is experimental and is likely to change in the future.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalGlancePreviewApi {
- }
-
- @androidx.glance.preview.ExperimentalGlancePreviewApi @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface GlancePreview {
- method public abstract String surface();
- property public abstract String surface;
- }
-
- @androidx.glance.preview.ExperimentalGlancePreviewApi @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public static @interface GlancePreview.Container {
- method public abstract androidx.glance.preview.GlancePreview[] value();
- }
-
- @androidx.glance.preview.ExperimentalGlancePreviewApi public final class Surfaces {
- field public static final String APP_WIDGET = "AppWidget";
- field public static final androidx.glance.preview.Surfaces INSTANCE;
- field public static final String TILE = "Tile";
- }
-
-}
-
diff --git a/glance/glance-preview/api/restricted_current.txt b/glance/glance-preview/api/restricted_current.txt
index e6f50d0..1fc4543 100644
--- a/glance/glance-preview/api/restricted_current.txt
+++ b/glance/glance-preview/api/restricted_current.txt
@@ -1 +1,23 @@
// Signature format: 4.0
+package androidx.glance.preview {
+
+ @kotlin.RequiresOptIn(message="This API is experimental and is likely to change in the future.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalGlancePreviewApi {
+ }
+
+ @androidx.glance.preview.ExperimentalGlancePreviewApi @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface GlancePreview {
+ method public abstract String surface();
+ property public abstract String surface;
+ }
+
+ @androidx.glance.preview.ExperimentalGlancePreviewApi @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public static @interface GlancePreview.Container {
+ method public abstract androidx.glance.preview.GlancePreview[] value();
+ }
+
+ @androidx.glance.preview.ExperimentalGlancePreviewApi public final class Surfaces {
+ field public static final String APP_WIDGET = "AppWidget";
+ field public static final androidx.glance.preview.Surfaces INSTANCE;
+ field public static final String TILE = "Tile";
+ }
+
+}
+
diff --git a/glance/glance-preview/build.gradle b/glance/glance-preview/build.gradle
index 844dcee..f6be751 100644
--- a/glance/glance-preview/build.gradle
+++ b/glance/glance-preview/build.gradle
@@ -1,15 +1,12 @@
-import androidx.build.AndroidXComposePlugin
import androidx.build.LibraryType
plugins {
id("AndroidXComposePlugin")
id("AndroidXPlugin")
+ id("org.jetbrains.kotlin.android")
id("com.android.library")
}
-// Disable multi-platform; this will only be used on Android.
-AndroidXComposePlugin.applyAndConfigureKotlinPlugin(project, /* isMultiplatformEnabled= */false)
-
dependencies {
implementation(libs.kotlinStdlib)
api("androidx.annotation:annotation:1.4.0")
@@ -24,7 +21,7 @@
}
androidx {
- name = "Android Glance Preview"
+ name = "Glance Preview"
type = LibraryType.PUBLISHED_LIBRARY
mavenVersion = LibraryVersions.GLANCE_PREVIEW
inceptionYear = "2022"
diff --git a/glance/glance-preview/src/androidMain/kotlin/androidx/glance/preview/ExperimentalGlancePreviewApi.kt b/glance/glance-preview/src/main/java/androidx/glance/preview/ExperimentalGlancePreviewApi.kt
similarity index 100%
rename from glance/glance-preview/src/androidMain/kotlin/androidx/glance/preview/ExperimentalGlancePreviewApi.kt
rename to glance/glance-preview/src/main/java/androidx/glance/preview/ExperimentalGlancePreviewApi.kt
diff --git a/glance/glance-preview/src/androidMain/kotlin/androidx/glance/preview/GlancePreview.kt b/glance/glance-preview/src/main/java/androidx/glance/preview/GlancePreview.kt
similarity index 100%
rename from glance/glance-preview/src/androidMain/kotlin/androidx/glance/preview/GlancePreview.kt
rename to glance/glance-preview/src/main/java/androidx/glance/preview/GlancePreview.kt
diff --git a/glance/glance-preview/src/androidMain/kotlin/androidx/glance/preview/Surface.kt b/glance/glance-preview/src/main/java/androidx/glance/preview/Surface.kt
similarity index 100%
rename from glance/glance-preview/src/androidMain/kotlin/androidx/glance/preview/Surface.kt
rename to glance/glance-preview/src/main/java/androidx/glance/preview/Surface.kt
diff --git a/glance/glance-template/api/public_plus_experimental_current.txt b/glance/glance-template/api/public_plus_experimental_current.txt
deleted file mode 100644
index 98082dc..0000000
--- a/glance/glance-template/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,256 +0,0 @@
-// Signature format: 4.0
-package androidx.glance.template {
-
- public final class ActionBlock {
- ctor public ActionBlock(optional java.util.List<? extends androidx.glance.template.TemplateButton> actionButtons, optional int type);
- method public java.util.List<androidx.glance.template.TemplateButton> getActionButtons();
- method public int getType();
- property public final java.util.List<androidx.glance.template.TemplateButton> actionButtons;
- property public final int type;
- }
-
- @kotlin.jvm.JvmInline public final value class AspectRatio {
- field public static final androidx.glance.template.AspectRatio.Companion Companion;
- }
-
- public static final class AspectRatio.Companion {
- method public int getRatio16x9();
- method public int getRatio1x1();
- method public int getRatio2x3();
- property public final int Ratio16x9;
- property public final int Ratio1x1;
- property public final int Ratio2x3;
- }
-
- @kotlin.jvm.JvmInline public final value class ButtonType {
- field public static final androidx.glance.template.ButtonType.Companion Companion;
- }
-
- public static final class ButtonType.Companion {
- method public int getFab();
- method public int getIcon();
- method public int getText();
- method public int getTextIcon();
- property public final int Fab;
- property public final int Icon;
- property public final int Text;
- property public final int TextIcon;
- }
-
- public final class CompositionLocalsKt {
- method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.glance.template.TemplateMode> getLocalTemplateMode();
- property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.glance.template.TemplateMode> LocalTemplateMode;
- }
-
- public final class FreeformTemplateData {
- ctor public FreeformTemplateData(androidx.glance.unit.ColorProvider backgroundColor, androidx.glance.template.TemplateImageWithDescription headerIcon, androidx.glance.template.TemplateImageButton? actionIcon, optional androidx.glance.template.TemplateText? header, optional androidx.glance.template.TemplateText? title, optional androidx.glance.template.TemplateText? subtitle, optional androidx.glance.ImageProvider? backgroundImage);
- method public androidx.glance.template.TemplateImageButton? getActionIcon();
- method public androidx.glance.unit.ColorProvider getBackgroundColor();
- method public androidx.glance.ImageProvider? getBackgroundImage();
- method public androidx.glance.template.TemplateText? getHeader();
- method public androidx.glance.template.TemplateImageWithDescription getHeaderIcon();
- method public androidx.glance.template.TemplateText? getSubtitle();
- method public androidx.glance.template.TemplateText? getTitle();
- property public final androidx.glance.template.TemplateImageButton? actionIcon;
- property public final androidx.glance.unit.ColorProvider backgroundColor;
- property public final androidx.glance.ImageProvider? backgroundImage;
- property public final androidx.glance.template.TemplateText? header;
- property public final androidx.glance.template.TemplateImageWithDescription headerIcon;
- property public final androidx.glance.template.TemplateText? subtitle;
- property public final androidx.glance.template.TemplateText? title;
- }
-
- public final class FreeformTemplateLayoutsKt {
- method @androidx.compose.runtime.Composable public static void FreeformTemplate(androidx.glance.template.FreeformTemplateData data);
- }
-
- public final class GalleryTemplateData {
- ctor public GalleryTemplateData(androidx.glance.template.TextBlock mainTextBlock, androidx.glance.template.ImageBlock mainImageBlock, androidx.glance.template.ImageBlock galleryImageBlock, optional androidx.glance.template.HeaderBlock? header, optional androidx.glance.template.ActionBlock? mainActionBlock);
- method public androidx.glance.template.ImageBlock getGalleryImageBlock();
- method public androidx.glance.template.HeaderBlock? getHeader();
- method public androidx.glance.template.ActionBlock? getMainActionBlock();
- method public androidx.glance.template.ImageBlock getMainImageBlock();
- method public androidx.glance.template.TextBlock getMainTextBlock();
- property public final androidx.glance.template.ImageBlock galleryImageBlock;
- property public final androidx.glance.template.HeaderBlock? header;
- property public final androidx.glance.template.ActionBlock? mainActionBlock;
- property public final androidx.glance.template.ImageBlock mainImageBlock;
- property public final androidx.glance.template.TextBlock mainTextBlock;
- }
-
- public final class GalleryTemplateLayoutsKt {
- method @androidx.compose.runtime.Composable public static void GalleryTemplate(androidx.glance.template.GalleryTemplateData data);
- }
-
- public abstract class GlanceTemplateAppWidget extends androidx.glance.appwidget.GlanceAppWidget {
- ctor public GlanceTemplateAppWidget();
- method @androidx.compose.runtime.Composable @androidx.glance.GlanceComposable public abstract void TemplateContent();
- method public final suspend Object? provideGlance(android.content.Context context, androidx.glance.GlanceId id, kotlin.coroutines.Continuation<?>);
- property public androidx.glance.appwidget.SizeMode sizeMode;
- property public androidx.glance.state.GlanceStateDefinition<?>? stateDefinition;
- field public static final androidx.glance.template.GlanceTemplateAppWidget.Companion Companion;
- }
-
- public static final class GlanceTemplateAppWidget.Companion {
- }
-
- public final class HeaderBlock {
- ctor public HeaderBlock(androidx.glance.template.TemplateText text, optional androidx.glance.template.TemplateImageWithDescription? icon);
- method public androidx.glance.template.TemplateImageWithDescription? getIcon();
- method public androidx.glance.template.TemplateText getText();
- property public final androidx.glance.template.TemplateImageWithDescription? icon;
- property public final androidx.glance.template.TemplateText text;
- }
-
- public final class ImageBlock {
- ctor public ImageBlock(optional java.util.List<androidx.glance.template.TemplateImageWithDescription> images, optional int aspectRatio, optional int size, optional @IntRange(from=0L) int priority);
- method public int getAspectRatio();
- method public java.util.List<androidx.glance.template.TemplateImageWithDescription> getImages();
- method public int getPriority();
- method public int getSize();
- property public final int aspectRatio;
- property public final java.util.List<androidx.glance.template.TemplateImageWithDescription> images;
- property public final int priority;
- property public final int size;
- }
-
- @kotlin.jvm.JvmInline public final value class ImageSize {
- field public static final androidx.glance.template.ImageSize.Companion Companion;
- }
-
- public static final class ImageSize.Companion {
- method public int getLarge();
- method public int getMedium();
- method public int getSmall();
- method public int getUndefined();
- property public final int Large;
- property public final int Medium;
- property public final int Small;
- property public final int Undefined;
- }
-
- @kotlin.jvm.JvmInline public final value class ListStyle {
- field public static final androidx.glance.template.ListStyle.Companion Companion;
- }
-
- public static final class ListStyle.Companion {
- method public int getBrief();
- method public int getFull();
- property public final int Brief;
- property public final int Full;
- }
-
- public final class ListTemplateData {
- ctor public ListTemplateData(optional androidx.glance.template.HeaderBlock? headerBlock, optional java.util.List<androidx.glance.template.ListTemplateItem> listContent, optional int listStyle);
- method public androidx.glance.template.HeaderBlock? getHeaderBlock();
- method public java.util.List<androidx.glance.template.ListTemplateItem> getListContent();
- method public int getListStyle();
- property public final androidx.glance.template.HeaderBlock? headerBlock;
- property public final java.util.List<androidx.glance.template.ListTemplateItem> listContent;
- property public final int listStyle;
- }
-
- public final class ListTemplateItem {
- ctor public ListTemplateItem(androidx.glance.template.TextBlock textBlock, optional androidx.glance.template.ImageBlock? imageBlock, optional androidx.glance.template.ActionBlock? actionBlock);
- method public androidx.glance.template.ActionBlock? getActionBlock();
- method public androidx.glance.template.ImageBlock? getImageBlock();
- method public androidx.glance.template.TextBlock getTextBlock();
- property public final androidx.glance.template.ActionBlock? actionBlock;
- property public final androidx.glance.template.ImageBlock? imageBlock;
- property public final androidx.glance.template.TextBlock textBlock;
- }
-
- @androidx.glance.GlanceComposable public final class ListTemplateLayoutsKt {
- method @androidx.compose.runtime.Composable public static void ListTemplate(androidx.glance.template.ListTemplateData data);
- }
-
- public final class SingleEntityTemplateData {
- ctor public SingleEntityTemplateData(optional androidx.glance.template.HeaderBlock? headerBlock, optional androidx.glance.template.TextBlock? textBlock, optional androidx.glance.template.ImageBlock? imageBlock, optional androidx.glance.template.ActionBlock? actionBlock);
- method public androidx.glance.template.ActionBlock? getActionBlock();
- method public androidx.glance.template.HeaderBlock? getHeaderBlock();
- method public androidx.glance.template.ImageBlock? getImageBlock();
- method public androidx.glance.template.TextBlock? getTextBlock();
- property public final androidx.glance.template.ActionBlock? actionBlock;
- property public final androidx.glance.template.HeaderBlock? headerBlock;
- property public final androidx.glance.template.ImageBlock? imageBlock;
- property public final androidx.glance.template.TextBlock? textBlock;
- }
-
- public final class SingleEntityTemplateLayoutsKt {
- method @androidx.compose.runtime.Composable public static void SingleEntityTemplate(androidx.glance.template.SingleEntityTemplateData data);
- }
-
- public abstract sealed class TemplateButton {
- method public final androidx.glance.action.Action getAction();
- property public final androidx.glance.action.Action action;
- }
-
- public final class TemplateImageButton extends androidx.glance.template.TemplateButton {
- ctor public TemplateImageButton(androidx.glance.action.Action action, androidx.glance.template.TemplateImageWithDescription image);
- method public androidx.glance.template.TemplateImageWithDescription getImage();
- property public final androidx.glance.template.TemplateImageWithDescription image;
- }
-
- public final class TemplateImageWithDescription {
- ctor public TemplateImageWithDescription(androidx.glance.ImageProvider image, String description, optional float cornerRadius);
- method public float getCornerRadius();
- method public String getDescription();
- method public androidx.glance.ImageProvider getImage();
- property public final float cornerRadius;
- property public final String description;
- property public final androidx.glance.ImageProvider image;
- }
-
- public enum TemplateMode {
- method public static androidx.glance.template.TemplateMode valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
- method public static androidx.glance.template.TemplateMode[] values();
- enum_constant public static final androidx.glance.template.TemplateMode Collapsed;
- enum_constant public static final androidx.glance.template.TemplateMode Horizontal;
- enum_constant public static final androidx.glance.template.TemplateMode Vertical;
- }
-
- public final class TemplateText {
- ctor public TemplateText(String text, optional int type);
- method public String getText();
- method public int getType();
- property public final String text;
- property public final int type;
- }
-
- public final class TemplateTextButton extends androidx.glance.template.TemplateButton {
- ctor public TemplateTextButton(androidx.glance.action.Action action, String text);
- method public String getText();
- property public final String text;
- }
-
- public final class TextBlock {
- ctor public TextBlock(androidx.glance.template.TemplateText text1, optional androidx.glance.template.TemplateText? text2, optional androidx.glance.template.TemplateText? text3, optional @IntRange(from=0L) int priority);
- method public int getPriority();
- method public androidx.glance.template.TemplateText getText1();
- method public androidx.glance.template.TemplateText? getText2();
- method public androidx.glance.template.TemplateText? getText3();
- property public final int priority;
- property public final androidx.glance.template.TemplateText text1;
- property public final androidx.glance.template.TemplateText? text2;
- property public final androidx.glance.template.TemplateText? text3;
- }
-
- @kotlin.jvm.JvmInline public final value class TextType {
- field public static final androidx.glance.template.TextType.Companion Companion;
- }
-
- public static final class TextType.Companion {
- method public int getBody();
- method public int getDisplay();
- method public int getHeadline();
- method public int getLabel();
- method public int getTitle();
- property public final int Body;
- property public final int Display;
- property public final int Headline;
- property public final int Label;
- property public final int Title;
- }
-
-}
-
diff --git a/glance/glance-template/build.gradle b/glance/glance-template/build.gradle
index a74f078..6ea5c4c 100644
--- a/glance/glance-template/build.gradle
+++ b/glance/glance-template/build.gradle
@@ -21,12 +21,10 @@
plugins {
id("AndroidXPlugin")
id("com.android.library")
+ id("org.jetbrains.kotlin.android")
id("AndroidXComposePlugin")
}
-// Disable multi-platform; this will only be used on Android.
-AndroidXComposePlugin.applyAndConfigureKotlinPlugin(project, /* isMultiplatformEnabled= */false)
-
dependencies {
api(project(":glance:glance"))
api(project(":glance:glance-appwidget"))
@@ -73,7 +71,7 @@
}
androidx {
- name = "Glance Templates Library"
+ name = "Glance Templates"
type = LibraryType.PUBLISHED_LIBRARY
mavenVersion = LibraryVersions.GLANCE_TEMPLATE
inceptionYear = "2021"
diff --git a/glance/glance-template/integration-tests/template-demos/src/main/java/androidx/glance/appwidget/template/demos/DemoOverrideWidget.kt b/glance/glance-template/integration-tests/template-demos/src/main/java/androidx/glance/appwidget/template/demos/DemoOverrideWidget.kt
index 5ee0b7f..5c33d7e 100644
--- a/glance/glance-template/integration-tests/template-demos/src/main/java/androidx/glance/appwidget/template/demos/DemoOverrideWidget.kt
+++ b/glance/glance-template/integration-tests/template-demos/src/main/java/androidx/glance/appwidget/template/demos/DemoOverrideWidget.kt
@@ -24,15 +24,15 @@
import androidx.glance.ImageProvider
import androidx.glance.appwidget.GlanceAppWidget
import androidx.glance.appwidget.GlanceAppWidgetReceiver
-import androidx.glance.template.GlanceTemplateAppWidget
-import androidx.glance.template.SingleEntityTemplate
import androidx.glance.background
import androidx.glance.layout.Alignment
import androidx.glance.layout.Column
import androidx.glance.layout.fillMaxSize
+import androidx.glance.template.GlanceTemplateAppWidget
import androidx.glance.template.HeaderBlock
import androidx.glance.template.ImageBlock
import androidx.glance.template.LocalTemplateMode
+import androidx.glance.template.SingleEntityTemplate
import androidx.glance.template.SingleEntityTemplateData
import androidx.glance.template.TemplateImageWithDescription
import androidx.glance.template.TemplateMode
diff --git a/glance/glance-template/integration-tests/template-demos/src/main/java/androidx/glance/appwidget/template/demos/GalleryDemoWidget.kt b/glance/glance-template/integration-tests/template-demos/src/main/java/androidx/glance/appwidget/template/demos/GalleryDemoWidget.kt
index 04ec6f2..18c7278 100644
--- a/glance/glance-template/integration-tests/template-demos/src/main/java/androidx/glance/appwidget/template/demos/GalleryDemoWidget.kt
+++ b/glance/glance-template/integration-tests/template-demos/src/main/java/androidx/glance/appwidget/template/demos/GalleryDemoWidget.kt
@@ -22,11 +22,11 @@
import androidx.glance.appwidget.GlanceAppWidget
import androidx.glance.appwidget.GlanceAppWidgetReceiver
import androidx.glance.appwidget.action.actionRunCallback
-import androidx.glance.template.GalleryTemplate
-import androidx.glance.template.GlanceTemplateAppWidget
import androidx.glance.template.ActionBlock
import androidx.glance.template.AspectRatio
+import androidx.glance.template.GalleryTemplate
import androidx.glance.template.GalleryTemplateData
+import androidx.glance.template.GlanceTemplateAppWidget
import androidx.glance.template.HeaderBlock
import androidx.glance.template.ImageBlock
import androidx.glance.template.ImageSize
diff --git a/glance/glance-template/integration-tests/template-demos/src/main/java/androidx/glance/appwidget/template/demos/ListDemoWidget.kt b/glance/glance-template/integration-tests/template-demos/src/main/java/androidx/glance/appwidget/template/demos/ListDemoWidget.kt
index 354d8b2..0f87618 100644
--- a/glance/glance-template/integration-tests/template-demos/src/main/java/androidx/glance/appwidget/template/demos/ListDemoWidget.kt
+++ b/glance/glance-template/integration-tests/template-demos/src/main/java/androidx/glance/appwidget/template/demos/ListDemoWidget.kt
@@ -34,14 +34,14 @@
import androidx.glance.appwidget.action.ActionCallback
import androidx.glance.appwidget.action.actionRunCallback
import androidx.glance.appwidget.state.updateAppWidgetState
-import androidx.glance.template.GlanceTemplateAppWidget
-import androidx.glance.template.ListTemplate
import androidx.glance.currentState
import androidx.glance.template.ActionBlock
+import androidx.glance.template.GlanceTemplateAppWidget
import androidx.glance.template.HeaderBlock
import androidx.glance.template.ImageBlock
import androidx.glance.template.ImageSize
import androidx.glance.template.ListStyle
+import androidx.glance.template.ListTemplate
import androidx.glance.template.ListTemplateData
import androidx.glance.template.ListTemplateItem
import androidx.glance.template.TemplateImageButton
diff --git a/glance/glance-template/integration-tests/template-demos/src/main/java/androidx/glance/appwidget/template/demos/SingleEntityDemoWidget.kt b/glance/glance-template/integration-tests/template-demos/src/main/java/androidx/glance/appwidget/template/demos/SingleEntityDemoWidget.kt
index 36e6d78..0e297bf 100644
--- a/glance/glance-template/integration-tests/template-demos/src/main/java/androidx/glance/appwidget/template/demos/SingleEntityDemoWidget.kt
+++ b/glance/glance-template/integration-tests/template-demos/src/main/java/androidx/glance/appwidget/template/demos/SingleEntityDemoWidget.kt
@@ -29,12 +29,12 @@
import androidx.glance.appwidget.action.ActionCallback
import androidx.glance.appwidget.action.actionRunCallback
import androidx.glance.appwidget.state.updateAppWidgetState
-import androidx.glance.template.GlanceTemplateAppWidget
-import androidx.glance.template.SingleEntityTemplate
import androidx.glance.currentState
import androidx.glance.template.ActionBlock
+import androidx.glance.template.GlanceTemplateAppWidget
import androidx.glance.template.HeaderBlock
import androidx.glance.template.ImageBlock
+import androidx.glance.template.SingleEntityTemplate
import androidx.glance.template.SingleEntityTemplateData
import androidx.glance.template.TemplateImageWithDescription
import androidx.glance.template.TemplateText
diff --git a/glance/glance-template/src/main/java/androidx/glance/template/GalleryTemplateLayouts.kt b/glance/glance-template/src/main/java/androidx/glance/template/GalleryTemplateLayouts.kt
index 8d66ce0..8c81d38 100644
--- a/glance/glance-template/src/main/java/androidx/glance/template/GalleryTemplateLayouts.kt
+++ b/glance/glance-template/src/main/java/androidx/glance/template/GalleryTemplateLayouts.kt
@@ -27,7 +27,6 @@
import androidx.glance.appwidget.lazy.GridCells
import androidx.glance.appwidget.lazy.LazyVerticalGrid
import androidx.glance.appwidget.lazy.itemsIndexed
-import androidx.glance.template.GlanceTemplateAppWidget.Companion.sizeMin
import androidx.glance.background
import androidx.glance.layout.Alignment
import androidx.glance.layout.Column
@@ -40,6 +39,7 @@
import androidx.glance.layout.height
import androidx.glance.layout.padding
import androidx.glance.layout.width
+import androidx.glance.template.GlanceTemplateAppWidget.Companion.sizeMin
import kotlin.math.ceil
import kotlin.math.pow
import kotlin.math.roundToInt
diff --git a/glance/glance-template/src/main/java/androidx/glance/template/SingleEntityTemplateLayouts.kt b/glance/glance-template/src/main/java/androidx/glance/template/SingleEntityTemplateLayouts.kt
index f954264..0e17cca 100644
--- a/glance/glance-template/src/main/java/androidx/glance/template/SingleEntityTemplateLayouts.kt
+++ b/glance/glance-template/src/main/java/androidx/glance/template/SingleEntityTemplateLayouts.kt
@@ -22,8 +22,6 @@
import androidx.glance.GlanceTheme
import androidx.glance.LocalSize
import androidx.glance.appwidget.cornerRadius
-import androidx.glance.template.GlanceTemplateAppWidget.Companion.sizeMin
-import androidx.glance.template.GlanceTemplateAppWidget.Companion.sizeS
import androidx.glance.background
import androidx.glance.layout.Column
import androidx.glance.layout.ContentScale
@@ -35,6 +33,8 @@
import androidx.glance.layout.height
import androidx.glance.layout.padding
import androidx.glance.layout.width
+import androidx.glance.template.GlanceTemplateAppWidget.Companion.sizeMin
+import androidx.glance.template.GlanceTemplateAppWidget.Companion.sizeS
// TODO: Define template layouts for other surfaces
/**
diff --git a/glance/glance-wear-tiles-preview/api/public_plus_experimental_current.txt b/glance/glance-wear-tiles-preview/api/public_plus_experimental_current.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/glance/glance-wear-tiles-preview/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/glance/glance-wear-tiles-preview/build.gradle b/glance/glance-wear-tiles-preview/build.gradle
index a5836b4..d05e676 100644
--- a/glance/glance-wear-tiles-preview/build.gradle
+++ b/glance/glance-wear-tiles-preview/build.gradle
@@ -14,18 +14,15 @@
* limitations under the License.
*/
-import androidx.build.AndroidXComposePlugin
import androidx.build.LibraryType
plugins {
id("AndroidXComposePlugin")
id("AndroidXPlugin")
+ id("org.jetbrains.kotlin.android")
id("com.android.library")
}
-// Disable multi-platform; this will only be used on Android.
-AndroidXComposePlugin.applyAndConfigureKotlinPlugin(project, /* isMultiplatformEnabled= */false)
-
dependencies {
api("androidx.wear.tiles:tiles-renderer:1.0.0")
@@ -51,7 +48,7 @@
}
androidx {
- name = "Android Glance Wear Tiles Preview"
+ name = "Glance Wear Tiles Preview"
type = LibraryType.PUBLISHED_LIBRARY
mavenVersion = LibraryVersions.GLANCE_WEAR_TILES
inceptionYear = "2022"
diff --git a/glance/glance-wear-tiles-preview/src/androidAndroidTest/AndroidManifest.xml b/glance/glance-wear-tiles-preview/src/androidTest/AndroidManifest.xml
similarity index 100%
rename from glance/glance-wear-tiles-preview/src/androidAndroidTest/AndroidManifest.xml
rename to glance/glance-wear-tiles-preview/src/androidTest/AndroidManifest.xml
diff --git a/glance/glance-wear-tiles-preview/src/androidAndroidTest/kotlin/androidx/glance/wear/tiles/preview/FirstGlancePreview.kt b/glance/glance-wear-tiles-preview/src/androidTest/kotlin/androidx/glance/wear/tiles/preview/FirstGlancePreview.kt
similarity index 99%
rename from glance/glance-wear-tiles-preview/src/androidAndroidTest/kotlin/androidx/glance/wear/tiles/preview/FirstGlancePreview.kt
rename to glance/glance-wear-tiles-preview/src/androidTest/kotlin/androidx/glance/wear/tiles/preview/FirstGlancePreview.kt
index 94ad581..a585320 100644
--- a/glance/glance-wear-tiles-preview/src/androidAndroidTest/kotlin/androidx/glance/wear/tiles/preview/FirstGlancePreview.kt
+++ b/glance/glance-wear-tiles-preview/src/androidTest/kotlin/androidx/glance/wear/tiles/preview/FirstGlancePreview.kt
@@ -18,9 +18,9 @@
import androidx.compose.runtime.Composable
import androidx.compose.ui.unit.dp
-import androidx.glance.action.Action
import androidx.glance.Button
import androidx.glance.GlanceModifier
+import androidx.glance.action.Action
import androidx.glance.layout.Alignment
import androidx.glance.layout.Column
import androidx.glance.layout.Row
diff --git a/glance/glance-wear-tiles-preview/src/androidAndroidTest/kotlin/androidx/glance/wear/tiles/preview/GlanceTileServiceViewAdapterTest.kt b/glance/glance-wear-tiles-preview/src/androidTest/kotlin/androidx/glance/wear/tiles/preview/GlanceTileServiceViewAdapterTest.kt
similarity index 99%
rename from glance/glance-wear-tiles-preview/src/androidAndroidTest/kotlin/androidx/glance/wear/tiles/preview/GlanceTileServiceViewAdapterTest.kt
rename to glance/glance-wear-tiles-preview/src/androidTest/kotlin/androidx/glance/wear/tiles/preview/GlanceTileServiceViewAdapterTest.kt
index 3f4b8fd..debe385 100644
--- a/glance/glance-wear-tiles-preview/src/androidAndroidTest/kotlin/androidx/glance/wear/tiles/preview/GlanceTileServiceViewAdapterTest.kt
+++ b/glance/glance-wear-tiles-preview/src/androidTest/kotlin/androidx/glance/wear/tiles/preview/GlanceTileServiceViewAdapterTest.kt
@@ -16,13 +16,13 @@
package androidx.glance.wear.tiles.preview
-import androidx.glance.wear.tiles.preview.test.R
import android.app.Activity
import android.os.Bundle
import android.view.ViewGroup
import android.widget.FrameLayout
import android.widget.LinearLayout
import android.widget.TextView
+import androidx.glance.wear.tiles.preview.test.R
import androidx.test.filters.MediumTest
import org.junit.Assert
import org.junit.Before
diff --git a/glance/glance-wear-tiles-preview/src/androidAndroidTest/res/layout/glance_tile_service_adapter_test.xml b/glance/glance-wear-tiles-preview/src/androidTest/res/layout/glance_tile_service_adapter_test.xml
similarity index 100%
rename from glance/glance-wear-tiles-preview/src/androidAndroidTest/res/layout/glance_tile_service_adapter_test.xml
rename to glance/glance-wear-tiles-preview/src/androidTest/res/layout/glance_tile_service_adapter_test.xml
diff --git a/glance/glance-wear-tiles-preview/src/androidAndroidTest/res/values/styles.xml b/glance/glance-wear-tiles-preview/src/androidTest/res/values/styles.xml
similarity index 100%
rename from glance/glance-wear-tiles-preview/src/androidAndroidTest/res/values/styles.xml
rename to glance/glance-wear-tiles-preview/src/androidTest/res/values/styles.xml
diff --git a/glance/glance-wear-tiles-preview/src/androidMain/kotlin/androidx/glance/wear/tiles/preview/ComposableInvoker.kt b/glance/glance-wear-tiles-preview/src/main/java/androidx/glance/wear/tiles/preview/ComposableInvoker.kt
similarity index 100%
rename from glance/glance-wear-tiles-preview/src/androidMain/kotlin/androidx/glance/wear/tiles/preview/ComposableInvoker.kt
rename to glance/glance-wear-tiles-preview/src/main/java/androidx/glance/wear/tiles/preview/ComposableInvoker.kt
diff --git a/glance/glance-wear-tiles-preview/src/androidMain/kotlin/androidx/glance/wear/tiles/preview/GlanceTileServiceViewAdapter.kt b/glance/glance-wear-tiles-preview/src/main/java/androidx/glance/wear/tiles/preview/GlanceTileServiceViewAdapter.kt
similarity index 99%
rename from glance/glance-wear-tiles-preview/src/androidMain/kotlin/androidx/glance/wear/tiles/preview/GlanceTileServiceViewAdapter.kt
rename to glance/glance-wear-tiles-preview/src/main/java/androidx/glance/wear/tiles/preview/GlanceTileServiceViewAdapter.kt
index 929bfba..944d3ed 100644
--- a/glance/glance-wear-tiles-preview/src/androidMain/kotlin/androidx/glance/wear/tiles/preview/GlanceTileServiceViewAdapter.kt
+++ b/glance/glance-wear-tiles-preview/src/main/java/androidx/glance/wear/tiles/preview/GlanceTileServiceViewAdapter.kt
@@ -27,8 +27,8 @@
import androidx.glance.wear.tiles.compose
import androidx.glance.wear.tiles.preview.ComposableInvoker.invokeComposable
import androidx.wear.tiles.TileBuilders
-import kotlinx.coroutines.runBlocking
import androidx.wear.tiles.renderer.TileRenderer
+import kotlinx.coroutines.runBlocking
private const val TOOLS_NS_URI = "http://schemas.android.com/tools"
diff --git a/glance/glance-wear-tiles/api/current.txt b/glance/glance-wear-tiles/api/current.txt
index fe52a64..29885e6 100644
--- a/glance/glance-wear-tiles/api/current.txt
+++ b/glance/glance-wear-tiles/api/current.txt
@@ -15,6 +15,9 @@
property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.glance.wear.tiles.TimeInterval> LocalTimeInterval;
}
+ @kotlin.RequiresOptIn(message="This API is experimental and is likely to change in the future.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalGlanceWearTilesApi {
+ }
+
public abstract class GlanceTileService extends androidx.wear.tiles.TileService {
ctor public GlanceTileService(optional androidx.wear.tiles.LayoutElementBuilders.LayoutElement? errorUiLayout);
method @androidx.compose.runtime.Composable @androidx.glance.GlanceComposable public abstract void Content();
@@ -29,6 +32,10 @@
property public androidx.glance.wear.tiles.TimelineMode timelineMode;
}
+ public final class GlanceWearTilesKt {
+ method @androidx.glance.wear.tiles.ExperimentalGlanceWearTilesApi public static suspend Object? compose(android.content.Context context, long size, optional Object? state, kotlin.jvm.functions.Function0<kotlin.Unit> content, kotlin.coroutines.Continuation<? super androidx.glance.wear.tiles.WearTilesCompositionResult>);
+ }
+
public final class TimeInterval {
ctor public TimeInterval(optional java.time.Instant start, optional java.time.Instant end);
method public java.time.Instant component1();
@@ -53,6 +60,14 @@
property public final java.util.Set<androidx.glance.wear.tiles.TimeInterval> timeIntervals;
}
+ @androidx.glance.wear.tiles.ExperimentalGlanceWearTilesApi public final class WearTilesCompositionResult {
+ ctor public WearTilesCompositionResult(androidx.wear.tiles.LayoutElementBuilders.LayoutElement layout, androidx.wear.tiles.ResourceBuilders.Resources resources);
+ method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement getLayout();
+ method public androidx.wear.tiles.ResourceBuilders.Resources getResources();
+ property public final androidx.wear.tiles.LayoutElementBuilders.LayoutElement layout;
+ property public final androidx.wear.tiles.ResourceBuilders.Resources resources;
+ }
+
}
package androidx.glance.wear.tiles.action {
@@ -62,8 +77,8 @@
}
public final class RunCallbackActionKt {
- method public static <T extends androidx.glance.wear.tiles.action.ActionCallback> androidx.glance.action.Action actionRunCallback(Class<T> callbackClass);
method public static inline <reified T extends androidx.glance.wear.tiles.action.ActionCallback> androidx.glance.action.Action actionRunCallback();
+ method public static <T extends androidx.glance.wear.tiles.action.ActionCallback> androidx.glance.action.Action actionRunCallback(Class<T> callbackClass);
}
}
diff --git a/glance/glance-wear-tiles/api/public_plus_experimental_current.txt b/glance/glance-wear-tiles/api/public_plus_experimental_current.txt
deleted file mode 100644
index c7e2370..0000000
--- a/glance/glance-wear-tiles/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,199 +0,0 @@
-// Signature format: 4.0
-package androidx.glance.wear.tiles {
-
- public final class AndroidLayoutElementKt {
- method @androidx.compose.runtime.Composable public static void AndroidLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement layoutElement);
- }
-
- public final class BorderKt {
- method public static androidx.glance.GlanceModifier border(androidx.glance.GlanceModifier, float width, androidx.glance.unit.ColorProvider color);
- method public static androidx.glance.GlanceModifier border(androidx.glance.GlanceModifier, @DimenRes int width, androidx.glance.unit.ColorProvider color);
- }
-
- public final class CompositionLocalsKt {
- method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.glance.wear.tiles.TimeInterval> getLocalTimeInterval();
- property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.glance.wear.tiles.TimeInterval> LocalTimeInterval;
- }
-
- @kotlin.RequiresOptIn(message="This API is experimental and is likely to change in the future.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalGlanceWearTilesApi {
- }
-
- public abstract class GlanceTileService extends androidx.wear.tiles.TileService {
- ctor public GlanceTileService(optional androidx.wear.tiles.LayoutElementBuilders.LayoutElement? errorUiLayout);
- method @androidx.compose.runtime.Composable @androidx.glance.GlanceComposable public abstract void Content();
- method public androidx.glance.state.GlanceStateDefinition<?>? getStateDefinition();
- method public final suspend <T> Object? getTileState(kotlin.coroutines.Continuation<? super T>);
- method public androidx.glance.wear.tiles.TimelineMode getTimelineMode();
- method protected final com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources> onResourcesRequest(androidx.wear.tiles.RequestBuilders.ResourcesRequest requestParams);
- method public void onStart(android.content.Intent? intent, int startId);
- method protected final com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.TileBuilders.Tile> onTileRequest(androidx.wear.tiles.RequestBuilders.TileRequest requestParams);
- method public final suspend <T> Object? updateTileState(kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super T>,?> updateState, kotlin.coroutines.Continuation<? super T>);
- property public androidx.glance.state.GlanceStateDefinition<?>? stateDefinition;
- property public androidx.glance.wear.tiles.TimelineMode timelineMode;
- }
-
- public final class GlanceWearTilesKt {
- method @androidx.glance.wear.tiles.ExperimentalGlanceWearTilesApi public static suspend Object? compose(android.content.Context context, long size, optional Object? state, kotlin.jvm.functions.Function0<kotlin.Unit> content, kotlin.coroutines.Continuation<? super androidx.glance.wear.tiles.WearTilesCompositionResult>);
- }
-
- public final class TimeInterval {
- ctor public TimeInterval(optional java.time.Instant start, optional java.time.Instant end);
- method public java.time.Instant component1();
- method public java.time.Instant component2();
- method public androidx.glance.wear.tiles.TimeInterval copy(java.time.Instant start, java.time.Instant end);
- method public java.time.Instant getEnd();
- method public java.time.Instant getStart();
- property public final java.time.Instant end;
- property public final java.time.Instant start;
- }
-
- public sealed interface TimelineMode {
- }
-
- public static final class TimelineMode.SingleEntry implements androidx.glance.wear.tiles.TimelineMode {
- field public static final androidx.glance.wear.tiles.TimelineMode.SingleEntry INSTANCE;
- }
-
- public static final class TimelineMode.TimeBoundEntries implements androidx.glance.wear.tiles.TimelineMode {
- ctor public TimelineMode.TimeBoundEntries(java.util.Set<androidx.glance.wear.tiles.TimeInterval> timeIntervals);
- method public java.util.Set<androidx.glance.wear.tiles.TimeInterval> getTimeIntervals();
- property public final java.util.Set<androidx.glance.wear.tiles.TimeInterval> timeIntervals;
- }
-
- @androidx.glance.wear.tiles.ExperimentalGlanceWearTilesApi public final class WearTilesCompositionResult {
- ctor public WearTilesCompositionResult(androidx.wear.tiles.LayoutElementBuilders.LayoutElement layout, androidx.wear.tiles.ResourceBuilders.Resources resources);
- method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement getLayout();
- method public androidx.wear.tiles.ResourceBuilders.Resources getResources();
- property public final androidx.wear.tiles.LayoutElementBuilders.LayoutElement layout;
- property public final androidx.wear.tiles.ResourceBuilders.Resources resources;
- }
-
-}
-
-package androidx.glance.wear.tiles.action {
-
- public interface ActionCallback {
- method public suspend Object? onAction(android.content.Context context, androidx.glance.GlanceId glanceId, kotlin.coroutines.Continuation<? super kotlin.Unit>);
- }
-
- public final class RunCallbackActionKt {
- method public static <T extends androidx.glance.wear.tiles.action.ActionCallback> androidx.glance.action.Action actionRunCallback(Class<T> callbackClass);
- method public static inline <reified T extends androidx.glance.wear.tiles.action.ActionCallback> androidx.glance.action.Action actionRunCallback();
- }
-
-}
-
-package androidx.glance.wear.tiles.curved {
-
- @kotlin.jvm.JvmInline public final value class AnchorType {
- field public static final androidx.glance.wear.tiles.curved.AnchorType.Companion Companion;
- }
-
- public static final class AnchorType.Companion {
- method public int getCenter();
- method public int getEnd();
- method public int getStart();
- property public final int Center;
- property public final int End;
- property public final int Start;
- }
-
- public final class CombinedGlanceCurvedModifier implements androidx.glance.wear.tiles.curved.GlanceCurvedModifier {
- ctor public CombinedGlanceCurvedModifier(androidx.glance.wear.tiles.curved.GlanceCurvedModifier outer, androidx.glance.wear.tiles.curved.GlanceCurvedModifier inner);
- method public boolean all(kotlin.jvm.functions.Function1<? super androidx.glance.wear.tiles.curved.GlanceCurvedModifier.Element,java.lang.Boolean> predicate);
- method public boolean any(kotlin.jvm.functions.Function1<? super androidx.glance.wear.tiles.curved.GlanceCurvedModifier.Element,java.lang.Boolean> predicate);
- method public <R> R foldIn(R initial, kotlin.jvm.functions.Function2<? super R,? super androidx.glance.wear.tiles.curved.GlanceCurvedModifier.Element,? extends R> operation);
- method public <R> R foldOut(R initial, kotlin.jvm.functions.Function2<? super androidx.glance.wear.tiles.curved.GlanceCurvedModifier.Element,? super R,? extends R> operation);
- }
-
- @androidx.glance.wear.tiles.curved.CurvedScopeMarker public interface CurvedChildScope {
- }
-
- public final class CurvedRowKt {
- method @androidx.compose.runtime.Composable public static void CurvedRow(optional androidx.glance.GlanceModifier modifier, optional float anchorDegrees, optional int anchorType, optional int radialAlignment, kotlin.jvm.functions.Function1<? super androidx.glance.wear.tiles.curved.CurvedScope,kotlin.Unit> content);
- }
-
- @androidx.glance.wear.tiles.curved.CurvedScopeMarker @kotlin.jvm.JvmDefaultWithCompatibility public interface CurvedScope {
- method public void curvedComposable(optional boolean rotateContent, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method public void curvedLine(androidx.glance.unit.ColorProvider color, optional androidx.glance.wear.tiles.curved.GlanceCurvedModifier curvedModifier);
- method public void curvedSpacer(optional androidx.glance.wear.tiles.curved.GlanceCurvedModifier curvedModifier);
- method public void curvedText(String text, optional androidx.glance.wear.tiles.curved.GlanceCurvedModifier curvedModifier, optional androidx.glance.wear.tiles.curved.CurvedTextStyle? style);
- }
-
- @kotlin.DslMarker public @interface CurvedScopeMarker {
- }
-
- @androidx.compose.runtime.Immutable public final class CurvedTextStyle {
- ctor public CurvedTextStyle(optional androidx.glance.unit.ColorProvider? color, optional androidx.compose.ui.unit.TextUnit? fontSize, optional androidx.glance.text.FontWeight? fontWeight, optional androidx.glance.text.FontStyle? fontStyle);
- method public androidx.glance.unit.ColorProvider? getColor();
- method public androidx.compose.ui.unit.TextUnit? getFontSize();
- method public androidx.glance.text.FontStyle? getFontStyle();
- method public androidx.glance.text.FontWeight? getFontWeight();
- property public final androidx.glance.unit.ColorProvider? color;
- property public final androidx.compose.ui.unit.TextUnit? fontSize;
- property public final androidx.glance.text.FontStyle? fontStyle;
- property public final androidx.glance.text.FontWeight? fontWeight;
- }
-
- @androidx.compose.runtime.Stable @kotlin.jvm.JvmDefaultWithCompatibility public interface GlanceCurvedModifier {
- method public boolean all(kotlin.jvm.functions.Function1<? super androidx.glance.wear.tiles.curved.GlanceCurvedModifier.Element,java.lang.Boolean> predicate);
- method public boolean any(kotlin.jvm.functions.Function1<? super androidx.glance.wear.tiles.curved.GlanceCurvedModifier.Element,java.lang.Boolean> predicate);
- method public <R> R foldIn(R initial, kotlin.jvm.functions.Function2<? super R,? super androidx.glance.wear.tiles.curved.GlanceCurvedModifier.Element,? extends R> operation);
- method public <R> R foldOut(R initial, kotlin.jvm.functions.Function2<? super androidx.glance.wear.tiles.curved.GlanceCurvedModifier.Element,? super R,? extends R> operation);
- method public default infix androidx.glance.wear.tiles.curved.GlanceCurvedModifier then(androidx.glance.wear.tiles.curved.GlanceCurvedModifier other);
- field public static final androidx.glance.wear.tiles.curved.GlanceCurvedModifier.Companion Companion;
- }
-
- public static final class GlanceCurvedModifier.Companion implements androidx.glance.wear.tiles.curved.GlanceCurvedModifier {
- method public boolean all(kotlin.jvm.functions.Function1<? super androidx.glance.wear.tiles.curved.GlanceCurvedModifier.Element,java.lang.Boolean> predicate);
- method public boolean any(kotlin.jvm.functions.Function1<? super androidx.glance.wear.tiles.curved.GlanceCurvedModifier.Element,java.lang.Boolean> predicate);
- method public <R> R foldIn(R initial, kotlin.jvm.functions.Function2<? super R,? super androidx.glance.wear.tiles.curved.GlanceCurvedModifier.Element,? extends R> operation);
- method public <R> R foldOut(R initial, kotlin.jvm.functions.Function2<? super androidx.glance.wear.tiles.curved.GlanceCurvedModifier.Element,? super R,? extends R> operation);
- }
-
- @kotlin.jvm.JvmDefaultWithCompatibility public static interface GlanceCurvedModifier.Element extends androidx.glance.wear.tiles.curved.GlanceCurvedModifier {
- method public default boolean all(kotlin.jvm.functions.Function1<? super androidx.glance.wear.tiles.curved.GlanceCurvedModifier.Element,java.lang.Boolean> predicate);
- method public default boolean any(kotlin.jvm.functions.Function1<? super androidx.glance.wear.tiles.curved.GlanceCurvedModifier.Element,java.lang.Boolean> predicate);
- method public default <R> R foldIn(R initial, kotlin.jvm.functions.Function2<? super R,? super androidx.glance.wear.tiles.curved.GlanceCurvedModifier.Element,? extends R> operation);
- method public default <R> R foldOut(R initial, kotlin.jvm.functions.Function2<? super androidx.glance.wear.tiles.curved.GlanceCurvedModifier.Element,? super R,? extends R> operation);
- }
-
- public final class GlanceCurvedModifierKt {
- method public static androidx.glance.wear.tiles.curved.GlanceCurvedModifier clickable(androidx.glance.wear.tiles.curved.GlanceCurvedModifier, androidx.glance.action.Action onClick);
- method public static androidx.glance.wear.tiles.curved.GlanceCurvedModifier semantics(androidx.glance.wear.tiles.curved.GlanceCurvedModifier, kotlin.jvm.functions.Function1<? super androidx.glance.semantics.SemanticsPropertyReceiver,kotlin.Unit> properties);
- method public static androidx.glance.wear.tiles.curved.GlanceCurvedModifier sweepAngleDegrees(androidx.glance.wear.tiles.curved.GlanceCurvedModifier, float degrees);
- method public static androidx.glance.wear.tiles.curved.GlanceCurvedModifier thickness(androidx.glance.wear.tiles.curved.GlanceCurvedModifier, float thickness);
- }
-
- @kotlin.jvm.JvmInline public final value class RadialAlignment {
- field public static final androidx.glance.wear.tiles.curved.RadialAlignment.Companion Companion;
- }
-
- public static final class RadialAlignment.Companion {
- method public int getCenter();
- method public int getInner();
- method public int getOuter();
- property public final int Center;
- property public final int Inner;
- property public final int Outer;
- }
-
-}
-
-package androidx.glance.wear.tiles.state {
-
- public final class GlanceWearTilesStateKt {
- method public static suspend <T> Object? getWearTileState(android.content.Context context, androidx.glance.state.GlanceStateDefinition<T> definition, androidx.glance.GlanceId glanceId, kotlin.coroutines.Continuation<? super T>);
- method public static suspend <T> Object? updateWearTileState(android.content.Context context, androidx.glance.state.GlanceStateDefinition<T> definition, androidx.glance.GlanceId glanceId, kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super T>,?> updateState, kotlin.coroutines.Continuation<? super T>);
- }
-
-}
-
-package androidx.glance.wear.tiles.template {
-
- public final class SingleEntityTemplateLayoutsKt {
- method @androidx.compose.runtime.Composable public static void SingleEntityTemplate(androidx.glance.template.SingleEntityTemplateData data);
- }
-
-}
-
diff --git a/glance/glance-wear-tiles/api/restricted_current.txt b/glance/glance-wear-tiles/api/restricted_current.txt
index fe52a64..29885e6 100644
--- a/glance/glance-wear-tiles/api/restricted_current.txt
+++ b/glance/glance-wear-tiles/api/restricted_current.txt
@@ -15,6 +15,9 @@
property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.glance.wear.tiles.TimeInterval> LocalTimeInterval;
}
+ @kotlin.RequiresOptIn(message="This API is experimental and is likely to change in the future.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalGlanceWearTilesApi {
+ }
+
public abstract class GlanceTileService extends androidx.wear.tiles.TileService {
ctor public GlanceTileService(optional androidx.wear.tiles.LayoutElementBuilders.LayoutElement? errorUiLayout);
method @androidx.compose.runtime.Composable @androidx.glance.GlanceComposable public abstract void Content();
@@ -29,6 +32,10 @@
property public androidx.glance.wear.tiles.TimelineMode timelineMode;
}
+ public final class GlanceWearTilesKt {
+ method @androidx.glance.wear.tiles.ExperimentalGlanceWearTilesApi public static suspend Object? compose(android.content.Context context, long size, optional Object? state, kotlin.jvm.functions.Function0<kotlin.Unit> content, kotlin.coroutines.Continuation<? super androidx.glance.wear.tiles.WearTilesCompositionResult>);
+ }
+
public final class TimeInterval {
ctor public TimeInterval(optional java.time.Instant start, optional java.time.Instant end);
method public java.time.Instant component1();
@@ -53,6 +60,14 @@
property public final java.util.Set<androidx.glance.wear.tiles.TimeInterval> timeIntervals;
}
+ @androidx.glance.wear.tiles.ExperimentalGlanceWearTilesApi public final class WearTilesCompositionResult {
+ ctor public WearTilesCompositionResult(androidx.wear.tiles.LayoutElementBuilders.LayoutElement layout, androidx.wear.tiles.ResourceBuilders.Resources resources);
+ method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement getLayout();
+ method public androidx.wear.tiles.ResourceBuilders.Resources getResources();
+ property public final androidx.wear.tiles.LayoutElementBuilders.LayoutElement layout;
+ property public final androidx.wear.tiles.ResourceBuilders.Resources resources;
+ }
+
}
package androidx.glance.wear.tiles.action {
@@ -62,8 +77,8 @@
}
public final class RunCallbackActionKt {
- method public static <T extends androidx.glance.wear.tiles.action.ActionCallback> androidx.glance.action.Action actionRunCallback(Class<T> callbackClass);
method public static inline <reified T extends androidx.glance.wear.tiles.action.ActionCallback> androidx.glance.action.Action actionRunCallback();
+ method public static <T extends androidx.glance.wear.tiles.action.ActionCallback> androidx.glance.action.Action actionRunCallback(Class<T> callbackClass);
}
}
diff --git a/glance/glance-wear-tiles/build.gradle b/glance/glance-wear-tiles/build.gradle
index 155bfab..e158ee6 100644
--- a/glance/glance-wear-tiles/build.gradle
+++ b/glance/glance-wear-tiles/build.gradle
@@ -15,18 +15,14 @@
*/
import androidx.build.LibraryType
-import androidx.build.Publish
-import androidx.build.AndroidXComposePlugin
plugins {
id("AndroidXPlugin")
id("com.android.library")
+ id("org.jetbrains.kotlin.android")
id("AndroidXComposePlugin")
}
-// Disable multi-platform; this will only be used on Android.
-AndroidXComposePlugin.applyAndConfigureKotlinPlugin(project, /* isMultiplatformEnabled= */false)
-
dependencies {
api(project(":glance:glance"))
diff --git a/glance/glance-wear-tiles/integration-tests/demos/src/main/java/androidx/glance/wear/tiles/demos/CountTileService.kt b/glance/glance-wear-tiles/integration-tests/demos/src/main/java/androidx/glance/wear/tiles/demos/CountTileService.kt
index b83d447..4b6af16 100644
--- a/glance/glance-wear-tiles/integration-tests/demos/src/main/java/androidx/glance/wear/tiles/demos/CountTileService.kt
+++ b/glance/glance-wear-tiles/integration-tests/demos/src/main/java/androidx/glance/wear/tiles/demos/CountTileService.kt
@@ -26,25 +26,25 @@
import androidx.glance.Button
import androidx.glance.GlanceId
import androidx.glance.GlanceModifier
-import androidx.glance.wear.tiles.action.ActionCallback
-import androidx.glance.wear.tiles.action.actionRunCallback
import androidx.glance.background
import androidx.glance.currentState
import androidx.glance.layout.Alignment
import androidx.glance.layout.Column
import androidx.glance.layout.Row
import androidx.glance.layout.Spacer
-import androidx.glance.layout.padding
import androidx.glance.layout.height
+import androidx.glance.layout.padding
import androidx.glance.layout.width
import androidx.glance.semantics.contentDescription
import androidx.glance.semantics.semantics
import androidx.glance.state.PreferencesGlanceStateDefinition
-import androidx.glance.wear.tiles.GlanceTileService
import androidx.glance.text.FontWeight
import androidx.glance.text.Text
import androidx.glance.text.TextStyle
import androidx.glance.unit.ColorProvider
+import androidx.glance.wear.tiles.GlanceTileService
+import androidx.glance.wear.tiles.action.ActionCallback
+import androidx.glance.wear.tiles.action.actionRunCallback
import androidx.glance.wear.tiles.state.updateWearTileState
private val prefsCountKey = intPreferencesKey("count")
diff --git a/glance/glance-wear-tiles/integration-tests/demos/src/main/java/androidx/glance/wear/tiles/demos/TilePreviewActivity.kt b/glance/glance-wear-tiles/integration-tests/demos/src/main/java/androidx/glance/wear/tiles/demos/TilePreviewActivity.kt
index 09c3ef0..92bff5a 100644
--- a/glance/glance-wear-tiles/integration-tests/demos/src/main/java/androidx/glance/wear/tiles/demos/TilePreviewActivity.kt
+++ b/glance/glance-wear-tiles/integration-tests/demos/src/main/java/androidx/glance/wear/tiles/demos/TilePreviewActivity.kt
@@ -25,9 +25,9 @@
import android.widget.FrameLayout
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
-import androidx.wear.tiles.manager.TileUiClient
-import androidx.viewpager2.widget.ViewPager2
import androidx.viewpager2.adapter.FragmentStateAdapter
+import androidx.viewpager2.widget.ViewPager2
+import androidx.wear.tiles.manager.TileUiClient
private const val NUM_PAGES = 4
private val TILE_PROVIDERS_NAME = arrayOf(
diff --git a/glance/glance-wear-tiles/src/androidAndroidTest/kotlin/androidx/glance/wear/tiles/ScreenshotTests.kt b/glance/glance-wear-tiles/src/androidTest/kotlin/androidx/glance/wear/tiles/ScreenshotTests.kt
similarity index 100%
rename from glance/glance-wear-tiles/src/androidAndroidTest/kotlin/androidx/glance/wear/tiles/ScreenshotTests.kt
rename to glance/glance-wear-tiles/src/androidTest/kotlin/androidx/glance/wear/tiles/ScreenshotTests.kt
diff --git a/glance/glance-wear-tiles/src/androidAndroidTest/res/drawable/oval.xml b/glance/glance-wear-tiles/src/androidTest/res/drawable/oval.xml
similarity index 100%
rename from glance/glance-wear-tiles/src/androidAndroidTest/res/drawable/oval.xml
rename to glance/glance-wear-tiles/src/androidTest/res/drawable/oval.xml
diff --git a/glance/glance-wear-tiles/src/androidAndroidTest/res/values/dimens.xml b/glance/glance-wear-tiles/src/androidTest/res/values/dimens.xml
similarity index 100%
rename from glance/glance-wear-tiles/src/androidAndroidTest/res/values/dimens.xml
rename to glance/glance-wear-tiles/src/androidTest/res/values/dimens.xml
diff --git a/glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/AndroidLayoutElement.kt b/glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/AndroidLayoutElement.kt
similarity index 100%
rename from glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/AndroidLayoutElement.kt
rename to glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/AndroidLayoutElement.kt
diff --git a/glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/Border.kt b/glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/Border.kt
similarity index 100%
rename from glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/Border.kt
rename to glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/Border.kt
diff --git a/glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/CompositionLocals.kt b/glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/CompositionLocals.kt
similarity index 100%
rename from glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/CompositionLocals.kt
rename to glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/CompositionLocals.kt
diff --git a/glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/ErrorUiLayout.kt b/glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/ErrorUiLayout.kt
similarity index 100%
rename from glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/ErrorUiLayout.kt
rename to glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/ErrorUiLayout.kt
diff --git a/glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/ExperimentalGlanceWearTilesApi.kt b/glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/ExperimentalGlanceWearTilesApi.kt
similarity index 100%
rename from glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/ExperimentalGlanceWearTilesApi.kt
rename to glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/ExperimentalGlanceWearTilesApi.kt
diff --git a/glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/GlanceTileService.kt b/glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/GlanceTileService.kt
similarity index 100%
rename from glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/GlanceTileService.kt
rename to glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/GlanceTileService.kt
diff --git a/glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/GlanceWearTiles.kt b/glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/GlanceWearTiles.kt
similarity index 99%
rename from glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/GlanceWearTiles.kt
rename to glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/GlanceWearTiles.kt
index d6dd76e..ac1bded 100644
--- a/glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/GlanceWearTiles.kt
+++ b/glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/GlanceWearTiles.kt
@@ -16,11 +16,13 @@
package androidx.glance.wear.tiles
-import androidx.glance.LocalState
import android.content.Context
import android.util.Log
import androidx.compose.runtime.BroadcastFrameClock
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Composition
+import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.Recomposer
import androidx.compose.ui.unit.DpSize
import androidx.glance.Applier
import androidx.glance.GlanceId
@@ -28,17 +30,15 @@
import androidx.glance.LocalContext
import androidx.glance.LocalGlanceId
import androidx.glance.LocalSize
+import androidx.glance.LocalState
import androidx.glance.layout.Alignment
import androidx.glance.layout.EmittableBox
import androidx.glance.layout.fillMaxSize
+import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.currentCoroutineContext
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
-import androidx.compose.runtime.Composition
-import androidx.compose.runtime.CompositionLocalProvider
-import androidx.compose.runtime.Recomposer
-import kotlinx.coroutines.CancellationException
/**
* Object containing the result from composition of [GlanceWearTiles].
diff --git a/glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/NormalizeCompositionTree.kt b/glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/NormalizeCompositionTree.kt
similarity index 100%
rename from glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/NormalizeCompositionTree.kt
rename to glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/NormalizeCompositionTree.kt
diff --git a/glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/TimelineMode.kt b/glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/TimelineMode.kt
similarity index 100%
rename from glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/TimelineMode.kt
rename to glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/TimelineMode.kt
diff --git a/glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/WearCompositionTranslator.kt b/glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/WearCompositionTranslator.kt
similarity index 100%
rename from glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/WearCompositionTranslator.kt
rename to glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/WearCompositionTranslator.kt
diff --git a/glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/action/RunCallbackAction.kt b/glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/action/RunCallbackAction.kt
similarity index 100%
rename from glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/action/RunCallbackAction.kt
rename to glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/action/RunCallbackAction.kt
diff --git a/glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/curved/CurvedProperties.kt b/glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/curved/CurvedProperties.kt
similarity index 100%
rename from glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/curved/CurvedProperties.kt
rename to glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/curved/CurvedProperties.kt
diff --git a/glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/curved/CurvedRow.kt b/glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/curved/CurvedRow.kt
similarity index 99%
rename from glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/curved/CurvedRow.kt
rename to glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/curved/CurvedRow.kt
index c84930b..58489b1 100644
--- a/glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/curved/CurvedRow.kt
+++ b/glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/curved/CurvedRow.kt
@@ -16,12 +16,12 @@
package androidx.glance.wear.tiles.curved
-import androidx.glance.GlanceNode
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.Color
import androidx.glance.Emittable
import androidx.glance.EmittableWithChildren
import androidx.glance.GlanceModifier
+import androidx.glance.GlanceNode
import androidx.glance.unit.ColorProvider
/**
diff --git a/glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/curved/GlanceCurvedModifier.kt b/glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/curved/GlanceCurvedModifier.kt
similarity index 100%
rename from glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/curved/GlanceCurvedModifier.kt
rename to glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/curved/GlanceCurvedModifier.kt
diff --git a/glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/state/GlanceWearTilesState.kt b/glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/state/GlanceWearTilesState.kt
similarity index 100%
rename from glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/state/GlanceWearTilesState.kt
rename to glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/state/GlanceWearTilesState.kt
diff --git a/glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/template/SingleEntityTemplateLayouts.kt b/glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/template/SingleEntityTemplateLayouts.kt
similarity index 100%
rename from glance/glance-wear-tiles/src/androidMain/kotlin/androidx/glance/wear/tiles/template/SingleEntityTemplateLayouts.kt
rename to glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/template/SingleEntityTemplateLayouts.kt
diff --git a/glance/glance-wear-tiles/src/androidMain/res/drawable/glance_single_entity_bg.xml b/glance/glance-wear-tiles/src/main/res/drawable/glance_single_entity_bg.xml
similarity index 100%
rename from glance/glance-wear-tiles/src/androidMain/res/drawable/glance_single_entity_bg.xml
rename to glance/glance-wear-tiles/src/main/res/drawable/glance_single_entity_bg.xml
diff --git a/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/BackgroundTest.kt b/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/BackgroundTest.kt
index 4c7486f..8018dd2 100644
--- a/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/BackgroundTest.kt
+++ b/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/BackgroundTest.kt
@@ -16,18 +16,18 @@
package androidx.glance.wear.tiles
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.toArgb
import androidx.glance.BackgroundModifier
import androidx.glance.GlanceModifier
import androidx.glance.background
import androidx.glance.findModifier
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.toArgb
import androidx.glance.unit.FixedColorProvider
import androidx.glance.unit.ResourceColorProvider
import androidx.glance.wear.tiles.test.R
import com.google.common.truth.Truth.assertThat
-import org.junit.Test
import kotlin.test.assertIs
+import org.junit.Test
class BackgroundTest {
@Test
diff --git a/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/BorderTest.kt b/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/BorderTest.kt
index b38fd4e..6f88fd0 100644
--- a/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/BorderTest.kt
+++ b/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/BorderTest.kt
@@ -24,9 +24,9 @@
import androidx.glance.findModifier
import androidx.glance.unit.ColorProvider
import com.google.common.truth.Truth.assertThat
+import org.junit.Test
import org.mockito.kotlin.doReturn
import org.mockito.kotlin.mock
-import org.junit.Test
class BorderTest {
diff --git a/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/GlanceTileServiceTest.kt b/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/GlanceTileServiceTest.kt
index ce386f6..340ea7b 100644
--- a/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/GlanceTileServiceTest.kt
+++ b/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/GlanceTileServiceTest.kt
@@ -24,39 +24,39 @@
import androidx.core.graphics.drawable.toBitmap
import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.core.stringPreferencesKey
-import androidx.glance.currentState
import androidx.glance.GlanceModifier
import androidx.glance.Image
import androidx.glance.ImageProvider
+import androidx.glance.currentState
import androidx.glance.layout.ContentScale
import androidx.glance.layout.size
import androidx.glance.state.PreferencesGlanceStateDefinition
import androidx.glance.text.Text
import androidx.glance.wear.tiles.test.R
+import androidx.test.core.app.ApplicationProvider.getApplicationContext
import androidx.wear.tiles.RequestBuilders
import androidx.wear.tiles.testing.TestTileClient
-import androidx.test.core.app.ApplicationProvider.getApplicationContext
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
+import java.io.ByteArrayOutputStream
+import java.time.Instant
+import java.util.Arrays
+import kotlin.test.assertIs
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.guava.await
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.TestScope
+import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.runTest
import org.junit.Before
+import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
-import org.robolectric.android.util.concurrent.InlineExecutorService
import org.robolectric.RobolectricTestRunner
import org.robolectric.Shadows.shadowOf
-import java.io.ByteArrayOutputStream
-import java.time.Instant
-import java.util.Arrays
-import kotlin.test.assertIs
-import kotlinx.coroutines.test.UnconfinedTestDispatcher
-import org.junit.Ignore
+import org.robolectric.android.util.concurrent.InlineExecutorService
@OptIn(ExperimentalCoroutinesApi::class, ExperimentalStdlibApi::class)
@RunWith(RobolectricTestRunner::class)
diff --git a/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/TimelineModeTest.kt b/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/TimelineModeTest.kt
index ba8bf2b..d159631 100644
--- a/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/TimelineModeTest.kt
+++ b/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/TimelineModeTest.kt
@@ -17,8 +17,8 @@
package androidx.glance.wear.tiles
import com.google.common.truth.Truth.assertThat
-import org.junit.Test
import java.time.Instant
+import org.junit.Test
class TimelineModeTest {
diff --git a/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/WearCompositionTranslatorTest.kt b/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/WearCompositionTranslatorTest.kt
index b167405..306f8c1 100644
--- a/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/WearCompositionTranslatorTest.kt
+++ b/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/WearCompositionTranslatorTest.kt
@@ -70,6 +70,10 @@
import androidx.glance.wear.tiles.test.R
import androidx.test.core.app.ApplicationProvider.getApplicationContext
import com.google.common.truth.Truth.assertThat
+import java.io.ByteArrayOutputStream
+import java.util.Arrays
+import kotlin.test.assertIs
+import kotlin.test.assertNotNull
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runTest
@@ -77,10 +81,6 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
-import java.io.ByteArrayOutputStream
-import java.util.Arrays
-import kotlin.test.assertIs
-import kotlin.test.assertNotNull
@OptIn(ExperimentalCoroutinesApi::class)
@RunWith(RobolectricTestRunner::class)
diff --git a/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/action/RunCallbackActionTest.kt b/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/action/RunCallbackActionTest.kt
index b4598ab..f0a9c37 100644
--- a/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/action/RunCallbackActionTest.kt
+++ b/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/action/RunCallbackActionTest.kt
@@ -26,13 +26,13 @@
import androidx.glance.wear.tiles.curved.GlanceCurvedModifier
import androidx.glance.wear.tiles.curved.clickable
import androidx.glance.wear.tiles.curved.findModifier
+import kotlin.test.assertIs
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
-import kotlin.test.assertIs
@OptIn(ExperimentalCoroutinesApi::class)
@RunWith(RobolectricTestRunner::class)
diff --git a/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/curved/CurvedRowTest.kt b/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/curved/CurvedRowTest.kt
index 3dfc764..1c6a622 100644
--- a/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/curved/CurvedRowTest.kt
+++ b/glance/glance-wear-tiles/src/test/kotlin/androidx/glance/wear/tiles/curved/CurvedRowTest.kt
@@ -30,12 +30,12 @@
import androidx.glance.unit.ColorProvider
import androidx.glance.wear.tiles.runTestingComposition
import com.google.common.truth.Truth.assertThat
+import kotlin.test.assertIs
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
-import kotlin.test.assertIs
@OptIn(ExperimentalCoroutinesApi::class)
class CurvedRowTest {
diff --git a/glance/glance/api/1.0.0-beta01.txt b/glance/glance/api/1.0.0-beta01.txt
index 47d790f..0b4edd4 100644
--- a/glance/glance/api/1.0.0-beta01.txt
+++ b/glance/glance/api/1.0.0-beta01.txt
@@ -2,10 +2,10 @@
package androidx.glance {
public final class BackgroundKt {
- method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, long color);
- method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, @ColorRes int color);
- method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, androidx.glance.unit.ColorProvider colorProvider);
method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, androidx.glance.ImageProvider imageProvider, optional int contentScale);
+ method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, androidx.glance.unit.ColorProvider colorProvider);
+ method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, @ColorRes int color);
+ method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, long color);
}
public final class ButtonColors {
@@ -95,9 +95,9 @@
public final class ImageKt {
method @androidx.compose.runtime.Composable public static void Image(androidx.glance.ImageProvider provider, String? contentDescription, optional androidx.glance.GlanceModifier modifier, optional int contentScale, optional androidx.glance.ColorFilter? colorFilter);
- method public static androidx.glance.ImageProvider ImageProvider(@DrawableRes int resId);
method public static androidx.glance.ImageProvider ImageProvider(android.graphics.Bitmap bitmap);
method @RequiresApi(android.os.Build.VERSION_CODES.M) public static androidx.glance.ImageProvider ImageProvider(android.graphics.drawable.Icon icon);
+ method public static androidx.glance.ImageProvider ImageProvider(@DrawableRes int resId);
}
public interface ImageProvider {
@@ -170,8 +170,8 @@
public final class StartActivityActionKt {
method public static androidx.glance.action.Action actionStartActivity(android.content.ComponentName componentName, optional androidx.glance.action.ActionParameters parameters);
- method public static <T extends android.app.Activity> androidx.glance.action.Action actionStartActivity(Class<T> activity, optional androidx.glance.action.ActionParameters parameters);
method public static inline <reified T extends android.app.Activity> androidx.glance.action.Action actionStartActivity(optional androidx.glance.action.ActionParameters parameters);
+ method public static <T extends android.app.Activity> androidx.glance.action.Action actionStartActivity(Class<T> activity, optional androidx.glance.action.ActionParameters parameters);
}
}
@@ -342,12 +342,12 @@
public final class PaddingKt {
method public static androidx.glance.GlanceModifier absolutePadding(androidx.glance.GlanceModifier, optional float left, optional float top, optional float right, optional float bottom);
method public static androidx.glance.GlanceModifier absolutePadding(androidx.glance.GlanceModifier, optional @DimenRes int left, optional @DimenRes int top, optional @DimenRes int right, optional @DimenRes int bottom);
- method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional float start, optional float top, optional float end, optional float bottom);
- method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional @DimenRes int start, optional @DimenRes int top, optional @DimenRes int end, optional @DimenRes int bottom);
- method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional float horizontal, optional float vertical);
- method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional @DimenRes int horizontal, optional @DimenRes int vertical);
method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, float all);
+ method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional float horizontal, optional float vertical);
+ method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional float start, optional float top, optional float end, optional float bottom);
method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, @DimenRes int all);
+ method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional @DimenRes int horizontal, optional @DimenRes int vertical);
+ method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional @DimenRes int start, optional @DimenRes int top, optional @DimenRes int end, optional @DimenRes int bottom);
}
public final class RowKt {
@@ -365,8 +365,8 @@
method public static androidx.glance.GlanceModifier height(androidx.glance.GlanceModifier, float height);
method public static androidx.glance.GlanceModifier height(androidx.glance.GlanceModifier, @DimenRes int height);
method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, float size);
- method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, @DimenRes int size);
method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, float width, float height);
+ method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, @DimenRes int size);
method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, @DimenRes int width, @DimenRes int height);
method public static androidx.glance.GlanceModifier width(androidx.glance.GlanceModifier, float width);
method public static androidx.glance.GlanceModifier width(androidx.glance.GlanceModifier, @DimenRes int width);
diff --git a/glance/glance/api/public_plus_experimental_current.txt b/glance/glance/api/1.0.0-beta02.txt
similarity index 99%
rename from glance/glance/api/public_plus_experimental_current.txt
rename to glance/glance/api/1.0.0-beta02.txt
index 47d790f..0b4edd4 100644
--- a/glance/glance/api/public_plus_experimental_current.txt
+++ b/glance/glance/api/1.0.0-beta02.txt
@@ -2,10 +2,10 @@
package androidx.glance {
public final class BackgroundKt {
- method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, long color);
- method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, @ColorRes int color);
- method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, androidx.glance.unit.ColorProvider colorProvider);
method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, androidx.glance.ImageProvider imageProvider, optional int contentScale);
+ method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, androidx.glance.unit.ColorProvider colorProvider);
+ method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, @ColorRes int color);
+ method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, long color);
}
public final class ButtonColors {
@@ -95,9 +95,9 @@
public final class ImageKt {
method @androidx.compose.runtime.Composable public static void Image(androidx.glance.ImageProvider provider, String? contentDescription, optional androidx.glance.GlanceModifier modifier, optional int contentScale, optional androidx.glance.ColorFilter? colorFilter);
- method public static androidx.glance.ImageProvider ImageProvider(@DrawableRes int resId);
method public static androidx.glance.ImageProvider ImageProvider(android.graphics.Bitmap bitmap);
method @RequiresApi(android.os.Build.VERSION_CODES.M) public static androidx.glance.ImageProvider ImageProvider(android.graphics.drawable.Icon icon);
+ method public static androidx.glance.ImageProvider ImageProvider(@DrawableRes int resId);
}
public interface ImageProvider {
@@ -170,8 +170,8 @@
public final class StartActivityActionKt {
method public static androidx.glance.action.Action actionStartActivity(android.content.ComponentName componentName, optional androidx.glance.action.ActionParameters parameters);
- method public static <T extends android.app.Activity> androidx.glance.action.Action actionStartActivity(Class<T> activity, optional androidx.glance.action.ActionParameters parameters);
method public static inline <reified T extends android.app.Activity> androidx.glance.action.Action actionStartActivity(optional androidx.glance.action.ActionParameters parameters);
+ method public static <T extends android.app.Activity> androidx.glance.action.Action actionStartActivity(Class<T> activity, optional androidx.glance.action.ActionParameters parameters);
}
}
@@ -342,12 +342,12 @@
public final class PaddingKt {
method public static androidx.glance.GlanceModifier absolutePadding(androidx.glance.GlanceModifier, optional float left, optional float top, optional float right, optional float bottom);
method public static androidx.glance.GlanceModifier absolutePadding(androidx.glance.GlanceModifier, optional @DimenRes int left, optional @DimenRes int top, optional @DimenRes int right, optional @DimenRes int bottom);
- method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional float start, optional float top, optional float end, optional float bottom);
- method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional @DimenRes int start, optional @DimenRes int top, optional @DimenRes int end, optional @DimenRes int bottom);
- method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional float horizontal, optional float vertical);
- method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional @DimenRes int horizontal, optional @DimenRes int vertical);
method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, float all);
+ method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional float horizontal, optional float vertical);
+ method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional float start, optional float top, optional float end, optional float bottom);
method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, @DimenRes int all);
+ method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional @DimenRes int horizontal, optional @DimenRes int vertical);
+ method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional @DimenRes int start, optional @DimenRes int top, optional @DimenRes int end, optional @DimenRes int bottom);
}
public final class RowKt {
@@ -365,8 +365,8 @@
method public static androidx.glance.GlanceModifier height(androidx.glance.GlanceModifier, float height);
method public static androidx.glance.GlanceModifier height(androidx.glance.GlanceModifier, @DimenRes int height);
method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, float size);
- method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, @DimenRes int size);
method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, float width, float height);
+ method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, @DimenRes int size);
method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, @DimenRes int width, @DimenRes int height);
method public static androidx.glance.GlanceModifier width(androidx.glance.GlanceModifier, float width);
method public static androidx.glance.GlanceModifier width(androidx.glance.GlanceModifier, @DimenRes int width);
diff --git a/glance/glance/api/current.txt b/glance/glance/api/current.txt
index 47d790f..0b4edd4 100644
--- a/glance/glance/api/current.txt
+++ b/glance/glance/api/current.txt
@@ -2,10 +2,10 @@
package androidx.glance {
public final class BackgroundKt {
- method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, long color);
- method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, @ColorRes int color);
- method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, androidx.glance.unit.ColorProvider colorProvider);
method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, androidx.glance.ImageProvider imageProvider, optional int contentScale);
+ method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, androidx.glance.unit.ColorProvider colorProvider);
+ method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, @ColorRes int color);
+ method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, long color);
}
public final class ButtonColors {
@@ -95,9 +95,9 @@
public final class ImageKt {
method @androidx.compose.runtime.Composable public static void Image(androidx.glance.ImageProvider provider, String? contentDescription, optional androidx.glance.GlanceModifier modifier, optional int contentScale, optional androidx.glance.ColorFilter? colorFilter);
- method public static androidx.glance.ImageProvider ImageProvider(@DrawableRes int resId);
method public static androidx.glance.ImageProvider ImageProvider(android.graphics.Bitmap bitmap);
method @RequiresApi(android.os.Build.VERSION_CODES.M) public static androidx.glance.ImageProvider ImageProvider(android.graphics.drawable.Icon icon);
+ method public static androidx.glance.ImageProvider ImageProvider(@DrawableRes int resId);
}
public interface ImageProvider {
@@ -170,8 +170,8 @@
public final class StartActivityActionKt {
method public static androidx.glance.action.Action actionStartActivity(android.content.ComponentName componentName, optional androidx.glance.action.ActionParameters parameters);
- method public static <T extends android.app.Activity> androidx.glance.action.Action actionStartActivity(Class<T> activity, optional androidx.glance.action.ActionParameters parameters);
method public static inline <reified T extends android.app.Activity> androidx.glance.action.Action actionStartActivity(optional androidx.glance.action.ActionParameters parameters);
+ method public static <T extends android.app.Activity> androidx.glance.action.Action actionStartActivity(Class<T> activity, optional androidx.glance.action.ActionParameters parameters);
}
}
@@ -342,12 +342,12 @@
public final class PaddingKt {
method public static androidx.glance.GlanceModifier absolutePadding(androidx.glance.GlanceModifier, optional float left, optional float top, optional float right, optional float bottom);
method public static androidx.glance.GlanceModifier absolutePadding(androidx.glance.GlanceModifier, optional @DimenRes int left, optional @DimenRes int top, optional @DimenRes int right, optional @DimenRes int bottom);
- method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional float start, optional float top, optional float end, optional float bottom);
- method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional @DimenRes int start, optional @DimenRes int top, optional @DimenRes int end, optional @DimenRes int bottom);
- method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional float horizontal, optional float vertical);
- method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional @DimenRes int horizontal, optional @DimenRes int vertical);
method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, float all);
+ method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional float horizontal, optional float vertical);
+ method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional float start, optional float top, optional float end, optional float bottom);
method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, @DimenRes int all);
+ method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional @DimenRes int horizontal, optional @DimenRes int vertical);
+ method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional @DimenRes int start, optional @DimenRes int top, optional @DimenRes int end, optional @DimenRes int bottom);
}
public final class RowKt {
@@ -365,8 +365,8 @@
method public static androidx.glance.GlanceModifier height(androidx.glance.GlanceModifier, float height);
method public static androidx.glance.GlanceModifier height(androidx.glance.GlanceModifier, @DimenRes int height);
method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, float size);
- method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, @DimenRes int size);
method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, float width, float height);
+ method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, @DimenRes int size);
method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, @DimenRes int width, @DimenRes int height);
method public static androidx.glance.GlanceModifier width(androidx.glance.GlanceModifier, float width);
method public static androidx.glance.GlanceModifier width(androidx.glance.GlanceModifier, @DimenRes int width);
diff --git a/glance/glance/api/public_plus_experimental_1.0.0-beta01.txt b/glance/glance/api/public_plus_experimental_1.0.0-beta01.txt
index 47d790f..0b4edd4 100644
--- a/glance/glance/api/public_plus_experimental_1.0.0-beta01.txt
+++ b/glance/glance/api/public_plus_experimental_1.0.0-beta01.txt
@@ -2,10 +2,10 @@
package androidx.glance {
public final class BackgroundKt {
- method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, long color);
- method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, @ColorRes int color);
- method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, androidx.glance.unit.ColorProvider colorProvider);
method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, androidx.glance.ImageProvider imageProvider, optional int contentScale);
+ method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, androidx.glance.unit.ColorProvider colorProvider);
+ method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, @ColorRes int color);
+ method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, long color);
}
public final class ButtonColors {
@@ -95,9 +95,9 @@
public final class ImageKt {
method @androidx.compose.runtime.Composable public static void Image(androidx.glance.ImageProvider provider, String? contentDescription, optional androidx.glance.GlanceModifier modifier, optional int contentScale, optional androidx.glance.ColorFilter? colorFilter);
- method public static androidx.glance.ImageProvider ImageProvider(@DrawableRes int resId);
method public static androidx.glance.ImageProvider ImageProvider(android.graphics.Bitmap bitmap);
method @RequiresApi(android.os.Build.VERSION_CODES.M) public static androidx.glance.ImageProvider ImageProvider(android.graphics.drawable.Icon icon);
+ method public static androidx.glance.ImageProvider ImageProvider(@DrawableRes int resId);
}
public interface ImageProvider {
@@ -170,8 +170,8 @@
public final class StartActivityActionKt {
method public static androidx.glance.action.Action actionStartActivity(android.content.ComponentName componentName, optional androidx.glance.action.ActionParameters parameters);
- method public static <T extends android.app.Activity> androidx.glance.action.Action actionStartActivity(Class<T> activity, optional androidx.glance.action.ActionParameters parameters);
method public static inline <reified T extends android.app.Activity> androidx.glance.action.Action actionStartActivity(optional androidx.glance.action.ActionParameters parameters);
+ method public static <T extends android.app.Activity> androidx.glance.action.Action actionStartActivity(Class<T> activity, optional androidx.glance.action.ActionParameters parameters);
}
}
@@ -342,12 +342,12 @@
public final class PaddingKt {
method public static androidx.glance.GlanceModifier absolutePadding(androidx.glance.GlanceModifier, optional float left, optional float top, optional float right, optional float bottom);
method public static androidx.glance.GlanceModifier absolutePadding(androidx.glance.GlanceModifier, optional @DimenRes int left, optional @DimenRes int top, optional @DimenRes int right, optional @DimenRes int bottom);
- method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional float start, optional float top, optional float end, optional float bottom);
- method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional @DimenRes int start, optional @DimenRes int top, optional @DimenRes int end, optional @DimenRes int bottom);
- method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional float horizontal, optional float vertical);
- method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional @DimenRes int horizontal, optional @DimenRes int vertical);
method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, float all);
+ method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional float horizontal, optional float vertical);
+ method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional float start, optional float top, optional float end, optional float bottom);
method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, @DimenRes int all);
+ method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional @DimenRes int horizontal, optional @DimenRes int vertical);
+ method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional @DimenRes int start, optional @DimenRes int top, optional @DimenRes int end, optional @DimenRes int bottom);
}
public final class RowKt {
@@ -365,8 +365,8 @@
method public static androidx.glance.GlanceModifier height(androidx.glance.GlanceModifier, float height);
method public static androidx.glance.GlanceModifier height(androidx.glance.GlanceModifier, @DimenRes int height);
method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, float size);
- method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, @DimenRes int size);
method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, float width, float height);
+ method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, @DimenRes int size);
method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, @DimenRes int width, @DimenRes int height);
method public static androidx.glance.GlanceModifier width(androidx.glance.GlanceModifier, float width);
method public static androidx.glance.GlanceModifier width(androidx.glance.GlanceModifier, @DimenRes int width);
diff --git a/glance/glance/api/res-1.0.0-beta02.txt b/glance/glance/api/res-1.0.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/glance/glance/api/res-1.0.0-beta02.txt
diff --git a/glance/glance/api/restricted_1.0.0-beta01.txt b/glance/glance/api/restricted_1.0.0-beta01.txt
index 47d790f..0b4edd4 100644
--- a/glance/glance/api/restricted_1.0.0-beta01.txt
+++ b/glance/glance/api/restricted_1.0.0-beta01.txt
@@ -2,10 +2,10 @@
package androidx.glance {
public final class BackgroundKt {
- method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, long color);
- method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, @ColorRes int color);
- method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, androidx.glance.unit.ColorProvider colorProvider);
method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, androidx.glance.ImageProvider imageProvider, optional int contentScale);
+ method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, androidx.glance.unit.ColorProvider colorProvider);
+ method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, @ColorRes int color);
+ method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, long color);
}
public final class ButtonColors {
@@ -95,9 +95,9 @@
public final class ImageKt {
method @androidx.compose.runtime.Composable public static void Image(androidx.glance.ImageProvider provider, String? contentDescription, optional androidx.glance.GlanceModifier modifier, optional int contentScale, optional androidx.glance.ColorFilter? colorFilter);
- method public static androidx.glance.ImageProvider ImageProvider(@DrawableRes int resId);
method public static androidx.glance.ImageProvider ImageProvider(android.graphics.Bitmap bitmap);
method @RequiresApi(android.os.Build.VERSION_CODES.M) public static androidx.glance.ImageProvider ImageProvider(android.graphics.drawable.Icon icon);
+ method public static androidx.glance.ImageProvider ImageProvider(@DrawableRes int resId);
}
public interface ImageProvider {
@@ -170,8 +170,8 @@
public final class StartActivityActionKt {
method public static androidx.glance.action.Action actionStartActivity(android.content.ComponentName componentName, optional androidx.glance.action.ActionParameters parameters);
- method public static <T extends android.app.Activity> androidx.glance.action.Action actionStartActivity(Class<T> activity, optional androidx.glance.action.ActionParameters parameters);
method public static inline <reified T extends android.app.Activity> androidx.glance.action.Action actionStartActivity(optional androidx.glance.action.ActionParameters parameters);
+ method public static <T extends android.app.Activity> androidx.glance.action.Action actionStartActivity(Class<T> activity, optional androidx.glance.action.ActionParameters parameters);
}
}
@@ -342,12 +342,12 @@
public final class PaddingKt {
method public static androidx.glance.GlanceModifier absolutePadding(androidx.glance.GlanceModifier, optional float left, optional float top, optional float right, optional float bottom);
method public static androidx.glance.GlanceModifier absolutePadding(androidx.glance.GlanceModifier, optional @DimenRes int left, optional @DimenRes int top, optional @DimenRes int right, optional @DimenRes int bottom);
- method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional float start, optional float top, optional float end, optional float bottom);
- method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional @DimenRes int start, optional @DimenRes int top, optional @DimenRes int end, optional @DimenRes int bottom);
- method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional float horizontal, optional float vertical);
- method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional @DimenRes int horizontal, optional @DimenRes int vertical);
method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, float all);
+ method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional float horizontal, optional float vertical);
+ method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional float start, optional float top, optional float end, optional float bottom);
method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, @DimenRes int all);
+ method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional @DimenRes int horizontal, optional @DimenRes int vertical);
+ method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional @DimenRes int start, optional @DimenRes int top, optional @DimenRes int end, optional @DimenRes int bottom);
}
public final class RowKt {
@@ -365,8 +365,8 @@
method public static androidx.glance.GlanceModifier height(androidx.glance.GlanceModifier, float height);
method public static androidx.glance.GlanceModifier height(androidx.glance.GlanceModifier, @DimenRes int height);
method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, float size);
- method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, @DimenRes int size);
method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, float width, float height);
+ method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, @DimenRes int size);
method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, @DimenRes int width, @DimenRes int height);
method public static androidx.glance.GlanceModifier width(androidx.glance.GlanceModifier, float width);
method public static androidx.glance.GlanceModifier width(androidx.glance.GlanceModifier, @DimenRes int width);
diff --git a/glance/glance/api/public_plus_experimental_current.txt b/glance/glance/api/restricted_1.0.0-beta02.txt
similarity index 99%
copy from glance/glance/api/public_plus_experimental_current.txt
copy to glance/glance/api/restricted_1.0.0-beta02.txt
index 47d790f..0b4edd4 100644
--- a/glance/glance/api/public_plus_experimental_current.txt
+++ b/glance/glance/api/restricted_1.0.0-beta02.txt
@@ -2,10 +2,10 @@
package androidx.glance {
public final class BackgroundKt {
- method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, long color);
- method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, @ColorRes int color);
- method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, androidx.glance.unit.ColorProvider colorProvider);
method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, androidx.glance.ImageProvider imageProvider, optional int contentScale);
+ method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, androidx.glance.unit.ColorProvider colorProvider);
+ method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, @ColorRes int color);
+ method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, long color);
}
public final class ButtonColors {
@@ -95,9 +95,9 @@
public final class ImageKt {
method @androidx.compose.runtime.Composable public static void Image(androidx.glance.ImageProvider provider, String? contentDescription, optional androidx.glance.GlanceModifier modifier, optional int contentScale, optional androidx.glance.ColorFilter? colorFilter);
- method public static androidx.glance.ImageProvider ImageProvider(@DrawableRes int resId);
method public static androidx.glance.ImageProvider ImageProvider(android.graphics.Bitmap bitmap);
method @RequiresApi(android.os.Build.VERSION_CODES.M) public static androidx.glance.ImageProvider ImageProvider(android.graphics.drawable.Icon icon);
+ method public static androidx.glance.ImageProvider ImageProvider(@DrawableRes int resId);
}
public interface ImageProvider {
@@ -170,8 +170,8 @@
public final class StartActivityActionKt {
method public static androidx.glance.action.Action actionStartActivity(android.content.ComponentName componentName, optional androidx.glance.action.ActionParameters parameters);
- method public static <T extends android.app.Activity> androidx.glance.action.Action actionStartActivity(Class<T> activity, optional androidx.glance.action.ActionParameters parameters);
method public static inline <reified T extends android.app.Activity> androidx.glance.action.Action actionStartActivity(optional androidx.glance.action.ActionParameters parameters);
+ method public static <T extends android.app.Activity> androidx.glance.action.Action actionStartActivity(Class<T> activity, optional androidx.glance.action.ActionParameters parameters);
}
}
@@ -342,12 +342,12 @@
public final class PaddingKt {
method public static androidx.glance.GlanceModifier absolutePadding(androidx.glance.GlanceModifier, optional float left, optional float top, optional float right, optional float bottom);
method public static androidx.glance.GlanceModifier absolutePadding(androidx.glance.GlanceModifier, optional @DimenRes int left, optional @DimenRes int top, optional @DimenRes int right, optional @DimenRes int bottom);
- method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional float start, optional float top, optional float end, optional float bottom);
- method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional @DimenRes int start, optional @DimenRes int top, optional @DimenRes int end, optional @DimenRes int bottom);
- method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional float horizontal, optional float vertical);
- method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional @DimenRes int horizontal, optional @DimenRes int vertical);
method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, float all);
+ method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional float horizontal, optional float vertical);
+ method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional float start, optional float top, optional float end, optional float bottom);
method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, @DimenRes int all);
+ method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional @DimenRes int horizontal, optional @DimenRes int vertical);
+ method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional @DimenRes int start, optional @DimenRes int top, optional @DimenRes int end, optional @DimenRes int bottom);
}
public final class RowKt {
@@ -365,8 +365,8 @@
method public static androidx.glance.GlanceModifier height(androidx.glance.GlanceModifier, float height);
method public static androidx.glance.GlanceModifier height(androidx.glance.GlanceModifier, @DimenRes int height);
method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, float size);
- method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, @DimenRes int size);
method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, float width, float height);
+ method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, @DimenRes int size);
method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, @DimenRes int width, @DimenRes int height);
method public static androidx.glance.GlanceModifier width(androidx.glance.GlanceModifier, float width);
method public static androidx.glance.GlanceModifier width(androidx.glance.GlanceModifier, @DimenRes int width);
diff --git a/glance/glance/api/restricted_current.txt b/glance/glance/api/restricted_current.txt
index 47d790f..0b4edd4 100644
--- a/glance/glance/api/restricted_current.txt
+++ b/glance/glance/api/restricted_current.txt
@@ -2,10 +2,10 @@
package androidx.glance {
public final class BackgroundKt {
- method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, long color);
- method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, @ColorRes int color);
- method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, androidx.glance.unit.ColorProvider colorProvider);
method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, androidx.glance.ImageProvider imageProvider, optional int contentScale);
+ method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, androidx.glance.unit.ColorProvider colorProvider);
+ method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, @ColorRes int color);
+ method public static androidx.glance.GlanceModifier background(androidx.glance.GlanceModifier, long color);
}
public final class ButtonColors {
@@ -95,9 +95,9 @@
public final class ImageKt {
method @androidx.compose.runtime.Composable public static void Image(androidx.glance.ImageProvider provider, String? contentDescription, optional androidx.glance.GlanceModifier modifier, optional int contentScale, optional androidx.glance.ColorFilter? colorFilter);
- method public static androidx.glance.ImageProvider ImageProvider(@DrawableRes int resId);
method public static androidx.glance.ImageProvider ImageProvider(android.graphics.Bitmap bitmap);
method @RequiresApi(android.os.Build.VERSION_CODES.M) public static androidx.glance.ImageProvider ImageProvider(android.graphics.drawable.Icon icon);
+ method public static androidx.glance.ImageProvider ImageProvider(@DrawableRes int resId);
}
public interface ImageProvider {
@@ -170,8 +170,8 @@
public final class StartActivityActionKt {
method public static androidx.glance.action.Action actionStartActivity(android.content.ComponentName componentName, optional androidx.glance.action.ActionParameters parameters);
- method public static <T extends android.app.Activity> androidx.glance.action.Action actionStartActivity(Class<T> activity, optional androidx.glance.action.ActionParameters parameters);
method public static inline <reified T extends android.app.Activity> androidx.glance.action.Action actionStartActivity(optional androidx.glance.action.ActionParameters parameters);
+ method public static <T extends android.app.Activity> androidx.glance.action.Action actionStartActivity(Class<T> activity, optional androidx.glance.action.ActionParameters parameters);
}
}
@@ -342,12 +342,12 @@
public final class PaddingKt {
method public static androidx.glance.GlanceModifier absolutePadding(androidx.glance.GlanceModifier, optional float left, optional float top, optional float right, optional float bottom);
method public static androidx.glance.GlanceModifier absolutePadding(androidx.glance.GlanceModifier, optional @DimenRes int left, optional @DimenRes int top, optional @DimenRes int right, optional @DimenRes int bottom);
- method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional float start, optional float top, optional float end, optional float bottom);
- method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional @DimenRes int start, optional @DimenRes int top, optional @DimenRes int end, optional @DimenRes int bottom);
- method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional float horizontal, optional float vertical);
- method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional @DimenRes int horizontal, optional @DimenRes int vertical);
method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, float all);
+ method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional float horizontal, optional float vertical);
+ method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional float start, optional float top, optional float end, optional float bottom);
method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, @DimenRes int all);
+ method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional @DimenRes int horizontal, optional @DimenRes int vertical);
+ method public static androidx.glance.GlanceModifier padding(androidx.glance.GlanceModifier, optional @DimenRes int start, optional @DimenRes int top, optional @DimenRes int end, optional @DimenRes int bottom);
}
public final class RowKt {
@@ -365,8 +365,8 @@
method public static androidx.glance.GlanceModifier height(androidx.glance.GlanceModifier, float height);
method public static androidx.glance.GlanceModifier height(androidx.glance.GlanceModifier, @DimenRes int height);
method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, float size);
- method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, @DimenRes int size);
method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, float width, float height);
+ method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, @DimenRes int size);
method public static androidx.glance.GlanceModifier size(androidx.glance.GlanceModifier, @DimenRes int width, @DimenRes int height);
method public static androidx.glance.GlanceModifier width(androidx.glance.GlanceModifier, float width);
method public static androidx.glance.GlanceModifier width(androidx.glance.GlanceModifier, @DimenRes int width);
diff --git a/glance/glance/build.gradle b/glance/glance/build.gradle
index 68ec157..0a8e136 100644
--- a/glance/glance/build.gradle
+++ b/glance/glance/build.gradle
@@ -15,18 +15,14 @@
*/
import androidx.build.LibraryType
-import androidx.build.Publish
-import androidx.build.AndroidXComposePlugin
plugins {
id("AndroidXPlugin")
id("com.android.library")
+ id("org.jetbrains.kotlin.android")
id("AndroidXComposePlugin")
}
-// Disable multi-platform; this will only be used on Android.
-AndroidXComposePlugin.applyAndConfigureKotlinPlugin(project, /* isMultiplatformEnabled= */false)
-
dependencies {
api("androidx.annotation:annotation:1.2.0")
@@ -88,7 +84,7 @@
}
androidx {
- name = "Glance Core Library"
+ name = "Glance"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2021"
description = "Glance allows developers to build layouts for remote surfaces using a Jetpack " +
diff --git a/glance/glance/src/androidAndroidTest/AndroidManifest.xml b/glance/glance/src/androidTest/AndroidManifest.xml
similarity index 100%
rename from glance/glance/src/androidAndroidTest/AndroidManifest.xml
rename to glance/glance/src/androidTest/AndroidManifest.xml
diff --git a/glance/glance/src/androidAndroidTest/kotlin/androidx/glance/session/GlanceSessionManagerTest.kt b/glance/glance/src/androidTest/kotlin/androidx/glance/session/GlanceSessionManagerTest.kt
similarity index 100%
rename from glance/glance/src/androidAndroidTest/kotlin/androidx/glance/session/GlanceSessionManagerTest.kt
rename to glance/glance/src/androidTest/kotlin/androidx/glance/session/GlanceSessionManagerTest.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/Applier.kt b/glance/glance/src/main/java/androidx/glance/Applier.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/Applier.kt
rename to glance/glance/src/main/java/androidx/glance/Applier.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/Background.kt b/glance/glance/src/main/java/androidx/glance/Background.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/Background.kt
rename to glance/glance/src/main/java/androidx/glance/Background.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/Button.kt b/glance/glance/src/main/java/androidx/glance/Button.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/Button.kt
rename to glance/glance/src/main/java/androidx/glance/Button.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/CompositionLocals.kt b/glance/glance/src/main/java/androidx/glance/CompositionLocals.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/CompositionLocals.kt
rename to glance/glance/src/main/java/androidx/glance/CompositionLocals.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/Emittables.kt b/glance/glance/src/main/java/androidx/glance/Emittables.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/Emittables.kt
rename to glance/glance/src/main/java/androidx/glance/Emittables.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/GlanceComposable.kt b/glance/glance/src/main/java/androidx/glance/GlanceComposable.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/GlanceComposable.kt
rename to glance/glance/src/main/java/androidx/glance/GlanceComposable.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/GlanceId.kt b/glance/glance/src/main/java/androidx/glance/GlanceId.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/GlanceId.kt
rename to glance/glance/src/main/java/androidx/glance/GlanceId.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/GlanceModifier.kt b/glance/glance/src/main/java/androidx/glance/GlanceModifier.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/GlanceModifier.kt
rename to glance/glance/src/main/java/androidx/glance/GlanceModifier.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/GlanceNode.kt b/glance/glance/src/main/java/androidx/glance/GlanceNode.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/GlanceNode.kt
rename to glance/glance/src/main/java/androidx/glance/GlanceNode.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/GlanceTheme.kt b/glance/glance/src/main/java/androidx/glance/GlanceTheme.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/GlanceTheme.kt
rename to glance/glance/src/main/java/androidx/glance/GlanceTheme.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/Image.kt b/glance/glance/src/main/java/androidx/glance/Image.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/Image.kt
rename to glance/glance/src/main/java/androidx/glance/Image.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/Utils.kt b/glance/glance/src/main/java/androidx/glance/Utils.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/Utils.kt
rename to glance/glance/src/main/java/androidx/glance/Utils.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/Visibility.kt b/glance/glance/src/main/java/androidx/glance/Visibility.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/Visibility.kt
rename to glance/glance/src/main/java/androidx/glance/Visibility.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/action/Action.kt b/glance/glance/src/main/java/androidx/glance/action/Action.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/action/Action.kt
rename to glance/glance/src/main/java/androidx/glance/action/Action.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/action/ActionParameters.kt b/glance/glance/src/main/java/androidx/glance/action/ActionParameters.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/action/ActionParameters.kt
rename to glance/glance/src/main/java/androidx/glance/action/ActionParameters.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/action/LambdaAction.kt b/glance/glance/src/main/java/androidx/glance/action/LambdaAction.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/action/LambdaAction.kt
rename to glance/glance/src/main/java/androidx/glance/action/LambdaAction.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/action/StartActivityAction.kt b/glance/glance/src/main/java/androidx/glance/action/StartActivityAction.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/action/StartActivityAction.kt
rename to glance/glance/src/main/java/androidx/glance/action/StartActivityAction.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/color/ColorProviders.kt b/glance/glance/src/main/java/androidx/glance/color/ColorProviders.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/color/ColorProviders.kt
rename to glance/glance/src/main/java/androidx/glance/color/ColorProviders.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/color/DayNightColorProviders.kt b/glance/glance/src/main/java/androidx/glance/color/DayNightColorProviders.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/color/DayNightColorProviders.kt
rename to glance/glance/src/main/java/androidx/glance/color/DayNightColorProviders.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/layout/Alignment.kt b/glance/glance/src/main/java/androidx/glance/layout/Alignment.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/layout/Alignment.kt
rename to glance/glance/src/main/java/androidx/glance/layout/Alignment.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/layout/Box.kt b/glance/glance/src/main/java/androidx/glance/layout/Box.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/layout/Box.kt
rename to glance/glance/src/main/java/androidx/glance/layout/Box.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/layout/Column.kt b/glance/glance/src/main/java/androidx/glance/layout/Column.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/layout/Column.kt
rename to glance/glance/src/main/java/androidx/glance/layout/Column.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/layout/ContentScale.kt b/glance/glance/src/main/java/androidx/glance/layout/ContentScale.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/layout/ContentScale.kt
rename to glance/glance/src/main/java/androidx/glance/layout/ContentScale.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/layout/Padding.kt b/glance/glance/src/main/java/androidx/glance/layout/Padding.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/layout/Padding.kt
rename to glance/glance/src/main/java/androidx/glance/layout/Padding.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/layout/Row.kt b/glance/glance/src/main/java/androidx/glance/layout/Row.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/layout/Row.kt
rename to glance/glance/src/main/java/androidx/glance/layout/Row.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/layout/SizeModifiers.kt b/glance/glance/src/main/java/androidx/glance/layout/SizeModifiers.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/layout/SizeModifiers.kt
rename to glance/glance/src/main/java/androidx/glance/layout/SizeModifiers.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/layout/Spacer.kt b/glance/glance/src/main/java/androidx/glance/layout/Spacer.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/layout/Spacer.kt
rename to glance/glance/src/main/java/androidx/glance/layout/Spacer.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/semantics/SemanticsModifier.kt b/glance/glance/src/main/java/androidx/glance/semantics/SemanticsModifier.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/semantics/SemanticsModifier.kt
rename to glance/glance/src/main/java/androidx/glance/semantics/SemanticsModifier.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/semantics/SemanticsProperties.kt b/glance/glance/src/main/java/androidx/glance/semantics/SemanticsProperties.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/semantics/SemanticsProperties.kt
rename to glance/glance/src/main/java/androidx/glance/semantics/SemanticsProperties.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/session/GlobalSnapshotManager.kt b/glance/glance/src/main/java/androidx/glance/session/GlobalSnapshotManager.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/session/GlobalSnapshotManager.kt
rename to glance/glance/src/main/java/androidx/glance/session/GlobalSnapshotManager.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/session/IdleEventBroadcastReceiver.kt b/glance/glance/src/main/java/androidx/glance/session/IdleEventBroadcastReceiver.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/session/IdleEventBroadcastReceiver.kt
rename to glance/glance/src/main/java/androidx/glance/session/IdleEventBroadcastReceiver.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/session/InteractiveFrameClock.kt b/glance/glance/src/main/java/androidx/glance/session/InteractiveFrameClock.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/session/InteractiveFrameClock.kt
rename to glance/glance/src/main/java/androidx/glance/session/InteractiveFrameClock.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/session/Session.kt b/glance/glance/src/main/java/androidx/glance/session/Session.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/session/Session.kt
rename to glance/glance/src/main/java/androidx/glance/session/Session.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/session/SessionManager.kt b/glance/glance/src/main/java/androidx/glance/session/SessionManager.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/session/SessionManager.kt
rename to glance/glance/src/main/java/androidx/glance/session/SessionManager.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/session/SessionWorker.kt b/glance/glance/src/main/java/androidx/glance/session/SessionWorker.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/session/SessionWorker.kt
rename to glance/glance/src/main/java/androidx/glance/session/SessionWorker.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/session/TimerScope.kt b/glance/glance/src/main/java/androidx/glance/session/TimerScope.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/session/TimerScope.kt
rename to glance/glance/src/main/java/androidx/glance/session/TimerScope.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/state/GlanceStateDefinition.kt b/glance/glance/src/main/java/androidx/glance/state/GlanceStateDefinition.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/state/GlanceStateDefinition.kt
rename to glance/glance/src/main/java/androidx/glance/state/GlanceStateDefinition.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/text/FontFamily.kt b/glance/glance/src/main/java/androidx/glance/text/FontFamily.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/text/FontFamily.kt
rename to glance/glance/src/main/java/androidx/glance/text/FontFamily.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/text/FontStyle.kt b/glance/glance/src/main/java/androidx/glance/text/FontStyle.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/text/FontStyle.kt
rename to glance/glance/src/main/java/androidx/glance/text/FontStyle.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/text/FontWeight.kt b/glance/glance/src/main/java/androidx/glance/text/FontWeight.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/text/FontWeight.kt
rename to glance/glance/src/main/java/androidx/glance/text/FontWeight.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/text/Text.kt b/glance/glance/src/main/java/androidx/glance/text/Text.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/text/Text.kt
rename to glance/glance/src/main/java/androidx/glance/text/Text.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/text/TextAlign.kt b/glance/glance/src/main/java/androidx/glance/text/TextAlign.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/text/TextAlign.kt
rename to glance/glance/src/main/java/androidx/glance/text/TextAlign.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/text/TextDecoration.kt b/glance/glance/src/main/java/androidx/glance/text/TextDecoration.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/text/TextDecoration.kt
rename to glance/glance/src/main/java/androidx/glance/text/TextDecoration.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/text/TextStyle.kt b/glance/glance/src/main/java/androidx/glance/text/TextStyle.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/text/TextStyle.kt
rename to glance/glance/src/main/java/androidx/glance/text/TextStyle.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/unit/ColorProvider.kt b/glance/glance/src/main/java/androidx/glance/unit/ColorProvider.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/unit/ColorProvider.kt
rename to glance/glance/src/main/java/androidx/glance/unit/ColorProvider.kt
diff --git a/glance/glance/src/androidMain/kotlin/androidx/glance/unit/Dimension.kt b/glance/glance/src/main/java/androidx/glance/unit/Dimension.kt
similarity index 100%
rename from glance/glance/src/androidMain/kotlin/androidx/glance/unit/Dimension.kt
rename to glance/glance/src/main/java/androidx/glance/unit/Dimension.kt
diff --git a/glance/glance/src/androidMain/res/values-night-v31/colors.xml b/glance/glance/src/main/res/values-night-v31/colors.xml
similarity index 100%
rename from glance/glance/src/androidMain/res/values-night-v31/colors.xml
rename to glance/glance/src/main/res/values-night-v31/colors.xml
diff --git a/glance/glance/src/androidMain/res/values-night/colors.xml b/glance/glance/src/main/res/values-night/colors.xml
similarity index 100%
rename from glance/glance/src/androidMain/res/values-night/colors.xml
rename to glance/glance/src/main/res/values-night/colors.xml
diff --git a/glance/glance/src/androidMain/res/values-v31/colors.xml b/glance/glance/src/main/res/values-v31/colors.xml
similarity index 100%
rename from glance/glance/src/androidMain/res/values-v31/colors.xml
rename to glance/glance/src/main/res/values-v31/colors.xml
diff --git a/glance/glance/src/androidMain/res/values/colors.xml b/glance/glance/src/main/res/values/colors.xml
similarity index 100%
rename from glance/glance/src/androidMain/res/values/colors.xml
rename to glance/glance/src/main/res/values/colors.xml
diff --git a/glance/glance/src/test/kotlin/androidx/glance/ApplierTest.kt b/glance/glance/src/test/kotlin/androidx/glance/ApplierTest.kt
index 3536a0d..2fb71b2 100644
--- a/glance/glance/src/test/kotlin/androidx/glance/ApplierTest.kt
+++ b/glance/glance/src/test/kotlin/androidx/glance/ApplierTest.kt
@@ -17,9 +17,9 @@
package androidx.glance
import com.google.common.truth.Truth.assertThat
+import kotlin.test.assertFailsWith
import kotlinx.coroutines.ExperimentalCoroutinesApi
import org.junit.Test
-import kotlin.test.assertFailsWith
@OptIn(ExperimentalCoroutinesApi::class)
class ApplierTest {
diff --git a/glance/glance/src/test/kotlin/androidx/glance/ImageTest.kt b/glance/glance/src/test/kotlin/androidx/glance/ImageTest.kt
index 95473a6..07f00f1 100644
--- a/glance/glance/src/test/kotlin/androidx/glance/ImageTest.kt
+++ b/glance/glance/src/test/kotlin/androidx/glance/ImageTest.kt
@@ -26,13 +26,13 @@
import androidx.glance.semantics.SemanticsProperties
import androidx.glance.unit.ColorProvider
import com.google.common.truth.Truth.assertThat
+import kotlin.test.assertIs
+import kotlin.test.assertNotNull
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
-import kotlin.test.assertIs
-import kotlin.test.assertNotNull
@OptIn(ExperimentalCoroutinesApi::class)
class ImageTest {
diff --git a/glance/glance/src/test/kotlin/androidx/glance/action/ActionParametersTest.kt b/glance/glance/src/test/kotlin/androidx/glance/action/ActionParametersTest.kt
index 450a8b4..fcf114d 100644
--- a/glance/glance/src/test/kotlin/androidx/glance/action/ActionParametersTest.kt
+++ b/glance/glance/src/test/kotlin/androidx/glance/action/ActionParametersTest.kt
@@ -17,10 +17,10 @@
package androidx.glance.action
import com.google.common.truth.Truth.assertThat
-import org.junit.Test
import kotlin.test.assertFailsWith
import kotlin.test.assertFalse
import kotlin.test.assertTrue
+import org.junit.Test
class ActionParametersTest {
@Test
diff --git a/glance/glance/src/test/kotlin/androidx/glance/action/ActionTest.kt b/glance/glance/src/test/kotlin/androidx/glance/action/ActionTest.kt
index 6100675..763fe17 100644
--- a/glance/glance/src/test/kotlin/androidx/glance/action/ActionTest.kt
+++ b/glance/glance/src/test/kotlin/androidx/glance/action/ActionTest.kt
@@ -22,6 +22,8 @@
import androidx.glance.findModifier
import androidx.test.core.app.ApplicationProvider
import com.google.common.truth.Truth.assertThat
+import kotlin.test.assertIs
+import kotlin.test.assertNotNull
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runTest
@@ -29,8 +31,6 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
-import kotlin.test.assertIs
-import kotlin.test.assertNotNull
@OptIn(ExperimentalCoroutinesApi::class)
@RunWith(RobolectricTestRunner::class)
diff --git a/glance/glance/src/test/kotlin/androidx/glance/layout/BoxTest.kt b/glance/glance/src/test/kotlin/androidx/glance/layout/BoxTest.kt
index 85c4897..aefe11d 100644
--- a/glance/glance/src/test/kotlin/androidx/glance/layout/BoxTest.kt
+++ b/glance/glance/src/test/kotlin/androidx/glance/layout/BoxTest.kt
@@ -20,12 +20,12 @@
import androidx.glance.GlanceModifier
import androidx.glance.findModifier
import com.google.common.truth.Truth.assertThat
+import kotlin.test.assertIs
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
-import kotlin.test.assertIs
@OptIn(ExperimentalCoroutinesApi::class)
class BoxTest {
diff --git a/glance/glance/src/test/kotlin/androidx/glance/layout/ColumnTest.kt b/glance/glance/src/test/kotlin/androidx/glance/layout/ColumnTest.kt
index 72455c3..7f72a59 100644
--- a/glance/glance/src/test/kotlin/androidx/glance/layout/ColumnTest.kt
+++ b/glance/glance/src/test/kotlin/androidx/glance/layout/ColumnTest.kt
@@ -21,12 +21,12 @@
import androidx.glance.findModifier
import androidx.glance.unit.Dimension
import com.google.common.truth.Truth.assertThat
+import kotlin.test.assertIs
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
-import kotlin.test.assertIs
@OptIn(ExperimentalCoroutinesApi::class)
class ColumnTest {
diff --git a/glance/glance/src/test/kotlin/androidx/glance/layout/PaddingTest.kt b/glance/glance/src/test/kotlin/androidx/glance/layout/PaddingTest.kt
index 8b6a366..f8f75be 100644
--- a/glance/glance/src/test/kotlin/androidx/glance/layout/PaddingTest.kt
+++ b/glance/glance/src/test/kotlin/androidx/glance/layout/PaddingTest.kt
@@ -21,9 +21,9 @@
import androidx.glance.GlanceModifier
import androidx.glance.findModifier
import com.google.common.truth.Truth.assertThat
+import org.junit.Test
import org.mockito.kotlin.doReturn
import org.mockito.kotlin.mock
-import org.junit.Test
class PaddingTest {
diff --git a/glance/glance/src/test/kotlin/androidx/glance/layout/RowTest.kt b/glance/glance/src/test/kotlin/androidx/glance/layout/RowTest.kt
index 0078c36..7ee121e 100644
--- a/glance/glance/src/test/kotlin/androidx/glance/layout/RowTest.kt
+++ b/glance/glance/src/test/kotlin/androidx/glance/layout/RowTest.kt
@@ -21,12 +21,12 @@
import androidx.glance.findModifier
import androidx.glance.unit.Dimension
import com.google.common.truth.Truth.assertThat
+import kotlin.test.assertIs
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
-import kotlin.test.assertIs
@OptIn(ExperimentalCoroutinesApi::class)
class RowTest {
diff --git a/glance/glance/src/test/kotlin/androidx/glance/layout/SizeModifiersTest.kt b/glance/glance/src/test/kotlin/androidx/glance/layout/SizeModifiersTest.kt
index 7dedee8..706ce82 100644
--- a/glance/glance/src/test/kotlin/androidx/glance/layout/SizeModifiersTest.kt
+++ b/glance/glance/src/test/kotlin/androidx/glance/layout/SizeModifiersTest.kt
@@ -21,8 +21,8 @@
import androidx.glance.findModifier
import androidx.glance.unit.Dimension
import com.google.common.truth.Truth.assertThat
-import org.junit.Test
import kotlin.test.assertIs
+import org.junit.Test
class SizeModifiersTest {
@Test
diff --git a/glance/glance/src/test/kotlin/androidx/glance/layout/SpacerTest.kt b/glance/glance/src/test/kotlin/androidx/glance/layout/SpacerTest.kt
index c301c0e..9ebc68a 100644
--- a/glance/glance/src/test/kotlin/androidx/glance/layout/SpacerTest.kt
+++ b/glance/glance/src/test/kotlin/androidx/glance/layout/SpacerTest.kt
@@ -21,12 +21,12 @@
import androidx.glance.findModifier
import androidx.glance.unit.Dimension
import com.google.common.truth.Truth.assertThat
+import kotlin.test.assertIs
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
-import kotlin.test.assertIs
@OptIn(ExperimentalCoroutinesApi::class)
class SpacerTest {
diff --git a/glance/glance/src/test/kotlin/androidx/glance/state/StateDefinitionTest.kt b/glance/glance/src/test/kotlin/androidx/glance/state/StateDefinitionTest.kt
index 91a054a..7082643 100644
--- a/glance/glance/src/test/kotlin/androidx/glance/state/StateDefinitionTest.kt
+++ b/glance/glance/src/test/kotlin/androidx/glance/state/StateDefinitionTest.kt
@@ -21,12 +21,12 @@
import androidx.datastore.preferences.core.stringPreferencesKey
import androidx.test.core.app.ApplicationProvider
import com.google.common.truth.Truth.assertThat
+import kotlin.test.assertNotNull
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.runBlocking
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
-import kotlin.test.assertNotNull
@OptIn(ExperimentalCoroutinesApi::class)
@RunWith(RobolectricTestRunner::class)
diff --git a/glance/glance/src/test/kotlin/androidx/glance/text/TextTest.kt b/glance/glance/src/test/kotlin/androidx/glance/text/TextTest.kt
index 2c08b78..9b7516d 100644
--- a/glance/glance/src/test/kotlin/androidx/glance/text/TextTest.kt
+++ b/glance/glance/src/test/kotlin/androidx/glance/text/TextTest.kt
@@ -24,12 +24,12 @@
import androidx.glance.layout.runTestingComposition
import androidx.glance.unit.Dimension
import com.google.common.truth.Truth.assertThat
+import kotlin.test.assertIs
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
-import kotlin.test.assertIs
@OptIn(ExperimentalCoroutinesApi::class)
class TextTest {
diff --git a/gradle.properties b/gradle.properties
index 47646f4..327e1ab 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -33,6 +33,11 @@
# Do restrict compileSdkPreview usage
androidx.allowCustomCompileSdk=false
+# Comma-delimited lists of project path prefixes which have been opted-out of or opted-in to the
+# Suppress Compatibility migration. Opt-out is matched first.
+androidx.suppress.compatibility.optout=activity/activity/,appsearch/appsearch-builtin-types/,appsearch/appsearch/,compose/,core/core/,core/core-telecom/,credentials/credentials/,navigation/navigation-ui/,wear/watchface/watchface-client/,window/window-java/,window/window/,graphics/graphics-path/,appsearch/appsearch-play/,work/work-datatransfer/,wear/compose/compose-foundation/,wear/protolayout/protolayout-expression/,wear/protolayout/protolayout-material/,graphics/graphics-core/
+androidx.suppress.compatibility.optin=a,b,c,d,e,f,g
+
# Don't warn about needing to update AGP
android.suppressUnsupportedCompileSdk=UpsideDownCake,VanillaIceCream,33
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 2aacccb..5eab30c 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -2,13 +2,13 @@
# -----------------------------------------------------------------------------
# All of the following should be updated in sync.
# -----------------------------------------------------------------------------
-androidGradlePlugin = "8.1.0-beta01"
+androidGradlePlugin = "8.1.0-beta02"
# NOTE: When updating the lint version we also need to update the `api` version
# supported by `IssueRegistry`'s.' For e.g. r.android.com/1331903
-androidLint = "31.1.0-beta01"
+androidLint = "31.1.0-beta02"
# Once you have a chosen version of AGP to upgrade to, go to
# https://developer.android.com/studio/archive and find the matching version of Studio.
-androidStudio = "2022.3.1.12"
+androidStudio = "2022.3.1.13"
# -----------------------------------------------------------------------------
androidGradlePluginMin = "7.0.4"
@@ -30,7 +30,7 @@
dexmaker = "2.28.3"
dokka = "1.8.10-dev-203"
espresso = "3.6.0-alpha01"
-espressoDevice = "1.0.0-alpha04"
+espressoDevice = "1.0.0-alpha05"
grpc = "1.52.0"
guavaJre = "31.1-jre"
hilt = "2.44"
diff --git a/gradle/verification-keyring.keys b/gradle/verification-keyring.keys
index 5945d66d..9d82f9b 100644
--- a/gradle/verification-keyring.keys
+++ b/gradle/verification-keyring.keys
@@ -1,448 +1,557 @@
-
-
-pub 012579464D01C06A
-sub CB6D56B72FDDF8AA
+pub 1861C322C56014B2
+sub 9A347756830C4541
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQENBFgnlA8BCACVtx3oLXcanfvwtMRwal6pLQ8IVMG9+fr4xGdbSHXCRNbosDa5
-agU7WeQMPhusSxJGaA3w7NOdjAwD/LeHADhDPeI6llJg1Fb3EyqH0NZaODKU/Or/
-dID/i1onAX1dE914J4lf3XvIAxGiAjmr3UvWO9RiFxRUkecMAMlCBp2FuHuvxkcn
-Mk8q9dP9Ef360wu8X5rj0kgP6vPhgl9/RhuPsUxlazb2Kn9Zxi/RmDKDiH/vDuwy
-WdRGFOR1OPV7l3Ws01nrs4vKd2v5rsUmsjvQ8ldxdrA1xzX4IszHRDgSC9PI8ItZ
-1VlbaKjE0L03acPfFTg/wRFSF5zsrGNbTmq1ABEBAAG5AQ0EWCeUDwEIAMGWqQT5
-ccT/Q1OypoOQGEZn+oRkgEdnzt8mjo7aOXd6pkNTkt3+LCkmb8Pp3/a3iYEfvSvB
-Zbb2JbY9xnmM8jBucWnow1iwEPxGhUuu3jlIpRsCwLk+utLkMALRkooXqanDoVRW
-xuVeFYN0as8nndgWiJT30innN4vfaR3x3E6/nS57zp5IggxZYsXTRHb25kaof9lg
-lHyXeypW7quKOP4SeES70PVVUnYZBlLpnX8a2msRtJiouWxCv/kHnYsjW62vc7nq
-vWAsSsfBT61TVx7yI9CckVFBnkpG1I8C9WpfcR+j9yauptgUMfrfDTFg3Aip7czM
-SoL4Jpu7jBcXy9UAEQEAAYkBHwQYAQoACQUCWCeUDwIbDAAKCRABJXlGTQHAapGT
-B/oCoCsuJ7617gpcuEAXxWTBfcXKo4z8ObBek2RUh0AY9aXjRYSzwwbtVFRC01Es
-r7R9b5ScY7W1TDQBKL0OSRZ3jwy7/hA7k8P7xAp3mC4+FdHaHMH8nGz2IbUjGWl3
-Yp01NRn4jc8gcnHnqcUff7PXsRMUtJ3dnbsIYOrBAbWKld07RVEQUyafgUfdF9cx
-e6P/slSZxATJrlIPveB5bgcVDMMw1UQNqJL9LWP2IM7xcljOBHY7jqwqnQ4pRER9
-2VzhLdtsdwF0H1SuERpDxBAuibchMoCfQ3HER+K2mTUoJ04xog7MQs2aaMwSbem1
-LMvNBZ/mfF7QMYfMV2n7rbIk
-=PoPV
+mQGiBEGVK0ERBADwhGhmOMvSgvGaqHW3ial0NS80ZXyE1EeNL6ke/WrXHB4dT6if
+inoAuUgRz3v9Na4rjSQ8YVFjn3NaZq1i8RM2KJOUU8ZkJ2AsrH6fqStjofLTd5ng
+iQaq2wLM5rTQfdjLsGQb1iDNDyCXU56+/l4mFZ2JiEGCq3Re9EFHelRBKQCg/7k0
+BIfyoFVTHw39PKaDBmCYF2sD/3CMD0J/WldhBM7gLOndH9/YEQaEMy+PJNXcfTWN
+WLygGPSOQdNBulyLkvcFIZjUTxFVakh7FbjMq3dsAP1oqthwmK7L8A1zsvRgp/TI
+4YMHkZSkgcs0PBBby+h/lpgRrWmtwjTPzql/K5xX4VSRS+umHye/7R+4ZEH7mABa
+m/ZABADkPGG2ECvfjNosPQDHZVFuF9oVaske0OjzxI+rU6sR1fJKtbOPl9d+bgz+
+df7rZ3mwppkPX2r/muUbd0CM1Se10sK7ZAoPYmWqHX+vB/oj3Jq+iqb6M5mDZzEz
+6h4hdnaGERyxbktZvhRV7Psco9CGi8o7RFUQTR79Y5ElnBavqLkCDQRBlStBEAgA
+9kJXtwh/CBdyorrWqULzBej5UxE5T7bxbrlLOCDaAadWoxTpj0BV89AHxstDqZSt
+90xkhkn4DIO9ZekX1KHTUPj1WV/cdlJPPT2N286Z4VeSWc39uK50T8X8dryDxUcw
+Yc58yWb/Ffm7/ZFexwGq01uejaClcjrUGvC/RgBYK+X0iP1YTknbzSC0neSRBzZr
+M2w4DUUdD3yIsxx8Wy2O9vPJI8BD8KVbGI2Ou1WMuF040zT9fBdXQ6MdGGzeMyEs
+tSr/POGxKUAYEY18hKcKctaGxAMZyAcpesqVDNmWn6vQClCbAkbTCD1mpF1Bn5x8
+vYlLIhkmuquiXsNV6TILOwACAggAw6kL0PhPZ/EPI0mPfmIYeaKUgTB8q47nDKY4
+6wDs1l/msVJHAVwGEBHuxmbC7r/qfAgfSW+/Lj4XbSLCqaZIWSu6lfY43IOIYXD4
+pe5cCnWkQij+h3LxRR6uDmBr5cwheHEuB2sMFU5lJiiQR1+eXYkPNK4FgVQpHLWe
+boODAlTf0j8gRR+aTs5eWXqfSA+UEsXpn6453bfZKELXkRmEznb4xyGWJaLW2Mlm
+aRlauYvc61M7FK8z15SSZbq6oictpnEcfkgnBxcNza3jZQV7WOWZ3BlD1nKQ661s
+bmS81/nLnxbov9ASs25K2olXBsHkERhjMnERedvv7avlmBwi1ohMBBgRAgAMBQJB
+lStBBRsMAAAAAAoJEBhhwyLFYBSyGTQAn2u/CvPzKwRv1FUkPYR751j9PGwDAJ4k
+Pt2uco8an9pO9/oqU6vlZUr38w==
+=alQS
-----END PGP PUBLIC KEY BLOCK-----
-
-pub 02216ED811210DAA
-sub 8C40458A5F28CF7B
+pub 571A5291E827E1C7
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQGNBGADx6IBDADoHin1LGQ8dhnlhfNCBZ3IyXS2NpR1VjmYtHSlh1hGsPcmHuwo
-1mLA6JzXF7NuK3Y52pbTr6vz9bAap8Ysjq/3UJeiDbf7FvmO5xAEVUhrpc7AEY7G
-Wygi+HqK5OaNhxUr7OmHY4N2/NxXiYGD2PNU3mXkOszpQJk3yVKgjmGnv0zbTpn2
-wwsXygc87nG/h2R4YQ80m9UknkPR63vRwPnsTwovG9CAb8RyHq+6P81vKE/U5GUJ
-TzV1BDY95niypsCYja2QR4Gi5TKlpsUjT4sT32l6/CqOhcpwO05pTv0fvoHDbDx6
-/gHivgyVUyPbQzUwYfMYoINePOaX37okHQE8n5QPPx6HmXfIhumKbXi6ppVPjPG6
-cB2Lq/F6UKHlttiwWgSIiLDC+UbFCVvc41Lrydbt/2eXoBGxWbU6DUSGnefKymP3
-c3IsgdzeP11tlfaxLVz60lomXMeyyXD41QzeuyzUNvoSgiqSE6BO9EqeCyk1/n+O
-Are5EFnyLBjChgkAEQEAAbkBjQRgA8eiAQwAuC4Z9laL4sRX8FTseTzd5/8AqBKk
-gtrZjW5onrse1hWpkjeB42qfhVrfUorkpGY9N0xo7jZT7PhXuOEB1WRcJPHA11Q4
-166WkHRDv7IwPGAQr6LsJAAlZYkV2d3BXoWoS4ATCH1jyXaxKT/jNGBazs+Nqprh
-ypL6X2xOIqKozehjTMfD1cFzFzoaZvD+G9qdk0w7qikUIla0Y3ADswtMLH32mszw
-9g0ddFSimmWQ8scVcaalt9k9ATX7zMJKmYaYi6fWsH/Le13DhJgQMjjh1BeUguIP
-r6pRoBZ/5xJxJ7OKIRk4pk6h7BImGMKTCONICf41i4kGsZMoRb2XvLDgSNs9gYKp
-N9+J7TYTeqofBxxQLH6cVplBPoNCkJun6scYJLWAepr4u0K5RTnU7y9iigiTTFeV
-xbSjuxIEzLk9gVKD1hsbtkLVmkxMljqJG5El3I7qu7eM2c1ufo22BFjHom1CmtWd
-oai56nxG5zv1WDsMRJukaXbDwbpSkb45rj09ABEBAAGJAbwEGAEIACYWIQSFaclc
-rcUIsJ/pDzACIW7YESENqgUCYAPHogIbDAUJA8JnAAAKCRACIW7YESENqpGYC/0Q
-NoVAXMkCa0Iei/kGdzZNLKpiG0nZIJGuml9T7eMyp0QQXzenOahCGhna4QQvSBER
-UZb9HzP/0xY93C8FEXv7Ns972XdeOvYjpOLG6euRwWLD//c5Ah7siSgUJ7CFPBHj
-r9mnZXzYjhvXT0eJlb96j0rBuSblG/NXu1oEJPySqP7vkK2ZZsHNoGfSoGlGtush
-YtUP568KMzz4LsnOfSLnkOc9Hh0qydipY+ocfQQhh7tLUzFsMbG80yWw4/2JVicT
-nTosdl4J9WyI3Xuqa423XEAC25dS0aQNeDa4lpfmOOyj5ViJISdutlVC3zmtkpXE
-xUXqb+AcsNDOuulUhVjw7KpKX7xUXJM+LSg57lfyGHiLejDHvPAXBSfzFxT9ZDxO
-92MhvR7JqP1Z0SvZ/yZ1RAidKaNJs3o1Dk/WbuxnRYjyf4URhfUVeH8tykNDIMJr
-gY4uKjJu0S9RuzG1PVw85w5f6UDZlJ01gGvtT81JFrizhvS9t0HoPbDcDhG5iVE=
-=Lmqo
+mQGiBE9iFawRBACJb4OMk3zqMDNvSJKYZ8fGYrPq7yCcf/ykKDkGb2dtPnAZGkSp
+3mmNlTsU6s9ARn7BtkhIuM5TdbLs+z+okX62h3F0WW3h+CpfIXyKSgl7uWbhZ5G8
+RSCCRr7A8m6y83npkTVDW6m2oFN2cjFwPLm/vxg1gu5pO+NCwz5iBRHdewCg1idO
+Gl6gBAZVNteCRMVnGnX4EhMD/RaYBO2j511h7gR+p+6BBeJTEIA1+tsi+GhTBkS9
+mUMGuD9Z8PyvwL7quGQyXJ/kTe3eB6iyDFn0oemB1w736FQe3vcIX6eePOEiDZs5
+1Uepv7bXI4wn1i3Z3kzynXNKcjCd5ZxAmML5VlQ0zWeE0W18reCjt1P5q5xxBFjw
+0L8WA/9aPi4d5VPakzuDvxfKK29BogScTLn2C3fpEnqWsTfpoWSkNXkRsoB4jUU4
+oIqRFMTxwsjUmjVUPOG+YqoeAaVpj+RBpp+V+CqgfNWpnH4caxzODE9f+6RYRCGm
+LSq/6OmgZg6t38M5XWVpvk7Ixygs6Vrd99VZyIQPJwSBM/pvAw==
+=dENk
-----END PGP PUBLIC KEY BLOCK-----
+pub 358A4ABAE72947C2
+uid Jens Nyman <[email protected]>
-pub 0315BFB7970A144F
-sub 7CD1B9BD808646B7
+sub B8EB751F2C19011D
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-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
-/x9PJbkJSwWj3BCUK98Giw5/tdG3Ib1y
-=OVOn
+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
+FFbW42hpI8TDRfB4oHWyTsM6zYXNXw==
+=zYIg
-----END PGP PUBLIC KEY BLOCK-----
+pub F1F111AF65925306
+uid Luke Hutchison <[email protected]>
-pub 0315BFB7970A144F
-uid EE4J Automated Build <[email protected]>
-
-sub 7CD1B9BD808646B7
+sub EF375EEBBDEFD775
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-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
-ov8fTyW5CUsFo9wQlCvfBosOf7XRtyG9cg==
-=qap1
+mQENBFS2J+0BCADZI8RYk32YeO9gnEkY9RN+4dKb+H1AR4v+IGxmy0UYy+O8bo4m
+YzkQHTlPpEPGe10/quKk1embDifEfNa9mwcSJl+XUPFlTrSA97SR31mdyK/Ua146
+GKMW0F6v8aCgLUlm9BCJo/OmOat2jsc94SuKnPiRRywhmapte/8o9t7/0GghqLyj
+X+Ifz4WSKyKZ8oe9mRFg1ZIA+z52a8QnfyI8WS8bpGHM/dXkBXZpzIDlrfKvoZYb
+I2DcbOotJK/ZzStAZ81e4E/q2BEw96NUKJC5X+G8qahEFNJDcJz33UAxLiTFqWmw
+iKLqy8oL8p9qPYlx0IAXoW/GxV7E0rBoA95pABEBAAG0JUx1a2UgSHV0Y2hpc29u
+IDxsdWtlLmh1dGNoQGdtYWlsLmNvbT6JATgEEwECACIFAlS2J+0CGwMGCwkIBwMC
+BhUIAgkKCwQWAgMBAh4BAheAAAoJEPHxEa9lklMGaJIH/jjzVBHF28G+gYmktFGh
+zhclmHsEvfqNEgaWkjyUOVTlccA5Ej+8GWrumWqX9PJbHoZVJWeVikkjFsTltspx
+bQkIv+hygvqIyMBJLks32pLUCXlWrxOnTFTljWzPhy3TMeBzE5Zgt8YhHwyuLGRu
+roOnYz/1VDY5SHB8ST37VAr4lZdwslAwW8RLXAXfQfbKnMCwjNBZf4FmllZk6GWM
+3YyaTuWtQN0qEJ7y1BZJYZwKC7EFGk4viTuoU3gFC5uI6idcmFFBWxgYmnkbQilc
+akbBGU7qhsTyyAWxPlKZg7ldQoLFrZgoO9CAdmLLzbCyPM0w3MpPa4Szw1nyJb5r
+Qjm5AQ0EVLYn7QEIAMde+nVUcozJy9dzLCUpn91SCoWld/wTaSckxTnVMcr4uNLl
+JI/2PFjMb9ya91grr1yuwqSG3jE8P0Qdk9Bi6t6NkMIGUSJuzyIipsDDWaiCfjWx
+s7seFd9c+rgcH6r9CaUbNRfUrPqEZSeL+RDwIIz1gQkXmosF94DjZHP9abZYObH1
+/Or64CSRD8Ocf6kTRndwJOZkRdDtUX5NPFSiU17E/DoEkyryuXMR+Ci0b/hjQ4Jn
+riGeyy6c0StWQUW18SEYPV0j3VyRRUcOLhJajEu8KU4Xaaxgb/2X7o/BosjjQ8BP
+PUdTz2wRluU/1tKUQ8D+O8QH7dCR3lJt76kKWbsAEQEAAYkBHwQYAQIACQUCVLYn
+7QIbDAAKCRDx8RGvZZJTBvJ/B/9vrvZR1pFqDfux/ezze7ovgYF3jkxfQj3Hqgx1
+GvLYdvNacZiJG1bfGRuoEvLPv8lPIfEBTSqJGxzRiEl33eUUXlatI20Dh4oeRYUE
+70hCfqRn7cqITJ7nXwctMZGtwSLduNa4+cjKdSaWq6kffpQVSLrjvJYyxk8td+Nv
+CLYiTDnyybAmSGge44RppDjwGsQ+9X8wyd5b9hwcBQOY4UTm/6RPDJF66KPlPaU2
+qy8NeQB5AcO6goAdGI9WwOJuxg9IzULwpCvRYB0chLKkGOBh0vuyQbHoRmI6gs2K
+/I3i0q8Df30ObL7oBALsr2QfkkKatq4qx+xU7QMdeMs8STRj
+=CCVw
-----END PGP PUBLIC KEY BLOCK-----
+pub BEDE11EAF1164480
+uid Joe Schmetzer <[email protected]>
-pub 0374CF2E8DD1BDFD
-uid Sonatype, Inc. (Sonatype release key) <[email protected]>
-
-sub F2E4DE8FA750E060
+sub 4BE257B370130000
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-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
-pA==
-=OkOT
+mQGNBFv1EEwBDAC61jyEM99KH18hI3zlfuqvGoNjTLIh0wge5vXAH8VxMR0ndOID
+HYSBT2+L6OeiqKlyhCgF1km48F/dMzyJdTASkNO1Ni+B2Ric1sBxjsSPufkjl4en
+yMOl/FuQOB2myht1fCXhlynmOoiRia5J6xzCsCNVGOVYfSru8vpoT9QKcD1OlwoD
+WhfyBx/bXsoRvD1CMjQdalcGxv1aJRWfhRumXQwhMPZlFeARAzeDmWNpglqrMnuG
+/VADZXZsbLv8VWaequ4wEWiwTOeA6YYElx648OTSv7NjMM7iyPPPWbbUvkVbA3Em
+lLBLlGYZTx2nI0B/322SsREcEDwaBzO53GStIzP1XvaRosM/98/Y9ITwB+Oh7ZwZ
+dYmmabxN6F5O3v+TNndEW7wgP0lkbsOWZ6YNmFhvoEtd1RxZiSNov5CxokYUrug1
+cS+/vsa9oIecUwxYOG2D1v/pwYhQnr3qasYz4nEEBWHnnkhyr1BbUSuen7w2SiK+
+64cQn6V9aeZYi6cAEQEAAbQfSm9lIFNjaG1ldHplciA8am9lQGV4dWJlcm8uY29t
+PokB1AQTAQoAPhYhBOOp+VB56EziAffPYL7eEerxFkSABQJb9RBMAhsDBQkDwmcA
+BQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEL7eEerxFkSAmfQL/A/61Wy/2XWE
+EsHGFhBFIGA3Z+MkEG+wtIZSs91Czz11n8288zt4o6As+7LzSnNj73VCw3wPTGFa
++Tx/jj/459p0AeAxiOWBz6uQYRIOT+5j6za/3SvCrPf725UKpKVy6kPGQTfDg9ab
+Fyk16hj1nr1I/UDBeTjxnzWkGFw8vgSrFG+qVDJyZP4rNFeFNyG7VAl4kSukwRD0
+TAMyQP0HTo6Hxh1Zk6fYfVlqiSwsy1vzWAyLgHIImxQkE6KLJ54cd77Z6ie+WstE
+ZZKia6KHzwtGrYAq2Og5yEQnpMuWd5MCQa5xbLIB5MhcgV2EKVy4ad2ORIjyz+wy
+sFG1GIpRoqw96UcVfbZtfkyb4fmMrCtaCzteACcPmLIXHrNPvv3JLSJQ9j9Dn0+3
+jMA0whzbXcQWdqfF9Khb91U8PNUczuSfTTo8JUPIK7Wf52avk+iG9ArMYHGNn94g
+KcAzu0OCuZAxGCCFGHE+xR/KwtIRCojvWB13Q1aoxSfp28BpyXcSLLkBjQRb9RBM
+AQwA7UCAsQ8KxX8nYO4Sy2pzlh9W5FMPwGluuokPA2A6g2Fz3vF62RqeaE4HrRQM
+pijQCsN3JTJVwDid41X84XCMItkdAxMjmn5zeF/yCcRuHe2Ci/+ae5BzrBaKE/VW
+RAkaZSZWJ1MoDdpSxJhLHNFnVrwTkM/SeSNUBk9ZDEC+43b0hciefX9bFlc6XPHg
+V+yr5ohhwcNcrZ/gbAhhN3/xIVmvKoibmb+ZIajhiCP1OOH+GpZAPT93w9qZWq3+
+2gvP4ZZ7bO+8N8Gmz24GL3/0eYI6aMUMwWGjy5J+iRiFjb6E+Iv/zToyZFWm2VOu
+OUqy5t4u+Vyk5bl0hATpJICmKa5OFtQwG5Uvfztk6rujjat90xv8yzsBvoEUqKqz
+IzjHdN36qop5hLMnBljdLdFY+Rk9CHdF7MW8Nf0YWbP/3uUk19utGW686Lolt8gv
+BQc4B5N7VtNoXFCKM/I3ufgnHQvDlf8pgdJOcyx/a90V/DpUI1ANlwg6IsmFZXbB
+Qw7tABEBAAGJAbwEGAEKACYWIQTjqflQeehM4gH3z2C+3hHq8RZEgAUCW/UQTAIb
+DAUJA8JnAAAKCRC+3hHq8RZEgEy+C/4lsgrKCmq2Nc7eTdN1AxwMkj28XQFmkqO8
+orfJm1hAtVK1KRizkX52RNeRN6QX3pX9s1e3DjJi3Hpa1UWqeicPA0kKTi2ytUlx
+R/iZDkaQkLyCCZtWnGHr/eRBdOjblprl5O+v/tcyrmQGC04TqOntMumuk7JNjZ0Q
+AVkZUxdmfi9bHaF5W5vlcaFYT5gdWpkOQ0YaWXXw5ynh6Ookjhq0g4pZNjl2rdWW
+yTC59YIvC9THx0+vuyN7xnSWIb8J1IjEEYvPqRfpd8s1Vf2AA0JRPjUG2UV8MZqu
+8k8x4iC2gbdji/vyg/ycdlRT/ULyNprz1nTLMfhBT0Wmy8B5lFVme3URmld8T90R
+Pln6Dy+c+IKb/79z3FPujuSbipXzx3QvGwVYyP80JFn7CJluOl/u8vxi2EVFN6aV
+qdzwoswFE3+0W0AfbpHUUT4oeBW5OBTJ5i1Qb0DT6WXk3Y2j1Z08xxhY1RITnc2C
+33wjXAW0h+qq7/7Yq3w3/7ncv9sWIzU=
+=NtIH
-----END PGP PUBLIC KEY BLOCK-----
+pub 7FE9900F412D622E
+uid Wouter van Oortmerssen <[email protected]>
-pub 056ACA74D46000BF
-uid Norman Maurer <[email protected]>
-
-sub DECB4AA7ECD68C0E
+sub AE6B5325E74ED034
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQGiBEoo3BYRBACXE2oGRA58Ml6s+kvfk6n/AJ+5OFeRT/Xelco/cpdxOVF5LkRk
-yd+vR2+F9ldBlH7CSTCmrdZIN3M3zrcWndrk/OQkCxNWVnE/a1li7L3G9nYr011k
-MwMM8MLkdf1Wr+FBunf1qpxPYuydfjWGFL749hYr4uQ8RbFDRQcmWLYCRwCgl+ur
-E28AmiICPcje59DNKHZZxd8D/Rk1LcZojARyMPjEsPOVSOh6kOaJQ/FOKN0j97k7
-ZqA+4C+OnIONSy22uMia9xO5g8oMLyHaRiA4S7JSIypYfX7JMCmwQCSLM/oQ5zct
-tsY7tGzCRBA7UVmW8uCDDZGmmzYIGQ7h1vcabgOFQ8wsteMHW3F0tU1K6oQut71x
-5KowA/9LeDjhl3tKizJn5hKf+NR8kTMcFFVMk8tf9/ZdqCG2gVTuB0EFimH47j1+
-YFWftvKg2IwF0qRnYuhpXn3kAtkzSwDr2T4r5CpDjttq+oBwhJ+N6lcPRoU26ijr
-nQ61Ek0jFFE5vfU7UODSLYXYbjf8McM6BtksY1SWfFBU5cVzgrQhTm9ybWFuIE1h
-dXJlciA8bm9ybWFuQGFwYWNoZS5vcmc+iGAEExECACAFAkoo3BYCGwMGCwkIBwMC
-BBUCCAMEFgIDAQIeAQIXgAAKCRAFasp01GAAvwh2AJ9HdFLGMuAGkk/wSv6dr6gM
-Xw32iACaA/Ez8jdn6/8kp/RpqMtUnl9c/Pq5AQ0ESijcFhAEAJIGBbVgN1O73XVP
-oGlZdqPd9n5QOjIy9cF6h5GBXEUDy3T+iVh1ak6Oqn1g3Wd0v2XgQ40gKWe/8O3M
-FhWkJbLENKhGyc9dLIpXDt9WIKfV3PNbblI/FmEYFqeJDNZUfaf/F3L3Lw0Z2YE1
-f0Kr3J64xuxJACUjAzXkssEqVUQ7AAMGA/9Tfa8rJD06apF3u22qd7DNao6UlUeo
-RIdluCpHfZQ10nEDTnFz5wNzHBlZDDoaketUZ5IY72hRKMcLMWRI5MaktQb9XvFp
-zhiGplsFGnzCBI99AqTsxy3m45AdVxbcVy2Lfeh9gzS+ZnL6m49Xf7mQuqQJatIX
-mWyplftyWc3XDYhJBBgRAgAJBQJKKNwWAhsMAAoJEAVqynTUYAC/qnQAoI/8QMuu
-PGrvivKDTCk2tA60w51gAJ9brzNybLCs1HYoPtjY97nOEy0tmw==
-=2BgH
+mQENBFnyVlkBCACe8zGkIlDV0dUKmk9PWe2Hw8qM9DdPbtpUOpmUOidGY5svQDL3
+eqvHk85TbxqFEe3Qbjjt+R+iApFuXy5kmueXTvwCm7nAU+k/pZtPuzHyhDs3iFFH
+8LCI/dOpd04LXLpuoeLCjBqPlOM+Pxiiu9h9tEnJaJzuXcw9SY3I/puj7qIEwxsJ
+W23gdPtYij9If1ht9gtTsDq9s7VbCM5vL0ofM8JVPilnE4oWuw9hjgIfT/QotbuS
+wPo+1ExZUfaKYPvMxi2kY3LZU3hlp6P5AxU+eI31yaYjtL+0lu66jTD6s8lwmF87
+QqjjxiHwic05//tp2Pk3PIZCoQurfEL6ZHhhABEBAAG0LFdvdXRlciB2YW4gT29y
+dG1lcnNzZW4gPGFhcmRhcHBlbEBnbWFpbC5jb20+iQE4BBMBAgAiBQJZ8lZZAhsD
+BgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRB/6ZAPQS1iLtSPB/4l5s/avevY
+mNnuEp/97qiG8kWOvFfz3C5QP5lVmsj5hiK6Hllc1zjZxaS+TCdrsvH/zKZvgmv5
+9oy5nNHIu/sZB36JnLbE01ieM8hzoW5H7lADJ0JDI6wRbhJc9oXGA/1ZAudT+Jt8
+K2Ijzc2XOzHqE4j5vF0Sc9NWEM+OnAwkrbnIgK98ZiWTF807+/uobtanAUEWbFjb
+0wSNgSX8IvEj3rr/ZaIbf0Ymp/YObY94jVdBqFE1B1GR2TRp1YiAy+2BqoFE599v
+pmnWjZiT3fKL7V6XT98tyk9+XCFlQT7R5v+T4e+1Ad8j0RxsXUFKUScBPySrqEFl
+gMdy83QUeyhQuQENBFnyVlkBCACk/9GoJK23GwRKF8kx4h2oOkb63mP7DSPmsgBG
+CxvhH04oE9Rg+SPWKTjx7E0XFytyCuBYn9BoyGVPp45X5k4Vvj6sNJsSuyW7ExJf
+1AA7Xqa0mo1tjsUPSeAWyhruZCTaHGmnY6ClA3Bsy4E1C8sC0UapW9dNAf66SDp0
+jWeEkU366fa0RZexz92nIDCTQv4YZkYROX63P6Se7hNtontmKA6JajD+46OLGgNV
+gdSKZpO0PMyD8VMg5RUN8PXHqZ68gJ1ihjUJ499sXFuAaXKcxkbb+ajD6fYPQ2jy
+4S1tQpUGmBKAdvthMenEShmwk6lsTN86yH5q9tTNwMWjTbqFABEBAAGJAR8EGAEC
+AAkFAlnyVlkCGwwACgkQf+mQD0EtYi7nngf/aPDwJQG7NICIuMue/QlWCUG4zW2F
+ZL1iCKMYhfVnz29lM/5AG4Y0SlcRkgEigizBQUkeLVHaj3obLlxr1I5yrjaOwD/f
+ruk3roC1pi+1i0sv0/eZJvyVN3Ta3pjzYDT/Qw09Ao5py7HksJsvAM8tIbw5hnmx
+q091M8/zdgIi/H38QFBWKNYaPkC6WMxWv0M47Kttcfv1DBF/NmsMzts45BDoE98C
+VB/5M2eLVVrbHlj4QqpLDTeSYwcTb7JVSKrNbyp2Ws27l1oNhMexztBivHz1OLxG
+JY8odrCtuxK3JMllDdln/HHdwrp6h7SDRdxR6llX74zIdctZVsii8eJHvA==
+=o0Pq
-----END PGP PUBLIC KEY BLOCK-----
+pub BF1518E0160788A2
+uid Karl Heinz Marbaise (ASF Key) <[email protected]>
-pub 0729A0AFF8999A87
-sub 6005789E24E5AD1E
-sub 6A0975F8B1127B83
-sub 3FF44D37464BBB7E
+sub C163B490C5CDC967
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-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
-khD1P8/4BedOSN7DqsnvIUfFaQ==
-=33eI
+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
+=v6l+
-----END PGP PUBLIC KEY BLOCK-----
+pub C7CA19B7B620D787
+uid Stephen Connolly <[email protected]>
-pub 07D3516820BCF6B1
-uid Ben Manes <[email protected]>
-
-sub 11F4CE313A637CC1
+sub 7679164AA2590985
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQENBF3HgdMBCAC3ET5ipFXdZ9GGMbtsCQ3HGT40saajsNDOdov2nMJxzKkVe3wk
-sN3bpgbsqBU9ykVkIhX8zV5+v8DOBzkV0pJ2eLjFa9jBPvNjV+KoK2BAI5pzNzYg
-sHPwo1aRXdI0MvCy+7iaIiiGF4/O16AhU4LmALHnaRQZCyuN6VOQ8rlqNvcczwUf
-J2DQeLHqR/tsch7S01hGpPAptBeu19PyAlQsntYN0yLCLKoe9dFXWCDkvd1So5LF
-6So+ryPqupumBbh4WxCmTp9qwDJYJItjAE0zyPe890FurOtxrFTwtRtX6d6qGKkY
-/B4T3r0tTE1EiOUpmSnxmGNItMh7/l5UtnHjABEBAAG0H0JlbiBNYW5lcyA8YmVu
-Lm1hbmVzQGdtYWlsLmNvbT6JAU4EEwEIADgWIQRjXuYnNF88HdQisuIH01FoILz2
-sQUCXceB0wIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRAH01FoILz2sdoo
-B/0YUh73jUMl14MjWvp9zrFHN8h+LqB4NMQcP93RdPTtDKi0a+0h8gQtm0D+K49Q
-BQbFztOObfZS3kdJ3VOqmodScWrGtMU3HsYT2ioQalqbYvl9FIPDrlOjHaZgwgyJ
-We0DVKHRApbtIh+NxTpQUJtanxgF60ZtOoToZe8XMGc9LaCZcrFxK/AlMdDMgUCx
-qzBbXhAcvut2bJVL5B4kLNMABrbUuFMjTNI4JxvgTXKL/jNk6XPtCjdmgIh7mT/G
-Mpu9t3i1zegAPdM5N/MAgiGHqm+blANLniSAbZja8Ny7211fwOYoJ546VPwDjL7B
-rBlymB3COoYZhql2DcBBg39cuQENBF3HgdMBCACu3VQKKmagcPbcMZOqbDXE5iK3
-0G742rCpf/j3ywnwTZJQ/58HtAi8+/fXxUhTHswoON2TwiiHrHAkObe+K9A+jv0E
-xjKVMmQ/sOCYWZDEGMth4yJnzDbT1Tlm/l2i5Lv0ZaD7fTEhtprQNuU06dveTeJs
-zDyqtK9T80mvI4+GH59wM80l1y6uj8KA4pY0PdSFgbyS9iAFADGsUsc6t1KiZ5W1
-9odMjDPlQtJ20pm5CvJlDZbYNRJ54CSldZikRvmNRg5mWdRLNfbRMFDLFfcdYLdO
-WJXnAt9cKFJC9P//ItZFrlhu3akTH//HF2kxQNW61Sd92/xtFUD/2tN1GlXfABEB
-AAGJATYEGAEIACAWIQRjXuYnNF88HdQisuIH01FoILz2sQUCXceB0wIbDAAKCRAH
-01FoILz2saySCACibIpnls5wJkfX1B/7tDjWk2hEGZYcASr0xp/DDwSgJ5edByuQ
-NQF7RHuCk0ke6IQGfytMLJlXeEIu79DvgPakxBP5iG+c095FbhRu+9nCEkRqQvop
-4fA7ZdhuerOyuObWz8+o3Z2RywWPXlK+F/9iJiO/qtvmdORuikJtN9VxgvAUvANZ
-RtlzjL296p0TJzGqXhyer46CHl/Yj7TtX6EpnZDgiaQbOWRFOZ5x81xI79bQD7Ew
-DzfrwQHbjQDkqhkwOoV6Wq239ZaHh6p7GXHnQkDMQ0H/7Y2tw6PH5VM8fDJkJKF2
-PIukJrUXa06KqrdZ9YxqvSmu5UY6tMSRwGWp
-=/wFN
+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
+=H7JA
-----END PGP PUBLIC KEY BLOCK-----
-
-pub 083891AD4774845A
-uid Eclipse Project for JAXB <[email protected]>
-
-sub 8118B3BCDB1A5000
+pub 6449005F96BC97A3
+sub D3DBC823BE4819ED
+sub 0162FE0CF6E18BD4
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-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
-XCfM
-=930f
+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
+FPjHFhRiWd3YGlydu4Dtzwfkmu43CTGp
+=Pq8A
-----END PGP PUBLIC KEY BLOCK-----
-
pub 09A79E1E15A04694
uid Torsten Curdt (Code Signing Key) <[email protected]>
@@ -501,6 +610,245 @@
=++aH
-----END PGP PUBLIC KEY BLOCK-----
+pub 59A252FB1199D873
+uid Tagir Valeev <[email protected]>
+
+sub 92BD2D0B5B21ABA2
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFUBG7QBCADRWXf0Fw05qRhM4cRnGKlOW1ecue1DCxHAtFwoqmAXyTCO+tI0
+MEW5SyXUkX6FsWLl6A2y+KgOs669ogzfQ0rnZMEt4HisRp8wpgk3GWR1/9aKYz/c
+ymy2N3BP9cz2fJ9+3PpBccUPL+ydFKpcnEnIwiQK+p9JjEWzJBlrdUc/UEJ0R+n/
+5r/+0+BHiTEMvjAF6/SwyntpTWpu7iEzLv/pfdCuhFKa4yn+9Ciwe3wGtSiue+dh
+tqKcd4YxED3oAswObBca3CC2HWWsUEH6EmfT1jUdfy1cq4X5x7AZ26oFYfG+odqW
+W5dcB+13VkJtJRzQTO/2HKtITJYC65a1jKt3ABEBAAG0GlRhZ2lyIFZhbGVldiA8
+bGFueUBuZ3MucnU+iQE5BBMBAgAjBQJVARu0AhsDBwsJCAcDAgEGFQgCCQoLBBYC
+AwECHgECF4AACgkQWaJS+xGZ2HNZJQf9ExetK9g1IbC/4L5qGhVzfyNik7m9DJ/m
+/fHibCK6pnAP7wHl3QStpcGfWwTDTnY079tdZKnZFk8OOtendA0WWdS/9OO1DZ8u
+kzI3PusfDOsIl/9U35dTgfQmFs5Nxi3/xYBphsNrzafEW+reUImADxleCxHhBGM3
+U8zAgnBGVQO+oBGQ/XLQ2xpGEW3lxytDgx90eCryFKhlqvE0Gv59ofHTcNjEkDcg
+9ki+dx5B25jpcMD7VzCgSaETs031gDlp7jdiEgJa6ot7o+chhcUlD/1UMZnHgT8h
+806xh4+ddiHD6WIXAwiFxsOhJO7o3Ovv4g9eg3VOW6kp6zjhfxrddrkBDQRVARu0
+AQgA2wgu5T1wf8QgQv46nAhpyv/Lf/osb6iTxIoMciUXpxKm6xKxYzov5EZxmC8I
+NHRLQQSJ3jjLLzAUy+hhKWxccs3hKof+ukshzgIPwN0ItatoppFmuG2rM1ZKxjES
+CqjufXE7r5yxTXtUkCuemQY8egDuihmVoatzTL+uWRNcf74sqqHyeI70NqnjqksW
+t2C+7IpurUHp9oB/YkxHK+rLb5+7B9UZNzsMRRQW3AaDsWeIMXTOX7esUbW532Qf
+xRbP4bALAVPqqFWCWA6a0mDDUJJg14OxC8MHhhMk2cyd4xJ0zoKQRxGEunb6XP3T
+7BHQr9r1AETU0+5sBpEHa5BHhQARAQABiQEfBBgBAgAJBQJVARu0AhsMAAoJEFmi
+UvsRmdhza4kIAMccH8GZzjxh7XGXpPqds0SIwJ2akhtr4k0WcRZy56rjGTTGhddR
+KkGeMtpY9CtVkodd0zGaZHcGOG0W+wuB5qPKktSRUOUoyR0ZC2xZcvRpuvhw2gwO
+JdRHGVteDFnz6Eiz+spJYq26usIPZXgxcuxBXjECuHV7OQkUQMDe1EbOOODODkzC
+auYvsfk9x3q9XUp7rQGa8Vi++NHBPhTDU4PReW6485pqJOJuE8QJznMvEHP355FK
+xFvFxw0TM9glLxeX36EjDtjs53Xzhw6h7HF2gj8rnaQfsDnJ8SPaRcJmbm1jKXIq
++AalzNZ1m6hXe7XGD63v9CWCFMygkADQfkY=
+=P9c9
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 9987B20C8F6A3064
+uid mkruskal <[email protected]>
+
+sub 80CFA7C482552DC3
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+vyMjyB4YL48bYbjwFEar/jLCQJj/Dg==
+=Mtq5
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub CB43338E060CF9FA
+sub C59D5D06CF8D0E01
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+DEWnnCsLSDubW3nXYsAeK/6d
+=/Ri5
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 586654072EAD6677
+uid Joel Orlina (Sonatype, Inc.) <[email protected]>
+
+sub 2E74CACB6918A897
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGiBE1VSkkRBACkCgvt26sMi+0X+EOJDMqdK0Sziy06k47LJf1jOg4tTZ2T9QtP
+OZ8fD+va/O5+q8Kna993jzcO5n0Nv+R/K3+MvUqSmdITshCIjBt3cC0n6FWndGyl
+jY7rOmzdNnvSkMGE3V2fQ18stkJRleqk3EuWwv+EwpxcYeVfCO+UCJGz5wCgtqnZ
+JYdRHcDkDYaIZ4eizpbV4d0D/3cgBdpcbSrwIGtft+lDxacaJrWpT5Jh5P0gLlYu
++6PFz8ZIC4+/aOSi4S4mgZxk8dBL8ZBqLqcW9rc//CYKNtPq33sdf9vxcusMIXvS
+PBODjDpoOsTJwy51fgCEL14qnp0v14y9p7ejjN5+GipiNY/JHo9S9kTdVhMYqt6x
+6a6MA/40vMejIbZ4q3Ia63jbHPi348fLDq3Gp8Wos7Sh2HnLC+pRdC46qX/5wL4t
+Vzj78yW9FdH5yeeE6nQLOBWh7PnSfMt2wYHoarEnkkkycP7WLpRME7qsBYqkNUNa
+2EQZSy8DnGiayYDij1YPNUHI9kpK6H/e3puhmgNkzrZj26T85LQzSm9lbCBPcmxp
+bmEgKFNvbmF0eXBlLCBJbmMuKSA8am9ybGluYUBzb25hdHlwZS5jb20+iGAEExEC
+ACAFAk1VSkkCGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRBYZlQHLq1md1Cy
+AJ9Vwm/4tCSR2iaLU6fCV4lnJgDnrgCeIDEdpte6HmX4eIWPHHxULLLP4Zq5Ag0E
+TVVKWRAIAOsb3rg3GoeIBQtJdgRUfULCVNEguSJMESQv9xnKgEGeQX9ItVfdMLrv
+Lbf4ySyIJ1ShBR8k80Xk8M6C2XA+c14AVUrtPUHmseO53TY0n2VjZD5ms7TOY/cq
++DheTBLzlxNsK85q0jZXOK2+Sliv9aRBIl/83c1iS5kBM76fzLWZqsiuqQsLUvEv
+oCmUI2WSzhJ3s4s3nCHHtq+sQkcaLap3FMH1IPozFFJWSlJSsIeE62AxR4XrfGs1
+y6YxA9AEhu/6QWA20T55loV9TT4geDLywxE68eu2rM867Bl2cfU6+tW4RW0Ssg2O
+Ymv/+dNe1YErRgKm5JAjWRxp0Jzc47sAAwUIAOgOfDKe+6VLQrVYXwUZ84ipBGgp
+/JwqajPzxa8YodPH0Cd8bfw236Qcd9R5MuyjNbi4M2RJ3pLlNGasICt2qloPNJqC
+miTcVGXXeaK3haG7Du6bXo7eaJl+pMXRoz3JTrdTPLHOhPgN7EeWtkAv/QbbONps
+nNcyiuvund1KX1JaoGj712xk7IrDO47eA7Vc+ply08owIlnjtO3XG0o4GbkZx7Eg
+iaG805jbRUz9Q4FHnIE3Ditmo4BrLsy6pG2kJyv0YkSM6pBSFpc/K85WDV4fEwPd
+AS3hl0rlThFuxgSHPH1Z7OqNdDnbAKp8xEKnAmb/3hx147fU+VoFd3qcudeISQQY
+EQIACQUCTVVKWQIbDAAKCRBYZlQHLq1md0BDAKCz+pK77m8VG8F4ZWyDthIjE4d/
+zACgsgdtDggyRGK8+BKm7HDnceh97sA=
+=7XCx
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 0F9FE62F88E938D8
+sub BF6D15D3F1BF7BCF
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGNBGGNmd8BDADSpbdIfqzkUNAeYlP0nUw/HFU/v+/aydtjUioAi/KxYt2FOMi6
+gk1LOJzHBubv8bF79mlN6sXrnq2lV/MuqvN9DrTAQ4u4Dh0pgbLK6jbxDWPGrYIo
+ov24dU+1SXCInq/7X71M3RT3/1L1kTL5WNCqKkhxLNi0bwjyAHR+xOdhPqkeTrZK
+xZB4KvIzI3cIYoSw2tFn/iAlzzaUyQY+JkqBbcObbzyMt8ai7TdXKHM5mAiuMt8k
+MkfE/kZqTWHimPYrl1+c3kXqn5iTFfJIRklXqnXixz9qFYhvUqWS87fFRUJdPCz9
+Iw4/UrnJi4qzEN8vrEJpnDgfS5Ey+io9xcqd9P66dFbVHvMl4uTo4hLZVz8dkWSt
+CkCtAfntHAp4Zf+1vIZzbAgseO52D1mP7wO0QccgqdX0w5Jboc2kkM67VsWskRXL
+FO+c25gXdtZk26d0P3f1j3XuDm3pPWbgAk17HMyMpqla3xBQiLA7J2l41YwblV21
+uzJnqAoChPJhP6cAEQEAAbkBjQRhjZnfAQwA1bQfDtbglXMOgziqSdWAQ5jsNWuI
+cTAKcJ6Bg1d3a/B6sm2IvCJzae007hnGf66RgkiDBKpqsMjb5yXyGVL9lq+KHgPw
+3H8TMRiVKxXqr+Q2s9Y00PR5PgqccZLZuUrbBJwK73u3+vfhG4ugubQPnRd8sPwT
+X/OPXuuq25FuZb5T40Yh+ZjNstnBOEpWZ6bq8h2kMWm67zrYwKdBOoHRU6Nnu2fO
+8CuL42lQmkvpTIu4ttjbLyYZMYjHnO+OpK014H9B3DsRvgAQT7Qn5pgyxwF+AuiC
+qdRP+vFzO78gvDRpUEQp03ZsBK3LJVXqQY8Nk9zCPDz0T0/1zL5ZHFXdzpxVPxMI
+9cpugE0Qr45qh5hktz+cjE6/DYbGu8W/bqDRzXjxz9FUA5A/sv/hs+PZ0QVRFARR
+cooe/arzitxxEc1X59IBCQieH9xVzC6gEeI6jPgiWo+gEBItQt/1Uf4CXOgStTbp
+zM/GCJdB4VSQXehMNKI0zBCsEtBWgDPgAlwVABEBAAGJAbwEGAEKACYWIQSVEVGX
+xSJ8CIcpnQAPn+YviOk42AUCYY2Z3wIbDAUJA8JnAAAKCRAPn+YviOk42NADDACt
+BHrDFjhuffic4gBoMkgSHmG2xfWrSo/jo568hJdUvwUKlLix9o3iqmPGy0jLkaGZ
+4w/t3eFrTGdNPuJd6zQ1fDNm7alCnyUYzoxct4yOu7mmI107HPuxANGvmV9hfyH+
+UYJtNwM6XljTIhnKdYa6H5j9jlwMR7pw8Y9QACVozBMsaPQygjQhli4FhXA203g3
+lxidoGZUi/xrV4vO3Wlo+7VC8n9WJZrYq4jhlD6Ntdhbvf8bEb4L0cn0ybgREehE
+7THETI9Os8WQVGbU9sS1b4YdOXZEOS4WS8NQKRzLemo2YiUNIdI6QaRWCvJyZCfE
+eWWoEJoPMKZldSIhU5UMtTaM7f2n18sCn9rXBscSzeO6MlcyaUQnMI9Kai4C6+t+
+TrIhZrSJQQMrR9lF+zP/YJKvW2wJBw8jhJr04dgXt4G7VrmhS4/HbtmLjQsl6bb7
+y8VfvPmrEviA+o1KeRSeIsx+lPdI+IogX6iLvlBMPtILw/k1aqanI+aTZYFOORw=
+=NL3+
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub C727D053C4481CF5
+uid TFLite Support <[email protected]>
+
+sub 29E792953D515FC5
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=zvsL
+-----END PGP PUBLIC KEY BLOCK-----
pub 0CC0B712FEE75827
uid AssertJ <[email protected]>
@@ -538,1045 +886,271 @@
=+MWL
-----END PGP PUBLIC KEY BLOCK-----
+pub 43203BE58F49479D
+uid Viktor Klang <[email protected]>
-pub 0D3B328562A119A7
-sub C45D01093DCFC371
+sub 1364C5E2DF3E99C5
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-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
-UGyrigQZu0gUujkogzGo8f7UOwHRBoA=
-=7aNS
+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
+4g==
+=dPSa
-----END PGP PUBLIC KEY BLOCK-----
+pub 873A8E86B4372146
+uid Olivier Lamy <[email protected]>
-pub 0DA8A5EC02D11EAD
-sub 71499A87DC1FF84B
+sub 1AFEC329B615D06C
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQGiBE3LMfMRBAD90h69D8yyPWaSoAyh2mOOOZ/XH0isuBpDZCWptemlMHgImqdQ
-2sXLXYT1bJKmSaMw+yKjp8J/NYk69EbmSK1C2nypLQtWhUmXXd3XVYw6hrG/dGvi
-gjkS5eq8L04f5CSuXO7r1eLTOch9iDl/ESaI5Nhq9A3mRQIhQalum+FjzwCgx0PK
-hoC4MVPVGXzOQPc5sG4jzAUD/0OX9c/yKQqjHUs38HTCgrjseM40iPhp8NfbWenP
-IwUMSWXE3lz0MMeKrGcEOcZOGWsjyepkLHXwj8DDOeGxhfh9bhFRJssdfzOCKBpf
-6S70A3fanzqOAvddxCqF/zOwDaieDmWvVntVpmZO9d+pgR/sZN0JgSIm7qGDdNqG
-Aq6eBACyywfwuVoY6lfNz70ZZqYjYuUkbKnKqpG0XmI+m5LYrUW7QuKJqaNdg+ZL
-vVgX/TdkWVSIoSRS5+eYm3fRD++cg3ZgoR6ZY4WEa7SRSp2zoidtQijWOzp8WeHs
-30rIaXBrb5wHR4GQ4FYsBGRuWkmIaferusllUmHCHFJI4ldvgbkCDQRNyzHzEAgA
-1rD70DvCcy91ShQKP2snZ4cLJnFwKArulDUcxoBZ0AG0qMbaE8jiiJTHIwgVrqsK
-aS1JENv6tVdUS8xHswu30zvd0obaj+4IGXlMVdc6052Y4SLAGNbGVw99Ah1OkQ7o
-v92gmYAYfqppOtRt1tylz7Jf+F6er0umdVBZm8fJ+QjzTw36AwERj2bjVbc6ogM7
-OsTyru5oZGOJ+oJU+M9/mh/Gq3AyrcfU8c6bL2pacXwylME4lxy4fBB7BsMogPXX
-iplZ2XRH7RmlZiAfLHv3StxVB1RrLXVcjdnqIO2guVYrK6mxH9WMG4LnOGvcnYTf
-GtWexEmNA5l8IOSgsK+InwADBQgA037clDFi3XWaZBVXst7IfkU6bKq9vhmphS4f
-uBx4wp7MBA62k0kGDmZWcbinZWnybypili9ihYSHlp3EYzCNTbUMWlbhc/ffYHuv
-rZsIT2DxMPb2iCnjPu5HMGegTM8iTTotW4xYmJUsEDIvgQUz0/UNsPHTX5XU09So
-cL3YOP5MxcEbgO0Fpjny3X76rc+ETAd9TmDJi7HOm24grKdOQXHQJr65j7nTc9M3
-zWnTxOP3fL9jcVnGTnLGRVoR7kedDpa5FsoFqtY8YMaFvNPVvI4+m+jozjNwTg2d
-GG6nU2dEC0qgDEeKMSJwF1wgO3Fe6mXHvxratgNrqfdY/rtEGYhJBBgRAgAJBQJN
-yzHzAhsMAAoJEA2opewC0R6tNKgAnigkHDCNu7Owm8x01E9+aL73JmDXAKCj7ROh
-7Wu1iZQbjeJfypM6CQ+fdw==
-=GCHG
+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
+875QwNruE4Qkt/W0Rhy/QRIZ
+=eBqU
-----END PGP PUBLIC KEY BLOCK-----
-
-pub 0E91C2DE43B72BB1
-sub 83552A552A0D431C
+pub BFFC9B54721244AD
+sub 788E173C196BC673
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQENBFBIm/wBCACgqvegptBhfKbyBXZiW+7XchIJCOpwq0/9QgSehKMwELbUKqNM
-sIVrywANqYn32S9hNRvBiKGm/KY7VwN9p1Cr6Ey3XuGSbRo/xN6tqfV/rV5YClL5
-6sMc67BlnEaCZRNuB9ATeUE/4wCO7fWg79jJuNl8tKQ8EYIrVGizzjmZHt76OwAi
-hQtD6A19+qjQ02SyPUJS6a2lKx+gwaHNxv4L2FqImCFGOOEToyRb12GD18Mgbf5o
-OtQVVtr3qbT07odFQt8Iyy1DiNUJbOfC+YO2wO7eMTr5xaFr1HejsTvKZiTDC0Nr
-EjtctqGxrjxPmoUPNwtxwEDTEh1lyKMhnqgJABEBAAG5AQ0EUEib/AEIAMDUgjnP
-KBeHIN0KNmXTS/uXXC4LTGltnQJ57OG2kmPz/JjAjYLoLvINY+xtghehMhRY3DmQ
-Dy/ufZsgO9oH8PztcC8QL5/dV6VTYf4U3FndbiSKgikaBX7yu5Qcrtkv8XgkJ+aw
-IEUgTGDXn2VT1hH6yEG1tA97iT/d7ZUxLEBsVgbxz9VtPellTNK5x/8NGY4NW+fM
-6+yGFpjr5juZVYRLa8u565vGBQO5FU7bg/69DftmL7vO4KRLs154VpsfAsTeo1rm
-U/8kIjgCVeKFClJG+Sg+m9rsJNYgiKy9dGfD/qDmVlEeWBuhtlAfqM7pHTv1Mu8m
-v5/DheBwvlwheg8AEQEAAYkBHwQYAQIACQUCUEib/AIbDAAKCRAOkcLeQ7crsaE0
-B/4/+ZcjdUfLPlKk/8BH0tMafEWOGvqY8bG4YpxGoJZHT/Lb/cnWDLvZzs98FVaQ
-3DKHZwQhhtnQIhnupvxSHX5wLeBZMtAANGQLauGp+A3S1WBVRHs0mzOdlVDbzJu7
-RW72mnkRMSoVd018fh4eQ0+VpZh0Pf9KfKJDwpEuESP1+6JcLLBvQXlEJYHOk7Up
-5eRkhljdIwz3TlSuJ9sCscTgM0PI7/L1eFP/iCgZIBHhpllVV6v5IGXx3P5Q7YQU
-y32zCrht4t9fdtdLct1j6eNaAQdPAU91auSbYhuVCpjgKNpwOv1ULoSWLUUPMNW5
-Qc4ZDKq+ywOElvONMnX4oaQ1
-=f1ra
+mQGNBFRRGVMBDADAQcmG+x0mHZwJ3uKgODjUZXkGRkuz7aP/qRmuQVn93tl8DmA1
+lgvXndvChUjzYt4DJnQhRsapAXEmP5/YYIkWOzuk9EpXGtqUieocylvNXP9eDF9y
+4mRbGbCUmz5W6Y/3w7wIsrz4kbCC5xij7cavCxxSGGg1IsyDHYkOMpcQyZH41vXJ
+IPMyDvkJUON2/YA+xPph4XkmNA+hJZ1fEa+06Cd5P4j8GeTnpibkkgzqzjuiUlo1
+PcXMXUzkGnf5IwMQOdDYbmDC0K+QUKEPheWY6NsmTdZTuyEdD7BunWA++mUlrqZW
+n81HMNijG9fQbipvuGiOn7OfmVF1eqfH+NtP9csBCjn84ZMUHHArzsWgb9LWpoki
++vQyc2K+egdykeDJG3hFZ0Ztbz1YPQAUy8BN3r/OmKuSwJ33cleugxyDe123kyUX
+KhBdGEY9pTZ8dbBKn6PfA51XvuWQSVPJRjG3bPFphLPDYNJr/MUuYqo3TSTSp1O9
+EGUz6yVG/S01tJ0AEQEAAbkBjQRUURlTAQwA5QjPD3Y6kiGacT7lXdhYYN1m0iHV
+ddk6NpERbQn7NAncLI8yx2kWCtF2bBYujv/plSfMKZmKSR2VUx3NXwmG4QD0Wr0G
+AjhS81jrmAjEEs6Kf0fvihJn5Z5fJAyDB0BMYARhCPtQBmZ5g/mLQWqPEj00kaXc
+vZyPaMwOvkFpNowItAdj+oxt9v2DS0zYSNQoRtF8WkX8GeU5j5yL8l3+dgu9CKlS
+CM+DqnbpMDiXDdDpc56Ca5jSuI85+c0TYo6ZIvn/34nmWMD5dIMQ2504Qr+Cuc9g
+u3zIJL9Op5TPpDKLMhiF+Pdes51unoFMnuLKMmbPWtIAIXkphd1QkVTnhr/yiqh6
+gGyGD3520FLTqR+Aq44CUUINWN2nBTbgrAaE42B0PRGVjtmTqoYJBziig0Fbqt+m
+BPwvT5+qRlX9fttcV4Nkhgan7JNH2B7xL07mWXAOifoGmkAeCH5y5TKvxJOCGTw0
+17NN05RCsQTHsL+0OhjU32hvhRGrbQTNq17nABEBAAGJAaUEGAECAA8CGwwFAlRR
+G/8FCQHhNh4ACgkQv/ybVHISRK1gaAv+Lg3GF1LFbHQlT0DiF8cAJ7f0VTiEgpKR
+SHh1SJ9mwPJYM+60HNHr2/i6+8aMML6VVy8goOvYzSW9BPgTY7wPF5HJ6k09kzDP
++R/tG74XjrZNFwZfRQ9rAeAlMVYXpPcUfo2FpM8tvR8HKAvJJNZfPGEtVkIJnJSz
+pZcqLX7ScOdKyWu+byo7+UoINF0vWvHorWHps0iMNDtrCL1QiNWxGMYH0+vK+a0C
+zGM/C2JllP8hzLc8anJjjtcF2xIZGL/roQnal6g2+OlKmtXSgdDwGOzEFPIjMHU2
+CvsjRPX2RbdzKOjIo/4ybjKtbvrbiXPfUORyb/aQ8PHHAZXaQ6yU1LRTCI+qA+gu
+sFCtKpk7RvXQdo6sIcrpqvLfAAWL7SB6zV0rtIFqPHh09NlLJ3LIl+2UK43Sa7gT
+j88XfFZYef0bm+IZjSGmEaZVEiXHB79AXyD3DZDhHX8fmcJIvvaZt+6V34ZOaKIG
+RATW8oAGjGserAKr1rvL3gGRF8LiRmBx
+=oggK
-----END PGP PUBLIC KEY BLOCK-----
-
-pub 0F9FE62F88E938D8
-sub BF6D15D3F1BF7BCF
+pub F800DD0933ECF7F7
+sub 592C39141EB02A78
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQGNBGGNmd8BDADSpbdIfqzkUNAeYlP0nUw/HFU/v+/aydtjUioAi/KxYt2FOMi6
-gk1LOJzHBubv8bF79mlN6sXrnq2lV/MuqvN9DrTAQ4u4Dh0pgbLK6jbxDWPGrYIo
-ov24dU+1SXCInq/7X71M3RT3/1L1kTL5WNCqKkhxLNi0bwjyAHR+xOdhPqkeTrZK
-xZB4KvIzI3cIYoSw2tFn/iAlzzaUyQY+JkqBbcObbzyMt8ai7TdXKHM5mAiuMt8k
-MkfE/kZqTWHimPYrl1+c3kXqn5iTFfJIRklXqnXixz9qFYhvUqWS87fFRUJdPCz9
-Iw4/UrnJi4qzEN8vrEJpnDgfS5Ey+io9xcqd9P66dFbVHvMl4uTo4hLZVz8dkWSt
-CkCtAfntHAp4Zf+1vIZzbAgseO52D1mP7wO0QccgqdX0w5Jboc2kkM67VsWskRXL
-FO+c25gXdtZk26d0P3f1j3XuDm3pPWbgAk17HMyMpqla3xBQiLA7J2l41YwblV21
-uzJnqAoChPJhP6cAEQEAAbkBjQRhjZnfAQwA1bQfDtbglXMOgziqSdWAQ5jsNWuI
-cTAKcJ6Bg1d3a/B6sm2IvCJzae007hnGf66RgkiDBKpqsMjb5yXyGVL9lq+KHgPw
-3H8TMRiVKxXqr+Q2s9Y00PR5PgqccZLZuUrbBJwK73u3+vfhG4ugubQPnRd8sPwT
-X/OPXuuq25FuZb5T40Yh+ZjNstnBOEpWZ6bq8h2kMWm67zrYwKdBOoHRU6Nnu2fO
-8CuL42lQmkvpTIu4ttjbLyYZMYjHnO+OpK014H9B3DsRvgAQT7Qn5pgyxwF+AuiC
-qdRP+vFzO78gvDRpUEQp03ZsBK3LJVXqQY8Nk9zCPDz0T0/1zL5ZHFXdzpxVPxMI
-9cpugE0Qr45qh5hktz+cjE6/DYbGu8W/bqDRzXjxz9FUA5A/sv/hs+PZ0QVRFARR
-cooe/arzitxxEc1X59IBCQieH9xVzC6gEeI6jPgiWo+gEBItQt/1Uf4CXOgStTbp
-zM/GCJdB4VSQXehMNKI0zBCsEtBWgDPgAlwVABEBAAGJAbwEGAEKACYWIQSVEVGX
-xSJ8CIcpnQAPn+YviOk42AUCYY2Z3wIbDAUJA8JnAAAKCRAPn+YviOk42NADDACt
-BHrDFjhuffic4gBoMkgSHmG2xfWrSo/jo568hJdUvwUKlLix9o3iqmPGy0jLkaGZ
-4w/t3eFrTGdNPuJd6zQ1fDNm7alCnyUYzoxct4yOu7mmI107HPuxANGvmV9hfyH+
-UYJtNwM6XljTIhnKdYa6H5j9jlwMR7pw8Y9QACVozBMsaPQygjQhli4FhXA203g3
-lxidoGZUi/xrV4vO3Wlo+7VC8n9WJZrYq4jhlD6Ntdhbvf8bEb4L0cn0ybgREehE
-7THETI9Os8WQVGbU9sS1b4YdOXZEOS4WS8NQKRzLemo2YiUNIdI6QaRWCvJyZCfE
-eWWoEJoPMKZldSIhU5UMtTaM7f2n18sCn9rXBscSzeO6MlcyaUQnMI9Kai4C6+t+
-TrIhZrSJQQMrR9lF+zP/YJKvW2wJBw8jhJr04dgXt4G7VrmhS4/HbtmLjQsl6bb7
-y8VfvPmrEviA+o1KeRSeIsx+lPdI+IogX6iLvlBMPtILw/k1aqanI+aTZYFOORw=
-=NL3+
+mQMuBEvQhhQRCADQ2MH2FpQD7pbCTDJ4uvPSeaOz0IUhkX9bK4sKvIISx8MbHhR4
+k4sXi+vVkLngWCMUV4nB4WcCibk2S184SzL0TstTDrudxe4eJFVbmZw0GrgASugQ
+aD+8daVhMgQZEjvEB7kjaYzMyljzVRE/o30AaizHPMVytZQpIL7GTsaBcGtxLkyq
+JG+SF+fN3WAKiMyKCUTaji1owY5SyZIbPBBHqcIQVdtCFRPXhLDNnGHUz/ubI4Fn
+U5sN9gEe7raXQfvZzwS6fW2SaxhxMXDNVDEipY7okuRKQ0wPWqcanh9dri8qoTfI
+7MOqfWWKL3NF1hnjuutyGTTKCllyTWEW4MfjAQCJBTUh43abqyHej9Dzcc2lSgLn
+xeN5iM48tYZRv+aYxQf/b9rWigbReKL7iYmCTqd+hLfh0YDmaJbZ8ZZM4p/YZ5tL
+NdkNJR5TiWwH9ub0BvXYOtYUwclOaaD85CKNN8IU+A/YcrWP2O8fBQw5lqARuGx+
+TjG7c+WRVn+fLrTzrzbUYh+/Jg5UYCbDYh6H2kLKnPVQPzSjDScJNtevFnX+IRjT
+7woB/WHlrfvowZGO1kclypZZS6nDiPYhEk1isEU+nD7OvvM1fQN1rdl0QhkLUh2w
+qKiM3xvY42LGicnJcxyMSODkYlG6J6OE2sFDBJ1axa90+S8Jze1fBlbQVb7OF6ma
+31mhOedb6xiqJ17/5Kx9gPEUpVMpkrDUVToIv18c6wf+J2TJ1sdMPqUsiuKHDQq1
+elTxtfq5ELQoNlnuK+mRrsSMfa1I6jE7QbZkCcoTNnD5ikOVmkHJFQlEZsmaKCrD
+oUpEyELdzFy1ghfGDPbvv1a5AoGVsR+sj39XNckBgZS+25vZupBxWvTd8Fj/KY5l
+a1aQlPUyMgqmo7rdE3WEzv7v11xBy6wQMAoGu6lp9tnaAE7sPEy/UHuYSexCO3Ar
+83sZ9o9ZQa+z33QU5Z0guNz+efCkFfG4nqjHjZ8ZY5VvWlw0W2gxNqzNCeQR7m14
+C4J2TNNn/F2nGAKEpKEgp8IjpEXYZ6kF9xoSkJ07bjujvf5vtvAm10h+ZEumKSiS
+mbkCDQRL0IYUEAgA7Ci1jY5JdrLs7pKjhbqP1lkZKDRn+0fDgix9y2JP2O0lJ6Am
+SAVUE6Mi+izqV97q3vMmOkIuDFLoBP79/YOaDlMWAj9QelNWwz30yT6LB5Wgw0c/
+Tpi5lQD5K75L84u2vAFjoOwvnLx3cKjC7TG2h7zxt9EHEtLFAFP2JBtsMvcmpFPP
+Ucpv0+/RFLhRV6JPxEUKiVbz52pgBLSa83vtZI4d6CDu/W3QXvCw7uYoTWx7e0+K
+rrZj3LE7KUzEa/Vazsn6Nwhi7VL0irNOZJGALdhrxLA8iGnPYDys78vPBWB3k4VQ
+G7rgvdVXiAldMNtoy7sNuhtI8Cicgl0JG/6flwADBQf+O8kWSrda5ezDK7vWAhBh
+r3tEMIE08eL/HPErE3DOzud8oyV8B7Z89ZOjSqzn/6EQdnEGnVRr/isOJcmgAXQQ
+RpJfFQ4dnpEeestJ5y5hzrtbMvfZ/Wms3WFgjgfYl5+TAbSF3Gz9VNn5AmaeA18i
+d8qzNVQ/e8J9zXfLV62qRLzbAS74K6rzGpYaZEWFAid1KLTu0S+I/ZuvQfZ83jyq
+oenwS0iYawM824w5oCDN/+8cDzLcHipN+B6g6S+X9m8s5E3RZGVKqUjd+fTRg0LY
+JkkasJwQa+20AadpCE0RZtR82jrbyLfNY2FFJT3TKYnaVhYcjpPBqffevhwSRIEs
+KYhnBBgRCAAPBQJL0IYUAhsMBQkDwmcAAAoJEPgA3Qkz7Pf3m+4A/RghXcZwWrZB
+/vvvAfhkYQeQJjPmYluGNebJ4wPi5ZI8AQCBjv2b6yDTWPenmPNeSB88HWjSL8/A
+mimEzF5VTg7GrQ==
+=Q4rB
-----END PGP PUBLIC KEY BLOCK-----
+pub 4896F7312A5ACE4D
+uid Chengyuan Zhang <[email protected]>
-pub 10066A9707090CF9
-sub 2B9F5DBAEAB53FE8
+sub 3EA98BD451E4B457
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQENBFGKp5ABCADTyMhDq+7Kcv2wXOpOmZgp++JNO1erNUjVqFX7n9bT77DciEML
-LNxWVF1tkNqgkn0ughZTXK5EGdjUfZaJaDDfG4BIsox/ng4nDvIp4CtXqHbWqrlc
-SPsMl82uABh7ZJgsZM4Z7c8KirxYL42MiWu6hhRqfJZigWUd+ceKEDuFcNHcEA6h
-98LWFCZ7KHjKhZpUbMBurd5f+N2mn06YnVZrHVzX+q6REWGToF3p+mrBwstrGaiU
-j78gMgZnI2tiJ99HqmocjLXbwXxdvFmLkniBHAQ91D9fHfYL3odTEkjZ/Wi7DSZt
-PAbEhbBIKpFKnbazyMB8ACeF+m7jQ/Nq1+g7ABEBAAG5AQ0EUYqnkAEIAOMb65Q/
-m/7+A8XBVNXgoyGDksgTDSIfvePi4saGdSJOcQWc2HbEHFhqcOqr50h0aOEBN+7W
-B7X8ZMqqeCub1BlXLAs9gWhw5QK4mAKCtaARpmWj4sr22JscpMi4uutgcsfakRae
-Tmd1J7efjcDNL0/EsQKQSGht1AakJN8zfyb6IBuuAqj3xegwFCu3MRanRyY8DP4C
-YXfIyLBPLWfDVBViK0HOjEMEO7tdvsZ8h6ptLNqAYQQYcHFi75lKa626RVeEbxK3
-dptWfA7vQ59PlnsMhUZkiDDPzhnIatpfdBgA8EpBJ2Lrq7hE0nZI4/0rn/wxIPT9
-Ibl9JWeSfoT7Vc8AEQEAAYkBJQQYAQIADwUCUYqnkAIbDAUJBaOagAAKCRAQBmqX
-BwkM+aaFB/9TyOSAJtb7qonJ8Q5Un4JLIhfTIaBj3cMHzP0ZbotpskDqnvRhUe9f
-OM0KG+OibqaW8hKT3ZQVVIJeSVUCDYyrWX93KPV/tiL5F+5WWN+/L6Uvp6598oiA
-ZvYBNNA5Gzn8kh4b5d68Qyr9W/2TAWm+jVYywlguNHsysLLTvPVG5OGK48/dYSeO
-2PyCy7hpxV0z+xDinDDiVjwXc+vHoTg8ZDILQG83ZsICO7dO5FACCpFuKu2mjDvo
-bcV4ajxKHNvnnNwFUxuGNogQOiMaeH62T/WBCdeyE8X0A+UsH6WVXmXkCSDxRD96
-UdK1vJJR/sRkoSFvf8E1KmFZR351/wZQiQElBBgBAgAPAhsMBQJX8oreBQkZM+ZJ
-AAoJEBAGapcHCQz5ax8IAIMnwmPs5nvuo6A8mSEmKXzW2M9K4CimmR2HhLtFoo6n
-HRcrL05I/XUq4YxqQLMmZeQ+N3lk5RVfZwJDIY3NzR/R0dGiRP4z6F1sz7qRPYxL
-faFA8anPzrfW8tNtD9QeXhG9k2H4WVYdPwQe7zKmyf42XrJSX8bpgxAoRdGR6atr
-VZFf4Dwgua+SdIrSpeiqXCqPVSh6xoQ6svNXwnee94zY8/R8I+6gqI7E0XaZY8ub
-q4Ep950wDEkOIBB3HsTgUauXd9vdkFMnO20JWZRujDcE6U4GJsG6OsgllB2e0m9V
-OL8rBTxpelg6gJCVVXLOLUbuZ9UUebjIiAABCA6V/9A=
-=HrWq
+mQENBF36fYEBCADU+1b8TH2AhJuJXebg5D3UbR9rk8/9kEfiF7ifbb3nCB9tnF5M
+7NnNocEdAq3XezNuSj9LtEpWUu6P4JdpXcfZiQO6wrobzSJRUWDc7X8D8NyhGpd8
+/7EMbAHH8MfMrwb1+00wdCeDXRpDtH8e+9I/mvdkkBgCrJwG2IG5FMSdQkMa44cs
+asquM705q5349n38F6zOFbS2CHtRw+dsGym1xHWX96E/kuAMIh0rlAK1vIh5hlmD
+2d1VQyx1IDQuAMR7YvByzpXvhwGm8neMaPgKvi3EHoySE8goFfo3UUotZBBv8h59
+h56lu4YfV0EOT3rUESOes2bZiRdLrnFPw9ebABEBAAG0K0NoZW5neXVhbiBaaGFu
+ZyA8Y2hlbmd5dWFuemhhbmdAZ29vZ2xlLmNvbT6JAU4EEwEIADgWIQTIiLmVWBXq
+g7SFMXhIlvcxKlrOTQUCXfp9gQIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK
+CRBIlvcxKlrOTZYeB/9Gb0MmFCMawEHvB5RbLvkQggZ3a5Ac7WCA4qy4p6B2r/2N
+7S4soaAB0iU3iutF1KzR4EaZod7C/DOJgjY7ZJ/ufoU+3KyzdoEr7b9QZktD8hUm
+vPS/hygpU6eY5gfyelFPtJU4+gTNAvls0/9oTq158OVgh6Kd3lmGpktLe/OFcXKE
+nRZC2+Vv7AJx/PboNko7uYpMml1cHDfi6cqRQv2L7DKvCGXnDseLi2tqfzWW6lYI
+XFJHmzWVk28SjUUFygfPN49kEkzSkQ94I0veC9Jxb8YqPkGD9r1gU2x6O8+4NsVC
+Iv2GnefwoRjDMgVvh4GzRhfGKuWM1+7OvjoC9QpnuQENBF36fYEBCADB55Q7spxH
+PFABiTlWY7iWlZ6KIJYdRm+yZGrWALYq05bL+UGfO1quXeSPoZapkNOp92RP3FSn
+xJ3S2GFXlv8AqjEuB3rUcWq+0g0f/cPq/MOYBPT9RgzYU+2BSmtnOoO9jEmsDBPA
+A8g11TIb/YglHmekEw7O3t76iebol3QYExHZ06IihKbH7kMQlgOGeWIPR1niJbvb
+E+VfFRhNzl2xjIMEcg8cu3nCK7xz4SwPXJTZJQjjJrUoenl6WFtSLVzzL9KQO0vH
+yzRv9cEUUU8npWz0NvNMA6weXYVGS9ZbjaAMgZ04PAMpEuiiYmsENFpP4F3S/yc6
+8o0dFeE3ZqUPABEBAAGJATYEGAEIACAWIQTIiLmVWBXqg7SFMXhIlvcxKlrOTQUC
+Xfp9gQIbDAAKCRBIlvcxKlrOTVN0CADGnC+XyF5FORZClBFtjzDI5WyRhqK0eBv5
+YDfCiBnH+vCrpRzks6ylsoHeuRkLBMyyN/GDyi3vLa/4zb65ekZzsDWROR5zzpiB
+hI5sKBekS3XLEd81cYb8mDVFqn4cgrATUeGz0UpHY0wm5bVel3FGpwY9NpZKHfhQ
+9UATNm4OJcJywPNNCPMjFUyj/XrXwqJDDsPafVewJ2qOziflSXt75TEos6xmi0YB
+zeYL7RbX07QsknYF+31TjsqbAgZsxgRKeexe7DsSL97BvSaUyB8X7Ghxw2UwE+9O
+w5dkCGlkxSnKE7WTKi1is1iziB4eYHLMW1BKVazIeudpCfyKmmhz
+=Zhff
-----END PGP PUBLIC KEY BLOCK-----
-
-pub 102E05D8DA6C286D
-sub 7680B2343D1CF013
+pub 29579F18FA8FD93B
+sub 9DF7F2349731D55B
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQENBFOZyw0BCADj6eDnIjaug0RJQCi/HLw5jJ2kORPaegxFuE5IhpN9pZCPASax
-aTROfUSnys7cbxZxh3Sri3spQ0j+ejod0MhVX9ajTg508YAJUaCBbM7CGZJZtVFL
-atf99umsxzDrXIk24z04W5KBiLS3M7QKPyMujjiVy9naFxyW8GXJxYcGKUEltWwP
-zgO97xwHs+T5nXcO6jOrJ7NxI9fbnWb6QY6btSkrlpLnwH5yxGpajcR6R8+kj+0W
-dqWWrs9vo0DQGohkoqjTzeVt8UWHqUBva6hULkz6H9CRLfVxuK3lLFtnRBjnjRbu
-bNyOdVdtaXArmMKwsonsaZ0E973yqcmbhKQ3ABEBAAG5AQ0EU5nLDQEIAK6UjEUy
-lBC987DwdhJ8sQKGcOq8JM7sfLgpBfuRL+kWM+jpXi+DmfThnO2tI5UaaF/jMd8w
-Kd4JeAGE0Ynj5V1n5qUsTUXwEonDLLBOBYEj2NYJ40kmVrPdp00auDf11Y8NC4vS
-m+4QV+FDcWvV62ogOC5rYKOaKMPf20F9rCxUBwvrXNHPQJZeX3FqU/HBhvaqtHjA
-flZoQF01baDMQTZf5JgATzXJRsKKum7z0DWiYNoOJ8wpbuXM6CG50N+4OrlSZfxx
-kN8I9sSyREzHj5zVWoKqeyii9HUeqBLWh++TiYrRyP9NHM1SXhrtp3wZ36CBXqp6
-ME2K1DQTMlqZTwEAEQEAAYkBJQQYAQIADwUCU5nLDQIbDAUJAeEzgAAKCRAQLgXY
-2mwobdDhCACjfIYnUCHd6KzmgOoYXsW8NeVE3QFpMxMVq9rNEJxAiOg3b+Bdz48L
-2lQy6yJJ7owKAH2M6FvVXpfrdkiMQICEzKr1IT48H1Sa0jj0cSR0jRYszmd8k3G0
-hBqmGnfPBfolrOVDaRGf2CXCZFHVZA/Qvof76FaZ1cFAKYmUraXJBocxupXz6QMq
-P4qsPgkscwEVv4b9u+Q+YLpqHBiWmsHk9mp1Jtqz1SBTqI4zVj7w6qmc0aZh9I2T
-ROvKAtF7WjBg9LEFstqZeP42rKenm9vOGs0aQbe4kkgFMIwkLI1TeXrYeQWSdjlN
-nCYHwzPH+lq2dsCro1T8dMZTRFWKeaPn
-=w1VQ
+mQENBFYFiMABCADYpblWssqGxbjTwsyroPh48BwdSKl59zbFKoEHDw87NeWq7fik
+h95RkbdeWsQSvduXWgQZsUDq9cLOkuS/ChAMkAAd3MPp1NMdFmAqS7BX5wU5s5I7
+XD+/p51SWLMvgrLxoenmoE04EuQqQiXd4DbU+HGPseiNx+mN0cxPssaZMBBsmi2r
+RjwcQrFTaC1iffzh8FKLQvoTDzci//b5bWcxCLbsY9dYcUaDCbBAkL8HzyZUKNE9
+XwXh/Rq8wDakI/VEg/905a9c4xq6Rss6Yn5E4V2SAo2+B3hYmvHFsefaM9kkqvXk
+MQ6zjx83LAtzavOzmthjhhPIgCAfoQ5Q5oDzABEBAAG5AQ0EVgWIwAEIAJ29KWGH
+aEt7gXV8EweJkrYd02nwjc1LyjUT2TRwEzZ9N9qUiVqfpkgnZn4mpHCToxFoqkHa
+iv/QDfj7cp8jbZJa2wjaUkDbH2pZqLBGJ0sUUBZ1KNPM2uhhWRzAnmF/bIo3+Yfl
+hGINLNqoevkYoo9cdelP3hepef4+PUuPmKmeo856uknmaWQ89LPwLlV7oj6wiqMY
+p22sHqTGAgXeR/fSLMK7d0vSPm+57LZed5ECoRMeqYFUwSMV64RjTMkKPsvFBGvR
+hppJ+uWQiMjFFuFq2DFeNBVtueHSdgCHx1TP9i+x+7JmYsmFFmRwnEdbxO3THFXa
+gFQGr4ima+oOjLcAEQEAAYkBHwQYAQIACQUCVgWIwAIbDAAKCRApV58Y+o/ZO+ZZ
+CACL1DlaVyRNjNxzC+30X6xGykPwCdwMRF3CRjoeIicss2pBJRaIdTYFpg3bCZKJ
+J5KDC6s+03zmd3ddnKEq1fEfRcoLZ9PNBYF3IESHnNPlR68RL2cjMgq6segbhOxa
+v13ZcOIOnyrWzgbVw0ZgN8P3vCllFtifwvuF50vTshIRY11G8Gluu+GZ7tfSkPww
+Eo+pRd8scdol62aUUo6a71rDOMg2XPULz0l2hxKWfeUsksT5EY03seZd3CYqOacL
+R+jaHyOc5Nh6R1MzcRz65YTwzVbKplXtZjOghMh+rS4eDIjEKlo456M4spKFBbTf
+Ub+QS9kCkBU8csUzwF0nk/oP
+=SZ35
-----END PGP PUBLIC KEY BLOCK-----
-
-pub 10AE8966A146E8BE
-uid Thai Duong <[email protected]>
-
+pub 2C7B12F2A511E325
+sub 10DA72CD7FBFA159
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQGNBFrY3D4BDADSiDX16IC+236IeUiqi7Nbt2wlsBS0zqqaXi43QwXwcf7aYn4+
-qrn+4JvsyMrDgkRgOElz134B1i5OSzP/32w2JCnj90XUjO5N1KD0QqoSops7NLhZ
-/jW+5cFLDDeYPTYNLxJVsDRSqhIztRC0/m3eP0590MbnPxd+ahlj8uz4NRv/bwj1
-vqfIRDyoQOtV0+QX4M8ytX8cyLW9YynWLWMeHUFY344UztDunZrfomPC16roKXrq
-niP71cILlVFvhGhLfE4iF+Q/QZZnn6hvuQGagHR261N4LKw5II737g/5f1DsKZpu
-Mjam5juYCWobRie4fN4k0xwi2+I0KTpYMjBRTNNcOtyAb1AvY08E0HVwAYz8Cm+T
-VQQKriNpa40RI3KtDXCboCkz+LLL1w6vBXnvCes6F8CjSn3IlInpv2AE4nhcPC03
-zI56gPFHhUN+h4vm+b5H0aw8DyyedBDv/GX5sPxYYml3H12L/idpgAwp022rL8dP
-lxtvZrtO9PlOqHMAEQEAAbQeVGhhaSBEdW9uZyA8dGhhaWRuQGdvb2dsZS5jb20+
-iQHUBBMBCgA+FiEEyHQQgv8bDulryr7sEK6JZqFG6L4FAlrY3D4CGwMFCQlmAYAF
-CwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQEK6JZqFG6L5LEAv8CDTDJbAl/Rh3
-ALICi3dsXasWNQjMnG2kqDXQg/ysTPCoUphnYBTvwkEGxg+m6Bjb3ULeCJo+DIfw
-JxgLl5BNZOROeBmlX5uYZ37XYPntl/WwyGBnCF1IW6cHmdtTMwfYd6RkAFYVyFyZ
-FObeCrzdVj2knwqsZQb2Ty6BNodKV+xLCYBggT6VjNpjp1wOedn5ByQEReG9HDim
-qmVWz4pqAe5ipo9mTEwkQzZny6Mw5QHp+SRk+Yyo/NT8Q0BkGPwFpYn9YYUvda1k
-mYN41DwJBzG3m/kfwn3tmIbxCOnrmTt9x6cGuejPPsOI1VjhaJn8HMK7WOOA8DRh
-Zyi/IkZ04pdNlz6PeC7CbzvgGMgrY5Z9mIHP67GlXomOtoE2ZsUyNUBEA2QCBroC
-ktzkT6Y6IIYUe+EdQ8LdMJ+uisbPl72jmkPmnj0ssZfKkTZRTMF5mpR8a/AlRQwL
-VG5qGWHCQvsYUT/C4fNqaZKjwn53SUp6QDhrpMrv1UWhdLSWS+FI
-=YPkN
+mQENBE+ZO+EBCAC3fZOOuYKthr0GcUge0PH2bh18sbM9XUmPKQz/W15l1NA/2ARS
+2gUXM0R+SunMlun9KsqjnojJ2ObVPvbm1Hg/66JSRgR3JWfIpSlJxLicpfu8rCfN
+bOjh4v9ZipD+px8w3o/RNrnZH/KRsoJg9yER6pf+pUZqTJfdg5lXezc1WF+/1qVo
+ypldMGfrkfLsPrUZTT689ubbig978e7eYmJEqldtaIwaAzHQnB70wIJyg/rEwFUM
+ldsvs6t6czSuJ4zPMvmh8TMpTg9e6+DMktPl1CWRONl8RPpgYMIC96gb4OnfDDjk
+Ex6clSCwgbDwdeAyOjjR6pVq+pCNTo1Pcj5jABEBAAG5AQ0ET5k74QEIALaxogmJ
+1t7arw82krV7ILlcOu6aLuuXTuy03K1/jU73oyWfUqwvPSbH4igcLb8kt1/6ogfk
+u0T9tTx+0mDsvqK8A8NZ2nDTXok3T58UAg0FTXlqUqZmy5QPtG+it2j3/xGgip3V
+5p0Ml1TqEl2SfW6gHtLptDUWzuzPi9SgK1ZFlueprPg7xwHmWhp0gwx0KSSOYWlK
+oEllj/1aDxFNcdKogWcGN5aJEsETCEguBP7olL75u6732wc3zola4zTy5bFT4kEY
+Dk30Du3VGQJrdsqlibdQpZYm8uH4AVXDmFMdEAjIs/DGRrUgde/oUqwtgm9U+p9M
+qcbmMoeLFdi7ajEAEQEAAYkBHwQYAQIACQUCT5k74QIbDAAKCRAsexLypRHjJV9F
+CACkvuGQCqxhvY21n800w27vc85F4Fdd7LjA/l3Bs9dA5HZbk1AV4/MFpadvPX1z
+ZuBOPYqbDSvnXGfoDgE41L29S5Yeg+mx89UDO6JcQQnlNn3k5mGCgR/BmGPSWc3w
+FzTEIXDYoj4/p7Wanj8vxBQOLmRzO1nu75dnOwgXAwKtTTXhHM6NCrxuwFrekKGj
+FZm7wNeBCmnTc65hMvWqZGoNQSr8M1yJ2AryBzGvWaonDklHCOUAmLuU7n7yBOxK
+tyoYdhMdRYjmhAPueyzK7ejbEil6wfCTWGyOaahNa8SV2Z2Lcd2aTwABHy4z3YtQ
+DpFob4bKD5ohhQunm2EOXlWy
+=Y1SU
-----END PGP PUBLIC KEY BLOCK-----
-
-pub 11509ED50EC155E6
-uid Konrad 'ktoso' Malawski <[email protected]>
-uid Konrad 'ktoso' Malawski <[email protected]>
-uid Konrad 'ktoso' Malawski <[email protected]>
-uid Konrad 'ktoso' Malawski <[email protected]>
-
-sub DEDF3A7EB400D53A
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-1+61dcLTcdUOi2uBhwZG67Mpp3cSRw==
-=lHW6
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 1188B69F6D6259CA
-uid Chris Banes <[email protected]>
-
-sub 0888B86856F9D71A
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBF2hcBkBCAC2H5WcFoeByKBUAjRDjmP+5P6FRsZjLe6c1wy7G1ha6/EQUVK4
-gZUZYE9W7l/4QKHvAu4PvFWdD+5FXGZuB/2kw348CtabAlJTehm1QlPt5//ODkxB
-fWPPz3uHBo5PQJZuLpStQn+aEkTTHK6Sk5033e6fa7mV5X/c8pTmTzkunG58NFbj
-5VSVbks4pbafKoMY7rSN0/I2hEApCjB9tx/7DJuQ9gbaGhmabnhBTnwHXEV1/hIF
-369lfiqeoeqDMOKj99C6KFD/NPRrRLfoPRpqL3LPsPp7P+TzyZN2q89Xqn2ysyI9
-jDtrlssEXLskU5kA8fVa179V/QR6QtrJ29m/ABEBAAG0HENocmlzIEJhbmVzIDxj
-aHJpc0BiYW5lcy5tZT6JAVQEEwEIAD4WIQRkubCfFkqgv4h0LrYRiLafbWJZygUC
-XaFwGQIbAwUJA8JnAAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRARiLafbWJZ
-ygNIB/wPXRnQJ5Pj+G/S0sbcDjTFegfN5TzXRRu0wXyogHPCt5ItE+8DURp7coq1
-eaocMZQ1186QLow/gInpji5l2pyv8BjC+H0GrXrT00S4wWcmd4ink+cNIwCtO8Dk
-Bi25t9RxA12zKqXn62W8sATRl4DlL17ASw8k1bYDGWWJAM8GJG2yucaFN7RohO7q
-5QmcjsXmuzfZtcKrlVBVNkYoGQKfjgr5fPjG1p5aOKELYt33u16stDGOuvXyJL2h
-4FhqMJL9UvFj7uOdMQLK10QPb3tFXELchvBWCkD/GVHtH1hwFumLkLbIKaj43Sq8
-Kap/NfRkl5GXw5e8UQDQevfTXdJduQENBF2hcBkBCAC2kr/FJuCwW8jzPDyH3EsJ
-ebKgUGpdZ8O+OtbvIBgIt7opJ+tkOyBjt0kUbiXEeoZGOQ8qtaj8BD5nAYytDZcd
-TU7ZOE8A02bMXsTVeNKkPgbmYQm9DZokAUQWO6NxohWvJqnDXkzZyMb6jGCJyGHL
-x6bN6++0DWPD2c53wzaSZLg/776BZw453HWkHfiomtoKgBR0DMOg51daAsj8d/Aq
-itdK8Nwz7cmKP7FaOu5lSyWb6F8dueQ2yjQEykq4YrgiLCva/pSL2Pc16CNnCRbD
-QNUEog5Ldco1tbrPPfizLeXVQmp6tG34aa1OCd2WKs1EtbFQHpFWNo0cP7LInV/r
-ABEBAAGJATwEGAEIACYWIQRkubCfFkqgv4h0LrYRiLafbWJZygUCXaFwGQIbDAUJ
-A8JnAAAKCRARiLafbWJZyoPeB/9hrGRr1ivPnQOMtAJgrT+Aev1gFKJxgTJlB9QM
-fBmjyiELgnjwW0COb9nRgalDk404f6nKcH0x0jElhUU79h2Qz/NoGP7QByaymdeP
-j69SQeDb3TyI+tHShX8r3gt7fEyeJFYyr7w8xmO6B7GdTpltTcrbG3uk2o+e1GPL
-+u86S0QhG2RyBKOIWLXoRCJQlouzNqiZl7Viv8FN28NAvCi+Crp/evPtNNOYjnUP
-yIoOKCOCv1Fth5H0DNQMLsCZbHPLl1Lx+AN5JFR0xp774uGkzLQ1jyqXTbv3rn1s
-LjK0uhsXbr+8I7TfsExnrL9DmAn8R0nE4uPV2wW1NzwavqcU
-=yIZi
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 125A9EC9FAA91AE1
-sub F2EA967B5B8FD0FC
-sub F860F86A8AA8521B
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-4D0hnpwfN9FlrGaJAjU=
-=a9iN
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 14A84C976D265B25
-uid Rafi Kamal <[email protected]>
-
-sub 0190A8A50D88C2C9
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-sPa3uBnylgYyUnzuNZB3kLz3zAM04/jc8Vk=
-=/GAm
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 15C71C0A4E0B8EDD
-sub 891E4C2D471515FE
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-tiwy+wOBjaK9g3Kk8jsN3I8t
-=8Tiq
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 164BD2247B936711
-sub EFE8086F9E93774E
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFPU8TIBCADGNvExYTJpVuNGCF9NuWw+IkitjAD7WzF7QkvFCSw9VftzgTUZ
-3PYrThRiaDdmHQAke4Sp+nYyAJ7iUcQqg/5/ONiMdzXEv5Kwy5WJN8+o2aXSunIT
-PALIw29DemZdVerw8Xc9jcdNYGxbPgtfSjr/DBCBs5Guq+RuuwsBvyTGLiHpc6hb
-91D/wX6Y0NQB4UlY9f3k6AgqiR5OGq602hXYvL10pH6eT3gSmCvxp1WvNJDBmaRi
-ZdgW76Y+bGQkmygWdAb3Q2DUEQHVH30YTBx5VFoiCfx1Jud4mD90Tv1hhPn0fS50
-oLGqI6f+VB14iJ4XLaSfyk/UMl343iF9PAg9ABEBAAG5AQ0EU9TxMgEIANAOURt9
-TLIRxc4lZLnve9LNSjTe3g88MOSoCI/EsyOR4ttMmc7NqNgCwYXyuNlak+jSGupL
-biUCaFq+ioYWPpDGmZZLfiNFPi5Zm8uJdo5RupRTzWWCGryzhb1PHlr1Pd+H4C7r
-SuB4pgTaPB06p/o7H6DU3/HKb3AEkJ40FThJX+cU2EOkVs999WQ6Xyabj8j1ivfx
-jB0K7q4SuEGEpWvbGHWCGTNuzpjcXYvYWjy0pGgJnmBfaZ4NAqD6mpyNx3yDfVvV
-Lu5D3M1t2a9Q4F6uKbaO65SuvTNNRnsCjFbk0tjCas1s2j/QQjI9IyPonKUkVdOv
-egP9XmQke1Wm/TcAEQEAAYkCPgQYAQIACQUCU9TxMgIbLgEpCRAWS9Ike5NnEcBd
-IAQZAQIABgUCU9TxMgAKCRDv6AhvnpN3Tnp6B/9b03x083+GdaHSBO5QvfJNMxe4
-7bzx53bFMrCqd8zDra7hG/AhNHLsPWdK2MyAc1U8zZt9OUqOxtcb9x1Tneq1XDLa
-bGaaNnQMhRGwU8jqmwyn1qxseE/XutZu7MjQgo2nRpUwBK+1y5CcC4I4RxsEzff1
-RFs9tOyXy+rtV3X2hhksT4GUag8O3PpCmsdX1NdMFfcL+W7Orf35z6iaaWUketOw
-YhzVALfAqZ+5BAt0ZvJktrn6oOS1/qri5YJeCuy/hGHnKuTsf1BuJUQjRmuntUzP
-y8qDPBqTAtDjitO/RnHjY0fq9SceX8Q/EItOKyqPFOC2XfCooP/zTxowcdsraXEH
-/idJYp8nHncdzsoRonzNY+0n61qXkE/0yWRtPKlcO5q+3i82ILT38+2M7MQgHBqP
-iL8UmsVRfHNwTHtJYsMHEgy90heV1mLft19OHvWEzgyopg+G6oWbaPw7CR0djHfJ
-vEPGWvldW0vHJaIA9X+lm6N2nc8tsPm62i/ig8o5tjULAUrizQanCv87VxqsSt24
-Vh9sE+eNXY3ffMv4wedl/nlaHghBD2YttcFulAwoB6nwtV8YbKu9AWx+UQsCDMdo
-slVaChMsTYWjoAKUn6vZpKNDQJaQLk/R205uhj1YKBM0wBwYQ9+0fj7FH0hD3qfq
-ZsgZV9p6yscaETbJeSljYkM=
-=FjWo
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 164BD2247B936711
-uid Marc Philipp (JUnit Development, 2014) <[email protected]>
-
-sub EFE8086F9E93774E
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-Qw==
-=iceo
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 1669C4BB543E0445
-uid Emily Johnston <[email protected]>
-
-sub 5F6BA89D4B0869B9
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQGNBF3TQCcBDAD177B+Btl8XBEkBQ5jFSezFrpEl4arwCEa7htCp6T3h55HvYwz
-P7Y9zWYXfhAC8XJlPQJYpqaQiiYtdlmOrOS4wbp5Lr+z/0XpFlJFzdKglxKYcdfP
-ntnGyoj7Dz03v+SitL9Ct1YZmOGz6onlifXsCTkWraSJTqR6/y2dL0Beu7dLZp94
-fgf+FAfr77bwGhUhOh0pPI6ZK2VwNMiQN92jS/RYb6i7QjzO654ALTBR6R2sqx26
-C0NNsTUZ1WawPreT/rmR4vux1pvgbC8DcXqdptVb+iQPymnysEr69J0f7YC579+7
-itFIh6efV75W9nDqp9QB/1G808oYx1rglUstOCI0axSgSNyazbInW9qOI58rLQ4v
-wnCSTWvesVNq+uO6aVrfpXIO3uUTI3t4mpBZgVYZ+g30BlCPRx52YofvQzYbbk9d
-wCMUDQAzKGJi+mazkgBhcz+neEuNUlR/0fBMObzb7cAT4gGo/sSzYVNN5oT3u/Mi
-J4hfzYUTFMsJBp0AEQEAAbQnRW1pbHkgSm9obnN0b24gPGVwbWpvaG5zdG9uQGdv
-b2dsZS5jb20+iQHUBBMBCgA+FiEEdhWtVhRN8jdvSdmLFmnEu1Q+BEUFAl3TQCcC
-GwMFCQPCZwAFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQFmnEu1Q+BEVv1Av+
-L/vJeWLlRoN6rdi8gto9D7kbcamLYCbpPoEG81XnY7TCX36HoAawC+DhuVNjU01z
-W/WQ+CJ3bfbq4u5WDZ964czksn4V3r8XWecD4Oexdqn8nSkC0HkxXTq+LIUF5+IJ
-OtqHU/Fd8Uinj8/CWgiplTeIBynu87DIravElsV3QaS0xYsFGllhA4Bg4/kpQ6N3
-LiFCPH3vVGgkbdWIJH4xj4/grdThSE8ZwMb7FX5i85RElpeMq9NVRBOUpwBX9hyG
-zKD9/SQONYj+JiDcythBIhe3ijmWHt40oAu31eYeckO5uIbMzusZ9vT0Px3Z/Vl3
-Fr1BCskZ48UwEAVnnQTA6sz7Sjj8GT1CM6nDxCE7PMKYleRomHPgoOx1KeDNtXGD
-3IeMsNdszr5C0s6TC529mQvuCC6rNM58YtEsrWGBkBEhiH57+HvzIIHKxRktsf0E
-G2kFRsHRI7dETG0r3aHn6137eK2l+nkqb7js7SlwFj+gioCvagrDZYGQq/zmkyg4
-uQGNBF3TQCcBDADJ17PQ4z5UVGBVUefEkTXeVlGX4oc+vUOVn8Z9B34sQkFmgsOR
-uwm+/1rGthrMatro1Jka4UXSxYFMCt6XBz4/OdJbquxs6D85iudaId9aozCOJypk
-fprp+ez2PK7pWeOq6DQ/lqqNGyoHxA703wshI38sNcKRcypn/vf1VJlO3ZjfLCVD
-Qw4+yNrdWiwklb4QS0xwjK9Bw9m8g6HiQGil8V/kL9Avpa76rGqaP9YnkTo7NQG0
-cwEbpcxNUrkO7fFKjTOMTmfPkh5pHAHVS+FsrCsxhRs6Eb6u/qestHjpYj6qtMJ5
-V7oXeUI3OZ9nAPctSxoNVn6f0otsaatoBwcJNNhO/6ZIFH7NlgYQNN3a5Pz6NrU1
-3+zMGbsxYzlL4/nVwhdn/kHPQ2tl4e2R79da7ModAjeafimikA3nGZj1Zvo1iXKL
-fguM+U90kTrPKSxcJqwgV4QvrO9Z9llRTzhdBmrFePFhlxN3JdpSKYXFInq6Jwnc
-mOAeIDhNYYcVXhcAEQEAAYkBvAQYAQoAJhYhBHYVrVYUTfI3b0nZixZpxLtUPgRF
-BQJd00AnAhsMBQkDwmcAAAoJEBZpxLtUPgRF32gMAJoI+6dvnT7GOJB4S0HAB2qh
-izmQ5MWiO7QE1HKQ6ShylihJfAIMnAMlLPhorr1ITZXaNMFO+rWNO76BdsBxAkd0
-rKIIjMTU5r1HuS+XCGFzitffkJ2TgQ2K4vKnSgEpCsBilgCJzdJevrYoCAudkZAa
-eBcT0fsTtQDnWHUJSkyWro0ovaaPF5tJzMkFZQBlaNyb+DmWPyNt5TP6iORnmeLN
-E0OajrUawFUcLUITdutn2t/PRE9LBDSlewE9Gabv79z8ZGAw7jPKx/p+ePpIj6J0
-5TM0BR9KLrk3avMIK+eKwcvm+nCyYA1jKr7c9E4bg+6sRbc6igvVL4QeKzjeGll3
-vjifmghVXVKVBOW1fk10cMNKaTEkGng8OfLhJDQDXuNz4m8/pMA/wyGfH3HBGSx+
-F3GZUb00kU0HbxV2Vt0QlyjwT9vJfVGQ4Y+GhnMF6qErtdX8cBIWFJXLEW77wWHN
-+QpRD6BShYZDvUA2mtO0zlB8reU+VCxgnFfm66DkUg==
-=wp39
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 1861C322C56014B2
-sub 9A347756830C4541
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQGiBEGVK0ERBADwhGhmOMvSgvGaqHW3ial0NS80ZXyE1EeNL6ke/WrXHB4dT6if
-inoAuUgRz3v9Na4rjSQ8YVFjn3NaZq1i8RM2KJOUU8ZkJ2AsrH6fqStjofLTd5ng
-iQaq2wLM5rTQfdjLsGQb1iDNDyCXU56+/l4mFZ2JiEGCq3Re9EFHelRBKQCg/7k0
-BIfyoFVTHw39PKaDBmCYF2sD/3CMD0J/WldhBM7gLOndH9/YEQaEMy+PJNXcfTWN
-WLygGPSOQdNBulyLkvcFIZjUTxFVakh7FbjMq3dsAP1oqthwmK7L8A1zsvRgp/TI
-4YMHkZSkgcs0PBBby+h/lpgRrWmtwjTPzql/K5xX4VSRS+umHye/7R+4ZEH7mABa
-m/ZABADkPGG2ECvfjNosPQDHZVFuF9oVaske0OjzxI+rU6sR1fJKtbOPl9d+bgz+
-df7rZ3mwppkPX2r/muUbd0CM1Se10sK7ZAoPYmWqHX+vB/oj3Jq+iqb6M5mDZzEz
-6h4hdnaGERyxbktZvhRV7Psco9CGi8o7RFUQTR79Y5ElnBavqLkCDQRBlStBEAgA
-9kJXtwh/CBdyorrWqULzBej5UxE5T7bxbrlLOCDaAadWoxTpj0BV89AHxstDqZSt
-90xkhkn4DIO9ZekX1KHTUPj1WV/cdlJPPT2N286Z4VeSWc39uK50T8X8dryDxUcw
-Yc58yWb/Ffm7/ZFexwGq01uejaClcjrUGvC/RgBYK+X0iP1YTknbzSC0neSRBzZr
-M2w4DUUdD3yIsxx8Wy2O9vPJI8BD8KVbGI2Ou1WMuF040zT9fBdXQ6MdGGzeMyEs
-tSr/POGxKUAYEY18hKcKctaGxAMZyAcpesqVDNmWn6vQClCbAkbTCD1mpF1Bn5x8
-vYlLIhkmuquiXsNV6TILOwACAggAw6kL0PhPZ/EPI0mPfmIYeaKUgTB8q47nDKY4
-6wDs1l/msVJHAVwGEBHuxmbC7r/qfAgfSW+/Lj4XbSLCqaZIWSu6lfY43IOIYXD4
-pe5cCnWkQij+h3LxRR6uDmBr5cwheHEuB2sMFU5lJiiQR1+eXYkPNK4FgVQpHLWe
-boODAlTf0j8gRR+aTs5eWXqfSA+UEsXpn6453bfZKELXkRmEznb4xyGWJaLW2Mlm
-aRlauYvc61M7FK8z15SSZbq6oictpnEcfkgnBxcNza3jZQV7WOWZ3BlD1nKQ661s
-bmS81/nLnxbov9ASs25K2olXBsHkERhjMnERedvv7avlmBwi1ohMBBgRAgAMBQJB
-lStBBRsMAAAAAAoJEBhhwyLFYBSyGTQAn2u/CvPzKwRv1FUkPYR751j9PGwDAJ4k
-Pt2uco8an9pO9/oqU6vlZUr38w==
-=alQS
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 1861C322C56014B2
-uid Niall Pemberton (Code signing) <[email protected]>
-
-sub 9A347756830C4541
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-BQJH/jg+AAoJEIuWKUP8JD88iCUAnjCzMS/aS+kcSh3MEQzAwIAQIchlAJ4nfbxt
-HE7c339gdVk3NrBOP2uxMYjGBBARAgCGBQJH/kXbMRxEci4gVGhvbWFzIFZhbmRh
-aGwgPHRob21hcy52YW5kYWhsQGNvbnRlYy1kdC5kZT4kHFRob21hcyBWYW5kYWhs
-IDx0aG9tYXNAdmFuZGFobC5vcmc+KBxUaG9tYXMgVmFuZGFobCAoQXBhY2hlKSA8
-dHZAYXBhY2hlLm9yZz4ACgkQLrlGgoiBdAJrdACfeBqnmjgKGEQWGXN/CkRc6Kn6
-2EYAoP5F+Q67aZLIyCINEIfmWNr6MXVuiJwEEAECAAYFAkf+TdYACgkQMaY9luwU
-C4GqcAP/Zd/qYdGzHzRTrb/yLjmtbHAlZU3PxrSCA9W0HO3jXRQCWloBY/Of1WOg
-YeqQRpQtK8e0aeUUZ966ir7Iqpt8kMuo/vvqnN4LZmTSBZIp3cpp9zDVWU4nCOgZ
-v6/mxhp7EsjtTpCdsfy9/GsqKjZhaikyJWyEJWV5o5zdmj6/WsqIRgQQEQIABgUC
-R/5PbwAKCRD9b4jGIdCnG12AAJ4/2920ifdU6veCaAu6COBiJFbpEACcCGIyiCMz
-/+1GlVZsBoDy9Sv+jeiIRgQQEQIABgUCR/9SzQAKCRA8mkIEDAiFtEMuAJ9UolA/
-MvkvDQeiBce9MLeoRw5wUwCcDfdPjZpG6rOhBwjU4j01gOuNd9uIRgQTEQIABgUC
-R/+mnwAKCRBMBCgYMRo95UB3AKCYEbZIjTTLiUlSixmWpAIQita/oACcCrZBvELK
-GXntPR3jo21pbLN7aC6IRgQQEQIABgUCSAIH0gAKCRD1wmAWTO7XX6zlAJ9IihAT
-+kUrFtH4iXFsVk6D8lzepACgk7XDbEYSBVfOAZC5OvdZH61nCzCIygQQEQIAigUC
-SAN5GR8cSmltIEphZ2llbHNraSA8amltQGFwYWNoZS5vcmc+IBxKaW0gSmFnaWVs
-c2tpIDxqaW1AamFndU5FVC5jb20+HxxKaW0gSmFnaWVsc2tpIDxqaW1AamltamFn
-LmNvbT4iHEppbSBKYWdpZWxza2kgPGppbWpAY292YWxlbnQubmV0PgAKCRCLOmAf
-CMl15dUXAKCdley4hYAIF6VQ9DDdqGZiX44nJgCeOZvjSdl4X9PwnKdu5M5jHOwt
-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
-Pt2uco8an9pO9/oqU6vlZUr38w==
-=bKSo
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 1939A2520BAB1D90
-uid Daniel Dekany <[email protected]>
-uid Daniel Dekany <[email protected]>
-
-sub D068F0D7B6A63980
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-1ejrktxPt0rVTJs=
-=Rkt1
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 1B2718089CE964B8
-sub A182F48D9C2C0825
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-yEpqZGNE2g==
-=OLRp
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 1DA784CCB5C46DD5
-uid Rafael Winterhalter <[email protected]>
-
-sub 7999BEFBA1039E8B
-sub A7E989B0634097AC
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-=gRaX
------END PGP PUBLIC KEY BLOCK-----
-
-
pub 1F7A8F87B9D8F501
sub 7D1BE4480B61E2A7
sub C2148900BCD3C2AF
@@ -1658,285 +1232,113 @@
=Le9W
-----END PGP PUBLIC KEY BLOCK-----
+pub 96FB9DB219F3338D
+uid Trustin Heuiseung Lee <[email protected]>
+uid Trustin Heuiseung Lee <[email protected]>
+uid Trustin Heuiseung Lee <[email protected]>
+uid Trustin Heuiseung Lee <[email protected]>
+uid Trustin Heuiseung Lee <[email protected]>
+uid Trustin Heuiseung Lee <[email protected]>
-pub 1F8CF885D537A431
-uid Niek Haarman <[email protected]>
-
-sub B7D9C5C3EEC4A9A9
+sub 684EB33FB007E676
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQENBFkyw7oBCACtGFos6g11ycruiWMuXwrE4+XbU85+1jR99AN5PcKjgXo/J3T9
-XaZLjJ+oTWCVgEHu5PTxAftbkq9+lmDAUEWZ1Q8dKrnVgBLsFNn+G2pcvVschorz
-CYFu/WT+eORA2UkdPZ7LH00iMx8DFpGtL2dBZY+tS3OpLi1LdNw4Dh/dJO7x7gas
-GWVUnL7+Cv53rmvwj8bQEuvrQjaeXMGxJKUSm0qpJ7BvkSEmQZ7qnRS7vZ05Iz4m
-uJsTNnuxtf0+fmWNrIqpv/J4RvaZVdA5OW/zA1kKYaGlZoLtWhKOht9gPAKlBk4k
-/fBfHoKqm+vnaOnxSzuYpQkYWqeEu6qzfZOHABEBAAG0JU5pZWsgSGFhcm1hbiA8
-aGFhcm1hbi5uaWVrQGdtYWlsLmNvbT6JATcEEwEIACEFAlkyw7oCGwMFCwkIBwIG
-FQgJCgsCBBYCAwECHgECF4AACgkQH4z4hdU3pDF9hggAoh6EV67Ep7HGBScS+Ow9
-X/gxOWzFS9aMVJw+MzSRRBm5YDSsJ3QfSEZHSDc7gkD6cHUjpUCaB2bAnrfv2wKO
-4EawnXkj9vhnZ/M5lVl2TOi/95Yep3aa+qCgl3jNefzANgrRgXhW3m5ao3YazHVy
-eBezQGKbuBfLTuLd5sknl369zY7IOuP59KaB2BYZfPYqpRrquFzZhdQoReSyhu0Q
-DFewliiCF5QA2AkW7yqrQOh7mEpCPvjX2GfqCsvIF0HoIL6zQuBcif7ELoSnFWYX
-RRpD7b3zshMX4Yt6yOMkcoN/JOGe0F9L0eoK/Cl1oPW1j7tdnnEn0+56CxbNExQx
-mLkBDQRZMsO6AQgAwWzQyChoPMNa3OER/72w/G6EtbS15PxNNktkPYFz2ibrDhkf
-z3av4G/mxYpYgvPhGHlgHbnGGfmhetEXVebc2iaWYih5AXxzCBQfDQNB5gsVg4x7
-SAp5rVmTnmgjtPV0domsbwK/vNepUK4dw5jMwxIbVO8Hsy66B4yvEMj3lFKkOg3a
-8uY19DaAlxehYAWyiWfcbduD9GeDGaiIXnbTgaf0x8s8bC1zWUlShRISrPnMOvPx
-D+PCJ/Qna2ixES7IpkzHKJCX1NMwKk20rH4saiwIpQwL3A2ktF6VRMmv1xHwZUl6
-3xZYGN7u9cJ2pd64xSGkTZxVw3P5KVoMOPTY2wARAQABiQEfBBgBCAAJBQJZMsO6
-AhsMAAoJEB+M+IXVN6QxkUgH+wTO3xI0072PDGNFgkDcItRy7G6tKphQNAy2ylDH
-y1QZ2uHWqNBHy9LuR0lzWVqWgeDudQQL2MAENnxJIV3mKeiHGspOaj2RgQcuIF6g
-MvFUODfme/vahJMoe7JhmX7xCMVWDEMpOg8gIyr3qix0s4DnkXKXgE+v1qmVoYb5
-qoPguSQnOyrHYxWN6qc3I6mwBi4sJ3PsCrkKDUXgJBiRjgbSkemkDi7naK0sRRYE
-tujjOSICJy1rc7jjeEPRcsk1unydI8aLPO2fIooiLrWJJPr0feeZVrGHS2Hpr2Tj
-kB+5IR1A1FK4o7oFcZTLcXVlQFgkac8BPyRuUGhF1YX1JA0=
-=rXm+
+mQSuBEwVyy4RDAC9hprQuF4fCPCYdtMlb0Mfb+6G2TqerT1MebLm8/KHCRnPbFLg
+PwGgcyynLX5R2nXUb6oBZQByDN/Dal0UMuC19KeZX83LTcFE9vr516BMXLXXKmM9
+Hz5kygsu1iwP4oqow8U+ih16rxdYDmM3KUGhPqXYExpYH777NxaxxCyPJn7Mz/Lg
+QdPkO0awyl86sex6THr0fYJqR11XW2BkbK6Pfs5ubfxrMZxy1JujUw0UmzzEkQqU
+1+lncxecrevglH1R2WdIHx2sjkHQtwqT2rcsk9gJ8ISL4gKJ7LEYfLooKRwro54x
+WVi8Eu/XZ7OHfQfgF4+JDofIrd7zN0/Dia0qKpkZWJTrYhxj6ouvYqMPr7+XEBub
+eHFU6S7Zzo62zkm4dv6bAhvT/M1WWKih+dOvYJ6+qhBt9RsHJdUePAVYLOjTcvl1
+Dn7YKRczBpeiGQTGaquSkWh3HPCw9Eom5wPs/J1L5eeLdKoqyGUQvdGMJxuFLpSM
+BVN7Q1Voom8XBt8BALG8oGuCkFZUN6ukJQn1SWXGeBr4IUbFU9gnfZUVeLMpDACS
+erCIYBhSRHK2XaHWxPppw0yMm9e/eO6WWpVBZLd/cbxtxwJUandSfOhKn5bGRsGs
+phhWXjmT4w5DF3cngfe9aMSAV6xTwfnzJ5nSBwejU/UYCiKTnGVqVkMV1N546ZoO
+XCEJLRK8GeHzBXf4bvPW+4DVhfx/LBz3h8VJ0vy/cjkEqVWPCvb05WqZ7bhnk/kc
+N5F9NzHzCnze3fMfOtUnLgPCaAwWN3S9fJpKumhwAXdkp7qZv6CuvKsXsETmAPYe
+j9GYWiUpbL4bm4C+QEC18F9VkDs5BA3PhukNWutFcYJuRoJ6gYyUaA1PSqvcTaE4
+RM7Jjn3/fbMC+PQTNOYdixN5u+ASAsgjEDDaQJYj0Nzm8hy4uDbFH8TIqU/RLs6w
+pK8oLonItiu2UQWPnExvIN+iYGCfeMWDT8Lcx9cDxpshVZTEyjImPMlQBD3dE9Ov
+Fhh1nVjAZhyVvPbfshtBC+FphC4///lHumxAVJqu5oWdVj0cTlEqEAlOMNHBzJwM
+AIwXYkRklTogkJUCSZb8g1FB+fn6DJCu7CB4Fjd596IJn46fkCZKyxQ+L16KNl6Q
+g+oEhzsGWrpiHcBDZk7Oo5II4Ajjs2IiNhEkbUKbKn1aF3fdnpByOR07Qs0fKYCD
+xuUIgoW9aLtkJiXnQv9ddgpOvNpiqyBVs9dw4c9wWJon6q87dSRv3ZnvR+x64A0I
+82gtiE/gWnv9T7n1ri/P8J0/wMN9G4mL0bs7wTSSyd/rM2dDruYysYQ+CtMD8oIl
+VhV53qEB+5/IGb24OVileRPCVW7jGSdfWLbrV93C7GOh7gLsm+M7sZYqDTLgGkq/
+JNZSiVocTCxnZbi788kT+S6LsDdjYzGwqTqrdH/kOFToxMaen2mG37vB6BjA80t5
+lg79qALXIOKWPDI3UJ9LMavq8MXILghSbgJD78QwmPEROZh+ywN11cDw6yc1HSFw
+NrSZZuKPnj01amo5/Z2N9VMw/DWCYVA0HkPGnnxLsyboIA4tE2JR/QdNuy0CGrmn
+8LQyVHJ1c3RpbiBIZXVpc2V1bmcgTGVlIDx0cnVzdGluLmxlZUBkYXRhYnJpY2tz
+LmNvbT6IkAQTEQgAOBYhBIhY1FvpsnaAIxgVW5b7nbIZ8zONBQJgXoAqAhsDBQsJ
+CAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEJb7nbIZ8zON6NwA/1oYHd9ChpQGGO/D
+lKwqijmomSpy5eEz/U8iJeq1eF8JAP9nOLHArkcDUvLqXxwPyY3SD2GE19khrbRD
+w25IWil3qLQsVHJ1c3RpbiBIZXVpc2V1bmcgTGVlIDx0cnVzdGluQGxpbmVjb3Jw
+LmNvbT6IkAQTEQgAOBYhBIhY1FvpsnaAIxgVW5b7nbIZ8zONBQJan8rAAhsDBQsJ
+CAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEJb7nbIZ8zONyTkA/3PTaqRvtsm6iKSU
+FD2qe6805NtersLkzPJkChAHCp7SAP0VOOoX8tDOc7f4kkBDTnSwIYdLexqaWuwg
+7HUowhiSLrQhVHJ1c3RpbiBIZXVpc2V1bmcgTGVlIDx0QG1vdGQua3I+iJAEExEI
+ADgWIQSIWNRb6bJ2gCMYFVuW+52yGfMzjQUCWp/KjwIbAwULCQgHAgYVCgkICwIE
+FgIDAQIeAQIXgAAKCRCW+52yGfMzjUO7AP9nd0SjT5u7bVzZ7WIDNhKc3ux2nOv/
+ixSKtENArECA0wD8C9b7o0lW0bODrhoPWyi2GLhcy3M5LD5sDTZ9LmTugc60J1Ry
+dXN0aW4gSGV1aXNldW5nIExlZSA8dGxlZUByZWRoYXQuY29tPoh6BBMRCAAiBQJM
+FcvwAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRCW+52yGfMzjURTAP41
+zJKS3mNA0J2q0n/pAkqMd7EZ4SDGp/BG0lyKZvZyEAD/RZmkvpGWHemaNTRpuhed
+rHv7M0LnjMftrIVSpoyDynq0LlRydXN0aW4gSGV1aXNldW5nIExlZSA8dHJ1c3Rp
+bkBnbGVhbXlub2RlLm5ldD6IegQTEQgAIgUCTBXLywIbAwYLCQgHAwIGFQgCCQoL
+BBYCAwECHgECF4AACgkQlvudshnzM42ERwD6A6ge7K7+/QokKj/wFdTzgxOfocpV
+ttSqLxEsmhG04WoA/Rga2VZAQ6gHxgcCIx4Ot5XJJ1S/U6duv+jlYf1OT9HjtClU
+cnVzdGluIEhldWlzZXVuZyBMZWUgPHRydXN0aW5AZ21haWwuY29tPoh6BBMRCAAi
+BQJMFcsuAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRCW+52yGfMzjU1P
+AQCAhboUjDQx18iRbYdtpgeMZa2GP0Go25Ms/TsyKOx/dwD/YmAwU8c6cO1qf1vM
+UgqdOMpCjxTo+qUcbU8nIwrisJ65Aw0ETBXLLhAMAP43xB9VDluJa3m0EBTwOswy
+MgHbCJL6iK/MwvBGrTbwdu93jdhNBfjSUsEExMV3YsyIK/0oBDf1s33o6y51OZFP
+UC/NrUmx+QycHcSL8D75+D4M7324T6q3dqNpg0+jFTDixHi3FmNpj8NY+7iIS+Wr
+Q1qkBCfBbKkGrUe6lxgXksenvRoDQFrBndxlZ4JLKNdmY8UL8hhFDVO2ekD50iKL
+cXGTgRaFN3NlU2BLunC+ja0iGCnTVclvAznhmtw4QL7S9aqQIo00LhZlxfZyEQi4
+ljpSrB6aX1eu6VFCrsdldA3vJ31sCPhykrJhoEph6A92a0ewW94+Eun+m7YSVoU5
+noZj5IQlQ1YZ9acQN+7blEAqUBoresm6XJMo/ago2VooTt3bUQlKyoNJhZKfQBwX
+rQr60oskczUkVTMxy2KBTKqMV4BGWEdrkPrrs1wFXUXq8adNUHJ30X3y00Iy58VU
+aRZqLx/J9n+40LsERil+9YoajUMaxa9Xnl1eATq0kwADBQwAkJG2ODt7UZPzcPms
+4eE3az26d+jSPDqNnxgZPYxeW2pidwpva7homwLdIbMT6D52WU/DC+N9LNtuo/2h
+35hnHJ7fasEhXax+ArUzWBkdi61PxP31vM78fV5h7xxFJ2JPv4t6Wmqt2i+d9GCQ
+911lHGwtwV/iAVk4FY3i4f+bs0dkJs+yNhUWsVRzSd87cfvxij2jB7qtIB5aPWdc
+qRsZtSd5T51NtGmGtIrhVr988svcecOrdATU9qBBDTPDW5AacFIWu537nultWrot
+x6S7Wwm7mU8KnOP14b7BVB4rMiQJclSYjduBe+aWHNSxOJeZmAq0JBLdgIt+nerQ
+FeMr57q0q0qqooPIVvrVlxFxzXHZGISIt/JsrOUPJFkI95T7+2huRzNUHFmfHE3A
+eHrcLTsKRMe5nx4OYw/FDgk+qgFfUtUpu6RqH28WTlGtPW/6cZIkCyzc2wtAlpkp
+iiUdIA933CtSpEQ/KiDOj+gKsdtaZb9tiBkhke+OSd7JtoThiGEEGBEIAAkFAkwV
+yy4CGwwACgkQlvudshnzM41tWAD/Qq8DwaDw114pXn00eXN7Qck0v5F2xGpW5ktW
+CO7Aci0A/1mTmMrlJszx6YZuTkJHvAVGLVGR2/uo53VEYjcEN7vR
+=PCTs
-----END PGP PUBLIC KEY BLOCK-----
-
-pub 205C8673DC742C7C
-sub AD9CEBA0521B1945
+pub 86FDC7E2A11262CB
+sub 59BA7BFEAD3D7F94
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-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
-k2jL7nGs2D66/qmjgmO2J1/D
-=ugSE
+mQENBE2kzuwBCACYV+G9yxNkSjAKSji0B5ipMGM74JAL1Ogtcu+993pLHHYsdXri
+WWXi37x9PLjeHxw63mN26SFyrbMJ4A8erLB03PDjw0DEzAwiu9P2vSvL/RFxGBbk
+cM0BTNXNR1rk8DpIzvXtejp8IHtD1qcDLTlJ8D0W3USebShDPo6NmMxTNuH0u99B
+WHCMAdSa34wsg0ZpffwQmRxeA+ebrf2ydKupGkeZsKjkLlaXNkTVp1ghn5ts/lvg
+KeHv1SJivWKCRmFlbPhBK4+mxSUSOPdoBNAfxA51QzZoPizSk0VbRz3YufYRVLFy
+9vqPSorDmYJhCvn3f6+A38FS/j8VE+8obQ2rABEBAAG5AQ0ETaTO7AEIALN4amR3
+pf/FN8oMFa9eAc44ognamG31ea1lkqIiPssiJLC9J2z9mShkrECbsBj4o+HxeN/3
+rwW2hQFAm8cAbitujASpPs46slp7Ylx6cfmrNqh3tOkg9BW/5izPwjXAuULovMpG
+PVf30eeDpf6huwRqyc9uYQSS6Jn9KCLi9ULxIeQOZi3UPHyMOCbnehR5aQQk70tI
+jbNytmFKC+DXFrhDiBjlRQruATgtuYYKMWUBO65b/SyvLG7zPGmHXmCSfg2qCTQI
+8xKN6wxgQY6x0PN9BeXa1du3497qYGhaHrsxnW/nM6rcQO2hKoOlY/GmicB5oK40
+MMVfji8aN/EYTS0AEQEAAYkBHwQYAQIACQUCTaTO7AIbDAAKCRCG/cfioRJiy8Qw
+B/9UbKogRzDhPYPeBlnchOR6gF69B3EFP/bvE2+hY5nIZLMZiVFtFCuWj65myN8x
+z0w29pKbHLLiAtVtx29Cvc8X/8bGmEn3xbymT2X4znuN/IeecK6afsw7ij1535a6
+KA3mh640noEird9/ajUOysS8MKFg4kQ54W5bG/67sjYAEkl6ns1sHIzaf08Ty+UZ
+TfNQGBZQGyTqNP6SUqcTIcTvpbN6A8vPeO0SVO7IHuNGGPJAm7XKIkQxuzbMfxok
+Y5uLl/wm6bi0gtm4QB2gjQzdzdVGrXZzP+8vL71Vdr+z//wiwafzySPLJio7LxYk
+SOg5cWH752laIzudmSBBw2Lk
+=HHpt
-----END PGP PUBLIC KEY BLOCK-----
-
-pub 205C8673DC742C7C
-uid Brian E Fox (CODE SIGNING KEY) <[email protected]>
-
-sub AD9CEBA0521B1945
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQINBEry8yoBEADnhvT3m/zzzuiUKyAeIfnN9CeN0ilQx4P0kFMhyZchRR4Ekb41
-iKw7tDL9q+g7xSo3yUT9dKjDWJ3yhDpdAhp6d4y8GAuWqlOu8CQdEHJOKK0yxTzX
-NMhSiskfUesM16q82/xHH3rUV92b0lxkJ0D/V5ldmYTaOwW2KRtQ7U/WP0cftdw8
-dJuy4ja/ASLn+WcsA32k3uA1X9qUCNGtJHQIZpcHi961rSb+fktiqjXloAX4TQfj
-Ys5TkOEykp5xSCK5aIf9ktTM67fS+oJkxw1Exzqm8dK2FT5xdQxtGEyMhwrj7RSY
-OUsP/LbgyKPviA4uAYGrtIKSpb9KX/j8eoS62MKxAP1Gw+rZpBYY6VuCOmLVOkJY
-yJHrM8O9Yd16eotBmbflx3f/X+/zGeEWno/GwQg+rX0NNmEWZF+TUZiIlO0n9dOS
-Ni8umYYRdVau7fsChwjRUPaRdwPGHQZaFBYsCPHAfn8Dnd3JPUWkevxui9pZ8Wgg
-1oFx1pBf2bu9NJgsWzn1idaXrxfyKTCuQFqazhBrhH9ecIwgzC3bLW8KBd5seG5l
-3k6FNSjk+54Z7sUU1ucxUUS9zK6dAw8+Sb3KVR8n4P3VEyBNKbb/U1fcXWhvm8sD
-0sQOruqx9h/g/d/V6iibZNu5fkmET/Q5X2qDFk9tRYUg4zeG0652KgTQnQARAQAB
-tDJCcmlhbiBFIEZveCAoQ09ERSBTSUdOSU5HIEtFWSkgPGJyaWFuZkBhcGFjaGUu
-b3JnPokCNwQTAQIAIQIbAwIeAQIXgAUCSvLz6gULCQgHAwUVCgkICwUWAgMBAAAK
-CRAgXIZz3HQsfNwPEAC2/jmM/b2pcc7hjzNEOGFkN2dPfsQDESONvlEKzWGyUpFH
-nYtdHPhurIMRKP4aNIsFlQOGrlYPauXy2KzJtZeM45AyC/rRG9qNz2FZK0Gn5hpN
-FZdSPYo4Dprx+iwXwhBmSu7dp2O2JUfGFH9CR+lWWfClykpsRz9zEeRRVuqLqN+7
-L/YVtkTUjK3f/I5t6VFX3VSyfCSL/935vRZQ6IkM/Q/bD13Qxbvxy2DT7O04elZ0
-OBx7ZOg1zUSAzXi53v/D6gNmT9Tpu/BXCN3WTQ79Rnmjtnsr7WPPRTuveeWFuAtK
-D9ET+bkR4rQjGjOr5CRg8Q+UBpvz9G/D10g7x3/1JIHMz3iXW9Z+NuIyzUelXLgs
-0yhAGVGSII7B/+bugUDYI0ysxjo083YdtCK22RDGl8y0NCzbhLDyB1hLVIiwEAf1
-2tMxNLjlTWqMEyLvo+HZIjm9XEbr5K9+/hZZQWwnlYvLNoG+T4dl+zEPlNeNCKCv
-WhbHzbARtTywyWrc2AwTh1J9WHwalTYBztaeBqdPqgC2ljieYHgq3sCOXfttE88R
-Iqzsb/zKNkoEQZDOUQZRo6cg9HWlFT9VHLAHPhmFSLruqY+CVyGuRbSKNPQriy+K
-LSjCnrKDne4k3hnSqONJyiUI7k88Z4rmydc/V2uNO4DNlFjV94Mk4leyiBoTs4hG
-BBARCgAGBQJK8vWAAAoJEJsf2p88BiIxVagAoNDWSy23L1pnWm0LlkWKTYpvphAO
-AJ9oDqwZHNfc5lRQZZEKreMy8GmGAohGBBARAgAGBQJK+wYsAAoJEBMuSdTkHtx+
-4goAoItSkltM+9fvDtxUFpEzGAnxVJrAAJ9e5J5OaT2To09m9+eYTUvRO0BwxokC
-HAQQAQoABgUCSvs2egAKCRA1lTles9jhuqd6D/4n21QKT2GidnY98R/je3oRTfp3
-lRND4e2f1dUcQ4CJ+vSJPu18P1STNmBzb9RtT3A0ZpBakGv82nSuxvnZGdDTOnoc
-Zuv5/CJVScyt98rm/NfzqXas+hLby+qBt5EhaeX/WDHEltoR1BqBAYSABn2RED2l
-G2KvctYhPNOlovycaNeRJpjTr75bfpigFxWao1LgR7YfNraybTHf8tKB70oy8CEP
-Pb0cTs02Y3aUcGa+E1wh4fyGYkXrAjwni3VLWhec/UwV7dH9t8CqCU3Y3L10PTNr
-jAl895DslnnIUZQUUDzYetHZLVziQ4mShPcpgPy1wL28eeN89XXA1/4fMdgnBYwd
-mZf5GkHwGfrVp11hiMyS7JMSUuy7ooUflXVb4aGzWrajF+matqVimLmCPuZwlg7F
-GOJahsl5AC1dunah5vqM+a3RqDoMqrJkw3hZAt5qCDomqEaWyJS3zdIBJKkCXdg8
-ZcJx+6t3+T+81u3oxkEzlGob9JxK8NRyF4Ye1T6+qqqw199wn8OvUBCz4LZSZ36Q
-dCqiexF7pZwJBUs5jiUcY+04U4Aadg//JjSScxh+PyHzuCMOGSqDcUSF/pzr5zK+
-nP2F7yCVjygpf4Raz4TWpQKrgtYpHWoxNDsc9maaIy27RWf+bjF6t0iTAEsuc6Jf
-Y0sAYfW43JmFWEoJaIhGBBARAgAGBQJK/IW4AAoJEMnHkk5RBH1mZw0AnAseZIyc
-zUYLmu0c9Rc8RTZzaTEaAJ40nvG/dpe3ZlufUu1J9sUG1uzAXokEHAQQAQgABgUC
-Sv4a6AAKCRCKr4jW2E5BronnH/9GcWLKArGlLZJix4SHmgflUoLBkEc0CRMS8lIu
-fIvHPdfhV2MpGmzgs7EJSDd4YagyNLO60FCUExqBVoMHVVkVqQIZJYnRBRseMEvc
-DfbcCImPsYHcEJEOP4U0WDMuu1xvr465vqulf617GABWitBxRThRHurauLX5hoWR
-4zSWzhrGqBjm1lL+vEPcfsnN8PBUBi1QfFR5E7cf7ulb1rbSnXBtQyMl4Qde5ho+
-xHHEJrmaIfadFu70Ome9UQ5GBrhL9AhwUvFe4QdBrnM7xS78jJYbOYTtYX9H6/vD
-KRm0pflnRlve8IWysIcswomCJPRGmOY2kVa2b0B8BgcGhtd+ntoZOD2LGNCLyY40
-7jntuIoUuEgd3ztlZZ1K9rB98zDTzSmdZypwAgYkvRNemIgYeXJev9iQHk0CMYba
-r7LAcoHkFpilV8E4TyzNV2T8tRAGnpqkJ4Vhuho74Pov+FHCkiFJjRqseKSodqOf
-s8w+yfCJyzjg1BV8enHK4UHGbaRB6ivl8R5sfg6j4me0IZh6WUndSAYERpdgxZxG
-5DHSmM2vlfS7395Dda3SYbqIY4odoYWdXDkkPQUmH9FjK194TeMW8jrsv3B1z3yz
-jy+t8kJ/AQcR0o5dkVSZCUSTWjLpG71pQnBhl39rRDpobiDAoAlHYRByohKgersL
-i2C/oHcUCEUfgz0kkQ7m2TOEEOEV75F7zCpdwH9JRR5UoBC73xGPromsqThNmZ26
-e/KkbwR48a6d7PHLBYN/UeShwdhV6jzbzT7aiJICcvA+NBexMz348yjJJg4WcHUT
-v11U2N1QULUcD8fe0fh+CPbfQzgnTy3hnp46N9UGiGbEpIQIoxVoBpEt0yBSYPGo
-ucgs4ru6XP7eNfKeG/x/2TlrVSpeRXZZk1h3DStPAuw0EztL9nyNDlNHcCh8Cnky
-LxCDlObdPZkx5CgLeG2JUqijAGm++ILAjTf67A6aGu9aVq2xb+0zPe5xBpwPSTmq
-wYHpKpGQshvXFkToE7h3mw1MvPcKrOS8cvGFa5sHYIJnDPTxLSLDRjP5hcgvg8/Z
-hfxMZo//jMG5FUu/pIWz5aHxQUjBv7phbwxwKvQAB7q4eYIPG6ZabYTQJDIweq3S
-q0XJaY1DxbHet+O4PKHUu+p0fjLabGTwENN8fnzI1adO6mKDrn3LcdZmPj9m1KkK
-2hslY7P8q5jz1AjAsVlSMWQoLwqfwj4ZqPnvUDeR1YivXnFf5jYkmX5rrzOHuSpk
-i5K7fKT30hwLE8Ew1Fn7LftldGWIi7U/T+IUlCDUgF6CxBKMjXCDtAic2dYo62aY
-WimcJC2KNWsj41+Iq+auUBdbIB4uHkROm0/V08OhQNSrHx7piQQcBBABCAAGBQJK
-/hroAAoJEIqviNbYTkGuiecf/0ZxYsoCsaUtkmLHhIeaB+VSgsGQRzQJExLyUi58
-i8c91+FXYykabOCzsQlIN3hhqDI0s7rQUJQTGoFWgwdVWRWpAhklidEFGx4wS9wN
-9twIiY+xgdwQkQ4/hf//////////////////////////////////////////////
-////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////+JAn4EEAECAGgFAksM
-3mcgHFNhbmRlciBUZW1tZSA8c2FuZGVyQHRlbW1lLm5ldD4iHFNhbmRlciBUZW1t
-ZSA8c2N0ZW1tZUBhcGFjaGUub3JnPh0cU2FuZGVyIFRlbW1lIDxzYW5kZXJAbWUu
-Y29tPgAKCRCbuGOw9Ru4ikI8D/9vWt/TfpmUErEq+Md9F0MZqJ2H+y/nJJMviUDH
-Hx+po2etYJauhw5Ota6brkLjef1cNRWQ4tDxctQRPc8SsU05/Epzrdov5SWVutcw
-vmAjWSUs2wKp7/+lPuFUvEd7g4xt8gXY+mmvo8qi8tTNE+nfzaU7I0MHIMbN25P2
-b6//+Po1ifLVFE+S9fq6NbXI0QvuVBKCCmzVvA4VTVNaCd2CQCrZA+6c5VuFJBZK
-VoCW2FThDvXyQYlQAZmE3zYAZDjNFU+jAYF6aqY0dtU6wh+U1c1qbpLhrdn073pT
-HsfNsQW1vyzYLLr7QxkU9pVpFJ5Ajq41NwyU6xxSZhnJN+7TOYcJ17EnDKmdO7Mb
-52nn0zvxG2bactz+ycWwZrIxfQo9RAxyor9shORfPmEoVbsLOdfuoJxvb3OL8mI7
-wcTTfsSoPeqac2p7NS5ZWaDenliNrVR5ZWJFQeeoll/paBampGjK5En/QpIEoct4
-p3KnVTusFSsZdRnNkOFCKPUusbiQPl7dga17oiIqhpsLewq7BnQ9oW8h5jO0TuJ7
-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
-y+5xrNg+uv6po4Jjtidfww==
-=uA5H
------END PGP PUBLIC KEY BLOCK-----
-
-
pub 218FA0F6A941A037
sub 9FF24F51B06DCC19
-----BEGIN PGP PUBLIC KEY BLOCK-----
@@ -1963,3811 +1365,6 @@
=XE73
-----END PGP PUBLIC KEY BLOCK-----
-
-pub 21939FF0CA2A6567
-uid Alex Herbert (CODE SIGNING KEY) <[email protected]>
-
-sub A98BD25BE464EA45
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-II4Pqx0ip7s95q54JSpekQZ65g==
-=QoHd
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 21A24B3F8B0F594A
-uid Karl Heinz Marbaise (Apache Software Foundation) <[email protected]>
-
-sub D658968EFD5E9F85
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-=klCb
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 22E44AC0622B91C3
-uid Cedric Beust <[email protected]>
-
-sub BFE9E301CD277BAF
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFpqN94BCACaAb8Afmng1QPu5k5uzLoA1FJnF6Wf31ZU1FzDxHFHLNUYSWN2
-Bg6k95QH5ruZ+Z/QOJSoIB+b3htDklyxd8m+G2KsMIqnQs0BaTN18hb3PFyMIknM
-YWkkTPF3nVV9APk73AebTAcd2V1GB7xOP+L3T7tyUcB9/7bDeM3od6qPksdVGNMA
-0S32U8SNhe4jw8uXKdFL6PSxgyg9yeu0V7DyR92V9jF+ZicZWxaLeKpf/Vn3MBX8
-JdePR9SCJc8CNj0n/tsvg/aSmGZ3OMZTUYYvrtfgpXUw0WVkyma+T0ANcdDN91uZ
-P8lV3o+Ic8f15xwsTePDhMhmtOapIz/85ukFABEBAAG0H0NlZHJpYyBCZXVzdCA8
-Y2VkcmljQGJldXN0LmNvbT6JAU4EEwEIADgWIQTHC4RPAC8h9tK5yHUi5ErAYiuR
-wwUCWmo33gIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRAi5ErAYiuRw5Md
-B/9ajI8dvk0oUaenxcPCchWQ6pwA2B5w9yQVWQBoJbxMI+pvEqpS6ur7PI+bJ0or
-rCyNLiNj/okFuU6yeh9g8eeKIR3984HtBAkGo59TtH9kTg3HDZF2ys5j+tdtcb3r
-KrGafc41llryb4XTGiLjcCS4n6q1EmZIJjCwvt1sIO1fo3cBim/1kjhjMgXSpiYz
-yB+ve1NaG+f//nfallAnryxFHVfk2/N373cNZTD9bV2FRZs9SSO2mO9BoyG8deSF
-x89lwLxK7MeoSH6pAioMMRGoZhNz2Thb9voUjrqS3P3+auwPt//JbhmCR3Zg+upu
-n6Aw5q67aj4V959Qra3ZpD/TuQENBFpqN94BCADAfXydE1VYais6o/4JpVQwk9JL
-3r2hkgwfN68B2rRvw9ofXZoqaBCFgbw+Nvz15GLmONoiDvP4rb1TsaT2Ti/hTUb3
-ov2W1RJ6OFRmiSkOuOjZHlVslYF2fPlZEXWdJ9PWvoKM/3taaICXy/AVSm1NBera
-1l2MsJ1ePr6dpMMDBjUU15rzWm3WOqwBNE34whhOjvU9vDl8u4h1xV96E5B47ZbV
-B1pR6y3vSYQgwj6BYkp3Uz2Mg3GQ/nBFoNuwV/F7LiUb5W68wOe8Q98NuREh1ico
-/OM+iudjP2LO0vz2sGe6X5UZGwCfbJnlq/fqoPhiyW6HPb1+JHU08kKeY5BJABEB
-AAGJATYEGAEIACAWIQTHC4RPAC8h9tK5yHUi5ErAYiuRwwUCWmo33gIbDAAKCRAi
-5ErAYiuRw+XKB/0ToXO2daY6/ZlkfK69O8jRBzbhn90/2dePM/qLy5Fe3UaG2sge
-uFYbTMGbRPvCpn9E5bceczdhkJKqEj5dPHVhUU6+jeyH/DdDgrcP12SQR2vHg9hR
-e0pzVouiMDX4QnUbW09CwpmhymlIp3pXb5jNa4iNxjYIBmuHDEmMP+uW5Ue+e2lg
-IAFWRFovZ9C1DCg0YYyGktc47cakq3ENKNU2LFvRcbgoyfjM0EprSUColUUNN3yy
-UNc+I+bvGL5swhKqdnRHagbg7kelsn/05oDFGPQHi0/VOlWU7wBh+vUw6lb3Zi7C
-obUInUhW3rPu5LubTOtT+oIH7+RSUIEJO1hE
-=j2aw
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 2383163BC40844FD
-uid Roland Kuhn <[email protected]>
-uid Roland Kuhn <[email protected]>
-uid Roland Kuhn <[email protected]>
-uid Roland Kuhn <[email protected]>
-uid Roland Kuhn <[email protected]>
-uid Roland Kuhn <[email protected]>
-
-sub EDB3D937B0C94C3E
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-1I65Ri4=
-=5Xso
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 280D66A55F5316C5
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFOOGVgBCACiDwUZOc6943aBGUrxikkfUnsyZfHtF9jihYmA1pSgfsye+JxR
-oG9QWW9+3qx4L/d4ZEqBftTWpsjyrY7NyMaeXtJEjE0vhiWNehgXB1z4XTJ66zCX
-nhlMvixGLQtfZANqCxOmtUGoSXw+oRFY/SExAioSS19HlSxApSaUzc0prdujqp9k
-vOKKIBWTBIUELdDTA4+enfzkAnIINUX9LcMTmO+Fh0AvfjDbq4fr8rBglyVUSCqt
-TOT4oGZlbpsq9TOKrTXh5go0rm5KJcbgKvX78ZErK6pcpTgNA+XFXCz1rQ9nkIQt
-HxWaEMJtpSkIvHIBz9qoAroGtNFzz2oF4ElRABEBAAE=
-=1QGy
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 29579F18FA8FD93B
-sub 9DF7F2349731D55B
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFYFiMABCADYpblWssqGxbjTwsyroPh48BwdSKl59zbFKoEHDw87NeWq7fik
-h95RkbdeWsQSvduXWgQZsUDq9cLOkuS/ChAMkAAd3MPp1NMdFmAqS7BX5wU5s5I7
-XD+/p51SWLMvgrLxoenmoE04EuQqQiXd4DbU+HGPseiNx+mN0cxPssaZMBBsmi2r
-RjwcQrFTaC1iffzh8FKLQvoTDzci//b5bWcxCLbsY9dYcUaDCbBAkL8HzyZUKNE9
-XwXh/Rq8wDakI/VEg/905a9c4xq6Rss6Yn5E4V2SAo2+B3hYmvHFsefaM9kkqvXk
-MQ6zjx83LAtzavOzmthjhhPIgCAfoQ5Q5oDzABEBAAG5AQ0EVgWIwAEIAJ29KWGH
-aEt7gXV8EweJkrYd02nwjc1LyjUT2TRwEzZ9N9qUiVqfpkgnZn4mpHCToxFoqkHa
-iv/QDfj7cp8jbZJa2wjaUkDbH2pZqLBGJ0sUUBZ1KNPM2uhhWRzAnmF/bIo3+Yfl
-hGINLNqoevkYoo9cdelP3hepef4+PUuPmKmeo856uknmaWQ89LPwLlV7oj6wiqMY
-p22sHqTGAgXeR/fSLMK7d0vSPm+57LZed5ECoRMeqYFUwSMV64RjTMkKPsvFBGvR
-hppJ+uWQiMjFFuFq2DFeNBVtueHSdgCHx1TP9i+x+7JmYsmFFmRwnEdbxO3THFXa
-gFQGr4ima+oOjLcAEQEAAYkBHwQYAQIACQUCVgWIwAIbDAAKCRApV58Y+o/ZO+ZZ
-CACL1DlaVyRNjNxzC+30X6xGykPwCdwMRF3CRjoeIicss2pBJRaIdTYFpg3bCZKJ
-J5KDC6s+03zmd3ddnKEq1fEfRcoLZ9PNBYF3IESHnNPlR68RL2cjMgq6segbhOxa
-v13ZcOIOnyrWzgbVw0ZgN8P3vCllFtifwvuF50vTshIRY11G8Gluu+GZ7tfSkPww
-Eo+pRd8scdol62aUUo6a71rDOMg2XPULz0l2hxKWfeUsksT5EY03seZd3CYqOacL
-R+jaHyOc5Nh6R1MzcRz65YTwzVbKplXtZjOghMh+rS4eDIjEKlo456M4spKFBbTf
-Ub+QS9kCkBU8csUzwF0nk/oP
-=SZ35
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 296CD27F60EED12C
-uid Charles Lee <[email protected]>
-
-sub D95ECEC170500D9F
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-pbySzrh5PAD5/2W6CzkFMpH6a6E=
-=sgH/
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 2A742740E08E7F8D
-uid Terence Parr <[email protected]>
-
-sub 74C249541619FF0B
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-jJNKSYyrKuT+DCAd1uFvcTw=
-=SigC
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 2BE5D98F751F4136
-sub C7FDDD147FA73F44
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBEwMV84BCAD0u42clJ3hghKlMGwFA8PPlPgSEZjyvs2dRCF+dKWBaPUnR88K
-kGfWB66jX6PBtHzeiVRa078lL002S1lSth2A+s1UfYGS5wVbE938wO6PCMwgoXJ6
-0MCLsTLP54MDlly4tq5qV0Zme1wH+9n/AC0fbKkLsEWbqXhNJLJ7F8TUh6hPziko
-mLAZCb297KeEDJ3tFN2zkzjx7V79/nkA1sKHQC9INdj5jXxkglTwZhcJgPbxYzCz
-nbGeczPxwzNrN/elx0DDnKEpEms/nURfXETsnd7t2xuUuAYhpGIadZOM+LojhP/A
-Wp0KDHsiSc5tQ0oJE//ydBksCEKid0Tu2bXPABEBAAG5AQ0ETAxXzgEIANGJ24GM
-VmW0QcuT6ykJXtjrgXW4HjOEyylQ6LQJZcCt42tNA95ZhAAiNgB0CBBUuOne7y7H
-5IW0wxnrO8qOStqvjbkUWVheqA3G0AlokZVWQRk1LjmBlABJVeHNBle0248pwrXe
-0lY3NVVywxPE1ol9DOasldSv+nKyMcRFgkZ7rPFnVaLRLoozuAIDwXXaRPczN3pg
-iegwo9BLqYV5+0Ncs24+G0hO6iTToX4166GvjWa0e0YHuJ/zztXPy9CAJ6FMJy4Q
-2ZpyfmIPua653srMDty1igFdR3TVNd7xIvyhw+laJY9GxWM0G86JOCpZhrTWDDZi
-BhgL+sF1iNPcC8kAEQEAAYkBHwQYAQIACQUCTAxXzgIbDAAKCRAr5dmPdR9BNoGn
-CADj7y3qDzkFxiHbfX6RlWJfaJ7wvz2r5D7WOiiyWL2y++zMVPVEhpPSw26b8Car
-4CjRxoG9TqR8GTO8yLlgQ1mPWovaxcmfNzJ1GBQGKD564fKCJLwVMaMgMz8jEANd
-FQNA5Ka25MdixHIYafKgY4TDATQYAHSs4MXW3Y1B+54LCJcL218vdWPxQ7k8AYLQ
-Suei1+1yA4p+tpjxhr+HUuFv8tA2HUk8RcoyRfUH9fqAEuR/u+xWm4kmE4qMIgio
-665T8WuTGYLkUDJEh7F8+L+r+f0nmCxfPhIWenVOrjpyzyjPlNfaweqk2dvHG4wZ
-ulntJIX+jkiE3IPFPSOU3gs7
-=s65m
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 2C7B12F2A511E325
-sub 10DA72CD7FBFA159
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBE+ZO+EBCAC3fZOOuYKthr0GcUge0PH2bh18sbM9XUmPKQz/W15l1NA/2ARS
-2gUXM0R+SunMlun9KsqjnojJ2ObVPvbm1Hg/66JSRgR3JWfIpSlJxLicpfu8rCfN
-bOjh4v9ZipD+px8w3o/RNrnZH/KRsoJg9yER6pf+pUZqTJfdg5lXezc1WF+/1qVo
-ypldMGfrkfLsPrUZTT689ubbig978e7eYmJEqldtaIwaAzHQnB70wIJyg/rEwFUM
-ldsvs6t6czSuJ4zPMvmh8TMpTg9e6+DMktPl1CWRONl8RPpgYMIC96gb4OnfDDjk
-Ex6clSCwgbDwdeAyOjjR6pVq+pCNTo1Pcj5jABEBAAG5AQ0ET5k74QEIALaxogmJ
-1t7arw82krV7ILlcOu6aLuuXTuy03K1/jU73oyWfUqwvPSbH4igcLb8kt1/6ogfk
-u0T9tTx+0mDsvqK8A8NZ2nDTXok3T58UAg0FTXlqUqZmy5QPtG+it2j3/xGgip3V
-5p0Ml1TqEl2SfW6gHtLptDUWzuzPi9SgK1ZFlueprPg7xwHmWhp0gwx0KSSOYWlK
-oEllj/1aDxFNcdKogWcGN5aJEsETCEguBP7olL75u6732wc3zola4zTy5bFT4kEY
-Dk30Du3VGQJrdsqlibdQpZYm8uH4AVXDmFMdEAjIs/DGRrUgde/oUqwtgm9U+p9M
-qcbmMoeLFdi7ajEAEQEAAYkBHwQYAQIACQUCT5k74QIbDAAKCRAsexLypRHjJV9F
-CACkvuGQCqxhvY21n800w27vc85F4Fdd7LjA/l3Bs9dA5HZbk1AV4/MFpadvPX1z
-ZuBOPYqbDSvnXGfoDgE41L29S5Yeg+mx89UDO6JcQQnlNn3k5mGCgR/BmGPSWc3w
-FzTEIXDYoj4/p7Wanj8vxBQOLmRzO1nu75dnOwgXAwKtTTXhHM6NCrxuwFrekKGj
-FZm7wNeBCmnTc65hMvWqZGoNQSr8M1yJ2AryBzGvWaonDklHCOUAmLuU7n7yBOxK
-tyoYdhMdRYjmhAPueyzK7ejbEil6wfCTWGyOaahNa8SV2Z2Lcd2aTwABHy4z3YtQ
-DpFob4bKD5ohhQunm2EOXlWy
-=Y1SU
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 2E2010F8A7FF4A41
-sub E4D15F24364C7906
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQGiBEnOgPURBADYutfvXAtNgf67BQ2gWTI6+nKfILIwMPzCbQPMd7pykzF5nPMu
-Nswt3E7efo5IP1Zsv6DRrLafAW0OJSmL/oo8/ta0AfqcxCCbJ6CUyViifRZ5T4nU
-WfuWTZiaKRQ57jtt0WnNpFNFf00gDbYJWs5b4RU5Vac/0B0WDQ0wvOJfBwCgylAw
-LrDQmwyOZcws9VbpvZvz9pMEAMRkV6DN8kvmfktpbUnHNuZJOps5botqKyffQVj/
-b2zh9mQ9yFpaSWESdFgpJNeBGtQJEDOz2G/q9ydTrYyCD8ILMKmsUlj/DAjaE7mU
-/NmSpHBUO97NJN/fdMgkkbkSlk4j64lGaVovQph9ehw3DsuSTF8IPvr/DXV9nuIc
-duxTBACUE6vsxZlzB9dXe5HjKCoPGr90kUm8uCG/CVu6fBVpZZa9B6+OM6NhEkLG
-FA/EKgKc/tvNIlPsRwX1R2RoV9/tR9N772ZjhLcEBKV2UO9mb5iAWWZaMJtQ06SI
-Ws9fyd+Zx3GGY1+iwWPUxZ2lSGLlfg3Sunl7Cni86tb0fTHTrrkCDQRJzoD1EAgA
-lYw+EWr/t9pNqJhzVpAZ9u3LMKJfrGopbO+jOW0T58mIdVF4oMF5WZ4lHPTgHrRL
-KxXNcGlzaxjxBKtkUbnjRTSGk7ExzGIcWoqq65RI8JgONif1VpBaS4Y8WwX/akQB
-nCAL+eV7UwHttVUKEmt4xUW5CNa4BgCFKtVdiomvdxnBHBCgfWNHXpNnQLWhuOGJ
-ZVyqq1ZAh0/vIxUBDSJZPxmEh5235+2CDK8Zu4FCcsi409zrLTtga+ggsN4tp22x
-vRgNs6nwARsk4paFII3OMkdMVJlGqU0oQ+H5I5PADBFSUYwpcIYne/+k19+QMR1x
-Ik+7EavzdOribLC/nwaLFwADBQf+INE8jnD6qg3g1gRN3S9MNh+PAPEsrM/7Gw0N
-CAhaf3METVwSzZfwVNiXM8DVEGjaBAPTBpuJdveHpTG43E4eibjXWTe7j5A5QSUx
-O7p3W4AXNTKldFnlKkVs+6ZKCkKeasY2/7do6Cf2Ed6lL1CDXEYcZRZ6BbkXruI/
-HqT/IP2mTw1i53S5Gxj3gaG/jOroXN5cBZnRoaPJQpuri9hdUJVqPNIDhe8dz3Zx
-kHEgVPMoanp8xti86ErSjgvsxGs6xjjuxC9CNjMjyod7d6E1NSt7gvVdksX3vok3
-QvIqQKDO6l777R9LQcxEStPz91mrBRTAyO6b7AtCk4/5S2hTdYhJBBgRAgAJBQJJ
-zoD1AhsMAAoJEC4gEPin/0pBVNMAoLT0LzbZNVmium/JNdBhDhufgi7JAJ9s7DMy
-snT2e4S6/VitgWdoI9iCfA==
-=sgte
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 2F566D4221D3EC52
-uid Ryan Harter <[email protected]>
-
-sub C4725C965E0455E9
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFPSiQsBCADcgBiaKkIG5jVFbQ0NyG//y18S84/OT1X1I82OwtTryxNqxT9A
-q6HuTJqRPi5Qd0BwmQB6dG0mug9AEp58L8W5udiDysHeUvBKY6zTOprSSFvFg/Y8
-S7i9D3pM6k7L7lGahUQqVAAU4RSky90nJfcT3qTNpmsO24EelMf61XvdFHdyPAjS
-aAO9W+QWquxNqXd0FVQqpHKRB43oR64oeAAE/N/H4lvemuxK6aWEq0/KJo0KYHkt
-H60Jo+djdNhHD/EQwCp9m8pKd3FuAAI9/ypvE/a8LeH/8AcLqnrPq63vxVe678nZ
-yePb1Xl7zQUsMw/ZD4urlkcTrOLl9yfIg7wBABEBAAG0I1J5YW4gSGFydGVyIDxy
-eWFuamhhcnRlckBnbWFpbC5jb20+iQE4BBMBAgAiBQJT0okLAhsDBgsJCAcDAgYV
-CAIJCgsEFgIDAQIeAQIXgAAKCRAvVm1CIdPsUvShB/48Ai4yB2nlxy05CwbuX1ka
-E39VL2sb2Bd6ZVtmkWerIaA16MFj+/o12JlJ9R1S7BsrvZor/oa9ejCyJLUOHW5s
-vRD5BkAJC8IRpk88szJNeVwh9gRgd/lWv8IEKMaMFIx1I96NDKo2bjw+rdF6Qo1Y
-C9yC1qsj8vg9+szMvfAoDCN4KDa9rk5/k7a6q390QpaXm7KY0TbqTkUr8Y+NMY+R
-yEap/qk8EzaauKQyHvxOBj9m8bkv2QlxID9Cyjd1ZyJ9hWuyQy8UWLPy6pVXKPaC
-CVlf+Uoj/qbzoVrElZDqGok5GQfKjNFzOkHuKEgXdYEuX7JWJgDO2i4pAr5isfST
-uQENBFPSiQsBCADt3ycVnpTw4NeU+q1rt6+aBrOQfcdRrTAxAwhilKEo+jD1kufJ
-LfcDooqEYZ6l4B9Sw91/zECNmIyqRiMlMTDtZOniuv/fFgxKSzHIstVDjO6tlY1R
-DqjzQUSb5uHMTfToTDrLki9KJfHIHfHSgOvfa1l3FmX4vt9ro8X8f+wfZg8jHY2p
-aWW5RfhVprR2/A91nzgs5a3wdPQi9Bl6YRZKSJKNvgktsm18LMhwLqvuBpQ1ongT
-QdUVY9VLIkDc7Tn/V5x+2mWCAf7HrJg9UnZK0JoKjop4ZwR7MQ0DoBh2K1Hd6RFH
-rmKjpCmKA3TZVAe5C1Ntloby7un2FOL7zZfvABEBAAGJAR8EGAECAAkFAlPSiQsC
-GwwACgkQL1ZtQiHT7FL7Xwf+PM0DHB+7ENW+1HbkEXZRVF3hNHSWFWj1AySvSrUe
-Xm4z5I2Edq0zDdTQPmi/aEhYgXVzsOWXi+MinkNHXerzt6YHIfbeJJ6dX5IL7Xwq
-rsDRxpg/J7MoWL826FUXZ6CePBfGoEA1IjhkeSkyKvLm4aLv9vfC4MVuLHRbsx3n
-np4ZkMVvLBSnBSeBTLaINvhlp15NLyHweE1KhtAqVuiisWm86n9kqIXjfoj+DFuB
-kK9cE/YCU0sNFELYgmLVVoTjxxtY9mPsROt+KJxIDS9BQ8mjeifXbYwkHERnOTKx
-NzgwWngWLQBG5cIsQ4b80Hzl5AF5ApOcC5iu6Z5e2OWW+Q==
-=qdIG
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 30E6F80434A72A7F
-sub C30F4CB428DDFC28
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQGiBEaNL+QRBACYhfwZdDNXVeU9G5/XsxrUgQGKkhfOaB1CyPHAd02Jyc5oHR0a
-nu7dHb6QBlY8b47pX8ii+uTCOX2yyFlJt2cuKYqN1TwHrMspDTC9K1x8WJMmKdM5
-KUtWchFQ/zmFgIcXM8Vm1851k0aOOP3Pkexv51u4kZ6tbAK2iqYAawB93wCgkv/X
-YpZR9qL0FWip23gsjjxf01ED/3cHs+5L6hm0vP4x8xbsei31/4yHPIRytLhkS3CP
-tPZGANloRi05FlPxNXMQdeI4tUk//V3Yew5LkJC7Ue0zkAKAxjyWYBBsbl20grmq
-89ZKcj0/pZBw9Gzm4indpORfPRT7BBc+F8+2TUD9jpha+W6paCLp9pFJR++OyiZ+
-hNwfBACIyapWUmoEmV4XG869hsnico6vF4WzuhHe/PfityhlHX2M/DDX0KrMqNeM
-muxYNsKoSw3EU8BS+g6bHYvxDFePPhpFIMwbtEEOul533V1sGbPYhBIiSBpnb7FX
-AnbVIYk06T5mKfaK8n9XB4BIrt/pz9gxDjb9KBuIHE0H8OkfzbkCDQRGjS/kEAgA
-madPbo/cLInRyG4EezfSMDw3wNw3Je3+Ozy12FgQE7aaUQ6a4YRLkWeldmTtOBlV
-XqRUV1MrGQ0+C1bWEAXPsrdzzInM8NiXz4d5kCVNa8WzfnA5Fe46hxUqUawSEt6P
-9QpT02mzYQZhazDMJqgGWFHoMHKQVtAqTlKH8W0D0YPRdV6Qn/VYZ2ZRW2mk0tU4
-/xBMLprmcQCrDYXYPC/apl3tXuzXqs/FA60lKZzzE+KqW53G7qSbSSN59IRCpk0N
-X5hFMZJ+/oBItH37Z5V/pVhRGytEfA9yv3IELpJ1CLtFZVS7lJTY7hsr74qRhbCC
-JAkjR1Ywz1/Ya29NUjF18wADBgf/SXXHiYR4XasV+LOngRzA/yw8yG+1gBhF/5LF
-NidGG1NnkUVk9t0APwgd5pubPagIrVqJVbr3UfFjU8lZQOLUigadk+JJ3NnhRQkQ
-NZtkvN9a53vZeORGWNDoxqnIm4RDLJjjf4pfI8tORRwNyqxWxNB4bAc+k9ysXEO+
-4qbQQmCFKzXjCaxWCsl6dXuRvQ4SKzoi63pN05o9/YG+wh/c8QCM7rZVDqIVDoqz
-hHrsWszUyHvr8Vg2uYOaIbxnWXhaNPb9R4h+DV2dITCeIrOj+Ey3MRl+vXNDqx4B
-nEq2SxFS6PXWTjqp7xE0ITKv5rppyrR231RLmY5lQxSbm0PEE4hJBBgRAgAJBQJG
-jS/kAhsMAAoJEDDm+AQ0pyp/2Z0AnRYlvIQAMoO33jBp6ZEd8GQ8iARZAJ4323AS
-sjiqTZMbrvYrk4fWvFzxXg==
-=z07+
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 34918B7D3969D2F5
-uid Brad Corso <[email protected]>
-
-sub 5CE9BCD2ED28F793
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQGNBF0vfHYBDADEDPY9ub98c7jQe4yMbPke3A/sxNHnn0WuA9JN880DPs3L7lrv
-9VHTOlFXslDNBPYSbgFXH5YlMGg8ZY8bhngjc+Z3dtrCX1cAjUXOnibi7fBFomLB
-xvKzTHyWprguV6B2YAldKpqA4DtecJEF6jusNPptSpMN2olZGcxVrTB1s75eO5Lr
-MRIvZoWxvkH76KxisytDh/Z3MJMi9fFD+2OMsC/WynOs0TIih1T5U2jCz25dwkez
-zb3Bd4G6E85fS+weJPXMRiezimF8WyFN+dDrFgpwWqgA24jbKG/tfF6sAuvGmPgw
-aKIv2VFrdstqfCVC9p2nzuchIDS85f/D+fEjBsSj8spUzA15rD0T1/9BHxtW+L92
-fcTs0rTGT4sP5HPl2aD9R/NP03Ywg8bDqcBWofTuCMtfDz5lUBpeOPngByDiKtQC
-tpsB0PyhPoMkrn701QSkMXPO6yLP6VZH5f9qhpvWrHLqsd4GEA+PoRuBJbYoDErq
-5hLW0Sgi9qDyzLMAEQEAAbQeQnJhZCBDb3JzbyA8YmNvcnNvQGdvb2dsZS5jb20+
-iQHTBBMBCgA+FiEET4/sZ4X2EdmnEuonNJGLfTlp0vUFAl0vfHYCGwMFCQPCZwAF
-CwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQNJGLfTlp0vVP5wv3REDfOtp+58Vx
-uIVZon9IFopwa5vdUYH2mIO5v4QHW6WXOcnw+MAWM4JxUqmJVqGOWFQIxs+cgalN
-LawP1uE8+Tj1e0uFx5e58UV4BGWrUuyuIwvKoGLsE8O5IO2+8TftvZh+PV6rWVeX
-K4dQ6Shg/+1HkaF4wVc0AiM3kq/+xE2/2SVluNi8XU+vUvSs522d2mfgnjkQ0f/o
-2rG9LNVIIazZt3hd8d5gHeDnVoCmF0Xhs+KLFmkJxgtPxSLUba+kmGl8g3Smfk07
-5DYpCXk4mG8E2Ku/JyGr+k6GVmMjYcSCPA77m7xk9LQ2sZYZAONLNW240hcS/lNt
-GDSfvNjNmWS8X173ulKDNgZhc5MWFD+g+UZIutYjCWA4OOWjdbYMs/ehU3AGANbB
-6z2fg9lll/HLsc9RyofLJLTzqZYffCUcsx4nJeqgE4jXuj/7tH4XvwpIUbX0wHRw
-KKdviRXH2YFLZaHYdGsySB2qjAUCsd0Z5uU1NiljWwiQR3Y/w7e5AY0EXS98dgEM
-ANAIhsSWs2+DaSb0X/Fg2+P0lCY5wlxSIAMlxiokqPA8y09lq/hg7e3oTyrvdxAS
-6YMg42uXhmdVMhvgoEQW8qzGVug7GpEknGg+3hHyos9JQmokNGhowyqxxrFG/opN
-LeGkEnqBri2LkXZ06+qHJERYJd+MSFVysE6fidp6g81/NlM9AsoanZEcr+RFO5Vs
-uxW7oSnUzI+62PizU0Gzs17clO7ESQ4/WasbqFTZ41kzPuihQe6VqyCcNm+rqqtg
-qgE/LGbtXK2k8Hr6NbwmyO8lkUHUqhBkzze6WIY0sp0hjrYA1zef6ISnTBBnMiyS
-CM+8KVcqCpsLOoBhKLP02XnjpKkKGe+VgMpgvZ+Oyj1zQmLcrCLpwsSYDceq0hVP
-iFoE7Lg9tVpbtbra2xzAJ4MYUMoX7PRfg/lCGa+acvQ3hRO9yOeYtWFlAMQvGjSB
-istOzE7IWIaLJMZDa0UwwFcznr6gud96gyxRGtwsB8Sv7pR4qfR1ZrMNcDeLRi8u
-nwARAQABiQG8BBgBCgAmFiEET4/sZ4X2EdmnEuonNJGLfTlp0vUFAl0vfHYCGwwF
-CQPCZwAACgkQNJGLfTlp0vXn8wv+LPfK6xp+GwbjOHUomFW7JAoOKeZF6gF+tMG4
-RO7bLp/BvWrAKnHjniZPtpGC0VoRAe01Bb7utCMPCfwIyC7bE/jYjboTTGUB+zm9
-yy0ndZ06txt8gUSdKtBYRS6Zfh9agyvWba44LVzLy5J0ZNE+MJK85PGaYZYFuAB6
-+GeHc/7h6BvVoESB+/PutySWh3Gp+0lwqWcd6GpZ1Lz5LIzXP6+LcqThJzMwyAKB
-Q1vdkmOYvQXWQAcBeWiXGFmOI4OgH5anIcdfDxqEaKovP2nPoMtUZ7p6XTEr0Z/o
-oODmN8G8PTen1EGo0pz6BhnmhNShhAguYebH0u891T0JiYh6D96wNwriF3T4YmrY
-bMk0hmSgFAz9uLnGukeH1kmfBasAmrvMhzHElY8UrjOGm9kaUJj3/12cKKcf56lX
-R3g85vtJR8LP5d+s5h1Niz8blQKCAJWsHEKp2r3B0ig+CLXylSorSstdsh7/RDUy
-QuOcn0ypycYY9I1Xl3Z/9D1jxT0Q
-=pU+S
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 353A436E043E3145
-uid Garvin LeClaire <[email protected]>
-
-sub 7494750BDF4F8FAE
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBE1/v9YBCADaUiBecDzwU5g9Gmn3T9pAa17OlUl2iH0zn8tNTUg++bW/A9m3
-lWykQBlvPOi32lqZ5q7yewSNBGHl/pHRRVsIE6hhkVigNQbMztRFPshKCU/0RvKu
-29cew2T37crxYFGShYFwiJgOdQmXqhgIai0S2sW0Iavf5/PJJjXbrM1YIqUqkf73
-unns/lIDEiIDXCnGRNJKzGWTPsbt5R3hVo9mFraPUxapw3b9C/2GGDT/mwR51IOf
-rHkQby7Uh6XzDC8jWIH/BrFT6gFRZgKn9BRi3meB5vPip0rvcxPQnmvi2R4iUIyg
-DvCsUpXr6RpAEK6/p4k17JeglxCDlAbTDLUHABEBAAG0K0dhcnZpbiBMZUNsYWly
-ZSA8Z2FydmluLmxlY2xhaXJlQGdtYWlsLmNvbT6JATgEEwECACIFAk1/v9YCGwMG
-CwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEDU6Q24EPjFFHoQIAJXH6gRuS250
-q/EBG6vHSSqVWsck3vDwo22zGwAXOmuZ1YH7kCdzyfs9i3LnmtTyMUymvCBE0y94
-Bn2fFbin6CQsPS5U40NiquBo1wxyR8qO9pFpANlq4old1qW8t9mZBkwBjBpN6Pmf
-L5vbrgCECN46wVGqarPxseBgVjK7BB9E3qv9ymUrUJ8DSvL3b6vUwNEIqXDcZHKn
-xn4EX611YigPYiQazByw8UNq0a8kR262JN2ND64IxjBtFikdjuP5nck9Iz/yQ++V
-YpS2QfsaToCJfl8DhsVcht6N6pgo5FfDPOOhZyuDPCC+8j83JaeRS5sw6NcK03rk
-tNsnz4hef+u5AQ0ETX+/1gEIAJsFRfWMDIoJMsLPltDrrPsg1lpl2RFQuPqjZfPM
-0AAiAJTB/UhRfoMoijggV/m5r0y9d6LH4XhCynm+2VC/6TTxkvMKHAQroZFKzBKj
-vpCKXYaLgiMNi0XfsQ8p7/0nEUA1XXZDOrol9JJQ+3XxaQv3+64u+ZiZY7JrcH9M
-tytyVcsqOnQe8ST02pnpjwOIqh0TZt+HB17PWraDWRETspAMfbmoZSB9vEBiHsSo
-ELZYywFxcsxB+nbMunYONTjp/14MRKKlxeTLlH7CfJwaGV/2rvN+dKOymbg2uA4y
-/wrZrOJVE3G7IP5ehQ/Pitcb1TP6Q5LISdAo7zGFslS9iD8AEQEAAYkBHwQYAQIA
-CQUCTX+/1gIbDAAKCRA1OkNuBD4xRZ+QB/45ejZ9k7v3Yh4MtyY0th94E2h8UK3g
-T1axDIEyeWqQZaVxqvA8gG2kXhFP97c/WINUScMcdOCqTpUWRnQaZgcvD39/AFc5
-Bb3kN8Mo69YoOGkRRkvsY28NhRQBjn96QKUBmc4vGNBLV/XCsbhSD8T5KJdFszVc
-THg5q237mYucSzDfU9/0EUeSuFwwtng93Y4Rt5nDTm1MLcnBi5CTGw6Q1FL9orGN
-Hi6OXcwXDGKK1iiWjUjrmXwpgp5Zv+A4WcmG2dZHADjBlsgeHhfWCfxdJeMNZ5BO
-LL6SHLRuKiw6HUKNYs6BZNNdPQXapzKhCpSuFHW+84/4S2jX89AAfhTk
-=S97J
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 358A4ABAE72947C2
-uid Jens Nyman <[email protected]>
-
-sub B8EB751F2C19011D
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-FFbW42hpI8TDRfB4oHWyTsM6zYXNXw==
-=zYIg
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 36D4E9618F3ADAB5
-sub C4935FA8AC763C70
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQGNBGGiftwBDAC94Yhhh/5yO8jYFkg01MPnooXKZEPwxAbAg9wn5iM0tHxhEpkU
-zJVYZ+JYq013+Ldp8Of7A/d6hKTtZ0xwSeY7S/WFykIk6tc0P5j0sfFS3pGPDk+W
-D3DwUa+8m0PriF7iA57vCOE51znO/IUIA3PG2YAK6jv2/i8MDXOOq3qB7VrbvKGB
-kIPubp5PbjvP+LFhLuUReU9m2y/3q9lNFXdd9kE2iScqGmu3FDhRJxBK/WQ2kqiv
-sJZjAYeHEVNcc88Ah6vXI73uYrvWVGCErzswYy9UrxCAQ/x2OxUdLw7NTHwjZSYC
-JvH5JPPTlDxMgfwTIsmaECtw4QgiVmvDp+RVa9zyrdI++RNr0InsXv9gWMv3p3yf
-TF20ZL8znFYVUi6XkeQhZjT4fHwDqDVnxhSAFe3E0cwHFJBQe2EFLljwNy6VYnio
-wBr7HrAxczRRqlUy4a3bH5KwiNwwvxgqfdMj9KTVpP9t98/TA36bIohwGFRWB7W4
-i395S90NsTbCh/cAEQEAAbkBjQRhon7cAQwAtPmKcM1/z8sMJnt4sHe3ndXsOdSq
-TJbRkAcdyDO1F4qgj5z9wkrlVVKGuVtmJS3qmR901Q+oH+JqM6UeGqhNig4IQvME
-iQjjelvKXMX9PPVzlP+ga5Y1/2mnUmgmYXK406CU7aaQ3hs7++XDonnQUt5nWF9d
-XT+xK/SDLYMk5i1TNqPVFZBPm44HpIjKGNJXD7Vv/5z62+hKswpLXgYt8Rz95ByG
-ncjQ1Lo2M1T1Y/EuwlRoc9RTdyABavSQWVLKIz6kKM4LejajjRvLnybMUug0CJl5
-mni4cHXx9t0pMlG5DE2O3mZLwTgWcJ8cu2CtPxA9iLfVvFAThxk3ZitkEhChBtG9
-/V8D4DiTIht6bd49xkHP5pxtB/fuo9lNb0axSBaOAeant3KA6F6vki+chnGhOFqV
-1KJHcxYG7VsG1hYhy5IbZsg4GdcXfTwwF1/mq8kvHfyTkBy6HMDGwpr0ATNnrxO7
-tJTiVqDuxfviGQUjqJIQDns6fM9BI4OfpXyjABEBAAGJAbYEGAEIACAWIQRH62g2
-JF0tQOid+0E21OlhjzratQUCYaJ+3AIbDAAKCRA21OlhjzratRBcDACCfhsaCFvM
-JTls5lT/dcTqSCYJYZyDj95DlTiaRNkXnAGrTyE45PnmJLv6FFZzSZdu/eLE8ls2
-MY/KWqnZYYV2Mct/pwDDLSjdAN/NSRe9HeAh2OS1kNeN2SIcoL55gEodKBNSMisY
-9N3ylLMxHZPa5LNBo+j9wftEaVi2fTX8LDJFQvUOZ3f7cz3f6u42FeHUqaLm2alH
-QSkfTB3yIu8Hmo2EXHh4UfwTmS55OBGLQ91d8neu7PcimqCeadeHW+qY5g5hr5NN
-LxMA+n+vwPGcQNxg0lH2XBdlFBbAELEGxMcKbW51QL2h+EdwGzT/nK3Iia/qm3N5
-0Z12j/hhzohlf7TQjhzB43Wbxef94JbKacvng8t/hG3+n8UASQzizCSn/oMkXQom
-XdQe5JFgJCroU2CfrdFmZfbkkq9mAi80BLUEAGNTUQrg/W39VX1/klGiXiWtpU8g
-q/tSGRQHXTwG53qejlUtKI315ZizOhJiniSDx4fZaK2zB9RlZkrnd1Y=
-=KPJF
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 379CE192D401AB61
-sub 0CFE993CDBE1D0A2
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-N9IFsU1/E/XhP4QkRJrZI1F/
-=N8tg
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 3A1959EEF8726006
-uid Eclipse Project for JAF <[email protected]>
-
-sub D908A43FB7EC07AC
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-9Q==
-=PprS
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 3AD93C3C677A106E
-uid Carl Mastrangelo <[email protected]>
-
-sub 9B2A1B698A113AAD
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-U/UZPX6m9g==
-=XXe6
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 3C0A8F4744F37328
-sub D17266C6E05F9993
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFSQ6LEBCADnoAfQsg2uDYMnEPqt7tlnZxzyLVKiHXdJzT6OHA0FUdsB9H/9
-vWI863v20dsk4+tf1pXLa1AWBusInf7FM1JBCQBc/By3fR3JRhJU0QSoEcwtOQSa
-MmktLQx6s5V3hee6pJDJicY3fESWqrVygiUeyuRJupbBOOh3V4GkKnk1s48ZBesl
-viHzOjz8ysZKbn3h7mDuR4NaMx54U9x008NKs4Ry4ztAXbf2FqkmhkU1aE+1v1vz
-/mShXXuwGjYuv4OnQyP6ONHJPOclc4mDFU3yuUg328AUCbWHPg1kAMbpZLiEnBgN
-anC0K9BxYfVdQV55XSMMrdPfC4dNAwMEuzkRABEBAAG5AQ0EVJDosQEIAN9tyXFa
-CMYODFVn/vTf/9+Am9AoNvTtvoulLoC3VsamyIel3QI7ek9rppLi6G/lww9q1EYy
-3F0dR4ciqN8meMnGCbl0KhXCn2IJLp3MabaG4BmMbdskAGoqd2P3lynhbOnjQMBV
-RMcXFWqHPMfpAB4/5RM3wsgOn3vn/eDNBWPbGiHk297EUxGhooVmyb+1mbVXuNDE
-8S9KsiLus3Yq0vytlUI6DoPZoTMaO4GGJG4aOUw0abK6zPfPylzDaFXoryTaRhhJ
-lb4HONVT3GNFOT2Ob+ntgFx0I0cPfKKHDqJhcZl/CAWUMNyQb5/+u7uybyBGHzJw
-fydRH28FC9+m/xEAEQEAAYkBHwQYAQIACQUCVJDosQIbDAAKCRA8Co9HRPNzKJQj
-CACofWbBHPEPNj5mqVtJf/HuViQYib4PlIZKvcKsl2TVXkDdARzW38MV18ZDKUm7
-XECp1BPST0pwKvf1auq1/25X1BOtNC9FIFs8649K4U6RouDbXPo4hyzB0Og+608b
-KC8MN311Cqth+MuWy7rHjBZytNR8CW6e1XQBxJjW/G+1SYRM57g56S9IoPiTMDsW
-8jMQaYyNY7/Getddzfl4EZmjiiOysN3FQrrwF1tUGczLaDiaTO+db/FEGJpzBVmW
-WkxFGLuAjlkSPvBW+ijlTMnWwTnd3Ps/iBHWXLb2StrDV2vmhVln2gw3uR1qML90
-iwdK19eTAhhc+QJ28/SKBcyA
-=F4/Q
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 3C27D97B0C83A85C
-sub 4BC7B9A81C39EBA0
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQGNBGEdX1MBDACuRDzoPMh3CyUHQydFo363R6OdXqMZ8mJQMdysIJCXOXZGRwUC
-uyPOUfH6uSG24RU2zvD72D2SGAehQKLXLQeN6XCt9PRAszP18dJADm10xgkXJm+G
-GJm69bRYP0GIskQI0D2hXoUlSyXFKZa154pkVzmeM40UXo90FrMC/YjH5dLp7uDn
-QtZbsASlHiy7lXFX0IoJHSHZFppmHcW2KOmFfKwgE9dpku7CdTdySY9BXiLC/Erb
-l2WjwzSDEkQbnq6Jm3/wb/AXxDEu9H2SE6kOxrERqXBfc1ycaEsJMxpLxYpk/kGz
-U6YXqXiOla1SYC78/SnSV8Dkj4/hN1/XtFmkmLUn/WgctmPnsE+fMN/ALXrH2OE7
-pUYLTy7jxJ46dChpjIPJ6Tp5z7EbxdsXR9JwLFQP+Fyp/anqLO/uLkZhZGhI3r6t
-lvFyZW8zoAuf6UpKL6bIvxld9SDuEqahbU1RcLsK/7Lwh8gFYXvq6k9siV2Fs4K+
-UWyVrn5cdSMErMMAEQEAAbkBjQRhHV9TAQwA0zBHsAralWNrZBdCkXHvNI0VqeJf
-Ix1c6AMqFW6FN73153uan6AYkpeBSWz9iHgchZY5UXgaKwx75eW+89X4X0SBU2Lb
-B39584+VDdjieynrW4HH2Fv8VJicioyMYyB/16ERidkIPRAREN3K6SuDXRkkzIZF
-LbHhRZZ6XByKDXeAZ/U56TPgsvYEsdFoj7vn+44ZP1GaAeje5v7nqXiHB1lNrpFw
-T7NV7YQXSpkqQJ4ADaL4jzGHS7umGjY5/T4dy+43qTPIrDSakHFGElfNfW5y46ta
-JiA+Hv4BowILjDMHska9hXM123CCuUS8ZQYmouYleKTCcfp34xxXuKRNDJgY8oiB
-sjXokdCoaRhdcS/PrlQvWfCA/D49XLGCeXdC5veOeGJF9W5fk5qv8Bq1vD/jnapH
-Uf92VkCJ+aVqynf0pPTKrctf0fNsttstGrPSGg+RW6NnQ20B4zgqwZAYME+z9w2z
-jmmLjm78BRJ+nzVvgll8aHy5bel56OdSldK7ABEBAAGJAbwEGAEKACYWIQRvZWt/
-a/sjjTis+B88J9l7DIOoXAUCYR1fUwIbDAUJA8JnAAAKCRA8J9l7DIOoXBx7DACt
-p4W4buVzQKYLZM0Fxucb8AgzJyrMU/01n4ys/hHBLNlCHj/Ar49PPxJ97M/QnI8q
-7yqNWOXPGecU+slBmK9biTHtHnaRhkcC/NhZsIwPNhw0H6QGGYi55VSuUPqpus3F
-fPBQ5uhGpSCy9dfux+9swNl1ZhMj2qO+m0flVf8t1JWLqTPs9giRTWAZfHuGGFdQ
-g/I+3LMyqmcphe/ysTlashiLyusQS3x8OpNhReXjZiyU44bVO5F8K+CZ28404OZi
-rg/TV/mtrH5t5A5rniev4r1FBzLTaqEXslSrvGzZhnZyKefHNL7HMiSWe6AkJBOu
-MNzPX3/PKRjhnZlLM9wpDSpG9Z66cNDDFzUwtDYx5O7gbLFib0OrjIz7q0rhm1h9
-nWky+RZ+dRuNR6HV9OlPcS5OizxbdZ9dgjy4fUuMK7G1gXyifGEXKJCXFW1whs0n
-DOOaC87hGOpfZWMBVF1mbtI+Mhb6xY5pv4UXfmVBNUZLdT8RShMJOwemBJjUkyc=
-=f4Sq
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 3E3D777C909A447C
-uid Dino Oliva <[email protected]>
-
-sub 7ECD484BE871E4BC
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFhV2aoBCACyHcEuTUn5nVo1ODvWvgBgV8b6Aju4cVAhMNIvAdcOYf+N9Rgo
-Y/669/P371uN2hc4SxJeORBjHyzkAX2sJZQj+FwdvGl60YX9Zv/NQaTzC1WFMRp2
-rb0QGj8yia+WA+If6hatbZmCg87CtDVpzpPIZUzX4UO+DRQEhezflt9uZ4YrFoYq
-PmbL7znqm7/3kpenKrNoinGnzFG7wnOrDfMrBrZgL0Vt95zvs/PBTyE2r4GWCNms
-PH6n50oTck5Lif0EtnIp26o9+vgkVVAFcHLUDy2y90g67j137SNnYu/47FD/rS8R
-A2Y8wRd6lXXxI/n5Wyj+P0Vai5zq6BIFPMbpABEBAAG0G0Rpbm8gT2xpdmEgPGRw
-b0Bnb29nbGUuY29tPokBOAQTAQIAIgUCWFXZqgIbAwYLCQgHAwIGFQgCCQoLBBYC
-AwECHgECF4AACgkQPj13fJCaRHwthAf/SihiHP9sr4LRSw3TW9t1CuKW2e+DwsJH
-6BY7m64jENIKF2zXWuMkHzGmM9pVO6qy/hY610wI6GqppuPESaFOVBc4sp5i6A5+
-Z70ZzXVEM+rfjS65qAbz0VdaF6cIEcZrJ25DD2DYLMq9wMAWo+EqKyiN3OJ/m/3t
-xz4WECkgpAgIPdfriJ1mmkn0fbpG1Hc7uhwtg0EfcAc2nN84AyPlBbh6RMkKDFgk
-K2/zwsdR6t93JzexVEXRN7hiNqBu9rFPbyvXy2jtoO9P60vlF3OuvM3SCqAr4yYL
-l9Vlkh5ytoZW/XPMJMOYsullzk7q2zSKIOPkx/Si7fqKz4MqZzc7zLkBDQRYVdmq
-AQgAuTKXw+m5HveJjH7uTGdkmX37rkOX7Kl6cyPutq21tbG9cGhrOplTJN9lDoK9
-7km2YOs16SGVlKTEQtJ7CLAQGRLW1qPATMlW6gJ5+KAAY1GFej+DZOLYy+RjxxdT
-+gDSIXt8kQwAlETwSNgymp53TrU1dDGPMjod0AfFbawJtxp/gaI/Sb+MkzLRS+NA
-7g1fDNAsy6twjxwmL5lvCUO+JMtlG8vXlIoiP7N6hXk4PYzYFCI4JR1H4aNhIBk0
-4MoUngJj2WNXfPJYQef3DqAJrzaQpuiCdQAq6F9GgldMHyv0ujHpA2JBikcxlR1r
-dUdo2Yqnc90pd5KB6IO4TfN8twARAQABiQEfBBgBAgAJBQJYVdmqAhsMAAoJED49
-d3yQmkR8SNoH+wRfWyXUFPVDNN4UrAi5HEY/Ca10AGuREkzacZSVz4dYtofNOAxx
-RVfOAoZr1NUECNvWgyxIZ8ZkeQi8fGN8uS3becIVAWmkji8l9jDRpC3DPs/g/7wL
-4A5VGzvp4GdD6jHk7KCVPiEk1DzRajI3sAntmpTKL9LNB9LpP4NdWiFA8TPMEHIg
-SqMuv1Jzycngjd0Zr9joSJvhIU+j38FvL/F+l/ooa7TKpRv6f2eAlyls0K1V9bUh
-a9KhGsyjXqolyxHZ25Gc3VnxEKIZS6R5QrxVbnXPmd/SV6MI4fBSrcrNgR91iH9X
-r1elbwcAFltomc9/3/7xXmHMaEfaxJnY5mk=
-=geV3
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 3F00DB67AE236E2E
-uid Pete Bentley <[email protected]>
-
-sub 6B7EF7B18190F4A9
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-=ZR2N
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 3F36885C24DF4B75
-sub 97859F2FE8EAEB26
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFmfSwYBCADdZEuR8cs2ejLLW3+Glxiq15rVbHbxaWmmZApGNijFro/LzFrR
-z+99N1mnA5+Ar/yKmn8lsCiTWukGQzWbdH/QSRUdyHtzxbCSeONdMhdKl3sJY1h2
-jW28oYL6iOMtNYe8qKoCrHRtyTl7oqYtYuhMwdNedGrkVWPrInmg0ILUSz9RufCh
-6KW3V3eAwz0LbckpSi9ZNyCNssjINvr6bRf10HMucViAB0O1DjrwO6aiFnatTCyO
-ig5MMZjgRPKjMASsPG8Ri1xivBYS/tpgamQzq+htWkbEydNv9+g31S5sN0pPw2km
-e8SjKp3C8RkSgz+dJz+P6tQrmGvZNs+pm2M9ABEBAAG5AQ0EWZ9LBgEIAL3j10Fr
-ODkE7yVreTlYs7UrZGaJwdx8stENYdHHA7MmDIMkVnjAOkzAwW4zRXdtFHqICLUO
-L4ZRnAiGuyxiwvxXM7NuGgCfC94M2w58xf2JREaCmU5kII/O3KOv60y8+QixFZl/
-c7p3YOGwOQEEit5445chxYwM88Bq+LgkXAn9zNnZbOyUv+E4gx17khkyZOXP+Z2P
-d606+KRvENLlFbrlVaJ7vzGiLhvIr62I4g3hJj/ob5nXT2tZSyMN19bJOtOd48R6
-NXFDmVC3uLWBgqLK1UgV5SylyKg6N32CUdds6E43DHLVUipawknN4QDc3s+ok6j3
-nN688afjFCLQVE8AEQEAAYkBHwQYAQIACQUCWZ9LBgIbDAAKCRA/NohcJN9LdaVO
-CAC7wk7tKsSNDxLhcq+Oa6TrE3JDQUYx6xlVsw0ZOq+TIbk2D7S/4phY+YSUUqWZ
-rp2vpFlszbcJXx41+s/ljfNnkMVjoU6D/A3R0az9weFfmq0J8CoJeP86CNxCiRIX
-d1rZ6wHlc67QJZe/aaYzxOO8vkzkeEiDaXjvmaSoADucbF1c6KjQms/yJ9nFz/Mk
-FPRxWntD1UkxNLh8UQZhIZFrAmhpgdDa0xq0VCJwL1ZLEo+cm6wKTZb6iRnSqPbu
-fwS6/GYF9IKUp/WVQvhZ952mwzfrz9r1PbTg/fOo+MOGywdBZpEEPTL5pvfrrOYg
-5q0kixiYviNzHBn/YKmH2ibE
-=xwpz
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 3FAAD2CD5ECBB314
-sub 3260CB2DEF74135B
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-xZG1NzW9unRL1j8/o6QtwZ1S
-=cP6l
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 40A3C4432BD7308C
-uid Michael Schierl (Maven Project Release Key) <[email protected]>
-
-sub C0B9C2CC3DD97C16
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-ZmnjA2cUdtHLvchd4fiFbu191pbeIk/BSf10
-=kJKi
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 41321490758AAD6F
-sub 01F3A913FB698736
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFLmWO0BCADfxkkFnwj5uOALP07g8yArQpu6zbNr+5dtDvJe8Y51V1leb74U
-Eh4U1IeosCRdKUCg0XlAjDmjrUkG6W/5AMUZM676JVHL5tVG1F+dsKhCrFOZoMHj
-+oLOMT7+159maGVlTbp+CarWjp9HWguCVYYAgmP96EZVILG+U7iFzLveEDHmWHyP
-QgZeJPbiiZPEPVDYll821zajCsPj6qse050IIiKfsyveCk4j/eEm2EtBDbQeI8Ul
-Y47TRSBvrtUaUUFe9P6uNoNQmbasyFdD/2yKCoZHCMhAdP4QydflybQdDrF9p7UF
-kCRk+uVIyxXDSn/XMHNhYG09+sy2CoQynF43ABEBAAG5AQ0EUuZY7QEIANFoey9+
-gIJ+VBKDYOZIK5t7s0J3fmgYasBt+uOycrZ/UmZfj3I502i4nYVtjwdWJZFp0LLh
-4G+Ba7uLNdTYEiSOEowjcxyBr2tvck98wDGCKkLkiesrg0IUM56ZGBqUvc+hale+
-bKoTV3+HwWfh8Iu+pRPHlNRUGpLTnAwatQf13sJukfRD8vXKdj4em9CtMjbTbsVB
-LdJXNPRzZV75zfH1DOGHTxvHYKDRsVKUmMZn4JE+gJ555dIYxygjYoB6V5oQVIy6
-hud39dhhqmPeCQDY1bUu4VJQBVJZh6WM5+1mquc6SOtJ9CWJ4zOk7hUbWstalOkn
-ipAzIIMXD411+PsAEQEAAYkBHwQYAQIACQUCUuZY7QIbDAAKCRBBMhSQdYqtbwGW
-CACM8r3Zmvr1PZvL632ezNg/GuFHc5d4S2JoEEeWeg8qTLATnOudL4utBDGs1ZQ0
-F2bbLxO9Dfnn5DuxzBCh4OUmtQu7QWzSqZCAd6LCF2hVU/9Fy7NTwAO9JKaTYqSk
-Uvca2gRFe59T/bYYrYboHIKoJ3gTQ0vTe5xq6yY2JAI+wvE8bihwdGNwJYlGdFFP
-ezkslvqAxZYeyFbkzT4eHmAsLKGwZl9ZTWVpgt9fR0fwEgzhLfA2UnSbblq8LUVZ
-naKwZ7gI5HE+7kWpKXaREkwC2H440y0JTKU/631O8qK+faFPepy6bSfej655yJNd
-D7OBDjgf/LLAP43w0BlWOGSG
-=nS+A
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 41321490758AAD6F
-uid Groovy Operator (Groovy Language Continuous Integration Server) <[email protected]>
-
-sub 01F3A913FB698736
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-ZIY=
-=83HN
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 42575E0CCD6BA16A
-uid Taro L. Saito <[email protected]>
-
-sub 47624A56526BF2F2
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-=6Iv0
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 429C8816DEA04CDB
-uid Taro L. Saito <[email protected]>
-
-sub 8A57131A07E0911E
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-=ihmL
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 43203BE58F49479D
-uid Viktor Klang <[email protected]>
-
-sub 1364C5E2DF3E99C5
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQINBF1Vn08BEADgfOupXhJxyb3t1kzDNa595spJptjF5ViyXuEJtlMQlmobPP9L
-2gZH83gNe7Ro1TsLesgWTtin3hGANSKITdi/wVH4ET6lPInv1k/8hXe0zlF11Zmi
-pBxZBhFl/ow2g+V604RY581hQybIxFhjnlMoEhooIZl9x/GdleQBsrnPdKnllmO2
-jxU2CKjjnAuaQusVXYBMQ2kCav1TrgZSr/5Tml1xe88p7K2zl1Ihi0okSJJ8CyR+
-s/I/ZngMX6OzlXNHuM2uCd1BoH+9aHGrUqQBMIjo4HBMCri+fmkAKod4Rc2lHo8n
-htMObZzRoN8wPTEUB8GN1chu5GOaX7Xsy69TQxvIs5SX7Nh5wDACk/VR0Try6ZLw
-pphhyeP3aYHvZAd+5+wuCzhcHpQQDnezhhZgeWk/7T2U/uut7LEmC+yRNhwmnWag
-LycLJ3N4dBR1VYPRMWTrbH8RqX7RpqOaCVm9oKxWtIgDsRW+nNg7K7zMsaCC+pPt
-U31ju/eKRzHVw/2CpcrZqbbQlREGRPfPv3zS5vb/rAEz+QRAKcq6iLKvR3c/hi5T
-KZg2I4ZX8Mw0aoRygku7F8gpI+WEmvHgd5wOeI8mlGGAoEwSfgQq9tn5EoxpLtzD
-8eC5NpEiYpUNNMVi5uhYdI9mYdp4WfChdsc6IkPvM3fpt/eHofSqci1rFQARAQAB
-tCVWaWt0b3IgS2xhbmcgPHZpa3Rvci5rbGFuZ0BnbWFpbC5jb20+iQJOBBMBCAA4
-FiEE6Dqru5XKN0MeIEIgQyA75Y9JR50FAl1Vn08CGwMFCwkIBwIGFQoJCAsCBBYC
-AwECHgECF4AACgkQQyA75Y9JR529qBAAmWpWsh02/ncHaOxUuqnPTGdjABNSbkte
-qxy9q+iqgAx6SSFJqDsLT9cBAssBIvXKXOZEnxFpCeeTBkmriPkZgHId5U5mHXyT
-QNmue/rUiw/pKZYwN7fTsiM5pIQxvSm32IidbDc55MkwuIXwYd+obZoaNzKMB4sA
-riN5cRk+ezU+g+4stNwCwEKkGepeMOTR8H6ha8a6w+sh0GcC1l8t7p9YGqJ6Go3E
-dTrHWufQ4rRN0NQLVI2/ZWE+pZekrcTlhigswFjEixjOs3h9veaiSNpyICTx9cxR
-wsqhNw9eshzyoV57GV/PkDIuHUgO5o9sn6B4bPzYRCU60RMP8sazf6YEmDcR0ShR
-mnzdHOa6F9SXdZ8HkCpZZxXhTh6FEsne6eFji5+MCi3sMoen4cjVfxWRVVPXfcYz
-BlCQsQXzV3p/eX5tF4orpJXsctt/tsOLokQlg/OtU+xxxYpNgnC3FINA6cjeqIxF
-ztA6R2x15iTCCVbB1pXzm1pskx9t9KzrZzwr0McFgE2eeRrC+6B6olFlOngskQMX
-PVAZVLl9HUb8Whii59u/qQMK+Q5L+XuCkUcFI7Yo10gFgRPK/sf8FPwS18Do01tm
-sUcA0LC655+3eRv7O+PtY3HRZXsOIYqPow9GxcqjCigwZj8qHqVwiqs/1cS8NxFQ
-i65rAVy78D65Ag0EXVWfTwEQAMW0QZ9JstlM7iIoquDY1IOacCr2AaO0udDzyOnM
-xhHrUHSpJK5q3yNQF8rYkS6PxXMSMeRhaTAIZmtfQCrX1m1kUTGiEDDVu2SJa0eP
-wnIKyC0umQ3541kfnnl20o6rOQ9GqytXG2asHlWwfvicZSayZMbu43t4Iduj7FZe
-+fvOCSIxYoLPz1l7i9ziRHQIodBiz6YlWRZTJ6rUoljxrdyLIO7XAQSAD1F8S51S
-e5Psy8jgYFjT8OqbzVI35jS8CAF9DUSYhmXUhSijD6yCZgXMFwShWKdsSdkfSJCN
-8m0nR11Q+kJUjkE/g5rXtEQvjFS9UZ7FskJ25dYrlgfxnx9P0o0HDeivkHTHAS8w
-AVl9vyIPgi7WvA06/5o1BVl6Xvew0s0hua/Pw+4P5LW5CECBnedqCHm5qNgX4yHd
-OwT/5kvQKFC2WQFQg/IwQaoTpjI2/hCal2Ixd4chfBIuX/pGt7/KcrVbMOLbDZTK
-USZ0Bvgl6oWTP3dRwOY4viqqzlbMmKwoS5sLNFLexnwdERKRzWJSRw3p7PcG1+oB
-4770CpkvU0zmvjFbXdlE/r4kgJ0fp6pPaJFCgaxucZYKeOn1OrrHJgPCzundazOs
-4onm8GgntZjuO63l5X5DG3umFrOd1qyWYXa8ZVze1Czxx9SHJGBUdCYnB42nCKoC
-VAy9ABEBAAGJAjYEGAEIACAWIQToOqu7lco3Qx4gQiBDIDvlj0lHnQUCXVWfTwIb
-DAAKCRBDIDvlj0lHnQcuD/9Jb+2A+3TCUjywkZi07A5Ofk7XsNP4rqHWDSoC1vFR
-uREYzxYvTN/cTBSc1AxaIhn67kqhTCZ66uHg/m8ZfPus5NVRXgIkFpquWUbx4JH8
-zMPnduv0SHmzGqMrZ/k91+pVuyrZhGfsG5oMWUl9LbA1GwEFfyknseuB01lx0UqT
-YM0ThyWWIJwXQVVevbxKgnsyxkJgHTwApbjCm58HH+N9t2IzbojK3jH+3arOg9IJ
-JY+MjE2a+UOWNWxRHjN4SoK2Xh8DbuStY4+eAsl7dHlsBLSrHa95XcmvgMcPld9R
-CO40OTTiJ+UKLEP1gggirjj/a5XQnQyCihy5EglRRC85LP5dyXJy+AgP6JQkAPc+
-f/AQ6sbNDsB/QEM2AbAOp1A/bvhBq30R6fF5sbcF0rPwvUEmUuOJ5pdYsm4EOe02
-ByeIB+rlss0ttZNvQ66ISEopXSEt2PXrUYmLLsvxx8sbdNRwoW8Wny5lyS2kXuGG
-b7PUsC5BRjuKoFlmHwXWQlYXK/NGsYA0hfUTIS9I4ScirWrHD6zif9Y+1buLTjEM
-zrVQ/CzUW+D03pPv9LUNp2ryeIZlatTDMy7hYPJgHKtIxtORZ9Hx7a1eNLZTzlY/
-VGHrLaIpPZGoBohnOgJyyvza3+DGzRpq7iVec40z2bcbR9vfil8ScQ7ZZWw42tBo
-4g==
-=dPSa
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 438E9634A2319637
-uid Constantin Rack <[email protected]>
-
-sub 2C8E4A350000730C
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-qS9F
-=OTJj
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 44CE7BF2825EA2CD
-sub E01173141D06B1BF
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBEzQQMUBCACbwbw7tuTWgwPsDAdQTWGO355jP75oBLHwGgEwV+OCKtxkNXNw
-wrJqXst83vmD1dEJyHflQww+d+Olj90IefQGfR+K7O005C2nky7eNGIomxaP52Y/
-90+tmw8qtsI4nsPWPuVj4WdFvlFgUwIZ0SmX4CauVzg0Ris8f0taxg7PH9zEvICs
-G/WAXdB9em08WDD6ruhMAvDF4W8Yy7mpGmdWiFD+B9OC006tv+GzYAvUHRFeCnnT
-SoKRiBeLejW+t4kpdMnEfC9ILAYBEEjNYvBIyPdPKBwNfy0yjRebsUf0eNmjGTpk
-VPlfofjVaUaOZytUOQvntYpocMX+377DGQIdABEBAAG5AQ0ETNBAxQEIANp35mwg
-ILWWQI36F2SyWFTFF8zupjzqlcF4Vx1Mjs2rQYErv1qs09TJfO+uxPRAva0fKik9
-PFmZ0vLM7UAveZgaknzjTQveOaAJuT5OjudoyptG81ilHO66+e9RnuyV6gSINnt6
-wnq4n8KRPoEmI/nxMhvmBCPw+YmxG3ZcU5Zko4GtjLA4J01nag7jY+LH08qFfPcK
-sADmx7EtCRuBcXgQ202kF3o7BjULcLV3R8vni3jp5nljH0vJG5USSY2ZR1bFiLtT
-CMO8cm+jIuay25iWil5DaejASIXzbzTtSYg9Skxet29AWjlrt1+zKZsMSLPbKJ6q
-hdW5XNU4Qo9ycx0AEQEAAYkBHwQYAQIACQUCTNBAxQIbDAAKCRBEznvygl6izZwg
-B/4gOqGHc0Cc165PZggwbf1nyJZ+af0QiKWasgoUzo4a7OSIISmBYPGnW/VP4EMs
-aNEhnqWK3Tu+cuidW6z7MWHRsqLcvYUKeiZE2IhnMP85ad2S14UOHE8cbkLwfIGe
-+rIu+zYpzyc5bcRYqeLvd5Dk1H/eW0/hsadW9qpSWQRGxWPEsMqaAhiret0ntlGH
-2igswZ7SYNYLNtK78wppFqqFHfFvnVu1XNmiTDDuk2IokPIGRjeWO59eSR/kotg0
-zox4S+CJbRdQdPq2ofDNqKCIEtg6y4yM+dc7c7n1Txk53fMBMzXfGnLGfbTFLo1h
-pYdC5sepAZA1XWLRgZ3+5+vD
-=HSWu
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 461A804F2609FD89
-sub 8067ECAA8D58321C
-sub 750F9A735EECF640
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-=QNgn
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 47586A1B75EF0DE5
-uid Benoit Quenaudon <[email protected]>
-
-sub D74B959DFA1D84F2
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFkW7RoBCAC7NMtr/e27nrUuIcEZEJBZS3TbZYId80UNQXgYmqPhy/sfCyMc
-87eKzOalauwLbr5+VGuKqhvKrihV1WCt2+FUjOtnCf1GutpAUH9plfSs8IpRog0h
-i9IpApPeR0Q37fHhc/fSLDxoHIylML0058K2X9js/VNg9xospjvRBi0vXmNaMWuo
-qMQXXVJrDDtDlxljx78Fk7b/qiFuqBgIPM3U5OPyaQ9Qks8wactSYo9pcqIZx9BF
-/XR//WvPwQ5MEAPCkwXnNIlrePDGMule7QRRmDvNkcD8V2xSOM+fhVd3UpuCpMEG
-h3MpiaFq9TF9O1Fv22Cs4eM3mnYOEHjAGyNzABEBAAG0JUJlbm9pdCBRdWVuYXVk
-b24gPG9sZGVyaW5nQGdtYWlsLmNvbT6JATcEEwEKACEFAlkW7RoCGwMFCwkIBwMF
-FQoJCAsFFgIDAQACHgECF4AACgkQR1hqG3XvDeU8FAf+KJqG/lNX1xzASjIYxXPj
-W++DVsvysQaSAr5OebRsD/KLeEM68ps65AfpMgxIAs094NEhA99wIXclf4vjZJ3W
-5z2VS2+IwhnDNYD9Pe0xt3H8zfbL3no0LyPS+pAsavtgJ0gqRG/kNDDoM/RmI2S4
-yZgaku6kQ4hCKKubdrPBV+LqCSBvEn6kTvHMvIYQrtDgvm/X9hTR/42zaAK9UaD1
-RiLF2k2nbQeJlDu8ZSvuA3IOGTb6ALUA66KkmiDqMG43vZs+ZTAKnreWKsPKlQr0
-eAAN/dcFVg35+bjf02561Zi73NcgMS7M6VgBExBoGYDW4299vnu8K3FqOHDQs3f4
-8rkBDQRZFu0aAQgA1+Ve/M0qe9PJ3RECh7T23GIGQSQ2qz877YKt0ZszRRqO3zyn
-+odZTlDV7dNfWuC4vZfzY7tMs+4VpYiiFBGnEmZkgCc0upK5IuHrS9HwuD3VcOw6
-e9SpmOgYkJYKmjtNCNz7BIoYCIu+PYzaueP12DXCIod7bij8+smRaon0IkDj4SqH
-ALxnb75+L9MQKaxTfkOybDWLfhz9oxfUtO2StLHlGVk8Q6GVAhKJIp6bZGDA/S3m
-Hx/AZHnVsL8o98oYRIuwLFPxeAYauY6cgwoD/9FYpkQSlxbsLsje8HRT1nvzWKhP
-4NwZFDkmEWsKOiIYgV9lQWompcLpqLFfmp0pPwARAQABiQEfBBgBCgAJBQJZFu0a
-AhsMAAoJEEdYaht17w3l3ZoH/RYBt2aiAhrbjQteyA5CpNZ6V8jRrudzEHB/boJH
-FnBUGNhzDDeu9FoJGrR8r4AvLyJgqiiATN3/erKEiZI/cP8wBfzjoMBM9MiYLgRg
-NawvoLd03oEUq856SbCwW096GE6m/eLcT3735+aIchMAHSagHP9cIuWr+t3+W0z5
-MURVOe71bf2TSySXhbdp4E05XjRgAwdQciW0n8SCKgRppO/CuIWiUyvt5JCCrfxY
-gEOMg5/wEGRSuNS7YtYB92CBgLPQ7SmpNSMUY3Hvvg+AblS7sxPDDvvY7whHK2U4
-6LJQx7BqPFqTmGPfFbSt2843qryNpjbAIzMpm0WC40LvvLU=
-=5a7q
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 476634A4694E716A
-uid Simon Mittermueller (none) <[email protected]>
-
-sub 4CE6E05D128BCFAD
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFE0soEBCADAy/iIRT/lpb+vfDjWs/k1XQNU3mzXoMm1mmS/Z8VOc0jF7sVB
-A5z2pC6u2OmEr1oJkhWefX+mU//7kXs6VvUCReE4uheGBlisg/ELEXkTm342TcwS
-K+tR/NMk5h1DwxeGR2qc0+zhFcrITiYqCpdaggRVx92syhuYWrG2DtRI3eEz+fys
-2WLhAd/AqBTR0ENDZssp5S6tEBcLvU/jAvKv33/+ydg+1Bsw37CqCOO0bR388+ow
-uSXSARDJaesnBpUcXT9pbog3Wm9pSzJ2fX1FyFaf3rqIIYEqGk1rEND+AkT2CB08
-BykABpDx0mgR6/pAgQVywCatPuc7wneiZY+LABEBAAG0OlNpbW9uIE1pdHRlcm11
-ZWxsZXIgKG5vbmUpIDxzaW1vbi5taXR0ZXJtdWVsbGVyQGdtYWlsLmNvbT6JATgE
-EwECACIFAlE0soECGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEEdmNKRp
-TnFqfr8H/1DXbZ4VzAqqIBhMUWOIvF220gZ6NAxgIP4IAzfuLYKso1pfogbuPzS4
-IzbTZIZv0TXsK7zEzxZY4Oxx5cQaOfRiPOBvkeEC1T8Pf8l9GDQ8ppy0aHPNLgV+
-nloylBUHWuKpTMUHKu3MpwHfwMFZ9ZFsUmgcQ9oYkWcvprH2uOachsuA4BSxXJNe
-OGU3aBIG1CR7lGENmkjwZowXhxM7QuYZ7qIR6oFxQCOj9jcV61AQhj5LuKNOJLfx
-fAICIeUD8mJP3NcblVNp/Nj656naiLWBsK1sfjGzvLkeTKnFYFMpJqEuLTv7VTx1
-fGJnaq2+2UznsLGgWcMVPg68ZOW5V6i5AQ0EUTSygQEIANTGYOD4HupAmugS69tx
-MTAW4GvRQ0s8Li/r/QQQUWPpjo3IkJDA0+kPCe2JRamNJJ2plzndeGUpQIZn+HJS
-N8fGRjZG56HG6l0BJmQRFHD/6CzNOOKK6z+8e306DAwQPqDdDpUgpBmbPHZDhCs7
-tvrOhrUesfLQla15MM7n1DEtII9y+AsMGfwrZCd2PeigiRC+/NH/lYObLUPc+NL6
-GrC1ZHrpGoOR+9GQ6voVNY5EIxVlNgoVBxn3ufcFvvghmZe0WyudBHK9ByWeioBI
-tHQW5n7eGpljcCUbTpsJmErhjH6KBKSuxPQsyV4TkQMqcsymGW0jhdHXc1/tStF3
-L0kAEQEAAYkBHwQYAQIACQUCUTSygQIbDAAKCRBHZjSkaU5xamOiB/9r943gZZy9
-FJv/NGPnNxCvI3ZusQfntgRfVyIFZLIUeaYDab6RqKTD8ZRgyfO2rmO73DiQ2bnt
-zmSPHeAlpKAIhTXfty0g5UICLjr27KocLNt234BKii6go+CDo2+lLUPUAe3cJPFq
-ZrtJ3pYLFwS7O43wwhRaO9A7L1uyruoCqql65B6CJcymMEsDnCizRVEAsE2lxenu
-fxcM8JIaQlczXTsHYf23vnmLjlXm5HvEAfXE0s7iHo9BMlSLxHWWEqeyrbwMdnn/
-gT8lHGw+SHO173THvhtGuKGkrglD2CA9G5d1ZWgAz3il0fLdBenLH6t1m0x3+P6h
-4sUJ04LlldPb
-=GdCO
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 47DCFC2A59F59B5B
-sub FCB1A11865F6A17A
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFVB0KABCAC8YRgcTIomAMw865DHxS/tbFgqN9i7M+tgpih1ETJbb4enhIBj
-Upeq+MoFCtxN86zGu2gsA4DOMEXVCReJ4O5n0F8E03+NUraCnJjbXLW9eEyRQRaU
-sYXDn/3SpXQyZGP0XemHUfG2Gok77mqiqbYGO5PwQoTX09X1a1wvM/GUYS8I5dUh
-UY6MwB3IEXaoNIccuNs3exm9ojmnvLO4VZuXcLOizlqxq6+8VbEP9qr06UNLsPDH
-vdqLxIUpZWSyYnUQZIrkctsUvlxQMnB/PpzAN9hKvyps6quQv8tD+dyPreT1TJGM
-ej4OcJXkQNmDxXu0/GP7X5yPsunKy3MLabutABEBAAG5AQ0EVUHQoAEIAO5EGsMH
-zoamrTlkeCb1kTqYJN00BPUCRijj5CJZGsU8LNHMmqeInTHGaERE1alwqRYlnMFa
-sA204UFIScd+hBp9z+JgcjTdsC2MNOXzeJ6H4rjO9PL+4Rukldg3LGB8il0+nXO6
-WQ1ksgrRDL9N0k/d60z2hozPl9JY+4AYDg8mCwLR3AIDrgBZA2VNpNQnxlp5tOkG
-fFI/hAX+nxqdLHPWskhkMfWrMleqVWvrZLC7iVQrB3rE+1KdNXMLWwULH0g4eHgL
-mHpqjYh0tB/BCPDxKM8LA3ZiWLV8BsqD9K716I7979KYKyYH7HCbMj63O2o7FljD
-D/x7D0K+g1eDnFMAEQEAAYkBHwQYAQoACQUCVUHQoAIbDAAKCRBH3PwqWfWbWywL
-B/9eLiVoRupsRtvJSGlqrDW7+n3ERVQStfNp9mc4k2Ufc74Kr3RWQl+JiQNeCbWz
-1e0jJeCbecAnI/pay9mYPcsArKRlw6fYA0XM2HhuLmRzlDrj9bBdEB7Y1DwpeL68
-3IKPQR8eNLYPN2KpJeOvOCZNRrFxpo1/ZK53V6WKWcY6r2RMvlHK5c3wcAMTIhVj
-2x8UWlMgJSQAxfOwAvNwsrYQp3vPjMJ0edYDcF+lQfXuRvAiYSiO/TJeDcbvW7IS
-Yr0x+F9YR8tVmeEU6WIffkIl/5lFqREi/9zBxNufP+LeJEppmbomyB+/DO+nuT38
-lY2QXQHYHLkAWBidKfXO6kjO
-=airW
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 47DCFC2A59F59B5B
-uid Kevin Wooten <[email protected]>
-
-sub FCB1A11865F6A17A
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFVB0KABCAC8YRgcTIomAMw865DHxS/tbFgqN9i7M+tgpih1ETJbb4enhIBj
-Upeq+MoFCtxN86zGu2gsA4DOMEXVCReJ4O5n0F8E03+NUraCnJjbXLW9eEyRQRaU
-sYXDn/3SpXQyZGP0XemHUfG2Gok77mqiqbYGO5PwQoTX09X1a1wvM/GUYS8I5dUh
-UY6MwB3IEXaoNIccuNs3exm9ojmnvLO4VZuXcLOizlqxq6+8VbEP9qr06UNLsPDH
-vdqLxIUpZWSyYnUQZIrkctsUvlxQMnB/PpzAN9hKvyps6quQv8tD+dyPreT1TJGM
-ej4OcJXkQNmDxXu0/GP7X5yPsunKy3MLabutABEBAAG0H0tldmluIFdvb3RlbiA8
-a2V2aW5Ad29vdGVuLmNvbT6JATcEEwEKACEFAlVB0KACGwMFCwkIBwMFFQoJCAsF
-FgIDAQACHgECF4AACgkQR9z8Kln1m1tCNwf+MaNFqR4lezA6ebkpZ4vIKGPoCOAx
-b0zEXgKPUIsqiH3R0oYzkTqrhm85w9cwJDnPKISg/uoP6gKqJIFIwjSVWO9ESg7w
-SSXKpHZTd34XaqrBWS102btT3wi0PwRs7Bl098jgKmtFT2AhctwZfh1gULHGjHYp
-tOK4KuDch6gYoJ4h01rxMZ6vkO6IWT5rjkgl8SYbjHMsffl1/eLMpS7UvA9S6xIF
-JLxI1+/+5gg2M6VRAgMFZXujstoKOym6t/8ayZbz3HNA9Sw01vJiMYXmWoNn6Gj4
-nxxCtsorIcTW9qzGubnoDGR/DkUlux7QZrEl84A3/f4Z9SWfZ7u8aTuqsLkBDQRV
-QdCgAQgA7kQawwfOhqatOWR4JvWROpgk3TQE9QJGKOPkIlkaxTws0cyap4idMcZo
-RETVqXCpFiWcwVqwDbThQUhJx36EGn3P4mByNN2wLYw05fN4nofiuM708v7hG6SV
-2DcsYHyKXT6dc7pZDWSyCtEMv03ST93rTPaGjM+X0lj7gBgODyYLAtHcAgOuAFkD
-ZU2k1CfGWnm06QZ8Uj+EBf6fGp0sc9aySGQx9asyV6pVa+tksLuJVCsHesT7Up01
-cwtbBQsfSDh4eAuYemqNiHS0H8EI8PEozwsDdmJYtXwGyoP0rvXojv3v0pgrJgfs
-cJsyPrc7ajsWWMMP/HsPQr6DV4OcUwARAQABiQEfBBgBCgAJBQJVQdCgAhsMAAoJ
-EEfc/CpZ9ZtbLAsH/14uJWhG6mxG28lIaWqsNbv6fcRFVBK182n2ZziTZR9zvgqv
-dFZCX4mJA14JtbPV7SMl4Jt5wCcj+lrL2Zg9ywCspGXDp9gDRczYeG4uZHOUOuP1
-sF0QHtjUPCl4vrzcgo9BHx40tg83Yqkl4684Jk1GsXGmjX9krndXpYpZxjqvZEy+
-UcrlzfBwAxMiFWPbHxRaUyAlJADF87AC83CythCne8+MwnR51gNwX6VB9e5G8CJh
-KI79Ml4Nxu9bshJivTH4X1hHy1WZ4RTpYh9+QiX/mUWpESL/3MHE258/4t4kSmmZ
-uibIH78M76e5PfyVjZBdAdgcuQBYGJ0p9c7qSM4=
-=/5Qn
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 4896F7312A5ACE4D
-uid Chengyuan Zhang <[email protected]>
-
-sub 3EA98BD451E4B457
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBF36fYEBCADU+1b8TH2AhJuJXebg5D3UbR9rk8/9kEfiF7ifbb3nCB9tnF5M
-7NnNocEdAq3XezNuSj9LtEpWUu6P4JdpXcfZiQO6wrobzSJRUWDc7X8D8NyhGpd8
-/7EMbAHH8MfMrwb1+00wdCeDXRpDtH8e+9I/mvdkkBgCrJwG2IG5FMSdQkMa44cs
-asquM705q5349n38F6zOFbS2CHtRw+dsGym1xHWX96E/kuAMIh0rlAK1vIh5hlmD
-2d1VQyx1IDQuAMR7YvByzpXvhwGm8neMaPgKvi3EHoySE8goFfo3UUotZBBv8h59
-h56lu4YfV0EOT3rUESOes2bZiRdLrnFPw9ebABEBAAG0K0NoZW5neXVhbiBaaGFu
-ZyA8Y2hlbmd5dWFuemhhbmdAZ29vZ2xlLmNvbT6JAU4EEwEIADgWIQTIiLmVWBXq
-g7SFMXhIlvcxKlrOTQUCXfp9gQIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK
-CRBIlvcxKlrOTZYeB/9Gb0MmFCMawEHvB5RbLvkQggZ3a5Ac7WCA4qy4p6B2r/2N
-7S4soaAB0iU3iutF1KzR4EaZod7C/DOJgjY7ZJ/ufoU+3KyzdoEr7b9QZktD8hUm
-vPS/hygpU6eY5gfyelFPtJU4+gTNAvls0/9oTq158OVgh6Kd3lmGpktLe/OFcXKE
-nRZC2+Vv7AJx/PboNko7uYpMml1cHDfi6cqRQv2L7DKvCGXnDseLi2tqfzWW6lYI
-XFJHmzWVk28SjUUFygfPN49kEkzSkQ94I0veC9Jxb8YqPkGD9r1gU2x6O8+4NsVC
-Iv2GnefwoRjDMgVvh4GzRhfGKuWM1+7OvjoC9QpnuQENBF36fYEBCADB55Q7spxH
-PFABiTlWY7iWlZ6KIJYdRm+yZGrWALYq05bL+UGfO1quXeSPoZapkNOp92RP3FSn
-xJ3S2GFXlv8AqjEuB3rUcWq+0g0f/cPq/MOYBPT9RgzYU+2BSmtnOoO9jEmsDBPA
-A8g11TIb/YglHmekEw7O3t76iebol3QYExHZ06IihKbH7kMQlgOGeWIPR1niJbvb
-E+VfFRhNzl2xjIMEcg8cu3nCK7xz4SwPXJTZJQjjJrUoenl6WFtSLVzzL9KQO0vH
-yzRv9cEUUU8npWz0NvNMA6weXYVGS9ZbjaAMgZ04PAMpEuiiYmsENFpP4F3S/yc6
-8o0dFeE3ZqUPABEBAAGJATYEGAEIACAWIQTIiLmVWBXqg7SFMXhIlvcxKlrOTQUC
-Xfp9gQIbDAAKCRBIlvcxKlrOTVN0CADGnC+XyF5FORZClBFtjzDI5WyRhqK0eBv5
-YDfCiBnH+vCrpRzks6ylsoHeuRkLBMyyN/GDyi3vLa/4zb65ekZzsDWROR5zzpiB
-hI5sKBekS3XLEd81cYb8mDVFqn4cgrATUeGz0UpHY0wm5bVel3FGpwY9NpZKHfhQ
-9UATNm4OJcJywPNNCPMjFUyj/XrXwqJDDsPafVewJ2qOziflSXt75TEos6xmi0YB
-zeYL7RbX07QsknYF+31TjsqbAgZsxgRKeexe7DsSL97BvSaUyB8X7Ghxw2UwE+9O
-w5dkCGlkxSnKE7WTKi1is1iziB4eYHLMW1BKVazIeudpCfyKmmhz
-=Zhff
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 4B1E11D5A4B91E89
-uid Adam Cozzette <[email protected]>
-
-sub 726F4E5C34CFD750
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-psR8R04jHL/ZAxrodA4Awc3BTpNxQDPfdRPc8w==
-=8STR
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 5208812E1E4A6DB0
-uid Gradle Inc. <[email protected]>
-uid Gradle Inc. <[email protected]>
-
-sub 33AEBC1F01C98081
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-bMFjyklLBAm1WETBiqR+k5uwXmJ8
-=RGVX
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 55C7E5E701832382
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mI0EVdDLQQEEAJMtYCaTA56YsP5RzQzPvqVTaR2nZ27qRk36blHB9WmXK+NHpGeH
-PHgq59mLPVueo2/M5k/fFrCe36jHePP31gYpFtueeYDfsofHwod0WhsHyC7JfG8d
-jEnSczTCmOHRZ3ed9ef6SeWUozYCQAX/tAbpoCthe0lTDYhFhkzVCe/FABEBAAE=
-=45ZY
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 56028DF552BA32E2
-sub 7EC19439E4D4C2A0
-sub D89D05374952262B
-sub B5681E477AD61C38
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-5KzrCgVUcXxeOohqkl0SRuYxdQ==
-=UvWw
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 571A5291E827E1C7
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQGiBE9iFawRBACJb4OMk3zqMDNvSJKYZ8fGYrPq7yCcf/ykKDkGb2dtPnAZGkSp
-3mmNlTsU6s9ARn7BtkhIuM5TdbLs+z+okX62h3F0WW3h+CpfIXyKSgl7uWbhZ5G8
-RSCCRr7A8m6y83npkTVDW6m2oFN2cjFwPLm/vxg1gu5pO+NCwz5iBRHdewCg1idO
-Gl6gBAZVNteCRMVnGnX4EhMD/RaYBO2j511h7gR+p+6BBeJTEIA1+tsi+GhTBkS9
-mUMGuD9Z8PyvwL7quGQyXJ/kTe3eB6iyDFn0oemB1w736FQe3vcIX6eePOEiDZs5
-1Uepv7bXI4wn1i3Z3kzynXNKcjCd5ZxAmML5VlQ0zWeE0W18reCjt1P5q5xxBFjw
-0L8WA/9aPi4d5VPakzuDvxfKK29BogScTLn2C3fpEnqWsTfpoWSkNXkRsoB4jUU4
-oIqRFMTxwsjUmjVUPOG+YqoeAaVpj+RBpp+V+CqgfNWpnH4caxzODE9f+6RYRCGm
-LSq/6OmgZg6t38M5XWVpvk7Ixygs6Vrd99VZyIQPJwSBM/pvAw==
-=dENk
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 5796E91EE6619C69
-sub 153E7A3C2B4E5118
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-=IF9r
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 586654072EAD6677
-uid Joel Orlina (Sonatype, Inc.) <[email protected]>
-
-sub 2E74CACB6918A897
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQGiBE1VSkkRBACkCgvt26sMi+0X+EOJDMqdK0Sziy06k47LJf1jOg4tTZ2T9QtP
-OZ8fD+va/O5+q8Kna993jzcO5n0Nv+R/K3+MvUqSmdITshCIjBt3cC0n6FWndGyl
-jY7rOmzdNnvSkMGE3V2fQ18stkJRleqk3EuWwv+EwpxcYeVfCO+UCJGz5wCgtqnZ
-JYdRHcDkDYaIZ4eizpbV4d0D/3cgBdpcbSrwIGtft+lDxacaJrWpT5Jh5P0gLlYu
-+6PFz8ZIC4+/aOSi4S4mgZxk8dBL8ZBqLqcW9rc//CYKNtPq33sdf9vxcusMIXvS
-PBODjDpoOsTJwy51fgCEL14qnp0v14y9p7ejjN5+GipiNY/JHo9S9kTdVhMYqt6x
-6a6MA/40vMejIbZ4q3Ia63jbHPi348fLDq3Gp8Wos7Sh2HnLC+pRdC46qX/5wL4t
-Vzj78yW9FdH5yeeE6nQLOBWh7PnSfMt2wYHoarEnkkkycP7WLpRME7qsBYqkNUNa
-2EQZSy8DnGiayYDij1YPNUHI9kpK6H/e3puhmgNkzrZj26T85LQzSm9lbCBPcmxp
-bmEgKFNvbmF0eXBlLCBJbmMuKSA8am9ybGluYUBzb25hdHlwZS5jb20+iGAEExEC
-ACAFAk1VSkkCGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRBYZlQHLq1md1Cy
-AJ9Vwm/4tCSR2iaLU6fCV4lnJgDnrgCeIDEdpte6HmX4eIWPHHxULLLP4Zq5Ag0E
-TVVKWRAIAOsb3rg3GoeIBQtJdgRUfULCVNEguSJMESQv9xnKgEGeQX9ItVfdMLrv
-Lbf4ySyIJ1ShBR8k80Xk8M6C2XA+c14AVUrtPUHmseO53TY0n2VjZD5ms7TOY/cq
-+DheTBLzlxNsK85q0jZXOK2+Sliv9aRBIl/83c1iS5kBM76fzLWZqsiuqQsLUvEv
-oCmUI2WSzhJ3s4s3nCHHtq+sQkcaLap3FMH1IPozFFJWSlJSsIeE62AxR4XrfGs1
-y6YxA9AEhu/6QWA20T55loV9TT4geDLywxE68eu2rM867Bl2cfU6+tW4RW0Ssg2O
-Ymv/+dNe1YErRgKm5JAjWRxp0Jzc47sAAwUIAOgOfDKe+6VLQrVYXwUZ84ipBGgp
-/JwqajPzxa8YodPH0Cd8bfw236Qcd9R5MuyjNbi4M2RJ3pLlNGasICt2qloPNJqC
-miTcVGXXeaK3haG7Du6bXo7eaJl+pMXRoz3JTrdTPLHOhPgN7EeWtkAv/QbbONps
-nNcyiuvund1KX1JaoGj712xk7IrDO47eA7Vc+ply08owIlnjtO3XG0o4GbkZx7Eg
-iaG805jbRUz9Q4FHnIE3Ditmo4BrLsy6pG2kJyv0YkSM6pBSFpc/K85WDV4fEwPd
-AS3hl0rlThFuxgSHPH1Z7OqNdDnbAKp8xEKnAmb/3hx147fU+VoFd3qcudeISQQY
-EQIACQUCTVVKWQIbDAAKCRBYZlQHLq1md0BDAKCz+pK77m8VG8F4ZWyDthIjE4d/
-zACgsgdtDggyRGK8+BKm7HDnceh97sA=
-=7XCx
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 59A252FB1199D873
-uid Tagir Valeev <[email protected]>
-
-sub 92BD2D0B5B21ABA2
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFUBG7QBCADRWXf0Fw05qRhM4cRnGKlOW1ecue1DCxHAtFwoqmAXyTCO+tI0
-MEW5SyXUkX6FsWLl6A2y+KgOs669ogzfQ0rnZMEt4HisRp8wpgk3GWR1/9aKYz/c
-ymy2N3BP9cz2fJ9+3PpBccUPL+ydFKpcnEnIwiQK+p9JjEWzJBlrdUc/UEJ0R+n/
-5r/+0+BHiTEMvjAF6/SwyntpTWpu7iEzLv/pfdCuhFKa4yn+9Ciwe3wGtSiue+dh
-tqKcd4YxED3oAswObBca3CC2HWWsUEH6EmfT1jUdfy1cq4X5x7AZ26oFYfG+odqW
-W5dcB+13VkJtJRzQTO/2HKtITJYC65a1jKt3ABEBAAG0GlRhZ2lyIFZhbGVldiA8
-bGFueUBuZ3MucnU+iQE5BBMBAgAjBQJVARu0AhsDBwsJCAcDAgEGFQgCCQoLBBYC
-AwECHgECF4AACgkQWaJS+xGZ2HNZJQf9ExetK9g1IbC/4L5qGhVzfyNik7m9DJ/m
-/fHibCK6pnAP7wHl3QStpcGfWwTDTnY079tdZKnZFk8OOtendA0WWdS/9OO1DZ8u
-kzI3PusfDOsIl/9U35dTgfQmFs5Nxi3/xYBphsNrzafEW+reUImADxleCxHhBGM3
-U8zAgnBGVQO+oBGQ/XLQ2xpGEW3lxytDgx90eCryFKhlqvE0Gv59ofHTcNjEkDcg
-9ki+dx5B25jpcMD7VzCgSaETs031gDlp7jdiEgJa6ot7o+chhcUlD/1UMZnHgT8h
-806xh4+ddiHD6WIXAwiFxsOhJO7o3Ovv4g9eg3VOW6kp6zjhfxrddrkBDQRVARu0
-AQgA2wgu5T1wf8QgQv46nAhpyv/Lf/osb6iTxIoMciUXpxKm6xKxYzov5EZxmC8I
-NHRLQQSJ3jjLLzAUy+hhKWxccs3hKof+ukshzgIPwN0ItatoppFmuG2rM1ZKxjES
-CqjufXE7r5yxTXtUkCuemQY8egDuihmVoatzTL+uWRNcf74sqqHyeI70NqnjqksW
-t2C+7IpurUHp9oB/YkxHK+rLb5+7B9UZNzsMRRQW3AaDsWeIMXTOX7esUbW532Qf
-xRbP4bALAVPqqFWCWA6a0mDDUJJg14OxC8MHhhMk2cyd4xJ0zoKQRxGEunb6XP3T
-7BHQr9r1AETU0+5sBpEHa5BHhQARAQABiQEfBBgBAgAJBQJVARu0AhsMAAoJEFmi
-UvsRmdhza4kIAMccH8GZzjxh7XGXpPqds0SIwJ2akhtr4k0WcRZy56rjGTTGhddR
-KkGeMtpY9CtVkodd0zGaZHcGOG0W+wuB5qPKktSRUOUoyR0ZC2xZcvRpuvhw2gwO
-JdRHGVteDFnz6Eiz+spJYq26usIPZXgxcuxBXjECuHV7OQkUQMDe1EbOOODODkzC
-auYvsfk9x3q9XUp7rQGa8Vi++NHBPhTDU4PReW6485pqJOJuE8QJznMvEHP355FK
-xFvFxw0TM9glLxeX36EjDtjs53Xzhw6h7HF2gj8rnaQfsDnJ8SPaRcJmbm1jKXIq
-+AalzNZ1m6hXe7XGD63v9CWCFMygkADQfkY=
-=P9c9
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 5B05CCDE140C2876
-sub 9D29AE4A6B50E01F
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQMuBEwVZOURCADNnKQzSjFuI9/IGj3WTJcPU2B/H8NbZaTsz5WE91WumgZulK2q
-YeD4u6zdOyFK7DEScgxk7dicox9cNEgYKQnQXctDhfqER9bnvA2iJ+AFxjRAWyvs
-en3ClYLXT5UVx0H1ZfDVKCvmaZVirZInfkqbi3OiPQoWrUfu02c3DiHQJ+Y34kdB
-egH2sIShNH8WLfEZ3YDQ4XaWHVuN1C7VwCBM8R3OeTTfyDrTsuyqJ0SeZXRR/6df
-2pEckjF9DNSXyjzFg24MrZhuhgbnj0oR1zmRh1EF+KlBfF4DF4acfxWqqcJVJx/3
-FTtOkLe3Xjj+inyJgxOW52gD4DsJpyf1tIbjAQDZvOdlRRCqZB4FnzzIb/1GmkGD
-JpDLC4MQmqgxkm0n8wgAmmHLpqDTdmuyJXvdX9RdGycpW64sljd1mpzTWJ8UKDhj
-uFQVHSSEdLoHoVj8ItnBV2kXd2uoQ/tWzbxFBST7wE/tX0e9G5XWaPKogvOKeDus
-u9XTIds2krYp80UTYWFZ88oNwGikdIrEYURSYDsYt15miROtKHWbSOHeLVbZqgVx
-dtWPqQVfH4gJGEH97/OSmozqDVog1aZDKBLGZQosng5h4j2RAQpjkaIdxKl8m7CQ
-x0Yi9tA8yD1QhRGggANQIb4n00G/vm7RMU/7NBvvjAQ/nAFjbsyO5oX1rBY1M6Xo
-NFqIBrHSBzV9MmhS3nXU+ZjAktCRhyJ7TsoHM0OYEAf8CduM5Zzp5w02iVYkFQBB
-wAoKHMpycW5LhMMMS4w7gmOfP7y04rtg6+zVe41y6bOqn/SxHCcCgnE/nhdexlzH
-ElYE1H7+HpphoI5vEwS6uElF67CoO5r74Zrb6nshGEj2AoOqjbrsdQm0noBBNYAu
-f9RsjU0sQQFzLW8+2xahqK3oZkLWOkSxzLtVwJbm7EGaGIYxEBjg87OnGQkAi9vv
-tVPwdO3VWyvgKLuPHudLDhTpeH3AMbzKgnru1Pnh/ZpiRhPzsbuFtFPEX8PMuCyE
-n4OLzUALl98kXuPjG5ww+24UsNgKMbKbu8qq/zRu7IHlpZvd730RoCWU2/i18tnY
-zLkCDQRMFWTlEAgA+MQFGIhyA4Ww9g7J8ZiEltwSzRblrjM1q9anexsBIGsWH37A
-92rlVK1RzMVfhj5yl+BzIBGO+zHbgycX7iB5/Fwsm+6R/2Uich6NDm1Qai9rc/jg
-3MS0phOAQzgxlGKOTS2GzdbDJCBQMijDObNe+Cs5DNB/E29/nzzCTQvtRzSeplZN
-r+8Q8lWz6efXmm5EeeZxN4x1YXjjzMJCHbc3yGxOjTgYQOs962yUYsg9UDRJm1OH
-9NKZe1m3dTRIMUcZvL12dq/kyiHHR9V/6CkdiNw1AFMi3tvEdvX4D1k1/Qr/2ORZ
-E4lRzgug4sKkpgaclLnkJZ9EMczmUFTGbbkx3wADBQf/Y+2nZCJSuHiDv/+SdhQh
-OBapZ2hYPDvg29mpPqin/LwH7eFTNv/oos1wzuzGtTHHGEP5mUQLOxjwdAXsWMMj
-scSbCs66ytTN7X4O8qh+1yN7vrM6ZBL12Ix7Ku40cgkWyvTVLBXKaEGm4ElhAmSL
-Fpu+/fJw0riR6rIuwHcGB4R1IJtMWcj+b1odgw9QmJ8AGpHh2WVdXspoCGnTUN4m
-DEswZjplkKXCgLypU13SrHVOqhjd4caK5GNZUfWtCKtwNcJMnvgp2truMvh9BBn6
-widfK48hEknQtXzGjui+bZz2/AD7/OT/T1CqDspB8IQlBCMBn8J4U1grSrZ1wTJf
-HIhnBBgRCAAPBQJMFWTlAhsMBQkLRzUAAAoJEFsFzN4UDCh23wsBANDSDn2KWz7H
-b5geDwUTX4T8Uqn21eFbp54tFTfopCd/AP4nTdX1iahsClr9q6G+CWQBuQWHVmq3
-FlPU/jTn6vXQwA==
-=dKtU
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 5D67BFFCBA1F9A39
-sub DBE749136BF76809
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFUHdtcBCAC5xFdAcSc5qQsPkujcRdzeldrESZBo1/SfGwFV0T+lgp99QJuI
-LDwZ1OEG/lQck59J0JRdAgxlUj1um5LzNYexIJSdxRz2DffQ/z9R+hw4DF2h0fyP
-0lXPOb/sIYJyQIMaY7Rw6NJ9iiP2Q+yAd/rL34NbaelOjNy00rQkVNBixp88iZB8
-WjzHAZnCy9nz5nL7fDz6c518PaHMwVnQtt6Aza+fZ/4Na5NmKMvLC01SLFSKqV8+
-j1T0bh50vss+7rLBIYjuq024WpNdZjIUdbzsLFRZTgmv6nUKtamlDVu++qDV2tWE
-POV3OyXAPCxim2+kwVoBCsJbhFC2NMo0P28pABEBAAG5AQ0EVQd21wEIAK88nihe
-mV8Hm1g95BXaqc1UCRxXOnYT2wOmeS7nkOQlFzQNSsn6FIRCbSYUae6Q2Wv7NqvJ
-OGmiBCaKXgMSq8iEEPrbY3Ed9BTqiFtoA2smBswA2Do6SjWg9kiuXv+sRLiOMTKf
-jitErkL9Wi5CNnERoD09jICcEcMHeZbzvjslADzJz1iW4cSRmbJC+tY9Tf9LMwUe
-etTmeXYJSv2w34vxuT0zzosN9ucEElmdE1oQXQ1Ryrts4Gyv354R7+raIzEPIcGd
-4fbub+x69G5Xxy3AKI9DbVapwskME7oENwotlxzLm0or/1vVC9tOnjVh1HSd1u5T
-M4DeCQ/7wgxl8Z0AEQEAAYkBHwQYAQIACQUCVQd21wIbDAAKCRBdZ7/8uh+aOduc
-B/9wmTVaPsUtaC7+tsFBf+EM6zVsVgMe6aY8/AG1llwX1IujYRyhs8YvqD+cc9/7
-CvK3GlT2wJyBrRaiHZXE9u0COJUgBHyuIvnV0W7fE8aD5AoPCVMacKxZWoRTY4xe
-r+gde8NpAp5f2AKu8kEquXOiIymG8kXJlUqgvZmQWSFYOWF+j7Xx7iRp2+0j2f6k
-nayvHLvyvMGygvNzzhLYKl5zZMks6XMTk6daVt6WbgaSuT0le5LfpxB/k7p7xMOe
-yW0bFgNhSQMDmPJ2iTnW+iliBXOntGQda/W/uWE3LZ03Z2xTq+2SlXtDllVh6Ma2
-QaYKBnGzozJvTcMbyP/aZ3lj
-=kPmv
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 5E1F79A7C298661E
-uid David P. Baker <[email protected]>
-
-sub A7CC6488427379A4
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFgRFtYBCADud9fmvTI8Dbs+9GcZUIVzxkL84QYHSDxI9fF+sxfAviq1U+YJ
-a+ZLIW7HsXx8vpn3hqIqAbDxHjrb6MEJ3OWD5Ks7O9Lq7HOhtqAT/mpV3fZmf6pF
-zdEw7c4UrfbtKyBY2kSBpKzTfu6HD3q4OBDm59Ezs2XFhKrXtlNC0fQ30ysBpIvm
-vZH/opwlBgyELKnAYJ6eCmdW1iiju7DPKDBOrGi6zgvslToLpnZeSg6hzSyjM15n
-Gx6Dgby0GNR4VEVze/UdOpsFVTSfP9qXgdt5ZOWQqW2Jg5V/ezvk+3Ok+ecfHWRz
-q8tHkagnqn0SfP6mLqUNvmvAH7xp8crH8L/TABEBAAG0H0RhdmlkIFAuIEJha2Vy
-IDxkcGJAZ29vZ2xlLmNvbT6JATgEEwECACIFAlgRFtYCGwMGCwkIBwMCBhUIAgkK
-CwQWAgMBAh4BAheAAAoJEF4feafCmGYepYQH/AoDwA/N5Zq0z686DtrAu3KeQCap
-YbI4oNQ/yhCuCivJy9ORkqOLRZDhrfkmwFmetOmDeg8GAfoMEDUSvgXLqqli4wMS
-UNNlRA18X6g8N/FS7w/rWP0wp68boPK/Ry9Q/f7SFmMxrObT7aSX4hnhzWZfWTZy
-YkhWN9Y3+nXFtaT/XViZtHoxLZP0Ei92N0zcWGkKs/drH84OS+XMVRktCNExyXUY
-wD/cyD9n6r6f/TGtaL8cpXqu46IhLpeaPMPWqikZCLX/2KGSwiO4H2juTkkhQn8E
-bCZziDmfDY6RAa5xrsOnFeLYGbqbkoK7BfR9d+tMFtkgkXxqpHFMjW3a4QG5AQ0E
-WBEW1gEIAMuetYIGcqEC7KdfWn6EKmO7ZucfOEirvo+WXclo48WX0Eo0gsTghKPG
-TS2kOzglwn/wYCbBVKzYaOngZljIcrR47hJiY/u7OH7EjiCiB0sh5WuEqOaCPPFo
-8lCA1+SBPAF+c1d7SfIEABL/WCc6e1rkKhe7wkBSclspL8YQUG3cr5G/cSCGOV69
-TsCqq7rtezjkSsfE5dxmcs39Ouur7hs25DKehufUA5bV2i51v49WIuTE8x53VfIn
-YsJyeRs7f4sx3hmkwN+EL2mo1YFymGwEkp8iB0Jtrpsevl4AFOajl6X4IrdLn6+X
-Sok/1mzIm+t1ZHokQ3mUWe5FC9c1Y1MAEQEAAYkBHwQYAQIACQUCWBEW1gIbDAAK
-CRBeH3mnwphmHv59CACEnAU1vbN4qxquAzNuaalyV6Hyx9olUQqPHopRGBA2ulPs
-0l+gtAXz5USotNsh3Ai5j39Y4J+qxN3HuDtscxEReogawzOo/B+1IKuGuuTzvL6f
-U6ZFUnEosxChAKwJo9eS5xlyenyumTcXx5yB/5X5nqTes6tcZlDcEefh7K5Iaazw
-E5caITBX0ze8g7WQzRxyN+vuhY30U7P8TTKxAsavdSBVIb+Hp0e2W2S5T3ogXaGk
-Ii5qllr9uhfX+E9zLxJJKfJot33ix647mPwpXxo7K6teo2rkwOTQij1sEe2sbMZi
-KZkn4rYSgLpZiVLPiDYuP3RTuHnFenYROA/YcDvA
-=qbvN
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 5E2F2B3D474EFE6B
-uid Sebastiano Vigna <[email protected]>
-
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFijpzMBCACxAT3jijwXbI6b7LIF/k8oSGyM8ZNJpb6AQvPqKIqCzxNFXzow
-EBCasKMhIWgGy+293Tpt/DY4btJie4u+igMBS86iXrF8CUnOLPgTlAIyil/oREGJ
-1GFkHsf0Yj88zCo9H9GNiUZRNSHdf55gsgjzzFVdZ6x0MoN7Yopbvl71bcTSbe25
-AZM6K4gIf5TTo66smG9FgwDkMxc61ixRty44gkfWapzdob5d0cli0Ze0mu+2PHJ0
-Fdt2sUX/4M0Bpxk7eaGVecyb9sm6KkRaGziJ+XVByZ0UMdrEEJscLaX/UpfK+Wek
-aPQjDdyYLW90PJofKFPt4h2DBQyf9DSZ8NfJABEBAAG0JFNlYmFzdGlhbm8gVmln
-bmEgPHZpZ25hQGRpLnVuaW1pLml0PokBOAQTAQIAIgUCWKOnMwIbAwYLCQgHAwIG
-FQgCCQoLBBYCAwECHgECF4AACgkQXi8rPUdO/msQeAf/Z7IJc8pXwUzm2w1G877N
-KHGNivS5WLfuQk+bCZalLVA25aigwP/YVcF7xdQoS7aBSNG+CJzrLCyyUZaixwrQ
-sV+B5E+LsJWgb7xSvnRoCETYGeFQJdAshlu350GTVmCfy3xil4FFyAENl5r3nB98
-tJ4HgYh+NwUH9GUTBZV7SpnV7I2MYOv7mvixqioN8o51SX8AqbT3LgDko3XegtDD
-Sb3JMtTACZ/7SltVNoGvLzCOSgnj0HkU77MZQ5q3rQCPauz8Arp2vJCwOvkYXPde
-O4t8s5dGRTH88sYI81CWQT+X4w1q20CvWxUd3j3ZJthyunX5MH11nbYdXbAnGPIi
-gg==
-=UN0W
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 5ED22F661BBF0ACC
-sub 31ADCD8BFCB760B4
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQGiBExyNhsRBAC/W5cMapoP7NUn8S22iWG5bPw0bconApJHP4kQdT17gT2JgNJz
-BmuGWV59ZOGQkc6woeFKc1s6twlsgIL51jMeVOtgLJRGTS4So2hthNqDcgO4j8Lm
-yXpqbTkbD7/ZlRzL2hhedrMz4NQOZCvsZpQ1RaCDrr2hxDq/HhD2omGdlwCg/9Mt
-JNc7897LgfCMmtPOvAFt+rsD/0K87nvW37nlRqHdEtzvwUlyLJmYxdW9hDr8tm4Q
-Y/8rDvNFlhKV/yXmxQuhtgQ1qpBo75dwD86aJmzIMIWM0iei9Ecfu2DsWiWvArq1
-heDjMYSeQl6k37cmD59afo6e/jQmg2/ALC6mRf3912SfmqV5spw0k+NYdFxAnbot
-9jOfA/41shIdZloZ0aDcJDTNe22wFFh2sW8RwWtJJO8rmOCgh3MmkPn7LHPI9idJ
-bSdD1dRcR7UTyeigEeDTu0PAKfKZutc91lfcIGSZdk39SEEhUkL2JdPKVRBotiZZ
-Jsi+NxDdsprF/yQtr00XSGJYzh2TW/Srnb5nZQm2Iyokod3M1rkCDQRMcjYbEAgA
-k0wzZq25ZX73DIlxw30u8Qmy0HM2cVmRe45Pj857FlSQsO82YNPOMxSkACCmHAAT
-3pACuMCf5Z0HO5iLbHrxegFPGWLkNE3CJ5yga1zIiFgzNc9qNqWtPQISJIQjABit
-4SseMY8i+3t6A89NjWc/AOK1BloHdjAmtvT54oYtqFYCMlNMtCLaR6ioSUH38qLV
-jXtFvmTY4OqokNaz6JXxzTymyo8gJff9JRpcm2S2Xksr0dLNYm5QwJEN7KX4E8iH
-8Rz8TWxfAhrf0zn45D7bgHOk3JFPEXzKGV1l96Tb5h/yy9wuN4JePyXDGfigub+1
-grV5DBKQ3srkEwy6iwAYwwADBQf+LXoUj24Evhce+OJ9ZCaPEppmV6xJ+LaU/9D1
-hwMkQ6CXc0IH3oeNGAbbOHhXM2GymRfg8nmzbIHVueTP8ISeO7Dc+gMr7l7l5kB1
-W7IstMlS1xI3Vdg9D8HaPJa5gB3qEGrIPdDP1KRRwJflw+DmQXB5jOj4vW1xECqX
-0bGY9XNFFaSMhkr5XRVT3xgQ8d0wuCB9otuUZC9pxmwFiH2w/FvKzMTKMRwK4IRO
-n5FPhSO2VBHBnlvF/mSbED22jjB7DngUC4rF0fE1MrA6DDJIAKrsDlk0VI7x/tIO
-YbkEOyypDgBf4JLrxgrI6jn3iCRdmi51hS7dtXX3ZIkmDVJrOYhJBBgRAgAJBQJM
-cjYbAhsMAAoJEF7SL2YbvwrMplIAoP5GSTgknFm3ONZ/W59iK+l+XJWhAJ9Bru7L
-aSKZGs7jwqXqGNrZ0ZzxNw==
-=HDKU
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 5F69AD087600B22C
-uid Eric Bruneton <[email protected]>
-
-sub 0440006D577EAE4B
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBE7JURcBCADO+9Dc4/JnB+wX+fq+Fr2zUGSPOT6/qjE5kXL4FEbJKsqDSAKG
-VnbtRrsIUdmNIFQmz71bBDFhRBbrSrkz927k8eUPhYtxE2NmmWSuKgrjF4qviPQv
-m/7SqGx378m/qw4EvpgGUB8EYif98LYdWp5vsU/zx0Ps9auqvetAzJaL9489oE0F
-q8FVhve6BMfUUV7zOTCmJnf438YO68upjU0PVBdfFE6Qx4cgCeWbQGy2cooW5azN
-iIenhuYU1qikmxMHq2xZzN4uSTWLGDpimPyz+Y1aTSYJ/bgn9gPStbI9sojWo9SS
-5gvNK3XqJzMwxwFow86UcIE0vPD2T6ZlBAXRABEBAAG0IUVyaWMgQnJ1bmV0b24g
-PGVicnVuZXRvbkBmcmVlLmZyPokBOAQTAQIAIgUCTslRFwIbAwYLCQgHAwIGFQgC
-CQoLBBYCAwECHgECF4AACgkQX2mtCHYAsiwWdQf/ZDnKejrNUOREfAZQYoAmf29G
-zPnQ2XVb6ZxoD2kg+b7SyzVL1lnpXw961Ayme9trxztb9KJcxJ6a+oSVIHWoiINS
-zx1g+lXCsBRH3Lb5iJTAr2u8+Gyva9+PB60CBmmcsuOjuLBx21N0/E4KpBiwEoWw
-5z8HGNVsa4jtRxB+RoQGiilBUIelsI17e3hQWgScIGJdLW5xErlC3WfgtUOL6q4J
-mSk/A1R2jmWKOO+WBvGbnOr7mKZd+/h4ohzVVwyC1WrFeFJgEZK7bXPA77Iv/4u+
-al7RuVztBKjrXD0yPwknuxMgyN+Y5f/pqqKncNl0lOtiWayKSxdatBLmGifAgbkB
-DQROyVEXAQgA2uNV77VI+ARj1d97b5cY3/er0Mcc8/Q9ctMY+5YpSYDOQF100QBd
-OQ8q3IJsfhZeF/iMFlHIUikuSgatb/Ih4lk1+irnERPuV2MNoAw3Fvn3/vwl/Jy0
-ZsQCBSXO54U42TcOXSwNLkYOJaomDiiuo61Rxj7jqijpnydwoFvEi84v6q/Uota3
-MijGMbzU9QyTX8J9OKMeCSUq0uVuk4ezebjv/bwA/ax/qQRIrEHDOOB1LJ5JyLac
-K4+h5J8tMkEmWxEQv7MNokRLgbaePqv+tdf1gee4f2fSE3EXKFxjTO2wjLPXCrHS
-SI5gecsilQn7ZNxH9g2YUJipn9yj3ywMxQARAQABiQEfBBgBAgAJBQJOyVEXAhsM
-AAoJEF9prQh2ALIsrWwH/3s8uN8/gDnbcbTX+7N/ZfQBXJZ+H9GGikmYRJE1xoOe
-Et9MOqZyGDTZfGM/qNKeDGfar7pcRQlMK/A4Nts5E6d1OX8fBkUBtYanyyjNLlT3
-yDjO6VaV0SCsgAzNjUZqc4lxS9atN6md5m6lWLAdHghrXuV6LsiKOS+96htchoCv
-Tvm7mcPI7w146yJRSyCC5+PybG3ult5Y6QASkwI3ZWB0u0PKUoqglwWngplu+0Fi
-b2rxQvL32is4YrYaZ+XwoR6u/Bgv0ZvZiypk17Uk17rDb/JfeLqDn7oW6Hlgi9KO
-LbRRIg7vwZVo2Ixco7aGxZp5c4zSfaPvn241v813ZcA=
-=A2GR
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 5F7786DF73E61F56
-uid Ting-Yuan Huang <[email protected]>
-
-sub 73F7734B17EC71F4
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-=v4+t
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 604F437C1682DDE5
-sub F664BA5FCF7560B9
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFv2vg0BCADQzzfU42MkbydOEese82s5wyfs/qkUZOQatjwPMyEMlK/H7LZc
-Bk2ZOgBMaDDdEZv2Vq+6oUa/rD/Xmr71gCEk5U1rqeZZ4HuvyEZjjIisjnVrMCT8
-py93im2MJb1zifvY+rgiveiVBNCjSkfqX1/g7HmGiYL30romA/io3jvtWOo6PkQf
-GYzifOKz/5j9oWm1yqdXuhVmPD1aUkpXZeoxfWDpaPS+iUm4Db38umVj7GY55okB
-rrfQAdAUuOG9dyseIgI4HPZMB562Qy2tww5q+PvSxs9ydgSbFHFu1ejCmlViSeXL
-leGPJEoiRdyu9zMW5sU68lxhErtFRpa3IORjABEBAAG5AQ0EW/a+DQEIAMiknjyN
-qHzzG07PNE68DSlUuMvraoyJSkcA6Sjsg1nTgcp9jubqekXW+ZHnNYWZJSxZx4RZ
-wloo3+A4skthmDVh2UN/FO9Vwx1EGkJuyaKELmIVBRSC4IBrVrQ/4/nUXMtG9NhL
-Qmgug3glnlXYg5gqlQc2YjNiWI1zdYmR7pHTxBhDYLB1hweA8X7SH690HDevqhiy
-/qT8YAHZzMZaauj/xQHpvn4uN5xpGm1eQw47tormy7I/1QaDW3pbS4YIC+Q7gdYd
-IA217tTgN5OA8+kXuPJJQKDMG0WtEGegYjMMuNh266HMtfekJVSlJTRdIFQT1j1U
-0OLjrk9WRK/ZcrcAEQEAAYkBJQQYAQIADwUCW/a+DQIbDAUJAeEzgAAKCRBgT0N8
-FoLd5RodB/4pZu8Segyb2VhGYbl0jgmZFqMZDI9iPINx7oZ+09Ck32R6UJgaiaTw
-KT0qeEssum3oj7zz3r5D0s1k5pwvd0w5TLL8CeQ7NxTy+hE+8cHZbFfoMBlnr73c
-UhedkZk+Cf7dm/GVkv1ERr/XnL46wLO3OAMamh2wwo9Od2GP58ZFgFd3jhroIuTt
-YtBVeB21JO5eaktP1ZLi7zsGWcP2mPkQAnd7BtQGwjh6x6M+Xhs/mZEmLP2/nLEf
-oX3eaWU6uE54giiHDC33rBGerBuHGeW0WT7wzatKPz9S51w7mqPXLYNmw7/Qwfvi
-Ca2w4l1R/HAaNTH5suZ1HGKy1nNcY6aA
-=fcxU
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 62BA9C275D14234E
-uid Pierre Yves Ricau <[email protected]>
-
-sub FD2D3AEF63B97A64
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-=ukU8
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 62C82E50836EB3EE
-sub 2AC7BF2F3349DE80
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-egz57oSj4I+NT33hA64x6jicEKyBNxNI
-=T3Bh
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 6425559C47CC79C4
-uid java_re <[email protected]>
-
-sub D547B4A01F74AC1E
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-WugIjrW6eRqMfhWIeF6otn/vBGbp44U=
-=+bu2
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 6449005F96BC97A3
-sub D3DBC823BE4819ED
-sub 0162FE0CF6E18BD4
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-FPjHFhRiWd3YGlydu4Dtzwfkmu43CTGp
-=Pq8A
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 64A16FAAEC16A4BE
-uid Evan Ward <[email protected]>
-
-sub 1E8F1D57A4450BCB
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFbqsT0BCADwERe1Rc9qNWwXOvwZHsjauVDy0TpqNVY8I3S+OYm4rX1dkjyh
-+6bTEH1ys6bKevvR+PLhYzTGKboHnMT0RIINY/DQQSzHr/GRyCiiRlRvULbt9Fnz
-kJJDgH2BcbNSmWJlrCqYk+E3GAyQial+szkEZED+02wXHsbs0z3vozjQGHy0RVOj
-Gc5Shwk7Hr/F3vw9EQKa1nNffWmcGEx9B+WcC9ALPVd/fpQVXvlqfbi+kaIbqv2x
-NHQr7BL8j3SpN6vhfZM/3zeghlxQ5HYWER983XwkmvbNdMxt5HWsMKWZ0utt4ocK
-TnQP8NFGlPWEQhPvRRFNb9BI0wvGD0NUb1gjABEBAAG0H0V2YW4gV2FyZCA8ZXZh
-bndhcmRAYXBhY2hlLm9yZz6JATkEEwECACMFAlbqsT0CGwMHCwkIBwMCAQYVCAIJ
-CgsEFgIDAQIeAQIXgAAKCRBkoW+q7BakvnygB/41oiYgfDqkG5srQ4nC7jE0Pe5V
-MnuLVHqsfJBGPvt2tz5+Z1ciIFFwUi/xsafX5DhC+FVOOGdeEnkKnskPBOI7uMFh
-v/s90lbhNV62LfwcS9hptE4qn0JTg7mYiiL0Zue99mlkeP105+GlMmvH5q54X2Le
-hIDBVR8DehL8ZqZCvNEVK1ftpx45mvF/4yh0YK0oVuCAAzwF9+6OxeWTCUTRHTZC
-4CWjtXKUHMq4nTRSp0wGdqd5UV0VbMn0bKTkhgRNCJAKyFw6lJ0FZWwmuG28T0s+
-bKuRAJHTAZmSM7UmBnKo22t9whNcozcqxWhK1lcS4OWEArXpCKxAx4kXmbwnuQEN
-BFbqsT0BCADj5dHK9K27rmkFscDY6x53w4L/X6AYKmVu7Qol7VhR+1WtZXgxZaLM
-xDxj5RK4sNOIqh6R3vEMlAVS+iYbzahI/A0fcSciCoLCgjJKCR3STnTu2k0D/MO0
-la+wF/bGPa0UADGIJLRCjalkl5uv4c7zZbyLnRl8a9XSc81cp2WJTxafZJlJkFOU
-4cyewwFuH0pwMvc9Wmwhkh5IeBF6w8Asj77M5bzJINXYxtKMGYA506609HrvN0+r
-obfgx4Aqy4hGKsqXMsSZiuPDvbdtH3gIRV8NPdYRq+dQg/gv222Y3G1xprDVbl1A
-1CCHlaUqT2lIFPovjoB2O2SBeX9xKRJzABEBAAGJAR8EGAECAAkFAlbqsT0CGwwA
-CgkQZKFvquwWpL4yawf/WDI4VqLkR9RqaX3am/kS8481pZPWZUlCCL7jONB7X7eG
-Bit/FjmQWzfL5nWAEB5qhm2qqCgvgtPmVxCrQLECVmaGmDFmhGIFh8TQsYvQJPK6
-HZDxZj97lUKsG/ojOY4ZArvZnsXBU6C963QUZF+P5UL52n1pE/ByMV1R3enEfrYI
-X+wZslOx5uRFOR8dgUpG/ohh2vkFCaKD6KJQHm6C5lGBgUNqGMFxp1nknKJaNqYq
-jvippm6KcocWARfTHx6Xm3mBqxigmpsalUKAGpjcsxsIEY6jnnN/5i5y1XeokTY8
-6fqEt2OSFSkWiApqq6lxMRluTiq33bSquTxSomKfQQ==
-=PImz
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 6525FD70CC303655
-uid Stephane Nicoll <[email protected]>
-
-sub DCF4B49B4D5845D2
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-LwCg0goAeKquoZuBm9KXUWlDeLuHu6Q=
-=WF0r
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 6601E5C08DCCBB96
-uid Popma Remko <[email protected]>
-
-sub 0AC07D0BBD11498C
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-Ds1RyzdSprcN2g==
-=S4Fa
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 66B50994442D2D40
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQINBGDoYisBEACqUDZnT4h6ma6XIzdC6KR++uDbR2VKdhCuv0Og/sHEKkm6ZbG0
-OFB8tAaQx/WlsoQyf3DlLfUEOGDai875Aqor3fbM+E1hrZbQNfsOySKEE52k7PYe
-0qGWlnAzINuQaEuZwNw+pjZqPraMlwc/hwzJB8yFNHCv25pCFohK7KXvFGr5Fc6y
-NHBp6pM3pnDQ1kbkloDr32YZY2LdrfdkRqwa9STNMcZtM724aaInValFpVGEHolF
-dklo9MIsMI6mVHlxi6UwFSSLltUfTXGYY+rt2Q2sLNnEKzK1GvVhK996vrNWCvpr
-cdtbTzGE3WK4f2knhqzlaX99OLmkM1ah+p2EkK7HgWM9oEO7SYpNxKe/F/QfRNRS
-4W0aokPsEtfKCD7vQ3cRWQXdqFwvksilv+b6pcSrwfAsaCzVuhB3lcIra4MevJcH
-ZEbPrfGMi5/MIVtLayglLHSPoZtjQBhlqo8w3nuADR/aFlIUZ6NGOwaz5yXIGVEs
-6E1wiuILRAd7ecJ3Zyr/URHjawfHfKMM2tNCJKl48cScBMY61FJ1EmYzwhDw+at5
-D4pCk75eM5/t6VdYQ1cDWm7J3LGXEANMU5aSZMqgVnb4SQEmRxkW7oq3Z+GIkQQf
-Sj4OK6Oi4cUpM7b0m7Cbcsoqb6nD27VKD3J5KTYEq3e+78h0VRjhoi0Z+QARAQAB
-=UUB8
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 685C46769DBB5E5D
-uid Egor Andreevici <[email protected]>
-
-sub CA7AE93399B1ED99
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFqHCi8BCACgRpCaVCiJ2MccCN01SbHYowmM255nSYKOnfItBmXYAMtc4rL9
-n1y1qFtc4LBbkIrPH8CO2zpEImUTZel4W93BQkluPOO3EX/hLCTCFfXrO89L1u4V
-XL4siS8vZl3DVDdY7m9G4vcpiIsggGF683KNctN2KXZ0D3tu9C1X7eJk3GyDo6W7
-MJwiiCm10968VqFqIFn1rTkvtGtXGP61Vqy7kLTdiBrKbo1HkZDbryl6nvCmT++E
-auJXEDYH9R+vsODy10a5in0n0EzQD4DYadL6cQTbwP2SvMbRRRQ7AnNtys6cNCCb
-CIJ8iySLaHYi65w6FEbiBM2XQ2hzf8Dek9yDABEBAAG0I0Vnb3IgQW5kcmVldmlj
-aSA8ZWdvckBzcXVhcmV1cC5jb20+iQFUBBMBCAA+FiEEaC92XupxjSULvbLxaFxG
-dp27Xl0FAlqHCi8CGwMFCQPCZwAFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ
-aFxGdp27Xl03AAgAgtnhNsz++UIqtiETzp0Y5v40STwdI+8KYhvbhzL2MARmnYr8
-US+NqeALovuWPNoP8CuzGN6dQP4tFMVr/4GtDJRqzi9EGUHIk6KzliK69Eir04TP
-3CgJb4OqrfgqU/tbXTPFVVKbpyWnrrzg50THhIigMxkezvTWa8iLWswBHb/E/NRn
-1NOfVkPqHY0D0Z+KeAR1/20n+aEh5JrLsxzIp3vNF+qXSN4gKtmdj2fYH9eovM85
-0NzlZnaqwetTtBxeu9mYvCHLCbTLrQTY2MvqBpZbUdVJytJrvOTAddmRrNiBz1w9
-yxzGOKXDSB0t6LVWldwAuTM0eGXqaDgInbe7r7kBDQRahwovAQgAzYHtmnHEZVad
-1Th2c8oFr3/QaH7UP7Xz+lhKyYgq/FsKmkQy88qxcxTX4kMfSB8ssKFdaCtBQI6y
-pFVvaUm8jn1LC0dVPZJHKHOdDEiLdg7B20bPzdY0x5+Yav7SJjYIq53V3pkJGZyH
-P9CvZ/L5uJ5+2sFx1nj1qyK1FWVx2VZk2TsFmL4fpiAi6SOXRoGVLlO0sCqUvlH2
-eR873/1u5Ya387En4krWnu0T+dHyg5/xu9S2Q7XKmO7GyEUXRnXsJPur6CwXpUao
-eoXIcydpdjl+TR70OgxyAGsrfQYVNjPvRVK4yUv839Xz8mCIp21CRscsx1IIeshM
-BqRGXIo8BQARAQABiQE8BBgBCAAmFiEEaC92XupxjSULvbLxaFxGdp27Xl0FAlqH
-Ci8CGwwFCQPCZwAACgkQaFxGdp27Xl2rCAf9EwynJ3Pb70PcSVboGozFCnSayE+c
-/SboSK2Cujfw1Fy2Qr0YizXL4RAE4jXzI+Y3EYZpcJ7XMxUheBTZrxO8ACvMrAwm
-MC2vf1EoM3DQVpyoVCv5d1OIY6rYCjyHeBT4rwsl8GLZZ9vsjGWpI9m8Jcpi3jhM
-ih+zfrdaYJpFzu5MA2y/dV3aYn0kpODuN+WVWRyF/3jhLCZtrNFnZb3pfrS/jcDM
-+kdiyqH9wE6iyvIxX8Rk7a+1H0zFmKQNetxdMQPYODUSXQEuygXaZFzm+bfWU+E9
-x+HCpeZqmOpBQgdhFZFEX+ru97s07kBMVUlWM4s4uETNKLIwzkAk2FlbGw==
-=S5Ep
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 689CBE64F4BC997F
-uid Szczepan Faber <[email protected]>
-
-sub C0058C509A81C102
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-B1jblPtxo2UqRO/qhPfqSkoVcpWmxgiPUFOr
-=w8k7
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 6A65176A0FB1CD0B
-uid Paul King <[email protected]>
-uid keybase.io/paulk_asert <[email protected]>
-uid Paul King <[email protected]>
-uid Paul King <[email protected]>
-uid Paul King <[email protected]>
-
-sub EA8543C570FAF804
-sub CA890A5FA09CFD80
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-=Wk+k
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 6B1B008864323B92
-uid Terence Parr (ANTLR Project Lead) <[email protected]>
-
-sub FA6831EE37606774
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFTDM4oBCAC9cUMAjkP1dD7tt0JUI5kVORKagn4/zG6+Y2MUwGgJs481xsFC
-jXPuNZMucAVtXmw5Sl7FbsfSxR/9jJ2pnbXL918eRFbUqY4LnuOTZjcgNWo8PWPc
-0NLmqoLj3HXaLrpB5cRIXaQvzmfoWxt8o/ZWq1zSfDJDePuQb6qlWmnoDz/S2YJb
-f2AILPsljTE8kYIBHORGilKtUXtQRjs0SCqnbx+DSDAVKSnqYHWDMmxgBMMQsSE/
-RQ/EZ7I4eGRLLfONCxox0fuIt4kOLuMNqGWQlqiG2Kp6Uulx5SepToSrPZLyDGVA
-MgefKrKe/lzKiLeppmx7ELXOKBXlIvTFZBuzABEBAAG0M1RlcmVuY2UgUGFyciAo
-QU5UTFIgUHJvamVjdCBMZWFkKSA8cGFycnRAYW50bHIub3JnPokBOAQTAQIAIgUC
-VMMzigIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQaxsAiGQyO5IHQwf/
-VuVSUFdUJToUScygLSxS1zp6dTEUXc/BfNXD0+7TVRXtzNKNUUwLYRlPRX5aHkUV
-d3+g3QiD6DQIVlSH0INCOto7/EP0ENLbC0Tm6QGhhDg2zO+A1OLRLwXFAVun/4Wm
-1eV3lakXRBCE/Fji0QxDWTYXakShmzIyTZCfJB8jtxG6EYyKNSrOMM2HBjJY63y+
-sQWOYJRz7Y2pv3kpwzPPQ8yxRSsDkJSKU9FyzBZfl1F1UnNkzK3BwL+CyKOAh0Zu
-2u11SJ3gUF0O65Y6FeBW7FVyPYr2IlMsYokr6Ry1pmndehQzQB3paEGUiMO4KWN9
-1OZUfcG0LBZB/FFBmVTVYLkBDQRUwzOKAQgAy86UOqIrhAeN34v5QKv2ZGWWNc6r
-Wi7ieC+dnx2D4kmvn+BLaCX7hJCyNL1ex2TvZlhXt8cgA8jAVgN5+aHTaJwpcTHU
-pzx2p5UIe9oBAEq20NyjF3P9o7lt1C5V1b71EKMTwTOSfWUcK0Skz4G/+gkhNjSV
-fxYwZO1v+Ce4mRCCRi6x8pFGHdyukVR0wJ/o8yKvQijUciGMEbnpDC76N1eAQgd0
-wo79WWGZty+w/qQSknXwTTJ028LlumuVV8UlYxZ/eYYSrtK2t2w+6UG16TqHATDF
-lEyShzYJCer2H1fmSGWncZZ4ODQCkNzNWirPn+q/Rr8CBo7PlMUV06OKZQARAQAB
-iQEfBBgBAgAJBQJUwzOKAhsMAAoJEGsbAIhkMjuSZOMH/2V3TM9qXvwiGsmO2msb
-Ita9b2MbvdlIj7EfI9rt2azPjYTLiQcYWWntKN6tYmB61kK3qzARwcW8pJQ0FiOo
-XEG8jqwHUz3bIxF8ftbq3peLUJi03PDQoNlTpKRuj5EvV7M1f1uZGaKU5W8+BVVx
-Oq8exMeyDU+8PifHmW9S1iFPqq0gPqjljlzzcIZH/JM7pq59uoj3YuNz2X3PreQP
-XVaz607JXUhxJ4MIEqEy/qjD5OGZRKQr44eSxk7938j80OcBa/1IbbjvGs5oi2IY
-gEzpV3KGDU+kSDHVuKcwloU5qMC1Vvhrkildb23wtFBRYIpgke6HBcaQOIivCatS
-bBI=
-=yW86
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 6CCC36CC6C69FC17
-sub C694465FAACEE66F
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBEtrDFABCADLXGAhjPxdh+naC6XU5kficZYEVAURNRa8MTnaMKr+31v2zcAk
-nyqyjihcXGQBCeaNsz2mQkc/MrKdnFNVSwp715JcmcqDJGfR9aIDMUs9PvoNkkqv
-IDtx9Tn73piqbplT2xQxd7HjFvaVuy7oXI68gwcyAGDvQZeiFUodcbAsKrVwFT+R
-94JU6UODFqE/Ihq15Za8Sc8WhWitm8XTQsCsLeh8abGhkvNEmRLi56fh8/Bz8LHv
-8T7r8zkROoQFlUEYaOR2wH5bbipww9+HEg64hrcak2w5smNt0NJUXZ2O1l00u3sF
-Qdu54hM9nZ51xxcqvo+tGft9kIr2AfTrJ28ZABEBAAG5AQ0ES2sMUAEIAOqnjBPR
-FjX47AxlF9NJhzOUECJ2QaoezMOcKQ7RTnDhOiDi/Tzl0MXJoo7ktkeSAMlPIXlb
-K/C2qrM2hT62O/5GSRy1dPErTZx53mNIWTsT0wjQCgxeiAs/+5bqceahRO4PES0L
-J7VR+wiCUP33CIK/Ea2c6ODB97OSly0/RY97jWbM1xwKuzeHH5H0QKTJky1CIdg+
-avdfeeHBDEpCi3BZA55JiAKMuFNYl+Q4yf/FoYI0ZqKFhIwK0OQLY+unIPlX+qPy
-B6TkPIj9tcK/cebpN3VcFvNzVkcqYXdxwUU9G0GyzC3Be437oyzm3SJWw1DRd2Fj
-wFeiL0fWOjwcfvkAEQEAAYkBHwQYAQIACQUCS2sMUAIbDAAKCRBszDbMbGn8F0LE
-B/9O8wwEDuRjidsflZTopMs2drKS/TN/EB/leBFsOqtw712+dYSNhM/LJVZchWS8
-y0RLHQMAd6aX89ooJpvmkijJvJhB9YtuHwmGfT40uco7ATqbo6tYW/aA1rfOs9HA
-jLb1UWQvEsL+96WsiQRLwIoX6AaKebG6mLYikiKKji4LJRp5HVdXpTxRaX/nSPSL
-aau62V7XKJXaVgFvSTy4xn2eph4eRVACKym/psNkXbRyj1maf4a1sdq3WMdiDRHS
-n3rRKsUGVv7HxE45vR7W7hqN0Bna4VzOgNEocRCKO9pDEiOmXsKXUvDJBOrvTddJ
-VHX3/m585HZda1drtSgEv3Rs
-=VojG
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 6EFF5EF5523052D4
-uid Thilo Schuchort <[email protected]>
-
-sub E2F840B227D3C024
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBF2ClL8BCADs2bbaF1ZMiMkTUUb59NTlyAbOOVWoIh7cnKeNjMWBUTP0kLFI
-XpoKiyccQLP4rFdbP2yI6h+LJR0Kj/lJmKpCaAooNlooxfIyPUX5TMvDTRutzwBO
-c38DafLBAJTUl5BMYsbWTGSvmpC3/qmZ9uJAQH6BVEQxmGNO6jpPsgi/YA2AhrN9
-w1F5Pm5Capc8QQ9fEj+AohXGtpOA6aMhnPLjJ45h0VEwYskRIva0AoqbM660YVi7
-HZPNEqspOtmCrR5yzvRmlDmQQ4uKp4InSQ2Sz0OMw3G9cuZy5AzfAL+/SG+iL626
-S1UeIGAjsCu2GGIFDVRuj4KvfmUZz1H/US5DABEBAAG0LFRoaWxvIFNjaHVjaG9y
-dCA8dC5zY2h1Y2hvcnRAZ29vZ2xlbWFpbC5jb20+iQFUBBMBCAA+FiEEKk9V2c2l
-h3cx++dGbv9e9VIwUtQFAl2ClL8CGwMFCQPDI+EFCwkIBwIGFQoJCAsCBBYCAwEC
-HgECF4AACgkQbv9e9VIwUtTFBQgAt+ZETCausF/UT43FRFa2Pkp+gXnuvY+pSiiS
-lqSP7BvVOvTFnYtljLLufK/O74/MJqGYbiyurNA6Zrhe3yMjQqCQlYGuGBeo8Ssg
-0RC+Z4NJPEyTwrx5XYYLaDyeRMcQwV2pH6sWXc86TZg+6gBWBHrvb1PDBFqd89hd
-UY0xI9Vyc4VWTpJCshX9qA+Bjh0xzmxie7leZo7ejF5L0ymPuROZz9VquxORHyE7
-DAqaKesgQVbmOb1Lc5Vpdy70IIVlscyLIfFycTra31cnxPZsb6Iak6sed5VFM5pc
-9qYiLsNk4FyzEs7w2nmlDjE06jmWWY0So76q2IddcNYeKSggV7kBDQRdgpS/AQgA
-0x3w8TNxkGuXMEXxDcRIXQ54KRF4upy8P1exrJPenVutDAvNJeHLxc/uwrAfPGcR
-/DIJCWLbQv0T36WwjQSpW+VBxX41I5/YRrp1BRqUtT1r9Fx5KodpG+c0Nsjs2qSu
-ju+/9RI5Tyu+fO+bgYfuOfPq1E9H7POHu33Gz5Fap7ZB7VmRPw5uAOU2ev67Qq+d
-cfcKsbh0TUwkErGdzp5HpcspEtHxoQCpc6ZX5Ttoj5FS96vN/VIOnvwgVjxNMEme
-CjwHkcXJkkcFGwkJC2lpZx7y/Uv5RPjeKLoJoKKHofRutL723mGORe/uj/0pYfLy
-gfwtaT9kmsWZbZwNCrCuQQARAQABiQE8BBgBCAAmFiEEKk9V2c2lh3cx++dGbv9e
-9VIwUtQFAl2ClL8CGwwFCQPDI+EACgkQbv9e9VIwUtRRxwgAjqQpC4OL0igysJgI
-xcSUAdltJ080Po9eUcrxszIakH3fYeuN+vtKi37NbTI8BxltbXDZC3JxF2Vqxkqi
-6ow6ZTk3NMS0R42DvkBjO4DGvpIF1F+4rkiF5+w3CJHHyEJYGvBt4MGQ2Ivrp1rs
-C/VKazgG7Bkl160msMq5TMUAvVOuTn3pMljVUcsQLDxK8vAvaI2iox3dOtWj0w0r
-dc3OWmufCl7W/RDicP1Xrodm2QrHZXftDEMr6qB+HvkesWCnc/yqCuCr1UXqsTsJ
-5291U3pZ0RCl8aTFwloSctwwQvGxWxT4uXD1beqJ1tGKyoB1kzhwXnzuCBrzCcmY
-h3cm1w==
-=WIxE
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 72385FF0AF338D52
-sub 458AAC45B5189772
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-BemLeqNijrvozak+6IJUvgac
-=NN0Q
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 7457CA33C3CE9E15
-sub ABE9F3126BB741C1
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFIXyRQBCADe285y3Pu7KzoKyP6wqeNXtvvuwMatAmPm5x/i+S8MlryqzsYa
-x6twUmXV1yKjjtGrO+9fHvTOWBfSSP+fP9KTaTQYSasoJq2Mw4cQDy1i0zrxNZUw
-N4/BiyjQA25sdfaOolhO0sFlZuTZpYy5wG72KkA1ygNq0L+8aBKhEF6zDU61YzCC
-AxjcgTftgTeeoqkJtYa06lNz3jmJDN+zUQignfRa3ymoGtFHTzoXR9maE8RWDty4
-y+DY+8ibdGgSgKPZ0byTCDyNojgU1YTlADa/1/NY1ShYg617O1xicLNo0JEJlf2U
-Tu4Ymql36+xSkYSISU97Q6Utgq27XMuZvDUDABEBAAG5AQ0EUhfJFAEIAN9NHRd2
-bYP/3CDi+n1ilSChld0NR3DUBgS/AdqQ7IoAUfj7skyI/WyaMdV4uy6vRh5YgNg2
-g01nd0LLZR8Gf2Ck+D6F88CdZaTxlkcxHV/dXMZ8yBO+0D6yFRZEL7Imsv8Ig4QX
-OVwfuiXEPk/Ef5Dy9SdAVhcoErTGGR6BOGVVvexGtBwefsjMaOG0khkRbWIQ32Wx
-fUFuAv5XBQ0ckLrlKvYWUYhOlXg27GtFKH2EBBF0Z5ZWu7gaBFwSV0oLp9EWcD+C
-+WEwUSfBdqfRJtyXvgf4kZdwdQ5caM8P2/Sdncl2l/LU1At2Smc+plr6zhIhDlLh
-lrzKGa16oARSBdUAEQEAAYkCPgQYAQoACQUCUhfJFAIbLgEpCRB0V8ozw86eFcBd
-IAQZAQoABgUCUhfJFAAKCRCr6fMSa7dBwURMCADHrqwRNHkbG1QsXJr9oUK6KVkL
-sPhcngIhxRLlqe89omg9G7eGNauzs2PKsB3txotCFc7ROVNv/TAuSDYzkPos8G46
-p3bGesjfJb24zc6GMT4RGIJoh1oNG1IciafIIHjp2ZJHRmEDwmvZG24OHJ+mlHLj
-aedtqlWu+zwwhH2VZrI/U3gW/x4imbk9UyyzciEIxrAc+fc19xl5PkUVcSDVC0cA
-qGpeZz8+SxFaf3Rr0aGnSbeuHRjNupmoxkQOAey1ztmdWiCPf5RFfmFD+fENh+/x
-qYiGorYpcIN7UAsMkvD5UHc5ZG2tTD41jM99w9Lm/xHJ9ks8gNwZESwIzr6ABKIH
-/1ulsflI216qPz5o7uUxlTm8NfTyATfCUuZEDMYGOjDQPqQa8hFebqjWWYBUq2Sl
-aKD2xMeEuEXV+M5k88Cx6T2nvaZWMsrD7uGj+tTsFaKBGxP5p2OSEWOTETKKv6Cx
-7vcMTQmrqSFo47bFKlNSs+aVM48UnQeFtTDyOhwa5jvtqtst4eQHwHWQ99BK0TEy
-mNx0vF0nPjWA76CRrfopOwXKdxJgoKq4MrxE92ot5I82AZBPeiWVJ+6wECeK/GoB
-IXZ5jEUqrQmmzIboWA5G5PMJ8egzLJNRJjTWHjCWrUTnwNcqaD4/qZxIlW4Lt0uv
-Glx6pKOJQ05u+9X/BzoVWrw=
-=ajY9
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 79752DB6C966F0B8
-uid Rob Manning <[email protected]>
-
-sub AC9F6F1991913E30
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-1v9wlHhhdbE=
-=R3mQ
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 79E193516BE7998F
-uid Filip Jirs?k <[email protected]>
-
-sub 9F7335D63326E7F9
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFWdcSoBCADK8j+0eVZKUGctZo/VaJ/K2Wppx4jEFgih8xiIWREQ9B3QEugJ
-mJMWZHhrnHB+sjVx5No482ch6sVhYmC+VMyTdzepItZ8beYa0pnNGJnrFT+HcTOS
-g21Ef5e6BRORNho2j9YTvxvjof29XxU4SJFVgffs48jGeJzN1EDmOz4OlZupKGU+
-98o+kMKCiFjcf6Vu03asuml97b2fMOJ09n+UQVlZbBR/Yo407ZLkL2Elx47Fz+82
-iO+M8w2qNnxT4PA/TLgaVzkVHaR/JIDlQQ4DfuyloQI1hBpMB8f60oukVr5dBGuS
-1dPZ1H7td975sLegWoj7CCOFZXrDzYUXwwXPABEBAAG0IEZpbGlwIEppcnPDoWsg
-PGZpbGlwQGppcnNhay5vcmc+iQE5BBMBCAAjBQJVnXEqAhsDBwsJCAcDAgEGFQgC
-CQoLBBYCAwECHgECF4AACgkQeeGTUWvnmY/Z6wgArX9fzySIVWcqFuhaIlRlib9j
-1qE3sSiFVENV4NrCYv+4ZUQUEUvqwX0F4ij+Au9fzvaWb0gT02ErHYJ9UowUgUYb
-IdHsifoGh05jZdiClXJutcQHddM+P+ReIAS4/JDlXza1kqa1RRvDh+OtsrDkL1MU
-a5T6/KbCWzAj9+96vqa2dLO0mhyrPpVX/hF4tPY6ltGYEXA9N3c83rFmaCZTNM0t
-sEQniQMICOMZul2dKJ4Tev12/G9sd4owtlHtAtv0+tFPDMPQAXjToUo36q9MIzKE
-Cyz5sX64QRablAJc7QD4MFI/7J6eQdpSKM77QaL48kcUAK1j9nlXv+oj/1d437kB
-DQRVnXEqAQgAonYI6XgMnKL5jj1n/3kVxKA+4m0znSoMutK3B2D3geqTzFWlDIWU
-EOEE00U2mBMPUibQ9orbu5IYrbXLR6t0QORJiHudP3LxdtjIqXCagdzCewJ0Kfvd
-pR/a65dsULLu4+v8R7KBH+lBVs0aN0z8e539ZaoGPCVaWliybbHwcry4tOMu9wyB
-dPlt0pkqQ7y+YerXgHO+hc9urQVY9zHVBRe1J2vqzFONitFlD5BoT386pz8tBi0W
-32J46nTgReukzJWLbtV53fxYAFUroA7Ydy2xYKQ2yVqBq9NraUNqbdtlEhJRDS3W
-eQs4ittg+oyMumIdNjSbUlbDX0O7EP16KQARAQABiQEfBBgBCAAJBQJVnXEqAhsM
-AAoJEHnhk1Fr55mPAAUH/itFMvGq/ri1alRXhLbhx8/HmwBBkgS8wCu/oIIPEZ4W
-jRB8EfEYAMbmqtmbGFc/lL2QSxvqAcsUGFlVqRe+Ux9LilQx/84zvD6aG90eTzfF
-pNUHkgBOS7poRbDggVaCSuDYKiyTc07hHNl4iZON3VSiOaXf/4rzbIzv0n0swc0s
-00N1IcwI/pP+74t+tmfH4PUjZwUC6cXHMHSfvImAO2hPMAbd3rJ/ZO/ZVwjNocjR
-5fQj/MSOgl5hiXEkuBdoqoD0lTJMYCwPgwPGNcBr2xeXOKxeIlbYGwh/j3AsK0Op
-uqUJfZ5wvADbdmco+6Piann1q0WvhfmRaie7IPG2tB0=
-=ZbfA
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 7A01B0F236E5430F
-uid Inderjeet Singh <[email protected]>
-
-sub C3E640F38D845FA2
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFZUsiQBCADGmoidvh3VvXWGdwbAtHPtDPKEebE/MfFVO+QTRbjJxphzKwAt
-mxHruikafaSTnC9FWizj99e/Yc45YZHcnt5Htmy0a7DSOQXL37rrnieZxg86tYmC
-4PxvvzC/s7xF8wmxDo4A+mRyoSF0NF/fQTZAr3ri5l0G/vntH7w8AbiiyerpLobW
-/TqQn1tpMh7XfZZ+XqQKANVRECUiCYT4iJKWMqcBpLZW8aa+iYW8yCQ1xfmNXjrx
-jpTqFCiQjvwCw4dDffNe/A1Dbq0wE6mw3YHW3OC1fnLiP+TEM9P9v02bZyem6uW2
-+krrToLTTHSqIGF9wUUF6S3Ikrw2EtJiRQtnABEBAAG0K0luZGVyamVldCBTaW5n
-aCA8aW5kZXJAYWx1bW5pLnN0YW5mb3JkLmVkdT6JATgEEwECACIFAlZUsiQCGwMG
-CwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEHoBsPI25UMP6r8H/Rq70+JN+EyS
-6iK6ilytB1vY5GdwBzAxpsRUhTL1lXSqgjCXy/6sgrTQv/9/EgQznm7hEFVkwr5Z
-CacXeajvFJ3FVtjgn0aLRADp88Ry75DsttjwV5nIBNvFBJbydvJhfruHY8gzdUv9
-yOHAX4qtoNDFRn1HDbNsYMlRSXgjHX0JvBexdtZArtsd3aLOM4m8r+t1GFM6ePgj
-CD1q8yBH2RAIETAId/jiu07AqsJXp+UPBgJQi8o7cEtEE1HgkI+IoEsZXFJldRqF
-GJS6eKS8bpjX16nHI0SnR/gtsWpblAdZsY0YieK7o2pU8lvlCFffaUxXDOP7+BCq
-8W29nfaD6YS5AQ0EVlSyJAEIAL0+8UoJuUsC3jDE60tmrApu/hK+dCbe5UJnR8z9
-3aQ/1AfEX6So6JZzBlxID/HCOvRjJbauL6Lrvw2xgSnrnOzRLf1StvBPASfJk1Zd
-o9LZon6Xofzg34qCLUQLkDyntgXQaYF3Yw/xfiqqTC/yav29VTzKnf0Nri8aXGsH
-OycJ8nTO7I0p4xuRirFu7Bkvd7bK99/tDxttYkvUnG3BUGlr85UX4uODh3EcVcgV
-QteawYbmsf4F00IBoTAycutCOdbP2RAgP6kgFxLcGz4zVqu93QjSjEdTegF1SUXc
-GpzvDR8T8zRsQbBCZ32A/UJqmx+EIPPFHNkLijDp+f5mkJcAEQEAAYkBHwQYAQIA
-CQUCVlSyJAIbDAAKCRB6AbDyNuVDD2xjCACqL670xI/26dWsz66ZyHQ2yJI7DNQx
-oiU3OZs2bfrRZxLpGP9Q6YWCehb+iucvmFFvLZBoGGWzffmVBisD2Yz3mHtF3wLx
-+2zJXHt1Xz7H6W89M54T3qUhQTTV6pl5f5/JCXK1DP9iC0y453ORY5B60byrGIUv
-BAv+qWXBPn3ECZ/3oEkErb5ZGof+gJjffqvWRAN3Li0WBRj0ldXpJoP/YE8naDJ7
-UdPfzcnh3tnOTfUDvFer1Nh00ilMmf6EYznRwaN9whc9W/1HwvDeXrijrc6/1U7H
-p1r5b1DddTtx6aHxpWrcwYw1yXGcm82fjXnRdomz6nBt2DF400YubAZR
-=2qwf
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 7A8860944FAD5F62
-uid Sebastian Bazley (ASF CODE SIGNING KEY) <[email protected]>
-
-sub C189C86B813330C4
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-=Q+g9
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 7C25280EAE63EBE5
-uid Oleg Kalnichevski <[email protected]>
-uid Oleg Kalnichevski <[email protected]>
-
-sub 926DFB2EDB329089
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-ZNfGiQCfdH3+RPBbKSQofz2bGx7/niTd9qg=
-=CP3a
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 7C30F7B1329DBA87
-uid Ktor Release <[email protected]>
-
-sub 72FF58594F983302
-sub 3967D4EDA591B991
-sub 0588BC69A286FF16
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQGNBF+TCd4BDACbIA94MfIWL0SpvZwBddXgx36Lp9GYOWNgGoQCWSvk9vaMrLaI
-rEll0xnoP98CfBQYrVSAmHDMhSLBCjNB3V1Sdz8GRdOG7HUffF7Cqwbm3Fxo3H/h
-+Tsrodv23NuvKsDpgglUL6nJy5e/FO8y9dcxLXRRVdPFDhJubi08SiUJy9FQbnfA
-yb2LuTzXtjDmjEsMZpdpQUlQkk0xNDkrrq+2miwxemVd35cnVQCFP0K7c4T0ksGg
-Rf9A2r45DBbPfvwTL+ZbrGtCssUpCneWhPl79UsMxeY+vJjEggqqqRqbHRn6nOQd
-3gKSaEqdALZURPzvkKxLUeUUtMk/tkFdsNe/ea7edk6G3MI4dbUY7p0XLS54S9cB
-1JUAHNEFtuJQKGWNuwWO58Yun1EBtOdUEvnIIoQ+CIN/XeKrnEIXE3LSblB8BR3H
-bqX54BMe9AzsmDQtc5pUOm2pfvCoiv8xFXQznBg24dGqo2A/jMoUnGj6oRj7k8mt
-i9AdPLigldr0S0sAEQEAAbQhS3RvciBSZWxlYXNlIDxrdG9yQGpldGJyYWlucy5j
-b20+iQHUBBMBCgA+FiEEOUy0NsVpFvwB7qSnfDD3sTKduocFAl+TCd4CGwEFCQPC
-ZwAFCwkIBwMFFQoJCAsFFgIDAQACHgECF4AACgkQfDD3sTKduofP5gv/WRDpats/
-AbkXtXF90tNmdLomqzrLaz2dmsmekVjHnppEDZAJDWgHKuqi2LL+FU+8RPZj91yE
-rln0/LmOb1gGAkYhL5HIdSKPhd1BYrlObYIvxoarEi/U3+92B+13621qu4GEV96e
-luRXXe85vncuZiwjwPQqmST8gsAD17AiRt71jUHCqQUhsEE3C/5btOrqvM0Bhh+3
-QDUEoJcl1KoQjkPYhSDP630jhgsq0E22Yb1CWSXbwlJZTpmidAKICurll6YFhHQN
-wL5CLj+DjBJfkyC6nRDK1fX1IyU5jN201iDYMh+ibUclJFF4Lwl/ISlb/8NdhbPS
-SnNehscKyAK+xZ0w9CVfTVOIl0qx4SgwfoWu9fi02vQe60fK82usbrNJl+jWHAJY
-FcZjQ70cU0JpFVwhWr0ffOLD9A+HhiqzL7SBASapY4w5yLSlqZ5BOKcZx7NVqtXI
-qPgmbrSIYoXEzz4HQb+oCeXH6AigT+pxZJXpyEQudIaBtC67Nern3mYbuQGNBF+T
-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
-=/gGC
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 7C7D8456294423BA
-uid Henri Tremblay <[email protected]>
-
-sub 9842FE565AA0601E
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQGiBEvsZw4RBADH20nX+H1xvMBYmXRj1Aae4dRr6Y6qI7QRWHO6Z7/dxr9bk/NN
-Yjq5KsVOQxZzloVdtqx75rznT7fZq98g7Nq9IeEtB6k4tnh6XQLhljJMk0a3mzdt
-q3VzdxeVbwCaPJ0zixv8XPTAH6MpRJUvP9XjzxwaYHrjwcQ1LslW4TrIzwCgi5rf
-jChLCyKcaL05gqUjl4lmefED/iqOwYZw5pJ8+X+OHUViiOB43wsJt1brAhPj4KgB
-ODStcE6WlHFKi7YzcYNLzYMebSGYn6bj65b3qNf6rybWD1hGUFK4122Q7+HCH9Ic
-J+rr8HwjGFo/yxI0/mkyaF0BthXYPy4WtdsdTM2kgx8Zr3Q2rSt1jBPuV3q8d27z
-FZMiA/9cWPkRx0RfAJmBPKmKkbBkEtBbNau3G7MY1OEAkEkRnzmnyyjr5IP84A7K
-RdjTCvkbiQrOQH00Ki4sHIg+9Xv1gDg1XLkFDzRARKA1TxjL0OeS4RWF3iia7Swk
-MOnTdhR50pjb18W8kB4mEMZY7duP4nwDfQwHMwbFZGHrjImaurQpSGVucmkgVHJl
-bWJsYXkgPGhlbnJpLnRyZW1ibGF5QGdtYWlsLmNvbT6IYAQTEQIAIAUCS+xnDgIb
-AwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEHx9hFYpRCO6PVEAn2zcXoOXcW0I
-7Ht0qnUs4ZMM84ahAKCAKHGR83czneSiWoCsXKJQo9ZQ3LkCDQRL7GcQEAgAthrb
-FDDbIGq97dbX1ZEwNGpjILdeumxZzaCc5PgldHGA86TL2V9iPpONJtv7/Csr1c/r
-vH0IA/BFu+0Kde9UP+z9JycmfJpIsd2Qtxfhn9R4+Td0VtN9NNkpt1+JcThbzyQq
-4UU82uBKwSG/wzubOI4Fn+7ypIuNgDkqK0STIL3ucKF/RV77PsOBeLHkCGKIVhUU
-fY1D51BWZKKB1efaVK7PLdnsi64lAhbaexA43dwUUtVwQOvDzJVtkycV2IMwXwyH
-onlK+4vbcwIH2BAU46LIZy+VFaI+lNNmR9+xeWH49oJYnMWIXif4RzvO1ag2KKwl
-G2sacuVTtpWVqKayBwADBQf7BGl4POKtluAbX3a/KGnX1YyibPT2e4pdOxqbKTwu
-Rc7ILIK/LVcejVuLd+eOF1QmjToI7Y3qjlzvtaxSemfkxbIQpdus0SyHEEAGH/qj
-NuTs8ZwEl9tPPrKaJHbJ9kQrlDPwkufA0NDAXTE76UhcHPY0DeykAKEw2ravEqI7
-Y0nXR2WSmRLFChmQ+aNTm/9UGI/IoRdS/dgo1eaLD/7RLFeL5tGDe+2nj+B6j+52
-nZEmaRCWWU7O9jYL1cQu5WTurtneCLtIqehLsjuVz9ihBysYuUcTOV/6W0AIclQo
-MEiFR9Kyv0owDk6LtX2DgibJuAvvLlnajsiGm5nyVh3G1IhJBBgRAgAJBQJL7GcQ
-AhsMAAoJEHx9hFYpRCO6iXUAnRcLw17lBhe/WcKFRkzETSxaJcjIAJ4/P1NNOn/e
-ScLdx27sje7q3sBENw==
-=TjvQ
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 7FE9900F412D622E
-uid Wouter van Oortmerssen <[email protected]>
-
-sub AE6B5325E74ED034
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFnyVlkBCACe8zGkIlDV0dUKmk9PWe2Hw8qM9DdPbtpUOpmUOidGY5svQDL3
-eqvHk85TbxqFEe3Qbjjt+R+iApFuXy5kmueXTvwCm7nAU+k/pZtPuzHyhDs3iFFH
-8LCI/dOpd04LXLpuoeLCjBqPlOM+Pxiiu9h9tEnJaJzuXcw9SY3I/puj7qIEwxsJ
-W23gdPtYij9If1ht9gtTsDq9s7VbCM5vL0ofM8JVPilnE4oWuw9hjgIfT/QotbuS
-wPo+1ExZUfaKYPvMxi2kY3LZU3hlp6P5AxU+eI31yaYjtL+0lu66jTD6s8lwmF87
-QqjjxiHwic05//tp2Pk3PIZCoQurfEL6ZHhhABEBAAG0LFdvdXRlciB2YW4gT29y
-dG1lcnNzZW4gPGFhcmRhcHBlbEBnbWFpbC5jb20+iQE4BBMBAgAiBQJZ8lZZAhsD
-BgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRB/6ZAPQS1iLtSPB/4l5s/avevY
-mNnuEp/97qiG8kWOvFfz3C5QP5lVmsj5hiK6Hllc1zjZxaS+TCdrsvH/zKZvgmv5
-9oy5nNHIu/sZB36JnLbE01ieM8hzoW5H7lADJ0JDI6wRbhJc9oXGA/1ZAudT+Jt8
-K2Ijzc2XOzHqE4j5vF0Sc9NWEM+OnAwkrbnIgK98ZiWTF807+/uobtanAUEWbFjb
-0wSNgSX8IvEj3rr/ZaIbf0Ymp/YObY94jVdBqFE1B1GR2TRp1YiAy+2BqoFE599v
-pmnWjZiT3fKL7V6XT98tyk9+XCFlQT7R5v+T4e+1Ad8j0RxsXUFKUScBPySrqEFl
-gMdy83QUeyhQuQENBFnyVlkBCACk/9GoJK23GwRKF8kx4h2oOkb63mP7DSPmsgBG
-CxvhH04oE9Rg+SPWKTjx7E0XFytyCuBYn9BoyGVPp45X5k4Vvj6sNJsSuyW7ExJf
-1AA7Xqa0mo1tjsUPSeAWyhruZCTaHGmnY6ClA3Bsy4E1C8sC0UapW9dNAf66SDp0
-jWeEkU366fa0RZexz92nIDCTQv4YZkYROX63P6Se7hNtontmKA6JajD+46OLGgNV
-gdSKZpO0PMyD8VMg5RUN8PXHqZ68gJ1ihjUJ499sXFuAaXKcxkbb+ajD6fYPQ2jy
-4S1tQpUGmBKAdvthMenEShmwk6lsTN86yH5q9tTNwMWjTbqFABEBAAGJAR8EGAEC
-AAkFAlnyVlkCGwwACgkQf+mQD0EtYi7nngf/aPDwJQG7NICIuMue/QlWCUG4zW2F
-ZL1iCKMYhfVnz29lM/5AG4Y0SlcRkgEigizBQUkeLVHaj3obLlxr1I5yrjaOwD/f
-ruk3roC1pi+1i0sv0/eZJvyVN3Ta3pjzYDT/Qw09Ao5py7HksJsvAM8tIbw5hnmx
-q091M8/zdgIi/H38QFBWKNYaPkC6WMxWv0M47Kttcfv1DBF/NmsMzts45BDoE98C
-VB/5M2eLVVrbHlj4QqpLDTeSYwcTb7JVSKrNbyp2Ws27l1oNhMexztBivHz1OLxG
-JY8odrCtuxK3JMllDdln/HHdwrp6h7SDRdxR6llX74zIdctZVsii8eJHvA==
-=o0Pq
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 80C08B1C29100955
-uid Jake Wharton <[email protected]>
-
-sub CF771F914C2A4A73
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQGiBE2fCWARBAC3v9wYo5kmynmVP+43ccamidflSLQjjpsXpSDLPFokGxeuw0OC
-QJy46m8b5ACoCqRlfwnRRcEHxiSlaBATJA6hi7NRO41R39C62JXsIxNJR16JNQ5k
-oG/NOAraw0E1RQIFslznQexfxPg4yFIVrsFp1wkpCRrCklatPMNap2DuNwCg7PWJ
-1vV93YIsaH0O2fnXz3E+6zsD/3cTzUWuySEDiCLNO3JYJm97v4NDQ93encP1Ooxh
-n+PSIP4GvjrAObh3FfWUucv8UGqcw5bAL7dA1z8SgKeyFk/afs2XofXdvC+PhZqC
-DwU0NiE0D/tDWqX0qIG4ezTU2uk+5dE/WVl3R10nOBgquQdWIdYKGfV4FNTiEduD
-Uw7fA/0XcwFom7eyR9eBonQmgIadljztm4gkv11lY33V1ZfJNndPKNzwevDwX+om
-/VEHvpEfPx5toD4H523BPx55ZtfowuMtFHZI718alpCo3h6xaDhGwXvsg3s9k03k
-rfxzCjf9qcJX1gb2JVZ2+2jCwUDQZeEwV2vivjGNiN9rShWW+7QkSmFrZSBXaGFy
-dG9uIDxqYWtld2hhcnRvbkBnbWFpbC5jb20+iGAEExECACAFAk2fCWACGwMGCwkI
-BwMCBBUCCAMEFgIDAQIeAQIXgAAKCRCAwIscKRAJVQoeAKDLeCOKKnt5aqlHD/7+
-QPOgX4iYPACgvGRCubBztEBkU2xXbr9J2cQY5em5Ag0ETZ8JYBAIALeU4dgFKEn8
-b3E1LUT25svvUUX2kuVLQ5TzokC6zjWQrPehOlsYx+ey8RSN/6A5rBLtn1z75ror
-F3+vN5kLPAz8x2Th6Cxd6lvn3DQHfvDL0YHlp0AZzhHx5ogyJxdaqwzNy0JWxava
-FGN6b8bbrR1Nf08kq/d5dNe+NGVdBXcuqUo6jt1W+tkbntklS5e+B9/Q/4L8dYkl
-8xXRIMAuKw6h8j4LFXse6xndWeWtTIkfZImz0f7cLQV5X7QSv90i1KfzT9hLiUjp
-wqPydtTNuB6+gda64jFNhVcvgW+h7MH6FT/zSss2Jh2eDR4HFrv7EJSS8dKCvPox
-y8El8pQMG/8AAwUIAIXq+ryw44voH/IdbvTQtK4t5/lp/Oj9b7QrMR3u/iQxM4K3
-dq7rUbA8hjdMM3gfMu13B4pzGtpcf25b4NIIQkhES9+CUDQDYHF+gwkrwEascbdf
-YZiLAHtcMjW1Og+IhTY8wDuJT4I1pqumSzWV8UxVJctqNUTY2eU7158oD5+prdCc
-eQLbzxoKFtu056kZ2+46v6bAl8g/w8WoVORUuHruuvKohMVPHwNQws7KHCFy9YCr
-4yIQfqC8g8oITqlgUZcZaXx6K+NndwA6LAoXJL0edaZOZBuFq5H7Fkrw07+OIQFq
-LTGcFpR12AzDh9lmtyJQ8nVfb6IjAOSwBPlEZWSISQQYEQIACQUCTZ8JYAIbDAAK
-CRCAwIscKRAJVd58AJ0YA8xv0U5Odm8u21BvyxjGS3tBZACggF6P6KjhUPpIAYTS
-6v3TtzhkJdo=
-=Zirr
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 82B5574242C20D6F
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQGNBFC1VWUBDADZwqBEEmSjwy2JADG0qCpvVQzC5KszL0CjzqTLPMBmLKNuc/36
-26MU4yI8Y+pcCTnC3LN9hrI0hxiP4zFFFyLYKkUWCZRAwj4OQlnyTDKa9frKBMed
-PJtihlQAKeCtMh9AOXNa+hZoAAEG/dfIOJhLyZB7JEuuwkil65R4yLrdnbbhPYMi
-1k0GJsaxG3IhkR/XQMO6m1KnThxyk2GPQNLFHUVSN+Gqz9m6u7oUxhhFjwUj3DZb
-8oGcQ08JR7IGdB8qV+XC997MUGjbRRu05hfWJecR0Z8xkprsdKSbFjuw24lZtsfJ
-w8advblczq//NvaUj2g/U/McoTPKoWXDFSPtw0UydazGtBUEM7SFer29upgyxA24
-oHoT4qUj3+lelhBbsf79YuI2M+q6OfeWXfOEO6xkcw54SmcvfYYatGg9UBiZq9PK
-oUfyn4IOKhxPY82N35tDfoeBXDAwr8r00NkFJl2vHv8QkIKQFF4HWLJw/aElij5t
-T34qVUE12H0+oikAEQEAAQ==
-=Uua5
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 840B2BF6DA8ED8C8
-uid Phil Weaver (Software Engineer, Accessibility) <[email protected]>
-
-sub 43115D7B115DB0C0
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFSR0DQBCADw8XL+xgFg9WVPknAIqqb0sUIZ3yNNr8LkuNtwQXnwAcSJkHSt
-C1k2CIKwRPPfcLsb51l3SpxFTs/s5yhyiknDfjqP8IFtLocBSsn3kD4VRjcxFQhc
-0jjgsTr9ZP/ZAWMBRIuxaZtpe7bpqbLbV9lvqjbOnJzASLKJoUngZAXvljGrWGfM
-3+A9z7SdrilRlA4DOZNqPoxN2RNY0QOwHh8Wv7+R97K/VQoAbvN3tQxlfn5B2scf
-WL2nWoGRS6OuO9Zp5/W1twoVdf4d85FlpNFFM1xzT8f5FpjF5QRgQD/Az2XHnObn
-ukG3ZPEhgwBIwx1Uw/Y9aOceXke9vaGEsDT1ABEBAAG0Q1BoaWwgV2VhdmVyIChT
-b2Z0d2FyZSBFbmdpbmVlciwgQWNjZXNzaWJpbGl0eSkgPHB3ZWF2ZXJAZ29vZ2xl
-LmNvbT6JATgEEwECACIFAlSR0DQCGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheA
-AAoJEIQLK/bajtjI12QIANhe1ZrLQQvYFyDXGHS99LrT7WUzvxQdJ4xYYBRhmfqE
-6povjXvBAvYQabMQD3iBHie8xZ4PDngc/osp6SJF2wCT7LCFLr1ebCbulnL+rPDc
-y9Y6vQ1zD0NrBxsRYjTGq/1JqBd+Q7L0xMk8BK1xuZOCAUyq4CVRzSSxgTxJSQ+n
-Y4ZOL7PzBTYbdacMnqJc+2TwZKgi+CKIpOJusHa98mZSafzotNbmasKGRLPeJ+66
-Y/+Wfh6P/N2VL4nrnOrERW/XV9QNcI5VYlBUW6eYOhvpaiMeTMHNiN1VfDs1nnfH
-ICTdeZNhw0J7S544RXII59MBjOO3UklyZ6A20fiuvwG5AQ0EVJHQNAEIALIuFrzu
-8kQ/fFJ2FA51e+ULp+dy1ZYrZqJdTF5pMdZId711/zN9NExsTIxck6Vx9PYYaTre
-aquTkRIKnFD4XH/Q5MItEiiKHRtwdyhdFqCKSHaaNSGqldFwWZK2zh/x7OPk0ybn
-9L46E4+Eg9Ie+4WdyTxDKoeYQYl9asjtZPtfbNLad3UBvGAeyqc2hbePSxiNifNe
-cTJqzBpW0voJ85vTkuRa/Y3wBdkfyxRPRofAIjzwjyIXCLQQFSel0ok6aV8nToOp
-/j+HST4L+TVnY2vYDW1UWQP3y/suCp0jtz7/ygEyTie+6P/LEgLfp8LKri0jJqxi
-RUXA86tgDiy8x88AEQEAAYkBHwQYAQIACQUCVJHQNAIbDAAKCRCECyv22o7YyDOi
-B/9mnGjQdqXQ3NWMiqAliYnPEHYuNaP1UnRWrXpAHpRnQ2L0mWTHrAW/f7P6W4is
-l+oUKbURBEItgYY5f4/nIfp6TMrpD2ej91Q63gQw8KLL1x5CpKKLrv27w2SzE3ZG
-c9PYRuvW5rPqIXAdBYpznGKoowszWlRsgpw2XShuTEeiM2xLghmb2gSnU9l5wXFz
-VSa0PHvXoUIV6YeO1wym9bvRdvmAhf1AimvyOlpyk826vmI65l0OSbx30N67RaTi
-k2eHYk1uQ1WlnmgeRB1NfTANUMvaDbrFsbOliPJm3ncc9eGhJ74hzl8WGUy3SseS
-YYRhm4MK4YpKCJtCTWxKdYj9
-=zW35
------END PGP PUBLIC KEY BLOCK-----
-
-
pub 858FC4C4F43856A3
uid J. Daniel Kulp <[email protected]>
uid J. Daniel Kulp <[email protected]>
@@ -6330,859 +1927,266 @@
=OErs
-----END PGP PUBLIC KEY BLOCK-----
+pub F3D1600878E85A3D
+uid Netty Project Bot <[email protected]>
-pub 85911F425EC61B51
-uid Marc Philipp <[email protected]>
-uid Marc Philipp <[email protected]>
-uid Marc Philipp <[email protected]>
-uid Open Source Development <[email protected]>
-
-sub 8B2A34A7D4A9B8B3
+sub 1C9F436B883DCCF6
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-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
-bpJ8mdzS2PJko7mm
-=NMA1
+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
+eOotdxJF6J5yWErznxlExP5YBIHvIQljCyU=
+=WKVz
-----END PGP PUBLIC KEY BLOCK-----
-
-pub 8614D6AB265B4C63
-uid Antoine Levy-Lambert (Apache Ant Committer) <[email protected]>
-uid Antoine Levy-Lambert (Apache Ant Committer) <[email protected]>
-
-sub 8832A83FA3060393
+pub 36D4E9618F3ADAB5
+sub C4935FA8AC763C70
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-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
-NACdFJ4KIATJDK/5ajFq5+irOpodoHc=
-=VIEf
+mQGNBGGiftwBDAC94Yhhh/5yO8jYFkg01MPnooXKZEPwxAbAg9wn5iM0tHxhEpkU
+zJVYZ+JYq013+Ldp8Of7A/d6hKTtZ0xwSeY7S/WFykIk6tc0P5j0sfFS3pGPDk+W
+D3DwUa+8m0PriF7iA57vCOE51znO/IUIA3PG2YAK6jv2/i8MDXOOq3qB7VrbvKGB
+kIPubp5PbjvP+LFhLuUReU9m2y/3q9lNFXdd9kE2iScqGmu3FDhRJxBK/WQ2kqiv
+sJZjAYeHEVNcc88Ah6vXI73uYrvWVGCErzswYy9UrxCAQ/x2OxUdLw7NTHwjZSYC
+JvH5JPPTlDxMgfwTIsmaECtw4QgiVmvDp+RVa9zyrdI++RNr0InsXv9gWMv3p3yf
+TF20ZL8znFYVUi6XkeQhZjT4fHwDqDVnxhSAFe3E0cwHFJBQe2EFLljwNy6VYnio
+wBr7HrAxczRRqlUy4a3bH5KwiNwwvxgqfdMj9KTVpP9t98/TA36bIohwGFRWB7W4
+i395S90NsTbCh/cAEQEAAbkBjQRhon7cAQwAtPmKcM1/z8sMJnt4sHe3ndXsOdSq
+TJbRkAcdyDO1F4qgj5z9wkrlVVKGuVtmJS3qmR901Q+oH+JqM6UeGqhNig4IQvME
+iQjjelvKXMX9PPVzlP+ga5Y1/2mnUmgmYXK406CU7aaQ3hs7++XDonnQUt5nWF9d
+XT+xK/SDLYMk5i1TNqPVFZBPm44HpIjKGNJXD7Vv/5z62+hKswpLXgYt8Rz95ByG
+ncjQ1Lo2M1T1Y/EuwlRoc9RTdyABavSQWVLKIz6kKM4LejajjRvLnybMUug0CJl5
+mni4cHXx9t0pMlG5DE2O3mZLwTgWcJ8cu2CtPxA9iLfVvFAThxk3ZitkEhChBtG9
+/V8D4DiTIht6bd49xkHP5pxtB/fuo9lNb0axSBaOAeant3KA6F6vki+chnGhOFqV
+1KJHcxYG7VsG1hYhy5IbZsg4GdcXfTwwF1/mq8kvHfyTkBy6HMDGwpr0ATNnrxO7
+tJTiVqDuxfviGQUjqJIQDns6fM9BI4OfpXyjABEBAAGJAbYEGAEIACAWIQRH62g2
+JF0tQOid+0E21OlhjzratQUCYaJ+3AIbDAAKCRA21OlhjzratRBcDACCfhsaCFvM
+JTls5lT/dcTqSCYJYZyDj95DlTiaRNkXnAGrTyE45PnmJLv6FFZzSZdu/eLE8ls2
+MY/KWqnZYYV2Mct/pwDDLSjdAN/NSRe9HeAh2OS1kNeN2SIcoL55gEodKBNSMisY
+9N3ylLMxHZPa5LNBo+j9wftEaVi2fTX8LDJFQvUOZ3f7cz3f6u42FeHUqaLm2alH
+QSkfTB3yIu8Hmo2EXHh4UfwTmS55OBGLQ91d8neu7PcimqCeadeHW+qY5g5hr5NN
+LxMA+n+vwPGcQNxg0lH2XBdlFBbAELEGxMcKbW51QL2h+EdwGzT/nK3Iia/qm3N5
+0Z12j/hhzohlf7TQjhzB43Wbxef94JbKacvng8t/hG3+n8UASQzizCSn/oMkXQom
+XdQe5JFgJCroU2CfrdFmZfbkkq9mAi80BLUEAGNTUQrg/W39VX1/klGiXiWtpU8g
+q/tSGRQHXTwG53qejlUtKI315ZizOhJiniSDx4fZaK2zB9RlZkrnd1Y=
+=KPJF
-----END PGP PUBLIC KEY BLOCK-----
-
-pub 8671A8DF71296252
-uid Jesse Wilson <[email protected]>
-
-sub 51F5B36C761AA122
+pub BB2914C1FA0811C3
+sub 7AEAF265B448E2F3
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-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
-=nFNX
+mQGiBFHwyNYRBACkCXpipiMx0lCEccXXzv0bE7LHHbcQYtb1vT/o9WXYoP8JMChJ
+cvuAe8Tvg+s7EUjKHJRhu7I7kie+IJ2wtH5uVARkYxoP2OslYN6MSXa/bmwU8fwQ
+EFkVeFV7q2UFvH4cqpa7UKWggKcUzvB7z5spg/iKuMDQ/aBkxpmUcrpefwCg4/IC
+Omi4O9ROfzJ5Q1YHSrr8A0MD/0OTgJjkBPPBcel/pFetsWhlqA6dkYINT5qdlht6
+d+aye97QFUccg3ODnCq4fnDPHK9PMK8cTGkrnoux5XY240XkWX95tQDyrssGqldC
+zOLxoii4/gsw5s6j4x/AjycsAI8DxaecQb3/sNg05V30ZNm2+kQNmGGV+0oERpo6
+DAVQA/92UVwQdZjMzCs/6NTbsq/2tRX/XXiIxTij6fpZUeHvR4Ek3meuaXs9PPwC
+o2f/90aO71bNKjh0LHSI0CEuMWbnixmBgOEQY1yv0HvW1OB7otXrTS7EI1m+4k4c
+WlwidtR3XjqqgXTjFz3J/ipT8j15a5HOtoIwP5AHw4e+1cEmCbkCDQRR8MjWEAgA
+mqaIVMeh86G+K7uq7m6m8F9s4WtEkmYAYHdk5FXOXEJ+uOSiUiYLcYSBYRkahk9Z
+o7QSv0bWRmqCFI96Jvo5f0MBLkwR9hxYzrr3vkkJyreMsG7ybyXA0O+ga6ex1091
+bBm0f1vekvT7VGdcTtjWhpDiMBXZgTJDGUEpzz0Z/8MxYEfTsk1P7TNMMAvm4AOw
+vRk/xL8Rc6Gapr5EGMLhKRADwvWU3vYIhRjXApXZUem8tNq58cmR4q6EEsmedDri
+LuufwVBPT98/+sxEPMgPFnSoLPDc7AB7vD9s0Ip+8jG5Rtbc39Phz4GDHmCUwJ01
+Mo8k7Sr+jguGb0fthSfM9wAEDQf+LRyfjdWJ6CW+mGSYFsW1ivKzLujvfiQip3CM
+y68Si8BmUJvN8aPWS58knZY0ikXOai+m7W+4yVMkdNLm8JpJ7SX9NevZCYAb5lOg
+mE7kvHoGFar5oA9ttUIV6RZXbQi0fXtksKse3c5gWqMTmEzTV+7thtQ3V6UmXpIv
+OHKvLJdocHP5T3yDgnKwr1ajw7028XT3wsaiUV+sgjtc+1KMME9/Zhwa1jWSzuZ4
+Pb0kxVIjzebsTr1nMdtQqARg+KKc+R8Gc3NCP9MZ/s59NUFyfCkg3TqazsIXQ1bi
+KMv0GppFbFMnC/ifijqtl9g9phuoF3N6/Cs38zVlRHneyHRAG4hJBBgRAgAJBQJR
+8MjWAhsMAAoJELspFMH6CBHD4SEAniBrVdd83vjrwn/3vXYTuZrmjIO/AKC9Ib56
+Z/+UEC1v8wCMk2365rUPKw==
+=vlw0
-----END PGP PUBLIC KEY BLOCK-----
+pub 5208812E1E4A6DB0
+uid Gradle Inc. <[email protected]>
+uid Gradle Inc. <[email protected]>
-pub 86FDC7E2A11262CB
-sub 59BA7BFEAD3D7F94
+sub 33AEBC1F01C98081
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQENBE2kzuwBCACYV+G9yxNkSjAKSji0B5ipMGM74JAL1Ogtcu+993pLHHYsdXri
-WWXi37x9PLjeHxw63mN26SFyrbMJ4A8erLB03PDjw0DEzAwiu9P2vSvL/RFxGBbk
-cM0BTNXNR1rk8DpIzvXtejp8IHtD1qcDLTlJ8D0W3USebShDPo6NmMxTNuH0u99B
-WHCMAdSa34wsg0ZpffwQmRxeA+ebrf2ydKupGkeZsKjkLlaXNkTVp1ghn5ts/lvg
-KeHv1SJivWKCRmFlbPhBK4+mxSUSOPdoBNAfxA51QzZoPizSk0VbRz3YufYRVLFy
-9vqPSorDmYJhCvn3f6+A38FS/j8VE+8obQ2rABEBAAG5AQ0ETaTO7AEIALN4amR3
-pf/FN8oMFa9eAc44ognamG31ea1lkqIiPssiJLC9J2z9mShkrECbsBj4o+HxeN/3
-rwW2hQFAm8cAbitujASpPs46slp7Ylx6cfmrNqh3tOkg9BW/5izPwjXAuULovMpG
-PVf30eeDpf6huwRqyc9uYQSS6Jn9KCLi9ULxIeQOZi3UPHyMOCbnehR5aQQk70tI
-jbNytmFKC+DXFrhDiBjlRQruATgtuYYKMWUBO65b/SyvLG7zPGmHXmCSfg2qCTQI
-8xKN6wxgQY6x0PN9BeXa1du3497qYGhaHrsxnW/nM6rcQO2hKoOlY/GmicB5oK40
-MMVfji8aN/EYTS0AEQEAAYkBHwQYAQIACQUCTaTO7AIbDAAKCRCG/cfioRJiy8Qw
-B/9UbKogRzDhPYPeBlnchOR6gF69B3EFP/bvE2+hY5nIZLMZiVFtFCuWj65myN8x
-z0w29pKbHLLiAtVtx29Cvc8X/8bGmEn3xbymT2X4znuN/IeecK6afsw7ij1535a6
-KA3mh640noEird9/ajUOysS8MKFg4kQ54W5bG/67sjYAEkl6ns1sHIzaf08Ty+UZ
-TfNQGBZQGyTqNP6SUqcTIcTvpbN6A8vPeO0SVO7IHuNGGPJAm7XKIkQxuzbMfxok
-Y5uLl/wm6bi0gtm4QB2gjQzdzdVGrXZzP+8vL71Vdr+z//wiwafzySPLJio7LxYk
-SOg5cWH752laIzudmSBBw2Lk
-=HHpt
+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
+bMFjyklLBAm1WETBiqR+k5uwXmJ8
+=RGVX
-----END PGP PUBLIC KEY BLOCK-----
+pub 6525FD70CC303655
+uid Stephane Nicoll <[email protected]>
-pub 873A8E86B4372146
-uid Olivier Lamy <[email protected]>
-
-sub 1AFEC329B615D06C
+sub DCF4B49B4D5845D2
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-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
-875QwNruE4Qkt/W0Rhy/QRIZ
-=eBqU
+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
+LwCg0goAeKquoZuBm9KXUWlDeLuHu6Q=
+=WF0r
-----END PGP PUBLIC KEY BLOCK-----
-
-pub 88BB19A33A18445F
-sub FF59C22B07640A16
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBE//SjoBCADao3lh/I96fWIY2ZU49ljtHR4Vnzmifm3URFNuv/c8McWGxxCy
-Y1+oolgVuJcy4hCqcgbkwTiAfBhjZSmsC1QK/2Vs1awFzGccPcgTBakFw/TUav12
-6Zb8y72dH0VxxcN/HUGBUOSgZg9IMe7AmmVnxbJ2ED1I3/opkC6ElPXFOl8EJdgE
-Wvinp4ok3mwBGMIexQDyEN4DviuqvmB4K+gYCjS33HtHh4OrkXkCO5pDNUDgkAZK
-1uG3GfmxGBjdG6nPWgIuDMEL3j1cW9r5D6I5obXsFlg6bX8mBs91jAtmfTNv+IAB
-bwUOAJC+9C3ZEIsZOcBSSdUIXmuRPa51oP9nABEBAAG5AQ0ET/9KOgEIAOokxMbt
-TY2zLvdAWD9xPHj1kZPThN7o52A9Atw0zKjiNFl9jy+IFarPNdbMzwooQWgx5Y3S
-bKdSCSDlP74psEMOttEdw/23wt3oG70I84RveLuTs+dTDRAd5w8jxLXhjm+QxhiE
-+z+peVhfe//u1+kn2vzesXMIRBdQTikjIZ3W5TMgu+RV7Fgf5zUWTEUTns1kmM99
-XPhOVh5BIr1kkty/Fyg/1Wg87leM3WZUoe/7bnWju+YSgjWvxwv8HEBYPKciNG5n
-0oOPoU3jkyEugJafmlhAt3CAgmFbfrJgkncXPvow2xK312iy0xIslAqm0dy2+E9j
-hYLlS3p3J8TLPGkAEQEAAYkBHwQYAQIACQUCT/9KOgIbDAAKCRCIuxmjOhhEX5s3
-B/sFcywEwoA4ylzSSsVctp7pjDczczlD1MnvCNP9ldzzU2oOGAduvF+zzJNL162J
-qMd1TMYnYROoZhIS78He+LriBSjCsweKDqEix12mtuWrAICpF3UcY8WLMB6SXgXP
-qnZS1cw+Prr+NVnuR+0G/cUJieVdKO5rcYuwrs4OGh2rEMRCksAY5FAMe1lSB4mj
-9jIGKW0B31D3/AxNlQuN1aRzGLj72k6d7Q91OrbQ1+yG12CLwSd6mS4kVBFjppUD
-JCKN+HD8NGQ9EtyiVpx2/gmqshFVdwUgAqQ4tKtFI713bi8xz/oNiHkOfclHdgMM
-E1GU2n+gEnCLRpmC3Qqmeb0n
-=2JQQ
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 8D7F1BEC1E2ECAE7
-uid Tatu Saloranta (cowtowncoder) <[email protected]>
-uid Tatu Saloranta <[email protected]>
-
-sub E98008460EB9BB34
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-Jqg9YirnHcrlYF0r
-=gukc
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 8E3F0DE7AE354651
-sub D3047B0BA4452AE1
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFMnpeABCAC+vckg+AqDG5Sg+GKbA5t2knu72aD000Qle1X//SjTvPHz0L1v
-rUNzwrqlmah17usczZHOoOCaGjSUFl3nPmBEOlLBh6L4+e2Av8PSbP0qUneaQVgi
-TQfbNgRB4v4H5dtKIglK1hZwCeqFazuRuFDWLHl/IG4ymcMwy/86y96BJKWrW+Oh
-4vK21DF/BRhyFGaIGwN1aPYRofy3ERsUfwe9WiPXXuYb3gvG++QuiS4V7UJwcAkx
-5TGukoatI4T1PVmZPk2zmeM2pHQRisHAScRt5YJ9bswgBphk1xHoENVQ3BYhzrsu
-a3hFDY5hO+UQiT+eIE38noOuKuSbRalSPelvABEBAAG5AQ0EUyel4AEIAO6MSdr4
-Sp59Gb+J8t5o5g+f4jMJPm2v7BkJzldN1JISoEWeo8iyCOVcM4D83coihMfN5Nwi
-7Tuc4tnZH00+XxYFkHMOLMPtCE7l0Ai8mVhFqE3HraCVnk7gRzNCyXeJRu+Q1TSN
-4QbiIEeonBSoGsAYafkAx1evBJtGmrDv0Y42NdocnACyRPZD0usxMARk2ZwQaqN4
-Ih5pL2MGXqMeo6uEW8iIIumnkMywXyZ0jbAcZSs9Smi3AdU8P/eY/Afpu4nyYVAU
-Sdm79eMjcBHRluvuk7db3mMzQPAepWQSYOgsbWq2BS/0rMq65M+uWo9MNpP1ZH2w
-G87qh+7nFIk38h8AEQEAAYkBJQQYAQIADwUCUyel4AIbDAUJEswDAAAKCRCOPw3n
-rjVGUXwWB/0Yq3UknzRomC9wi8sCh9Nv4erqjSP/JSoNx+rYNpwJX74jVmUA4u7p
-pzywCwSFKyE2L6pkgKw0y+KfE4cWsotlfO7E6VQQi/+cCb5OCxqf+gOelupuW4Co
-MSHKkPWXI/dhM1NMIW77+bLiiHfaOW3Wa9kBSKujiuFSp9tIq2gjTf/2rKQMbywK
-szhlBICdvYzji8t79C7tAJ0xNgZJJv0QHP+5MZJfMAARKrvtRP0I5OB1HYVJrH0v
-RbO9Y8PoYrPxeR5zQYxAyt36/DE+PM4CpEcCZ2D7Xrtk/GKe3Y/jU8FBifEebuhE
-HdZk2xusuOEx27cIovRPHwvLcgY+4u3j
-=oNWb
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 912D2C0ECCDA55C0
+pub 1669C4BB543E0445
uid Emily Johnston <[email protected]>
-sub 37AE8263DA3084E5
+sub 5F6BA89D4B0869B9
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-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
-=X7Ws
+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
+=wp39
-----END PGP PUBLIC KEY BLOCK-----
-
-pub 94B291AEF984A085
-uid ReactiveX Admin <[email protected]>
-
-sub 9D149DAC4AC24632
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFPzzfABCADK/wEIRhUCUTj00TcBOxGTPs5ad8jn5D01P7P5ILpLOgmnUp1I
-E3EYy54PQYjDIeOFvEmEywvwMRV8yCVhhYGpOPqbegKwcebXoiMGhJjuRf2nPbdZ
-PSB+S3/WAsdydiPiz/2Xl6hhlaKIQSnSOgYPOQjbDjgfU7B0vYGPohYR50fbOd9D
-QLvwsYxQv7CCdMM1M+tx4HevvYOKrceAwTe6yRx9PEhmuXYRCes/AKOs7yODvNm5
-SFFlZzBrYMxh6LSmCAGfYrSGWJliJUuFMQ9U0R304nmVUo3rrCj3tD25Kdr7wj+z
-WjtJVBdWVFTq2/Zh0QnF7mbIOs4bYxLlKe+HABEBAAG0MVJlYWN0aXZlWCBBZG1p
-biA8cmVhY3RpdmV4LWFkbWluQGdvb2dsZWdyb3VwLmNvbT6JAT0EEwEKACcFAlPz
-zfACGwMFCQeGH4AFCwkIBwMFFQoJCAsFFgIDAQACHgECF4AACgkQlLKRrvmEoIWN
-gQf9ElK2o7JBUbQ/QgpPbaKlP7+Lgc78g2I20Insd51G7C6SFmnMj+Ae/EariCV5
-R8JObne8kfY2EpmME8ISUqPrFSw0hhR0q7E7jhZgHrY4s0w7R1mujjWYJQ5cSi0q
-2sQP1GDMIk6paJBFORedqQ25B0paWGGATyMLRu2ljz5tog3DVaE/yvaQWAgiH77i
-It24fY9waInC7F+ruYSiL9YwGaDi5VwV8mlVeNZ+yobjXllzsh29UW24UXjWJoEz
-1MH2IXC+v247wnr5s0x4GiBaYFIS7sg2WdPMImAY9tGwfKQRNs2kBAT4G2Y9cDx7
-Oe6eZTFP+VYBhioN+5GzDPMwwbkBDQRT883wAQgAqj9m/clM4PMTIRwRkDbrfFSA
-TZznMxgUe+jOGRbZgemEd0Lpa2Dgrhq1hd8jOQgm+suCKjhJi15oKHMYHRx435cE
-8gvdW/C8R+T8Iwd+Ce5IuaRKBisgcIpCcSBbaDgYqGsjhOT8W5N/Tgqobera2Wvm
-wDGnadIN82RQkvH9Sypj2eFyLuFUk1xIKCS25a62EYr1Pb2/mNwHvgEjkswWeoWR
-a8A6xQevvrcercj/a4dYB8m/RQQhdapo4J3gh/BQxJIHAvjVxxWyLfyOIdnV2tkG
-Cysl154R0ymVHIT/fXILnkUPJNeAQzITMIjbV6GAUklVr1sjtcDqXPHAl49DBQAR
-AQABiQElBBgBCgAPBQJT883wAhsMBQkHhh+AAAoJEJSyka75hKCFz30H/A4I9FC5
-kU5ipCv4iqc77egCekoG8hhm0DtVdWrKOgJwbayIRsyCB+hISnZpt69QyZi5iA2k
-rIPZx0Sq1Nrlw2lPlv87CbreDy57vdtMdFEFQHW0zRbFN+XKZ0noFQGYxG/1LyPR
-4AOg+ykBEX09gnWYHwUO6x7Q73OQs88y5JOurF6A4iQmH7na9Qz2A0YPWNKQ+tmF
-MEciypk7/YABFZrg+9Edz/TWyN81EERhJPDkxzHkYLm8fLpOhnQPOyDxuzt7fh7y
-hy/+b3B9QT4Cv1yH73DYIfJW3jtuQDdmvtTk6G7BdEzAWufGVt6EiY10pr4zyfpd
-eaSSyYoO8iMWJxQ=
-=e7Sd
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 95C15058A5EDA4F1
-uid Eric Anderson (Maven Central) <[email protected]>
-
-sub F57552EA2A2B5F3F
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFUITeIBCADHIijQBuGmC+Oo/XE5qIXxzZ2cK26uD0tlDqaPhRLWt5RP3EbU
-b6X8ZLE2AlmawFzU0IqndrCDxSyuo9+ZFQRYT+stf+qHFjtvVQJh2+4L2LpcPrnf
-RK9QmmlDpKsTeS6ED32kYLDj7vwqrU+sdJcMxPViQ4TBq2AH+/pXoPJ9VBW0hg5Q
-WNehQ5yKireszStwEceRvNAnPffVJ3QVbOqFWQuxMboxZZnEmbpCot6hSCDTM+Kq
-3cyJkZTLm5ew9jHQGRmQB4sM8krQomokooSqUCb6YjPf5CmN5a4sB2z/YJMGbINr
-GOv48A9k+GDXliESyGyFUdrbZH+SCjU/LklfABEBAAG0MEVyaWMgQW5kZXJzb24g
-KE1hdmVuIENlbnRyYWwpIDxlam9uYUBnb29nbGUuY29tPokBOQQTAQIAIwIbAwcL
-CQgHAwIBBhUIAgkKCwQWAgMBAh4BAheABQJVCFAvAAoJEJXBUFil7aTxpLUH/2tF
-HofV14ZdDcrx0JRqVy6RUv6juLCzwdmaymOW/ZPYgVBs0tByQ5O1bZ5JprEuQCAk
-HKQj0SgI+1INuFsGDxJLXMwk9wbZGMUY3dcdXE9xAVTtxkFOExtEjTkjxP8TwCYt
-3AerZ3Qa/bdLfxIc1Ikeo5TC2rLcm0VJUh+5l7JKPxADpopQx5ATUdLgZEuEBRlg
-nWNm3Hrae6ovjKrXBomrdbAFcsWJNKPkhfszfh/8ajzXWLvYLAdGHaOLGtN5qHuY
-OMt/KNSWF3h6kC0a189292tTSHQy2lwKFVlbR/QW0VJF5K5cIv59dauGkGssiDj5
-Gq1o3bAfUdrVPBrtwba5AQ0EVQhN4gEIAMVQVNg6Kqg1pZNcafvm8CEwJonaIkmH
-82UmxslxuOP23O7so34CPYPOMgHW6werXSnjmGyk4X1LWOeexjbI1Ve7oG/zixy4
-GTtYST14BeGelAGYELc4CtoWlJ6SodIj/4pyuZdyrVjgWlWKvDS0wL0Mv0tRfP3h
-6bPkE1T4dsCVr3O3//qDWBFrPKClWIj8gPiQZBOZLWMwja6ML1r1KB/zW89mGs/Z
-NQqLjnXdSnS7Db4Mzn5C0JFrhbIhi1PICLYx2a4eW+ZQWArbKQYRg+aSRGZEUFyY
-lowM/FC1t8cPix7JnND7fWY+0+vDyB+dpPQ75VH5rHCpYEUIZzPUIqsAEQEAAYkB
-HwQYAQIACQUCVQhN4gIbDAAKCRCVwVBYpe2k8aYwB/9shrf3hLJEnLY9x7Py5wHD
-bKRw53ep/TXe5qHcH1iSClMEInREVE4ju8IHjOM0UsPKxTT/XDZ/rDXjp8eJYx6+
-ftJfk3Us8LnxQVcZGOwC4tO/sBpy+Z0pIpK4kyPzZjy7XjEDPauC73A1BrtIKM87
-NvazV6bbzMc57RAiwzigVGwSkqrur8O4H+seJ6YtM+rVXl0D7q5ZahXPQcZdCsAT
-6UYQxR4vx28L8k40ZTAx/gaT4SRV2vuNm14iujAgM7RfXM7l4LXt0HCaZYqitg3j
-qFEgtbX3f75Uz7wHmq1mY8CNjlnd2TV/NtdSzBeGxfsCXMEAOwWJ9rIWBuuAY22l
-=YwAJ
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 96FB9DB219F3338D
-sub 684EB33FB007E676
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-Qke8BUYtUZHb+6jndURiNwQ3u9E=
-=NSh+
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 96FB9DB219F3338D
-uid Trustin Heuiseung Lee <[email protected]>
-uid Trustin Heuiseung Lee <[email protected]>
-uid Trustin Heuiseung Lee <[email protected]>
-uid Trustin Heuiseung Lee <[email protected]>
-uid Trustin Heuiseung Lee <[email protected]>
-uid Trustin Heuiseung Lee <[email protected]>
-
-sub 684EB33FB007E676
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQSuBEwVyy4RDAC9hprQuF4fCPCYdtMlb0Mfb+6G2TqerT1MebLm8/KHCRnPbFLg
-PwGgcyynLX5R2nXUb6oBZQByDN/Dal0UMuC19KeZX83LTcFE9vr516BMXLXXKmM9
-Hz5kygsu1iwP4oqow8U+ih16rxdYDmM3KUGhPqXYExpYH777NxaxxCyPJn7Mz/Lg
-QdPkO0awyl86sex6THr0fYJqR11XW2BkbK6Pfs5ubfxrMZxy1JujUw0UmzzEkQqU
-1+lncxecrevglH1R2WdIHx2sjkHQtwqT2rcsk9gJ8ISL4gKJ7LEYfLooKRwro54x
-WVi8Eu/XZ7OHfQfgF4+JDofIrd7zN0/Dia0qKpkZWJTrYhxj6ouvYqMPr7+XEBub
-eHFU6S7Zzo62zkm4dv6bAhvT/M1WWKih+dOvYJ6+qhBt9RsHJdUePAVYLOjTcvl1
-Dn7YKRczBpeiGQTGaquSkWh3HPCw9Eom5wPs/J1L5eeLdKoqyGUQvdGMJxuFLpSM
-BVN7Q1Voom8XBt8BALG8oGuCkFZUN6ukJQn1SWXGeBr4IUbFU9gnfZUVeLMpDACS
-erCIYBhSRHK2XaHWxPppw0yMm9e/eO6WWpVBZLd/cbxtxwJUandSfOhKn5bGRsGs
-phhWXjmT4w5DF3cngfe9aMSAV6xTwfnzJ5nSBwejU/UYCiKTnGVqVkMV1N546ZoO
-XCEJLRK8GeHzBXf4bvPW+4DVhfx/LBz3h8VJ0vy/cjkEqVWPCvb05WqZ7bhnk/kc
-N5F9NzHzCnze3fMfOtUnLgPCaAwWN3S9fJpKumhwAXdkp7qZv6CuvKsXsETmAPYe
-j9GYWiUpbL4bm4C+QEC18F9VkDs5BA3PhukNWutFcYJuRoJ6gYyUaA1PSqvcTaE4
-RM7Jjn3/fbMC+PQTNOYdixN5u+ASAsgjEDDaQJYj0Nzm8hy4uDbFH8TIqU/RLs6w
-pK8oLonItiu2UQWPnExvIN+iYGCfeMWDT8Lcx9cDxpshVZTEyjImPMlQBD3dE9Ov
-Fhh1nVjAZhyVvPbfshtBC+FphC4///lHumxAVJqu5oWdVj0cTlEqEAlOMNHBzJwM
-AIwXYkRklTogkJUCSZb8g1FB+fn6DJCu7CB4Fjd596IJn46fkCZKyxQ+L16KNl6Q
-g+oEhzsGWrpiHcBDZk7Oo5II4Ajjs2IiNhEkbUKbKn1aF3fdnpByOR07Qs0fKYCD
-xuUIgoW9aLtkJiXnQv9ddgpOvNpiqyBVs9dw4c9wWJon6q87dSRv3ZnvR+x64A0I
-82gtiE/gWnv9T7n1ri/P8J0/wMN9G4mL0bs7wTSSyd/rM2dDruYysYQ+CtMD8oIl
-VhV53qEB+5/IGb24OVileRPCVW7jGSdfWLbrV93C7GOh7gLsm+M7sZYqDTLgGkq/
-JNZSiVocTCxnZbi788kT+S6LsDdjYzGwqTqrdH/kOFToxMaen2mG37vB6BjA80t5
-lg79qALXIOKWPDI3UJ9LMavq8MXILghSbgJD78QwmPEROZh+ywN11cDw6yc1HSFw
-NrSZZuKPnj01amo5/Z2N9VMw/DWCYVA0HkPGnnxLsyboIA4tE2JR/QdNuy0CGrmn
-8LQyVHJ1c3RpbiBIZXVpc2V1bmcgTGVlIDx0cnVzdGluLmxlZUBkYXRhYnJpY2tz
-LmNvbT6IkAQTEQgAOBYhBIhY1FvpsnaAIxgVW5b7nbIZ8zONBQJgXoAqAhsDBQsJ
-CAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEJb7nbIZ8zON6NwA/1oYHd9ChpQGGO/D
-lKwqijmomSpy5eEz/U8iJeq1eF8JAP9nOLHArkcDUvLqXxwPyY3SD2GE19khrbRD
-w25IWil3qLQsVHJ1c3RpbiBIZXVpc2V1bmcgTGVlIDx0cnVzdGluQGxpbmVjb3Jw
-LmNvbT6IkAQTEQgAOBYhBIhY1FvpsnaAIxgVW5b7nbIZ8zONBQJan8rAAhsDBQsJ
-CAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEJb7nbIZ8zONyTkA/3PTaqRvtsm6iKSU
-FD2qe6805NtersLkzPJkChAHCp7SAP0VOOoX8tDOc7f4kkBDTnSwIYdLexqaWuwg
-7HUowhiSLrQhVHJ1c3RpbiBIZXVpc2V1bmcgTGVlIDx0QG1vdGQua3I+iJAEExEI
-ADgWIQSIWNRb6bJ2gCMYFVuW+52yGfMzjQUCWp/KjwIbAwULCQgHAgYVCgkICwIE
-FgIDAQIeAQIXgAAKCRCW+52yGfMzjUO7AP9nd0SjT5u7bVzZ7WIDNhKc3ux2nOv/
-ixSKtENArECA0wD8C9b7o0lW0bODrhoPWyi2GLhcy3M5LD5sDTZ9LmTugc60J1Ry
-dXN0aW4gSGV1aXNldW5nIExlZSA8dGxlZUByZWRoYXQuY29tPoh6BBMRCAAiBQJM
-FcvwAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRCW+52yGfMzjURTAP41
-zJKS3mNA0J2q0n/pAkqMd7EZ4SDGp/BG0lyKZvZyEAD/RZmkvpGWHemaNTRpuhed
-rHv7M0LnjMftrIVSpoyDynq0LlRydXN0aW4gSGV1aXNldW5nIExlZSA8dHJ1c3Rp
-bkBnbGVhbXlub2RlLm5ldD6IegQTEQgAIgUCTBXLywIbAwYLCQgHAwIGFQgCCQoL
-BBYCAwECHgECF4AACgkQlvudshnzM42ERwD6A6ge7K7+/QokKj/wFdTzgxOfocpV
-ttSqLxEsmhG04WoA/Rga2VZAQ6gHxgcCIx4Ot5XJJ1S/U6duv+jlYf1OT9HjtClU
-cnVzdGluIEhldWlzZXVuZyBMZWUgPHRydXN0aW5AZ21haWwuY29tPoh6BBMRCAAi
-BQJMFcsuAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRCW+52yGfMzjU1P
-AQCAhboUjDQx18iRbYdtpgeMZa2GP0Go25Ms/TsyKOx/dwD/YmAwU8c6cO1qf1vM
-UgqdOMpCjxTo+qUcbU8nIwrisJ65Aw0ETBXLLhAMAP43xB9VDluJa3m0EBTwOswy
-MgHbCJL6iK/MwvBGrTbwdu93jdhNBfjSUsEExMV3YsyIK/0oBDf1s33o6y51OZFP
-UC/NrUmx+QycHcSL8D75+D4M7324T6q3dqNpg0+jFTDixHi3FmNpj8NY+7iIS+Wr
-Q1qkBCfBbKkGrUe6lxgXksenvRoDQFrBndxlZ4JLKNdmY8UL8hhFDVO2ekD50iKL
-cXGTgRaFN3NlU2BLunC+ja0iGCnTVclvAznhmtw4QL7S9aqQIo00LhZlxfZyEQi4
-ljpSrB6aX1eu6VFCrsdldA3vJ31sCPhykrJhoEph6A92a0ewW94+Eun+m7YSVoU5
-noZj5IQlQ1YZ9acQN+7blEAqUBoresm6XJMo/ago2VooTt3bUQlKyoNJhZKfQBwX
-rQr60oskczUkVTMxy2KBTKqMV4BGWEdrkPrrs1wFXUXq8adNUHJ30X3y00Iy58VU
-aRZqLx/J9n+40LsERil+9YoajUMaxa9Xnl1eATq0kwADBQwAkJG2ODt7UZPzcPms
-4eE3az26d+jSPDqNnxgZPYxeW2pidwpva7homwLdIbMT6D52WU/DC+N9LNtuo/2h
-35hnHJ7fasEhXax+ArUzWBkdi61PxP31vM78fV5h7xxFJ2JPv4t6Wmqt2i+d9GCQ
-911lHGwtwV/iAVk4FY3i4f+bs0dkJs+yNhUWsVRzSd87cfvxij2jB7qtIB5aPWdc
-qRsZtSd5T51NtGmGtIrhVr988svcecOrdATU9qBBDTPDW5AacFIWu537nultWrot
-x6S7Wwm7mU8KnOP14b7BVB4rMiQJclSYjduBe+aWHNSxOJeZmAq0JBLdgIt+nerQ
-FeMr57q0q0qqooPIVvrVlxFxzXHZGISIt/JsrOUPJFkI95T7+2huRzNUHFmfHE3A
-eHrcLTsKRMe5nx4OYw/FDgk+qgFfUtUpu6RqH28WTlGtPW/6cZIkCyzc2wtAlpkp
-iiUdIA933CtSpEQ/KiDOj+gKsdtaZb9tiBkhke+OSd7JtoThiGEEGBEIAAkFAkwV
-yy4CGwwACgkQlvudshnzM41tWAD/Qq8DwaDw114pXn00eXN7Qck0v5F2xGpW5ktW
-CO7Aci0A/1mTmMrlJszx6YZuTkJHvAVGLVGR2/uo53VEYjcEN7vR
-=PCTs
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 971B04F56669B805
-sub D3664677F6280E44
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBEzZjwMBCAC0ecfE/qkdgq8uJv1c1ZlzegeWH/lxW0W3SWK2RwaHx7LrfpiN
-WhxLkXbK6fkf86FN4579W1+9Qef2yjZCwTfLe6bqj3zZGQWSu7HPw1mmhf9lbhJ9
-+TlxlczRt7m20fpSakGLIs1Jp7L4WJq3N5Ti6IsDFNOZdzGCpuiezzvp08PAD/f+
-eYABnWskOOarCOUrRJ5hV4FFj+9w+OPL25iaaEvHaAuqxvmahHzIPaT5v5Kr9Qiu
-zx0jdNaoq4/wJOGQ8rfMnXSjmuoMNgzTEs/H9ElNdBRfH50xYG6MACnVrZ1kGiCy
-z8BYBZzNUen+I0ek9SlMQDvGr0vRe4AeqlutABEBAAG5AQ0ETNmPAwEIALb8q/SE
-92Bg1UamGopUJ7lbqyebdVx0Fjf8T9MkEnteY0kvpEvluDaUWty393w4QRFPFCen
-Qtn5iyIiE0x+/xF5WlfP9kBMS03n6eXTs1pxgQ0YZ73qvzyZdOzg71isigrduA4r
-yXpoiTlWCfeStapimSUUgXxtsxFLeRVm14j0Xht1cvFCKpdxVZ9+vXIQZlyP2QqU
-zN46bwWwK2lNkKehkdSUPgUdEli/jw3L8rdASs6d8RqO/aiQN0R2kc9EA9kaRaQc
-mBboLsuZwoOCbyxPTpIZ7836b/KRuCM0sBy+RVNem1kv+905yWWJF32lZij/M01c
-OUnlnw6TVDJW5hMAEQEAAYkBHwQYAQIACQUCTNmPAwIbDAAKCRCXGwT1Zmm4Bac3
-B/4umKNZuUFKwTD+FTu6kRUOO2Rnsmk6WBuPm8h3ov2g6lW+2NjeeBib3fl+ehQ3
-IeRebLaxa0ZNAiajxbiMW5LNVC0hvqlsVAxP2Rv+DVoznI6L4I8vNEfa8ysbMY4T
-musAds4kbni7oHTUGA5bzvFgQ0ifDaFxFRvbn9ycDYFfatwDEbs3xgjewy1611zQ
-ef74Si6NR86Xit6v+056srmhZyV53e+pxGAVMw/qR6ROiMNrgLl7CPhtTwSYmSZE
-zQseNBFZpHUb7IGzk4B3ulwlhTcLnb7SUo5DhrBz5Et7XcQ/2mQOH1SrSEmoeyoq
-UfbLkuGneZv5H0KIMZ/5pV4H
-=3VLr
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 98FE03A974CE0A0B
-uid Kotlin Release Key <[email protected]>
-
-sub CC3328A2F49A80C8
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFhlXQUBCACoN2nTeSRVZnGoktKHyiCgeYQ/hEKKKDDAbWubnnQwonCTILaN
-Qw3GmIT6plmi9iy4rl+rJprSzDeQDZngQCx1KPYcXCrrc0pnjERDaogw9fC3c3z2
-B6+90qT6UJSTNmxMs5zbhgzKDWb3eaDmVDqVqzsM5xz9GxX6zo83o37fTFSbVbtA
-9+c100+KaAldVL/6uLeGoQsAIxtMH8GiOPiSjrw+XCQ5mbP6e+oYYBKxEyAgu1XW
-8jP4bF0rz2+1lkIGfWfYHZmMbmSutDxXqOXA9cZomhOayOSe+iczoxXkVXkQzMxq
-bG4ru5CHxPh+RSfpwA+9StLvzLeoFrBUlqW3ABEBAAG0KktvdGxpbiBSZWxlYXNl
-IEtleSA8c3VwcG9ydEBqZXRicmFpbnMuY29tPokBOQQTAQgAIwUCWGVdBQIbAwcL
-CQgHAwIBBhUIAgkKCwQWAgMBAh4BAheAAAoJEJj+A6l0zgoLPTgH/AkH+uBwgQhS
-xIfYNA/pEt+ni0eGtjClsFtFF89jjQQAAOMsflebvBmGB/ptpfAEp2QYqRiGX8Mz
-3cRYwa8JcwEVWbN8BrXSgtS3P5zlzBJNPSJJFqpXENxs0VOLZUd63ZbDgQ3h1DDt
-lP7VwsIlF/ogq/wql6gC4qdP9c/kA57eqvZeMrflSUCIUlN2XkeMZhGugWd/Juee
-kz8qMRXY/kEKGbojJkmrehLKOsFz/L8vOW9TLskFuYBIb9PHf2hqLFOOQ3z4o/NN
-fgrOGQVZxM4LWIsUMkO1hRiIdk6R0jLEdFJIOS0z7mGqKzODWNOVegPNhjUX1E7E
-viyo727zBJu5AQ0EWGVdBQEIAKNt/VhkI5bXMxoM2XYMh9MPz67sAaqc9Eixan/O
-ONftycStOVHB0YhfQ9lsNeLIb6qQvvesktI1exv18wxSpN+AEwroMGDSDfixhpga
-eOGzj8omXOTBZ7Bv73A+4dCVeoQ1F/ss4OkRK7Jx5jLM7TuY7IG64XSYy6D6QvMO
-oIxKdqB81f6JYDzVwszFvUUbDqVQIfhXcuCLAbYxtJVVzAldGBWR/72Uq8nE3ere
-eeZjHniADawU+XR2Egv1aMDvP8zUpWl2mRzOKA+1SJyXhA569435s604PfxPdESl
-KnMYlinWZNvL5rrRV15vYYU2u59ol/g27DOFy33UCrCgZ4EAEQEAAYkBHwQYAQgA
-CQUCWGVdBQIbDAAKCRCY/gOpdM4KC2NwCACTClhcW6GbsRaRHzSdnXDPUNlWf0UD
-Pz0amNp8mQwsygL+jW0awtrfxxSqbv+1myMQB7g6tLFGcTH+jqfkDsN2rpQ2/cnr
-UVmunMjkCnoSyhrqolSv9ow0L7K+FERmxq5QGorE/Gya87oK38ovXZmGUs79OGSt
-AeEnXXkta+dDlX3nyTGM52HEaabPJRv/eMoryZPgv86ahajMUxbc9LdjkdVnwj+x
-a5Ux6ZVuPGHeodq+MWTZuKM//qT9uXbOsgiKWJ1E3YPy4Ip7kc4ne950WGndzu/O
-3aBldqsxUstQ0abZXtAVj1j2Io/Jgvt9btE9i0ssfGT8HCatMFwsfi98
-=2z1p
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 995EFBF4A3D20BEB
-uid Ktlint (ktlint signing key) <[email protected]>
-
-sub B89991D171A02F5C
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-RUjO/QWG6CIej/nl7O0g91NtlEY=
-=Ixqm
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub 9987B20C8F6A3064
-uid mkruskal <[email protected]>
-
-sub 80CFA7C482552DC3
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-vyMjyB4YL48bYbjwFEar/jLCQJj/Dg==
-=Mtq5
------END PGP PUBLIC KEY BLOCK-----
-
-
pub 99CE9D9F22DC5C99
uid Benjamin Gehrels (used for *@gehrels.info) <[email protected]>
uid Benjamin Gehrels <[email protected]>
@@ -7288,49 +2292,2417 @@
=gZhQ
-----END PGP PUBLIC KEY BLOCK-----
-
-pub 9A259C7EE636C5ED
-sub D66472CF54179CC4
+pub 1B2718089CE964B8
+sub A182F48D9C2C0825
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-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
-DG71mmILRI1wVgrDp5mFKeV/d20uMvMq
-=IIN3
+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
+yEpqZGNE2g==
+=OLRp
-----END PGP PUBLIC KEY BLOCK-----
+pub 012579464D01C06A
+sub CB6D56B72FDDF8AA
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFgnlA8BCACVtx3oLXcanfvwtMRwal6pLQ8IVMG9+fr4xGdbSHXCRNbosDa5
+agU7WeQMPhusSxJGaA3w7NOdjAwD/LeHADhDPeI6llJg1Fb3EyqH0NZaODKU/Or/
+dID/i1onAX1dE914J4lf3XvIAxGiAjmr3UvWO9RiFxRUkecMAMlCBp2FuHuvxkcn
+Mk8q9dP9Ef360wu8X5rj0kgP6vPhgl9/RhuPsUxlazb2Kn9Zxi/RmDKDiH/vDuwy
+WdRGFOR1OPV7l3Ws01nrs4vKd2v5rsUmsjvQ8ldxdrA1xzX4IszHRDgSC9PI8ItZ
+1VlbaKjE0L03acPfFTg/wRFSF5zsrGNbTmq1ABEBAAG5AQ0EWCeUDwEIAMGWqQT5
+ccT/Q1OypoOQGEZn+oRkgEdnzt8mjo7aOXd6pkNTkt3+LCkmb8Pp3/a3iYEfvSvB
+Zbb2JbY9xnmM8jBucWnow1iwEPxGhUuu3jlIpRsCwLk+utLkMALRkooXqanDoVRW
+xuVeFYN0as8nndgWiJT30innN4vfaR3x3E6/nS57zp5IggxZYsXTRHb25kaof9lg
+lHyXeypW7quKOP4SeES70PVVUnYZBlLpnX8a2msRtJiouWxCv/kHnYsjW62vc7nq
+vWAsSsfBT61TVx7yI9CckVFBnkpG1I8C9WpfcR+j9yauptgUMfrfDTFg3Aip7czM
+SoL4Jpu7jBcXy9UAEQEAAYkBHwQYAQoACQUCWCeUDwIbDAAKCRABJXlGTQHAapGT
+B/oCoCsuJ7617gpcuEAXxWTBfcXKo4z8ObBek2RUh0AY9aXjRYSzwwbtVFRC01Es
+r7R9b5ScY7W1TDQBKL0OSRZ3jwy7/hA7k8P7xAp3mC4+FdHaHMH8nGz2IbUjGWl3
+Yp01NRn4jc8gcnHnqcUff7PXsRMUtJ3dnbsIYOrBAbWKld07RVEQUyafgUfdF9cx
+e6P/slSZxATJrlIPveB5bgcVDMMw1UQNqJL9LWP2IM7xcljOBHY7jqwqnQ4pRER9
+2VzhLdtsdwF0H1SuERpDxBAuibchMoCfQ3HER+K2mTUoJ04xog7MQs2aaMwSbem1
+LMvNBZ/mfF7QMYfMV2n7rbIk
+=PoPV
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 0315BFB7970A144F
+uid EE4J Automated Build <[email protected]>
+
+sub 7CD1B9BD808646B7
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+ov8fTyW5CUsFo9wQlCvfBosOf7XRtyG9cg==
+=qap1
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 2BE5D98F751F4136
+sub C7FDDD147FA73F44
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBEwMV84BCAD0u42clJ3hghKlMGwFA8PPlPgSEZjyvs2dRCF+dKWBaPUnR88K
+kGfWB66jX6PBtHzeiVRa078lL002S1lSth2A+s1UfYGS5wVbE938wO6PCMwgoXJ6
+0MCLsTLP54MDlly4tq5qV0Zme1wH+9n/AC0fbKkLsEWbqXhNJLJ7F8TUh6hPziko
+mLAZCb297KeEDJ3tFN2zkzjx7V79/nkA1sKHQC9INdj5jXxkglTwZhcJgPbxYzCz
+nbGeczPxwzNrN/elx0DDnKEpEms/nURfXETsnd7t2xuUuAYhpGIadZOM+LojhP/A
+Wp0KDHsiSc5tQ0oJE//ydBksCEKid0Tu2bXPABEBAAG5AQ0ETAxXzgEIANGJ24GM
+VmW0QcuT6ykJXtjrgXW4HjOEyylQ6LQJZcCt42tNA95ZhAAiNgB0CBBUuOne7y7H
+5IW0wxnrO8qOStqvjbkUWVheqA3G0AlokZVWQRk1LjmBlABJVeHNBle0248pwrXe
+0lY3NVVywxPE1ol9DOasldSv+nKyMcRFgkZ7rPFnVaLRLoozuAIDwXXaRPczN3pg
+iegwo9BLqYV5+0Ncs24+G0hO6iTToX4166GvjWa0e0YHuJ/zztXPy9CAJ6FMJy4Q
+2ZpyfmIPua653srMDty1igFdR3TVNd7xIvyhw+laJY9GxWM0G86JOCpZhrTWDDZi
+BhgL+sF1iNPcC8kAEQEAAYkBHwQYAQIACQUCTAxXzgIbDAAKCRAr5dmPdR9BNoGn
+CADj7y3qDzkFxiHbfX6RlWJfaJ7wvz2r5D7WOiiyWL2y++zMVPVEhpPSw26b8Car
+4CjRxoG9TqR8GTO8yLlgQ1mPWovaxcmfNzJ1GBQGKD564fKCJLwVMaMgMz8jEANd
+FQNA5Ka25MdixHIYafKgY4TDATQYAHSs4MXW3Y1B+54LCJcL218vdWPxQ7k8AYLQ
+Suei1+1yA4p+tpjxhr+HUuFv8tA2HUk8RcoyRfUH9fqAEuR/u+xWm4kmE4qMIgio
+665T8WuTGYLkUDJEh7F8+L+r+f0nmCxfPhIWenVOrjpyzyjPlNfaweqk2dvHG4wZ
+ulntJIX+jkiE3IPFPSOU3gs7
+=s65m
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 3D12CA2AC19F3181
+uid Tatu Saloranta (cowtowncoder) <[email protected]>
+
+sub 575D6C921D84AC76
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=hALf
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 280D66A55F5316C5
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFOOGVgBCACiDwUZOc6943aBGUrxikkfUnsyZfHtF9jihYmA1pSgfsye+JxR
+oG9QWW9+3qx4L/d4ZEqBftTWpsjyrY7NyMaeXtJEjE0vhiWNehgXB1z4XTJ66zCX
+nhlMvixGLQtfZANqCxOmtUGoSXw+oRFY/SExAioSS19HlSxApSaUzc0prdujqp9k
+vOKKIBWTBIUELdDTA4+enfzkAnIINUX9LcMTmO+Fh0AvfjDbq4fr8rBglyVUSCqt
+TOT4oGZlbpsq9TOKrTXh5go0rm5KJcbgKvX78ZErK6pcpTgNA+XFXCz1rQ9nkIQt
+HxWaEMJtpSkIvHIBz9qoAroGtNFzz2oF4ElRABEBAAE=
+=1QGy
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 164BD2247B936711
+uid Marc Philipp (JUnit Development, 2014) <[email protected]>
+
+sub EFE8086F9E93774E
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+Qw==
+=iceo
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 98FE03A974CE0A0B
+uid Kotlin Release Key <[email protected]>
+
+sub CC3328A2F49A80C8
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFhlXQUBCACoN2nTeSRVZnGoktKHyiCgeYQ/hEKKKDDAbWubnnQwonCTILaN
+Qw3GmIT6plmi9iy4rl+rJprSzDeQDZngQCx1KPYcXCrrc0pnjERDaogw9fC3c3z2
+B6+90qT6UJSTNmxMs5zbhgzKDWb3eaDmVDqVqzsM5xz9GxX6zo83o37fTFSbVbtA
+9+c100+KaAldVL/6uLeGoQsAIxtMH8GiOPiSjrw+XCQ5mbP6e+oYYBKxEyAgu1XW
+8jP4bF0rz2+1lkIGfWfYHZmMbmSutDxXqOXA9cZomhOayOSe+iczoxXkVXkQzMxq
+bG4ru5CHxPh+RSfpwA+9StLvzLeoFrBUlqW3ABEBAAG0KktvdGxpbiBSZWxlYXNl
+IEtleSA8c3VwcG9ydEBqZXRicmFpbnMuY29tPokBOQQTAQgAIwUCWGVdBQIbAwcL
+CQgHAwIBBhUIAgkKCwQWAgMBAh4BAheAAAoJEJj+A6l0zgoLPTgH/AkH+uBwgQhS
+xIfYNA/pEt+ni0eGtjClsFtFF89jjQQAAOMsflebvBmGB/ptpfAEp2QYqRiGX8Mz
+3cRYwa8JcwEVWbN8BrXSgtS3P5zlzBJNPSJJFqpXENxs0VOLZUd63ZbDgQ3h1DDt
+lP7VwsIlF/ogq/wql6gC4qdP9c/kA57eqvZeMrflSUCIUlN2XkeMZhGugWd/Juee
+kz8qMRXY/kEKGbojJkmrehLKOsFz/L8vOW9TLskFuYBIb9PHf2hqLFOOQ3z4o/NN
+fgrOGQVZxM4LWIsUMkO1hRiIdk6R0jLEdFJIOS0z7mGqKzODWNOVegPNhjUX1E7E
+viyo727zBJu5AQ0EWGVdBQEIAKNt/VhkI5bXMxoM2XYMh9MPz67sAaqc9Eixan/O
+ONftycStOVHB0YhfQ9lsNeLIb6qQvvesktI1exv18wxSpN+AEwroMGDSDfixhpga
+eOGzj8omXOTBZ7Bv73A+4dCVeoQ1F/ss4OkRK7Jx5jLM7TuY7IG64XSYy6D6QvMO
+oIxKdqB81f6JYDzVwszFvUUbDqVQIfhXcuCLAbYxtJVVzAldGBWR/72Uq8nE3ere
+eeZjHniADawU+XR2Egv1aMDvP8zUpWl2mRzOKA+1SJyXhA569435s604PfxPdESl
+KnMYlinWZNvL5rrRV15vYYU2u59ol/g27DOFy33UCrCgZ4EAEQEAAYkBHwQYAQgA
+CQUCWGVdBQIbDAAKCRCY/gOpdM4KC2NwCACTClhcW6GbsRaRHzSdnXDPUNlWf0UD
+Pz0amNp8mQwsygL+jW0awtrfxxSqbv+1myMQB7g6tLFGcTH+jqfkDsN2rpQ2/cnr
+UVmunMjkCnoSyhrqolSv9ow0L7K+FERmxq5QGorE/Gya87oK38ovXZmGUs79OGSt
+AeEnXXkta+dDlX3nyTGM52HEaabPJRv/eMoryZPgv86ahajMUxbc9LdjkdVnwj+x
+a5Ux6ZVuPGHeodq+MWTZuKM//qT9uXbOsgiKWJ1E3YPy4Ip7kc4ne950WGndzu/O
+3aBldqsxUstQ0abZXtAVj1j2Io/Jgvt9btE9i0ssfGT8HCatMFwsfi98
+=2z1p
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub A1B4460D8BA7B9AF
+uid Mockito (http://mockito.org) <[email protected]>
+
+sub BA6D22590B3F9BEA
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBE4waOEBCADHDHNTq1NRR5TSooIrKY0BTQnaLfjKZfcJOwp+btBJrOUO7+e/
+V3M4DZQclj/e8SBiVmRPK8Oyrv6i5B5+Ee/qNlLjWiO10AJ/PLRjYdoW1V6PlTm7
+2aUxQ/wNXxDcOoH8M7Y4fEqZJ3rFuta8ogeIYnkUwUk3gc5YKk7KJDbiOXQfRxlY
+9MeVKyoYfj+2Szaaz98W097Pqf9+7i3WjB3TKR1pnWlzF6rLWIGBJqcJuTGLWUAB
+hwOMoNiIBAqyGu8E4rT8pP9OueprOeIjyKgOBWV5yctIxd7uu51sGR47TM2wmMmm
+r/Kz8FkMr1efof7Bx4mJuup6wQXonRMVBqpLABEBAAG0M01vY2tpdG8gKGh0dHA6
+Ly9tb2NraXRvLm9yZykgPG1vY2tpdG8ucGxAZ21haWwuY29tPokBOAQTAQIAIgUC
+TjBo4QIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQobRGDYunua/0Ewf/
+QRv2EXl6rlgV9LgXifdgD4ctYsMvhmJV0uaAaTvTcNpbYL0lG8FpCs0KHvBLWkoq
+esOdJYT4q/9msnBAMXS/9ckteDism8BwZR0qi9qzASzzMJEH7cdpr1te17JR0fl7
+8cgbGyw6UGfRSay9c3HyV0rCuQSFPMwQkG5YVpRiN6NSnYqDczS+aSjd6JCKu/4I
+LVgu4jH8oaUcGJEaWLmExSUzrUv9HFZXQJxLzrFT4k6AVVzBQCuEYW9XtgosKwfo
+0GweBXkC7iuO+bfNi84vyRLTkK50h4+rVNkyvNlgqknbeGrpvOvGErYJy24API/5
+TNP+ZLCTl7Y+qQejTFVJ4bkBDQROMGjhAQgAxDjlr6Oakgs+5d5NcIYpJ/8S5BIU
+aVlmjKoaFJoAy46WzvvpaTC022js1ZSvrM8wlSxSk+kD6/FAJw2pJwRgVrolOYJQ
+mqLqgTA2QSN+leWo0x8gC1+QXzrquCOd7m/+h8FHUDaxc29XQ+7+HtNvsSxY9dtD
+zgQGXjPXSppVCSiDNy1IuIAxmEAFSxok12Glxq/n2DFx6OnVB+5vvt0C8nQ6w0hQ
+AQKPUmO7fNav5lZMfKgR95NrvF1Hu5V6DZvpbXg6+NWfA8LsCampARrou5qzy67h
+b/+KKGHTDMOvZZlGw6oSnPngqmh06QqY7P4PKVkOo3Vb6+02ltyZ95RgmQARAQAB
+iQEfBBgBAgAJBQJOMGjhAhsMAAoJEKG0Rg2Lp7mv2b0IAI5pDzLtBGxYhmO1rSDg
+Y+JY7ZAr4srW/7K6Zc0RmWv48JsZOf7T78kIrif6jrF+ZwBLrdP93umMr9aJ/mJg
+lr+0oag0ZVhEW6Jb7dgiRn8F9+qcCs6lyozAG805oW2lULkwqSJ1xNs79v9RtOWl
+I5ruLVbS7XhGv0qH+ly1xpIuYOzNvpOgj1pC3Pv+NuL2hrLUZVg1vM9eCM3TDVbD
+yJZrxKdMemMSGHHsXWHtn8t4BT88kice4weDq8GBl1Dx+ApO1+iHj779nMX1Drfa
+xtJLTRqH9fhHesISmte8fPiydGT/HCA9quKUuxyN4W6Uwu+Uov12cGV2sAI+H5qP
+hF4=
+=FXjQ
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub BCF4173966770193
+uid IntelliJ IDEA Sign Key <[email protected]>
+
+sub C9F04E6E2DC4F7F8
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFKneXIBCACtnX3ZQmPujf6ocvdnhsBheze71DSl34TfebyW2Qt+g9NhMxo4
+DaJy+iFNnsaMwLZRr6k/qf+ISE3A4opWAQlbk+Wb5s6DPPA2cHH6W4GdkxtuJzqt
+tFn6YtkFhA15Aahr/vz31NBjUJlBmO4PwvkyxiF/MYP6TQ/AHar4xP1RxSYEPcCi
+dIQczQ8nXzya4OqOyTfibeGz/eiHHuwTLHi3Rd2kihQnlRQdhE1rmm8uTyzFe1H+
+P7WW7kQgygW6yxQ3J+DXrG8kG+nbe57ZY1oyv3F/fOBxzn/kuoKHZ3JJEMJmTIrT
+Lr1ngCZApgteAynRHk4t/SYZiyoyqZCuBcwHABEBAAG0RUludGVsbGlKIElERUEg
+U2lnbiBLZXkgPGludGVsbGlqLWlkZWEtc2lnbi1rZXktbm9yZXBseUBqZXRicmFp
+bnMuY29tPokBPwQTAQIAKQUCUqd5cgIbAwUJEswDAAcLCQgHAwIBBhUIAgkKCwQW
+AgMBAh4BAheAAAoJELz0FzlmdwGTIqEH/AsyCUbhP0m7BJRULiYIWyB1WHK0L8cm
+yLid5X1P6VrktgcRbTMEzn4t08eeqb978P+GHp79xgBU6EQ+2IYiyeeAedZ/m6Lt
+Kv6imJsFPXZO3BLeNfwIzPC8QXdrkyVqU0vG/pSdULyBpc1aGNEK7Hr2dY5vQTX/
+sUrlwxDEH3LCmOnIgilf/M927Gelond9VmUh14HqCqtybv49XQiMUdkVkXmzKNld
+QQk+O24XbnSGOknPW2sADDglwoMu8EZTkZGdetgM/8X9PTBWWd9pEV32AnoYNMtd
+d2ujH+4i7AhH+Kbmn+zWYBQv3J3yQWj/dmFlOa/SFilLmmAtBEgl7wm5AQ0EUqd5
+cgEIAL3PEOztIFUibB6FYEkObVhsDbCnHw9yO5MAvAWB60Ohf1J4T9QK63jZ5/Ci
+qcDrw+uab9I+Ruz/SgGyFS0UXAkwfTICUdhT5kUzZmGyoj2ul+iFDP9uUdEgSgyX
+XakrxBbBPzNaMx8+GyIXRVFyRTH7+1gWgPQsdN1sGYOgZ+f8TMzAv6sxu0JVzjKX
+AAbXdiZTyJh9d6h1jS5Icilu8vRwn3Qc/ZzstBRk+eLbb69wS9YGoUlzYvDBz+5t
+iNwvHUriKc6zVT4Edngcr0mKWTdvD+AsvZffU0XK+vxbgMuRWi/51qb+VgK2gFeA
+seV6a+D1059u2+5Pn3h/Fv/vRAEAEQEAAYkBJQQYAQIADwUCUqd5cgIbDAUJEswD
+AAAKCRC89Bc5ZncBk0qgCACdP8kyUZVqfncA2RsQH38NFYhBz5MAEOIhCm7qwPC6
+XG08CUZfpPXdUbxZGUliE6vhfj7rZbvUKKHlcHDPobdTJqGof2jt2MfsjJ18JY0e
+xSWuVTmNmqAC3gsiMfEGIqjQFWonfm0Od4AvduLuc0TPkyfr0gobakgYvhDjk7eQ
+vgC1QfKlk6hHA/OAFW774qaQsyrANrFevRa7CBQEob6V6N8aV1vNxgl8a6fJzPTN
+BOOmP0mq7xk6nykQuqYTVFyqfXN0p1bbTxHBoW/fvdizi7zMSsuBkWUtfG1wyN70
+uoEQzSQwqgWCIaddzrPZPmaZ8CtzzyB7+JdSNItBB2Sp
+=3tsV
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub E16AB52D79FD224F
+uid Google Api Client Libraries (Releases) <[email protected]>
+
+sub 5A34A5E06B936F93
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFF/4bYBCADTeOLZiVGNbjlPrwG7UcMl+yXmEqpf9dB1A9cuicH3PWXj0WOb
+LSzHjzoRvRekEqSUmgoveey1lPuA2qjOUkXY6Kiyx+oLiG0/ObJHUQW2O+tjSQ0R
+ZXKd4ftaw65SLbwYO2JHzj5fLC9j2mZQiRjGs1bWM58c/dOKp1XaOc1/ffcl3L3q
+Up64jWH9r3yhPemh5SHo47UxNvItdaJJYnt20azpZj9oq1ebUuQFMaQDc/RTALhf
+Xb4BWO+z2PCmChz60i/Ko2ZKPJV2TqPqWO+aklgxTTwZZ0IvgFm/5n3Dtn5p5iGf
+qwKkHPJIDWc8cWYtxC608LFdqiAlYmp/oPi5ABEBAAG0T0dvb2dsZSBBcGkgQ2xp
+ZW50IExpYnJhcmllcyAoUmVsZWFzZXMpIDxnb29nbGUtYXBpLWNsaWVudC1saWJy
+YXJpZXNAZ29vZ2xlLmNvbT6JATgEEwECACIFAlF/4bYCGwMGCwkIBwMCBhUIAgkK
+CwQWAgMBAh4BAheAAAoJEOFqtS15/SJP6NYIAMbwdE5S9M/5tIhLPg2arbvnxfh2
+i1e2aKE6PcRlBGeNq8YzWQStIewRhoDbY4MY3dG0nX9wgXU6XFJNxjyjE5Gqpyrc
+xEhs6r+HfxlGwB/OCaDMGR89lcWn1xF7uju3Qsdkb6o2JuCSAqOh4M1zIqADSMMq
+OjuSJ13GddcUFQ/MEvouE7Leesls9AM724BNZfnyJjIfJqfk38rXCxKpMbxCJ2v2
+louDMu0LClA1efdvDBPOrc8+A74dsVh7cQqMoe5lCqrcoC5apMqlJ71UV7SIBNBr
+7+AD6p0ZdGY8C/pTCl+NGe/Skjdqk7uEbmyePpm4BaJTmbwIgiZdGxthUgO5AQ0E
+UX/htgEIALToF36j45OitNd4k17BSZJKnuS3uIL3tTw0fRqLv0/3EBaj4zD5Qc5Y
+TKFgM66Bb5ybI63cwYhfSBHP2ZRS7oNdDbPd/30jDKNvmcDjIhGLT7bZJwC9SJVi
+fHuvtzr6wBR8xoItyYva5D3ax8ZvnzqIbMPeHou+0ZnRYSPjy2c2TxAJTjDOG461
+h9mVXDdK74wL8kQsIxqqYRIeEdmrXMrd/B8IPwuIv8w7LwzadNgRnXaJ5Q5bnMvv
+hVLnWKRt5aiQVBxc67FTujjqFF4Y/1UJb311K+1LSqNrTT7As8nhf2Gu/Gb47kw1
+bb7wBdKv2Swx5mYqiW5+ARQU7jCiUVkAEQEAAYkBHwQYAQIACQUCUX/htgIbDAAK
+CRDharUtef0iT2SyCADAznSkG/8EdIU5UQhp/lY9h3WLzYI7aARw0IA6O4ijGLwc
+ytO7TaWjEzUCMZdw01vAjVH1xNn9QvTgQV+2GyqyBNsjmgGt5/tK/+JtMgXUwr8+
+KsBf3908rOqAAZ3YGyM9N8sRsyfPB/PHfv289sL2IKPxiFTGI0NGS3qOAKQ5TZvV
+7OPsP5+yHfeJG/XhCW8p+nkMGpH4rE8Z6NKgLe/WC6J36aQ4kBfYneueH90Dc400
+rfGyL+0Gn1Rzuj2KFuUFK6q/GBlFaNo0azCqtdpcO6C3GpJYtISxpQ1Rp9kSEzSC
+L3tOli8Xs6gsruc+vCSIy8lzRw19ZO9G7qhjcHLc
+=JOMJ
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub CFAE163B64AC9189
+uid JetBrains Compose Team <[email protected]>
+
+sub 57CE36BB68F1BC57
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mDMEYYx3eRYJKwYBBAHaRw8BAQdAV7zh1T+xL7mD2O63rTIvRfQ9kwL2Gvq/Q6PD
+9apCe2K0LkpldEJyYWlucyBDb21wb3NlIFRlYW0gPGNvbXBvc2VAamV0YnJhaW5z
+LmNvbT6ImgQTFgoAQhYhBCByOmOZvAYBVCg7N8+uFjtkrJGJBQJhjHd5AhsDBQkD
+wmcABQsJCAcCAyICAQYVCgkICwIEFgIDAQIeBwIXgAAKCRDPrhY7ZKyRiRslAQCE
+XiOkwreTSEDg7UXsRd1IruaQEUkrAFsk+1/FkqqvcwEAiAx2FgUTgDV8RoflRcaB
+kqPfkSvkvUBuJBQwqjGuhwa4OARhjHd5EgorBgEEAZdVAQUBAQdA/AOwflH/rum1
+g1gvFPBcqhvFOcN80VUb7OqoENSzUD4DAQgHiH4EGBYKACYWIQQgcjpjmbwGAVQo
+OzfPrhY7ZKyRiQUCYYx3eQIbDAUJA8JnAAAKCRDPrhY7ZKyRiSq0AQCEwGRGd5MO
+TT2kKJf9CphX0LOsqVBBSNvzoloV04wzywD+P4TmIz/CsigszDQy8yl1/rGvszo7
+gaUwnfnqN61JHgA=
+=DQGj
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 7C30F7B1329DBA87
+uid Ktor Release <[email protected]>
+
+sub 72FF58594F983302
+sub 3967D4EDA591B991
+sub 0588BC69A286FF16
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGNBF+TCd4BDACbIA94MfIWL0SpvZwBddXgx36Lp9GYOWNgGoQCWSvk9vaMrLaI
+rEll0xnoP98CfBQYrVSAmHDMhSLBCjNB3V1Sdz8GRdOG7HUffF7Cqwbm3Fxo3H/h
++Tsrodv23NuvKsDpgglUL6nJy5e/FO8y9dcxLXRRVdPFDhJubi08SiUJy9FQbnfA
+yb2LuTzXtjDmjEsMZpdpQUlQkk0xNDkrrq+2miwxemVd35cnVQCFP0K7c4T0ksGg
+Rf9A2r45DBbPfvwTL+ZbrGtCssUpCneWhPl79UsMxeY+vJjEggqqqRqbHRn6nOQd
+3gKSaEqdALZURPzvkKxLUeUUtMk/tkFdsNe/ea7edk6G3MI4dbUY7p0XLS54S9cB
+1JUAHNEFtuJQKGWNuwWO58Yun1EBtOdUEvnIIoQ+CIN/XeKrnEIXE3LSblB8BR3H
+bqX54BMe9AzsmDQtc5pUOm2pfvCoiv8xFXQznBg24dGqo2A/jMoUnGj6oRj7k8mt
+i9AdPLigldr0S0sAEQEAAbQhS3RvciBSZWxlYXNlIDxrdG9yQGpldGJyYWlucy5j
+b20+iQHUBBMBCgA+FiEEOUy0NsVpFvwB7qSnfDD3sTKduocFAl+TCd4CGwEFCQPC
+ZwAFCwkIBwMFFQoJCAsFFgIDAQACHgECF4AACgkQfDD3sTKduofP5gv/WRDpats/
+AbkXtXF90tNmdLomqzrLaz2dmsmekVjHnppEDZAJDWgHKuqi2LL+FU+8RPZj91yE
+rln0/LmOb1gGAkYhL5HIdSKPhd1BYrlObYIvxoarEi/U3+92B+13621qu4GEV96e
+luRXXe85vncuZiwjwPQqmST8gsAD17AiRt71jUHCqQUhsEE3C/5btOrqvM0Bhh+3
+QDUEoJcl1KoQjkPYhSDP630jhgsq0E22Yb1CWSXbwlJZTpmidAKICurll6YFhHQN
+wL5CLj+DjBJfkyC6nRDK1fX1IyU5jN201iDYMh+ibUclJFF4Lwl/ISlb/8NdhbPS
+SnNehscKyAK+xZ0w9CVfTVOIl0qx4SgwfoWu9fi02vQe60fK82usbrNJl+jWHAJY
+FcZjQ70cU0JpFVwhWr0ffOLD9A+HhiqzL7SBASapY4w5yLSlqZ5BOKcZx7NVqtXI
+qPgmbrSIYoXEzz4HQb+oCeXH6AigT+pxZJXpyEQudIaBtC67Nern3mYbuQGNBF+T
+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
+=/gGC
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub A730529CA355A63E
+sub D5A25EF82542C54A
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGiBEUQYOcRBADsCu4zTVaB4TOhV7NyTvHhG1bqN+3Va5t4vpGQJg4M4U0Yu0ut
+4bCZP8I6rlXGj+TqDKVUx9kfGpIKX6Kw2TvZUYbHIDWh3UhQO1hD4xy4b8rOak1w
+3vDAMYA5L/jsZshNHp++aTgmvSoXGS5S1xsjrbrOics6iTtHXMV9TCRelwCgkwGj
+WHzPJnlSj0z4jAlRG4ZubAkD/3LOfrXtti1oirfDTnBZcxhvldyCT2yiE3LRe8N2
+ijmtNO6fl2fqXSWuP0L125ytlOvww1r6Gd8sVXiVwt2oKZVQ+A5028BbHa0u4e3y
+54nA21OBKLCC/hJvyOkPf9/kZk6S7fV+Tour/auixX4WqUg+siMRe/EwHw6bQDD/
+1OK8A/4rVPPCDTLvcQbT+B3z0IEfryMkivJMu7dEoENDXDK7N5KginugnCpJd+g9
+GbYgTYI2YPNB6A2eaR4lH8yQCMyDXC5+bGL+1NL3SP1qR4JE//nUcbx+iMTYR5uX
+kwmaGMXRl7z47OgtaWM/dVipNuNaqkD9WkuMGb4rdSNHrI+amrkCDQRFEGEDEAgA
+pH7D8VkxWJgH5zCO7I1m2ITBf8pu/McMCvpCHR7qgQp4yvLBiQ+AXkbQPRPnxO8v
+QNlSL7wODfYI9hKDkoi5pFNlzhBI9ivehUrfdx3uMIjowZk+UMBhaiH4Ppazkw3F
+V7JhKm0rA9VX5HnujGmZjWymE+yVRJhR9dy0XQo+b4691Ve8Ce9L7j0j8BzCcCwA
+hTOtEKxBnion46KLgr0caDa89C1HG8QJCqQrN+HRbfj07Zs4HjJl2CuJY6ql/f1G
+lGxJYZT0FxfIst01dAdNFppD8JJ1I+PYErWdgkm1rQDkAZXEN7rwtihHj6A0EEqr
+s1ogkXzyXs05fJurUtI5/wAFEwf9Hqv0J5kyzSA3mVhSzSY1pOheiVP6pWWKCsZ6
+xLM90PWekAHsENvvF0mtoAAOS6HYKog5qDHJme7jr10wdalynSfgCDCzt1qm2dvX
+vEk69j7vqLmqAkKEir//1XaPlGKxA3EYjl4U8HxdqOhw/FApWRmJncezqeE+R+uD
+4pMugi7DLnVa90hlPvRNYfButXXS8p7dhuiCa5ebPxclvcW6F/mf6ZDwDSuhkddP
+Du7OD36ebmiD6RHJwsfn/uOz4sRG5ogYNqiB5OOkKO5zBVztgcmWc3ACzNCbykin
+DmNHnAaeiPWR3xTp8ZwNa0BDLGBX5RUsUhP57nhQr0ifllubsohJBBgRAgAJBQJF
+EGEDAhsMAAoJEKcwUpyjVaY+pVgAnjLQPFKg6QdrUiYYCQactc2Gx9OlAJ9r5x4Z
+Pk/ZgTDkz44EfZS63bJ2IA==
+=6Dub
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 5D67BFFCBA1F9A39
+sub DBE749136BF76809
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFUHdtcBCAC5xFdAcSc5qQsPkujcRdzeldrESZBo1/SfGwFV0T+lgp99QJuI
+LDwZ1OEG/lQck59J0JRdAgxlUj1um5LzNYexIJSdxRz2DffQ/z9R+hw4DF2h0fyP
+0lXPOb/sIYJyQIMaY7Rw6NJ9iiP2Q+yAd/rL34NbaelOjNy00rQkVNBixp88iZB8
+WjzHAZnCy9nz5nL7fDz6c518PaHMwVnQtt6Aza+fZ/4Na5NmKMvLC01SLFSKqV8+
+j1T0bh50vss+7rLBIYjuq024WpNdZjIUdbzsLFRZTgmv6nUKtamlDVu++qDV2tWE
+POV3OyXAPCxim2+kwVoBCsJbhFC2NMo0P28pABEBAAG5AQ0EVQd21wEIAK88nihe
+mV8Hm1g95BXaqc1UCRxXOnYT2wOmeS7nkOQlFzQNSsn6FIRCbSYUae6Q2Wv7NqvJ
+OGmiBCaKXgMSq8iEEPrbY3Ed9BTqiFtoA2smBswA2Do6SjWg9kiuXv+sRLiOMTKf
+jitErkL9Wi5CNnERoD09jICcEcMHeZbzvjslADzJz1iW4cSRmbJC+tY9Tf9LMwUe
+etTmeXYJSv2w34vxuT0zzosN9ucEElmdE1oQXQ1Ryrts4Gyv354R7+raIzEPIcGd
+4fbub+x69G5Xxy3AKI9DbVapwskME7oENwotlxzLm0or/1vVC9tOnjVh1HSd1u5T
+M4DeCQ/7wgxl8Z0AEQEAAYkBHwQYAQIACQUCVQd21wIbDAAKCRBdZ7/8uh+aOduc
+B/9wmTVaPsUtaC7+tsFBf+EM6zVsVgMe6aY8/AG1llwX1IujYRyhs8YvqD+cc9/7
+CvK3GlT2wJyBrRaiHZXE9u0COJUgBHyuIvnV0W7fE8aD5AoPCVMacKxZWoRTY4xe
+r+gde8NpAp5f2AKu8kEquXOiIymG8kXJlUqgvZmQWSFYOWF+j7Xx7iRp2+0j2f6k
+nayvHLvyvMGygvNzzhLYKl5zZMks6XMTk6daVt6WbgaSuT0le5LfpxB/k7p7xMOe
+yW0bFgNhSQMDmPJ2iTnW+iliBXOntGQda/W/uWE3LZ03Z2xTq+2SlXtDllVh6Ma2
+QaYKBnGzozJvTcMbyP/aZ3lj
+=kPmv
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub D7C92B70FA1C814D
+uid Matt Sicker (Apache Software Foundation) <[email protected]>
+uid Matthew Sicker (Signing Key) <[email protected]>
+
+sub B4C70893B62BABE8
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=K7VW
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 10AE8966A146E8BE
+uid Thai Duong <[email protected]>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGNBFrY3D4BDADSiDX16IC+236IeUiqi7Nbt2wlsBS0zqqaXi43QwXwcf7aYn4+
+qrn+4JvsyMrDgkRgOElz134B1i5OSzP/32w2JCnj90XUjO5N1KD0QqoSops7NLhZ
+/jW+5cFLDDeYPTYNLxJVsDRSqhIztRC0/m3eP0590MbnPxd+ahlj8uz4NRv/bwj1
+vqfIRDyoQOtV0+QX4M8ytX8cyLW9YynWLWMeHUFY344UztDunZrfomPC16roKXrq
+niP71cILlVFvhGhLfE4iF+Q/QZZnn6hvuQGagHR261N4LKw5II737g/5f1DsKZpu
+Mjam5juYCWobRie4fN4k0xwi2+I0KTpYMjBRTNNcOtyAb1AvY08E0HVwAYz8Cm+T
+VQQKriNpa40RI3KtDXCboCkz+LLL1w6vBXnvCes6F8CjSn3IlInpv2AE4nhcPC03
+zI56gPFHhUN+h4vm+b5H0aw8DyyedBDv/GX5sPxYYml3H12L/idpgAwp022rL8dP
+lxtvZrtO9PlOqHMAEQEAAbQeVGhhaSBEdW9uZyA8dGhhaWRuQGdvb2dsZS5jb20+
+iQHUBBMBCgA+FiEEyHQQgv8bDulryr7sEK6JZqFG6L4FAlrY3D4CGwMFCQlmAYAF
+CwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQEK6JZqFG6L5LEAv8CDTDJbAl/Rh3
+ALICi3dsXasWNQjMnG2kqDXQg/ysTPCoUphnYBTvwkEGxg+m6Bjb3ULeCJo+DIfw
+JxgLl5BNZOROeBmlX5uYZ37XYPntl/WwyGBnCF1IW6cHmdtTMwfYd6RkAFYVyFyZ
+FObeCrzdVj2knwqsZQb2Ty6BNodKV+xLCYBggT6VjNpjp1wOedn5ByQEReG9HDim
+qmVWz4pqAe5ipo9mTEwkQzZny6Mw5QHp+SRk+Yyo/NT8Q0BkGPwFpYn9YYUvda1k
+mYN41DwJBzG3m/kfwn3tmIbxCOnrmTt9x6cGuejPPsOI1VjhaJn8HMK7WOOA8DRh
+Zyi/IkZ04pdNlz6PeC7CbzvgGMgrY5Z9mIHP67GlXomOtoE2ZsUyNUBEA2QCBroC
+ktzkT6Y6IIYUe+EdQ8LdMJ+uisbPl72jmkPmnj0ssZfKkTZRTMF5mpR8a/AlRQwL
+VG5qGWHCQvsYUT/C4fNqaZKjwn53SUp6QDhrpMrv1UWhdLSWS+FI
+=YPkN
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 47DCFC2A59F59B5B
+uid Kevin Wooten <[email protected]>
+
+sub FCB1A11865F6A17A
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFVB0KABCAC8YRgcTIomAMw865DHxS/tbFgqN9i7M+tgpih1ETJbb4enhIBj
+Upeq+MoFCtxN86zGu2gsA4DOMEXVCReJ4O5n0F8E03+NUraCnJjbXLW9eEyRQRaU
+sYXDn/3SpXQyZGP0XemHUfG2Gok77mqiqbYGO5PwQoTX09X1a1wvM/GUYS8I5dUh
+UY6MwB3IEXaoNIccuNs3exm9ojmnvLO4VZuXcLOizlqxq6+8VbEP9qr06UNLsPDH
+vdqLxIUpZWSyYnUQZIrkctsUvlxQMnB/PpzAN9hKvyps6quQv8tD+dyPreT1TJGM
+ej4OcJXkQNmDxXu0/GP7X5yPsunKy3MLabutABEBAAG0H0tldmluIFdvb3RlbiA8
+a2V2aW5Ad29vdGVuLmNvbT6JATcEEwEKACEFAlVB0KACGwMFCwkIBwMFFQoJCAsF
+FgIDAQACHgECF4AACgkQR9z8Kln1m1tCNwf+MaNFqR4lezA6ebkpZ4vIKGPoCOAx
+b0zEXgKPUIsqiH3R0oYzkTqrhm85w9cwJDnPKISg/uoP6gKqJIFIwjSVWO9ESg7w
+SSXKpHZTd34XaqrBWS102btT3wi0PwRs7Bl098jgKmtFT2AhctwZfh1gULHGjHYp
+tOK4KuDch6gYoJ4h01rxMZ6vkO6IWT5rjkgl8SYbjHMsffl1/eLMpS7UvA9S6xIF
+JLxI1+/+5gg2M6VRAgMFZXujstoKOym6t/8ayZbz3HNA9Sw01vJiMYXmWoNn6Gj4
+nxxCtsorIcTW9qzGubnoDGR/DkUlux7QZrEl84A3/f4Z9SWfZ7u8aTuqsLkBDQRV
+QdCgAQgA7kQawwfOhqatOWR4JvWROpgk3TQE9QJGKOPkIlkaxTws0cyap4idMcZo
+RETVqXCpFiWcwVqwDbThQUhJx36EGn3P4mByNN2wLYw05fN4nofiuM708v7hG6SV
+2DcsYHyKXT6dc7pZDWSyCtEMv03ST93rTPaGjM+X0lj7gBgODyYLAtHcAgOuAFkD
+ZU2k1CfGWnm06QZ8Uj+EBf6fGp0sc9aySGQx9asyV6pVa+tksLuJVCsHesT7Up01
+cwtbBQsfSDh4eAuYemqNiHS0H8EI8PEozwsDdmJYtXwGyoP0rvXojv3v0pgrJgfs
+cJsyPrc7ajsWWMMP/HsPQr6DV4OcUwARAQABiQEfBBgBCgAJBQJVQdCgAhsMAAoJ
+EEfc/CpZ9ZtbLAsH/14uJWhG6mxG28lIaWqsNbv6fcRFVBK182n2ZziTZR9zvgqv
+dFZCX4mJA14JtbPV7SMl4Jt5wCcj+lrL2Zg9ywCspGXDp9gDRczYeG4uZHOUOuP1
+sF0QHtjUPCl4vrzcgo9BHx40tg83Yqkl4684Jk1GsXGmjX9krndXpYpZxjqvZEy+
+UcrlzfBwAxMiFWPbHxRaUyAlJADF87AC83CythCne8+MwnR51gNwX6VB9e5G8CJh
+KI79Ml4Nxu9bshJivTH4X1hHy1WZ4RTpYh9+QiX/mUWpESL/3MHE258/4t4kSmmZ
+uibIH78M76e5PfyVjZBdAdgcuQBYGJ0p9c7qSM4=
+=/5Qn
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 80C08B1C29100955
+uid Jake Wharton <[email protected]>
+
+sub CF771F914C2A4A73
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGiBE2fCWARBAC3v9wYo5kmynmVP+43ccamidflSLQjjpsXpSDLPFokGxeuw0OC
+QJy46m8b5ACoCqRlfwnRRcEHxiSlaBATJA6hi7NRO41R39C62JXsIxNJR16JNQ5k
+oG/NOAraw0E1RQIFslznQexfxPg4yFIVrsFp1wkpCRrCklatPMNap2DuNwCg7PWJ
+1vV93YIsaH0O2fnXz3E+6zsD/3cTzUWuySEDiCLNO3JYJm97v4NDQ93encP1Ooxh
+n+PSIP4GvjrAObh3FfWUucv8UGqcw5bAL7dA1z8SgKeyFk/afs2XofXdvC+PhZqC
+DwU0NiE0D/tDWqX0qIG4ezTU2uk+5dE/WVl3R10nOBgquQdWIdYKGfV4FNTiEduD
+Uw7fA/0XcwFom7eyR9eBonQmgIadljztm4gkv11lY33V1ZfJNndPKNzwevDwX+om
+/VEHvpEfPx5toD4H523BPx55ZtfowuMtFHZI718alpCo3h6xaDhGwXvsg3s9k03k
+rfxzCjf9qcJX1gb2JVZ2+2jCwUDQZeEwV2vivjGNiN9rShWW+7QkSmFrZSBXaGFy
+dG9uIDxqYWtld2hhcnRvbkBnbWFpbC5jb20+iGAEExECACAFAk2fCWACGwMGCwkI
+BwMCBBUCCAMEFgIDAQIeAQIXgAAKCRCAwIscKRAJVQoeAKDLeCOKKnt5aqlHD/7+
+QPOgX4iYPACgvGRCubBztEBkU2xXbr9J2cQY5em5Ag0ETZ8JYBAIALeU4dgFKEn8
+b3E1LUT25svvUUX2kuVLQ5TzokC6zjWQrPehOlsYx+ey8RSN/6A5rBLtn1z75ror
+F3+vN5kLPAz8x2Th6Cxd6lvn3DQHfvDL0YHlp0AZzhHx5ogyJxdaqwzNy0JWxava
+FGN6b8bbrR1Nf08kq/d5dNe+NGVdBXcuqUo6jt1W+tkbntklS5e+B9/Q/4L8dYkl
+8xXRIMAuKw6h8j4LFXse6xndWeWtTIkfZImz0f7cLQV5X7QSv90i1KfzT9hLiUjp
+wqPydtTNuB6+gda64jFNhVcvgW+h7MH6FT/zSss2Jh2eDR4HFrv7EJSS8dKCvPox
+y8El8pQMG/8AAwUIAIXq+ryw44voH/IdbvTQtK4t5/lp/Oj9b7QrMR3u/iQxM4K3
+dq7rUbA8hjdMM3gfMu13B4pzGtpcf25b4NIIQkhES9+CUDQDYHF+gwkrwEascbdf
+YZiLAHtcMjW1Og+IhTY8wDuJT4I1pqumSzWV8UxVJctqNUTY2eU7158oD5+prdCc
+eQLbzxoKFtu056kZ2+46v6bAl8g/w8WoVORUuHruuvKohMVPHwNQws7KHCFy9YCr
+4yIQfqC8g8oITqlgUZcZaXx6K+NndwA6LAoXJL0edaZOZBuFq5H7Fkrw07+OIQFq
+LTGcFpR12AzDh9lmtyJQ8nVfb6IjAOSwBPlEZWSISQQYEQIACQUCTZ8JYAIbDAAK
+CRCAwIscKRAJVd58AJ0YA8xv0U5Odm8u21BvyxjGS3tBZACggF6P6KjhUPpIAYTS
+6v3TtzhkJdo=
+=Zirr
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 6A65176A0FB1CD0B
+uid Paul King <[email protected]>
+uid keybase.io/paulk_asert <[email protected]>
+uid Paul King <[email protected]>
+uid Paul King <[email protected]>
+uid Paul King <[email protected]>
+
+sub EA8543C570FAF804
+sub CA890A5FA09CFD80
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=Wk+k
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 4B1E11D5A4B91E89
+uid Adam Cozzette <[email protected]>
+
+sub 726F4E5C34CFD750
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+psR8R04jHL/ZAxrodA4Awc3BTpNxQDPfdRPc8w==
+=8STR
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 3D12CA2AC19F3181
+uid Tatu Saloranta (cowtowncoder) <[email protected]>
+
+sub 575D6C921D84AC76
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=hALf
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 3D12CA2AC19F3181
+uid Tatu Saloranta (cowtowncoder) <[email protected]>
+
+sub 575D6C921D84AC76
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=hALf
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 3D12CA2AC19F3181
+uid Tatu Saloranta (cowtowncoder) <[email protected]>
+
+sub 575D6C921D84AC76
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=hALf
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 3D12CA2AC19F3181
+uid Tatu Saloranta (cowtowncoder) <[email protected]>
+
+sub 575D6C921D84AC76
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=hALf
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub CC6346F2CE3872D9
+uid Jisi Liu <[email protected]>
+
+sub BE04F93C75A3B493
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFRIQyEBCADYOc8Y4bOkLGh5NFwQ1JJwGzPY/mV9kndWy2tudEs89Poo4cQD
+A/wndJqO2PrdvDvt+kxKQGra0RzUNW3Te5gaePo7+3H297BAWar8+KiX8RRu3uB1
+Tbk2b5xmrncaD5R9TtRB8uNIzA0OG7N3+2rrwzplY3HNYlz9EeWwllUO5YFkniJp
+hOBjAbTGc2RjcuhueFse68NNCUUEzS+7pGWSpkwo5CsLyfbaCJUiSNIC06ygkY6R
+XCDZUFXI7jxfcReVMK+Wpoyk/RqY++xGmCf6MWJqkcKbn9G31fy0arHWnmaMNUUi
+rwGGzEVggMH+sbXKsLvRWr44fA/cKf+EbZ29ABEBAAG0HUppc2kgTGl1IDxsaXVq
+aXNpQGdvb2dsZS5jb20+iQE4BBMBAgAiBQJUSEMhAhsDBgsJCAcDAgYVCAIJCgsE
+FgIDAQIeAQIXgAAKCRDMY0byzjhy2UUPCADOIICATGIaZb2wnFpgXIq+3zOHutZW
+M+zmXXw5YUK6s5mRZycr90neciis8g31wTFa3832VHbJHEoLni8C1hERg4rvVrqU
+Q4y7iBEoGhKn/lgBCjImRfpYlhKtd5mmEXye2iz5EQ+VRHQWxOy3cG6TesBBpD9A
+Tya9BCSaUbc7UkGTRwhqNyX5+oeGwhoUrn4bOL+JQVATEMDskgAx0h3pIWMbhmZh
+XuKRVMxVgcPRbTFUiqDMl0uNUJwuFvvEorAGGVvEDh2Bws8CaY308b2EzF1tt9I1
+oOuqQh49JScg18aJU/h8n9x2lkzJhbobdmmvICQ+FClS4CpK5X89M8dduQENBFRI
+QyEBCADsdI8kpJKcdOgZjPwpp7xnWhaxWJ4JYVCB8Omr6ToEAaw3dWqkYfmTQwlO
+i2oBRKUnxgc+VBo/+mKOz18BIQUduM6kPjp/Hbas+uF0vKjbYKY/aLASRKR7drwp
+mphuZqibQr894HsVqXHJXwBN7/PUoAfsjVhcuZDtz+A1YJi+6D4I5kB4gBdk+fjh
+mqoapUhgDQ1RZPYzjko7UH7cMkQkHBCj1HmlPKU6MlZbvQn/p5lbIL7WuTuNI3jy
+jiWp0lLkblWgTyEY7MJvFH9s2bpPWjkxcx2+lBG2HAmXiOgRWmZSrrcX9+a2/Nb1
+5+2pMg/8ZI1bSw3lju5V/ozQ9pCRABEBAAGJAR8EGAECAAkFAlRIQyECGwwACgkQ
+zGNG8s44ctkKkQf9GAw6vtfuksg9BhVP1oyAqVwEDrQ7L5Bt1SB3iZbMcs455nY3
+YFD+0N4yPIIsYg+K0JaHr3PzHBaZjGFh3pD+tV7cuMXq/HkW+82Ogvn3onHWCfiG
+Yvl+ZBLlN9C52EGbIjx07vnjJoDXPHpeUeLEaKn3R7ijMP67/mfKYKUlZ/9uMRcJ
+Jt+HJXwaSaQgyGRDT37wmUCBUE9X0XaNKXYlZA7kn7jfpDBy/IaqcNOxe32yum/c
+4MpmcKGOFdm5Tr48TgdbDu75FT2tNsb/VtD6OFFaX7GjQB1CX64SCeuT9sDmqXsf
+uup3aw/ff+A7vCNFbhwiMUCJgH0aXV+A/bgZ3w==
+=ll74
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 41321490758AAD6F
+uid Groovy Operator (Groovy Language Continuous Integration Server) <[email protected]>
+
+sub 01F3A913FB698736
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+ZIY=
+=83HN
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 205C8673DC742C7C
+uid Brian E Fox (CODE SIGNING KEY) <[email protected]>
+
+sub AD9CEBA0521B1945
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+hfxMZo//jMG5FUu/pIWz5aHxQUjBv7phbwxwKvQAB7q4eYIPG6ZabYTQJDIweq3S
+q0XJaY1DxbHet+O4PKHUu+p0fjLabGTwENN8fnzI1adO6mKDrn3LcdZmPj9m1KkK
+2hslY7P8q5jz1AjAsVlSMWQoLwqfwj4ZqPnvUDeR1YivXnFf5jYkmX5rrzOHuSpk
+i5K7fKT30hwLE8Ew1Fn7LftldGWIi7U/T+IUlCDUgF6CxBKMjXCDtAic2dYo62aY
+WimcJC2KNWsj41+Iq+auUBdbIB4uHkROm0/V08OhQNSrHx7piQQcBBABCAAGBQJK
+/hroAAoJEIqviNbYTkGuiecf/0ZxYsoCsaUtkmLHhIeaB+VSgsGQRzQJExLyUi58
+i8c91+FXYykabOCzsQlIN3hhqDI0s7rQUJQTGoFWgwdVWRWpAhklidEFGx4wS9wN
+9twIiY+xgdwQkQ4/hf//////////////////////////////////////////////
+////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////+JAn4EEAECAGgFAksM
+3mcgHFNhbmRlciBUZW1tZSA8c2FuZGVyQHRlbW1lLm5ldD4iHFNhbmRlciBUZW1t
+ZSA8c2N0ZW1tZUBhcGFjaGUub3JnPh0cU2FuZGVyIFRlbW1lIDxzYW5kZXJAbWUu
+Y29tPgAKCRCbuGOw9Ru4ikI8D/9vWt/TfpmUErEq+Md9F0MZqJ2H+y/nJJMviUDH
+Hx+po2etYJauhw5Ota6brkLjef1cNRWQ4tDxctQRPc8SsU05/Epzrdov5SWVutcw
+vmAjWSUs2wKp7/+lPuFUvEd7g4xt8gXY+mmvo8qi8tTNE+nfzaU7I0MHIMbN25P2
+b6//+Po1ifLVFE+S9fq6NbXI0QvuVBKCCmzVvA4VTVNaCd2CQCrZA+6c5VuFJBZK
+VoCW2FThDvXyQYlQAZmE3zYAZDjNFU+jAYF6aqY0dtU6wh+U1c1qbpLhrdn073pT
+HsfNsQW1vyzYLLr7QxkU9pVpFJ5Ajq41NwyU6xxSZhnJN+7TOYcJ17EnDKmdO7Mb
+52nn0zvxG2bactz+ycWwZrIxfQo9RAxyor9shORfPmEoVbsLOdfuoJxvb3OL8mI7
+wcTTfsSoPeqac2p7NS5ZWaDenliNrVR5ZWJFQeeoll/paBampGjK5En/QpIEoct4
+p3KnVTusFSsZdRnNkOFCKPUusbiQPl7dga17oiIqhpsLewq7BnQ9oW8h5jO0TuJ7
+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
+y+5xrNg+uv6po4Jjtidfww==
+=uA5H
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 1DA784CCB5C46DD5
+uid Rafael Winterhalter <[email protected]>
+
+sub 7999BEFBA1039E8B
+sub A7E989B0634097AC
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=gRaX
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 995EFBF4A3D20BEB
+uid Ktlint (ktlint signing key) <[email protected]>
+
+sub B89991D171A02F5C
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+RUjO/QWG6CIej/nl7O0g91NtlEY=
+=Ixqm
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub CF9F3090CE4CB752
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBE7E4m4BCADCkqre+MJRRn+yBa8PqDHFIpfxOk8lQeueZTrU0Hw14wMkkOW6
+XFBb4hDeezStNNP6s2TS7bf5YRXZwqOwwgg33WYVVH4jPldaP1m+Z3GtYSLKEjTl
+G7/YqLcCtLxDdhLF3WpR7LUyZFQpIPEwRj12UyK8gU/Wy67GP3JBz/YhGTGfEaXE
+13VWM6FLvS6GJVouT4lFVqPTVv54+RKz0GdlgCB7Ht7kPtpMkz8ceKGU8+JcbAsL
+zkcicA97ZBzYEnlHFfoNI4M6EZumw8TXM+hvJBQ3SEWenhmUj5dwkympTahH+Dw/
+iam4sbZPiQH01GLiffeNNfTVlf0bvaczvvG5ABEBAAE=
+=YoaU
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 21A24B3F8B0F594A
+uid Karl Heinz Marbaise (Apache Software Foundation) <[email protected]>
+
+sub D658968EFD5E9F85
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=klCb
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 79752DB6C966F0B8
+uid Rob Manning <[email protected]>
+
+sub AC9F6F1991913E30
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+1v9wlHhhdbE=
+=R3mQ
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 8614D6AB265B4C63
+uid Antoine Levy-Lambert (Apache Ant Committer) <[email protected]>
+uid Antoine Levy-Lambert (Apache Ant Committer) <[email protected]>
+
+sub 8832A83FA3060393
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+NACdFJ4KIATJDK/5ajFq5+irOpodoHc=
+=VIEf
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 7C25280EAE63EBE5
+uid Oleg Kalnichevski <[email protected]>
+uid Oleg Kalnichevski <[email protected]>
+
+sub 926DFB2EDB329089
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+ZNfGiQCfdH3+RPBbKSQofz2bGx7/niTd9qg=
+=CP3a
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 0E91C2DE43B72BB1
+sub 83552A552A0D431C
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFBIm/wBCACgqvegptBhfKbyBXZiW+7XchIJCOpwq0/9QgSehKMwELbUKqNM
+sIVrywANqYn32S9hNRvBiKGm/KY7VwN9p1Cr6Ey3XuGSbRo/xN6tqfV/rV5YClL5
+6sMc67BlnEaCZRNuB9ATeUE/4wCO7fWg79jJuNl8tKQ8EYIrVGizzjmZHt76OwAi
+hQtD6A19+qjQ02SyPUJS6a2lKx+gwaHNxv4L2FqImCFGOOEToyRb12GD18Mgbf5o
+OtQVVtr3qbT07odFQt8Iyy1DiNUJbOfC+YO2wO7eMTr5xaFr1HejsTvKZiTDC0Nr
+EjtctqGxrjxPmoUPNwtxwEDTEh1lyKMhnqgJABEBAAG5AQ0EUEib/AEIAMDUgjnP
+KBeHIN0KNmXTS/uXXC4LTGltnQJ57OG2kmPz/JjAjYLoLvINY+xtghehMhRY3DmQ
+Dy/ufZsgO9oH8PztcC8QL5/dV6VTYf4U3FndbiSKgikaBX7yu5Qcrtkv8XgkJ+aw
+IEUgTGDXn2VT1hH6yEG1tA97iT/d7ZUxLEBsVgbxz9VtPellTNK5x/8NGY4NW+fM
+6+yGFpjr5juZVYRLa8u565vGBQO5FU7bg/69DftmL7vO4KRLs154VpsfAsTeo1rm
+U/8kIjgCVeKFClJG+Sg+m9rsJNYgiKy9dGfD/qDmVlEeWBuhtlAfqM7pHTv1Mu8m
+v5/DheBwvlwheg8AEQEAAYkBHwQYAQIACQUCUEib/AIbDAAKCRAOkcLeQ7crsaE0
+B/4/+ZcjdUfLPlKk/8BH0tMafEWOGvqY8bG4YpxGoJZHT/Lb/cnWDLvZzs98FVaQ
+3DKHZwQhhtnQIhnupvxSHX5wLeBZMtAANGQLauGp+A3S1WBVRHs0mzOdlVDbzJu7
+RW72mnkRMSoVd018fh4eQ0+VpZh0Pf9KfKJDwpEuESP1+6JcLLBvQXlEJYHOk7Up
+5eRkhljdIwz3TlSuJ9sCscTgM0PI7/L1eFP/iCgZIBHhpllVV6v5IGXx3P5Q7YQU
+y32zCrht4t9fdtdLct1j6eNaAQdPAU91auSbYhuVCpjgKNpwOv1ULoSWLUUPMNW5
+Qc4ZDKq+ywOElvONMnX4oaQ1
+=f1ra
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 9B1FDA9F3C062231
+uid Brian E Fox <[email protected]>
+
+sub 458AF764D812A037
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGiBEWjofgRBACePEiXmSvjcjUgWkNAFQ/w7w2VSEqe1vuTCrta+ER9JsvhwipP
+2/BEHigFf99TlU0p1UC591LMeYP2UXfQnb3jiyEPKxA06aj1fTGGMoNMAilymvgd
+pcixjlSJBvsmyFYuUdYK20UghL7fAU1lD8Y7TVXz0XT0n1oMOwf78qB4vwCg/bIQ
+LlFGTwqgEBBJpFJnaVk66hMD/0wMKe5Lk3rfdm/9Ku56ddZ6GTjyuNFI6sc9gOIJ
+XWuRpZUO4d7LKq7QaKLKBQeAI1NqqZuB7gtdU6ILy7OjI2C38KTCpyu+8lj97CNQ
+gJqFh26lqhtFfMOUwKvNUUsEABDy+vnI+VCW32ZT/E1xjA+nVTSjGM9lyv4Gls7M
+8pd5A/wJ3rD8XDiriM3ZV1Sn7/pt9OBxc25YHhfbTinIQBYCBhTw3wbS3d+PLQOL
+/TmkeaZcuFA0KQW5hHEjTIY2YbOd2lPNa9ynq+/1OvJOGAseCWL8uorYAmk6ztkc
+Sy4UZuNbupNSPGOt0hZixQpSB3Tv49XlFyupd7rPnYi4F37nPLQfQnJpYW4gRSBG
+b3ggPGJyaWFuZkBhcGFjaGUub3JnPohgBBMRAgAgBQJFo6H4AhsDBgsJCAcDAgQV
+AggDBBYCAwECHgECF4AACgkQmx/anzwGIjH7qgCgyf62qYqZB/Qna+RgS9x9WQ8u
+qUgAnj3ym5yyRSxCzKAuFz+XCKiksckpiEYEEBECAAYFAkkSWGAACgkQb7IeiTPG
+AkMW0wCfWpi6Yg1UAvdeJNKg6QFI1+f9+1sAoIdwV84eJ7cscMyammeDrZ65hw5F
+iQEcBBABAgAGBQJJEmTqAAoJEFvmMcGZldJKsTkIALQpI/WcoH40eXeto3GB/4fp
+zqZNKK0DP+1OMOuIxNESionjyUxVhFuUDffL43wuiZxpB9wiMDQfzIk/pMlpFnSl
+bPq2iR4fJWDaphianl3ARyuLvZe+NTxYV3KohkNf4m5/VdL6HbR+ZxreWz1wA8L/
++CIDmeoK6Qy6gJS3HXO+SWcQAdW/qHqAodc9r0dWDQK2Z2v5vYR7HEpMMYOyt9eN
+DKRbEDgQy2h2lY+3+zRWJikVeKE7nYoVhmtBlKvDhMYHiulcVkfAUCOwJO360LxD
+puxhHmHn/nS6qSsjMSb3CxphUfyeiwqqeLZ52dwaBtEgTAq9nizD7/dNyjoYFguI
+RgQQEQIABgUCSRNHNgAKCRDdZFWbP+8ev969AJoCwMlyaG+5mFYNkBKoV1TW3Rmz
+NgCgiXRfM/qUR5NSNm6WTww4uXpACpyIRgQQEQIABgUCSRNHcQAKCRCQOE2aNcfp
+Qgw2AJ0ci2a92nC+nwe+xhqPGdlmoM0ddgCgj3oFhbqHViA5M9u5o8+zsjhqOKOI
+RgQQEQIABgUCSRhrFAAKCRCw4Bj8s7TZi1CAAJ0fCp04mWHTYi04x0G14A0Sag05
+3wCgnRIF2y1coVmEYLrcwgmmSvU0+2OIRgQQEQIABgUCSRnnRwAKCRAtIatlZUYb
+eR1WAJwOjkVW5QssBuA9+wn4lZZV4886hACePClRhX9YpSVQihz79WWE628+ccuI
+RgQQEQIABgUCSRoxDwAKCRBbloAQ4E+aiXP7AJ9nnnf9mcNmc7SWu9hUYjseTCQV
+jgCeK/ZkDHsaVfCAcdk//yu964l18vSIRgQQEQIABgUCSRsK9wAKCRC5W70/pDxE
+kizDAJ4pDHilmFtgs3FL9VEhV8a4FuqDcQCfRKKM2fdNMlSvbA/TP5ccGWCCJzqI
+RgQQEQIABgUCSR7O8gAKCRBTJs9AH54Xu0H0AJ9Lhe+j0SiUr4LN1Qw+5I1bLH7V
+lwCbB6kD5lVzVp/iPDyg1rmpg7xeKeGIqQQQEQIAaQUCSVsZ6iAcU2FuZGVyIFRl
+bW1lIDxzYW5kZXJAdGVtbWUubmV0PiIcU2FuZGVyIFRlbW1lIDxzY3RlbW1lQGFw
+YWNoZS5vcmc+HhxTYW5kZXIgVGVtbWUgPHNhbmRlckBtYWMuY29tPgAKCRCyvrxA
+FSkkryB1AKC18f4sur8q8mdXarxjtPnqFbdWFgCfaeJKC3QNAIbnseS4czldrYEO
+lj6IRgQQEQIABgUCSV4GaQAKCRAPRQomYhC/wEY6AJ92ftkXynsHAyeKrqWjiBZU
+gKFtwgCgrMVeFhKIJsaN/7XM/z23r8m00w+IRgQQEQIABgUCSagh5AAKCRBhKKrO
++XjYT/fXAJ9HdHZf0I6pXcw2B7WOMuqnaUodWACcDkmO+UpctOcTgbdr5dEdULZa
+oA6JAhwEEAEKAAYFAkxum64ACgkQ4TYIihgkvcFmGw/9E2LKqawUhLc6QCU7Qdub
+gAZEebAqiaTTMpZ7Ua0jQSlXq5GUciwp+0F7uFcuyKz3FS5he1TR9D+7auuNyIEF
+8CIQHNuoxo4na7s/XydEwBXDTkvlWgTeXCZJaaRGoreKluws4q+QN1sjA3w/iKTZ
+LTwFEqbEx7lBPMcGNkwlRgu9ggyX4MR27KJItgaM28C4+qxQ5G9OtuY/hKt7Q0IK
+xjfPY64IZOIb+DzkV9WgiMFjd0Q4ZXKGAldvkVodlTTfyl6SHrI03XcLp/ZXQp4o
+Pm4+rdPOga2KDoe8+eOE2P0rvQfb9mnW5/yj0FVIo1LF2/DFARjALom2gjQKSyDI
+2dMw3WID//H36/wGCwb529uZbkaqkmde1ErHLjbVzpaa0VcAEPEE8dO5q0EVwI45
+I25ZxjCNo4+ACiihSA+GHSHDnO4kGQFPgfMTsaGX/rr+ghYAwMQNfOznsolYYnIg
+FoWx3nUfutytxvbdygWaIdjJoN+nsPz82kXQPlymbILVi99s005CiuISjwnqqasP
+oO6rzxXBE9745eBRGUyfUV3rIOBz3DEHXr65YuadumUJEeEiJON3lk82xq3yBXZ4
+hZOnRHbr1OyKyLM3ArJFxuI77kDOcTfVGylk5UUAjcwfW5UAoeNkNBTPk8vdHybf
+l9vVsCu5u2aBOaVYeQVxn9KJAUoEEAEIADQWIQS10bBTFHtMTL5JaA+WEpPX9Ca6
+oQUCX8WuyBYUgAAAAAANAAByZW1AZ251cGcub3JnAAoJEJYSk9f0Jrqh7iYIAKR9
+Jy2kbU8Jl3Q0/n1xkK0AhqD7Jb+zDyXH13PUZgea0siNenQxbUjT0yTQd3m8tzdy
+YT7GPkNVYqt4dLZGc1T5aYrDaqbX+EVt3yTwkAZIvTwkVLspk8q4MDimUrAQ1wcH
+fGwUyrYIxVSvNPXcwJfjRnIJ1IN8w5smbOkppMRIUvnVl5bqVt0T0v1LQk2Hnzmu
+JUryathuuNdLgLwv0DaX7yX8q4DiMrZHspUmz8cSBTcnEksy6durBf2asD9+Y5Va
+a1Fr16A92Kjar6FVPjZzPSAbzCxwdYB1GB5VXCDRL84khIqM4toKiptPUFhtj6bA
+PRZ7WxR0vPxUu59Ox4+5Ag0ERaOiGxAIAKD8eQZuPsFLlXmu6aovDU7PwpIQHQFo
+DZ7I+rUv2M8p3Fw+po3PUsddmOg0QpMwvmU78vPZ7fyBzr22gmfHrS7gaJ7/T8mF
+7uh5hjYoaoPKwUM11JWyD3WQ/9RnlcB95Dtg2mfkbdRCo55aF5acCxjJ59p/YrFl
+AjFo8lkmW5zQXGt9LaKF6fnFhgZwpb/gMns94766Fgnvb1W4/PwFjNj5+aQehMM8
+PUi5gt5IHKteV1wU4HnhGaIbk765rDThxjYfRxRKfmOeiQ/LnzzrDWskR1t3sfG7
+ceLGYSztiMY9uXDow36Cmdmo/AcgrCQLDVNaoFnsp/0E66x2rzky6ZsAAwUH/iuR
+YuyHKQ/naDJLFlqbuvPtheLA4h8m8ItbK5FfaMv0erxtEpDuA7ldv5Pawqrmrx0E
+lu41832bjqGPxKyv+v23dxqS42TUfytmTU9mjnB1RSaEE0ICn9xg5UpnnDbrJB6X
+taVIW2mPs1isfgzBI3ME4XIQKwAVtnY3Mk5NGEcoMUMKlgTxiPLI6rsbK6iiq42p
+ZU1aJG8fa69VcAi3MYNxxSPhiY4R5I5mFyQDUqs2j8iGpnH0fMAUBFffiIhsfxHU
+U7wEse7r3oOddfaT7cG9INK/eUpSaaGEHuMIkwGoMZMMEm96lpLQNOoFspF+TUJD
+F9FSupbDbz9LQDr2Nd+ISQQYEQIACQUCRaOiGwIbDAAKCRCbH9qfPAYiMQZqAKCK
+xjnpSSp8MgI2oHi3r1MODLvSegCgnzuSirQWS7Fd1quoQiOefogN+ek=
+=o0/H
+-----END PGP PUBLIC KEY BLOCK-----
pub 9A259C7EE636C5ED
uid Liam Miller-Cushon <[email protected]>
@@ -7389,6 +4761,1404 @@
=eURh
-----END PGP PUBLIC KEY BLOCK-----
+pub 461A804F2609FD89
+sub 8067ECAA8D58321C
+sub 750F9A735EECF640
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=QNgn
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 3AD93C3C677A106E
+uid Carl Mastrangelo <[email protected]>
+
+sub 9B2A1B698A113AAD
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+U/UZPX6m9g==
+=XXe6
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub A797295E9D87BDD0
+uid Aurimas Liutikas <[email protected]>
+
+sub FB4C179C9305F3B1
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=k/aW
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub F406F31BC1468EBA
+sub 4BB1ED965FF68B71
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFmnALcBCAD1KazT9eswNXzML5+M72qhdIX4VlJrrOzeiQtTW9vbXj7DZUnw
+U8m2bNmKHtpnyXQ3Vl7FE/e8CKGUVKmB854VJGDSyjToeAnt8A0Lg4smaSfgbEim
+rVi6jkgSCjzvNFUsKx4uOCkI59lbAWcww1aoQZcjW3D0ZTrrjo5ilx/zNXbKMfX5
+KosRIO3OzIfHYOjsmbLKj9U6pj85AXJ3/aKuRMLbFvOE3KZTxKLhl8LsgSgJFg2g
+XFKOJeXyRHCLTlsRB2qD+jAXeE0f7nTQ3xMnMUi9U2SN4WuYxxFTtrZ7QyIze0/4
+568f0ylZda+3j/FkbcZK4KJEi11kqS/ph9UNABEBAAG5AQ0EWacAtwEIAKH79EfC
+C5z/pkDx9MVSnoA5WAYX20KL+ErpMnaRbwzpizQeQVhqDjiKGCk6qyC4PUUk+H3I
+aYuTQN+rABVur4S2sO6AyNUETpAMNmrZNvClG/p6gnlYml0vzvEKtsa3U88rTTWx
+fzoecQs0UugkUrRuJI4XJyTMgRuDDLClH7IUjkrUmw2g6EzlDVdLczcpLxvP93j6
+I8R+DwDwlCX6Nqw5Nnr7Q16n9sPgDthJAF+7VS7xXs/jeGROFckdrolrQGirwbfa
+Kh4k0gfSJykV1ivuKx7QOWN6bYejph9DXD8oxE+Nne1y8tfNZFw16i75y46zAVqr
+rKY79Pkcr4RgP9sAEQEAAYkBHwQYAQIACQUCWacAtwIbDAAKCRD0BvMbwUaOunu/
+CADJcTU+K/cg8ItaIfMWM+miuYpoITqDiMpMw+2RkUnlXwn1ouZP0QP7Cpt3mq+K
+Ihei1JIRKR5+XvMV5h8ffvDy6gKpWdsUFadyLMNY07/HVtE2ydUjDhPo5vb2AWe0
+9qMZWef1/hQumkqqhz9Dbs/L8QATpnYVAtv4QMKFwDAXYCgnBijZClYwwhnJwJ3U
+rPejhP0MQomdy/li9kFMlkp795s0Ng5I/BjkFYg/S3IFQEHsgizPclibJdUR8P2C
+GXOcxXB5dE7ykv51FxMpcpgd6jnK0XRzWwQExelrRb5ys/D7pDiJBuGG/u4Hykbm
+LuHslpPWYJ7ZOeVf01xL+I5T
+=dLR3
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 95C15058A5EDA4F1
+uid Eric Anderson (Maven Central) <[email protected]>
+
+sub F57552EA2A2B5F3F
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFUITeIBCADHIijQBuGmC+Oo/XE5qIXxzZ2cK26uD0tlDqaPhRLWt5RP3EbU
+b6X8ZLE2AlmawFzU0IqndrCDxSyuo9+ZFQRYT+stf+qHFjtvVQJh2+4L2LpcPrnf
+RK9QmmlDpKsTeS6ED32kYLDj7vwqrU+sdJcMxPViQ4TBq2AH+/pXoPJ9VBW0hg5Q
+WNehQ5yKireszStwEceRvNAnPffVJ3QVbOqFWQuxMboxZZnEmbpCot6hSCDTM+Kq
+3cyJkZTLm5ew9jHQGRmQB4sM8krQomokooSqUCb6YjPf5CmN5a4sB2z/YJMGbINr
+GOv48A9k+GDXliESyGyFUdrbZH+SCjU/LklfABEBAAG0MEVyaWMgQW5kZXJzb24g
+KE1hdmVuIENlbnRyYWwpIDxlam9uYUBnb29nbGUuY29tPokBOQQTAQIAIwIbAwcL
+CQgHAwIBBhUIAgkKCwQWAgMBAh4BAheABQJVCFAvAAoJEJXBUFil7aTxpLUH/2tF
+HofV14ZdDcrx0JRqVy6RUv6juLCzwdmaymOW/ZPYgVBs0tByQ5O1bZ5JprEuQCAk
+HKQj0SgI+1INuFsGDxJLXMwk9wbZGMUY3dcdXE9xAVTtxkFOExtEjTkjxP8TwCYt
+3AerZ3Qa/bdLfxIc1Ikeo5TC2rLcm0VJUh+5l7JKPxADpopQx5ATUdLgZEuEBRlg
+nWNm3Hrae6ovjKrXBomrdbAFcsWJNKPkhfszfh/8ajzXWLvYLAdGHaOLGtN5qHuY
+OMt/KNSWF3h6kC0a189292tTSHQy2lwKFVlbR/QW0VJF5K5cIv59dauGkGssiDj5
+Gq1o3bAfUdrVPBrtwba5AQ0EVQhN4gEIAMVQVNg6Kqg1pZNcafvm8CEwJonaIkmH
+82UmxslxuOP23O7so34CPYPOMgHW6werXSnjmGyk4X1LWOeexjbI1Ve7oG/zixy4
+GTtYST14BeGelAGYELc4CtoWlJ6SodIj/4pyuZdyrVjgWlWKvDS0wL0Mv0tRfP3h
+6bPkE1T4dsCVr3O3//qDWBFrPKClWIj8gPiQZBOZLWMwja6ML1r1KB/zW89mGs/Z
+NQqLjnXdSnS7Db4Mzn5C0JFrhbIhi1PICLYx2a4eW+ZQWArbKQYRg+aSRGZEUFyY
+lowM/FC1t8cPix7JnND7fWY+0+vDyB+dpPQ75VH5rHCpYEUIZzPUIqsAEQEAAYkB
+HwQYAQIACQUCVQhN4gIbDAAKCRCVwVBYpe2k8aYwB/9shrf3hLJEnLY9x7Py5wHD
+bKRw53ep/TXe5qHcH1iSClMEInREVE4ju8IHjOM0UsPKxTT/XDZ/rDXjp8eJYx6+
+ftJfk3Us8LnxQVcZGOwC4tO/sBpy+Z0pIpK4kyPzZjy7XjEDPauC73A1BrtIKM87
+NvazV6bbzMc57RAiwzigVGwSkqrur8O4H+seJ6YtM+rVXl0D7q5ZahXPQcZdCsAT
+6UYQxR4vx28L8k40ZTAx/gaT4SRV2vuNm14iujAgM7RfXM7l4LXt0HCaZYqitg3j
+qFEgtbX3f75Uz7wHmq1mY8CNjlnd2TV/NtdSzBeGxfsCXMEAOwWJ9rIWBuuAY22l
+=YwAJ
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 3C27D97B0C83A85C
+sub 4BC7B9A81C39EBA0
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGNBGEdX1MBDACuRDzoPMh3CyUHQydFo363R6OdXqMZ8mJQMdysIJCXOXZGRwUC
+uyPOUfH6uSG24RU2zvD72D2SGAehQKLXLQeN6XCt9PRAszP18dJADm10xgkXJm+G
+GJm69bRYP0GIskQI0D2hXoUlSyXFKZa154pkVzmeM40UXo90FrMC/YjH5dLp7uDn
+QtZbsASlHiy7lXFX0IoJHSHZFppmHcW2KOmFfKwgE9dpku7CdTdySY9BXiLC/Erb
+l2WjwzSDEkQbnq6Jm3/wb/AXxDEu9H2SE6kOxrERqXBfc1ycaEsJMxpLxYpk/kGz
+U6YXqXiOla1SYC78/SnSV8Dkj4/hN1/XtFmkmLUn/WgctmPnsE+fMN/ALXrH2OE7
+pUYLTy7jxJ46dChpjIPJ6Tp5z7EbxdsXR9JwLFQP+Fyp/anqLO/uLkZhZGhI3r6t
+lvFyZW8zoAuf6UpKL6bIvxld9SDuEqahbU1RcLsK/7Lwh8gFYXvq6k9siV2Fs4K+
+UWyVrn5cdSMErMMAEQEAAbkBjQRhHV9TAQwA0zBHsAralWNrZBdCkXHvNI0VqeJf
+Ix1c6AMqFW6FN73153uan6AYkpeBSWz9iHgchZY5UXgaKwx75eW+89X4X0SBU2Lb
+B39584+VDdjieynrW4HH2Fv8VJicioyMYyB/16ERidkIPRAREN3K6SuDXRkkzIZF
+LbHhRZZ6XByKDXeAZ/U56TPgsvYEsdFoj7vn+44ZP1GaAeje5v7nqXiHB1lNrpFw
+T7NV7YQXSpkqQJ4ADaL4jzGHS7umGjY5/T4dy+43qTPIrDSakHFGElfNfW5y46ta
+JiA+Hv4BowILjDMHska9hXM123CCuUS8ZQYmouYleKTCcfp34xxXuKRNDJgY8oiB
+sjXokdCoaRhdcS/PrlQvWfCA/D49XLGCeXdC5veOeGJF9W5fk5qv8Bq1vD/jnapH
+Uf92VkCJ+aVqynf0pPTKrctf0fNsttstGrPSGg+RW6NnQ20B4zgqwZAYME+z9w2z
+jmmLjm78BRJ+nzVvgll8aHy5bel56OdSldK7ABEBAAGJAbwEGAEKACYWIQRvZWt/
+a/sjjTis+B88J9l7DIOoXAUCYR1fUwIbDAUJA8JnAAAKCRA8J9l7DIOoXBx7DACt
+p4W4buVzQKYLZM0Fxucb8AgzJyrMU/01n4ys/hHBLNlCHj/Ar49PPxJ97M/QnI8q
+7yqNWOXPGecU+slBmK9biTHtHnaRhkcC/NhZsIwPNhw0H6QGGYi55VSuUPqpus3F
+fPBQ5uhGpSCy9dfux+9swNl1ZhMj2qO+m0flVf8t1JWLqTPs9giRTWAZfHuGGFdQ
+g/I+3LMyqmcphe/ysTlashiLyusQS3x8OpNhReXjZiyU44bVO5F8K+CZ28404OZi
+rg/TV/mtrH5t5A5rniev4r1FBzLTaqEXslSrvGzZhnZyKefHNL7HMiSWe6AkJBOu
+MNzPX3/PKRjhnZlLM9wpDSpG9Z66cNDDFzUwtDYx5O7gbLFib0OrjIz7q0rhm1h9
+nWky+RZ+dRuNR6HV9OlPcS5OizxbdZ9dgjy4fUuMK7G1gXyifGEXKJCXFW1whs0n
+DOOaC87hGOpfZWMBVF1mbtI+Mhb6xY5pv4UXfmVBNUZLdT8RShMJOwemBJjUkyc=
+=f4Sq
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 971B04F56669B805
+sub D3664677F6280E44
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBEzZjwMBCAC0ecfE/qkdgq8uJv1c1ZlzegeWH/lxW0W3SWK2RwaHx7LrfpiN
+WhxLkXbK6fkf86FN4579W1+9Qef2yjZCwTfLe6bqj3zZGQWSu7HPw1mmhf9lbhJ9
++TlxlczRt7m20fpSakGLIs1Jp7L4WJq3N5Ti6IsDFNOZdzGCpuiezzvp08PAD/f+
+eYABnWskOOarCOUrRJ5hV4FFj+9w+OPL25iaaEvHaAuqxvmahHzIPaT5v5Kr9Qiu
+zx0jdNaoq4/wJOGQ8rfMnXSjmuoMNgzTEs/H9ElNdBRfH50xYG6MACnVrZ1kGiCy
+z8BYBZzNUen+I0ek9SlMQDvGr0vRe4AeqlutABEBAAG5AQ0ETNmPAwEIALb8q/SE
+92Bg1UamGopUJ7lbqyebdVx0Fjf8T9MkEnteY0kvpEvluDaUWty393w4QRFPFCen
+Qtn5iyIiE0x+/xF5WlfP9kBMS03n6eXTs1pxgQ0YZ73qvzyZdOzg71isigrduA4r
+yXpoiTlWCfeStapimSUUgXxtsxFLeRVm14j0Xht1cvFCKpdxVZ9+vXIQZlyP2QqU
+zN46bwWwK2lNkKehkdSUPgUdEli/jw3L8rdASs6d8RqO/aiQN0R2kc9EA9kaRaQc
+mBboLsuZwoOCbyxPTpIZ7836b/KRuCM0sBy+RVNem1kv+905yWWJF32lZij/M01c
+OUnlnw6TVDJW5hMAEQEAAYkBHwQYAQIACQUCTNmPAwIbDAAKCRCXGwT1Zmm4Bac3
+B/4umKNZuUFKwTD+FTu6kRUOO2Rnsmk6WBuPm8h3ov2g6lW+2NjeeBib3fl+ehQ3
+IeRebLaxa0ZNAiajxbiMW5LNVC0hvqlsVAxP2Rv+DVoznI6L4I8vNEfa8ysbMY4T
+musAds4kbni7oHTUGA5bzvFgQ0ifDaFxFRvbn9ycDYFfatwDEbs3xgjewy1611zQ
+ef74Si6NR86Xit6v+056srmhZyV53e+pxGAVMw/qR6ROiMNrgLl7CPhtTwSYmSZE
+zQseNBFZpHUb7IGzk4B3ulwlhTcLnb7SUo5DhrBz5Et7XcQ/2mQOH1SrSEmoeyoq
+UfbLkuGneZv5H0KIMZ/5pV4H
+=3VLr
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub AB2DA4527F6FFC0B
+uid Egor Andreevici <[email protected]>
+
+sub 1A94B14C6A03458D
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+aEmE
+=lnZo
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub CE8B1D1D2530EDC5
+sub 7ECBD740FF06AEB5
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=R7zg
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 0DA8A5EC02D11EAD
+sub 71499A87DC1FF84B
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGiBE3LMfMRBAD90h69D8yyPWaSoAyh2mOOOZ/XH0isuBpDZCWptemlMHgImqdQ
+2sXLXYT1bJKmSaMw+yKjp8J/NYk69EbmSK1C2nypLQtWhUmXXd3XVYw6hrG/dGvi
+gjkS5eq8L04f5CSuXO7r1eLTOch9iDl/ESaI5Nhq9A3mRQIhQalum+FjzwCgx0PK
+hoC4MVPVGXzOQPc5sG4jzAUD/0OX9c/yKQqjHUs38HTCgrjseM40iPhp8NfbWenP
+IwUMSWXE3lz0MMeKrGcEOcZOGWsjyepkLHXwj8DDOeGxhfh9bhFRJssdfzOCKBpf
+6S70A3fanzqOAvddxCqF/zOwDaieDmWvVntVpmZO9d+pgR/sZN0JgSIm7qGDdNqG
+Aq6eBACyywfwuVoY6lfNz70ZZqYjYuUkbKnKqpG0XmI+m5LYrUW7QuKJqaNdg+ZL
+vVgX/TdkWVSIoSRS5+eYm3fRD++cg3ZgoR6ZY4WEa7SRSp2zoidtQijWOzp8WeHs
+30rIaXBrb5wHR4GQ4FYsBGRuWkmIaferusllUmHCHFJI4ldvgbkCDQRNyzHzEAgA
+1rD70DvCcy91ShQKP2snZ4cLJnFwKArulDUcxoBZ0AG0qMbaE8jiiJTHIwgVrqsK
+aS1JENv6tVdUS8xHswu30zvd0obaj+4IGXlMVdc6052Y4SLAGNbGVw99Ah1OkQ7o
+v92gmYAYfqppOtRt1tylz7Jf+F6er0umdVBZm8fJ+QjzTw36AwERj2bjVbc6ogM7
+OsTyru5oZGOJ+oJU+M9/mh/Gq3AyrcfU8c6bL2pacXwylME4lxy4fBB7BsMogPXX
+iplZ2XRH7RmlZiAfLHv3StxVB1RrLXVcjdnqIO2guVYrK6mxH9WMG4LnOGvcnYTf
+GtWexEmNA5l8IOSgsK+InwADBQgA037clDFi3XWaZBVXst7IfkU6bKq9vhmphS4f
+uBx4wp7MBA62k0kGDmZWcbinZWnybypili9ihYSHlp3EYzCNTbUMWlbhc/ffYHuv
+rZsIT2DxMPb2iCnjPu5HMGegTM8iTTotW4xYmJUsEDIvgQUz0/UNsPHTX5XU09So
+cL3YOP5MxcEbgO0Fpjny3X76rc+ETAd9TmDJi7HOm24grKdOQXHQJr65j7nTc9M3
+zWnTxOP3fL9jcVnGTnLGRVoR7kedDpa5FsoFqtY8YMaFvNPVvI4+m+jozjNwTg2d
+GG6nU2dEC0qgDEeKMSJwF1wgO3Fe6mXHvxratgNrqfdY/rtEGYhJBBgRAgAJBQJN
+yzHzAhsMAAoJEA2opewC0R6tNKgAnigkHDCNu7Owm8x01E9+aL73JmDXAKCj7ROh
+7Wu1iZQbjeJfypM6CQ+fdw==
+=GCHG
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub AC7A514BC9F9BB70
+uid Punyashloka Biswal <[email protected]>
+
+sub 7B92B768F9D37337
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+sg==
+=w5lW
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub D9C565AA72BA2FDD
+uid grpc-java-team-sonatype <[email protected]>
+
+sub 9121AD263441EEDD
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=t7l/
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub B57BD58EF6D0A713
+sub 781D1F35916E0113
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGNBFsZf3oBDADUgeJsq9asQLaUajkGON9KmxKBtJS+IbGa0jgvx37T4LDigKS/
+wh4axvdJ0mE31uXKitBVDkr5TptyxA0jojYwlt5YLXsotnskdHrIg35Q8xpMp72K
+BfBsqtnfdmBUd/oBZEKgxMM2Pl/VZ+1wmF+KnyToSWuy4Q+9d88ame+8Jdq5ELJn
+zWZWYhwE3c2Y8t62VGzXeZg9Zz747Qt0ITl02//ufoR8aLdb+8uLuidNktyoqpt2
+UG8oLr8mgOAaOn6npN81FbteIWCEcuGewCjiiYTHGpA13JmToDDUfopWYGJirkSI
+dYjP4fZBu4aryHKwXt/zsiD7rzbHrn821CAAZKGptVVu9IfqD3jCBhJilGmkWw+j
+IozAd33hLvlCnH8miXRnGPyNT5T481qbi09wOnQEUYrXBe1zOvBAEVxwSLcNcxe5
+/2gRDbSNU9NJst994hzofSyxA/3X/CDiOSHDKdAcOglgqfpistQIS68FqDGo4eIS
+WeR3S583Two98+UAEQEAAbkBjQRbGX96AQwA5IIECRfqpRDQKsgEYdDMzEYED5i4
+w8GrkqK9Bl2KErI6WQmuBnZaHr71bMrYFS8duUOYetasTKCxjU/Ps0THuOmTnuLv
+Am6PCkpzJ+qBNM4jf5sxHflcb1jRUQ/R+qoWOsWcwJhOw2OgNONHhW8/2mAs+5Zz
+ThWe4cL62YRK3CeWdWphwcUSGx+zQo5vYBZzIbdQ+E+c7aRyc4qEPfyGNccAJRdQ
+eW1tAWydmf+QIYGMbANWNPXm+g80wE5xCA9wwU7N26Rk0zn6e9+lSy8e+l6+hsNh
+uNxWxDDBubF8YMuzD4q+VM4dOOsAJARtp6HW/0mBTcTD5BEOqnDd/aRsNOrR9Cbk
+K4nU1aSrYOeOby8jc7Zu0SnYC6g+JXalt0jtDEGVaxY9IMIe6AcIJhSXlgllK87b
+YX+t4uVXYFb10QfxRj1oduBQEHJkCovsi3EIIl5a4XyoGdNUGn2IgWg+C0RXrcb/
+KDrg7iakp9SwXP0xBSbcNiwE/3C3Xom0l3ijABEBAAGJAbwEGAEKACYWIQQit59F
+awb051uLV521e9WO9tCnEwUCWxl/egIbDAUJA8JnAAAKCRC1e9WO9tCnE/ydC/9g
+6xJK/aIvvKLSraYfS90XamIyUqNgAyXgivWn0jqaTwoz27HG/hRgWR85q72vZ4qV
+vYwx06S8WHMijKMcI5fBtEL318c9V6Y8Pl7jwSOy5yN0k8IFA+TzqHGXVvPcuCwH
+TQAvvP/9v2d7ZrOiH7urM0eoRDXj7Tq+K4rLjeVIHALLEhqBT8w8LGBOEZUAwS7t
+aaGrURVuhO80QW2gJAoG5AU1qMUkzFsTXBsRTcwPP25FIPYClXPNsMR+2iVZAZ1e
+3yBqQkwRlymU3gPGY3M+TOyplfoYIJy6oT2ri0wYa2jeNdo6eEmLUjNAbpdiIEop
+ruzQLLaT7PUk+RU1UFVHjV0rgrXrTYvdgKyI4dX2yGlTTmnq94eaxMOsMxkHAGBh
+GrOJpBDWzJKXX48WAdi/4WpnhOD6N1BOrvWq9QWIU2374WutAX09dt1kBG3m4kGR
+STHuixCePH/e8n89lWDXSsqkV/+imzi75cTN9RWBT1mRltc4jNQ0B2WwUgrTSPo=
+=yiE5
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 1F7A8F87B9D8F501
+sub 7D1BE4480B61E2A7
+sub C2148900BCD3C2AF
+sub CFF46EE3C17E53E9
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+Lx/KSjFhpjYYPWtx15xNpdqJ8g==
+=Le9W
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 40A3C4432BD7308C
+uid Michael Schierl (Maven Project Release Key) <[email protected]>
+
+sub C0B9C2CC3DD97C16
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+ZmnjA2cUdtHLvchd4fiFbu191pbeIk/BSf10
+=kJKi
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub C1B12A5D99C0729D
+uid Valentin Fondaratov <[email protected]>
+
+sub 606CC6C4533E81A2
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=Pyox
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 5F69AD087600B22C
+uid Eric Bruneton <[email protected]>
+
+sub 0440006D577EAE4B
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBE7JURcBCADO+9Dc4/JnB+wX+fq+Fr2zUGSPOT6/qjE5kXL4FEbJKsqDSAKG
+VnbtRrsIUdmNIFQmz71bBDFhRBbrSrkz927k8eUPhYtxE2NmmWSuKgrjF4qviPQv
+m/7SqGx378m/qw4EvpgGUB8EYif98LYdWp5vsU/zx0Ps9auqvetAzJaL9489oE0F
+q8FVhve6BMfUUV7zOTCmJnf438YO68upjU0PVBdfFE6Qx4cgCeWbQGy2cooW5azN
+iIenhuYU1qikmxMHq2xZzN4uSTWLGDpimPyz+Y1aTSYJ/bgn9gPStbI9sojWo9SS
+5gvNK3XqJzMwxwFow86UcIE0vPD2T6ZlBAXRABEBAAG0IUVyaWMgQnJ1bmV0b24g
+PGVicnVuZXRvbkBmcmVlLmZyPokBOAQTAQIAIgUCTslRFwIbAwYLCQgHAwIGFQgC
+CQoLBBYCAwECHgECF4AACgkQX2mtCHYAsiwWdQf/ZDnKejrNUOREfAZQYoAmf29G
+zPnQ2XVb6ZxoD2kg+b7SyzVL1lnpXw961Ayme9trxztb9KJcxJ6a+oSVIHWoiINS
+zx1g+lXCsBRH3Lb5iJTAr2u8+Gyva9+PB60CBmmcsuOjuLBx21N0/E4KpBiwEoWw
+5z8HGNVsa4jtRxB+RoQGiilBUIelsI17e3hQWgScIGJdLW5xErlC3WfgtUOL6q4J
+mSk/A1R2jmWKOO+WBvGbnOr7mKZd+/h4ohzVVwyC1WrFeFJgEZK7bXPA77Iv/4u+
+al7RuVztBKjrXD0yPwknuxMgyN+Y5f/pqqKncNl0lOtiWayKSxdatBLmGifAgbkB
+DQROyVEXAQgA2uNV77VI+ARj1d97b5cY3/er0Mcc8/Q9ctMY+5YpSYDOQF100QBd
+OQ8q3IJsfhZeF/iMFlHIUikuSgatb/Ih4lk1+irnERPuV2MNoAw3Fvn3/vwl/Jy0
+ZsQCBSXO54U42TcOXSwNLkYOJaomDiiuo61Rxj7jqijpnydwoFvEi84v6q/Uota3
+MijGMbzU9QyTX8J9OKMeCSUq0uVuk4ezebjv/bwA/ax/qQRIrEHDOOB1LJ5JyLac
+K4+h5J8tMkEmWxEQv7MNokRLgbaePqv+tdf1gee4f2fSE3EXKFxjTO2wjLPXCrHS
+SI5gecsilQn7ZNxH9g2YUJipn9yj3ywMxQARAQABiQEfBBgBAgAJBQJOyVEXAhsM
+AAoJEF9prQh2ALIsrWwH/3s8uN8/gDnbcbTX+7N/ZfQBXJZ+H9GGikmYRJE1xoOe
+Et9MOqZyGDTZfGM/qNKeDGfar7pcRQlMK/A4Nts5E6d1OX8fBkUBtYanyyjNLlT3
+yDjO6VaV0SCsgAzNjUZqc4lxS9atN6md5m6lWLAdHghrXuV6LsiKOS+96htchoCv
+Tvm7mcPI7w146yJRSyCC5+PybG3ult5Y6QASkwI3ZWB0u0PKUoqglwWngplu+0Fi
+b2rxQvL32is4YrYaZ+XwoR6u/Bgv0ZvZiypk17Uk17rDb/JfeLqDn7oW6Hlgi9KO
+LbRRIg7vwZVo2Ixco7aGxZp5c4zSfaPvn241v813ZcA=
+=A2GR
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub B341DDB020FCB6AB
+sub 315693699F8D102F
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGiBEowbDsRBAD2jx/Q2jNuCkgiS3fzIj6EzDP+2kipIKH2LEnpnTiBlds2PFYM
+xYibVab/grgQODxTdDnAKifbJA/4h1/T7ba+OV+xIUoSI5MbgaF3USidiDHPX0pY
+qvG+k3hKECLysQ2zoZpcC8c2ePiZQSVC2i5BRqgs0xZPz3kiT5U9WPozTwCgtasB
+TgHhkOGhZ0SOUuQ4dL54R9cEAIaDjdPcI7LxyOMvvGTuW/SaS9JyP21Kch+Vf6I4
+vKWWqXEaF0So8S088zHnBrcBKhu9D1sKIHS64EoYCrznfMUtoENPe4sf5QuJmZ9D
++fBuFcudQIpkx8L73q+E3fmCK0uX+anqipJtS8mgpMeabKda4KkjDsZkiaNl7OBI
+0H09BACofK1HTNHNke2N0wXN1GyG7IAqprKl4lBbu5aRXvfKQ2tDj8s5webNQ+Se
+Om/Yg0Bi+CiONLgUjiwYe1wNls8zkk3LwYFeKIJ1AjAY3auBRWOI0/IFFzwTkV8J
+YPHa3Dl/kmYp8NMMwA5bgrblggM0Qhnp+k//xpb0FYbmwHMwUrkCDQRKMGw7EAgA
+5MMlt89bomqE0TSq63JnPaSeEKsAx6A1KaXaSg0LEI7fMebSQcAdVdAFBo4HaR+j
+NNGv5JGTvAObLrqxnn5mU/+qhdTw4WCf17R4ETEKc3iFN3xrpxz2Vew8ZWpw3PcE
+gCe27ZN02J6BgtEqhT9v9f0EkAgRHIkcaFCnxme1yPOFN+O0/n1A+59Ar8rmwcHG
+opSoZlGDEdEdqElx/shQjqq6Lx3bWYXS+fGzSAip+EAX/dh8S9mZuS6VCWjLx0St
+a1tuouq9PdOz5/4W/z4dF36XbZd1UZHkw7DSAUXYXfwfHPmrBOrLx8L+3nLjNnF4
+SSBd14AfOhnBcTQtvLuVMwADBQf8DC9ZhtJqHB/aXsQSrJtmoHbUHuOB3Hd8486U
+bZR+BPnnXQndt3Lm2zaSY3plWM2njxL42kuPVrhddLu4fWmWGhn/djFhUehZ7hsr
+Qw735eMPhWZQpFnXQBRX98ElZ4VVspszSBhybwlH39iCQBOv/IuR/tykWIxjPY7R
+H41EWcSOjJ1LJM2yrk/R+FidUyetedcwUApuDZHnH330Tl/1e+MYpmMzgdUGpU9v
+xZJHD9uzEbIxyTd2ky2y3R+n/6EkRt3AU9eI0IY1BqUh0wAuGv/Mq2aSDXXNYJ/p
+znXSQBjmy2tvJlqXn+wI1/ujRMHTTFUBySuMyZkC0PwUAAnWMYhJBBgRAgAJBQJK
+MGw7AhsMAAoJELNB3bAg/Larfc0AnAmQbEg9XnLr/t0iUS7+V7FcL5KpAJ9k3LS5
+JI97g3GZQ2CHkQwJ3+WcPw==
+=OasT
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 1DA784CCB5C46DD5
+uid Rafael Winterhalter <[email protected]>
+
+sub 7999BEFBA1039E8B
+sub A7E989B0634097AC
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=gRaX
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 604F437C1682DDE5
+sub F664BA5FCF7560B9
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFv2vg0BCADQzzfU42MkbydOEese82s5wyfs/qkUZOQatjwPMyEMlK/H7LZc
+Bk2ZOgBMaDDdEZv2Vq+6oUa/rD/Xmr71gCEk5U1rqeZZ4HuvyEZjjIisjnVrMCT8
+py93im2MJb1zifvY+rgiveiVBNCjSkfqX1/g7HmGiYL30romA/io3jvtWOo6PkQf
+GYzifOKz/5j9oWm1yqdXuhVmPD1aUkpXZeoxfWDpaPS+iUm4Db38umVj7GY55okB
+rrfQAdAUuOG9dyseIgI4HPZMB562Qy2tww5q+PvSxs9ydgSbFHFu1ejCmlViSeXL
+leGPJEoiRdyu9zMW5sU68lxhErtFRpa3IORjABEBAAG5AQ0EW/a+DQEIAMiknjyN
+qHzzG07PNE68DSlUuMvraoyJSkcA6Sjsg1nTgcp9jubqekXW+ZHnNYWZJSxZx4RZ
+wloo3+A4skthmDVh2UN/FO9Vwx1EGkJuyaKELmIVBRSC4IBrVrQ/4/nUXMtG9NhL
+Qmgug3glnlXYg5gqlQc2YjNiWI1zdYmR7pHTxBhDYLB1hweA8X7SH690HDevqhiy
+/qT8YAHZzMZaauj/xQHpvn4uN5xpGm1eQw47tormy7I/1QaDW3pbS4YIC+Q7gdYd
+IA217tTgN5OA8+kXuPJJQKDMG0WtEGegYjMMuNh266HMtfekJVSlJTRdIFQT1j1U
+0OLjrk9WRK/ZcrcAEQEAAYkBJQQYAQIADwUCW/a+DQIbDAUJAeEzgAAKCRBgT0N8
+FoLd5RodB/4pZu8Segyb2VhGYbl0jgmZFqMZDI9iPINx7oZ+09Ck32R6UJgaiaTw
+KT0qeEssum3oj7zz3r5D0s1k5pwvd0w5TLL8CeQ7NxTy+hE+8cHZbFfoMBlnr73c
+UhedkZk+Cf7dm/GVkv1ERr/XnL46wLO3OAMamh2wwo9Od2GP58ZFgFd3jhroIuTt
+YtBVeB21JO5eaktP1ZLi7zsGWcP2mPkQAnd7BtQGwjh6x6M+Xhs/mZEmLP2/nLEf
+oX3eaWU6uE54giiHDC33rBGerBuHGeW0WT7wzatKPz9S51w7mqPXLYNmw7/Qwfvi
+Ca2w4l1R/HAaNTH5suZ1HGKy1nNcY6aA
+=fcxU
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 2383163BC40844FD
+uid Roland Kuhn <[email protected]>
+uid Roland Kuhn <[email protected]>
+uid Roland Kuhn <[email protected]>
+uid Roland Kuhn <[email protected]>
+uid Roland Kuhn <[email protected]>
+uid Roland Kuhn <[email protected]>
+
+sub EDB3D937B0C94C3E
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+1I65Ri4=
+=5Xso
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 2F566D4221D3EC52
+uid Ryan Harter <[email protected]>
+
+sub C4725C965E0455E9
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFPSiQsBCADcgBiaKkIG5jVFbQ0NyG//y18S84/OT1X1I82OwtTryxNqxT9A
+q6HuTJqRPi5Qd0BwmQB6dG0mug9AEp58L8W5udiDysHeUvBKY6zTOprSSFvFg/Y8
+S7i9D3pM6k7L7lGahUQqVAAU4RSky90nJfcT3qTNpmsO24EelMf61XvdFHdyPAjS
+aAO9W+QWquxNqXd0FVQqpHKRB43oR64oeAAE/N/H4lvemuxK6aWEq0/KJo0KYHkt
+H60Jo+djdNhHD/EQwCp9m8pKd3FuAAI9/ypvE/a8LeH/8AcLqnrPq63vxVe678nZ
+yePb1Xl7zQUsMw/ZD4urlkcTrOLl9yfIg7wBABEBAAG0I1J5YW4gSGFydGVyIDxy
+eWFuamhhcnRlckBnbWFpbC5jb20+iQE4BBMBAgAiBQJT0okLAhsDBgsJCAcDAgYV
+CAIJCgsEFgIDAQIeAQIXgAAKCRAvVm1CIdPsUvShB/48Ai4yB2nlxy05CwbuX1ka
+E39VL2sb2Bd6ZVtmkWerIaA16MFj+/o12JlJ9R1S7BsrvZor/oa9ejCyJLUOHW5s
+vRD5BkAJC8IRpk88szJNeVwh9gRgd/lWv8IEKMaMFIx1I96NDKo2bjw+rdF6Qo1Y
+C9yC1qsj8vg9+szMvfAoDCN4KDa9rk5/k7a6q390QpaXm7KY0TbqTkUr8Y+NMY+R
+yEap/qk8EzaauKQyHvxOBj9m8bkv2QlxID9Cyjd1ZyJ9hWuyQy8UWLPy6pVXKPaC
+CVlf+Uoj/qbzoVrElZDqGok5GQfKjNFzOkHuKEgXdYEuX7JWJgDO2i4pAr5isfST
+uQENBFPSiQsBCADt3ycVnpTw4NeU+q1rt6+aBrOQfcdRrTAxAwhilKEo+jD1kufJ
+LfcDooqEYZ6l4B9Sw91/zECNmIyqRiMlMTDtZOniuv/fFgxKSzHIstVDjO6tlY1R
+DqjzQUSb5uHMTfToTDrLki9KJfHIHfHSgOvfa1l3FmX4vt9ro8X8f+wfZg8jHY2p
+aWW5RfhVprR2/A91nzgs5a3wdPQi9Bl6YRZKSJKNvgktsm18LMhwLqvuBpQ1ongT
+QdUVY9VLIkDc7Tn/V5x+2mWCAf7HrJg9UnZK0JoKjop4ZwR7MQ0DoBh2K1Hd6RFH
+rmKjpCmKA3TZVAe5C1Ntloby7un2FOL7zZfvABEBAAGJAR8EGAECAAkFAlPSiQsC
+GwwACgkQL1ZtQiHT7FL7Xwf+PM0DHB+7ENW+1HbkEXZRVF3hNHSWFWj1AySvSrUe
+Xm4z5I2Edq0zDdTQPmi/aEhYgXVzsOWXi+MinkNHXerzt6YHIfbeJJ6dX5IL7Xwq
+rsDRxpg/J7MoWL826FUXZ6CePBfGoEA1IjhkeSkyKvLm4aLv9vfC4MVuLHRbsx3n
+np4ZkMVvLBSnBSeBTLaINvhlp15NLyHweE1KhtAqVuiisWm86n9kqIXjfoj+DFuB
+kK9cE/YCU0sNFELYgmLVVoTjxxtY9mPsROt+KJxIDS9BQ8mjeifXbYwkHERnOTKx
+NzgwWngWLQBG5cIsQ4b80Hzl5AF5ApOcC5iu6Z5e2OWW+Q==
+=qdIG
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 07D3516820BCF6B1
+uid Ben Manes <[email protected]>
+
+sub 11F4CE313A637CC1
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBF3HgdMBCAC3ET5ipFXdZ9GGMbtsCQ3HGT40saajsNDOdov2nMJxzKkVe3wk
+sN3bpgbsqBU9ykVkIhX8zV5+v8DOBzkV0pJ2eLjFa9jBPvNjV+KoK2BAI5pzNzYg
+sHPwo1aRXdI0MvCy+7iaIiiGF4/O16AhU4LmALHnaRQZCyuN6VOQ8rlqNvcczwUf
+J2DQeLHqR/tsch7S01hGpPAptBeu19PyAlQsntYN0yLCLKoe9dFXWCDkvd1So5LF
+6So+ryPqupumBbh4WxCmTp9qwDJYJItjAE0zyPe890FurOtxrFTwtRtX6d6qGKkY
+/B4T3r0tTE1EiOUpmSnxmGNItMh7/l5UtnHjABEBAAG0H0JlbiBNYW5lcyA8YmVu
+Lm1hbmVzQGdtYWlsLmNvbT6JAU4EEwEIADgWIQRjXuYnNF88HdQisuIH01FoILz2
+sQUCXceB0wIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRAH01FoILz2sdoo
+B/0YUh73jUMl14MjWvp9zrFHN8h+LqB4NMQcP93RdPTtDKi0a+0h8gQtm0D+K49Q
+BQbFztOObfZS3kdJ3VOqmodScWrGtMU3HsYT2ioQalqbYvl9FIPDrlOjHaZgwgyJ
+We0DVKHRApbtIh+NxTpQUJtanxgF60ZtOoToZe8XMGc9LaCZcrFxK/AlMdDMgUCx
+qzBbXhAcvut2bJVL5B4kLNMABrbUuFMjTNI4JxvgTXKL/jNk6XPtCjdmgIh7mT/G
+Mpu9t3i1zegAPdM5N/MAgiGHqm+blANLniSAbZja8Ny7211fwOYoJ546VPwDjL7B
+rBlymB3COoYZhql2DcBBg39cuQENBF3HgdMBCACu3VQKKmagcPbcMZOqbDXE5iK3
+0G742rCpf/j3ywnwTZJQ/58HtAi8+/fXxUhTHswoON2TwiiHrHAkObe+K9A+jv0E
+xjKVMmQ/sOCYWZDEGMth4yJnzDbT1Tlm/l2i5Lv0ZaD7fTEhtprQNuU06dveTeJs
+zDyqtK9T80mvI4+GH59wM80l1y6uj8KA4pY0PdSFgbyS9iAFADGsUsc6t1KiZ5W1
+9odMjDPlQtJ20pm5CvJlDZbYNRJ54CSldZikRvmNRg5mWdRLNfbRMFDLFfcdYLdO
+WJXnAt9cKFJC9P//ItZFrlhu3akTH//HF2kxQNW61Sd92/xtFUD/2tN1GlXfABEB
+AAGJATYEGAEIACAWIQRjXuYnNF88HdQisuIH01FoILz2sQUCXceB0wIbDAAKCRAH
+01FoILz2saySCACibIpnls5wJkfX1B/7tDjWk2hEGZYcASr0xp/DDwSgJ5edByuQ
+NQF7RHuCk0ke6IQGfytMLJlXeEIu79DvgPakxBP5iG+c095FbhRu+9nCEkRqQvop
+4fA7ZdhuerOyuObWz8+o3Z2RywWPXlK+F/9iJiO/qtvmdORuikJtN9VxgvAUvANZ
+RtlzjL296p0TJzGqXhyer46CHl/Yj7TtX6EpnZDgiaQbOWRFOZ5x81xI79bQD7Ew
+DzfrwQHbjQDkqhkwOoV6Wq239ZaHh6p7GXHnQkDMQ0H/7Y2tw6PH5VM8fDJkJKF2
+PIukJrUXa06KqrdZ9YxqvSmu5UY6tMSRwGWp
+=/wFN
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 30E6F80434A72A7F
+sub C30F4CB428DDFC28
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGiBEaNL+QRBACYhfwZdDNXVeU9G5/XsxrUgQGKkhfOaB1CyPHAd02Jyc5oHR0a
+nu7dHb6QBlY8b47pX8ii+uTCOX2yyFlJt2cuKYqN1TwHrMspDTC9K1x8WJMmKdM5
+KUtWchFQ/zmFgIcXM8Vm1851k0aOOP3Pkexv51u4kZ6tbAK2iqYAawB93wCgkv/X
+YpZR9qL0FWip23gsjjxf01ED/3cHs+5L6hm0vP4x8xbsei31/4yHPIRytLhkS3CP
+tPZGANloRi05FlPxNXMQdeI4tUk//V3Yew5LkJC7Ue0zkAKAxjyWYBBsbl20grmq
+89ZKcj0/pZBw9Gzm4indpORfPRT7BBc+F8+2TUD9jpha+W6paCLp9pFJR++OyiZ+
+hNwfBACIyapWUmoEmV4XG869hsnico6vF4WzuhHe/PfityhlHX2M/DDX0KrMqNeM
+muxYNsKoSw3EU8BS+g6bHYvxDFePPhpFIMwbtEEOul533V1sGbPYhBIiSBpnb7FX
+AnbVIYk06T5mKfaK8n9XB4BIrt/pz9gxDjb9KBuIHE0H8OkfzbkCDQRGjS/kEAgA
+madPbo/cLInRyG4EezfSMDw3wNw3Je3+Ozy12FgQE7aaUQ6a4YRLkWeldmTtOBlV
+XqRUV1MrGQ0+C1bWEAXPsrdzzInM8NiXz4d5kCVNa8WzfnA5Fe46hxUqUawSEt6P
+9QpT02mzYQZhazDMJqgGWFHoMHKQVtAqTlKH8W0D0YPRdV6Qn/VYZ2ZRW2mk0tU4
+/xBMLprmcQCrDYXYPC/apl3tXuzXqs/FA60lKZzzE+KqW53G7qSbSSN59IRCpk0N
+X5hFMZJ+/oBItH37Z5V/pVhRGytEfA9yv3IELpJ1CLtFZVS7lJTY7hsr74qRhbCC
+JAkjR1Ywz1/Ya29NUjF18wADBgf/SXXHiYR4XasV+LOngRzA/yw8yG+1gBhF/5LF
+NidGG1NnkUVk9t0APwgd5pubPagIrVqJVbr3UfFjU8lZQOLUigadk+JJ3NnhRQkQ
+NZtkvN9a53vZeORGWNDoxqnIm4RDLJjjf4pfI8tORRwNyqxWxNB4bAc+k9ysXEO+
+4qbQQmCFKzXjCaxWCsl6dXuRvQ4SKzoi63pN05o9/YG+wh/c8QCM7rZVDqIVDoqz
+hHrsWszUyHvr8Vg2uYOaIbxnWXhaNPb9R4h+DV2dITCeIrOj+Ey3MRl+vXNDqx4B
+nEq2SxFS6PXWTjqp7xE0ITKv5rppyrR231RLmY5lQxSbm0PEE4hJBBgRAgAJBQJG
+jS/kAhsMAAoJEDDm+AQ0pyp/2Z0AnRYlvIQAMoO33jBp6ZEd8GQ8iARZAJ4323AS
+sjiqTZMbrvYrk4fWvFzxXg==
+=z07+
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub C4C8CB73B1435348
+sub EA2A558279B36E6B
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+4q5nL0cFWrpYBtEUxDwWSI3K
+=qAlt
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 5E2F2B3D474EFE6B
+uid Sebastiano Vigna <[email protected]>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFijpzMBCACxAT3jijwXbI6b7LIF/k8oSGyM8ZNJpb6AQvPqKIqCzxNFXzow
+EBCasKMhIWgGy+293Tpt/DY4btJie4u+igMBS86iXrF8CUnOLPgTlAIyil/oREGJ
+1GFkHsf0Yj88zCo9H9GNiUZRNSHdf55gsgjzzFVdZ6x0MoN7Yopbvl71bcTSbe25
+AZM6K4gIf5TTo66smG9FgwDkMxc61ixRty44gkfWapzdob5d0cli0Ze0mu+2PHJ0
+Fdt2sUX/4M0Bpxk7eaGVecyb9sm6KkRaGziJ+XVByZ0UMdrEEJscLaX/UpfK+Wek
+aPQjDdyYLW90PJofKFPt4h2DBQyf9DSZ8NfJABEBAAG0JFNlYmFzdGlhbm8gVmln
+bmEgPHZpZ25hQGRpLnVuaW1pLml0PokBOAQTAQIAIgUCWKOnMwIbAwYLCQgHAwIG
+FQgCCQoLBBYCAwECHgECF4AACgkQXi8rPUdO/msQeAf/Z7IJc8pXwUzm2w1G877N
+KHGNivS5WLfuQk+bCZalLVA25aigwP/YVcF7xdQoS7aBSNG+CJzrLCyyUZaixwrQ
+sV+B5E+LsJWgb7xSvnRoCETYGeFQJdAshlu350GTVmCfy3xil4FFyAENl5r3nB98
+tJ4HgYh+NwUH9GUTBZV7SpnV7I2MYOv7mvixqioN8o51SX8AqbT3LgDko3XegtDD
+Sb3JMtTACZ/7SltVNoGvLzCOSgnj0HkU77MZQ5q3rQCPauz8Arp2vJCwOvkYXPde
+O4t8s5dGRTH88sYI81CWQT+X4w1q20CvWxUd3j3ZJthyunX5MH11nbYdXbAnGPIi
+gg==
+=UN0W
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub E3822B59020A349D
+sub 9351716690874F25
+sub 60EB70DDAAC2EC21
+sub 3D5839A2262CBBFB
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+bMW74dKTLoW6+aNn4F9nqCJ88A==
+=2g4Z
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 15C71C0A4E0B8EDD
+sub 891E4C2D471515FE
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+tiwy+wOBjaK9g3Kk8jsN3I8t
+=8Tiq
+-----END PGP PUBLIC KEY BLOCK-----
pub 9AE296FD02E9F65B
uid Luc Maisonobe (CODE SIGNING KEY) <[email protected]>
@@ -9011,115 +7781,639 @@
=G1yK
-----END PGP PUBLIC KEY BLOCK-----
+pub FD5DEA07FCB690A8
+uid Baptiste Mathus (Baptiste <batmat> Mathus @ CloudBees) <[email protected]>
+uid Baptiste Mathus (CloudBees alias for Baptiste <batmat> Mathus' account for infra access) <[email protected]>
+uid Baptiste Mathus <[email protected]>
-pub 9B1FDA9F3C062231
-sub 458AF764D812A037
+sub 5F68B9B2F1725F16
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQGiBEWjofgRBACePEiXmSvjcjUgWkNAFQ/w7w2VSEqe1vuTCrta+ER9JsvhwipP
-2/BEHigFf99TlU0p1UC591LMeYP2UXfQnb3jiyEPKxA06aj1fTGGMoNMAilymvgd
-pcixjlSJBvsmyFYuUdYK20UghL7fAU1lD8Y7TVXz0XT0n1oMOwf78qB4vwCg/bIQ
-LlFGTwqgEBBJpFJnaVk66hMD/0wMKe5Lk3rfdm/9Ku56ddZ6GTjyuNFI6sc9gOIJ
-XWuRpZUO4d7LKq7QaKLKBQeAI1NqqZuB7gtdU6ILy7OjI2C38KTCpyu+8lj97CNQ
-gJqFh26lqhtFfMOUwKvNUUsEABDy+vnI+VCW32ZT/E1xjA+nVTSjGM9lyv4Gls7M
-8pd5A/wJ3rD8XDiriM3ZV1Sn7/pt9OBxc25YHhfbTinIQBYCBhTw3wbS3d+PLQOL
-/TmkeaZcuFA0KQW5hHEjTIY2YbOd2lPNa9ynq+/1OvJOGAseCWL8uorYAmk6ztkc
-Sy4UZuNbupNSPGOt0hZixQpSB3Tv49XlFyupd7rPnYi4F37nPLkCDQRFo6IbEAgA
-oPx5Bm4+wUuVea7pqi8NTs/CkhAdAWgNnsj6tS/YzyncXD6mjc9Sx12Y6DRCkzC+
-ZTvy89nt/IHOvbaCZ8etLuBonv9PyYXu6HmGNihqg8rBQzXUlbIPdZD/1GeVwH3k
-O2DaZ+Rt1EKjnloXlpwLGMnn2n9isWUCMWjyWSZbnNBca30tooXp+cWGBnClv+Ay
-ez3jvroWCe9vVbj8/AWM2Pn5pB6Ewzw9SLmC3kgcq15XXBTgeeEZohuTvrmsNOHG
-Nh9HFEp+Y56JD8ufPOsNayRHW3ex8btx4sZhLO2Ixj25cOjDfoKZ2aj8ByCsJAsN
-U1qgWeyn/QTrrHavOTLpmwADBQf+K5Fi7IcpD+doMksWWpu68+2F4sDiHybwi1sr
-kV9oy/R6vG0SkO4DuV2/k9rCquavHQSW7jXzfZuOoY/ErK/6/bd3GpLjZNR/K2ZN
-T2aOcHVFJoQTQgKf3GDlSmecNuskHpe1pUhbaY+zWKx+DMEjcwThchArABW2djcy
-Tk0YRygxQwqWBPGI8sjquxsrqKKrjallTVokbx9rr1VwCLcxg3HFI+GJjhHkjmYX
-JANSqzaPyIamcfR8wBQEV9+IiGx/EdRTvASx7uveg5119pPtwb0g0r95SlJpoYQe
-4wiTAagxkwwSb3qWktA06gWykX5NQkMX0VK6lsNvP0tAOvY134hJBBgRAgAJBQJF
-o6IbAhsMAAoJEJsf2p88BiIxBmoAoIrGOelJKnwyAjageLevUw4Mu9J6AKCfO5KK
-tBZLsV3Wq6hCI55+iA356Q==
-=kt5X
+mQENBFFCLwoBCADxtcGi0nfolr1kGWe3jQ7n18roJFwBs4Q52nx0h4+a8ZGr7/1E
+1brakrz3t/cTSZIrhfru8kirP8cJtXBxpd/nCeRrB/4ZtXPUJiGwKx6sVGr0ix6U
+eZKQb3anH3jdGTzZ2csqt6Ro85SvIHfqAREcPOoQk7Kz3DFOGbSfECN2Wf1pTnRT
+jdF1Z5DkoTd8sGBmGOdhNMzgqMTHz6np6M2B/JVP5DpcKPbbMhQ75RPcxNEb4QSa
+HtCL+gMZiF7fndWx2Tjbpanbb5+TomfWOMizpkyziyYeUmGoyggrnXQ4BMlzsIuK
+ATz6wA5j4qfRLfoDDgNv5UacVAtWL+rlTP8NABEBAAG0TkJhcHRpc3RlIE1hdGh1
+cyAoQmFwdGlzdGUgPGJhdG1hdD4gTWF0aHVzIEAgQ2xvdWRCZWVzKSA8Ym1hdGh1
+c0BjbG91ZGJlZXMuY29tPokBOAQTAQIAIgUCV81wjAIbAwYLCQgHAwIGFQgCCQoL
+BBYCAwECHgECF4AACgkQ/V3qB/y2kKhonAf+Lcl9bj90OOyUANRNkZnuq2sLI+KD
+kerGmbwG7FJCM/Hvq6MgtNaXt98RfU7a1aBmmM6uTOBFko+7o8QXocnU/2TrlsnU
+yMHsFfO7OQSQJebSSyAyE1vy5VYzblsqgfs7Zreb3BO/awzr0GZXjR+g/q6ivxhK
++2pIkdfuBBkConNzoPqSC1f/F4qZuCi1e/VM5LmincIUEnWUR/PXpgXOwu/KoyzX
+X8VC/Vwk73vGaeBN3avCMVzNUmyYXELzcimcaa70ISKReUJvoYqHEDyVcMk9Yzjn
+VosDTfun0kUcfs2nd0ZySyygn80JHsZURIzEAnliz56lE8Fq5i2MO9o0ErRwQmFw
+dGlzdGUgTWF0aHVzIChDbG91ZEJlZXMgYWxpYXMgZm9yIEJhcHRpc3RlIDxiYXRt
+YXQ+IE1hdGh1cycgYWNjb3VudCBmb3IgaW5mcmEgYWNjZXNzKSA8Ym1hdGh1c0Bj
+bG91ZGJlZXMuY29tPokBOAQTAQIAIgUCV81mXwIbAwYLCQgHAwIGFQgCCQoLBBYC
+AwECHgECF4AACgkQ/V3qB/y2kKjQQQf+K6NNaERzm+5dkPOdmrVQQPAXrUxGW6b5
+Bsx12mU4qJKxQsq9tKsw9kdkvlP7rVhJATBk4J3ZYGWSqQajnVcAxznlWZVksWqo
+rCtYAH2+rhlUBo7/mvDnCW+z0vfEwBS4vQM3Oo83CyOecSnn98wp+W1O+TdCZVAf
+k8UOrODdc55VpXoQTw4PZ2uGr/56EFNYNXia6O7H0FuyDM6g5ilFd5Wxpp7qS7D7
+zJkWciSGmOwcw4NeeAMAu0bv8X9vmom30EEoFa6o3GHUJz0/DsbaoAOxcVMIymY+
+SzQQ+XyaHpTeRdpWB2qQo6BHSktm+vxp54811qSwyqPp0uKjHmVFLbQnQmFwdGlz
+dGUgTWF0aHVzIDxiYXB0aXN0ZUBjb2RlaGF1cy5vcmc+iQE4BBMBAgAiBQJRQi8K
+AhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRD9XeoH/LaQqLyjB/9diBWw
+NMYG6UB3ijZYyUo0P3F49JcboW8U8vtGkDjZU8bSHkDQX/1mstMSTPoO63TrszRh
+UCn7lMxHfDaYVhbr6N622Jc10WhGiJICPGSz4azHdQA4e2tC2l2BCMnq7mvJ0bVx
+uqVb3VE5P2R884g3K8Jq3O3tjWTten5Z63UvqPcPmpN2C8WoI4EDWqxTAxyJs0GQ
+hNnfPDKycIpv7ESjprJ7c4oo/K0YUtlK5rF3eNorZSOrj6adsrdcf7IMvQxnI2Ro
+tFr49wqdvn3fTW7db+1qoXAvsHV7bHZPxc4OmOeCuqNOoh4J5ftROO8o0Gi/wC4B
+bniNzu7SndfMOTjXuQENBFFCLwoBCACaK5wadodZGLdBAAcRg9rwBzPy+F7ZXdwQ
+A1kHo0Z6xhQJP2/X3C/rEgKW59QhBLyEMBPELRtO5vTC5UYLu0pHK0XsOEacFVTW
+GQ+gLGp2UkScAJEgAQPYNNWrAz0MoAPQ//RW2Byph+WBVtgnP09nmq/WcXjv0tz7
+FrSFW/A0uADkcEdWGx6ItNiHRAZBgO4uzSY8GUw2YSEBjAilDwVs/Jftj5dlJlwI
+JzA0VzNIFunKwBTicMHSSHRNic+zlxMOs02a3XK3NBPv9a5DIffZuU9657rHmZM9
+zaS1PyHsMbpZsy+hFtxMFfVuViojg63ZC5eh9C/ghKCIbP0F+L9tABEBAAGJAR8E
+GAECAAkFAlFCLwoCGwwACgkQ/V3qB/y2kKgcqgf9EGoznHgOwfohcWsi6uIuLgsT
+ypd2f+zPAYpgySP8LK2+UZBnTzo6zxtWB0ZZAj8ICdciVOdcSYim/X29pRzygKYD
+JpHh7ZvvxeB9bxg7Gfd8Ml5Ycdf1x8L/Psi8kajbkMczrhClxhAR76Zqjpm6gvyi
+e+21f6qAnx9B+J5jQpN6p5uLg1Ac3dU+kY9MJLL8qy53yXxJHfcF+hMoAVZPajU2
+fzySiLttENnxXHIqJiYj/N53RJmcQdYLNjQNwfpq01DJy0k5nvXDGCZmgUB2T7w1
+sVIIF1w0sMxaEy8blxB+j25b3KhYYe9NiQvK+/gthDgWyhkHs2UALPQwIfd9ig==
+=YlII
-----END PGP PUBLIC KEY BLOCK-----
-
-pub 9B1FDA9F3C062231
-uid Brian E Fox <[email protected]>
-
-sub 458AF764D812A037
+pub 5B05CCDE140C2876
+sub 9D29AE4A6B50E01F
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-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
-=o0/H
+mQMuBEwVZOURCADNnKQzSjFuI9/IGj3WTJcPU2B/H8NbZaTsz5WE91WumgZulK2q
+YeD4u6zdOyFK7DEScgxk7dicox9cNEgYKQnQXctDhfqER9bnvA2iJ+AFxjRAWyvs
+en3ClYLXT5UVx0H1ZfDVKCvmaZVirZInfkqbi3OiPQoWrUfu02c3DiHQJ+Y34kdB
+egH2sIShNH8WLfEZ3YDQ4XaWHVuN1C7VwCBM8R3OeTTfyDrTsuyqJ0SeZXRR/6df
+2pEckjF9DNSXyjzFg24MrZhuhgbnj0oR1zmRh1EF+KlBfF4DF4acfxWqqcJVJx/3
+FTtOkLe3Xjj+inyJgxOW52gD4DsJpyf1tIbjAQDZvOdlRRCqZB4FnzzIb/1GmkGD
+JpDLC4MQmqgxkm0n8wgAmmHLpqDTdmuyJXvdX9RdGycpW64sljd1mpzTWJ8UKDhj
+uFQVHSSEdLoHoVj8ItnBV2kXd2uoQ/tWzbxFBST7wE/tX0e9G5XWaPKogvOKeDus
+u9XTIds2krYp80UTYWFZ88oNwGikdIrEYURSYDsYt15miROtKHWbSOHeLVbZqgVx
+dtWPqQVfH4gJGEH97/OSmozqDVog1aZDKBLGZQosng5h4j2RAQpjkaIdxKl8m7CQ
+x0Yi9tA8yD1QhRGggANQIb4n00G/vm7RMU/7NBvvjAQ/nAFjbsyO5oX1rBY1M6Xo
+NFqIBrHSBzV9MmhS3nXU+ZjAktCRhyJ7TsoHM0OYEAf8CduM5Zzp5w02iVYkFQBB
+wAoKHMpycW5LhMMMS4w7gmOfP7y04rtg6+zVe41y6bOqn/SxHCcCgnE/nhdexlzH
+ElYE1H7+HpphoI5vEwS6uElF67CoO5r74Zrb6nshGEj2AoOqjbrsdQm0noBBNYAu
+f9RsjU0sQQFzLW8+2xahqK3oZkLWOkSxzLtVwJbm7EGaGIYxEBjg87OnGQkAi9vv
+tVPwdO3VWyvgKLuPHudLDhTpeH3AMbzKgnru1Pnh/ZpiRhPzsbuFtFPEX8PMuCyE
+n4OLzUALl98kXuPjG5ww+24UsNgKMbKbu8qq/zRu7IHlpZvd730RoCWU2/i18tnY
+zLkCDQRMFWTlEAgA+MQFGIhyA4Ww9g7J8ZiEltwSzRblrjM1q9anexsBIGsWH37A
+92rlVK1RzMVfhj5yl+BzIBGO+zHbgycX7iB5/Fwsm+6R/2Uich6NDm1Qai9rc/jg
+3MS0phOAQzgxlGKOTS2GzdbDJCBQMijDObNe+Cs5DNB/E29/nzzCTQvtRzSeplZN
+r+8Q8lWz6efXmm5EeeZxN4x1YXjjzMJCHbc3yGxOjTgYQOs962yUYsg9UDRJm1OH
+9NKZe1m3dTRIMUcZvL12dq/kyiHHR9V/6CkdiNw1AFMi3tvEdvX4D1k1/Qr/2ORZ
+E4lRzgug4sKkpgaclLnkJZ9EMczmUFTGbbkx3wADBQf/Y+2nZCJSuHiDv/+SdhQh
+OBapZ2hYPDvg29mpPqin/LwH7eFTNv/oos1wzuzGtTHHGEP5mUQLOxjwdAXsWMMj
+scSbCs66ytTN7X4O8qh+1yN7vrM6ZBL12Ix7Ku40cgkWyvTVLBXKaEGm4ElhAmSL
+Fpu+/fJw0riR6rIuwHcGB4R1IJtMWcj+b1odgw9QmJ8AGpHh2WVdXspoCGnTUN4m
+DEswZjplkKXCgLypU13SrHVOqhjd4caK5GNZUfWtCKtwNcJMnvgp2truMvh9BBn6
+widfK48hEknQtXzGjui+bZz2/AD7/OT/T1CqDspB8IQlBCMBn8J4U1grSrZ1wTJf
+HIhnBBgRCAAPBQJMFWTlAhsMBQkLRzUAAAoJEFsFzN4UDCh23wsBANDSDn2KWz7H
+b5geDwUTX4T8Uqn21eFbp54tFTfopCd/AP4nTdX1iahsClr9q6G+CWQBuQWHVmq3
+FlPU/jTn6vXQwA==
+=dKtU
-----END PGP PUBLIC KEY BLOCK-----
+pub 7457CA33C3CE9E15
+sub ABE9F3126BB741C1
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFIXyRQBCADe285y3Pu7KzoKyP6wqeNXtvvuwMatAmPm5x/i+S8MlryqzsYa
+x6twUmXV1yKjjtGrO+9fHvTOWBfSSP+fP9KTaTQYSasoJq2Mw4cQDy1i0zrxNZUw
+N4/BiyjQA25sdfaOolhO0sFlZuTZpYy5wG72KkA1ygNq0L+8aBKhEF6zDU61YzCC
+AxjcgTftgTeeoqkJtYa06lNz3jmJDN+zUQignfRa3ymoGtFHTzoXR9maE8RWDty4
+y+DY+8ibdGgSgKPZ0byTCDyNojgU1YTlADa/1/NY1ShYg617O1xicLNo0JEJlf2U
+Tu4Ymql36+xSkYSISU97Q6Utgq27XMuZvDUDABEBAAG5AQ0EUhfJFAEIAN9NHRd2
+bYP/3CDi+n1ilSChld0NR3DUBgS/AdqQ7IoAUfj7skyI/WyaMdV4uy6vRh5YgNg2
+g01nd0LLZR8Gf2Ck+D6F88CdZaTxlkcxHV/dXMZ8yBO+0D6yFRZEL7Imsv8Ig4QX
+OVwfuiXEPk/Ef5Dy9SdAVhcoErTGGR6BOGVVvexGtBwefsjMaOG0khkRbWIQ32Wx
+fUFuAv5XBQ0ckLrlKvYWUYhOlXg27GtFKH2EBBF0Z5ZWu7gaBFwSV0oLp9EWcD+C
++WEwUSfBdqfRJtyXvgf4kZdwdQ5caM8P2/Sdncl2l/LU1At2Smc+plr6zhIhDlLh
+lrzKGa16oARSBdUAEQEAAYkCPgQYAQoACQUCUhfJFAIbLgEpCRB0V8ozw86eFcBd
+IAQZAQoABgUCUhfJFAAKCRCr6fMSa7dBwURMCADHrqwRNHkbG1QsXJr9oUK6KVkL
+sPhcngIhxRLlqe89omg9G7eGNauzs2PKsB3txotCFc7ROVNv/TAuSDYzkPos8G46
+p3bGesjfJb24zc6GMT4RGIJoh1oNG1IciafIIHjp2ZJHRmEDwmvZG24OHJ+mlHLj
+aedtqlWu+zwwhH2VZrI/U3gW/x4imbk9UyyzciEIxrAc+fc19xl5PkUVcSDVC0cA
+qGpeZz8+SxFaf3Rr0aGnSbeuHRjNupmoxkQOAey1ztmdWiCPf5RFfmFD+fENh+/x
+qYiGorYpcIN7UAsMkvD5UHc5ZG2tTD41jM99w9Lm/xHJ9ks8gNwZESwIzr6ABKIH
+/1ulsflI216qPz5o7uUxlTm8NfTyATfCUuZEDMYGOjDQPqQa8hFebqjWWYBUq2Sl
+aKD2xMeEuEXV+M5k88Cx6T2nvaZWMsrD7uGj+tTsFaKBGxP5p2OSEWOTETKKv6Cx
+7vcMTQmrqSFo47bFKlNSs+aVM48UnQeFtTDyOhwa5jvtqtst4eQHwHWQ99BK0TEy
+mNx0vF0nPjWA76CRrfopOwXKdxJgoKq4MrxE92ot5I82AZBPeiWVJ+6wECeK/GoB
+IXZ5jEUqrQmmzIboWA5G5PMJ8egzLJNRJjTWHjCWrUTnwNcqaD4/qZxIlW4Lt0uv
+Glx6pKOJQ05u+9X/BzoVWrw=
+=ajY9
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 164BD2247B936711
+uid Marc Philipp (JUnit Development, 2014) <[email protected]>
+
+sub EFE8086F9E93774E
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+Qw==
+=iceo
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 912D2C0ECCDA55C0
+uid Emily Johnston <[email protected]>
+
+sub 37AE8263DA3084E5
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=X7Ws
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 2A742740E08E7F8D
+uid Terence Parr <[email protected]>
+
+sub 74C249541619FF0B
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+jJNKSYyrKuT+DCAd1uFvcTw=
+=SigC
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 11509ED50EC155E6
+uid Konrad 'ktoso' Malawski <[email protected]>
+uid Konrad 'ktoso' Malawski <[email protected]>
+uid Konrad 'ktoso' Malawski <[email protected]>
+uid Konrad 'ktoso' Malawski <[email protected]>
+
+sub DEDF3A7EB400D53A
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+1+61dcLTcdUOi2uBhwZG67Mpp3cSRw==
+=lHW6
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 9C538D5A79281639
+uid Alec Strong <[email protected]>
+
+sub 81176177BB514041
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBF3xPHMBCAC7OXU5uXXKttUU/BwWm6q08NBC3ybk0fNIfoITWiFA1RtxO7S3
+K4ijImBnLLb7ivjpTtIWzUwFAfSZHc3LgS/TBQJQ2PGsO4/AdaMAcs69irgfoPYY
+1sJkR/Iw/C1gi7KV8PR/vwIE5N6wVll42FMGjBvKl7wTmvuHDou12tANXWJp3X3M
+5qj4eMK5fIv11u0vPIsmBHQTPzZN6prxAEp8Dm3XDT7OCZxfCYsy1Rl6zUIY01ai
+/lOk6YAg6IjHqGyChlJnhQbmvu4kNrRiKRSElikiDDra1Ltj66AGD86O2yQ/21ha
+muWwm0GWkl1gd3k3BOy7EhvDTAE3RFi4f6TVABEBAAG0IkFsZWMgU3Ryb25nIDxh
+bnN0cm9uZzIyQGdtYWlsLmNvbT6JAVQEEwEIAD4WIQSbvBw+QIygnPdtGgKcU41a
+eSgWOQUCXfE8cwIbAwUJA8JnAAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRCc
+U41aeSgWOWEcB/9tOXz5kHKjfZOFKjP8v6lmDZfpJmt1oFngOLVm/fjqMrP1M47w
+cTCershV8DW2LWIoAh7p5w4/9c6Uaa48YptT5JqAQ4G21Fy0P2bAZ90uDYRxoY0m
+ybXiH9lwTWgrj7X38HBZfZthRT2THLWXYlYhbsxQ3s5Kfj0gdAN1R3IMm+C5bjxe
+n3X7fCcShwbb+rX0yCH8uUT/kjVJU0KQHXwih6QcknkK5pIpBfLRgukAf/qYY73b
+K+lUBXBxxiYUGc+ydQi0huEpNOTNokOh9PB30wBwccrLPLeWrpakGpUlNv3gZ/sI
+cHXWDtBB2g8KxKESfWzoroMq6y+XXe3ubjE/uQENBF3xPHMBCADGJu/jqEe5/eot
+oS3YqaBATQPZyKgYisyA94Ivo5ZrRGwVACW3aWbzeGdGGr3AazWmvhfMovSp5Iuc
+yFTvjIQwlNetAXHuZUi5sN4I8o0sDPER7Y2RqBfZcvU98CgTziJe85iEy1Vx0NVJ
+OSd55ZeLtEjeQbF0MNljrU4j4jqt/NR20C0DrJ+tgH4tGuo7n3AWmCSwzoXRrzEJ
+dkqf9IWXww21MjmOYGEOSClUA9L6HxeVrZX8IauV1eVeDNyTUbC5eVAhV4/8TiMM
+6KbBRUsPzW6TXbo2HTAtRPsvzM2ssC3QWV4aafLBN7MadK51ZKD1ZeNnbPvxGWrL
+XDVaXDZvABEBAAGJATwEGAEIACYWIQSbvBw+QIygnPdtGgKcU41aeSgWOQUCXfE8
+cwIbDAUJA8JnAAAKCRCcU41aeSgWOZNrB/0UbtDXcjpzehkR73Xc8dj8DLgwMANh
+5Jr/dHf/ZENXOIORuN2uWg0Dai0mZ+gPC0jb2qNK0MdTbHRNHPEcS0UX6wDBX0Bc
+BcbW3nesQXv4LYJY2DN8Q0vtxj2Ra/4FfxT+lZn3A3BmHRu+Aps9nmJoGOh06ThO
+e+6KezHnYmmo8IDzS3JuyGz8ma29Qem71VDAMlLNg0QUN3RJc7nSLdwoLUDJWmpm
+WXmOR1JD0iewyjuSmKHuizRPPNVMbg9R+eMPF9OECheR+Pseu3XTqCyqedEDItwb
+htywBZaReIkxE3VIhM7CEI9gsVAaNgoe6Q7BXIk3WMDpo3t6JWORF/PE
+=EwZF
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 296CD27F60EED12C
+uid Charles Lee <[email protected]>
+
+sub D95ECEC170500D9F
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+pbySzrh5PAD5/2W6CzkFMpH6a6E=
+=sgH/
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub E6EC76B4C6D3AE8E
+uid Sandy Zhang <[email protected]>
+
+sub 52410ED7B05AD2E9
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+MmIzscVR5uuvPq1m2aUkkKLFWLBqkpuelMmW
+=W+so
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub A4B1A03FB9C2CE23
+uid Pierre Yves Ricau <[email protected]>
+
+sub 21200D723F53CE38
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFy+swoBCADGyV4k02OjVCrziziYIvIO+qDm8Yqxt4KVd+ISw2DvmKVcP7lx
+z5WVGvxVdAl+Xy7FdcrIJYFCsYfFFxPz+BM6+np2c477HkdIcDwBWiHEoOqMehax
+wlEBhJdJUVCjTKvpMgqs4/a0PddNcp/odYx20HzDAK+X6/EgL1McZk03okfMSn0R
+TUvZeh76SbU0aQRXdGlSs5IUtywn2f+5jUNLht/TMd/bbAXWA2EQo1UallY3+dj8
+I/Y722X5Yu15rLu8u+pcVE/pMO9CHeX78mgPU2xU/xwDSGtU5lxwNXnYpHMUdFB8
+YtG/ofDtZR9+9Dcjhb3xSIv6Vlui9HgOgvctABEBAAG0JlBpZXJyZSBZdmVzIFJp
+Y2F1IDxweS5yaWNhdUBnbWFpbC5jb20+iQFUBBMBCAA+FiEEucyhPFnyHGzoQajR
+pLGgP7nCziMFAly+swoCGwMFCQPCZwAFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AA
+CgkQpLGgP7nCziPuugf/fDa86INrKZ08fCywB6oMcLEi/sNBbaKaysbp/zmmANwk
+nTWrIH6fqfQfkFdBpA4roPrjCNqQ3gdpjDhB9U7IeqpUzzeM+WEWVOlkA098MFrj
+ToJuxf7oCMXCPAtW3S+tGM1FdIFtqzoE3mdbhde/F0ppJDIbuAZfjKJclIeGj7eC
+6QbLua+IQeDKuQ6TRuFCc6vWl38L+LqqmNPxfw7Uta9W7CrP5oUYQqrdIszeVWGV
+ivK8cyLltXgIKcWJmj6GLsJtIUuXAj3kg1d05HQ5dpIkgaRN7+Q9BnsTcdnc+R6r
+nprvl+/QNk6XeNIRrPKiv7SWf1gYWbi4CpthjNsGy7kBDQRcvrMKAQgAvap3U+0R
+j3ZFSth8u9AnCrJrClbNtysMEYmpK0JgiNpaCDbw5lPv7yJyTPjnGTLSS2qx/+C2
+2Bml6b7lV2JgCXA54p9sa9Jpw5Mili2rx/62M0VmqMCNZi0vCxBOlj49fSpyxfKr
+IJ8eNwXd/XbHl0uKm+AYCJgtmBE4+ErSb2tJ3iEPqRBq9vYXnm1LKIZVKHzZr1Gw
+LS039UfGBFtlChF7ED7wQ4XuODmz5dx92tkI6svqvOuXZaTP1PDTqu8l5+E8yd3q
+JvonloHroLKbTDEuCtpn4jDSN/LZ1C7ekRu9OjL4gChvs/TJsPwkVka/rw4OWEOR
+KQfo2iv64g4NjQARAQABiQE8BBgBCAAmFiEEucyhPFnyHGzoQajRpLGgP7nCziMF
+Aly+swoCGwwFCQPCZwAACgkQpLGgP7nCziMSkAf+L6oedz16wE0F2ZYc4UM+J1bf
+qS2HEesB7YGTwnafi14xRQorvFOJ+CxfyDnl9HGCbfwqie1wO7VNQukhWl95wJSc
+Or1Nv3XPnHq6RKpBQrIR09eggfegf1N67HmorYRkfA25fwe9KmbNAUfPiKa6Vyrx
+6htiUIK1V7ArKVXwBL0saatdOnwrxOiHKBbxyy2jyZgt+rHKNUFmQLiiIvqg+krh
+sSksRMYzjG3Y96Wm0K/IH0XcuiQkVaHPOYSEqODz+miiS/PSqbw+WhfSNtdKfKDx
+OS6mrMnFluqthJ06aXBz+RmXGPtzJvKnI2LN7lwoGXk5zynZK8AXpTOpWED5ow==
+=Ig1p
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub DEA3D207428EF16D
+uid Dexmaker Team <[email protected]>
+
+sub E8D0C72FC5A02B28
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=Uwhf
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 3F36885C24DF4B75
+sub 97859F2FE8EAEB26
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFmfSwYBCADdZEuR8cs2ejLLW3+Glxiq15rVbHbxaWmmZApGNijFro/LzFrR
+z+99N1mnA5+Ar/yKmn8lsCiTWukGQzWbdH/QSRUdyHtzxbCSeONdMhdKl3sJY1h2
+jW28oYL6iOMtNYe8qKoCrHRtyTl7oqYtYuhMwdNedGrkVWPrInmg0ILUSz9RufCh
+6KW3V3eAwz0LbckpSi9ZNyCNssjINvr6bRf10HMucViAB0O1DjrwO6aiFnatTCyO
+ig5MMZjgRPKjMASsPG8Ri1xivBYS/tpgamQzq+htWkbEydNv9+g31S5sN0pPw2km
+e8SjKp3C8RkSgz+dJz+P6tQrmGvZNs+pm2M9ABEBAAG5AQ0EWZ9LBgEIAL3j10Fr
+ODkE7yVreTlYs7UrZGaJwdx8stENYdHHA7MmDIMkVnjAOkzAwW4zRXdtFHqICLUO
+L4ZRnAiGuyxiwvxXM7NuGgCfC94M2w58xf2JREaCmU5kII/O3KOv60y8+QixFZl/
+c7p3YOGwOQEEit5445chxYwM88Bq+LgkXAn9zNnZbOyUv+E4gx17khkyZOXP+Z2P
+d606+KRvENLlFbrlVaJ7vzGiLhvIr62I4g3hJj/ob5nXT2tZSyMN19bJOtOd48R6
+NXFDmVC3uLWBgqLK1UgV5SylyKg6N32CUdds6E43DHLVUipawknN4QDc3s+ok6j3
+nN688afjFCLQVE8AEQEAAYkBHwQYAQIACQUCWZ9LBgIbDAAKCRA/NohcJN9LdaVO
+CAC7wk7tKsSNDxLhcq+Oa6TrE3JDQUYx6xlVsw0ZOq+TIbk2D7S/4phY+YSUUqWZ
+rp2vpFlszbcJXx41+s/ljfNnkMVjoU6D/A3R0az9weFfmq0J8CoJeP86CNxCiRIX
+d1rZ6wHlc67QJZe/aaYzxOO8vkzkeEiDaXjvmaSoADucbF1c6KjQms/yJ9nFz/Mk
+FPRxWntD1UkxNLh8UQZhIZFrAmhpgdDa0xq0VCJwL1ZLEo+cm6wKTZb6iRnSqPbu
+fwS6/GYF9IKUp/WVQvhZ952mwzfrz9r1PbTg/fOo+MOGywdBZpEEPTL5pvfrrOYg
+5q0kixiYviNzHBn/YKmH2ibE
+=xwpz
+-----END PGP PUBLIC KEY BLOCK-----
pub 9C4F7E9D98B1CC53
uid Benson Margulies <[email protected]>
@@ -9213,284 +8507,1821 @@
=gGyT
-----END PGP PUBLIC KEY BLOCK-----
+pub 6425559C47CC79C4
+uid java_re <[email protected]>
-pub 9C538D5A79281639
-uid Alec Strong <[email protected]>
-
-sub 81176177BB514041
+sub D547B4A01F74AC1E
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQENBF3xPHMBCAC7OXU5uXXKttUU/BwWm6q08NBC3ybk0fNIfoITWiFA1RtxO7S3
-K4ijImBnLLb7ivjpTtIWzUwFAfSZHc3LgS/TBQJQ2PGsO4/AdaMAcs69irgfoPYY
-1sJkR/Iw/C1gi7KV8PR/vwIE5N6wVll42FMGjBvKl7wTmvuHDou12tANXWJp3X3M
-5qj4eMK5fIv11u0vPIsmBHQTPzZN6prxAEp8Dm3XDT7OCZxfCYsy1Rl6zUIY01ai
-/lOk6YAg6IjHqGyChlJnhQbmvu4kNrRiKRSElikiDDra1Ltj66AGD86O2yQ/21ha
-muWwm0GWkl1gd3k3BOy7EhvDTAE3RFi4f6TVABEBAAG0IkFsZWMgU3Ryb25nIDxh
-bnN0cm9uZzIyQGdtYWlsLmNvbT6JAVQEEwEIAD4WIQSbvBw+QIygnPdtGgKcU41a
-eSgWOQUCXfE8cwIbAwUJA8JnAAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRCc
-U41aeSgWOWEcB/9tOXz5kHKjfZOFKjP8v6lmDZfpJmt1oFngOLVm/fjqMrP1M47w
-cTCershV8DW2LWIoAh7p5w4/9c6Uaa48YptT5JqAQ4G21Fy0P2bAZ90uDYRxoY0m
-ybXiH9lwTWgrj7X38HBZfZthRT2THLWXYlYhbsxQ3s5Kfj0gdAN1R3IMm+C5bjxe
-n3X7fCcShwbb+rX0yCH8uUT/kjVJU0KQHXwih6QcknkK5pIpBfLRgukAf/qYY73b
-K+lUBXBxxiYUGc+ydQi0huEpNOTNokOh9PB30wBwccrLPLeWrpakGpUlNv3gZ/sI
-cHXWDtBB2g8KxKESfWzoroMq6y+XXe3ubjE/uQENBF3xPHMBCADGJu/jqEe5/eot
-oS3YqaBATQPZyKgYisyA94Ivo5ZrRGwVACW3aWbzeGdGGr3AazWmvhfMovSp5Iuc
-yFTvjIQwlNetAXHuZUi5sN4I8o0sDPER7Y2RqBfZcvU98CgTziJe85iEy1Vx0NVJ
-OSd55ZeLtEjeQbF0MNljrU4j4jqt/NR20C0DrJ+tgH4tGuo7n3AWmCSwzoXRrzEJ
-dkqf9IWXww21MjmOYGEOSClUA9L6HxeVrZX8IauV1eVeDNyTUbC5eVAhV4/8TiMM
-6KbBRUsPzW6TXbo2HTAtRPsvzM2ssC3QWV4aafLBN7MadK51ZKD1ZeNnbPvxGWrL
-XDVaXDZvABEBAAGJATwEGAEIACYWIQSbvBw+QIygnPdtGgKcU41aeSgWOQUCXfE8
-cwIbDAUJA8JnAAAKCRCcU41aeSgWOZNrB/0UbtDXcjpzehkR73Xc8dj8DLgwMANh
-5Jr/dHf/ZENXOIORuN2uWg0Dai0mZ+gPC0jb2qNK0MdTbHRNHPEcS0UX6wDBX0Bc
-BcbW3nesQXv4LYJY2DN8Q0vtxj2Ra/4FfxT+lZn3A3BmHRu+Aps9nmJoGOh06ThO
-e+6KezHnYmmo8IDzS3JuyGz8ma29Qem71VDAMlLNg0QUN3RJc7nSLdwoLUDJWmpm
-WXmOR1JD0iewyjuSmKHuizRPPNVMbg9R+eMPF9OECheR+Pseu3XTqCyqedEDItwb
-htywBZaReIkxE3VIhM7CEI9gsVAaNgoe6Q7BXIk3WMDpo3t6JWORF/PE
-=EwZF
+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
+WugIjrW6eRqMfhWIeF6otn/vBGbp44U=
+=+bu2
-----END PGP PUBLIC KEY BLOCK-----
+pub 689CBE64F4BC997F
+uid Szczepan Faber <[email protected]>
-pub 9DAADC1C9FCC82D0
-uid Benedikt Ritter (CODE SIGNING KEY) <[email protected]>
-
-sub 923C08F9417B222D
+sub C0058C509A81C102
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-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
-uGWBaZVODvhr9hDoUpp2+qte
-=rXX9
+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
+B1jblPtxo2UqRO/qhPfqSkoVcpWmxgiPUFOr
+=w8k7
-----END PGP PUBLIC KEY BLOCK-----
+pub D4DA5EAB3CD7E958
+uid Jiaxiang Chen <[email protected]>
-pub A1B4460D8BA7B9AF
-uid Mockito (http://mockito.org) <[email protected]>
-
-sub BA6D22590B3F9BEA
+sub D826E3935EE9DC71
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQENBE4waOEBCADHDHNTq1NRR5TSooIrKY0BTQnaLfjKZfcJOwp+btBJrOUO7+e/
-V3M4DZQclj/e8SBiVmRPK8Oyrv6i5B5+Ee/qNlLjWiO10AJ/PLRjYdoW1V6PlTm7
-2aUxQ/wNXxDcOoH8M7Y4fEqZJ3rFuta8ogeIYnkUwUk3gc5YKk7KJDbiOXQfRxlY
-9MeVKyoYfj+2Szaaz98W097Pqf9+7i3WjB3TKR1pnWlzF6rLWIGBJqcJuTGLWUAB
-hwOMoNiIBAqyGu8E4rT8pP9OueprOeIjyKgOBWV5yctIxd7uu51sGR47TM2wmMmm
-r/Kz8FkMr1efof7Bx4mJuup6wQXonRMVBqpLABEBAAG0M01vY2tpdG8gKGh0dHA6
-Ly9tb2NraXRvLm9yZykgPG1vY2tpdG8ucGxAZ21haWwuY29tPokBOAQTAQIAIgUC
-TjBo4QIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQobRGDYunua/0Ewf/
-QRv2EXl6rlgV9LgXifdgD4ctYsMvhmJV0uaAaTvTcNpbYL0lG8FpCs0KHvBLWkoq
-esOdJYT4q/9msnBAMXS/9ckteDism8BwZR0qi9qzASzzMJEH7cdpr1te17JR0fl7
-8cgbGyw6UGfRSay9c3HyV0rCuQSFPMwQkG5YVpRiN6NSnYqDczS+aSjd6JCKu/4I
-LVgu4jH8oaUcGJEaWLmExSUzrUv9HFZXQJxLzrFT4k6AVVzBQCuEYW9XtgosKwfo
-0GweBXkC7iuO+bfNi84vyRLTkK50h4+rVNkyvNlgqknbeGrpvOvGErYJy24API/5
-TNP+ZLCTl7Y+qQejTFVJ4bkBDQROMGjhAQgAxDjlr6Oakgs+5d5NcIYpJ/8S5BIU
-aVlmjKoaFJoAy46WzvvpaTC022js1ZSvrM8wlSxSk+kD6/FAJw2pJwRgVrolOYJQ
-mqLqgTA2QSN+leWo0x8gC1+QXzrquCOd7m/+h8FHUDaxc29XQ+7+HtNvsSxY9dtD
-zgQGXjPXSppVCSiDNy1IuIAxmEAFSxok12Glxq/n2DFx6OnVB+5vvt0C8nQ6w0hQ
-AQKPUmO7fNav5lZMfKgR95NrvF1Hu5V6DZvpbXg6+NWfA8LsCampARrou5qzy67h
-b/+KKGHTDMOvZZlGw6oSnPngqmh06QqY7P4PKVkOo3Vb6+02ltyZ95RgmQARAQAB
-iQEfBBgBAgAJBQJOMGjhAhsMAAoJEKG0Rg2Lp7mv2b0IAI5pDzLtBGxYhmO1rSDg
-Y+JY7ZAr4srW/7K6Zc0RmWv48JsZOf7T78kIrif6jrF+ZwBLrdP93umMr9aJ/mJg
-lr+0oag0ZVhEW6Jb7dgiRn8F9+qcCs6lyozAG805oW2lULkwqSJ1xNs79v9RtOWl
-I5ruLVbS7XhGv0qH+ly1xpIuYOzNvpOgj1pC3Pv+NuL2hrLUZVg1vM9eCM3TDVbD
-yJZrxKdMemMSGHHsXWHtn8t4BT88kice4weDq8GBl1Dx+ApO1+iHj779nMX1Drfa
-xtJLTRqH9fhHesISmte8fPiydGT/HCA9quKUuxyN4W6Uwu+Uov12cGV2sAI+H5qP
-hF4=
-=FXjQ
+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
+=E4ez
-----END PGP PUBLIC KEY BLOCK-----
+pub 88BB19A33A18445F
+sub FF59C22B07640A16
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBE//SjoBCADao3lh/I96fWIY2ZU49ljtHR4Vnzmifm3URFNuv/c8McWGxxCy
+Y1+oolgVuJcy4hCqcgbkwTiAfBhjZSmsC1QK/2Vs1awFzGccPcgTBakFw/TUav12
+6Zb8y72dH0VxxcN/HUGBUOSgZg9IMe7AmmVnxbJ2ED1I3/opkC6ElPXFOl8EJdgE
+Wvinp4ok3mwBGMIexQDyEN4DviuqvmB4K+gYCjS33HtHh4OrkXkCO5pDNUDgkAZK
+1uG3GfmxGBjdG6nPWgIuDMEL3j1cW9r5D6I5obXsFlg6bX8mBs91jAtmfTNv+IAB
+bwUOAJC+9C3ZEIsZOcBSSdUIXmuRPa51oP9nABEBAAG5AQ0ET/9KOgEIAOokxMbt
+TY2zLvdAWD9xPHj1kZPThN7o52A9Atw0zKjiNFl9jy+IFarPNdbMzwooQWgx5Y3S
+bKdSCSDlP74psEMOttEdw/23wt3oG70I84RveLuTs+dTDRAd5w8jxLXhjm+QxhiE
++z+peVhfe//u1+kn2vzesXMIRBdQTikjIZ3W5TMgu+RV7Fgf5zUWTEUTns1kmM99
+XPhOVh5BIr1kkty/Fyg/1Wg87leM3WZUoe/7bnWju+YSgjWvxwv8HEBYPKciNG5n
+0oOPoU3jkyEugJafmlhAt3CAgmFbfrJgkncXPvow2xK312iy0xIslAqm0dy2+E9j
+hYLlS3p3J8TLPGkAEQEAAYkBHwQYAQIACQUCT/9KOgIbDAAKCRCIuxmjOhhEX5s3
+B/sFcywEwoA4ylzSSsVctp7pjDczczlD1MnvCNP9ldzzU2oOGAduvF+zzJNL162J
+qMd1TMYnYROoZhIS78He+LriBSjCsweKDqEix12mtuWrAICpF3UcY8WLMB6SXgXP
+qnZS1cw+Prr+NVnuR+0G/cUJieVdKO5rcYuwrs4OGh2rEMRCksAY5FAMe1lSB4mj
+9jIGKW0B31D3/AxNlQuN1aRzGLj72k6d7Q91OrbQ1+yG12CLwSd6mS4kVBFjppUD
+JCKN+HD8NGQ9EtyiVpx2/gmqshFVdwUgAqQ4tKtFI713bi8xz/oNiHkOfclHdgMM
+E1GU2n+gEnCLRpmC3Qqmeb0n
+=2JQQ
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 94B291AEF984A085
+uid ReactiveX Admin <[email protected]>
+
+sub 9D149DAC4AC24632
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFPzzfABCADK/wEIRhUCUTj00TcBOxGTPs5ad8jn5D01P7P5ILpLOgmnUp1I
+E3EYy54PQYjDIeOFvEmEywvwMRV8yCVhhYGpOPqbegKwcebXoiMGhJjuRf2nPbdZ
+PSB+S3/WAsdydiPiz/2Xl6hhlaKIQSnSOgYPOQjbDjgfU7B0vYGPohYR50fbOd9D
+QLvwsYxQv7CCdMM1M+tx4HevvYOKrceAwTe6yRx9PEhmuXYRCes/AKOs7yODvNm5
+SFFlZzBrYMxh6LSmCAGfYrSGWJliJUuFMQ9U0R304nmVUo3rrCj3tD25Kdr7wj+z
+WjtJVBdWVFTq2/Zh0QnF7mbIOs4bYxLlKe+HABEBAAG0MVJlYWN0aXZlWCBBZG1p
+biA8cmVhY3RpdmV4LWFkbWluQGdvb2dsZWdyb3VwLmNvbT6JAT0EEwEKACcFAlPz
+zfACGwMFCQeGH4AFCwkIBwMFFQoJCAsFFgIDAQACHgECF4AACgkQlLKRrvmEoIWN
+gQf9ElK2o7JBUbQ/QgpPbaKlP7+Lgc78g2I20Insd51G7C6SFmnMj+Ae/EariCV5
+R8JObne8kfY2EpmME8ISUqPrFSw0hhR0q7E7jhZgHrY4s0w7R1mujjWYJQ5cSi0q
+2sQP1GDMIk6paJBFORedqQ25B0paWGGATyMLRu2ljz5tog3DVaE/yvaQWAgiH77i
+It24fY9waInC7F+ruYSiL9YwGaDi5VwV8mlVeNZ+yobjXllzsh29UW24UXjWJoEz
+1MH2IXC+v247wnr5s0x4GiBaYFIS7sg2WdPMImAY9tGwfKQRNs2kBAT4G2Y9cDx7
+Oe6eZTFP+VYBhioN+5GzDPMwwbkBDQRT883wAQgAqj9m/clM4PMTIRwRkDbrfFSA
+TZznMxgUe+jOGRbZgemEd0Lpa2Dgrhq1hd8jOQgm+suCKjhJi15oKHMYHRx435cE
+8gvdW/C8R+T8Iwd+Ce5IuaRKBisgcIpCcSBbaDgYqGsjhOT8W5N/Tgqobera2Wvm
+wDGnadIN82RQkvH9Sypj2eFyLuFUk1xIKCS25a62EYr1Pb2/mNwHvgEjkswWeoWR
+a8A6xQevvrcercj/a4dYB8m/RQQhdapo4J3gh/BQxJIHAvjVxxWyLfyOIdnV2tkG
+Cysl154R0ymVHIT/fXILnkUPJNeAQzITMIjbV6GAUklVr1sjtcDqXPHAl49DBQAR
+AQABiQElBBgBCgAPBQJT883wAhsMBQkHhh+AAAoJEJSyka75hKCFz30H/A4I9FC5
+kU5ipCv4iqc77egCekoG8hhm0DtVdWrKOgJwbayIRsyCB+hISnZpt69QyZi5iA2k
+rIPZx0Sq1Nrlw2lPlv87CbreDy57vdtMdFEFQHW0zRbFN+XKZ0noFQGYxG/1LyPR
+4AOg+ykBEX09gnWYHwUO6x7Q73OQs88y5JOurF6A4iQmH7na9Qz2A0YPWNKQ+tmF
+MEciypk7/YABFZrg+9Edz/TWyN81EERhJPDkxzHkYLm8fLpOhnQPOyDxuzt7fh7y
+hy/+b3B9QT4Cv1yH73DYIfJW3jtuQDdmvtTk6G7BdEzAWufGVt6EiY10pr4zyfpd
+eaSSyYoO8iMWJxQ=
+=e7Sd
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 5A68A2249128E2C6
+uid Tink Developers (Signing key for Maven artifacts) <[email protected]>
+
+sub 4E5C59DBFF7DACF9
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=TnZo
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 8671A8DF71296252
+uid Jesse Wilson <[email protected]>
+
+sub 51F5B36C761AA122
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=nFNX
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 840B2BF6DA8ED8C8
+uid Phil Weaver (Software Engineer, Accessibility) <[email protected]>
+
+sub 43115D7B115DB0C0
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFSR0DQBCADw8XL+xgFg9WVPknAIqqb0sUIZ3yNNr8LkuNtwQXnwAcSJkHSt
+C1k2CIKwRPPfcLsb51l3SpxFTs/s5yhyiknDfjqP8IFtLocBSsn3kD4VRjcxFQhc
+0jjgsTr9ZP/ZAWMBRIuxaZtpe7bpqbLbV9lvqjbOnJzASLKJoUngZAXvljGrWGfM
+3+A9z7SdrilRlA4DOZNqPoxN2RNY0QOwHh8Wv7+R97K/VQoAbvN3tQxlfn5B2scf
+WL2nWoGRS6OuO9Zp5/W1twoVdf4d85FlpNFFM1xzT8f5FpjF5QRgQD/Az2XHnObn
+ukG3ZPEhgwBIwx1Uw/Y9aOceXke9vaGEsDT1ABEBAAG0Q1BoaWwgV2VhdmVyIChT
+b2Z0d2FyZSBFbmdpbmVlciwgQWNjZXNzaWJpbGl0eSkgPHB3ZWF2ZXJAZ29vZ2xl
+LmNvbT6JATgEEwECACIFAlSR0DQCGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheA
+AAoJEIQLK/bajtjI12QIANhe1ZrLQQvYFyDXGHS99LrT7WUzvxQdJ4xYYBRhmfqE
+6povjXvBAvYQabMQD3iBHie8xZ4PDngc/osp6SJF2wCT7LCFLr1ebCbulnL+rPDc
+y9Y6vQ1zD0NrBxsRYjTGq/1JqBd+Q7L0xMk8BK1xuZOCAUyq4CVRzSSxgTxJSQ+n
+Y4ZOL7PzBTYbdacMnqJc+2TwZKgi+CKIpOJusHa98mZSafzotNbmasKGRLPeJ+66
+Y/+Wfh6P/N2VL4nrnOrERW/XV9QNcI5VYlBUW6eYOhvpaiMeTMHNiN1VfDs1nnfH
+ICTdeZNhw0J7S544RXII59MBjOO3UklyZ6A20fiuvwG5AQ0EVJHQNAEIALIuFrzu
+8kQ/fFJ2FA51e+ULp+dy1ZYrZqJdTF5pMdZId711/zN9NExsTIxck6Vx9PYYaTre
+aquTkRIKnFD4XH/Q5MItEiiKHRtwdyhdFqCKSHaaNSGqldFwWZK2zh/x7OPk0ybn
+9L46E4+Eg9Ie+4WdyTxDKoeYQYl9asjtZPtfbNLad3UBvGAeyqc2hbePSxiNifNe
+cTJqzBpW0voJ85vTkuRa/Y3wBdkfyxRPRofAIjzwjyIXCLQQFSel0ok6aV8nToOp
+/j+HST4L+TVnY2vYDW1UWQP3y/suCp0jtz7/ygEyTie+6P/LEgLfp8LKri0jJqxi
+RUXA86tgDiy8x88AEQEAAYkBHwQYAQIACQUCVJHQNAIbDAAKCRCECyv22o7YyDOi
+B/9mnGjQdqXQ3NWMiqAliYnPEHYuNaP1UnRWrXpAHpRnQ2L0mWTHrAW/f7P6W4is
+l+oUKbURBEItgYY5f4/nIfp6TMrpD2ej91Q63gQw8KLL1x5CpKKLrv27w2SzE3ZG
+c9PYRuvW5rPqIXAdBYpznGKoowszWlRsgpw2XShuTEeiM2xLghmb2gSnU9l5wXFz
+VSa0PHvXoUIV6YeO1wym9bvRdvmAhf1AimvyOlpyk826vmI65l0OSbx30N67RaTi
+k2eHYk1uQ1WlnmgeRB1NfTANUMvaDbrFsbOliPJm3ncc9eGhJ74hzl8WGUy3SseS
+YYRhm4MK4YpKCJtCTWxKdYj9
+=zW35
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 429C8816DEA04CDB
+uid Taro L. Saito <[email protected]>
+
+sub 8A57131A07E0911E
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQINBGB980QBEADLBOfY981RbUf7zI9AoXcxGignXkYbeSvxIMML9vAbnhmuHwa6
+h+81ZTY2XK7Rz211y129YidPykkiLX9mY+OWvJsj7dTyVTcIm6MU5ETDvovfmKWg
+5sJRrANAnkZ73UVJIKTQC9HonBIpiPLmDEBfReHkNsXtYqS4fyZO5tkjy9ejaw2p
+5qpOS9WixIvZT43OfzH+8O4ecmDrOZ20azogcWqLCQ/ZDbfnyHFH+BvA8bn4bS6y
+304655N6cxDbShHrLWP6erbGozmLu/hVabCMSJgGRRb8NcUzJQ5rwh27SvKyMGKE
+8u1ek57d2wv2pI+sACBMzYlrP1S9MTcpUsQ4YvDQi9Ic1QDw7f2KkEsEnxs7h17h
+AhbBwEvNWqpFkKjI4ApYsM+/fPo0/lsT0lskjKrCnoEL9+sLKDcp85cR1dPC5ELf
+b2bhgjqccIk2gASrjmTiryF7gUiMTgZVU5PF9f0+p1pGqC4GIjJOf/JGhhGEyzVt
+BNvJWUgImqWbSFOKWfvnmdjZyULAVouxrrxF1vPN2U7KFurmSQV6tq/1Uf/qccR9
+/uhEI30ypv4OrVi+8WoVsEamag/AlnRLFCEjdfB0oUy7V/lPqMxRoxmhiTX+cCjM
+QkFfcspJt830vwct0pi4rtYt9pk1Roh9tOKh2UKRDGL5DE3rZbJYs+6TAQARAQAB
+tB5UYXJvIEwuIFNhaXRvIDxsZW9AeGVyaWFsLm9yZz6JAk4EEwEIADgWIQRWtQXc
+iinGkTikMLlCnIgW3qBM2wUCYH3zRAIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIX
+gAAKCRBCnIgW3qBM20+KEACl6Rckn64IEVPpe7gHBVBJNy3FZme8Y8f1vU04yynw
+TmpAYCl6d9Wfsa8MMPtnUjeUt21SsbBd1ZkrzL0imqgpYY+eDDVXKVOSncPNFk4/
+MzX2mFf3kN+g9kyiAbDOMde7zgps5Y+dN1/WAh5GxHVmd8ilvn1XdTZX/NJ8kqil
+lS6kDl21EOwlIPCsW7EhysRh80Dl/ypcp/jrAbFBtjFZnxVF2YdqRZl1/rBGPvbL
+FqzkT+4ssjpV01F1Hk2CS5Tfj61XB+zjkwVk66L2pneeAjzVpGENBuKFfoZlU/0b
+27o/Z7cHoB6/zjjfaKzaqWXSzauk2bZjr5AA6VGQYxahDk0ju67xHSbfVPBTmpMt
+DW6XF087mmhxZNHEYYdgTWsugpbCnkc2VhpxLqJDkmKpXL3C9apSe+40P0vRNN4X
+Xkx4cYCqSTwPjDTuzMF33Q6IWB+AdUiSu3D6bS/JE9pLSQolY6CbmVb4Q/iDX5c8
+HWa89KtbvSVVgjKBQjHhjG7WxS0yz9DK6hKBWd3XXPFeWoTA98AO+/fYsLVSn5mj
+gIFdDMO/ptfuqs0J5iJf5es3/qrLQDc9J5glQHWbGqZbQaoA6DcAYVdPk7LVRpT3
+5g9mW1z4jyrZESQvhQVeMnHYkB6MedBqK+4KIAffWFlquyo0nw3MoeB4XvGZrxmc
+prkCDQRgffNEARAA35umpa64i46wy8AZUAyGshP0gsonmZXwrHXDNrXJxRfHc5xz
+KQ4ppHuzZme2GKbkouIpuvdtA96JgEVQRxPiSgHCHIQkT0Ux9Gb21ce283Yj87XP
++rLvWCejWyUvNTJOXNqQHcOntKnemcPfGlco33HfA8uNrrgX0Kx0rmGKV8vJJ/lm
+e86Lu3dAlbJL3pfBoaj7IWOFcJvGgQ168nRCKBGIZYZ80E1JlcpWhy0AJykiZpFg
+iqO1FJB9Qdr302VwCFTrdavuW5EfNgE/eSY+Scyn6J3qHl3iMCCG4/o+8tRTOOHt
+1Q4Y2O07DeLcjqszEWef+hnFaSfWZ7N+aPqRq1WtNglEBRHWRax9XxfODIJcnUYB
+yULBbqjlLeXEIEaVzAIbv2nsfmNWAY8lj6kRbSKiTKnoy0WdkhgMUFjlzq1vJyUN
+PtpXi7BYYGzr7WESPTQZtpD2aJh56x5phuRGgcIzrtMVzzBKKCCAlHwj5apqJ1yT
+SD5tqWV6e4Hifc1e2/N4lpCSuGKiLOFDO/E9ZG9hFB4LgEfnku5HPGdMCsZ9J/9X
+u5U+f4Zae2Ue8J/6o690gEekY3yHr2pA9bStc4+MCYD1pk562nsss6zgqu8+LTRo
+BmUr0qylnJG+Id+YkhLOpnABFUa8wemvvhwRpUwjkEP4rP9LlBa+Mj+Ue6EAEQEA
+AYkCNgQYAQgAIBYhBFa1BdyKKcaROKQwuUKciBbeoEzbBQJgffNEAhsMAAoJEEKc
+iBbeoEzbVl8P+wdorXBvGoCwO0vpVqnCnAk7MYoYViN69d5cgzXp6W7I2Wr2EG+6
+YuRdIdxyL3LMdaNEQpT6csgZCLB+aMQHplZPSTpbTJDilSImGx2Nq6R2PgoZC/So
+iOXVhiORjDk+9I0NH2Yf8M61TOmBNAtiKzxG5AIx/wT7xaIBsDy4IV78tC6ncwwh
+8oJRYe3MJZxD3MabmEVSX5nEpy7Iw2S3erv3ytgYBxZp5oKZEJPDbW2xF51xRlV+
+vQlNILAVd+JHPqVMp1GYKTctgbdEGHtdLnh5cy2X78l1mWTc7M2Goxsa/XBJ0kTU
+bLNupMcDHsGGM1aBu7ElS6NgsyYbgjXs/kteJTS9LVsw0GEJu4vDjrokk5N+C0Mv
+mk2OMCv0BVPK+CmvUkQ/pxctaqtJegj9h04B0p/Xet4ZJMDfj7p0e1sIH9YtmE2r
+yt7gW31jg6WAg0CxYYyaI52yAJZlSx2hquQUm/NabJu1G7TBkqakZDjpohXv2mKU
+++iXOqCQ5KwZZ/ZOwi+6/gyUyhuMLMs/rvM7UixMHIe/hxAuHBmZklXd0h09OQnU
+qaDauquBef7Xzp6nW1tta8BYBdv4krBYNY2xNUwI4ENTVnzrzQLtUaHhU4X7venU
+Gvi1alHQCNawvcIAGVFsQohwdNvJDNff/QtCIvcDhbrjIhQCkOiKvZb4
+=ihmL
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub D364ABAA39A47320
+sub 3F606403DCA455C8
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=5tlI
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 685C46769DBB5E5D
+uid Egor Andreevici <[email protected]>
+
+sub CA7AE93399B1ED99
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFqHCi8BCACgRpCaVCiJ2MccCN01SbHYowmM255nSYKOnfItBmXYAMtc4rL9
+n1y1qFtc4LBbkIrPH8CO2zpEImUTZel4W93BQkluPOO3EX/hLCTCFfXrO89L1u4V
+XL4siS8vZl3DVDdY7m9G4vcpiIsggGF683KNctN2KXZ0D3tu9C1X7eJk3GyDo6W7
+MJwiiCm10968VqFqIFn1rTkvtGtXGP61Vqy7kLTdiBrKbo1HkZDbryl6nvCmT++E
+auJXEDYH9R+vsODy10a5in0n0EzQD4DYadL6cQTbwP2SvMbRRRQ7AnNtys6cNCCb
+CIJ8iySLaHYi65w6FEbiBM2XQ2hzf8Dek9yDABEBAAG0I0Vnb3IgQW5kcmVldmlj
+aSA8ZWdvckBzcXVhcmV1cC5jb20+iQFUBBMBCAA+FiEEaC92XupxjSULvbLxaFxG
+dp27Xl0FAlqHCi8CGwMFCQPCZwAFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ
+aFxGdp27Xl03AAgAgtnhNsz++UIqtiETzp0Y5v40STwdI+8KYhvbhzL2MARmnYr8
+US+NqeALovuWPNoP8CuzGN6dQP4tFMVr/4GtDJRqzi9EGUHIk6KzliK69Eir04TP
+3CgJb4OqrfgqU/tbXTPFVVKbpyWnrrzg50THhIigMxkezvTWa8iLWswBHb/E/NRn
+1NOfVkPqHY0D0Z+KeAR1/20n+aEh5JrLsxzIp3vNF+qXSN4gKtmdj2fYH9eovM85
+0NzlZnaqwetTtBxeu9mYvCHLCbTLrQTY2MvqBpZbUdVJytJrvOTAddmRrNiBz1w9
+yxzGOKXDSB0t6LVWldwAuTM0eGXqaDgInbe7r7kBDQRahwovAQgAzYHtmnHEZVad
+1Th2c8oFr3/QaH7UP7Xz+lhKyYgq/FsKmkQy88qxcxTX4kMfSB8ssKFdaCtBQI6y
+pFVvaUm8jn1LC0dVPZJHKHOdDEiLdg7B20bPzdY0x5+Yav7SJjYIq53V3pkJGZyH
+P9CvZ/L5uJ5+2sFx1nj1qyK1FWVx2VZk2TsFmL4fpiAi6SOXRoGVLlO0sCqUvlH2
+eR873/1u5Ya387En4krWnu0T+dHyg5/xu9S2Q7XKmO7GyEUXRnXsJPur6CwXpUao
+eoXIcydpdjl+TR70OgxyAGsrfQYVNjPvRVK4yUv839Xz8mCIp21CRscsx1IIeshM
+BqRGXIo8BQARAQABiQE8BBgBCAAmFiEEaC92XupxjSULvbLxaFxGdp27Xl0FAlqH
+Ci8CGwwFCQPCZwAACgkQaFxGdp27Xl2rCAf9EwynJ3Pb70PcSVboGozFCnSayE+c
+/SboSK2Cujfw1Fy2Qr0YizXL4RAE4jXzI+Y3EYZpcJ7XMxUheBTZrxO8ACvMrAwm
+MC2vf1EoM3DQVpyoVCv5d1OIY6rYCjyHeBT4rwsl8GLZZ9vsjGWpI9m8Jcpi3jhM
+ih+zfrdaYJpFzu5MA2y/dV3aYn0kpODuN+WVWRyF/3jhLCZtrNFnZb3pfrS/jcDM
++kdiyqH9wE6iyvIxX8Rk7a+1H0zFmKQNetxdMQPYODUSXQEuygXaZFzm+bfWU+E9
+x+HCpeZqmOpBQgdhFZFEX+ru97s07kBMVUlWM4s4uETNKLIwzkAk2FlbGw==
+=S5Ep
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 3C0A8F4744F37328
+sub D17266C6E05F9993
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFSQ6LEBCADnoAfQsg2uDYMnEPqt7tlnZxzyLVKiHXdJzT6OHA0FUdsB9H/9
+vWI863v20dsk4+tf1pXLa1AWBusInf7FM1JBCQBc/By3fR3JRhJU0QSoEcwtOQSa
+MmktLQx6s5V3hee6pJDJicY3fESWqrVygiUeyuRJupbBOOh3V4GkKnk1s48ZBesl
+viHzOjz8ysZKbn3h7mDuR4NaMx54U9x008NKs4Ry4ztAXbf2FqkmhkU1aE+1v1vz
+/mShXXuwGjYuv4OnQyP6ONHJPOclc4mDFU3yuUg328AUCbWHPg1kAMbpZLiEnBgN
+anC0K9BxYfVdQV55XSMMrdPfC4dNAwMEuzkRABEBAAG5AQ0EVJDosQEIAN9tyXFa
+CMYODFVn/vTf/9+Am9AoNvTtvoulLoC3VsamyIel3QI7ek9rppLi6G/lww9q1EYy
+3F0dR4ciqN8meMnGCbl0KhXCn2IJLp3MabaG4BmMbdskAGoqd2P3lynhbOnjQMBV
+RMcXFWqHPMfpAB4/5RM3wsgOn3vn/eDNBWPbGiHk297EUxGhooVmyb+1mbVXuNDE
+8S9KsiLus3Yq0vytlUI6DoPZoTMaO4GGJG4aOUw0abK6zPfPylzDaFXoryTaRhhJ
+lb4HONVT3GNFOT2Ob+ntgFx0I0cPfKKHDqJhcZl/CAWUMNyQb5/+u7uybyBGHzJw
+fydRH28FC9+m/xEAEQEAAYkBHwQYAQIACQUCVJDosQIbDAAKCRA8Co9HRPNzKJQj
+CACofWbBHPEPNj5mqVtJf/HuViQYib4PlIZKvcKsl2TVXkDdARzW38MV18ZDKUm7
+XECp1BPST0pwKvf1auq1/25X1BOtNC9FIFs8649K4U6RouDbXPo4hyzB0Og+608b
+KC8MN311Cqth+MuWy7rHjBZytNR8CW6e1XQBxJjW/G+1SYRM57g56S9IoPiTMDsW
+8jMQaYyNY7/Getddzfl4EZmjiiOysN3FQrrwF1tUGczLaDiaTO+db/FEGJpzBVmW
+WkxFGLuAjlkSPvBW+ijlTMnWwTnd3Ps/iBHWXLb2StrDV2vmhVln2gw3uR1qML90
+iwdK19eTAhhc+QJ28/SKBcyA
+=F4/Q
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub C51E6CBC7FF46F0B
+sub 4006CBA6D352F1FC
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFbgSbABCADGGENSy3oWLjW7zfYMSsR0pm3l3eMA7ptyU5C0U/MoIYjbXwyX
+XtlGwKnNgngATh1SMpX4WDbD8tn6vdeP4uHQsDb40t0XN7/HISFcLhV5pCgz2wNR
+t1dZbreV/EaZn3f84Vnm9s6TU7RHuPP9qBne1YLbB+LKKZUfQGavqGR+n322DhrR
+NqLdC3zFNtSmCVXS6GZ17IV/B+6CiNdbmPVk0o7zZexqZCNMXxv1IFzHV1/Y8Htu
+WQBfZ0zWwrX85ZKysU7UDdoyUw2aa8/+YpZmKwo32N8GpqA6azBeUjjVXGuqktMy
+l6IcHbLlgymkkjK7TyAKltuhvp6AlBTzp9i/ABEBAAG5AQ0EVuBJsAEIALE90/PK
+unEOu2B+QGGV9e0jJMlW+rs3BV6NI9ZaRw0Uvy0xN+jqhMsyCzB8P1joTZKUsmK9
+ptaPlMuKrTaQ/0GYPi6cP5EamphyvjK8ljLhhQuiAxt7zwv78vX7CGqRUEcAszsK
+8FPBAXERsSit661rjp4Ai71cyQg8YOXDjhissHWmneF8TJ3yItocj4KxDKLxoY+h
+F64epbkjIkpfrZ34iX8zdZMRCNJlh+oTHe/xulYLQDbgkgQa+Y6gnKmUZi0QGU01
+k6eWw/U3yOC69++ehiYcZYS0dWpPE/H51Rizn7QipFeFfTsia9jkGjzMyKHGju66
+URQ8okd4E6ev3N8AEQEAAYkBHwQYAQIACQUCVuBJsAIbDAAKCRDFHmy8f/RvC1c0
+CACy49b4H6ZzY71Ao9JHRRpQZ2VSVk+6xPblr1DOoytDC/zhVKekerE7OBEul0UO
+qzUyLNwkDiHy+5PRi6ZquZr85PlaVV5j6DkuZ/0lcL3ofsvtQi1Dwd1q/9RzedSU
+jjY3OimPWDkDBIGyBXohxx1BxRIAvlRnk9agapfbAdwtv6cjYxW0TDcPx4XW839n
+MN3CMEWtlI1GhKGYi5nsUw73ctpSq9dm3ov85ykFOqB/juvTcPoiOwPE+6o0OCTZ
+o60VwPUfv7uoXtkrLVJ0B06mfKiUgZvaqppYDi9IrhcHarOz8MD2OrUS3z4riTsL
+VEPwY+Xd06QyemMynHqpcDpm
+=1WLL
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 56028DF552BA32E2
+sub 7EC19439E4D4C2A0
+sub D89D05374952262B
+sub B5681E477AD61C38
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+5KzrCgVUcXxeOohqkl0SRuYxdQ==
+=UvWw
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 7A01B0F236E5430F
+uid Inderjeet Singh <[email protected]>
+
+sub C3E640F38D845FA2
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFZUsiQBCADGmoidvh3VvXWGdwbAtHPtDPKEebE/MfFVO+QTRbjJxphzKwAt
+mxHruikafaSTnC9FWizj99e/Yc45YZHcnt5Htmy0a7DSOQXL37rrnieZxg86tYmC
+4PxvvzC/s7xF8wmxDo4A+mRyoSF0NF/fQTZAr3ri5l0G/vntH7w8AbiiyerpLobW
+/TqQn1tpMh7XfZZ+XqQKANVRECUiCYT4iJKWMqcBpLZW8aa+iYW8yCQ1xfmNXjrx
+jpTqFCiQjvwCw4dDffNe/A1Dbq0wE6mw3YHW3OC1fnLiP+TEM9P9v02bZyem6uW2
++krrToLTTHSqIGF9wUUF6S3Ikrw2EtJiRQtnABEBAAG0K0luZGVyamVldCBTaW5n
+aCA8aW5kZXJAYWx1bW5pLnN0YW5mb3JkLmVkdT6JATgEEwECACIFAlZUsiQCGwMG
+CwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEHoBsPI25UMP6r8H/Rq70+JN+EyS
+6iK6ilytB1vY5GdwBzAxpsRUhTL1lXSqgjCXy/6sgrTQv/9/EgQznm7hEFVkwr5Z
+CacXeajvFJ3FVtjgn0aLRADp88Ry75DsttjwV5nIBNvFBJbydvJhfruHY8gzdUv9
+yOHAX4qtoNDFRn1HDbNsYMlRSXgjHX0JvBexdtZArtsd3aLOM4m8r+t1GFM6ePgj
+CD1q8yBH2RAIETAId/jiu07AqsJXp+UPBgJQi8o7cEtEE1HgkI+IoEsZXFJldRqF
+GJS6eKS8bpjX16nHI0SnR/gtsWpblAdZsY0YieK7o2pU8lvlCFffaUxXDOP7+BCq
+8W29nfaD6YS5AQ0EVlSyJAEIAL0+8UoJuUsC3jDE60tmrApu/hK+dCbe5UJnR8z9
+3aQ/1AfEX6So6JZzBlxID/HCOvRjJbauL6Lrvw2xgSnrnOzRLf1StvBPASfJk1Zd
+o9LZon6Xofzg34qCLUQLkDyntgXQaYF3Yw/xfiqqTC/yav29VTzKnf0Nri8aXGsH
+OycJ8nTO7I0p4xuRirFu7Bkvd7bK99/tDxttYkvUnG3BUGlr85UX4uODh3EcVcgV
+QteawYbmsf4F00IBoTAycutCOdbP2RAgP6kgFxLcGz4zVqu93QjSjEdTegF1SUXc
+GpzvDR8T8zRsQbBCZ32A/UJqmx+EIPPFHNkLijDp+f5mkJcAEQEAAYkBHwQYAQIA
+CQUCVlSyJAIbDAAKCRB6AbDyNuVDD2xjCACqL670xI/26dWsz66ZyHQ2yJI7DNQx
+oiU3OZs2bfrRZxLpGP9Q6YWCehb+iucvmFFvLZBoGGWzffmVBisD2Yz3mHtF3wLx
++2zJXHt1Xz7H6W89M54T3qUhQTTV6pl5f5/JCXK1DP9iC0y453ORY5B60byrGIUv
+BAv+qWXBPn3ECZ/3oEkErb5ZGof+gJjffqvWRAN3Li0WBRj0ldXpJoP/YE8naDJ7
+UdPfzcnh3tnOTfUDvFer1Nh00ilMmf6EYznRwaN9whc9W/1HwvDeXrijrc6/1U7H
+p1r5b1DddTtx6aHxpWrcwYw1yXGcm82fjXnRdomz6nBt2DF400YubAZR
+=2qwf
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 6B1B008864323B92
+uid Terence Parr (ANTLR Project Lead) <[email protected]>
+
+sub FA6831EE37606774
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFTDM4oBCAC9cUMAjkP1dD7tt0JUI5kVORKagn4/zG6+Y2MUwGgJs481xsFC
+jXPuNZMucAVtXmw5Sl7FbsfSxR/9jJ2pnbXL918eRFbUqY4LnuOTZjcgNWo8PWPc
+0NLmqoLj3HXaLrpB5cRIXaQvzmfoWxt8o/ZWq1zSfDJDePuQb6qlWmnoDz/S2YJb
+f2AILPsljTE8kYIBHORGilKtUXtQRjs0SCqnbx+DSDAVKSnqYHWDMmxgBMMQsSE/
+RQ/EZ7I4eGRLLfONCxox0fuIt4kOLuMNqGWQlqiG2Kp6Uulx5SepToSrPZLyDGVA
+MgefKrKe/lzKiLeppmx7ELXOKBXlIvTFZBuzABEBAAG0M1RlcmVuY2UgUGFyciAo
+QU5UTFIgUHJvamVjdCBMZWFkKSA8cGFycnRAYW50bHIub3JnPokBOAQTAQIAIgUC
+VMMzigIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQaxsAiGQyO5IHQwf/
+VuVSUFdUJToUScygLSxS1zp6dTEUXc/BfNXD0+7TVRXtzNKNUUwLYRlPRX5aHkUV
+d3+g3QiD6DQIVlSH0INCOto7/EP0ENLbC0Tm6QGhhDg2zO+A1OLRLwXFAVun/4Wm
+1eV3lakXRBCE/Fji0QxDWTYXakShmzIyTZCfJB8jtxG6EYyKNSrOMM2HBjJY63y+
+sQWOYJRz7Y2pv3kpwzPPQ8yxRSsDkJSKU9FyzBZfl1F1UnNkzK3BwL+CyKOAh0Zu
+2u11SJ3gUF0O65Y6FeBW7FVyPYr2IlMsYokr6Ry1pmndehQzQB3paEGUiMO4KWN9
+1OZUfcG0LBZB/FFBmVTVYLkBDQRUwzOKAQgAy86UOqIrhAeN34v5QKv2ZGWWNc6r
+Wi7ieC+dnx2D4kmvn+BLaCX7hJCyNL1ex2TvZlhXt8cgA8jAVgN5+aHTaJwpcTHU
+pzx2p5UIe9oBAEq20NyjF3P9o7lt1C5V1b71EKMTwTOSfWUcK0Skz4G/+gkhNjSV
+fxYwZO1v+Ce4mRCCRi6x8pFGHdyukVR0wJ/o8yKvQijUciGMEbnpDC76N1eAQgd0
+wo79WWGZty+w/qQSknXwTTJ028LlumuVV8UlYxZ/eYYSrtK2t2w+6UG16TqHATDF
+lEyShzYJCer2H1fmSGWncZZ4ODQCkNzNWirPn+q/Rr8CBo7PlMUV06OKZQARAQAB
+iQEfBBgBAgAJBQJUwzOKAhsMAAoJEGsbAIhkMjuSZOMH/2V3TM9qXvwiGsmO2msb
+Ita9b2MbvdlIj7EfI9rt2azPjYTLiQcYWWntKN6tYmB61kK3qzARwcW8pJQ0FiOo
+XEG8jqwHUz3bIxF8ftbq3peLUJi03PDQoNlTpKRuj5EvV7M1f1uZGaKU5W8+BVVx
+Oq8exMeyDU+8PifHmW9S1iFPqq0gPqjljlzzcIZH/JM7pq59uoj3YuNz2X3PreQP
+XVaz607JXUhxJ4MIEqEy/qjD5OGZRKQr44eSxk7938j80OcBa/1IbbjvGs5oi2IY
+gEzpV3KGDU+kSDHVuKcwloU5qMC1Vvhrkildb23wtFBRYIpgke6HBcaQOIivCatS
+bBI=
+=yW86
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 3FAAD2CD5ECBB314
+sub 3260CB2DEF74135B
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+xZG1NzW9unRL1j8/o6QtwZ1S
+=cP6l
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 5F7786DF73E61F56
+uid Ting-Yuan Huang <[email protected]>
+
+sub 73F7734B17EC71F4
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=v4+t
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 476634A4694E716A
+uid Simon Mittermueller (none) <[email protected]>
+
+sub 4CE6E05D128BCFAD
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFE0soEBCADAy/iIRT/lpb+vfDjWs/k1XQNU3mzXoMm1mmS/Z8VOc0jF7sVB
+A5z2pC6u2OmEr1oJkhWefX+mU//7kXs6VvUCReE4uheGBlisg/ELEXkTm342TcwS
+K+tR/NMk5h1DwxeGR2qc0+zhFcrITiYqCpdaggRVx92syhuYWrG2DtRI3eEz+fys
+2WLhAd/AqBTR0ENDZssp5S6tEBcLvU/jAvKv33/+ydg+1Bsw37CqCOO0bR388+ow
+uSXSARDJaesnBpUcXT9pbog3Wm9pSzJ2fX1FyFaf3rqIIYEqGk1rEND+AkT2CB08
+BykABpDx0mgR6/pAgQVywCatPuc7wneiZY+LABEBAAG0OlNpbW9uIE1pdHRlcm11
+ZWxsZXIgKG5vbmUpIDxzaW1vbi5taXR0ZXJtdWVsbGVyQGdtYWlsLmNvbT6JATgE
+EwECACIFAlE0soECGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEEdmNKRp
+TnFqfr8H/1DXbZ4VzAqqIBhMUWOIvF220gZ6NAxgIP4IAzfuLYKso1pfogbuPzS4
+IzbTZIZv0TXsK7zEzxZY4Oxx5cQaOfRiPOBvkeEC1T8Pf8l9GDQ8ppy0aHPNLgV+
+nloylBUHWuKpTMUHKu3MpwHfwMFZ9ZFsUmgcQ9oYkWcvprH2uOachsuA4BSxXJNe
+OGU3aBIG1CR7lGENmkjwZowXhxM7QuYZ7qIR6oFxQCOj9jcV61AQhj5LuKNOJLfx
+fAICIeUD8mJP3NcblVNp/Nj656naiLWBsK1sfjGzvLkeTKnFYFMpJqEuLTv7VTx1
+fGJnaq2+2UznsLGgWcMVPg68ZOW5V6i5AQ0EUTSygQEIANTGYOD4HupAmugS69tx
+MTAW4GvRQ0s8Li/r/QQQUWPpjo3IkJDA0+kPCe2JRamNJJ2plzndeGUpQIZn+HJS
+N8fGRjZG56HG6l0BJmQRFHD/6CzNOOKK6z+8e306DAwQPqDdDpUgpBmbPHZDhCs7
+tvrOhrUesfLQla15MM7n1DEtII9y+AsMGfwrZCd2PeigiRC+/NH/lYObLUPc+NL6
+GrC1ZHrpGoOR+9GQ6voVNY5EIxVlNgoVBxn3ufcFvvghmZe0WyudBHK9ByWeioBI
+tHQW5n7eGpljcCUbTpsJmErhjH6KBKSuxPQsyV4TkQMqcsymGW0jhdHXc1/tStF3
+L0kAEQEAAYkBHwQYAQIACQUCUTSygQIbDAAKCRBHZjSkaU5xamOiB/9r943gZZy9
+FJv/NGPnNxCvI3ZusQfntgRfVyIFZLIUeaYDab6RqKTD8ZRgyfO2rmO73DiQ2bnt
+zmSPHeAlpKAIhTXfty0g5UICLjr27KocLNt234BKii6go+CDo2+lLUPUAe3cJPFq
+ZrtJ3pYLFwS7O43wwhRaO9A7L1uyruoCqql65B6CJcymMEsDnCizRVEAsE2lxenu
+fxcM8JIaQlczXTsHYf23vnmLjlXm5HvEAfXE0s7iHo9BMlSLxHWWEqeyrbwMdnn/
+gT8lHGw+SHO173THvhtGuKGkrglD2CA9G5d1ZWgAz3il0fLdBenLH6t1m0x3+P6h
+4sUJ04LlldPb
+=GdCO
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub DDDAFA7674E54418
+uid Cedric Beust <[email protected]>
+
+sub 50C6CC55C6F24FB1
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBF8tnmMBCADROe7j1ZvgiMgfsQKqCSuSqgMkfMT2DEXwZKdHqkj0gfx8MPQg
+OP1pmMgpIwIXKr5kZ9KMGiGULNnS+WU2SNqjyKeq3MlnSYW5Di52MoAD7W4cHmry
+8ekaasF/x0AS5Q3M/6X/EBOD8YLWaFkk+h5x8D4IOSqiOiWH8olGjY4ZmGblaldX
+PLr7BWSrPKQ1QDsoICn583Mnjz3YLlc4p5IKnY2wss1zm7/gQk6KkdL5bRuASxLh
+to2adZ1LEE8MQfHweauHCK915RmMg7W3KW66/EsuCyEwZKBwq6rIpAciym2FngJt
+CPnY0o4IMFSasV7d1xSH5N4jeHL3Hh2Yd9tHABEBAAG0H0NlZHJpYyBCZXVzdCA8
+Y2VkcmljQGJldXN0LmNvbT6JAU4EEwEIADgWIQR81StagpUTfIj7V0jd2vp2dOVE
+GAUCXy2eYwIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRDd2vp2dOVEGLQr
+CACZTTneMoaUR4pQHa/rQfGnYcYznSL32JUP98bgstwN+g5BoivHkrN/5IinELly
+n2nxrjrPucN2arjOvObiGk7UhvUY8h1kqWKWqc5Gsc/iXwnrIx9bwzwdbYaiKqMT
+E6RJ+naIN80rNRQnOMtBRTNmRWYZ9UMk2W1DEKZeCaKUJpO2lLpMW6R+Sta/pkq9
+L36F5G9qWBrVhUS4U/rEE27G7xiDZ7fCnjYt6lfvc6mKQ72BIUGtjVDRwBAiG98X
+Zn5+TqLaMkC8NotYInuV1/CwvfE9SuYH8dn3YJqAkkn57L74y8I0V54AyMXaLNp5
+G62uRD43Xw6rLakCxGNUafcouQENBF8tnmMBCADWQEHet457l0v27b6EVxjNZMGl
+NI939o3k4NdrCBglIojODXA9jp8VkisL7+klrpOP1vmoVd80Lk0fGSOdZDcIMbzW
+WChRMVMkY0vgeDqOgKw0j6e+isqN/vNipj2nh8cYm4q+LB6GVE0pfFCsrM8RFFew
+RO+esEuw0R1qXhNYLIwpRV3Ov4ZxDp1yM7KAHSBc86HJHy1t4LqLofjA+RBP8f/6
+2MmSRKLbDwruLz/02p0fR+lp2DiJ/IN40lGq1fSxRjXMTQnI+bIdsd7TlY0AbT6R
+NklBL3i492hxU188dva1PZM0sxAMZRXSt6cFCvz/jDvlf6jB6DmN18E2ad55ABEB
+AAGJATYEGAEIACAWIQR81StagpUTfIj7V0jd2vp2dOVEGAUCXy2eYwIbDAAKCRDd
+2vp2dOVEGAwbB/sFvYn1o5Q0r+ngdMJLCjQYT8a6uy8SH8N3k8RsTJ+ad0TdfOoG
+wvxl/SFB1MEjEVpXgbojjv01gVDola2ObIYSX+GWcvlJdfXKz8oZ5f8/KdRrAc3h
+z7gf8huUVeriwHoEEA7xi14kJZpwCPh8PiMMl5KQFWuG4D1eQnwOm54cIw/9hYB3
+R7oVI+2THlm3CAlFalsXzZ1N/l/JQG6LfPkKmrubr++FveXx6izjZssdFiaLg4dk
+AQdAwgpmFmCQHb63BCKzqPwDxpazpk1wP6Y5ornLu/ISaOo9VC9ylX+vUK93eq4K
+AFuUjn/Jk55tpdUEH8mW12W6Ukjt9FxVb8ZX
+=Vb7/
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 64A16FAAEC16A4BE
+uid Evan Ward <[email protected]>
+
+sub 1E8F1D57A4450BCB
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFbqsT0BCADwERe1Rc9qNWwXOvwZHsjauVDy0TpqNVY8I3S+OYm4rX1dkjyh
++6bTEH1ys6bKevvR+PLhYzTGKboHnMT0RIINY/DQQSzHr/GRyCiiRlRvULbt9Fnz
+kJJDgH2BcbNSmWJlrCqYk+E3GAyQial+szkEZED+02wXHsbs0z3vozjQGHy0RVOj
+Gc5Shwk7Hr/F3vw9EQKa1nNffWmcGEx9B+WcC9ALPVd/fpQVXvlqfbi+kaIbqv2x
+NHQr7BL8j3SpN6vhfZM/3zeghlxQ5HYWER983XwkmvbNdMxt5HWsMKWZ0utt4ocK
+TnQP8NFGlPWEQhPvRRFNb9BI0wvGD0NUb1gjABEBAAG0H0V2YW4gV2FyZCA8ZXZh
+bndhcmRAYXBhY2hlLm9yZz6JATkEEwECACMFAlbqsT0CGwMHCwkIBwMCAQYVCAIJ
+CgsEFgIDAQIeAQIXgAAKCRBkoW+q7BakvnygB/41oiYgfDqkG5srQ4nC7jE0Pe5V
+MnuLVHqsfJBGPvt2tz5+Z1ciIFFwUi/xsafX5DhC+FVOOGdeEnkKnskPBOI7uMFh
+v/s90lbhNV62LfwcS9hptE4qn0JTg7mYiiL0Zue99mlkeP105+GlMmvH5q54X2Le
+hIDBVR8DehL8ZqZCvNEVK1ftpx45mvF/4yh0YK0oVuCAAzwF9+6OxeWTCUTRHTZC
+4CWjtXKUHMq4nTRSp0wGdqd5UV0VbMn0bKTkhgRNCJAKyFw6lJ0FZWwmuG28T0s+
+bKuRAJHTAZmSM7UmBnKo22t9whNcozcqxWhK1lcS4OWEArXpCKxAx4kXmbwnuQEN
+BFbqsT0BCADj5dHK9K27rmkFscDY6x53w4L/X6AYKmVu7Qol7VhR+1WtZXgxZaLM
+xDxj5RK4sNOIqh6R3vEMlAVS+iYbzahI/A0fcSciCoLCgjJKCR3STnTu2k0D/MO0
+la+wF/bGPa0UADGIJLRCjalkl5uv4c7zZbyLnRl8a9XSc81cp2WJTxafZJlJkFOU
+4cyewwFuH0pwMvc9Wmwhkh5IeBF6w8Asj77M5bzJINXYxtKMGYA506609HrvN0+r
+obfgx4Aqy4hGKsqXMsSZiuPDvbdtH3gIRV8NPdYRq+dQg/gv222Y3G1xprDVbl1A
+1CCHlaUqT2lIFPovjoB2O2SBeX9xKRJzABEBAAGJAR8EGAECAAkFAlbqsT0CGwwA
+CgkQZKFvquwWpL4yawf/WDI4VqLkR9RqaX3am/kS8481pZPWZUlCCL7jONB7X7eG
+Bit/FjmQWzfL5nWAEB5qhm2qqCgvgtPmVxCrQLECVmaGmDFmhGIFh8TQsYvQJPK6
+HZDxZj97lUKsG/ojOY4ZArvZnsXBU6C963QUZF+P5UL52n1pE/ByMV1R3enEfrYI
+X+wZslOx5uRFOR8dgUpG/ohh2vkFCaKD6KJQHm6C5lGBgUNqGMFxp1nknKJaNqYq
+jvippm6KcocWARfTHx6Xm3mBqxigmpsalUKAGpjcsxsIEY6jnnN/5i5y1XeokTY8
+6fqEt2OSFSkWiApqq6lxMRluTiq33bSquTxSomKfQQ==
+=PImz
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub A7F5ED0FA05D64B7
+uid Kengo TODA <[email protected]>
+
+sub 4044EDF1BB73EFEA
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFELz9cBCAC1cr1c5jWUreRdPYYvk6DK7DwF6dgt7iN4rN2QT75M6ob9Yxow
+QeO709C7V0JXpVCOJ+7gCxnllmktpchRpj7hj3iDdvhVuKMEF4pl+tDyoyzK4Xvh
+HwDgaA7nXJLzxOE1Zn3cNqJPp0siXa76ADFvRQSGEesBvJ4U2dTGczIxIXBJAsm4
+s03DQV05gSqWsHr3iyHsFCwgE1Egy2+tIMfMTKU+wQ5AVb7AlpF5ByyeAA1jUG3n
+zuHQ4fCe3HZrBfY2O4z8WCZRSo2QnFoAGZ4mmcEQ0rZuiEqigjCHiqLdp/BoekDK
+FyvY6nOUED7x3qWx3WS9SJGpRf/2CcfKkuVxABEBAAG0J0tlbmdvIFRPREEgPHNr
+eXBlbmNpbCtnaXRodWJAZ21haWwuY29tPokBPwQTAQIAKQUCUQvP1wIbLwUJB4Yf
+gAcLCQgHAwIBBhUIAgkKCwQWAgMBAh4BAheAAAoJEKf17Q+gXWS3xs8IAK9sPFX9
+snNXGFQOMkJM5Pejbe70Ilbl1NXCGQziXmrbC/zPc8joTq2QYyeb18vZgp3HUp05
+RTSrlXtWs42YJHkasM9wMoKf78JpNgvvGM6pSZOxPEUQrzbKBjvOHs6QQUqozi1o
+Gltg4bNZZJFB3Dlncr3EeRJGHe2Vkw22AyLWG/M/b2MHRyNALtyCh7Nbl+shP3rM
+8f2TjFEsgVETRDJP9Hqr0TvrbPWBs1B+JhuP8EjVbyK5gYmuuexEjBH6mz5Ija5n
+1D0+wyFAWPjgXMeU69fj8/yHBUWYJ7k6PHj+B56dSYkB/ZvsuFjAMzgqfvXNdsT3
+/OgXldgdtyMW/wS5AQ0EUQvP1wEIAOV94VK1R4VqP/P/aB0zMgi+vsjrWY1uBP01
+zd5TrqlO1t3ohwvqHFbll6jUPCk/l3RM3dsYSUdSB9Jsq4AaxotuvJPYCom3Xnjj
+PsfK6XUHBSSHQ1CUDlnPtZR8jaNLfLSQrJ8oHRebL6xaidd/8X95b+aqESEVBr2h
+pNnj47EoUT6XBqEgv7GQnoG229xx0JpOaokOWO4A/eteXnG7DUyYYtYwp1LOdvnz
+oGpcfastiFpso5iy0SLbrSQvHs9ewyVylRt80EAC2Z/9mW8w8c3n3OaNHW/bZki9
+Yni6S2ZlNw7DKULt5BYg/q7MOTxTx1A30071Onl77hYWr/3ANIsAEQEAAYkCRAQY
+AQIADwUCUQvP1wIbLgUJB4YfgAEpCRCn9e0PoF1kt8BdIAQZAQIABgUCUQvP1wAK
+CRBARO3xu3Pv6pYPB/9dzIEDYDTkrd4g78ufDErd/icdCeEH8++yzh6PiImBuYyZ
+3Ih7RR0w871dI3/O5edBdh+vfCpzKoHi9T/8BIpFxukOTDTARSVCmJCDw0QgHwlr
+oPadXqFJtENGXnO1jVmNkM0SVubMoQ5OnnbTLe87fvCa8+Y3o4IW7cGMoz6xzt1t
+VYAcjDjmzB/VIFS4Dovccq6lnY0lq9MoYaaw9wrc15ad9XsS3lJjimQSLE2cC/19
+hZMVGoHPDZuQQwjCApg5AVONZgaRFtScAmKcznfITaalRYcWZ8TCeccogfyK9FZe
+6fMGi8pxY5fP7ivN7wtqdFYzo18l4s5NJ+6vdI9BSs4IAJRIX3QTvyv6vcyC9zXQ
+PbboHsaXCZPDtInMV1ULzAIPyf7sUVE2lv5f+EscPazmaiMwxl5Po1s2p4ypxdIZ
+L2iBN/sSNhxHjHCfMJouWNdlwd5WCQ+yVYZh7qwCiEvsulEI9pmksQbX8CAQy+Ym
+ERrL+txzwzhgp1MX8tmg6Tk5NXucvb3IRAU2NczaE1TRS1sl/5ii68pAJOoyTn2W
+JrRSaK5Agsr1SGj1CBhjZssgSbq800vSi9WvcmZjIHWJV9R6lt0qc2BF6mo4zl/C
+sKIQPcg6UipZijCEUyCIj3HV4kT+U6wr+JhgjHHGIZOmqREPxu6mycDW0O8S1Ik2
+3ug=
+=QgEH
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 47586A1B75EF0DE5
+uid Benoit Quenaudon <[email protected]>
+
+sub D74B959DFA1D84F2
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFkW7RoBCAC7NMtr/e27nrUuIcEZEJBZS3TbZYId80UNQXgYmqPhy/sfCyMc
+87eKzOalauwLbr5+VGuKqhvKrihV1WCt2+FUjOtnCf1GutpAUH9plfSs8IpRog0h
+i9IpApPeR0Q37fHhc/fSLDxoHIylML0058K2X9js/VNg9xospjvRBi0vXmNaMWuo
+qMQXXVJrDDtDlxljx78Fk7b/qiFuqBgIPM3U5OPyaQ9Qks8wactSYo9pcqIZx9BF
+/XR//WvPwQ5MEAPCkwXnNIlrePDGMule7QRRmDvNkcD8V2xSOM+fhVd3UpuCpMEG
+h3MpiaFq9TF9O1Fv22Cs4eM3mnYOEHjAGyNzABEBAAG0JUJlbm9pdCBRdWVuYXVk
+b24gPG9sZGVyaW5nQGdtYWlsLmNvbT6JATcEEwEKACEFAlkW7RoCGwMFCwkIBwMF
+FQoJCAsFFgIDAQACHgECF4AACgkQR1hqG3XvDeU8FAf+KJqG/lNX1xzASjIYxXPj
+W++DVsvysQaSAr5OebRsD/KLeEM68ps65AfpMgxIAs094NEhA99wIXclf4vjZJ3W
+5z2VS2+IwhnDNYD9Pe0xt3H8zfbL3no0LyPS+pAsavtgJ0gqRG/kNDDoM/RmI2S4
+yZgaku6kQ4hCKKubdrPBV+LqCSBvEn6kTvHMvIYQrtDgvm/X9hTR/42zaAK9UaD1
+RiLF2k2nbQeJlDu8ZSvuA3IOGTb6ALUA66KkmiDqMG43vZs+ZTAKnreWKsPKlQr0
+eAAN/dcFVg35+bjf02561Zi73NcgMS7M6VgBExBoGYDW4299vnu8K3FqOHDQs3f4
+8rkBDQRZFu0aAQgA1+Ve/M0qe9PJ3RECh7T23GIGQSQ2qz877YKt0ZszRRqO3zyn
++odZTlDV7dNfWuC4vZfzY7tMs+4VpYiiFBGnEmZkgCc0upK5IuHrS9HwuD3VcOw6
+e9SpmOgYkJYKmjtNCNz7BIoYCIu+PYzaueP12DXCIod7bij8+smRaon0IkDj4SqH
+ALxnb75+L9MQKaxTfkOybDWLfhz9oxfUtO2StLHlGVk8Q6GVAhKJIp6bZGDA/S3m
+Hx/AZHnVsL8o98oYRIuwLFPxeAYauY6cgwoD/9FYpkQSlxbsLsje8HRT1nvzWKhP
+4NwZFDkmEWsKOiIYgV9lQWompcLpqLFfmp0pPwARAQABiQEfBBgBCgAJBQJZFu0a
+AhsMAAoJEEdYaht17w3l3ZoH/RYBt2aiAhrbjQteyA5CpNZ6V8jRrudzEHB/boJH
+FnBUGNhzDDeu9FoJGrR8r4AvLyJgqiiATN3/erKEiZI/cP8wBfzjoMBM9MiYLgRg
+NawvoLd03oEUq856SbCwW096GE6m/eLcT3735+aIchMAHSagHP9cIuWr+t3+W0z5
+MURVOe71bf2TSySXhbdp4E05XjRgAwdQciW0n8SCKgRppO/CuIWiUyvt5JCCrfxY
+gEOMg5/wEGRSuNS7YtYB92CBgLPQ7SmpNSMUY3Hvvg+AblS7sxPDDvvY7whHK2U4
+6LJQx7BqPFqTmGPfFbSt2843qryNpjbAIzMpm0WC40LvvLU=
+=5a7q
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 1188B69F6D6259CA
+uid Chris Banes <[email protected]>
+
+sub 0888B86856F9D71A
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBF2hcBkBCAC2H5WcFoeByKBUAjRDjmP+5P6FRsZjLe6c1wy7G1ha6/EQUVK4
+gZUZYE9W7l/4QKHvAu4PvFWdD+5FXGZuB/2kw348CtabAlJTehm1QlPt5//ODkxB
+fWPPz3uHBo5PQJZuLpStQn+aEkTTHK6Sk5033e6fa7mV5X/c8pTmTzkunG58NFbj
+5VSVbks4pbafKoMY7rSN0/I2hEApCjB9tx/7DJuQ9gbaGhmabnhBTnwHXEV1/hIF
+369lfiqeoeqDMOKj99C6KFD/NPRrRLfoPRpqL3LPsPp7P+TzyZN2q89Xqn2ysyI9
+jDtrlssEXLskU5kA8fVa179V/QR6QtrJ29m/ABEBAAG0HENocmlzIEJhbmVzIDxj
+aHJpc0BiYW5lcy5tZT6JAVQEEwEIAD4WIQRkubCfFkqgv4h0LrYRiLafbWJZygUC
+XaFwGQIbAwUJA8JnAAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRARiLafbWJZ
+ygNIB/wPXRnQJ5Pj+G/S0sbcDjTFegfN5TzXRRu0wXyogHPCt5ItE+8DURp7coq1
+eaocMZQ1186QLow/gInpji5l2pyv8BjC+H0GrXrT00S4wWcmd4ink+cNIwCtO8Dk
+Bi25t9RxA12zKqXn62W8sATRl4DlL17ASw8k1bYDGWWJAM8GJG2yucaFN7RohO7q
+5QmcjsXmuzfZtcKrlVBVNkYoGQKfjgr5fPjG1p5aOKELYt33u16stDGOuvXyJL2h
+4FhqMJL9UvFj7uOdMQLK10QPb3tFXELchvBWCkD/GVHtH1hwFumLkLbIKaj43Sq8
+Kap/NfRkl5GXw5e8UQDQevfTXdJduQENBF2hcBkBCAC2kr/FJuCwW8jzPDyH3EsJ
+ebKgUGpdZ8O+OtbvIBgIt7opJ+tkOyBjt0kUbiXEeoZGOQ8qtaj8BD5nAYytDZcd
+TU7ZOE8A02bMXsTVeNKkPgbmYQm9DZokAUQWO6NxohWvJqnDXkzZyMb6jGCJyGHL
+x6bN6++0DWPD2c53wzaSZLg/776BZw453HWkHfiomtoKgBR0DMOg51daAsj8d/Aq
+itdK8Nwz7cmKP7FaOu5lSyWb6F8dueQ2yjQEykq4YrgiLCva/pSL2Pc16CNnCRbD
+QNUEog5Ldco1tbrPPfizLeXVQmp6tG34aa1OCd2WKs1EtbFQHpFWNo0cP7LInV/r
+ABEBAAGJATwEGAEIACYWIQRkubCfFkqgv4h0LrYRiLafbWJZygUCXaFwGQIbDAUJ
+A8JnAAAKCRARiLafbWJZyoPeB/9hrGRr1ivPnQOMtAJgrT+Aev1gFKJxgTJlB9QM
+fBmjyiELgnjwW0COb9nRgalDk404f6nKcH0x0jElhUU79h2Qz/NoGP7QByaymdeP
+j69SQeDb3TyI+tHShX8r3gt7fEyeJFYyr7w8xmO6B7GdTpltTcrbG3uk2o+e1GPL
++u86S0QhG2RyBKOIWLXoRCJQlouzNqiZl7Viv8FN28NAvCi+Crp/evPtNNOYjnUP
+yIoOKCOCv1Fth5H0DNQMLsCZbHPLl1Lx+AN5JFR0xp774uGkzLQ1jyqXTbv3rn1s
+LjK0uhsXbr+8I7TfsExnrL9DmAn8R0nE4uPV2wW1NzwavqcU
+=yIZi
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub A7764F502A938C99
+sub F20DB7FEF61CE1E8
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFc7oMQBCADaIPEUzMrwF9gnEC+PRn2cSPG8OV4RxXxa88TZm0L7NF7D+F5N
+MNUAZ58oVqFUW+ytgb5iey3X7KjlJXZnuqES4m2Id4N7FlnvrmpeOg7MUc9VmNkt
+E7RH0O5GAo3V3o/Xp5nATUoaQ7v1WaPloB78ucyWLnH/iANw8YuxYuYUTJ0f2b15
+1oY1feqkpibbbO39kdMY36FH5h8Gsv0vvGdeS2O1p9vbzDHXEMLkNyKfcILLjbNU
+O/n2FzDL1y7hHXcFKDl6z2G7rKJCAsASH+r51YX3dOKUepE3pFcUbMAXGeG//n4B
+T8cv9YOhsYGaXBdbOMjy1WsZMvizbp0p6yIhABEBAAG5AQ0EVzugxAEIAMxtJLP4
+EGHrf/bnRuJHkyMqd/LEIMR4KszUl1AU5oeCxah7ZsK2MjwAUDD2UeLAIyANmKq+
+vXtma2wvQeOzo0QDMnxLqADSQ4xqUUcgbn71rjMq2O/T06BI9Lr2BaXeuYYjifA+
+loWzCbOHcgz78p8RRmxlChO5mWWlnrznDbUjV4Pih8M1LR/a2bUiU/Ftg14GPSrh
+ct9D3b5CjMIa4tqWMpvI+6jOjJm/ZD3Ux7WbzlHB+B9/yTw7n3pLSMXj/07PJKrp
+tUeJONprdN7V3wg1fnVS8CuQmLKoJhU1kLnucgnCFQMaHThhjxdaBMr6Mlq3urT2
+BSw970AB1qV4Wg8AEQEAAYkBHwQYAQIACQUCVzugxAIbDAAKCRCndk9QKpOMmUjO
+B/9ByOS3hX9yJysA/IDbFWonYmlo7p2hQbR1tiQ03QpbXZXCPxkSknW2uHqFLxd5
+eFkR46ExXINqFzMO6V7+o+soj7jUOK2rxQUIvdf423rhjdOU+TGXSDVKfNhBc/P+
+z0xQX7TkOuNwrcztgsmoSI/5K0rbF6+Yx3Thz29ZNFPTTkdFGiq6GfDOwBOp0VOv
+NyHw7mO4x4/5gdPKJ7zsMTT1OgBY+UQ9msb/ae47HvAEIgFg65OAamU+cWe471PQ
+uo8MEmeRKCsJuZlYjHcwqvqcVOcHJ9XzjuiCPn4N7aNkSTvoOcGvBWaAmBTxWVRM
+hvtJrydlnWJlCJiPfZvTePUR
+=IsAk
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub BE096E29EDB8D141
+uid Eric Lafortune (Key for signing ProGuard artefacts) <[email protected]>
+
+sub E05A9780475FAB55
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFFGZXQBCADeZK9xuCrDwJ7v37y8RITlchzBfJEWv7cSbrSIBlFNAsUUoshW
+Y8U6xYKe0GdiLVta2F8bzs0Si4LcDeglQNi9Fxvh3/jfs0MEJUfSeZ4z1Mn5WY35
+utbdlHe6i+7qvhpHveREwWoWuvFGKeSCV8SioolG1mzxrDVLkQefPZ+Kr+xd2cYZ
+SIkbjdhCvJHcUkD9gs8Wz9q9eDyc7dGJmfBYaQ7Xa6lbd852qj8LjQ7Gd41yHU6T
+U3oo0kKfAPFkW7rX4zeJEBgpncK0i4ertd5to/y2hauqPU3VMExqNS0/L2GqKNmb
+Q2Me02pBSBCrLLCUJkm8jZorPNxlQxHpFLHDABEBAAG0T0VyaWMgTGFmb3J0dW5l
+IChLZXkgZm9yIHNpZ25pbmcgUHJvR3VhcmQgYXJ0ZWZhY3RzKSA8ZXJpY0BncmFw
+aGljcy5jb3JuZWxsLmVkdT6JATgEEwECACIFAlFGZXQCGwMGCwkIBwMCBhUIAgkK
+CwQWAgMBAh4BAheAAAoJEL4JbintuNFBUQ0H/1ahtWOeS+EEZqUxxgLE3aiuw6XR
+mcFY/9kRlnBsKpWGGyV0DRkLThXSV5fWwiP0+moef04Miv81txVXR3U5f4MY3U5J
+SDgeB1GK+BvcYz1CXxGcErgaMIDXu/K03OyQNp1lD2kjmDDz8SHdVqpv/aFfxWpL
+uMaogbStXfbDiMjeMg2zRcAzXqu7JlMt3z33uiTUZk9jubAPOBnP5/Yhuc2wcnfu
+cLUUL9xNE6gpl0Noy8qJ2TaVoHLfDEdSgVbLDNpippNQCIEXn8VtlBCG9FBtTUR7
+z8fGU8f+ijNYHMa6jNsDlSo45/RV+alQSSZhx3hPCIgO2klEkawBs0ikEjS5AQ0E
+UUZldAEIAL0CmXXJLZWMbKXEROAYFnUqQ4eNLUcLY1NfL9xrF2KP6apMXLJdftwz
+JtcenfD5vra8w5JJBn6cvY4Dr4zmueDSsN3Cpgr7c0trDNspAQMyUGmg4Cw7lAMr
+uIX2om1TTa5ALsQ1PfupnLFLFKbYd2MmfwEVHgEBAzqmr89RoG/NnlV4uxvWumb/
+OrLzzizGLHdLFjnq3Szl6wQPJwmxCtWHvzW/Y+HYclm+wp0sufvrXJ/G1RrHKxwh
+xaDVyLKsb5wkUC6SZmE477SP6ZCokoAGHqEK+5JnM9MYXreQ7N6NggRUseCokFaq
+ckze5wVBXmPuVAg76ScPFQd4JzLkGzUAEQEAAYkBHwQYAQIACQUCUUZldAIbDAAK
+CRC+CW4p7bjRQSkUCACPWdIvMXPtSQFnFR8oUIGxvcp9MYdealHNYkf3qgJTuWbH
+TeD8WpE53immju4hitOq/qDevKOWhcfSaLqCtdRyYQFFDWQt4SsiGdWfCvKiBMSM
+nrDQI9f+XCv7J3ute5alyMgv9Uo1XLyyiwhz9kJ9mzg+ENvy152PucI4TN63qMRQ
+MQbkAenrTzIer+5Q9ZY4TILC8pVVAIPQjTHuhdh8VMclTdkHab2PCFC57/3djJyY
+44PLhN3hLI4CElAGLUwBZLRa6OFOvwW5naivwgk0zeeTqq/jTOWPYiy2dyyX1pRX
+8bJh5et4mXyM7HLHRp+FblgWxpFWNvMCEpxujLsG
+=B/UT
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub E0130A3ED5A2079E
+sub 0AE7BBD7FEE66E0C
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFlMSXMBCADcgN0/57D/gU5cDobPiRuDT6qAxb/NWhQiqwAocKd274r4gPJm
+RbffUEZEgKhjH6l0CQfilC4R4x2QtU9sNC9kB/D6zumoS1uI0Hmx1pC4UseUy55r
+20WDxujUQ7OcJbpe2cDcQVKmMok2top7ZJqt4KVosQEeT9jjsgBBbEtg4cWb5ddR
+5rf+aJw0v/6dMLef1r9YAo0ZtLc+g2dyacqw73tcWEd3oCH++SgE26NntN+GibZu
+VXSE5u6xI4KwfT2vUT3jt5Fb29myX4sxsfB7n/xageuJYy5ms1ABS+WDO5ssEZC4
+eQEVL7eyIb9YhNAW/WtjeAuOfOKNonoqKFGXABEBAAG5AQ0EWUxJcwEIAMgrP3U+
+7YCibxSQKOZrp63RaSUkv7mCvQ3Lx4P4ZD/sDEsLOiKkAc+ZU7ETTIQkEpHaibvC
+ZNrA+R0pfAj0LYBLstEIkUxtAaVM4DBQGN13Zdup46fI8rPZEyZVb2XpZ/qS4RYi
+StFyJzUdazBJs/IB7CT0xp4DUFUOrsykVy0aWzWt4z0QBe1x3AmpAO/DdrDN5gvt
+mWzWbV3f783PuK3g41ju7F9XX5nuuatNSNHOHt65XL4vmhmSfXuP6UFjK6MKzq9z
+pbZD4ipUPoKEId5ONDSucX4C8OydpC8+rFWJCDDDvocox3/l6TzihQXf8MDDcB0u
+1TgDPz4M/S2vBh8AEQEAAYkBHwQYAQgACQUCWUxJcwIbDAAKCRDgEwo+1aIHntk2
+B/42pBknUQB2YjkPryJ1B1ArcxaLO7gVo/lgT/rLGL7BuTYsFIl9kJUD156EfkmS
+AkfsxPzwUNh/GyfVQt09F6wheprx1fLNJCFIYA9ZA0WVZGSwbE3NdiuwEaJ3/HZ7
+7IteQh5LKllqFuSlZ3u0xdtGJjnAUU9wHxWH+0W3RPm62piSJcWUw7CSqEyuX+8Z
++eq4HY0v74znfy6GyCiil7S1T9fdan22hP3xiJHgVKtyFmhhrz6YxcZLa0fYl+R3
+mCQvt2FuiaLL3d/uH0z6EzWs+XZNbjRBTGI9VmO7siIy6rjatdult3Sx1quBCixC
+4Ms2AWEA7bMqvUmCoB2M/0x8
+=6Sqy
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub A6EA2E2BF22E0543
+uid Tobias Warneke (for development purposes) <[email protected]>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=thlj
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub D5F4C07A434AB3DA
+uid Egor Andreevici (My key) <[email protected]>
+
+sub 9D49CFE20A7A3EE7
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+Umx6zyOUi5AfW8LWHwPYuk2dkLY=
+=KXp1
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub A40E24B5B408DBD5
+uid Robolectric Developers <[email protected]>
+
+sub 6A2038967E03726F
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFRdA40BCAC0zSALsOjfjr+gO8q+HV4qPWuIRB8S4z//jCEpKypyCRR9sA0W
+IDHG6OqG5fO1bP6VsHvSx32E8YUf0bi8eGgpKj5gJ9jmausRvRHtUHJ0pvZRBw51
+z4amYVr+NdVoyqLXBgBYeFlEYI04rQH9W8r1bCk8RKGJFNvO6ikTN9opLRkvZ7A6
+7VKlQGMd0sSJ3MAhzKUkM+ZWeCb/TG0xSrhJHcrFUORdV5zaX61anOTSst4HOTuL
+ByIZq1RMxKP4UJIWH2NYVUC1Bdn5CbY5mJysqQXjobPwG/cNAyBjsDBCh2VMnFY6
+geCHL3BowNd8gHUr0wjGKOipRmyfOJoTspMfABEBAAG0NVJvYm9sZWN0cmljIERl
+dmVsb3BlcnMgPHJvYm9sZWN0cmljQGdvb2dsZWdyb3Vwcy5jb20+iQE4BBMBAgAi
+BQJUXQONAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRCkDiS1tAjb1Z24
+B/4iAEYvEFhBGjOuXhAPmZSyYyiHWrehY2yZGKmjPKoDKxD05PC6lCNOsdYn5WQ4
+sO32Yi2MbCRpOdphJDJORuGapMeEdrbNqAZ3kzCyMEI7AojH70B7/g99bY9bLq4c
+MYS1udCVPBzfNNSZok22S54fJmFg1evzJbOynZnIFKAhSWL1Ns0zQ9RXQ3gddhAF
+zE1ciZTwmRwdkObd/oxjs/g5ps3VuB25b88+WxGRaZf1vlZN8fNvK4AEDhbH/j5+
+VjcI7R5zLVsYNHEZSspckuoxn+1PNOKDZvhrSrDlqf1EUSmPb4j/nrW07c1p/91/
+T/R02aGSzbwqbbI17ZuxYMU3uQENBFRdA40BCADhMeWEVcUNBLRWDatdlvc7q3jZ
+EyejhSl3zw0I15yhoBbuW+ZnOTG4fkIr9SRo4whm2NZ7eemEnQ6tuGhVXUqPIxWA
+wBteY0ZBhwNGhMql+IIdOE9WIo82yV4gj1Lo2rjxaxG4Rd7FQnys5f+XyFZ8vaXp
+mpH9VeFjc1Ls550DUP8iVvIoKI65Ve5RMZc9e3AeP8FZqJpc3q+Al2f/FAO8+tiD
+/J849aP4aqUKiwvHk/nxle8FwepQyvXRrSpFNz2uK5bgIXQrxgcKLPjl6s9l8SKn
+Twg6ok0EcJjGuHjzCeFNp/WFpAeJAxmAZ/qUbr0TBp6jxXoMc/RqdO79MPX5ABEB
+AAGJAR8EGAECAAkFAlRdA40CGwwACgkQpA4ktbQI29WOzgf8D487fhQSsH87OJfp
+oSPf9p2wGzgNFAc+sb0gUy8rMmc/xySKGfZ2BZFT/CAQsOzGZ/KSM3og+FFgDcm8
+GWpSfZNymXnmM8aCaEyNj4arENxwhU4BEnKYFf8PIDoCjAqBbSWuTa2RzaWlawEE
+g4hItheFmw/My/tbo62N4zn98IYU//50PNDuDb1lvOi4SVFglXRoM+jS2X6E9R3Z
+7sYceClr2EDN2k+RbvB6ngOiu52FvC9ZZPJnfK9/XHFtKcQ64yu3pbeXwiuqyr4T
+SpzGJNm7czyVylHZfvkZYVhmZCEG9xQ0lzHshaXmkfqi5ZJMEtXwNP1dWIMhIGgY
+4aLehw==
+=LRPz
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 102E05D8DA6C286D
+sub 7680B2343D1CF013
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFOZyw0BCADj6eDnIjaug0RJQCi/HLw5jJ2kORPaegxFuE5IhpN9pZCPASax
+aTROfUSnys7cbxZxh3Sri3spQ0j+ejod0MhVX9ajTg508YAJUaCBbM7CGZJZtVFL
+atf99umsxzDrXIk24z04W5KBiLS3M7QKPyMujjiVy9naFxyW8GXJxYcGKUEltWwP
+zgO97xwHs+T5nXcO6jOrJ7NxI9fbnWb6QY6btSkrlpLnwH5yxGpajcR6R8+kj+0W
+dqWWrs9vo0DQGohkoqjTzeVt8UWHqUBva6hULkz6H9CRLfVxuK3lLFtnRBjnjRbu
+bNyOdVdtaXArmMKwsonsaZ0E973yqcmbhKQ3ABEBAAG5AQ0EU5nLDQEIAK6UjEUy
+lBC987DwdhJ8sQKGcOq8JM7sfLgpBfuRL+kWM+jpXi+DmfThnO2tI5UaaF/jMd8w
+Kd4JeAGE0Ynj5V1n5qUsTUXwEonDLLBOBYEj2NYJ40kmVrPdp00auDf11Y8NC4vS
+m+4QV+FDcWvV62ogOC5rYKOaKMPf20F9rCxUBwvrXNHPQJZeX3FqU/HBhvaqtHjA
+flZoQF01baDMQTZf5JgATzXJRsKKum7z0DWiYNoOJ8wpbuXM6CG50N+4OrlSZfxx
+kN8I9sSyREzHj5zVWoKqeyii9HUeqBLWh++TiYrRyP9NHM1SXhrtp3wZ36CBXqp6
+ME2K1DQTMlqZTwEAEQEAAYkBJQQYAQIADwUCU5nLDQIbDAUJAeEzgAAKCRAQLgXY
+2mwobdDhCACjfIYnUCHd6KzmgOoYXsW8NeVE3QFpMxMVq9rNEJxAiOg3b+Bdz48L
+2lQy6yJJ7owKAH2M6FvVXpfrdkiMQICEzKr1IT48H1Sa0jj0cSR0jRYszmd8k3G0
+hBqmGnfPBfolrOVDaRGf2CXCZFHVZA/Qvof76FaZ1cFAKYmUraXJBocxupXz6QMq
+P4qsPgkscwEVv4b9u+Q+YLpqHBiWmsHk9mp1Jtqz1SBTqI4zVj7w6qmc0aZh9I2T
+ROvKAtF7WjBg9LEFstqZeP42rKenm9vOGs0aQbe4kkgFMIwkLI1TeXrYeQWSdjlN
+nCYHwzPH+lq2dsCro1T8dMZTRFWKeaPn
+=w1VQ
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 42575E0CCD6BA16A
+uid Taro L. Saito <[email protected]>
+
+sub 47624A56526BF2F2
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=6Iv0
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub D73C68EE4152C255
+uid Eric Chang <[email protected]>
+
+sub A23FC45C6F9E2F57
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+zJV7rbKv80zNxWNJMOr+yshtM+Hclm3s
+=mRRB
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 62C82E50836EB3EE
+sub 2AC7BF2F3349DE80
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQINBFeOGY0BEADIr99yL4ahwgM3KB7zMVzDk/PEkzUWpm1BSxqUxuQtzWArFj13
+Y3Zi6g1tw5jKESfxtmpXx7j7xR3qVdJbsYJMU0zQi+FehwnKox3Go3UnIKt7kydz
+CGowsRjmEuLErftU6QCDof4Xpum/IPFgu3mcQK3dp+EL2sJDDBahz52DF5bxcSZw
+4OawjX13pnjaPHGw7iWt/fhMEDRmlr6c158lTpEMGpIHH4cum/QTFW1xRf2osjbk
+RysnD/e2QMTwnm05WdImBQq0PQGU3Scz6HQr06UAWyaaukp+k9nZD//hZ7t68w5Y
+wHxHcpFI7JTxesRTv8PNgG5+EC61O2fxMgAefDv9UwhUpYDfxtc0yJYz0QTfNQQB
+RTd8Os6J3OjExDnUFUtPN0Xvgl/SzfCIbxmr/mKqWLzazJMiuNs6mfASrYVuYERl
+c8Gm5TXRU2Pg55KeL6iDAyXDuObKvmqYKb8qXM/qba+RI+KOhBLPSMfWVw5nziVL
+XY6sjXHLIyM1AfDfeM0DHReDR4aIkdnQ4yzyzshmhTodguDbZe2H1FlPNqzriS6c
+4s7CoyO8tTTSHmrxkVLJhMaTc1XazhcQrsp/1s6SJ5MUy0rFUt9QyIt8zfGqzQVH
+pqXmFZd+ISd8Eivsyh5gEU4JER+3J7kSuMQx/wMMZqzu1RczUz4gI0nzTwARAQAB
+uQINBFeOGY0BEADaPmufkJ3ZMMpXhbkBISnPYW/2QGIU0mtwGOO13PnkxFGn4bFI
+es0459axyzMAT2DiOF+cOh0R38DJN9r3ZZFgjAuiy0WTaHyFuON9Ebm3uDLN/VrC
+laXhHI2BxzcYC+uCAor/zJRytD36Cxq8c20NqqQqqq/p7mMDp5S0EjoDpuvXQ55w
+vNmH8dwqu1WBgSYbv+R52fzmQfy7OktbU/mvzkSaxnfqTiLDr2ZkAZcZjgURFvGr
+OB262jvFQ6iTj0ATCrj+xauvpazAAP3z0EgUyegFOHQX/VjA8zqJgMF7d8WcKfzG
+xohxIck7ozOXmcroLzUPLb/i8riDOftXqUcKIkuWD0vtpMVytXYG5RUAo24ypGjm
+Bmvyjy5EkPlc/Yys7Bja/tUKG6F7pcZep0OHTT5bWHUyfvC621cc0RODMC0jCOHb
+MJCetcMBtoPioGBhpjZGrGp6qXfTBg/HmvNgPfWgLDdnBL8iE7aq+Ob/PcnodIGm
+tzAskUhpzNqhtDNbkHV7GDxdlzb3ktZMBGwYgeCal6YzwF76gqlLDy9LQlc/KVme
+A//xB8TAOMEP/qrlGgNJV7kohcvY+4drpTf1MyL3zpZZvD275+sdkL/tjzV8ow95
+ggVesGRDrxvcGvbsS/saKQxf7iwaZyShaNNTCqm+131UWizvVN+enO30ZQARAQAB
+iQIlBBgBCgAPBQJXjhmNAhsMBQkHhh+AAAoJEGLILlCDbrPuA7wQAITWcr3QPf5O
+c7JLjJP+KY93Nis1SXz/fVeFtb8J4FanXfHXE1qkwi84Wm2JsQwi+4gPjt7Ou5Uz
+no7kUHKlCtHsPmQOxnkZSosfwi1l77d5gyLEhlbLwWeahM/YDLg17Z4l/BtKED+y
+A28dNhj+na4zf5zHHKT+KanqlyMAKxrqExwS3OMcBz3MBpjTjhsyHhPuJDgCumvJ
+cc0EnU4A/L2pjX7mH3qGNstlATi5xG8PEJe33N75bcYzTm2ebL0YvqH1P3PEmsPy
+G931P6FRSwDnXXCFRpyjZjTorPQaBYRDtUqaro2LfW93YlFdd51kXhiEP19CkrJ0
+GMHbl30dx2WbBCMJpojYfarTMcD8W9VXnJaFj3r3gq83WIux4q0IO1cQkvzVZHB+
+HA85ufWk+lDwxmWbd3qVI/36uP/2o1E37LGVX6k3PmaGTQTj7LzZ4dHK5kjV6Z0n
+24SdWW8X5iB2vhnmAG5cTxQ93uQpy55Y+WLuQ0T4G7vc70nudNsNnGw/i1Ij6UCN
+vMk0CpWLzwLMzJ16sxv9U3LGsJbkYU2xLF3NLpKhgHpeXwoOBlBmk9TVeRqXPnWK
+R9uFRTPm2NRfi8JR4nk8l9f93O92HyfvZmKCQGvlU638CuV/+g078eb4AnCiNSch
+egz57oSj4I+NT33hA64x6jicEKyBNxNI
+=T3Bh
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub AC5EC74981F9CDA6
+uid Cedric Beust <[email protected]>
+
+sub 501B5ADEF57CE6A3
+sub 5D9FFE7B8E3DEA8B
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+FF1NsuDIia3lMYUCPApVQbA4f0Paaw==
+=qDUR
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 79E193516BE7998F
+uid Filip Jirs?k <[email protected]>
+
+sub 9F7335D63326E7F9
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFWdcSoBCADK8j+0eVZKUGctZo/VaJ/K2Wppx4jEFgih8xiIWREQ9B3QEugJ
+mJMWZHhrnHB+sjVx5No482ch6sVhYmC+VMyTdzepItZ8beYa0pnNGJnrFT+HcTOS
+g21Ef5e6BRORNho2j9YTvxvjof29XxU4SJFVgffs48jGeJzN1EDmOz4OlZupKGU+
+98o+kMKCiFjcf6Vu03asuml97b2fMOJ09n+UQVlZbBR/Yo407ZLkL2Elx47Fz+82
+iO+M8w2qNnxT4PA/TLgaVzkVHaR/JIDlQQ4DfuyloQI1hBpMB8f60oukVr5dBGuS
+1dPZ1H7td975sLegWoj7CCOFZXrDzYUXwwXPABEBAAG0IEZpbGlwIEppcnPDoWsg
+PGZpbGlwQGppcnNhay5vcmc+iQE5BBMBCAAjBQJVnXEqAhsDBwsJCAcDAgEGFQgC
+CQoLBBYCAwECHgECF4AACgkQeeGTUWvnmY/Z6wgArX9fzySIVWcqFuhaIlRlib9j
+1qE3sSiFVENV4NrCYv+4ZUQUEUvqwX0F4ij+Au9fzvaWb0gT02ErHYJ9UowUgUYb
+IdHsifoGh05jZdiClXJutcQHddM+P+ReIAS4/JDlXza1kqa1RRvDh+OtsrDkL1MU
+a5T6/KbCWzAj9+96vqa2dLO0mhyrPpVX/hF4tPY6ltGYEXA9N3c83rFmaCZTNM0t
+sEQniQMICOMZul2dKJ4Tev12/G9sd4owtlHtAtv0+tFPDMPQAXjToUo36q9MIzKE
+Cyz5sX64QRablAJc7QD4MFI/7J6eQdpSKM77QaL48kcUAK1j9nlXv+oj/1d437kB
+DQRVnXEqAQgAonYI6XgMnKL5jj1n/3kVxKA+4m0znSoMutK3B2D3geqTzFWlDIWU
+EOEE00U2mBMPUibQ9orbu5IYrbXLR6t0QORJiHudP3LxdtjIqXCagdzCewJ0Kfvd
+pR/a65dsULLu4+v8R7KBH+lBVs0aN0z8e539ZaoGPCVaWliybbHwcry4tOMu9wyB
+dPlt0pkqQ7y+YerXgHO+hc9urQVY9zHVBRe1J2vqzFONitFlD5BoT386pz8tBi0W
+32J46nTgReukzJWLbtV53fxYAFUroA7Ydy2xYKQ2yVqBq9NraUNqbdtlEhJRDS3W
+eQs4ittg+oyMumIdNjSbUlbDX0O7EP16KQARAQABiQEfBBgBCAAJBQJVnXEqAhsM
+AAoJEHnhk1Fr55mPAAUH/itFMvGq/ri1alRXhLbhx8/HmwBBkgS8wCu/oIIPEZ4W
+jRB8EfEYAMbmqtmbGFc/lL2QSxvqAcsUGFlVqRe+Ux9LilQx/84zvD6aG90eTzfF
+pNUHkgBOS7poRbDggVaCSuDYKiyTc07hHNl4iZON3VSiOaXf/4rzbIzv0n0swc0s
+00N1IcwI/pP+74t+tmfH4PUjZwUC6cXHMHSfvImAO2hPMAbd3rJ/ZO/ZVwjNocjR
+5fQj/MSOgl5hiXEkuBdoqoD0lTJMYCwPgwPGNcBr2xeXOKxeIlbYGwh/j3AsK0Op
+uqUJfZ5wvADbdmco+6Piann1q0WvhfmRaie7IPG2tB0=
+=ZbfA
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub B16698A4ADF4D638
+sub 32784D4F004B405B
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFM1v9ABCADD0KoXq2ZKlUHeIVovQy3gFmW9oFAaraV48ouv8cYvqdf+s91H
+NyqeyNPT/ihFeNqZJUAMyPdwN5xrWD6gxMrOCR7BFhA5kLmAKz4HfFCQ05ViyQdI
+/HVNFvTdF8LNnuF+a5aNgg+jjLvFwzkyMFkuiPGuUDFnqEGxC+z9J8t40tpOTOIw
+tPjSzkDN41AJDpUK/simKC5F0Im78nUbwMalE5z2IsZRWpYZyIhN1HhEdDvaDIh7
+3vENjH7enAjWh0iGRu+GTP/fayZnX0uhmausCCwMMhsr489e63ZOaJrqeC//wWrX
+dtEJjcmvRmJ2hwLmgwMP4zSNKsnLGzP0sh69ABEBAAG5AQ0EUzW/0AEIAO62SMbq
+gIzEFQEHlxNN5pZHd7msqDESILFYFkI1mxlkD0twFWMbk4nMH2VXhiuT3ulqKBOU
+UUNQrO7egtfbGsgVv4bWbUHfeZkfvoWDlmbrvi1YLlR/ZxzGpCNc8e3aOcN3XKHl
+BwfUaco6pcTBvLpKPA/TAjkTOtK4A5Azv1CSwpzSJf2bVVbrn7mi/rw78SmZAV2/
+rtiOU5a9S+3fzswLk1PO/z//d4VoCcL2s2WueVO1Q99kejkE55l3lYwEiBzVuAA9
+8Q0a5wg84vRGFZQWLIw8c20On2+dZcTLZc61ZjnsI1LSnLUUyQ/fzHQ+BynQF9l4
+3ZCPKFIl125MGikAEQEAAYkBHwQYAQIACQUCUzW/0AIbDAAKCRCxZpikrfTWOJel
+B/9vDc3G/mrIHB1P/zl0Fdl5wQzaSVc9JB/ce0018ptplL711af0ZDvWqmZkJNkY
+u0lHgnniaXB0l3GGUPIa/TZzVgFSRPj65FWTMkBbNnhGIwV5IVOPcSKSyDYn9/nQ
+PpmWl5fDj8xiv6kKYxA4hjjRbRGuUXiI2dnyFHuFpacf/Af/Mc0U/CDDuz5a1jS4
+SYuYM/HFVL93POZzwLUR/+GDuVJFnm12rmjGnJVgR0rWcJKJt6vCsBPVfIamfl6v
+G+N4TWQ9euj8Rd4hjsYPOwDfgVIUGIhpTUJ+fz046fkz9MWnX7RJh6hqLAXT7Hbc
+0FTFsKYAbLJbm3Q+rU9jTdM8
+=mDDW
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 62BA9C275D14234E
+uid Pierre Yves Ricau <[email protected]>
+
+sub FD2D3AEF63B97A64
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=ukU8
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub ECDFEA3CB4493B94
+sub 3BD211F725778C36
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGiBERFeVERBACjfASThn15ynIICr0Gu8quGCl2rSSRar8TsjrbiwYB2MTW35Rg
+NjLU6MN5Nq4d5G8D5aMeoyGODstIHH8zA52sDGeHOMKfDaAraL+lGzElbpmaqP2s
+P+y+J4gDMlxSBoXY5HjfZUTogP4olWYJS0tWTFc6EiXcSH1zCo1rdo1TTwCg9/U5
+q+Us2XbjevKghRbRabl//R0EAIcimKSJf1w/3yVwrYeUh2Op0fM23y+JUAPcG8SD
+lRnHRnIrf2e0pAkQQ32us1zRaHbuHzcJc0lP1eyoQh0KoRZIUq/7mj9q6Dp3H63b
+VNAxU7O4DyPMMmlgTiZCjwN2qBclZ9zegGx51v2UR4b+qKhZZCHOSjdj0Xhq6P1L
+O7G9A/wItw9LtJhVBqXVxL/pNVNA++NneLMdl5OpAAqJtI44oflJpo/FJlnDFuHP
+ueLYZVWWGoOlPW0odKxI3fvMO0ZfTtm4VO0mjEN2kZ/OR8L3c2Tdx9AHS5lVqIh/
+T4fRqXl/zjbdE+ZqYqhEYelZat3V4EhBAmj2jFQiHsSbfMiSerkCDQRERXljEAgA
+3nHJ+5JvtwQIFzw95ZTPdB/4+Do6JzhZssC1L6ZtgjDh3zdEDbloXsyroawwcY6U
++unak24iTXlbcI/IgZnYIzZcdHM70hi9KtfhSAMRDI+UaFsxLhvx8hcTUV0fzx+B
+8q6nvdI/8fnjJ6Cr0EaCmWOqEjERs9NL7va7Y33JirQQ3pwe6VpzaejE+OzpqQMA
+vfhLw9ucq+l2KGTTk/LccQU3sUIF0osAakPXbTPDHXFmqWkIp0GQIExCorW7FBbq
++4Edd0n4H54z0kP/BLh3M6HgHTUQurV5yw+/enSv7B0wJPiULiUCWN1hb/Vyds9W
+Yo4NPL/MIlxH/ZVTUids0wADBQf/WpR4MjKrxrf6G20J+TXBnRV7cZPdx4FsUE8s
+CQFay4ZzXP24tkmWXQ1b8AcmUr6opnuMio6QXV1lFBIU2rrdoJ3uQihrc21cTE5/
+FzYkFrWH3ESlOuYUaqefWJp3B5i8lNoUdShAK4iwjxsM6J1Mnl/TT5V2nwvB38Co
+AcuKQTmUGNOAnECAPGmTy5NQ2YLZzRMHn9HzyWpNKLAEkp0qN9EVZK5TBGSnFP0f
+BfYPWHg+kaLVzpT3KhkzSGjE4cyWoyuIYwSb6/3FLnaCCalYaC8k2mEhw9oFaJc8
+yyIasKaoAnbPWdMXQR32ZSTUwWBd7GyA9U+wLaNamJramQEBFYhJBBgRAgAJBQJE
+RXljAhsMAAoJEOzf6jy0STuUac8AoK8Mz00VwJP+L1IEB+9rlPaWwPAkAKD1W5wH
+sZzmsaj6pFkpumu/OmsStg==
+=rjff
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub C9FBAA83A8753994
+uid Tatu Saloranta (cowtowncoder) <[email protected]>
+
+sub AFF3E378166B1F0F
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFeWvEwBCAC7oSQ7XqcGDc6YL4KAGvDVZYigcJmv0y5hWT4wv9ABP4Jhzr1H
+NDmmGyWzhzTeMxwuZnc9vhxCQRwyxj3gGI5lYPEARswbi2fWk//78/3Wk+YMHJw3
+/1EO3VqvvDUt39gbaSqMCQNHctnFdb2QYZ7nRFTQeCqG/wyMdB05beqEnWEXzjeP
+FDF9y6gXkELn0lxUm2TKO8tU3h96TCuutDKJ0aE00lOeh/MbEaGHEbIU8kdfui6U
+znZ1X80EWbkCY8cKxEZHKD0aONSVHXwE6nETvFW9/9+K+sj/I7ytlyxwHsaQpi1H
+6aRGnq013VsIECrwkhmXBsLLXNjmhER+LkcDABEBAAG0NVRhdHUgU2Fsb3JhbnRh
+IChjb3d0b3duY29kZXIpIDx0YXR1LnNhbG9yYW50YUBpa2kuZmk+iQE+BBMBAgAo
+BQJXlrxMAhsDBQkHhM4ABgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRDJ+6qD
+qHU5lFtxB/0QBiKaHHdFu3GOs21+S4LZYmO0bvHASg7ueeWtoE/1cEsKqvES03Tw
+iSfMabaPt+UL4qP9w6/SUtTITAmxuc1ksyU+HwC/R1QuF+vdsguFZ0/8VdVRVY5I
+5/6Dcp7kI49RO0LxGPXCMn8s3Nj0KXiCoodMDLHwwMv5OXWrQQ4yXiQTsJudBxy5
+o2yfp0AlLm4uZdDLj7Z4u4DfyKOuKIUMsMQ2Hk12gSkDaZViIURH6MaSEdC+XbDU
+cPTq27+JSdjfYEX0908P/bH36H2kPCGVh+sXpICZ/Ce7m0OHBfE/pTTCuOlAJvcL
+Y4QbyMTlyPpZ0zFgO+jX+fj8UFi2sRhquQENBFeWvEwBCADfbjqRN1GvSf9VkjDD
+WBqX3hILiPx3DKPiSFmSsAoiLSEkP8gRDBDy6po/Oez9q+bgb9Sk+iGifJvbVNZr
+7+88LSxQECsrVL+ZgTAZ2LkqABQJ8XYh/dTO6BMJ5rSLH/YN6bO9V4NjYod67W5u
+Yox+aCp6keE7ia7eBHck2wyqxikCqvVzmAduPCkkNSRuOwLkOguduXfwb7Cg1Rna
+cMMEfDd9t+a6ytY/8JFu01G++VVxFHO3vs//RINrm0O4xKPkT1+Ocd4+h3DlhhRv
+RXvI+MKeM0ud0OpUVCBKCZqbFKTVgoRpsKC925ZRUSqbmyBcIkqyYjzD1adaZdkq
+4PLFABEBAAGJASUEGAECAA8FAleWvEwCGwwFCQeEzgAACgkQyfuqg6h1OZQ6swf/
+Vm0ndBcvdK0qCoubR/WOsynS1wdQ2rGKJC5oVsUN4YVCZhg9OMhwMSO3EOBPdxtq
+4A8bSZp/8ZWmHLohE8QHD8AgaQBtRZyNkvMRiN157XGkPEBRWdHw6XAvx/lE31W+
+19qFRnAE8BbERE3gieJcG4CKWy5CyzXnjSM+znZvDQ8J7MfG+LxKbr7zUHQH9ZWs
+k8V9D+GXDgpuyZc4ct1tNDLcn6784FubcdrD3RLMiOAYSSgKSgoELRzB8zZds+WK
+FuiAYXZSdzCbjJJ2VqnJnQtYHN7Z5r3ySqbG7w3rRen+Ett6PX9Hrvc1MTy/UUdb
+3s08C0wD0x+ZzFzqUXKTZg==
+=nsI4
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 3E3D777C909A447C
+uid Dino Oliva <[email protected]>
+
+sub 7ECD484BE871E4BC
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFhV2aoBCACyHcEuTUn5nVo1ODvWvgBgV8b6Aju4cVAhMNIvAdcOYf+N9Rgo
+Y/669/P371uN2hc4SxJeORBjHyzkAX2sJZQj+FwdvGl60YX9Zv/NQaTzC1WFMRp2
+rb0QGj8yia+WA+If6hatbZmCg87CtDVpzpPIZUzX4UO+DRQEhezflt9uZ4YrFoYq
+PmbL7znqm7/3kpenKrNoinGnzFG7wnOrDfMrBrZgL0Vt95zvs/PBTyE2r4GWCNms
+PH6n50oTck5Lif0EtnIp26o9+vgkVVAFcHLUDy2y90g67j137SNnYu/47FD/rS8R
+A2Y8wRd6lXXxI/n5Wyj+P0Vai5zq6BIFPMbpABEBAAG0G0Rpbm8gT2xpdmEgPGRw
+b0Bnb29nbGUuY29tPokBOAQTAQIAIgUCWFXZqgIbAwYLCQgHAwIGFQgCCQoLBBYC
+AwECHgECF4AACgkQPj13fJCaRHwthAf/SihiHP9sr4LRSw3TW9t1CuKW2e+DwsJH
+6BY7m64jENIKF2zXWuMkHzGmM9pVO6qy/hY610wI6GqppuPESaFOVBc4sp5i6A5+
+Z70ZzXVEM+rfjS65qAbz0VdaF6cIEcZrJ25DD2DYLMq9wMAWo+EqKyiN3OJ/m/3t
+xz4WECkgpAgIPdfriJ1mmkn0fbpG1Hc7uhwtg0EfcAc2nN84AyPlBbh6RMkKDFgk
+K2/zwsdR6t93JzexVEXRN7hiNqBu9rFPbyvXy2jtoO9P60vlF3OuvM3SCqAr4yYL
+l9Vlkh5ytoZW/XPMJMOYsullzk7q2zSKIOPkx/Si7fqKz4MqZzc7zLkBDQRYVdmq
+AQgAuTKXw+m5HveJjH7uTGdkmX37rkOX7Kl6cyPutq21tbG9cGhrOplTJN9lDoK9
+7km2YOs16SGVlKTEQtJ7CLAQGRLW1qPATMlW6gJ5+KAAY1GFej+DZOLYy+RjxxdT
++gDSIXt8kQwAlETwSNgymp53TrU1dDGPMjod0AfFbawJtxp/gaI/Sb+MkzLRS+NA
+7g1fDNAsy6twjxwmL5lvCUO+JMtlG8vXlIoiP7N6hXk4PYzYFCI4JR1H4aNhIBk0
+4MoUngJj2WNXfPJYQef3DqAJrzaQpuiCdQAq6F9GgldMHyv0ujHpA2JBikcxlR1r
+dUdo2Yqnc90pd5KB6IO4TfN8twARAQABiQEfBBgBAgAJBQJYVdmqAhsMAAoJED49
+d3yQmkR8SNoH+wRfWyXUFPVDNN4UrAi5HEY/Ca10AGuREkzacZSVz4dYtofNOAxx
+RVfOAoZr1NUECNvWgyxIZ8ZkeQi8fGN8uS3becIVAWmkji8l9jDRpC3DPs/g/7wL
+4A5VGzvp4GdD6jHk7KCVPiEk1DzRajI3sAntmpTKL9LNB9LpP4NdWiFA8TPMEHIg
+SqMuv1Jzycngjd0Zr9joSJvhIU+j38FvL/F+l/ooa7TKpRv6f2eAlyls0K1V9bUh
+a9KhGsyjXqolyxHZ25Gc3VnxEKIZS6R5QrxVbnXPmd/SV6MI4fBSrcrNgR91iH9X
+r1elbwcAFltomc9/3/7xXmHMaEfaxJnY5mk=
+=geV3
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 02216ED811210DAA
+sub 8C40458A5F28CF7B
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGNBGADx6IBDADoHin1LGQ8dhnlhfNCBZ3IyXS2NpR1VjmYtHSlh1hGsPcmHuwo
+1mLA6JzXF7NuK3Y52pbTr6vz9bAap8Ysjq/3UJeiDbf7FvmO5xAEVUhrpc7AEY7G
+Wygi+HqK5OaNhxUr7OmHY4N2/NxXiYGD2PNU3mXkOszpQJk3yVKgjmGnv0zbTpn2
+wwsXygc87nG/h2R4YQ80m9UknkPR63vRwPnsTwovG9CAb8RyHq+6P81vKE/U5GUJ
+TzV1BDY95niypsCYja2QR4Gi5TKlpsUjT4sT32l6/CqOhcpwO05pTv0fvoHDbDx6
+/gHivgyVUyPbQzUwYfMYoINePOaX37okHQE8n5QPPx6HmXfIhumKbXi6ppVPjPG6
+cB2Lq/F6UKHlttiwWgSIiLDC+UbFCVvc41Lrydbt/2eXoBGxWbU6DUSGnefKymP3
+c3IsgdzeP11tlfaxLVz60lomXMeyyXD41QzeuyzUNvoSgiqSE6BO9EqeCyk1/n+O
+Are5EFnyLBjChgkAEQEAAbkBjQRgA8eiAQwAuC4Z9laL4sRX8FTseTzd5/8AqBKk
+gtrZjW5onrse1hWpkjeB42qfhVrfUorkpGY9N0xo7jZT7PhXuOEB1WRcJPHA11Q4
+166WkHRDv7IwPGAQr6LsJAAlZYkV2d3BXoWoS4ATCH1jyXaxKT/jNGBazs+Nqprh
+ypL6X2xOIqKozehjTMfD1cFzFzoaZvD+G9qdk0w7qikUIla0Y3ADswtMLH32mszw
+9g0ddFSimmWQ8scVcaalt9k9ATX7zMJKmYaYi6fWsH/Le13DhJgQMjjh1BeUguIP
+r6pRoBZ/5xJxJ7OKIRk4pk6h7BImGMKTCONICf41i4kGsZMoRb2XvLDgSNs9gYKp
+N9+J7TYTeqofBxxQLH6cVplBPoNCkJun6scYJLWAepr4u0K5RTnU7y9iigiTTFeV
+xbSjuxIEzLk9gVKD1hsbtkLVmkxMljqJG5El3I7qu7eM2c1ufo22BFjHom1CmtWd
+oai56nxG5zv1WDsMRJukaXbDwbpSkb45rj09ABEBAAGJAbwEGAEIACYWIQSFaclc
+rcUIsJ/pDzACIW7YESENqgUCYAPHogIbDAUJA8JnAAAKCRACIW7YESENqpGYC/0Q
+NoVAXMkCa0Iei/kGdzZNLKpiG0nZIJGuml9T7eMyp0QQXzenOahCGhna4QQvSBER
+UZb9HzP/0xY93C8FEXv7Ns972XdeOvYjpOLG6euRwWLD//c5Ah7siSgUJ7CFPBHj
+r9mnZXzYjhvXT0eJlb96j0rBuSblG/NXu1oEJPySqP7vkK2ZZsHNoGfSoGlGtush
+YtUP568KMzz4LsnOfSLnkOc9Hh0qydipY+ocfQQhh7tLUzFsMbG80yWw4/2JVicT
+nTosdl4J9WyI3Xuqa423XEAC25dS0aQNeDa4lpfmOOyj5ViJISdutlVC3zmtkpXE
+xUXqb+AcsNDOuulUhVjw7KpKX7xUXJM+LSg57lfyGHiLejDHvPAXBSfzFxT9ZDxO
+92MhvR7JqP1Z0SvZ/yZ1RAidKaNJs3o1Dk/WbuxnRYjyf4URhfUVeH8tykNDIMJr
+gY4uKjJu0S9RuzG1PVw85w5f6UDZlJ01gGvtT81JFrizhvS9t0HoPbDcDhG5iVE=
+=Lmqo
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 7A8860944FAD5F62
+uid Sebastian Bazley (ASF CODE SIGNING KEY) <[email protected]>
+
+sub C189C86B813330C4
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=Q+g9
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 66B50994442D2D40
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQINBGDoYisBEACqUDZnT4h6ma6XIzdC6KR++uDbR2VKdhCuv0Og/sHEKkm6ZbG0
+OFB8tAaQx/WlsoQyf3DlLfUEOGDai875Aqor3fbM+E1hrZbQNfsOySKEE52k7PYe
+0qGWlnAzINuQaEuZwNw+pjZqPraMlwc/hwzJB8yFNHCv25pCFohK7KXvFGr5Fc6y
+NHBp6pM3pnDQ1kbkloDr32YZY2LdrfdkRqwa9STNMcZtM724aaInValFpVGEHolF
+dklo9MIsMI6mVHlxi6UwFSSLltUfTXGYY+rt2Q2sLNnEKzK1GvVhK996vrNWCvpr
+cdtbTzGE3WK4f2knhqzlaX99OLmkM1ah+p2EkK7HgWM9oEO7SYpNxKe/F/QfRNRS
+4W0aokPsEtfKCD7vQ3cRWQXdqFwvksilv+b6pcSrwfAsaCzVuhB3lcIra4MevJcH
+ZEbPrfGMi5/MIVtLayglLHSPoZtjQBhlqo8w3nuADR/aFlIUZ6NGOwaz5yXIGVEs
+6E1wiuILRAd7ecJ3Zyr/URHjawfHfKMM2tNCJKl48cScBMY61FJ1EmYzwhDw+at5
+D4pCk75eM5/t6VdYQ1cDWm7J3LGXEANMU5aSZMqgVnb4SQEmRxkW7oq3Z+GIkQQf
+Sj4OK6Oi4cUpM7b0m7Cbcsoqb6nD27VKD3J5KTYEq3e+78h0VRjhoi0Z+QARAQAB
+=UUB8
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 8E3F0DE7AE354651
+sub D3047B0BA4452AE1
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFMnpeABCAC+vckg+AqDG5Sg+GKbA5t2knu72aD000Qle1X//SjTvPHz0L1v
+rUNzwrqlmah17usczZHOoOCaGjSUFl3nPmBEOlLBh6L4+e2Av8PSbP0qUneaQVgi
+TQfbNgRB4v4H5dtKIglK1hZwCeqFazuRuFDWLHl/IG4ymcMwy/86y96BJKWrW+Oh
+4vK21DF/BRhyFGaIGwN1aPYRofy3ERsUfwe9WiPXXuYb3gvG++QuiS4V7UJwcAkx
+5TGukoatI4T1PVmZPk2zmeM2pHQRisHAScRt5YJ9bswgBphk1xHoENVQ3BYhzrsu
+a3hFDY5hO+UQiT+eIE38noOuKuSbRalSPelvABEBAAG5AQ0EUyel4AEIAO6MSdr4
+Sp59Gb+J8t5o5g+f4jMJPm2v7BkJzldN1JISoEWeo8iyCOVcM4D83coihMfN5Nwi
+7Tuc4tnZH00+XxYFkHMOLMPtCE7l0Ai8mVhFqE3HraCVnk7gRzNCyXeJRu+Q1TSN
+4QbiIEeonBSoGsAYafkAx1evBJtGmrDv0Y42NdocnACyRPZD0usxMARk2ZwQaqN4
+Ih5pL2MGXqMeo6uEW8iIIumnkMywXyZ0jbAcZSs9Smi3AdU8P/eY/Afpu4nyYVAU
+Sdm79eMjcBHRluvuk7db3mMzQPAepWQSYOgsbWq2BS/0rMq65M+uWo9MNpP1ZH2w
+G87qh+7nFIk38h8AEQEAAYkBJQQYAQIADwUCUyel4AIbDAUJEswDAAAKCRCOPw3n
+rjVGUXwWB/0Yq3UknzRomC9wi8sCh9Nv4erqjSP/JSoNx+rYNpwJX74jVmUA4u7p
+pzywCwSFKyE2L6pkgKw0y+KfE4cWsotlfO7E6VQQi/+cCb5OCxqf+gOelupuW4Co
+MSHKkPWXI/dhM1NMIW77+bLiiHfaOW3Wa9kBSKujiuFSp9tIq2gjTf/2rKQMbywK
+szhlBICdvYzji8t79C7tAJ0xNgZJJv0QHP+5MZJfMAARKrvtRP0I5OB1HYVJrH0v
+RbO9Y8PoYrPxeR5zQYxAyt36/DE+PM4CpEcCZ2D7Xrtk/GKe3Y/jU8FBifEebuhE
+HdZk2xusuOEx27cIovRPHwvLcgY+4u3j
+=oNWb
+-----END PGP PUBLIC KEY BLOCK-----
pub A2115AE15F6B8B72
uid Stefan Bodewig <[email protected]>
@@ -10026,198 +10857,244 @@
=Td5q
-----END PGP PUBLIC KEY BLOCK-----
+pub 21939FF0CA2A6567
+uid Alex Herbert (CODE SIGNING KEY) <[email protected]>
-pub A40E24B5B408DBD5
-uid Robolectric Developers <[email protected]>
-
-sub 6A2038967E03726F
+sub A98BD25BE464EA45
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQENBFRdA40BCAC0zSALsOjfjr+gO8q+HV4qPWuIRB8S4z//jCEpKypyCRR9sA0W
-IDHG6OqG5fO1bP6VsHvSx32E8YUf0bi8eGgpKj5gJ9jmausRvRHtUHJ0pvZRBw51
-z4amYVr+NdVoyqLXBgBYeFlEYI04rQH9W8r1bCk8RKGJFNvO6ikTN9opLRkvZ7A6
-7VKlQGMd0sSJ3MAhzKUkM+ZWeCb/TG0xSrhJHcrFUORdV5zaX61anOTSst4HOTuL
-ByIZq1RMxKP4UJIWH2NYVUC1Bdn5CbY5mJysqQXjobPwG/cNAyBjsDBCh2VMnFY6
-geCHL3BowNd8gHUr0wjGKOipRmyfOJoTspMfABEBAAG0NVJvYm9sZWN0cmljIERl
-dmVsb3BlcnMgPHJvYm9sZWN0cmljQGdvb2dsZWdyb3Vwcy5jb20+iQE4BBMBAgAi
-BQJUXQONAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRCkDiS1tAjb1Z24
-B/4iAEYvEFhBGjOuXhAPmZSyYyiHWrehY2yZGKmjPKoDKxD05PC6lCNOsdYn5WQ4
-sO32Yi2MbCRpOdphJDJORuGapMeEdrbNqAZ3kzCyMEI7AojH70B7/g99bY9bLq4c
-MYS1udCVPBzfNNSZok22S54fJmFg1evzJbOynZnIFKAhSWL1Ns0zQ9RXQ3gddhAF
-zE1ciZTwmRwdkObd/oxjs/g5ps3VuB25b88+WxGRaZf1vlZN8fNvK4AEDhbH/j5+
-VjcI7R5zLVsYNHEZSspckuoxn+1PNOKDZvhrSrDlqf1EUSmPb4j/nrW07c1p/91/
-T/R02aGSzbwqbbI17ZuxYMU3uQENBFRdA40BCADhMeWEVcUNBLRWDatdlvc7q3jZ
-EyejhSl3zw0I15yhoBbuW+ZnOTG4fkIr9SRo4whm2NZ7eemEnQ6tuGhVXUqPIxWA
-wBteY0ZBhwNGhMql+IIdOE9WIo82yV4gj1Lo2rjxaxG4Rd7FQnys5f+XyFZ8vaXp
-mpH9VeFjc1Ls550DUP8iVvIoKI65Ve5RMZc9e3AeP8FZqJpc3q+Al2f/FAO8+tiD
-/J849aP4aqUKiwvHk/nxle8FwepQyvXRrSpFNz2uK5bgIXQrxgcKLPjl6s9l8SKn
-Twg6ok0EcJjGuHjzCeFNp/WFpAeJAxmAZ/qUbr0TBp6jxXoMc/RqdO79MPX5ABEB
-AAGJAR8EGAECAAkFAlRdA40CGwwACgkQpA4ktbQI29WOzgf8D487fhQSsH87OJfp
-oSPf9p2wGzgNFAc+sb0gUy8rMmc/xySKGfZ2BZFT/CAQsOzGZ/KSM3og+FFgDcm8
-GWpSfZNymXnmM8aCaEyNj4arENxwhU4BEnKYFf8PIDoCjAqBbSWuTa2RzaWlawEE
-g4hItheFmw/My/tbo62N4zn98IYU//50PNDuDb1lvOi4SVFglXRoM+jS2X6E9R3Z
-7sYceClr2EDN2k+RbvB6ngOiu52FvC9ZZPJnfK9/XHFtKcQ64yu3pbeXwiuqyr4T
-SpzGJNm7czyVylHZfvkZYVhmZCEG9xQ0lzHshaXmkfqi5ZJMEtXwNP1dWIMhIGgY
-4aLehw==
-=LRPz
+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
+II4Pqx0ip7s95q54JSpekQZ65g==
+=QoHd
-----END PGP PUBLIC KEY BLOCK-----
-
-pub A41F13C999945293
-uid Thomas Neidhart <[email protected]>
-uid Thomas Neidhart (CODE SIGNING KEY) <[email protected]>
-
-sub 8183E80D264EE073
+pub DEE12B9896F97E34
+sub 9A716F957BC42546
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-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
-25lhPkZ/FaSYF1lb13TNIRT1q1My
-=pAbP
+mQENBFAxQKwBCADJGPv6pmFEq0SDwAKESEgCdnXycbR0bNXpNa/3VGboNto1xKgd
+AQ/sI5x+CmN0hpUjklEwff6QIt3MlofEMkAzSfRmTobhJTK9W7r4+p5DuhJpi5Wz
+ITdbNCMT3Cvp13rRE+dx9qY+WFQmTYPf3gq+C6T8Q1i35ePNlCTN2RayaFxxR77D
+W93zKZDdd7I1qH0Vx7GGcSwBgBlEB8jmhNAkz/zAhv53S6px3ZttqYYmuwRtg6Fi
+i/u9VoDR/c9tyUq8L6oAUtg0mo4CP/tfUF/uZnibshEsLzbRP961VQXduhn8HcRp
+k6QPTj37B1vsNWJ9U7XXJ6pYnkizQo7sl5XxABEBAAG5AQ0EUDFArAEIALyNR+z1
+eBBF4S+dOEWKXz2ANmsp6RRhvR09QeQwNycVdbdEXpOiSZUCAkw/EhuJWmHBngat
+0KBO+7CIHyQqwHnqyatizzKXi1OuaEhMzPsQMwPRfYyWHgN0aklc5oOzB2RbSJN4
+et/oVvfAplVSjgR0v+56+qXw9TFlp4kxqFeJLycZ+5ImKQ+XclsBokKuE7cjeF+g
+O5oY/CFHdkxD8d+cLF8FSNUFMypuDQ4IH9zPYGkUJqsb2t67iMyxi14RqyN2YNqK
+JcwxTL42VBlUFlTBoF2Y3w0LNll6pR2WSNvpcj+5/uBjtY1qAj5e7yVts+d1YZsX
+7D76AV742RQ31kkAEQEAAYkCRAQYAQIADwUCUDFArAIbLgUJB4YfgAEpCRDe4SuY
+lvl+NMBdIAQZAQIABgUCUDFArAAKCRCacW+Ve8QlRhFDB/9xE/cXf5fVaLa598xL
+muXiD9U1B04dPdz445/chdDS9iGWBB+5QVvAqv2Jt0hyPN0+n9Mk/4lLStEEL8TP
+NLdTBP1JRvVWC1c+G3kTJq05Abj8CGFFm1UZhFRwCTJ+vrv8fSb15s+YYxBLIUdl
+tKld6OupTHm8A4XJQOhYxd5PHs72bJ3bXs4GmPLKD/RpYmXYJ9EZHQHKnrhZKJ8R
+JKTM6sxBrgdVeI1K0ekA0o5HAVpNEXgY1gG8Pa14jqK0iwlcI02ntqeJkobvv1wN
+vh+nJT2wM5QyLH737kdPrUdi63PfCYLOEHYhI6sFkzI/DAtI/C3wmHtTuRam3aLs
+Rnb7GNQH/i07ndoI4trmUor3X1JBbcjw2BVS+idCtML3jhKtziwK2/kz0rJqBQKa
+Z/zxgEfwkRPqhXLaBW8a1G/d1mGphazHqSaDqylz07XqR31ZtGCc6256anaVbWaW
+9HXUsU5ADNrAK9PdD0EibGB8YumuSTtApICUqN5SVz+h3Mi1MXVsmbiVSAZPzLTD
+0YRwzPJ3jiXIrKDUmZMM7oWwGx6nzW++tW8aKyLKm7x1/y8g+XHvySQiVOKAvvxj
+yPStkEW38Rls5nucpyLzLjoA5vlyIcOkeKCy2jlUmM56YrAIWNn/eCRFPHMOY1DO
+B1nUXMr+2W21xZO+/sWrEEysY0mdGU0=
+=uzFx
-----END PGP PUBLIC KEY BLOCK-----
+pub 3F00DB67AE236E2E
+uid Pete Bentley <[email protected]>
-pub A4B1A03FB9C2CE23
-uid Pierre Yves Ricau <[email protected]>
-
-sub 21200D723F53CE38
+sub 6B7EF7B18190F4A9
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQENBFy+swoBCADGyV4k02OjVCrziziYIvIO+qDm8Yqxt4KVd+ISw2DvmKVcP7lx
-z5WVGvxVdAl+Xy7FdcrIJYFCsYfFFxPz+BM6+np2c477HkdIcDwBWiHEoOqMehax
-wlEBhJdJUVCjTKvpMgqs4/a0PddNcp/odYx20HzDAK+X6/EgL1McZk03okfMSn0R
-TUvZeh76SbU0aQRXdGlSs5IUtywn2f+5jUNLht/TMd/bbAXWA2EQo1UallY3+dj8
-I/Y722X5Yu15rLu8u+pcVE/pMO9CHeX78mgPU2xU/xwDSGtU5lxwNXnYpHMUdFB8
-YtG/ofDtZR9+9Dcjhb3xSIv6Vlui9HgOgvctABEBAAG0JlBpZXJyZSBZdmVzIFJp
-Y2F1IDxweS5yaWNhdUBnbWFpbC5jb20+iQFUBBMBCAA+FiEEucyhPFnyHGzoQajR
-pLGgP7nCziMFAly+swoCGwMFCQPCZwAFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AA
-CgkQpLGgP7nCziPuugf/fDa86INrKZ08fCywB6oMcLEi/sNBbaKaysbp/zmmANwk
-nTWrIH6fqfQfkFdBpA4roPrjCNqQ3gdpjDhB9U7IeqpUzzeM+WEWVOlkA098MFrj
-ToJuxf7oCMXCPAtW3S+tGM1FdIFtqzoE3mdbhde/F0ppJDIbuAZfjKJclIeGj7eC
-6QbLua+IQeDKuQ6TRuFCc6vWl38L+LqqmNPxfw7Uta9W7CrP5oUYQqrdIszeVWGV
-ivK8cyLltXgIKcWJmj6GLsJtIUuXAj3kg1d05HQ5dpIkgaRN7+Q9BnsTcdnc+R6r
-nprvl+/QNk6XeNIRrPKiv7SWf1gYWbi4CpthjNsGy7kBDQRcvrMKAQgAvap3U+0R
-j3ZFSth8u9AnCrJrClbNtysMEYmpK0JgiNpaCDbw5lPv7yJyTPjnGTLSS2qx/+C2
-2Bml6b7lV2JgCXA54p9sa9Jpw5Mili2rx/62M0VmqMCNZi0vCxBOlj49fSpyxfKr
-IJ8eNwXd/XbHl0uKm+AYCJgtmBE4+ErSb2tJ3iEPqRBq9vYXnm1LKIZVKHzZr1Gw
-LS039UfGBFtlChF7ED7wQ4XuODmz5dx92tkI6svqvOuXZaTP1PDTqu8l5+E8yd3q
-JvonloHroLKbTDEuCtpn4jDSN/LZ1C7ekRu9OjL4gChvs/TJsPwkVka/rw4OWEOR
-KQfo2iv64g4NjQARAQABiQE8BBgBCAAmFiEEucyhPFnyHGzoQajRpLGgP7nCziMF
-Aly+swoCGwwFCQPCZwAACgkQpLGgP7nCziMSkAf+L6oedz16wE0F2ZYc4UM+J1bf
-qS2HEesB7YGTwnafi14xRQorvFOJ+CxfyDnl9HGCbfwqie1wO7VNQukhWl95wJSc
-Or1Nv3XPnHq6RKpBQrIR09eggfegf1N67HmorYRkfA25fwe9KmbNAUfPiKa6Vyrx
-6htiUIK1V7ArKVXwBL0saatdOnwrxOiHKBbxyy2jyZgt+rHKNUFmQLiiIvqg+krh
-sSksRMYzjG3Y96Wm0K/IH0XcuiQkVaHPOYSEqODz+miiS/PSqbw+WhfSNtdKfKDx
-OS6mrMnFluqthJ06aXBz+RmXGPtzJvKnI2LN7lwoGXk5zynZK8AXpTOpWED5ow==
-=Ig1p
+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
+=ZR2N
-----END PGP PUBLIC KEY BLOCK-----
+pub BAC30622339994C4
+sub FC9BDC25FB378008
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFlMExYBCACmdTDSXPwSJeYbfYvHoDl5C7vx/0+LOTunDGJN38pNQHYQAZnv
+Gyoc9ZmChrhLoim7z4ILqmNo8eegknepQ3dGdUij4NVIhR+m+8irayTbsNHvo3UG
+9y7eM5tTSjyNYkyk5fAVuT7OhzIzMA+qtc3GRVxNYRKnaHajt+pOSqr+uoDtMG3n
+6eAMHCAnhgh5Nd+dCFcNT+syl3zCwolA1wrzGxxOaif+xi5wwXjmF/lAt4PDIuDT
+etA2/AqPM4zAC0BtC0iqVgVypjFV3EAexm/g0LNMiG/M/krzwjPq5gf1DY/57jU0
+02FpKd79HmR7bHdc4e2olEf9NlHxfbPXDDsHABEBAAG5AQ0EWUwTFgEIANmMpV3N
+K8aLrLgQTyh5++det8C3D3T5tkEdljHOuN31/qdKNge8H6uKH8zXRZsj5pd8adpW
+kD4TzIMvzIwzizsGw34O9hf1E2XPoDqvQr39p1sovX3PeDvRJY/7JFNt9DsphVc3
+xWQfNkC7JdMPa6JRiFHd3ynfbQ+wplf4tfaDVn1JXAWp0NSGgMtXfn5i19hHQWjm
+RNAKNQLdVn8UczI8XdVM7bS4giDpQMukSyjsjgAo466iRK2+8f8BwIRe1JRvF37B
+dnbvTg/dzoi1/E4ukwVJD6YE2LlDwzdGno9KxPlRsuY3nnheVgjbrGJ2XKRJkIk8
+7cMGh41VKw6L4usAEQEAAYkBHwQYAQIACQUCWUwTFgIbDAAKCRC6wwYiM5mUxEiH
+CACQViGOHi0BoZ78ZJz6L48YNMx8fSdSv3YJ83Ih1n5DWCJgrDV5S3/edYinkoVI
+0Lusy3MdftRg6OWaYOuOTf6MYcddO/mY363jiMByf9Uh3Dqq4sKqVLRnZbAqgD1o
+dRoj2NkEQfgEH/H4JRVrxquzAKoWwJh3MhY+kajYJRJyWfc1/Bm3Bj1tcMGlGeIQ
+fgWheeMg3kxrxJ9TXPqVi6VVPaPKIU5i8l46S+Wg3uvMs8vC3XzOIvhY6cwguJv9
+UkjZwGDSI952wLqnREMy0gFZ+OAB0qJpYM3nDEekWZP38G80kojnN61tZjRThu9I
+i8/b+PwSW+nW3EpQZdLqZtOU
+=2H2i
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 6EFF5EF5523052D4
+uid Thilo Schuchort <[email protected]>
+
+sub E2F840B227D3C024
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBF2ClL8BCADs2bbaF1ZMiMkTUUb59NTlyAbOOVWoIh7cnKeNjMWBUTP0kLFI
+XpoKiyccQLP4rFdbP2yI6h+LJR0Kj/lJmKpCaAooNlooxfIyPUX5TMvDTRutzwBO
+c38DafLBAJTUl5BMYsbWTGSvmpC3/qmZ9uJAQH6BVEQxmGNO6jpPsgi/YA2AhrN9
+w1F5Pm5Capc8QQ9fEj+AohXGtpOA6aMhnPLjJ45h0VEwYskRIva0AoqbM660YVi7
+HZPNEqspOtmCrR5yzvRmlDmQQ4uKp4InSQ2Sz0OMw3G9cuZy5AzfAL+/SG+iL626
+S1UeIGAjsCu2GGIFDVRuj4KvfmUZz1H/US5DABEBAAG0LFRoaWxvIFNjaHVjaG9y
+dCA8dC5zY2h1Y2hvcnRAZ29vZ2xlbWFpbC5jb20+iQFUBBMBCAA+FiEEKk9V2c2l
+h3cx++dGbv9e9VIwUtQFAl2ClL8CGwMFCQPDI+EFCwkIBwIGFQoJCAsCBBYCAwEC
+HgECF4AACgkQbv9e9VIwUtTFBQgAt+ZETCausF/UT43FRFa2Pkp+gXnuvY+pSiiS
+lqSP7BvVOvTFnYtljLLufK/O74/MJqGYbiyurNA6Zrhe3yMjQqCQlYGuGBeo8Ssg
+0RC+Z4NJPEyTwrx5XYYLaDyeRMcQwV2pH6sWXc86TZg+6gBWBHrvb1PDBFqd89hd
+UY0xI9Vyc4VWTpJCshX9qA+Bjh0xzmxie7leZo7ejF5L0ymPuROZz9VquxORHyE7
+DAqaKesgQVbmOb1Lc5Vpdy70IIVlscyLIfFycTra31cnxPZsb6Iak6sed5VFM5pc
+9qYiLsNk4FyzEs7w2nmlDjE06jmWWY0So76q2IddcNYeKSggV7kBDQRdgpS/AQgA
+0x3w8TNxkGuXMEXxDcRIXQ54KRF4upy8P1exrJPenVutDAvNJeHLxc/uwrAfPGcR
+/DIJCWLbQv0T36WwjQSpW+VBxX41I5/YRrp1BRqUtT1r9Fx5KodpG+c0Nsjs2qSu
+ju+/9RI5Tyu+fO+bgYfuOfPq1E9H7POHu33Gz5Fap7ZB7VmRPw5uAOU2ev67Qq+d
+cfcKsbh0TUwkErGdzp5HpcspEtHxoQCpc6ZX5Ttoj5FS96vN/VIOnvwgVjxNMEme
+CjwHkcXJkkcFGwkJC2lpZx7y/Uv5RPjeKLoJoKKHofRutL723mGORe/uj/0pYfLy
+gfwtaT9kmsWZbZwNCrCuQQARAQABiQE8BBgBCAAmFiEEKk9V2c2lh3cx++dGbv9e
+9VIwUtQFAl2ClL8CGwwFCQPDI+EACgkQbv9e9VIwUtRRxwgAjqQpC4OL0igysJgI
+xcSUAdltJ080Po9eUcrxszIakH3fYeuN+vtKi37NbTI8BxltbXDZC3JxF2Vqxkqi
+6ow6ZTk3NMS0R42DvkBjO4DGvpIF1F+4rkiF5+w3CJHHyEJYGvBt4MGQ2Ivrp1rs
+C/VKazgG7Bkl160msMq5TMUAvVOuTn3pMljVUcsQLDxK8vAvaI2iox3dOtWj0w0r
+dc3OWmufCl7W/RDicP1Xrodm2QrHZXftDEMr6qB+HvkesWCnc/yqCuCr1UXqsTsJ
+5291U3pZ0RCl8aTFwloSctwwQvGxWxT4uXD1beqJ1tGKyoB1kzhwXnzuCBrzCcmY
+h3cm1w==
+=WIxE
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 5ED22F661BBF0ACC
+sub 31ADCD8BFCB760B4
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGiBExyNhsRBAC/W5cMapoP7NUn8S22iWG5bPw0bconApJHP4kQdT17gT2JgNJz
+BmuGWV59ZOGQkc6woeFKc1s6twlsgIL51jMeVOtgLJRGTS4So2hthNqDcgO4j8Lm
+yXpqbTkbD7/ZlRzL2hhedrMz4NQOZCvsZpQ1RaCDrr2hxDq/HhD2omGdlwCg/9Mt
+JNc7897LgfCMmtPOvAFt+rsD/0K87nvW37nlRqHdEtzvwUlyLJmYxdW9hDr8tm4Q
+Y/8rDvNFlhKV/yXmxQuhtgQ1qpBo75dwD86aJmzIMIWM0iei9Ecfu2DsWiWvArq1
+heDjMYSeQl6k37cmD59afo6e/jQmg2/ALC6mRf3912SfmqV5spw0k+NYdFxAnbot
+9jOfA/41shIdZloZ0aDcJDTNe22wFFh2sW8RwWtJJO8rmOCgh3MmkPn7LHPI9idJ
+bSdD1dRcR7UTyeigEeDTu0PAKfKZutc91lfcIGSZdk39SEEhUkL2JdPKVRBotiZZ
+Jsi+NxDdsprF/yQtr00XSGJYzh2TW/Srnb5nZQm2Iyokod3M1rkCDQRMcjYbEAgA
+k0wzZq25ZX73DIlxw30u8Qmy0HM2cVmRe45Pj857FlSQsO82YNPOMxSkACCmHAAT
+3pACuMCf5Z0HO5iLbHrxegFPGWLkNE3CJ5yga1zIiFgzNc9qNqWtPQISJIQjABit
+4SseMY8i+3t6A89NjWc/AOK1BloHdjAmtvT54oYtqFYCMlNMtCLaR6ioSUH38qLV
+jXtFvmTY4OqokNaz6JXxzTymyo8gJff9JRpcm2S2Xksr0dLNYm5QwJEN7KX4E8iH
+8Rz8TWxfAhrf0zn45D7bgHOk3JFPEXzKGV1l96Tb5h/yy9wuN4JePyXDGfigub+1
+grV5DBKQ3srkEwy6iwAYwwADBQf+LXoUj24Evhce+OJ9ZCaPEppmV6xJ+LaU/9D1
+hwMkQ6CXc0IH3oeNGAbbOHhXM2GymRfg8nmzbIHVueTP8ISeO7Dc+gMr7l7l5kB1
+W7IstMlS1xI3Vdg9D8HaPJa5gB3qEGrIPdDP1KRRwJflw+DmQXB5jOj4vW1xECqX
+0bGY9XNFFaSMhkr5XRVT3xgQ8d0wuCB9otuUZC9pxmwFiH2w/FvKzMTKMRwK4IRO
+n5FPhSO2VBHBnlvF/mSbED22jjB7DngUC4rF0fE1MrA6DDJIAKrsDlk0VI7x/tIO
+YbkEOyypDgBf4JLrxgrI6jn3iCRdmi51hS7dtXX3ZIkmDVJrOYhJBBgRAgAJBQJM
+cjYbAhsMAAoJEF7SL2YbvwrMplIAoP5GSTgknFm3ONZ/W59iK+l+XJWhAJ9Bru7L
+aSKZGs7jwqXqGNrZ0ZzxNw==
+=HDKU
+-----END PGP PUBLIC KEY BLOCK-----
pub A6ADFC93EF34893E
uid Tom Denley (scarytom) <[email protected]>
@@ -10254,610 +11131,284 @@
=rYGl
-----END PGP PUBLIC KEY BLOCK-----
+pub 1F8CF885D537A431
+uid Niek Haarman <[email protected]>
-pub A6EA2E2BF22E0543
-uid Tobias Warneke (for development purposes) <[email protected]>
-
+sub B7D9C5C3EEC4A9A9
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-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
-=thlj
+mQENBFkyw7oBCACtGFos6g11ycruiWMuXwrE4+XbU85+1jR99AN5PcKjgXo/J3T9
+XaZLjJ+oTWCVgEHu5PTxAftbkq9+lmDAUEWZ1Q8dKrnVgBLsFNn+G2pcvVschorz
+CYFu/WT+eORA2UkdPZ7LH00iMx8DFpGtL2dBZY+tS3OpLi1LdNw4Dh/dJO7x7gas
+GWVUnL7+Cv53rmvwj8bQEuvrQjaeXMGxJKUSm0qpJ7BvkSEmQZ7qnRS7vZ05Iz4m
+uJsTNnuxtf0+fmWNrIqpv/J4RvaZVdA5OW/zA1kKYaGlZoLtWhKOht9gPAKlBk4k
+/fBfHoKqm+vnaOnxSzuYpQkYWqeEu6qzfZOHABEBAAG0JU5pZWsgSGFhcm1hbiA8
+aGFhcm1hbi5uaWVrQGdtYWlsLmNvbT6JATcEEwEIACEFAlkyw7oCGwMFCwkIBwIG
+FQgJCgsCBBYCAwECHgECF4AACgkQH4z4hdU3pDF9hggAoh6EV67Ep7HGBScS+Ow9
+X/gxOWzFS9aMVJw+MzSRRBm5YDSsJ3QfSEZHSDc7gkD6cHUjpUCaB2bAnrfv2wKO
+4EawnXkj9vhnZ/M5lVl2TOi/95Yep3aa+qCgl3jNefzANgrRgXhW3m5ao3YazHVy
+eBezQGKbuBfLTuLd5sknl369zY7IOuP59KaB2BYZfPYqpRrquFzZhdQoReSyhu0Q
+DFewliiCF5QA2AkW7yqrQOh7mEpCPvjX2GfqCsvIF0HoIL6zQuBcif7ELoSnFWYX
+RRpD7b3zshMX4Yt6yOMkcoN/JOGe0F9L0eoK/Cl1oPW1j7tdnnEn0+56CxbNExQx
+mLkBDQRZMsO6AQgAwWzQyChoPMNa3OER/72w/G6EtbS15PxNNktkPYFz2ibrDhkf
+z3av4G/mxYpYgvPhGHlgHbnGGfmhetEXVebc2iaWYih5AXxzCBQfDQNB5gsVg4x7
+SAp5rVmTnmgjtPV0domsbwK/vNepUK4dw5jMwxIbVO8Hsy66B4yvEMj3lFKkOg3a
+8uY19DaAlxehYAWyiWfcbduD9GeDGaiIXnbTgaf0x8s8bC1zWUlShRISrPnMOvPx
+D+PCJ/Qna2ixES7IpkzHKJCX1NMwKk20rH4saiwIpQwL3A2ktF6VRMmv1xHwZUl6
+3xZYGN7u9cJ2pd64xSGkTZxVw3P5KVoMOPTY2wARAQABiQEfBBgBCAAJBQJZMsO6
+AhsMAAoJEB+M+IXVN6QxkUgH+wTO3xI0072PDGNFgkDcItRy7G6tKphQNAy2ylDH
+y1QZ2uHWqNBHy9LuR0lzWVqWgeDudQQL2MAENnxJIV3mKeiHGspOaj2RgQcuIF6g
+MvFUODfme/vahJMoe7JhmX7xCMVWDEMpOg8gIyr3qix0s4DnkXKXgE+v1qmVoYb5
+qoPguSQnOyrHYxWN6qc3I6mwBi4sJ3PsCrkKDUXgJBiRjgbSkemkDi7naK0sRRYE
+tujjOSICJy1rc7jjeEPRcsk1unydI8aLPO2fIooiLrWJJPr0feeZVrGHS2Hpr2Tj
+kB+5IR1A1FK4o7oFcZTLcXVlQFgkac8BPyRuUGhF1YX1JA0=
+=rXm+
-----END PGP PUBLIC KEY BLOCK-----
-
-pub A730529CA355A63E
-sub D5A25EF82542C54A
+pub 6CCC36CC6C69FC17
+sub C694465FAACEE66F
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQGiBEUQYOcRBADsCu4zTVaB4TOhV7NyTvHhG1bqN+3Va5t4vpGQJg4M4U0Yu0ut
-4bCZP8I6rlXGj+TqDKVUx9kfGpIKX6Kw2TvZUYbHIDWh3UhQO1hD4xy4b8rOak1w
-3vDAMYA5L/jsZshNHp++aTgmvSoXGS5S1xsjrbrOics6iTtHXMV9TCRelwCgkwGj
-WHzPJnlSj0z4jAlRG4ZubAkD/3LOfrXtti1oirfDTnBZcxhvldyCT2yiE3LRe8N2
-ijmtNO6fl2fqXSWuP0L125ytlOvww1r6Gd8sVXiVwt2oKZVQ+A5028BbHa0u4e3y
-54nA21OBKLCC/hJvyOkPf9/kZk6S7fV+Tour/auixX4WqUg+siMRe/EwHw6bQDD/
-1OK8A/4rVPPCDTLvcQbT+B3z0IEfryMkivJMu7dEoENDXDK7N5KginugnCpJd+g9
-GbYgTYI2YPNB6A2eaR4lH8yQCMyDXC5+bGL+1NL3SP1qR4JE//nUcbx+iMTYR5uX
-kwmaGMXRl7z47OgtaWM/dVipNuNaqkD9WkuMGb4rdSNHrI+amrkCDQRFEGEDEAgA
-pH7D8VkxWJgH5zCO7I1m2ITBf8pu/McMCvpCHR7qgQp4yvLBiQ+AXkbQPRPnxO8v
-QNlSL7wODfYI9hKDkoi5pFNlzhBI9ivehUrfdx3uMIjowZk+UMBhaiH4Ppazkw3F
-V7JhKm0rA9VX5HnujGmZjWymE+yVRJhR9dy0XQo+b4691Ve8Ce9L7j0j8BzCcCwA
-hTOtEKxBnion46KLgr0caDa89C1HG8QJCqQrN+HRbfj07Zs4HjJl2CuJY6ql/f1G
-lGxJYZT0FxfIst01dAdNFppD8JJ1I+PYErWdgkm1rQDkAZXEN7rwtihHj6A0EEqr
-s1ogkXzyXs05fJurUtI5/wAFEwf9Hqv0J5kyzSA3mVhSzSY1pOheiVP6pWWKCsZ6
-xLM90PWekAHsENvvF0mtoAAOS6HYKog5qDHJme7jr10wdalynSfgCDCzt1qm2dvX
-vEk69j7vqLmqAkKEir//1XaPlGKxA3EYjl4U8HxdqOhw/FApWRmJncezqeE+R+uD
-4pMugi7DLnVa90hlPvRNYfButXXS8p7dhuiCa5ebPxclvcW6F/mf6ZDwDSuhkddP
-Du7OD36ebmiD6RHJwsfn/uOz4sRG5ogYNqiB5OOkKO5zBVztgcmWc3ACzNCbykin
-DmNHnAaeiPWR3xTp8ZwNa0BDLGBX5RUsUhP57nhQr0ifllubsohJBBgRAgAJBQJF
-EGEDAhsMAAoJEKcwUpyjVaY+pVgAnjLQPFKg6QdrUiYYCQactc2Gx9OlAJ9r5x4Z
-Pk/ZgTDkz44EfZS63bJ2IA==
-=6Dub
+mQENBEtrDFABCADLXGAhjPxdh+naC6XU5kficZYEVAURNRa8MTnaMKr+31v2zcAk
+nyqyjihcXGQBCeaNsz2mQkc/MrKdnFNVSwp715JcmcqDJGfR9aIDMUs9PvoNkkqv
+IDtx9Tn73piqbplT2xQxd7HjFvaVuy7oXI68gwcyAGDvQZeiFUodcbAsKrVwFT+R
+94JU6UODFqE/Ihq15Za8Sc8WhWitm8XTQsCsLeh8abGhkvNEmRLi56fh8/Bz8LHv
+8T7r8zkROoQFlUEYaOR2wH5bbipww9+HEg64hrcak2w5smNt0NJUXZ2O1l00u3sF
+Qdu54hM9nZ51xxcqvo+tGft9kIr2AfTrJ28ZABEBAAG5AQ0ES2sMUAEIAOqnjBPR
+FjX47AxlF9NJhzOUECJ2QaoezMOcKQ7RTnDhOiDi/Tzl0MXJoo7ktkeSAMlPIXlb
+K/C2qrM2hT62O/5GSRy1dPErTZx53mNIWTsT0wjQCgxeiAs/+5bqceahRO4PES0L
+J7VR+wiCUP33CIK/Ea2c6ODB97OSly0/RY97jWbM1xwKuzeHH5H0QKTJky1CIdg+
+avdfeeHBDEpCi3BZA55JiAKMuFNYl+Q4yf/FoYI0ZqKFhIwK0OQLY+unIPlX+qPy
+B6TkPIj9tcK/cebpN3VcFvNzVkcqYXdxwUU9G0GyzC3Be437oyzm3SJWw1DRd2Fj
+wFeiL0fWOjwcfvkAEQEAAYkBHwQYAQIACQUCS2sMUAIbDAAKCRBszDbMbGn8F0LE
+B/9O8wwEDuRjidsflZTopMs2drKS/TN/EB/leBFsOqtw712+dYSNhM/LJVZchWS8
+y0RLHQMAd6aX89ooJpvmkijJvJhB9YtuHwmGfT40uco7ATqbo6tYW/aA1rfOs9HA
+jLb1UWQvEsL+96WsiQRLwIoX6AaKebG6mLYikiKKji4LJRp5HVdXpTxRaX/nSPSL
+aau62V7XKJXaVgFvSTy4xn2eph4eRVACKym/psNkXbRyj1maf4a1sdq3WMdiDRHS
+n3rRKsUGVv7HxE45vR7W7hqN0Bna4VzOgNEocRCKO9pDEiOmXsKXUvDJBOrvTddJ
+VHX3/m585HZda1drtSgEv3Rs
+=VojG
-----END PGP PUBLIC KEY BLOCK-----
-
-pub A7764F502A938C99
-sub F20DB7FEF61CE1E8
+pub 5796E91EE6619C69
+sub 153E7A3C2B4E5118
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQENBFc7oMQBCADaIPEUzMrwF9gnEC+PRn2cSPG8OV4RxXxa88TZm0L7NF7D+F5N
-MNUAZ58oVqFUW+ytgb5iey3X7KjlJXZnuqES4m2Id4N7FlnvrmpeOg7MUc9VmNkt
-E7RH0O5GAo3V3o/Xp5nATUoaQ7v1WaPloB78ucyWLnH/iANw8YuxYuYUTJ0f2b15
-1oY1feqkpibbbO39kdMY36FH5h8Gsv0vvGdeS2O1p9vbzDHXEMLkNyKfcILLjbNU
-O/n2FzDL1y7hHXcFKDl6z2G7rKJCAsASH+r51YX3dOKUepE3pFcUbMAXGeG//n4B
-T8cv9YOhsYGaXBdbOMjy1WsZMvizbp0p6yIhABEBAAG5AQ0EVzugxAEIAMxtJLP4
-EGHrf/bnRuJHkyMqd/LEIMR4KszUl1AU5oeCxah7ZsK2MjwAUDD2UeLAIyANmKq+
-vXtma2wvQeOzo0QDMnxLqADSQ4xqUUcgbn71rjMq2O/T06BI9Lr2BaXeuYYjifA+
-loWzCbOHcgz78p8RRmxlChO5mWWlnrznDbUjV4Pih8M1LR/a2bUiU/Ftg14GPSrh
-ct9D3b5CjMIa4tqWMpvI+6jOjJm/ZD3Ux7WbzlHB+B9/yTw7n3pLSMXj/07PJKrp
-tUeJONprdN7V3wg1fnVS8CuQmLKoJhU1kLnucgnCFQMaHThhjxdaBMr6Mlq3urT2
-BSw970AB1qV4Wg8AEQEAAYkBHwQYAQIACQUCVzugxAIbDAAKCRCndk9QKpOMmUjO
-B/9ByOS3hX9yJysA/IDbFWonYmlo7p2hQbR1tiQ03QpbXZXCPxkSknW2uHqFLxd5
-eFkR46ExXINqFzMO6V7+o+soj7jUOK2rxQUIvdf423rhjdOU+TGXSDVKfNhBc/P+
-z0xQX7TkOuNwrcztgsmoSI/5K0rbF6+Yx3Thz29ZNFPTTkdFGiq6GfDOwBOp0VOv
-NyHw7mO4x4/5gdPKJ7zsMTT1OgBY+UQ9msb/ae47HvAEIgFg65OAamU+cWe471PQ
-uo8MEmeRKCsJuZlYjHcwqvqcVOcHJ9XzjuiCPn4N7aNkSTvoOcGvBWaAmBTxWVRM
-hvtJrydlnWJlCJiPfZvTePUR
-=IsAk
+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
+=IF9r
-----END PGP PUBLIC KEY BLOCK-----
-
-pub A797295E9D87BDD0
-uid Aurimas Liutikas <[email protected]>
-
-sub FB4C179C9305F3B1
+pub 125A9EC9FAA91AE1
+sub F2EA967B5B8FD0FC
+sub F860F86A8AA8521B
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-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
-q757UsGg74eHTP6IdA89lHXL6F5cuTBcMM+tIu4=
-=k/aW
+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
+4D0hnpwfN9FlrGaJAjU=
+=a9iN
-----END PGP PUBLIC KEY BLOCK-----
-
-pub A7F5ED0FA05D64B7
-uid Kengo TODA <[email protected]>
-
-sub 4044EDF1BB73EFEA
+pub F6D4A1D411E9D1AE
+sub B5CB27F94F97173B
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-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
-3ug=
-=QgEH
+mQENBE89LqsBCAC/C7QToaRF8eZgGOxcvp9aG+mFFCMjaRAb4Mh59OYdmUb6ZjfO
+9388HPebGbPNR8SHYs0dBIuWY4ZJ7oUTYPswasL8vB0iPFdyHhvkCca+yk0b8ZBM
+DmFlISm9HkYpoVjcFUp1oivyeJ5LRTJTd5JGEd/SWFRbB4TimdKXBzej9fIm2zVl
+KInEMMd8HnSYE6nm3aNkbyiqhx81bFvl8x6X3ZMWcKs+TAVXdP9uLVvWowUwcApk
+xpee442Ld1QfzMqdDnA6bGrp8LN8PZF9AXQ9Z6LTQL3p9PIq/6LPueQjpJWM+2j8
+BfhbW/F2kyHRwVNkjaa68A544shgxJcrxWzJABEBAAG5AQ0ETz0uqwEIALmEZ0xN
+tuX1cLsNUzzq0HVzwDiw5IquPWy33McESXvkaMyqyQtYisW++dY06MxBCS3uV4+1
+nKI6oA7Lk482ixwzbwws0Rb8H5CeLHDEwGXfthmLAvDdxoNCUYAtpVOMGcbGpy51
+TG3V9i9JWe1px+kvhieX9BLfDzP4Pldho9lK2gYRhmpPDgUOjYZgiQXMmIPAYfdH
+IA/VdYTETC0lu4Adb56SzOwvGMpnd3rXWUiJbZg7lW97hvbOFMKudbNjBCrF7LhW
+Ah089MU9rvunuz7mquVdNtfEBkdVrqZJdvYiFBee4RUe3+qGCpHnLzynOGHr+iIt
+DG73NR9fZCzl1K8AEQEAAYkBHwQYAQIACQUCTz0uqwIbDAAKCRD21KHUEenRrp0k
+B/wPuP2W69oweOqtSRDf1FeFNzAUIjbwjkg/bTjzJwb1cyedx7rbxhpJmn27W8A2
+WjfmDLOn4orQTKoxf3kP6SeeGhYLkzxjBa5Rco89p/6X35By6VR4LPFeTOACyE7b
+cAjqPFb+7t1YzvnmuZIgpvTKickq1D9g7+JT1Qd9nqBFKlg8aMngAooVvlLXaPEw
+Q1XfkfMN+ltwlEr7o1ts/YzDUxflaFVg0FnN7qezam/s7VvcK46rO95yQr/Wyz2o
+VDzc34e+Nr/b2pN05MDHA0dXmb/irwPBl0mTOgAgC805qkR14xhd1GeL6MEA34k8
+2Sq/O3gWhBaB3KOy55/lvvKp
+=CmMl
-----END PGP PUBLIC KEY BLOCK-----
-
-pub AB2DA4527F6FFC0B
-uid Egor Andreevici <[email protected]>
-
-sub 1A94B14C6A03458D
+pub 0729A0AFF8999A87
+sub 6005789E24E5AD1E
+sub 6A0975F8B1127B83
+sub 3FF44D37464BBB7E
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-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
-aEmE
-=lnZo
+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
+khD1P8/4BedOSN7DqsnvIUfFaQ==
+=33eI
-----END PGP PUBLIC KEY BLOCK-----
-
-pub AC5EC74981F9CDA6
-uid Cedric Beust <[email protected]>
-
-sub 501B5ADEF57CE6A3
-sub 5D9FFE7B8E3DEA8B
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-FF1NsuDIia3lMYUCPApVQbA4f0Paaw==
-=qDUR
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub AC7A514BC9F9BB70
-uid Punyashloka Biswal <[email protected]>
-
-sub 7B92B768F9D37337
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-sg==
-=w5lW
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub AE7AF7AE095EB290
-uid David Saff <[email protected]>
-
-sub C707929E5065E0BC
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQINBGJm9OEBEAClTz80QmRmi9bpX4m77aas5Q+x+gRtlEg6IWU6QfrGdazVO/3S
-brF3KmsEnxW8fjqv5drswed8FmUVdEsTcco31jxeD+fiBFCAU8BnrpL/+iIALMRY
-EXQDTkvYt+tAVDEcMOuR5HPhVtjVBl6Ez2d81B87AL4+iy0W3Qw8QMBaq+Cy52iU
-H/CknORLOT0i6a/u3aa7lvb1lcQ+NcINXJSr/NC4x8kvo4H/9XhSY8qxmp9B3/oN
-VwpkE7pi/Hxev4P+5B+Bls+F/x48+Vf9bF1XwtjFLe+hmQehFRqAy4H3fWBEVhQr
-MNlzseP7keyxAE70hr620u+TB8U9fi3z1rZFFlDuLIcGmCNgnyVWUmE0Pg0qnga9
-AmA8DLD9fBrYR5ZRCVor2BEkgKydgTKe6nrGi+AOw/QYbVYbX04X4IOPGYFf0Jm3
-vnEHxW3njTrUhHSejtA1sbwb5ISdL6JJhj+q8h199McgZwt7zzS9zU5bjQcZbZfU
-hPBrTZcrVd2y1A6Nw4g60em7SI8e/n7OAJCwZajQN6j7WGoFZ+JMeEcbXN7wNDVF
-pTKZAefTTxzuF5quovhOKq/lwiqaaCTcMQdlICytklFPydRZqnmon6U47Dce5ksH
-Kw8DE4vNA5RZd8z+7jcm1DI+EOOHY7Lcyy794onIxHedgdn5CxFTgXZUdQARAQAB
-tBtEYXZpZCBTYWZmIDxkYXZpZEBzYWZmLm5ldD6JAk4EEwEKADgWIQQct6PbyZtW
-LWm/3+2ueveuCV6ykAUCYmb04QIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK
-CRCueveuCV6ykClgD/9VfINfRn5jd5+AoTIHIVcAnbnw9jLz2B645nhs8E8YVuyJ
-g+wmEvSqN1K/jj+PpdW69ymC/ezmOcYp967pRogMe5SlybZnVTDpXjhlCNEPAJES
-yCBTRsk5HaKEj4cq58sWm4nS/willNshyhIBVq0pPbLKU/faG8l+6yUMqAJLJ/aC
-9q4JjsBwTz60BiTpAJcIDTSfN0FeTsi8h28ty/p3flB1W7hZEGwtr5UB1W9lWbQd
-4oZRShMpuzlgk8E0rtoc8g0tmghBy4RuZpeNIfjiycLSAYvAXbxaQGy5IWTNyEf5
-q0GMgjzbXfwBSOGzOLnNVDA6ymwOZT9IH32VIefpJZxcrZXaIoAZmKjzw9B8nMvw
-+BnbdpiyhgD8xTprNBPfzjv29/NWIrl94IYZ6FGvE+VxvBnQR/c74yzmsZZOKEW3
-4PQKVreUfsjuSq2ESIWjE1UNRgfXppAjT2ibfvjla5ebi68TNlBVU4wO/GuvXGr7
-gNu12b0SYQaPr7XXIOtEaW811WetTUiQp/t00F/bqYpdhwn7r/DGTmxTJOSr3gnx
-W7pr0wvCgIhKy7Yl4LkKVx3dQvwzpZAyQCvNs2OXbjBcNueW/Jg7PDtGr7SGzD0j
-gK5VBmcpMLZNCf8BmAzP2l/gVnhfShZb9/31aitqI4KvVFAvEhU6/ulh0pMzwLkC
-DQRiZvThARAA13JCyiwA0GNaqo2wb4uq5DArysO72Gtp/uOLpDyWTLIpGa6e/lAC
-6yOB0q9jYt9SDf5Zwp7DQxdiy9kcaPf2I1LXNfAdhb4QesIEeoGRdHGRh/1I3ZtY
-FXnp50Tk3vSEJEgqLM3OsnVtqRQRUUdOT313A1X2O1HKREDEMmRa/OWD2XiNMiZ0
-TLUvFHsEJKxzUk5PYE0RbpPoAC+zrGpC9EC6fruWpt/fOGDYDzYGY9rX01e/fIew
-FyDKQ+TwzCFNDOneMCK/MrtKo1f+q6HmlIH2+NpZ4+mVFOMKkutMqzhPub1pS31N
-vExnLhOcKYO13b/xl69AonnLavkP/eJUfGEPeZh9vWrZq5H9+K64rTYxCp15HXGH
-RcsKi9h1iQojXGpxcORDJVev9inF2WdM6dQbX/f1jRJUzpUiGB+tnPLV0tT6M3MY
-1qxtCBVJ2jjQ5141v8Lz4vF7Gs2jIkVZZObttiBC8JLxbdFFURVRurYTZYvWl1oC
-sNXtWrDi3q1jCX6zwIxzJIw8UjwL9jjpp39oB58PnlotAFtNJhwkoN/j2P5accbs
-tMSUGAn4tKOabcpvLTgZh1RZrKP3q9lvkCAfbWv0hlaKsGqHMv3kLpGeI4/MyICY
-apqqGHSLTVvPssoCa4cIY0+ybexc6R2tdNofCFeeKkx+bZ9jZpX35isAEQEAAYkC
-NgQYAQoAIBYhBBy3o9vJm1Ytab/f7a56964JXrKQBQJiZvThAhsMAAoJEK56964J
-XrKQOHgP/jo51A2C8qTZD3peRU8AkFs6jfHybw0t4Rk2X4+MzbmSX8UWFtRzcryJ
-2UgKGlS7FWeAjHzieWqkp/ZtfTjl9GsQzjALbmBzQudFClhDCYfzxuHYi2G3rr2G
-7TSPk5SQC9a19euDeNpKxCPIpgEZ+wr95T3XZVIK44pWhZYYyKAKFu4gYwCNUGSt
-EDp/pILl5c0OZ2L2QdEjvtSV9hNL+5FuS/FGamEpQbqFjMcta2e26giS1CA9LdbY
-gThn2QCE5XQpMFH+RHwnAzJ0EbwSMO8476OfbHdUy+GfTM1BKwr5oSOAoLGAdcYT
-PyUCubfH+OezMBb8JCMjs+V5atX/9tMKPEcm2E5aC/U/2sr8Mf77v2JIwB5T7vkL
-diuk7Bti1RBYVQ+07wb30REzam7OrbBd/nv7xK9pisp1oxY2qs80ozRJcivcKj6q
-pUqsbO4+yjio/SNvDUehio26SOnGk+JQriYxRjSVA4p3F6mHDrq4rQZvvWwyAu8M
-/ZKiRSj4XTqS+j0q1DYfO3XZltHYnl41XLOzOS5YIcRi8be9fGr4SBFBn13ctVix
-kBL0hpa5s1yKwSHSXp0DWEI07LsT5OxZdp/yXCTiM75zSOQ5Ed1UZixj28JOxR7C
-C3w5t4+mmawdzZQGaBZyeHL6bx4uYnzzpaeuEKtwJWSOkOEApPQe
-=Exzw
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub B0F3710FA64900E7
-uid ?amonn McManus <[email protected]>
-
-sub 7892707E9657EBD4
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFdbSfIBCACrFI0ai/abnV2U2Wa9QQZwGk3Fegc8laiuTKc0GoYdyptd83/H
-hD5S61ppdkOugBjVTHdgda3xJ7zBZdnwjZvV/TyayQltbh6hU+BMlEolzXLgyvY7
-cAzKE+iKWbLLwfhRn1iuC7s5l1NLPsh44IUt3xDaFXNQrPO5OnRz8bqsGFVawxmu
-2bPqIjkhxEiYpxwaZZbDkgBR6rbBth6A7QOadQcj/9wNdekoM9dyg+olOUmnLrtA
-nMBhrvvbm2fZxTps3SZHlLV7+iSu71B5SqU/kT54/49n8vxrQiGvzp9K+t7c7EP2
-w4Ax1nYpRkCxYdHOX3YBdayUiP9ZaYH/YHtLABEBAAG0I8NhbW9ubiBNY01hbnVz
-IDxlYW1vbm5AbWNtYW51cy5uZXQ+iQE3BBMBCgAhBQJXW0nyAhsDBQsJCAcDBRUK
-CQgLBRYCAwEAAh4BAheAAAoJELDzcQ+mSQDnRqcH/Am3OQSYYBFrtOT3Zrf2NEma
-ojd48oWZ5xODFmqSs5ksd3op9qakbqkxITzq7BP6CkFbi2NEWYVbPp+jiSiGr02L
-yNA9ipiMBDyVZ7CXTBYqCQZ/3yQKOFN38U8R1SnoH1gDq/YdxDkSkWZEWQlXj4T9
-QR/fXWObN/oIdVDNONL99nqU0+xSvsE+toVHTH7upY7RcdDdnBEarKrifYjbCvpU
-0yiOgB1WOj91z/BrfpBFyJ6/qW2/qJun1Ja1bdpKPm0ZbTCupYOALJhf8dcznNDn
-gVCEB6L1+s693SuU2ZzFkdykpU/8WxlhjJcSqTpp8BIlwlFyOmZC7jrxArr2Jk65
-AQ0EV1tJ8gEIAJVavNan4WxxlwLwvnBj3/wcEWqN+kfMHENMSjmRWOYSmC332hhG
-LmTDi++BPWt2OOvHUusJV8dZP5D9yUBRFsKozIpyXyS76C5VYGMY8WZ6kyqn/mLC
-iwmnkOJ24kXLaaHPsQjv6i5f2KliDVhAGUHmNMJgH8o/GL7zZ03Mb8ZlKFZobp0d
-n+/lxoOtQSzR+cBz8NvMBkOKD8r4PJA6BxCR1HVEHsq4xSnjr/UZOYvh+Kaxfnop
-7Rn9in5MoY2rCY+PV59Xbx4grqNpjupyHEf1MHodJRj85JiClnLZk7dNJ/kr+zgg
-wbsd12/GHkBt/pxuWhe0eFcAOJmvqC3c4pUAEQEAAYkBHwQYAQoACQUCV1tJ8gIb
-DAAKCRCw83EPpkkA54FACACFZB2Tk96FQkr8+WHOz93CJs4UD88PosLaKmiXKP68
-arjH3y5jhNLBzqteZo0Crfw75DYWIZChdf5uLGKCWXBEytF4uoHOy9Lv/3emoSee
-nluFVcNjL7CIOQDRmqw1t/LjnsLbgvlwHix5f7I6Txu/J0HKJbq0XpoTqCzFK6sx
-EPHH3gZto+XfHk85haKd73SOM4edkmJx+jDXES1wb3K3SpYibt+uPVfLYXWxK7xA
-aztESTIqZ9RnYHzd/7z6DO4z//lfB7IVAqvM8ga7Qj58ObeqZxx2iVit5WUZ4cE3
-0crNGyXH/HKlAp+B9EvENnwr++TI1CGYthPLFHFc831L
-=MZeq
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub B16698A4ADF4D638
-sub 32784D4F004B405B
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFM1v9ABCADD0KoXq2ZKlUHeIVovQy3gFmW9oFAaraV48ouv8cYvqdf+s91H
-NyqeyNPT/ihFeNqZJUAMyPdwN5xrWD6gxMrOCR7BFhA5kLmAKz4HfFCQ05ViyQdI
-/HVNFvTdF8LNnuF+a5aNgg+jjLvFwzkyMFkuiPGuUDFnqEGxC+z9J8t40tpOTOIw
-tPjSzkDN41AJDpUK/simKC5F0Im78nUbwMalE5z2IsZRWpYZyIhN1HhEdDvaDIh7
-3vENjH7enAjWh0iGRu+GTP/fayZnX0uhmausCCwMMhsr489e63ZOaJrqeC//wWrX
-dtEJjcmvRmJ2hwLmgwMP4zSNKsnLGzP0sh69ABEBAAG5AQ0EUzW/0AEIAO62SMbq
-gIzEFQEHlxNN5pZHd7msqDESILFYFkI1mxlkD0twFWMbk4nMH2VXhiuT3ulqKBOU
-UUNQrO7egtfbGsgVv4bWbUHfeZkfvoWDlmbrvi1YLlR/ZxzGpCNc8e3aOcN3XKHl
-BwfUaco6pcTBvLpKPA/TAjkTOtK4A5Azv1CSwpzSJf2bVVbrn7mi/rw78SmZAV2/
-rtiOU5a9S+3fzswLk1PO/z//d4VoCcL2s2WueVO1Q99kejkE55l3lYwEiBzVuAA9
-8Q0a5wg84vRGFZQWLIw8c20On2+dZcTLZc61ZjnsI1LSnLUUyQ/fzHQ+BynQF9l4
-3ZCPKFIl125MGikAEQEAAYkBHwQYAQIACQUCUzW/0AIbDAAKCRCxZpikrfTWOJel
-B/9vDc3G/mrIHB1P/zl0Fdl5wQzaSVc9JB/ce0018ptplL711af0ZDvWqmZkJNkY
-u0lHgnniaXB0l3GGUPIa/TZzVgFSRPj65FWTMkBbNnhGIwV5IVOPcSKSyDYn9/nQ
-PpmWl5fDj8xiv6kKYxA4hjjRbRGuUXiI2dnyFHuFpacf/Af/Mc0U/CDDuz5a1jS4
-SYuYM/HFVL93POZzwLUR/+GDuVJFnm12rmjGnJVgR0rWcJKJt6vCsBPVfIamfl6v
-G+N4TWQ9euj8Rd4hjsYPOwDfgVIUGIhpTUJ+fz046fkz9MWnX7RJh6hqLAXT7Hbc
-0FTFsKYAbLJbm3Q+rU9jTdM8
-=mDDW
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub B341DDB020FCB6AB
-sub 315693699F8D102F
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQGiBEowbDsRBAD2jx/Q2jNuCkgiS3fzIj6EzDP+2kipIKH2LEnpnTiBlds2PFYM
-xYibVab/grgQODxTdDnAKifbJA/4h1/T7ba+OV+xIUoSI5MbgaF3USidiDHPX0pY
-qvG+k3hKECLysQ2zoZpcC8c2ePiZQSVC2i5BRqgs0xZPz3kiT5U9WPozTwCgtasB
-TgHhkOGhZ0SOUuQ4dL54R9cEAIaDjdPcI7LxyOMvvGTuW/SaS9JyP21Kch+Vf6I4
-vKWWqXEaF0So8S088zHnBrcBKhu9D1sKIHS64EoYCrznfMUtoENPe4sf5QuJmZ9D
-+fBuFcudQIpkx8L73q+E3fmCK0uX+anqipJtS8mgpMeabKda4KkjDsZkiaNl7OBI
-0H09BACofK1HTNHNke2N0wXN1GyG7IAqprKl4lBbu5aRXvfKQ2tDj8s5webNQ+Se
-Om/Yg0Bi+CiONLgUjiwYe1wNls8zkk3LwYFeKIJ1AjAY3auBRWOI0/IFFzwTkV8J
-YPHa3Dl/kmYp8NMMwA5bgrblggM0Qhnp+k//xpb0FYbmwHMwUrkCDQRKMGw7EAgA
-5MMlt89bomqE0TSq63JnPaSeEKsAx6A1KaXaSg0LEI7fMebSQcAdVdAFBo4HaR+j
-NNGv5JGTvAObLrqxnn5mU/+qhdTw4WCf17R4ETEKc3iFN3xrpxz2Vew8ZWpw3PcE
-gCe27ZN02J6BgtEqhT9v9f0EkAgRHIkcaFCnxme1yPOFN+O0/n1A+59Ar8rmwcHG
-opSoZlGDEdEdqElx/shQjqq6Lx3bWYXS+fGzSAip+EAX/dh8S9mZuS6VCWjLx0St
-a1tuouq9PdOz5/4W/z4dF36XbZd1UZHkw7DSAUXYXfwfHPmrBOrLx8L+3nLjNnF4
-SSBd14AfOhnBcTQtvLuVMwADBQf8DC9ZhtJqHB/aXsQSrJtmoHbUHuOB3Hd8486U
-bZR+BPnnXQndt3Lm2zaSY3plWM2njxL42kuPVrhddLu4fWmWGhn/djFhUehZ7hsr
-Qw735eMPhWZQpFnXQBRX98ElZ4VVspszSBhybwlH39iCQBOv/IuR/tykWIxjPY7R
-H41EWcSOjJ1LJM2yrk/R+FidUyetedcwUApuDZHnH330Tl/1e+MYpmMzgdUGpU9v
-xZJHD9uzEbIxyTd2ky2y3R+n/6EkRt3AU9eI0IY1BqUh0wAuGv/Mq2aSDXXNYJ/p
-znXSQBjmy2tvJlqXn+wI1/ujRMHTTFUBySuMyZkC0PwUAAnWMYhJBBgRAgAJBQJK
-MGw7AhsMAAoJELNB3bAg/Larfc0AnAmQbEg9XnLr/t0iUS7+V7FcL5KpAJ9k3LS5
-JI97g3GZQ2CHkQwJ3+WcPw==
-=OasT
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub B57BD58EF6D0A713
-sub 781D1F35916E0113
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQGNBFsZf3oBDADUgeJsq9asQLaUajkGON9KmxKBtJS+IbGa0jgvx37T4LDigKS/
-wh4axvdJ0mE31uXKitBVDkr5TptyxA0jojYwlt5YLXsotnskdHrIg35Q8xpMp72K
-BfBsqtnfdmBUd/oBZEKgxMM2Pl/VZ+1wmF+KnyToSWuy4Q+9d88ame+8Jdq5ELJn
-zWZWYhwE3c2Y8t62VGzXeZg9Zz747Qt0ITl02//ufoR8aLdb+8uLuidNktyoqpt2
-UG8oLr8mgOAaOn6npN81FbteIWCEcuGewCjiiYTHGpA13JmToDDUfopWYGJirkSI
-dYjP4fZBu4aryHKwXt/zsiD7rzbHrn821CAAZKGptVVu9IfqD3jCBhJilGmkWw+j
-IozAd33hLvlCnH8miXRnGPyNT5T481qbi09wOnQEUYrXBe1zOvBAEVxwSLcNcxe5
-/2gRDbSNU9NJst994hzofSyxA/3X/CDiOSHDKdAcOglgqfpistQIS68FqDGo4eIS
-WeR3S583Two98+UAEQEAAbkBjQRbGX96AQwA5IIECRfqpRDQKsgEYdDMzEYED5i4
-w8GrkqK9Bl2KErI6WQmuBnZaHr71bMrYFS8duUOYetasTKCxjU/Ps0THuOmTnuLv
-Am6PCkpzJ+qBNM4jf5sxHflcb1jRUQ/R+qoWOsWcwJhOw2OgNONHhW8/2mAs+5Zz
-ThWe4cL62YRK3CeWdWphwcUSGx+zQo5vYBZzIbdQ+E+c7aRyc4qEPfyGNccAJRdQ
-eW1tAWydmf+QIYGMbANWNPXm+g80wE5xCA9wwU7N26Rk0zn6e9+lSy8e+l6+hsNh
-uNxWxDDBubF8YMuzD4q+VM4dOOsAJARtp6HW/0mBTcTD5BEOqnDd/aRsNOrR9Cbk
-K4nU1aSrYOeOby8jc7Zu0SnYC6g+JXalt0jtDEGVaxY9IMIe6AcIJhSXlgllK87b
-YX+t4uVXYFb10QfxRj1oduBQEHJkCovsi3EIIl5a4XyoGdNUGn2IgWg+C0RXrcb/
-KDrg7iakp9SwXP0xBSbcNiwE/3C3Xom0l3ijABEBAAGJAbwEGAEKACYWIQQit59F
-awb051uLV521e9WO9tCnEwUCWxl/egIbDAUJA8JnAAAKCRC1e9WO9tCnE/ydC/9g
-6xJK/aIvvKLSraYfS90XamIyUqNgAyXgivWn0jqaTwoz27HG/hRgWR85q72vZ4qV
-vYwx06S8WHMijKMcI5fBtEL318c9V6Y8Pl7jwSOy5yN0k8IFA+TzqHGXVvPcuCwH
-TQAvvP/9v2d7ZrOiH7urM0eoRDXj7Tq+K4rLjeVIHALLEhqBT8w8LGBOEZUAwS7t
-aaGrURVuhO80QW2gJAoG5AU1qMUkzFsTXBsRTcwPP25FIPYClXPNsMR+2iVZAZ1e
-3yBqQkwRlymU3gPGY3M+TOyplfoYIJy6oT2ri0wYa2jeNdo6eEmLUjNAbpdiIEop
-ruzQLLaT7PUk+RU1UFVHjV0rgrXrTYvdgKyI4dX2yGlTTmnq94eaxMOsMxkHAGBh
-GrOJpBDWzJKXX48WAdi/4WpnhOD6N1BOrvWq9QWIU2374WutAX09dt1kBG3m4kGR
-STHuixCePH/e8n89lWDXSsqkV/+imzi75cTN9RWBT1mRltc4jNQ0B2WwUgrTSPo=
-=yiE5
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub B5A9E81B565E89E0
-sub 28FA4026A9B24A91
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQINBFIsmpIBEACzV3plLr6UEdvMiarCYzoK3W0Gzzd6BWtEuQdOsDkR/XCGOEkY
-hNQ9sB7QdA3ysFdRGf9IFcd7E4Y9dQABFXDlLEDGewPdZ1ahMTz9kK5k6R/1mxeu
-UPOAu7u84yIQ6c6ZAP1xB/3kMKEdzPMmxVpTpqqp3GlkDXCKgUejWZMblJ4Yev7A
-ZmkJ7YMwhRJPZof0/McvG5q6OftCxsTbB7DyrxDLXvevV7lK40fAAOTjhxrajTsR
-O+GlA5CsztK8rCBLU57pcHBuuvEU4oKKlHgSUZH0Upp3gAqbJqKRWObreV2kH3Au
-Wdj0do8PQxsqd+m+Z5LYZYibzaKwnqvMJdQpWwHPeHcUbBrI/d7+jZ44MweW9Nqf
-xFoLp0aojI9FdZZelZwcZvJtk1X239i3TtK0I4XvHXuuWRzbUjCbxElHqzYimzun
-ZK9OWjI1HD2tWzFNueWMDqdOCaIsWQFaEXcXmvAC1IJUwtxFSshG9Sx7qvg0rwzf
-KnJ3/hZVvMn3VaKB4KRb1JPAI27f9HZ4M7bzLl4PS8lSCVCEJkNmu80hBeRyoKqE
-RAGdWM3uLkG8kfhVduPiPWqZ3JDtxzkRXfEaKpvKSOsNszWE+eIRzKi8+3TgWGPQ
-YPbC6UVBLJDyHM4SMSE+/SDPt+mGD/B1ErKWp+sB5cxkXQ6Q9etNTnzYaQARAQAB
-uQINBFIsmpIBEADJQyT0o0Jbl6kjNvRDfZdsWKLdEH7YrrLL+yFFjKCIMZK9N/ZR
-QBeJHZw3jqRozWImt4ayVN6XLilHn7tODY4k+TAQ7H73De3l0AdSP3hhu/h4PXkK
-sUZ25Yet3Tkn3fH5EmepFjW1doDOQ+032uVzqBrOl/wziPPY22QLdmH0hHlCnbMc
-aJgWwUuaijUHDRUDqt5SDvTOBIs3cmr4NQ0ZXWWyVuY/DfmxpgaySb7mz2P2/I98
-EaC7+ed6l2ZvT1OGixj3xktQH4AYEz8KvqCKG8S691SufHNjKbIJ1t0mck4MTC4F
-R+UeU3SOL6Amv/WdeapESklc67y822gMBGRfn/LvsgGobT2Oj+BoVaN5ogoaUeYi
-ecr2B85Ep78ask3kzZDOd5SeHpMf2RfmNFtJT8i2aRjWKnUNvaNtOLlsb8G5Sl6l
-H3PqQn0PhPBBn9sYu11xiGqxqV/1mfp0izfO+dXENxD1OxUI7I4XYZdkkgA6ZZtX
-ym2ckTytI2PsfIMQ4BgLL9TjTHG81+tnwHwKHyy0Z3pVadroPOPgCeXXXRXlF143
-i9wG9LjmOUoRreCHrvMpCY1NEkXMStPPcWwJDJLb+yTLJ9R3du6xgSeIVQzFSXnL
-/gDdqjsO3Xc1d+htjv7lApb9GtiVcsboSoWOyRwGuwg8uA5JG5MvaYRjSwARAQAB
-iQIfBBgBAgAJBQJSLJqSAhsMAAoJELWp6BtWXongZZYP/0+oP/LupvWatiXLpnZf
-TRZnVwGGHydSbrMLSoJAaxHrI9No9EfD2M/nKuqQCaraSZ3QmfiW7aNVbF8KW0Or
-34OjUjWoqWocGx9XR9O5KUw2fPMHKVE91x0I6jQAVf/2pbXemBU/UgyZQ9s48jP7
-u3xRto7n3vVj4srPlwykYwKAiaEumDTLs8naF5qPirQo3l75Pm2nRGM/OWDA81bh
-qTJ7hucZ946wJCh8VVh5Y7ktN/zLiKtX8GM6BanpmkclAGCQcbGxZRfXFZz4XpWA
-0/nnm7+CvljynfTG+e6vuX2If35Hfa9TBukQvB2v3czHWqEvWnM/6HjLjl756wb0
-L5N7zNTXCQK9p003ay6T7/5LW1O2GKxMA4PtTSP19VKmV/y/1y/0R5CJCNRsW28v
-Xx+fGcsWGULodIuMXOyOhQzzbz6KJsVcJ1C3zqj79WjN1kAsqx8jSb1K/QNEwOHX
-cQEZ7S92j5a4ExR6zNXUCHSi87hzKckbaYDgUgWgQQVLJSlE7myKOP+nsdRUCvZu
-vPtuo7ltCzTEHEdDh+wF+moaI7APe7E3IorHn4g/1rMt+Kc4xFagHQRJ9zUPFvdu
-2duhm+Qb6oCEmexgOp/xFw2biYS78r6ixho56IlzbjudmQnJ4UYvh0gDZwi7h06D
-3JnT33a2taNG0TUPdkSq3adt
-=QSEW
------END PGP PUBLIC KEY BLOCK-----
-
-
pub B7C3B43D18EAA8B7
sub 02A4A6FB70018AD9
-----BEGIN PGP PUBLIC KEY BLOCK-----
@@ -10932,1047 +11483,6 @@
=VHs2
-----END PGP PUBLIC KEY BLOCK-----
-
-pub BAC30622339994C4
-sub FC9BDC25FB378008
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFlMExYBCACmdTDSXPwSJeYbfYvHoDl5C7vx/0+LOTunDGJN38pNQHYQAZnv
-Gyoc9ZmChrhLoim7z4ILqmNo8eegknepQ3dGdUij4NVIhR+m+8irayTbsNHvo3UG
-9y7eM5tTSjyNYkyk5fAVuT7OhzIzMA+qtc3GRVxNYRKnaHajt+pOSqr+uoDtMG3n
-6eAMHCAnhgh5Nd+dCFcNT+syl3zCwolA1wrzGxxOaif+xi5wwXjmF/lAt4PDIuDT
-etA2/AqPM4zAC0BtC0iqVgVypjFV3EAexm/g0LNMiG/M/krzwjPq5gf1DY/57jU0
-02FpKd79HmR7bHdc4e2olEf9NlHxfbPXDDsHABEBAAG5AQ0EWUwTFgEIANmMpV3N
-K8aLrLgQTyh5++det8C3D3T5tkEdljHOuN31/qdKNge8H6uKH8zXRZsj5pd8adpW
-kD4TzIMvzIwzizsGw34O9hf1E2XPoDqvQr39p1sovX3PeDvRJY/7JFNt9DsphVc3
-xWQfNkC7JdMPa6JRiFHd3ynfbQ+wplf4tfaDVn1JXAWp0NSGgMtXfn5i19hHQWjm
-RNAKNQLdVn8UczI8XdVM7bS4giDpQMukSyjsjgAo466iRK2+8f8BwIRe1JRvF37B
-dnbvTg/dzoi1/E4ukwVJD6YE2LlDwzdGno9KxPlRsuY3nnheVgjbrGJ2XKRJkIk8
-7cMGh41VKw6L4usAEQEAAYkBHwQYAQIACQUCWUwTFgIbDAAKCRC6wwYiM5mUxEiH
-CACQViGOHi0BoZ78ZJz6L48YNMx8fSdSv3YJ83Ih1n5DWCJgrDV5S3/edYinkoVI
-0Lusy3MdftRg6OWaYOuOTf6MYcddO/mY363jiMByf9Uh3Dqq4sKqVLRnZbAqgD1o
-dRoj2NkEQfgEH/H4JRVrxquzAKoWwJh3MhY+kajYJRJyWfc1/Bm3Bj1tcMGlGeIQ
-fgWheeMg3kxrxJ9TXPqVi6VVPaPKIU5i8l46S+Wg3uvMs8vC3XzOIvhY6cwguJv9
-UkjZwGDSI952wLqnREMy0gFZ+OAB0qJpYM3nDEekWZP38G80kojnN61tZjRThu9I
-i8/b+PwSW+nW3EpQZdLqZtOU
-=2H2i
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub BB2914C1FA0811C3
-sub 7AEAF265B448E2F3
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQGiBFHwyNYRBACkCXpipiMx0lCEccXXzv0bE7LHHbcQYtb1vT/o9WXYoP8JMChJ
-cvuAe8Tvg+s7EUjKHJRhu7I7kie+IJ2wtH5uVARkYxoP2OslYN6MSXa/bmwU8fwQ
-EFkVeFV7q2UFvH4cqpa7UKWggKcUzvB7z5spg/iKuMDQ/aBkxpmUcrpefwCg4/IC
-Omi4O9ROfzJ5Q1YHSrr8A0MD/0OTgJjkBPPBcel/pFetsWhlqA6dkYINT5qdlht6
-d+aye97QFUccg3ODnCq4fnDPHK9PMK8cTGkrnoux5XY240XkWX95tQDyrssGqldC
-zOLxoii4/gsw5s6j4x/AjycsAI8DxaecQb3/sNg05V30ZNm2+kQNmGGV+0oERpo6
-DAVQA/92UVwQdZjMzCs/6NTbsq/2tRX/XXiIxTij6fpZUeHvR4Ek3meuaXs9PPwC
-o2f/90aO71bNKjh0LHSI0CEuMWbnixmBgOEQY1yv0HvW1OB7otXrTS7EI1m+4k4c
-WlwidtR3XjqqgXTjFz3J/ipT8j15a5HOtoIwP5AHw4e+1cEmCbkCDQRR8MjWEAgA
-mqaIVMeh86G+K7uq7m6m8F9s4WtEkmYAYHdk5FXOXEJ+uOSiUiYLcYSBYRkahk9Z
-o7QSv0bWRmqCFI96Jvo5f0MBLkwR9hxYzrr3vkkJyreMsG7ybyXA0O+ga6ex1091
-bBm0f1vekvT7VGdcTtjWhpDiMBXZgTJDGUEpzz0Z/8MxYEfTsk1P7TNMMAvm4AOw
-vRk/xL8Rc6Gapr5EGMLhKRADwvWU3vYIhRjXApXZUem8tNq58cmR4q6EEsmedDri
-LuufwVBPT98/+sxEPMgPFnSoLPDc7AB7vD9s0Ip+8jG5Rtbc39Phz4GDHmCUwJ01
-Mo8k7Sr+jguGb0fthSfM9wAEDQf+LRyfjdWJ6CW+mGSYFsW1ivKzLujvfiQip3CM
-y68Si8BmUJvN8aPWS58knZY0ikXOai+m7W+4yVMkdNLm8JpJ7SX9NevZCYAb5lOg
-mE7kvHoGFar5oA9ttUIV6RZXbQi0fXtksKse3c5gWqMTmEzTV+7thtQ3V6UmXpIv
-OHKvLJdocHP5T3yDgnKwr1ajw7028XT3wsaiUV+sgjtc+1KMME9/Zhwa1jWSzuZ4
-Pb0kxVIjzebsTr1nMdtQqARg+KKc+R8Gc3NCP9MZ/s59NUFyfCkg3TqazsIXQ1bi
-KMv0GppFbFMnC/ifijqtl9g9phuoF3N6/Cs38zVlRHneyHRAG4hJBBgRAgAJBQJR
-8MjWAhsMAAoJELspFMH6CBHD4SEAniBrVdd83vjrwn/3vXYTuZrmjIO/AKC9Ib56
-Z/+UEC1v8wCMk2365rUPKw==
-=vlw0
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub BCF4173966770193
-uid IntelliJ IDEA Sign Key <[email protected]>
-
-sub C9F04E6E2DC4F7F8
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFKneXIBCACtnX3ZQmPujf6ocvdnhsBheze71DSl34TfebyW2Qt+g9NhMxo4
-DaJy+iFNnsaMwLZRr6k/qf+ISE3A4opWAQlbk+Wb5s6DPPA2cHH6W4GdkxtuJzqt
-tFn6YtkFhA15Aahr/vz31NBjUJlBmO4PwvkyxiF/MYP6TQ/AHar4xP1RxSYEPcCi
-dIQczQ8nXzya4OqOyTfibeGz/eiHHuwTLHi3Rd2kihQnlRQdhE1rmm8uTyzFe1H+
-P7WW7kQgygW6yxQ3J+DXrG8kG+nbe57ZY1oyv3F/fOBxzn/kuoKHZ3JJEMJmTIrT
-Lr1ngCZApgteAynRHk4t/SYZiyoyqZCuBcwHABEBAAG0RUludGVsbGlKIElERUEg
-U2lnbiBLZXkgPGludGVsbGlqLWlkZWEtc2lnbi1rZXktbm9yZXBseUBqZXRicmFp
-bnMuY29tPokBPwQTAQIAKQUCUqd5cgIbAwUJEswDAAcLCQgHAwIBBhUIAgkKCwQW
-AgMBAh4BAheAAAoJELz0FzlmdwGTIqEH/AsyCUbhP0m7BJRULiYIWyB1WHK0L8cm
-yLid5X1P6VrktgcRbTMEzn4t08eeqb978P+GHp79xgBU6EQ+2IYiyeeAedZ/m6Lt
-Kv6imJsFPXZO3BLeNfwIzPC8QXdrkyVqU0vG/pSdULyBpc1aGNEK7Hr2dY5vQTX/
-sUrlwxDEH3LCmOnIgilf/M927Gelond9VmUh14HqCqtybv49XQiMUdkVkXmzKNld
-QQk+O24XbnSGOknPW2sADDglwoMu8EZTkZGdetgM/8X9PTBWWd9pEV32AnoYNMtd
-d2ujH+4i7AhH+Kbmn+zWYBQv3J3yQWj/dmFlOa/SFilLmmAtBEgl7wm5AQ0EUqd5
-cgEIAL3PEOztIFUibB6FYEkObVhsDbCnHw9yO5MAvAWB60Ohf1J4T9QK63jZ5/Ci
-qcDrw+uab9I+Ruz/SgGyFS0UXAkwfTICUdhT5kUzZmGyoj2ul+iFDP9uUdEgSgyX
-XakrxBbBPzNaMx8+GyIXRVFyRTH7+1gWgPQsdN1sGYOgZ+f8TMzAv6sxu0JVzjKX
-AAbXdiZTyJh9d6h1jS5Icilu8vRwn3Qc/ZzstBRk+eLbb69wS9YGoUlzYvDBz+5t
-iNwvHUriKc6zVT4Edngcr0mKWTdvD+AsvZffU0XK+vxbgMuRWi/51qb+VgK2gFeA
-seV6a+D1059u2+5Pn3h/Fv/vRAEAEQEAAYkBJQQYAQIADwUCUqd5cgIbDAUJEswD
-AAAKCRC89Bc5ZncBk0qgCACdP8kyUZVqfncA2RsQH38NFYhBz5MAEOIhCm7qwPC6
-XG08CUZfpPXdUbxZGUliE6vhfj7rZbvUKKHlcHDPobdTJqGof2jt2MfsjJ18JY0e
-xSWuVTmNmqAC3gsiMfEGIqjQFWonfm0Od4AvduLuc0TPkyfr0gobakgYvhDjk7eQ
-vgC1QfKlk6hHA/OAFW774qaQsyrANrFevRa7CBQEob6V6N8aV1vNxgl8a6fJzPTN
-BOOmP0mq7xk6nykQuqYTVFyqfXN0p1bbTxHBoW/fvdizi7zMSsuBkWUtfG1wyN70
-uoEQzSQwqgWCIaddzrPZPmaZ8CtzzyB7+JdSNItBB2Sp
-=3tsV
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub BE096E29EDB8D141
-uid Eric Lafortune (Key for signing ProGuard artefacts) <[email protected]>
-
-sub E05A9780475FAB55
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFFGZXQBCADeZK9xuCrDwJ7v37y8RITlchzBfJEWv7cSbrSIBlFNAsUUoshW
-Y8U6xYKe0GdiLVta2F8bzs0Si4LcDeglQNi9Fxvh3/jfs0MEJUfSeZ4z1Mn5WY35
-utbdlHe6i+7qvhpHveREwWoWuvFGKeSCV8SioolG1mzxrDVLkQefPZ+Kr+xd2cYZ
-SIkbjdhCvJHcUkD9gs8Wz9q9eDyc7dGJmfBYaQ7Xa6lbd852qj8LjQ7Gd41yHU6T
-U3oo0kKfAPFkW7rX4zeJEBgpncK0i4ertd5to/y2hauqPU3VMExqNS0/L2GqKNmb
-Q2Me02pBSBCrLLCUJkm8jZorPNxlQxHpFLHDABEBAAG0T0VyaWMgTGFmb3J0dW5l
-IChLZXkgZm9yIHNpZ25pbmcgUHJvR3VhcmQgYXJ0ZWZhY3RzKSA8ZXJpY0BncmFw
-aGljcy5jb3JuZWxsLmVkdT6JATgEEwECACIFAlFGZXQCGwMGCwkIBwMCBhUIAgkK
-CwQWAgMBAh4BAheAAAoJEL4JbintuNFBUQ0H/1ahtWOeS+EEZqUxxgLE3aiuw6XR
-mcFY/9kRlnBsKpWGGyV0DRkLThXSV5fWwiP0+moef04Miv81txVXR3U5f4MY3U5J
-SDgeB1GK+BvcYz1CXxGcErgaMIDXu/K03OyQNp1lD2kjmDDz8SHdVqpv/aFfxWpL
-uMaogbStXfbDiMjeMg2zRcAzXqu7JlMt3z33uiTUZk9jubAPOBnP5/Yhuc2wcnfu
-cLUUL9xNE6gpl0Noy8qJ2TaVoHLfDEdSgVbLDNpippNQCIEXn8VtlBCG9FBtTUR7
-z8fGU8f+ijNYHMa6jNsDlSo45/RV+alQSSZhx3hPCIgO2klEkawBs0ikEjS5AQ0E
-UUZldAEIAL0CmXXJLZWMbKXEROAYFnUqQ4eNLUcLY1NfL9xrF2KP6apMXLJdftwz
-JtcenfD5vra8w5JJBn6cvY4Dr4zmueDSsN3Cpgr7c0trDNspAQMyUGmg4Cw7lAMr
-uIX2om1TTa5ALsQ1PfupnLFLFKbYd2MmfwEVHgEBAzqmr89RoG/NnlV4uxvWumb/
-OrLzzizGLHdLFjnq3Szl6wQPJwmxCtWHvzW/Y+HYclm+wp0sufvrXJ/G1RrHKxwh
-xaDVyLKsb5wkUC6SZmE477SP6ZCokoAGHqEK+5JnM9MYXreQ7N6NggRUseCokFaq
-ckze5wVBXmPuVAg76ScPFQd4JzLkGzUAEQEAAYkBHwQYAQIACQUCUUZldAIbDAAK
-CRC+CW4p7bjRQSkUCACPWdIvMXPtSQFnFR8oUIGxvcp9MYdealHNYkf3qgJTuWbH
-TeD8WpE53immju4hitOq/qDevKOWhcfSaLqCtdRyYQFFDWQt4SsiGdWfCvKiBMSM
-nrDQI9f+XCv7J3ute5alyMgv9Uo1XLyyiwhz9kJ9mzg+ENvy152PucI4TN63qMRQ
-MQbkAenrTzIer+5Q9ZY4TILC8pVVAIPQjTHuhdh8VMclTdkHab2PCFC57/3djJyY
-44PLhN3hLI4CElAGLUwBZLRa6OFOvwW5naivwgk0zeeTqq/jTOWPYiy2dyyX1pRX
-8bJh5et4mXyM7HLHRp+FblgWxpFWNvMCEpxujLsG
-=B/UT
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub BEABCFBEE059E4E5
-sub 6579F3D193AD0019
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFOv78cBCACj4w72ksYDdLAY3GzwpRa1fo6S4aF7r96PitlETY83ct7AVF7j
-XaBGk5ylNAZXan3vlsSAKtxlI7skZOE5iKjqDo7SUfohs1WXdmL765mUNsSmkbG+
-WMOwDneg7Z6+licSC780OUFbifiPOKpgzGuaj91vrNigOmtyA+cbIHckhy+t3/PQ
-w4fO0S3RyJvQM/aQeDsyvhhBf2QzrUN7RQSfS69n0gtlVcu8usM7FZwOlBDGVPqi
-2Pauuj9QEyQIqnn07uWAUTzKrWF/WtcAXmLMxs59VuVRC3xnPVxekQTcJeCKas2L
-Aaic1HKp3AfTOT7+Ao2RRg4GpIiFhaJpul0dABEBAAG5AQ0EU6/vxwEIALyM80xq
-kaopZN0A1tNL6KUnoLZx/Tme1qp10JQ+AtYP5eFqPpM2yQIkFgWoQFFRZ3saPsqE
-jYlAAeyrRLOJ65PGRycHckckdhyEmGFCbHl4bJl3qnfJZuAqOSUlmxMwvhFTi7Hc
-BCOcWOqCBm99Y91IIy6NGeB+D5Oe7RGox4a9iDDh/NfyYCTTRo1vR6GW4JK5y/oJ
-GfWGx0U3CkzrwPw5efhCgSXmo0U+tQyUSWKl+J9DtdR+kP5mNoWOOxYMN3w4D68A
-IDXdD9ECEAXZKcKAlEXQ3AkVQ+Gfi24S4z5ewsHm8he6HFOsYb+FYtEByeydskWl
-U829LN49xrG2sm0AEQEAAYkBHwQYAQIACQUCU6/vxwIbDAAKCRC+q8++4Fnk5S9M
-B/wLDuqtJf1ANTTf7pyQBmjyeD9QE/Tzv606tnLxZwkZKqtEa/+3EJuPJLYOVHkn
-XpWl4VlMdJv6DEg4DrOQuJDEvv0R7YrIRqKZcZNRn+9donI6PI9jqrbY+8ZWsoA1
-kom+hU2VEoutPgxkZsZPHMj3LfWTGouTa3/HEOP5cxi5leiqJmYLKKBXJs4iMNBO
-BsqNQQjD/0rLeyh1JlVF/bpsapQJJ2kijowt5Yqg0rPOC2qq7EQUV54EVhiq4+40
-iyn5JNPmXaRHH8lFCavNWLNUh9HxNZHUOb7/UmFG9T77reY4ATTl0hZUYKdCYHeX
-eOq2bxXEhHlRB6yktjak7zk8
-=y0Hp
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub BEDE11EAF1164480
-uid Joe Schmetzer <[email protected]>
-
-sub 4BE257B370130000
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-33wjXAW0h+qq7/7Yq3w3/7ncv9sWIzU=
-=NtIH
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub BF1518E0160788A2
-uid Karl Heinz Marbaise (ASF Key) <[email protected]>
-
-sub C163B490C5CDC967
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-=v6l+
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub BF984B4145EA13F7
-sub 84761D363E7B0FC4
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBF7rgogBCADU9OwoEFdIgN5U0JU5pI7s3T1T1LeDMzAQ8l2Hq4jFrhnrjcEA
-ieDSut1YIv5NTBoZv4CrklaKvvQNUXPvKrFImA4OKhBodKV3wsq2efCATDGa1JAw
-VEJx6nJxxMsCLCJvmZsD+YE8/DIBI6jjnjh8jagZVkxkSRPvUIxlZCxytIyqXI0t
-O8pLh8+8p5e0PgGb9OoszxEQZdBavsixdpe+0feU9cz0l0jJYx3W4ErZeCGGwNat
-UUiW0ctb3iz7BkNhhoV9zepxkSLzCf5zBeyA+WfD34028pAfPpyAfDYXF4x55sVP
-/3MdWGB6eU6KzPG2/QV/6or5E+C1yCMrnMy1ABEBAAG5AQ0EXuuCiAEIAMExiS4A
-u6FPSlMyjCaT8EfxP05ey79rYSSZd/ixmqyVzJkXYbf/SJCBeX9+NtWU3LEuL0L9
-WXgAA9Ys18NaJzBMC4kiQJfyXK6Kak7sUfZWWvx3Ad3It35X4svJNuR9GoqgsOvC
-D1SPgK7MfTcAF8e4j2UUqgRnjM5S6dRa6AH2s3bCj8GE+YSH9Ag2osNcKBgosNiv
-w04tYh+sjx8W5ehKaOEMrBDO8OMYVeiIEOvBIjsCZpJgAnOBPh/7zIQ72tPa9Ou3
-nAWBwdiPBgqv5FTIVmHWMfAJKRRCW4ri2hN6toHGrjJMgobtwW56vTibb82EGLdY
-3BF41DQT2MEiM1UAEQEAAYkBPAQYAQgAJhYhBB0Ki153xninxyREWr+YS0FF6hP3
-BQJe64KIAhsMBQkDwmcAAAoJEL+YS0FF6hP3VWoH/1Uhih+Q/iJIddvBatWdzpgO
-e03ppK9pCWZ2KepukILbR8bpX3cqUiTbFD3W+ybrrY0k4Oe9hXcm3re0N2GAfEWf
-tRknxXH0TMeyWoBlldfSM5DjrljM88XAIkk/T2wcARv1PC59IIZGKOpixItF5Pps
-YII4YzlripU98sXBTSlJLU1/UZaT7XNOZ9O1/PVxADpVIeH6MVdWh4W7AV/dYZ5j
-d31NbXDTtyDJBUYoiq2hu10+RNoqq28WmJQGD8aqIuKOpeBA8EirLcRoDGELSqYT
-lQyC8nl8P5PgkEZ5CHcGymZlpzihR3ECrPJTk39Sb7D3SxCW4WrChV3kVfmLgvc=
-=WqT9
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub BFFC9B54721244AD
-sub 788E173C196BC673
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQGNBFRRGVMBDADAQcmG+x0mHZwJ3uKgODjUZXkGRkuz7aP/qRmuQVn93tl8DmA1
-lgvXndvChUjzYt4DJnQhRsapAXEmP5/YYIkWOzuk9EpXGtqUieocylvNXP9eDF9y
-4mRbGbCUmz5W6Y/3w7wIsrz4kbCC5xij7cavCxxSGGg1IsyDHYkOMpcQyZH41vXJ
-IPMyDvkJUON2/YA+xPph4XkmNA+hJZ1fEa+06Cd5P4j8GeTnpibkkgzqzjuiUlo1
-PcXMXUzkGnf5IwMQOdDYbmDC0K+QUKEPheWY6NsmTdZTuyEdD7BunWA++mUlrqZW
-n81HMNijG9fQbipvuGiOn7OfmVF1eqfH+NtP9csBCjn84ZMUHHArzsWgb9LWpoki
-+vQyc2K+egdykeDJG3hFZ0Ztbz1YPQAUy8BN3r/OmKuSwJ33cleugxyDe123kyUX
-KhBdGEY9pTZ8dbBKn6PfA51XvuWQSVPJRjG3bPFphLPDYNJr/MUuYqo3TSTSp1O9
-EGUz6yVG/S01tJ0AEQEAAbkBjQRUURlTAQwA5QjPD3Y6kiGacT7lXdhYYN1m0iHV
-ddk6NpERbQn7NAncLI8yx2kWCtF2bBYujv/plSfMKZmKSR2VUx3NXwmG4QD0Wr0G
-AjhS81jrmAjEEs6Kf0fvihJn5Z5fJAyDB0BMYARhCPtQBmZ5g/mLQWqPEj00kaXc
-vZyPaMwOvkFpNowItAdj+oxt9v2DS0zYSNQoRtF8WkX8GeU5j5yL8l3+dgu9CKlS
-CM+DqnbpMDiXDdDpc56Ca5jSuI85+c0TYo6ZIvn/34nmWMD5dIMQ2504Qr+Cuc9g
-u3zIJL9Op5TPpDKLMhiF+Pdes51unoFMnuLKMmbPWtIAIXkphd1QkVTnhr/yiqh6
-gGyGD3520FLTqR+Aq44CUUINWN2nBTbgrAaE42B0PRGVjtmTqoYJBziig0Fbqt+m
-BPwvT5+qRlX9fttcV4Nkhgan7JNH2B7xL07mWXAOifoGmkAeCH5y5TKvxJOCGTw0
-17NN05RCsQTHsL+0OhjU32hvhRGrbQTNq17nABEBAAGJAaUEGAECAA8CGwwFAlRR
-G/8FCQHhNh4ACgkQv/ybVHISRK1gaAv+Lg3GF1LFbHQlT0DiF8cAJ7f0VTiEgpKR
-SHh1SJ9mwPJYM+60HNHr2/i6+8aMML6VVy8goOvYzSW9BPgTY7wPF5HJ6k09kzDP
-+R/tG74XjrZNFwZfRQ9rAeAlMVYXpPcUfo2FpM8tvR8HKAvJJNZfPGEtVkIJnJSz
-pZcqLX7ScOdKyWu+byo7+UoINF0vWvHorWHps0iMNDtrCL1QiNWxGMYH0+vK+a0C
-zGM/C2JllP8hzLc8anJjjtcF2xIZGL/roQnal6g2+OlKmtXSgdDwGOzEFPIjMHU2
-CvsjRPX2RbdzKOjIo/4ybjKtbvrbiXPfUORyb/aQ8PHHAZXaQ6yU1LRTCI+qA+gu
-sFCtKpk7RvXQdo6sIcrpqvLfAAWL7SB6zV0rtIFqPHh09NlLJ3LIl+2UK43Sa7gT
-j88XfFZYef0bm+IZjSGmEaZVEiXHB79AXyD3DZDhHX8fmcJIvvaZt+6V34ZOaKIG
-RATW8oAGjGserAKr1rvL3gGRF8LiRmBx
-=oggK
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub C1B12A5D99C0729D
-uid Valentin Fondaratov <[email protected]>
-
-sub 606CC6C4533E81A2
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-=Pyox
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub C29B11246382A4D7
-uid charleskorn's Travis CI builds <[email protected]>
-
-sub 97149CA7141687A7
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQINBFwVgzkBEADF3gGO9iBXW9g7+yRjwTKuadaSW/32gDyREjKNSa7NA0HSCtnU
-dKapw6AaCFpznhfjPQL+bZX/YJUdrIXrSJ9iL//2Ay/JET7UhYBsHxaMm8VURpIK
-XFoCXmlHNTedlkFYFqEAGYxyyGYkI2Yvq9U461OXXDBOwp55uhCsoZQfdWvmdSWj
-WcHEPDd7mPuhm+5JMUJ61cLKfiQ/IXQ5x912CCUdCPLBdk4KyADXa0d2ADEdHJ/Q
-yu52S6MrZRSs3RGWng36gaEvP7+b9TYArFLh13em7FHV3y+bKhcwcyUcSH3J0jg1
-23gBNhh+W54KiWHmfDwrt3bkqe/YOTQ61/B6dcQF0LkIpKnLrhvwPXUgpb9te4YC
-XtSVABnqv6scz3SjQbF2zgBXnKNqPiIDJs2SgavkaPVl3L6urYubwHiIL3O8lbZR
-sMDeAYIgU2utkSEpox6I1W/cyyvuJ1HohQwaxkk7yIIe/1AzG1cKXNmZY4q4zcW0
-beJhZHKLJFiN2VGTNppRy1VlhNO1kjbx2xfn2g8PoF4DdUJCyeZBdtW5q4z8Pad6
-5AYV2z1Xc2t3CG4Z95D3/5owGxxxuTym9MOFi5H1pOVPJ+IFtSN1u3DkgO0xHI64
-9e4Y5q17GAvPTq8fCOscan9RIcfuw+ojND4U4uGXfyMakCK7zcmaRjvrxwARAQAB
-tDdjaGFybGVza29ybidzIFRyYXZpcyBDSSBidWlsZHMgPHRyYXZpc0BjaGFybGVz
-a29ybi5jb20+iQJOBBMBCAA4FiEEfLVIrP49R+kq+lZtwpsRJGOCpNcFAlwVgzkC
-GwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQwpsRJGOCpNdnqw/+Mw8FY2gy
-BrZWVMg//SgdF+MS8+3KnIxQOLPyXhXf2I7qUbR4p3kaW08fClm6pIl68pIv36Y+
-i0fIBdeNHXukFDU+JAYQx/4GAZlFryFbCJVCo5vhMZokf31VAn+uxCrqtIwEA9Yk
-lu1LHEWYFEu04UqJamSoPUWLan7m1b3LBNKPDzb3i50/h4gQvkNDXOSakcZZJ1MI
-yOdqMLa8FnU64pt3LX5ldw4HsgI07dBanUrHLGx3ixh7/0+6Rcl/FN/FnjTaaYZN
-h8VGBmBt/APHfh3C4iYSYPh1reQdLd/1KgVJZq9uButSYfsfiBHfJKaTv/dkIEj/
-nSAFuGQkjcGd82lwgIgUsQ7OsgAnyf/soS9sk/SLbTdZ1qYlU1kxlrRFLxE5us/W
-5WAkJnJQi4xB2G9wZLoz+yz9oKyvd5P5UvOU7CgDjeWl7LMz67hf8z7I9VGsMjXk
-x1qXJ+e8ya0sDTdJk/WClOrQt7gPIPuajbret9zDwkM2j5AmJF914z++RCLfZSud
-5fOeTNy5gIAk3YE7qAt9Y/L4OPQ93hd1mu5l79X+V5LYZ19GqrdtucPCKRqaTiB7
-ADwTappPJ9LBTI4mMvpxsZM1ev/AjQ2Ye18eF9JnYhFa3sBWxMIp174RjiG+l/ML
-OqwfxxcQM7fgIjjW+ZvBUlgQes4bCazaGqy5Ag0EXBWDOQEQALoj6Y/BAhWa23iQ
-n1/mccxlD6ZQbCF7T06KE/zLk9b/yTw8gm9ZE4qjYXq8p9vY4Pn/HAx27+cOl3Rd
-mCHIJsIQBAxREF4cH7cK6isSUqsOScWEyBdnYVBv7qRRo2t38sTOnmcHPPByn42p
-nIli0kuF8W2NF01LUyQ+zbohOWkrq1JHy/W4oLPFhJ0+/9WfDc7L4Kqpxjgu/xX2
-5hJ7uoN9hZNFon83efHyS3Hda+2p5Viy0Ep8s7UP8bZ2s7ljxv1AfPlZ7H4KUwa+
-i8g3jaL2K7jVdm18jl082jOnef/8BA9Mpc/sgdyM2TFAj2PYxEOAm5RglG86IrAf
-iqrbhp46a3I09rsk5tBjt+SELzM3vzm0wNJUQ8kxiK/7OWdLYabhy/MMH6YXDSUy
-5zQDM+GLBbH3LJ3vyWwXY3pLUQExKIqa7frmE2Ln63+ozEzvzDdmOuvTA2636MLY
-aOzDGwO5YtMAv4D4ltrKz0yjlZTng9Mr6HJftTJNs7MJ5zoxM8Qu1AFZQXvJxKpt
-Yq1fcUxv+oE+GoVLpGrEqSu2Sh4QKotSroGvKRFuhHWJmjk57nJ6khiGXCLS2IuW
-VHjRyNdu1K1DOByaIOsLFDG2A3U3hoj7TOazNkI5MlCOvvESlpYhdoUjUvu/4/Ov
-/QM+vZILIBL0amDrXoSHMme/5TlhABEBAAGJAjYEGAEIACAWIQR8tUis/j1H6Sr6
-Vm3CmxEkY4Kk1wUCXBWDOQIbDAAKCRDCmxEkY4Kk1yMqEAC4KCviUxmQWceARaxK
-ue9yq5My+vyhi9X4Uu1eCKCx8rIrnkGeqfdbqccm20puPEnwRDYLGGa8oGcVSapa
-qf8i+DPo1EsP1qspD6dpbiPClORG7dOOrv5gazlSU14VQep8B8DJiwusexKK/J2L
-a1lTNMSaSgPsLrpNfVld7u5s4qeW4KL7sSZoqR6z3sdV9uiBB/WzzqZFhaEao9Ms
-S5eqn1K3pHL9a9WQeL+mGOi39DzSY5t/eYUXOqg1sRxdpAucA9Qqh/i4jod89ji4
-UKJcQAx6Yj9i0adrS3htFFP8Cfq8REx3K3tu2pQOCvR/rc29YnrdM//zaW6K0Y8L
-raOObNXEAuITinR0Ow1FIolJmYmp5IwtStM1aL4JP1nnE6DU0buJxiYut6HT0Q0U
-yo7XWrFvWBHERhQC36PzHO7HSzZL4W2mTOLIjeZLF0Yhm/y9mnEv/ZsUX7XEqG46
-7rJht0AAI+THyWLN9SHI8algq2pGB/RS95jb0JnOxxbQjKnTGJzRosG5kzcQ7pPf
-FGuQ2wozUbd8qEDFoxM2WQdI28o4hdOqA4tMzqQKtLRsfrq8i2xafiI/R5jUX6Fn
-5TyvFLTPaMmD7Jew37k0FiIA40owmU7jMBJfgR0GcUg/Zu9xpkRU/pZDoZuy0YPr
-WLi/z9M5/VqJKMD6Dc6RCIwKYA==
-=SsPP
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub C4C8CB73B1435348
-sub EA2A558279B36E6B
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-4q5nL0cFWrpYBtEUxDwWSI3K
-=qAlt
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub C51E6CBC7FF46F0B
-sub 4006CBA6D352F1FC
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFbgSbABCADGGENSy3oWLjW7zfYMSsR0pm3l3eMA7ptyU5C0U/MoIYjbXwyX
-XtlGwKnNgngATh1SMpX4WDbD8tn6vdeP4uHQsDb40t0XN7/HISFcLhV5pCgz2wNR
-t1dZbreV/EaZn3f84Vnm9s6TU7RHuPP9qBne1YLbB+LKKZUfQGavqGR+n322DhrR
-NqLdC3zFNtSmCVXS6GZ17IV/B+6CiNdbmPVk0o7zZexqZCNMXxv1IFzHV1/Y8Htu
-WQBfZ0zWwrX85ZKysU7UDdoyUw2aa8/+YpZmKwo32N8GpqA6azBeUjjVXGuqktMy
-l6IcHbLlgymkkjK7TyAKltuhvp6AlBTzp9i/ABEBAAG5AQ0EVuBJsAEIALE90/PK
-unEOu2B+QGGV9e0jJMlW+rs3BV6NI9ZaRw0Uvy0xN+jqhMsyCzB8P1joTZKUsmK9
-ptaPlMuKrTaQ/0GYPi6cP5EamphyvjK8ljLhhQuiAxt7zwv78vX7CGqRUEcAszsK
-8FPBAXERsSit661rjp4Ai71cyQg8YOXDjhissHWmneF8TJ3yItocj4KxDKLxoY+h
-F64epbkjIkpfrZ34iX8zdZMRCNJlh+oTHe/xulYLQDbgkgQa+Y6gnKmUZi0QGU01
-k6eWw/U3yOC69++ehiYcZYS0dWpPE/H51Rizn7QipFeFfTsia9jkGjzMyKHGju66
-URQ8okd4E6ev3N8AEQEAAYkBHwQYAQIACQUCVuBJsAIbDAAKCRDFHmy8f/RvC1c0
-CACy49b4H6ZzY71Ao9JHRRpQZ2VSVk+6xPblr1DOoytDC/zhVKekerE7OBEul0UO
-qzUyLNwkDiHy+5PRi6ZquZr85PlaVV5j6DkuZ/0lcL3ofsvtQi1Dwd1q/9RzedSU
-jjY3OimPWDkDBIGyBXohxx1BxRIAvlRnk9agapfbAdwtv6cjYxW0TDcPx4XW839n
-MN3CMEWtlI1GhKGYi5nsUw73ctpSq9dm3ov85ykFOqB/juvTcPoiOwPE+6o0OCTZ
-o60VwPUfv7uoXtkrLVJ0B06mfKiUgZvaqppYDi9IrhcHarOz8MD2OrUS3z4riTsL
-VEPwY+Xd06QyemMynHqpcDpm
-=1WLL
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub C727D053C4481CF5
-uid TFLite Support <[email protected]>
-
-sub 29E792953D515FC5
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-=zvsL
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub C7CA19B7B620D787
-uid Stephen Connolly <[email protected]>
-
-sub 7679164AA2590985
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-=H7JA
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub C92C5FEC70161C62
-sub 64863FF4D1BF1809
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQGiBEdUhrIRBADCU9cuKc92CWQlZxwtRuSIV/36Qmj264YD+Lix+r1Qe1PqRr1I
-/MObOo83ulorWigSkx1k81Mnr56NwmIeo2bMhjmgRgf7EG6XEbKdRKfJcJRR1lDV
-Ml4ru40W958M3PX5fsi0m0g2TuVrAKIS4vscUt4L/Cf4IT2/0OhaT6bWswCgsNws
-Qq6NtCkLkpWSBNYGT4zb6yUEALlhHMnfzPSDerKjDOaYHTz3PRc/GGUDSBTSVj6W
-hQIDrgTqrPxoB5JMnfUz8BLSayk0d6HiwspJ4Wnxe2/jdIT+6xhX9xBYXVHZVs4R
-cr8zbBNcW2kwFg5Mqy7TiAPzakzCslKAAX+cjAKSOWyRbmkEYnNgMlctdyENOR9+
-BpP+A/9anoVEfULqoETShmgWdi94gx713qymhNBpFZnPpm4j4JuxKopl/unQmw5i
-Jwtu93cg38UfaOMJjTi6tJ6F6SE8xXv43nKs3Xb+Ll1MpTgaGUXEhCOeTZl223Qe
-NBUp8kvfcys6aVX6GT93dmWxtMewlc6gc7HVQnUnyCFsVeoy/7kCDQRHVIayEAgA
-/OzW6erYExaWTjI7wPnD1uv1Leq2WRhG1I5YfuKU7K91TMilBm8L+qCmF1QEg7yF
-6mYtdwXjOiA0YoGOVEeNJELhJFKZOoeZob+R3DC05uUsBl7xi3NgB8Msags5N4q+
-nqZSMZaEDl5JR4ZAhYCZBy5xBmnvmRPUL50CDN2IBKxHVOaUllBIZDtdtVH37Gwa
-VzXuhPxsLiAOeJ29W1t8RrIP9TjQlPhzwu7P9Fq3/JcCmhF8xOmcn3wfCZ/VMteF
-Vp8aTr4aO4uo0O/HYisbStUw2YDGe/RmXiNOD8CXHFOg0/c4tettRhtnl8OO3hQ4
-srY5eymBG4tnV02l3/Y2CwADBggA2i5UGKqWDJ46LviS1rNzBLLHPv7GASFicQY4
-HxMTvREdBIdb+p287azp0l0ixaLQOq6HgSMZbexRG/DdDSakxlOr+kil5NJnHmZ9
-tXzGmnLP1WoxQEc2FVdG/jKTg6gz2x9Cz1pRMxxAHN6Os+c7hxYKbD649fBbGPgZ
-PP0OCjwrHVfu3WaMaek41QxnFfk5s+YNENly+XfeX2PuYLwKwuVkYJftqohU9bRx
-0phdDgQWbIZMVzihxr5yTxfkCvmHlrLHn+lAOz3N3xh0Qh/DofWEDAee8uk+pbzC
-XSON2v4iO9lsHg+wXYLREBHxdE0EreZu2VzBFa9iN2nhtJnuTIhJBBgRAgAJBQJH
-VIayAhsMAAoJEMksX+xwFhxicoMAn01LUw+mkBfQJFsMLdCpx+OORYPOAJ9YRvfA
-o/Xn3TqMTLepQBB19Xhy6g==
-=luzT
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub C92C5FEC70161C62
-uid Herve Boutemy <[email protected]>
-
-sub 64863FF4D1BF1809
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQGiBEdUhrIRBADCU9cuKc92CWQlZxwtRuSIV/36Qmj264YD+Lix+r1Qe1PqRr1I
-/MObOo83ulorWigSkx1k81Mnr56NwmIeo2bMhjmgRgf7EG6XEbKdRKfJcJRR1lDV
-Ml4ru40W958M3PX5fsi0m0g2TuVrAKIS4vscUt4L/Cf4IT2/0OhaT6bWswCgsNws
-Qq6NtCkLkpWSBNYGT4zb6yUEALlhHMnfzPSDerKjDOaYHTz3PRc/GGUDSBTSVj6W
-hQIDrgTqrPxoB5JMnfUz8BLSayk0d6HiwspJ4Wnxe2/jdIT+6xhX9xBYXVHZVs4R
-cr8zbBNcW2kwFg5Mqy7TiAPzakzCslKAAX+cjAKSOWyRbmkEYnNgMlctdyENOR9+
-BpP+A/9anoVEfULqoETShmgWdi94gx713qymhNBpFZnPpm4j4JuxKopl/unQmw5i
-Jwtu93cg38UfaOMJjTi6tJ6F6SE8xXv43nKs3Xb+Ll1MpTgaGUXEhCOeTZl223Qe
-NBUp8kvfcys6aVX6GT93dmWxtMewlc6gc7HVQnUnyCFsVeoy/7QjSGVydmUgQm91
-dGVteSA8aGJvdXRlbXlAYXBhY2hlLm9yZz6IYAQTEQIAIAUCR1SGsgIbAwYLCQgH
-AwIEFQIIAwQWAgMBAh4BAheAAAoJEMksX+xwFhxid2sAoKppOorIM7ygdeFyhvcN
-VV0l9cRnAKCGxTdvoOnDAgZN+5lBP0q/o3PGPYkBMwQQAQoAHRYhBPp33P7y7m6y
-3r7dLAEleUZNAcBqBQJdyJjjAAoJEAEleUZNAcBqkiEIAJSzD+MACN+Dy/6l0htV
-6nP9sUTthw1Uwzxmj5vFCrBIjpq/l7ZSVfmNyyW+X/U3ZYIg8AmM1aoZ/x94pDO/
-XAvSlrw7XwAyiN+3lMg0PAIKCzjZPYszSvkdy+1yTd7ka5vp1F5AAVl1N+erIttJ
-yT/aKW708XGR5kRMBBvanXQJxTTNBrPVPBPTqM7F1cdR2sGzKcJmRudbuMJt6MXe
-SDOOjZD398ix8HIfk8CyTL38OvGaALOd2vxsyMLg6fjKmtbYNRE95fHJsmQcphco
-rLZcKg6SJlsGb8UIotMAmFWK0uP+h9oe4TGzhl0qNdsKr8EArWv+hUfRdmnw1moo
-jRe5Ag0ER1SGshAIAPzs1unq2BMWlk4yO8D5w9br9S3qtlkYRtSOWH7ilOyvdUzI
-pQZvC/qgphdUBIO8hepmLXcF4zogNGKBjlRHjSRC4SRSmTqHmaG/kdwwtOblLAZe
-8YtzYAfDLGoLOTeKvp6mUjGWhA5eSUeGQIWAmQcucQZp75kT1C+dAgzdiASsR1Tm
-lJZQSGQ7XbVR9+xsGlc17oT8bC4gDnidvVtbfEayD/U40JT4c8Luz/Rat/yXApoR
-fMTpnJ98Hwmf1TLXhVafGk6+GjuLqNDvx2IrG0rVMNmAxnv0Zl4jTg/AlxxToNP3
-OLXrbUYbZ5fDjt4UOLK2OXspgRuLZ1dNpd/2NgsAAwYIANouVBiqlgyeOi74ktaz
-cwSyxz7+xgEhYnEGOB8TE70RHQSHW/qdvO2s6dJdIsWi0Dquh4EjGW3sURvw3Q0m
-pMZTq/pIpeTSZx5mfbV8xppyz9VqMUBHNhVXRv4yk4OoM9sfQs9aUTMcQBzejrPn
-O4cWCmw+uPXwWxj4GTz9Dgo8Kx1X7t1mjGnpONUMZxX5ObPmDRDZcvl33l9j7mC8
-CsLlZGCX7aqIVPW0cdKYXQ4EFmyGTFc4oca+ck8X5Ar5h5ayx5/pQDs9zd8YdEIf
-w6H1hAwHnvLpPqW8wl0jjdr+IjvZbB4PsF2C0RAR8XRNBK3mbtlcwRWvYjdp4bSZ
-7kyISQQYEQIACQUCR1SGsgIbDAAKCRDJLF/scBYcYnKDAJ9NS1MPppAX0CRbDC3Q
-qcfjjkWDzgCfWEb3wKP15906jEy3qUAQdfV4cuo=
-=GWfv
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub C9FBAA83A8753994
-uid Tatu Saloranta (cowtowncoder) <[email protected]>
-
-sub AFF3E378166B1F0F
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFeWvEwBCAC7oSQ7XqcGDc6YL4KAGvDVZYigcJmv0y5hWT4wv9ABP4Jhzr1H
-NDmmGyWzhzTeMxwuZnc9vhxCQRwyxj3gGI5lYPEARswbi2fWk//78/3Wk+YMHJw3
-/1EO3VqvvDUt39gbaSqMCQNHctnFdb2QYZ7nRFTQeCqG/wyMdB05beqEnWEXzjeP
-FDF9y6gXkELn0lxUm2TKO8tU3h96TCuutDKJ0aE00lOeh/MbEaGHEbIU8kdfui6U
-znZ1X80EWbkCY8cKxEZHKD0aONSVHXwE6nETvFW9/9+K+sj/I7ytlyxwHsaQpi1H
-6aRGnq013VsIECrwkhmXBsLLXNjmhER+LkcDABEBAAG0NVRhdHUgU2Fsb3JhbnRh
-IChjb3d0b3duY29kZXIpIDx0YXR1LnNhbG9yYW50YUBpa2kuZmk+iQE+BBMBAgAo
-BQJXlrxMAhsDBQkHhM4ABgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRDJ+6qD
-qHU5lFtxB/0QBiKaHHdFu3GOs21+S4LZYmO0bvHASg7ueeWtoE/1cEsKqvES03Tw
-iSfMabaPt+UL4qP9w6/SUtTITAmxuc1ksyU+HwC/R1QuF+vdsguFZ0/8VdVRVY5I
-5/6Dcp7kI49RO0LxGPXCMn8s3Nj0KXiCoodMDLHwwMv5OXWrQQ4yXiQTsJudBxy5
-o2yfp0AlLm4uZdDLj7Z4u4DfyKOuKIUMsMQ2Hk12gSkDaZViIURH6MaSEdC+XbDU
-cPTq27+JSdjfYEX0908P/bH36H2kPCGVh+sXpICZ/Ce7m0OHBfE/pTTCuOlAJvcL
-Y4QbyMTlyPpZ0zFgO+jX+fj8UFi2sRhquQENBFeWvEwBCADfbjqRN1GvSf9VkjDD
-WBqX3hILiPx3DKPiSFmSsAoiLSEkP8gRDBDy6po/Oez9q+bgb9Sk+iGifJvbVNZr
-7+88LSxQECsrVL+ZgTAZ2LkqABQJ8XYh/dTO6BMJ5rSLH/YN6bO9V4NjYod67W5u
-Yox+aCp6keE7ia7eBHck2wyqxikCqvVzmAduPCkkNSRuOwLkOguduXfwb7Cg1Rna
-cMMEfDd9t+a6ytY/8JFu01G++VVxFHO3vs//RINrm0O4xKPkT1+Ocd4+h3DlhhRv
-RXvI+MKeM0ud0OpUVCBKCZqbFKTVgoRpsKC925ZRUSqbmyBcIkqyYjzD1adaZdkq
-4PLFABEBAAGJASUEGAECAA8FAleWvEwCGwwFCQeEzgAACgkQyfuqg6h1OZQ6swf/
-Vm0ndBcvdK0qCoubR/WOsynS1wdQ2rGKJC5oVsUN4YVCZhg9OMhwMSO3EOBPdxtq
-4A8bSZp/8ZWmHLohE8QHD8AgaQBtRZyNkvMRiN157XGkPEBRWdHw6XAvx/lE31W+
-19qFRnAE8BbERE3gieJcG4CKWy5CyzXnjSM+znZvDQ8J7MfG+LxKbr7zUHQH9ZWs
-k8V9D+GXDgpuyZc4ct1tNDLcn6784FubcdrD3RLMiOAYSSgKSgoELRzB8zZds+WK
-FuiAYXZSdzCbjJJ2VqnJnQtYHN7Z5r3ySqbG7w3rRen+Ett6PX9Hrvc1MTy/UUdb
-3s08C0wD0x+ZzFzqUXKTZg==
-=nsI4
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub CB43338E060CF9FA
-sub C59D5D06CF8D0E01
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-DEWnnCsLSDubW3nXYsAeK/6d
-=/Ri5
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub CC6346F2CE3872D9
-uid Jisi Liu <[email protected]>
-
-sub BE04F93C75A3B493
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFRIQyEBCADYOc8Y4bOkLGh5NFwQ1JJwGzPY/mV9kndWy2tudEs89Poo4cQD
-A/wndJqO2PrdvDvt+kxKQGra0RzUNW3Te5gaePo7+3H297BAWar8+KiX8RRu3uB1
-Tbk2b5xmrncaD5R9TtRB8uNIzA0OG7N3+2rrwzplY3HNYlz9EeWwllUO5YFkniJp
-hOBjAbTGc2RjcuhueFse68NNCUUEzS+7pGWSpkwo5CsLyfbaCJUiSNIC06ygkY6R
-XCDZUFXI7jxfcReVMK+Wpoyk/RqY++xGmCf6MWJqkcKbn9G31fy0arHWnmaMNUUi
-rwGGzEVggMH+sbXKsLvRWr44fA/cKf+EbZ29ABEBAAG0HUppc2kgTGl1IDxsaXVq
-aXNpQGdvb2dsZS5jb20+iQE4BBMBAgAiBQJUSEMhAhsDBgsJCAcDAgYVCAIJCgsE
-FgIDAQIeAQIXgAAKCRDMY0byzjhy2UUPCADOIICATGIaZb2wnFpgXIq+3zOHutZW
-M+zmXXw5YUK6s5mRZycr90neciis8g31wTFa3832VHbJHEoLni8C1hERg4rvVrqU
-Q4y7iBEoGhKn/lgBCjImRfpYlhKtd5mmEXye2iz5EQ+VRHQWxOy3cG6TesBBpD9A
-Tya9BCSaUbc7UkGTRwhqNyX5+oeGwhoUrn4bOL+JQVATEMDskgAx0h3pIWMbhmZh
-XuKRVMxVgcPRbTFUiqDMl0uNUJwuFvvEorAGGVvEDh2Bws8CaY308b2EzF1tt9I1
-oOuqQh49JScg18aJU/h8n9x2lkzJhbobdmmvICQ+FClS4CpK5X89M8dduQENBFRI
-QyEBCADsdI8kpJKcdOgZjPwpp7xnWhaxWJ4JYVCB8Omr6ToEAaw3dWqkYfmTQwlO
-i2oBRKUnxgc+VBo/+mKOz18BIQUduM6kPjp/Hbas+uF0vKjbYKY/aLASRKR7drwp
-mphuZqibQr894HsVqXHJXwBN7/PUoAfsjVhcuZDtz+A1YJi+6D4I5kB4gBdk+fjh
-mqoapUhgDQ1RZPYzjko7UH7cMkQkHBCj1HmlPKU6MlZbvQn/p5lbIL7WuTuNI3jy
-jiWp0lLkblWgTyEY7MJvFH9s2bpPWjkxcx2+lBG2HAmXiOgRWmZSrrcX9+a2/Nb1
-5+2pMg/8ZI1bSw3lju5V/ozQ9pCRABEBAAGJAR8EGAECAAkFAlRIQyECGwwACgkQ
-zGNG8s44ctkKkQf9GAw6vtfuksg9BhVP1oyAqVwEDrQ7L5Bt1SB3iZbMcs455nY3
-YFD+0N4yPIIsYg+K0JaHr3PzHBaZjGFh3pD+tV7cuMXq/HkW+82Ogvn3onHWCfiG
-Yvl+ZBLlN9C52EGbIjx07vnjJoDXPHpeUeLEaKn3R7ijMP67/mfKYKUlZ/9uMRcJ
-Jt+HJXwaSaQgyGRDT37wmUCBUE9X0XaNKXYlZA7kn7jfpDBy/IaqcNOxe32yum/c
-4MpmcKGOFdm5Tr48TgdbDu75FT2tNsb/VtD6OFFaX7GjQB1CX64SCeuT9sDmqXsf
-uup3aw/ff+A7vCNFbhwiMUCJgH0aXV+A/bgZ3w==
-=ll74
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub CE8B1D1D2530EDC5
-sub 7ECBD740FF06AEB5
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-=R7zg
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub CF9F3090CE4CB752
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBE7E4m4BCADCkqre+MJRRn+yBa8PqDHFIpfxOk8lQeueZTrU0Hw14wMkkOW6
-XFBb4hDeezStNNP6s2TS7bf5YRXZwqOwwgg33WYVVH4jPldaP1m+Z3GtYSLKEjTl
-G7/YqLcCtLxDdhLF3WpR7LUyZFQpIPEwRj12UyK8gU/Wy67GP3JBz/YhGTGfEaXE
-13VWM6FLvS6GJVouT4lFVqPTVv54+RKz0GdlgCB7Ht7kPtpMkz8ceKGU8+JcbAsL
-zkcicA97ZBzYEnlHFfoNI4M6EZumw8TXM+hvJBQ3SEWenhmUj5dwkympTahH+Dw/
-iam4sbZPiQH01GLiffeNNfTVlf0bvaczvvG5ABEBAAE=
-=YoaU
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub CFAE163B64AC9189
-uid JetBrains Compose Team <[email protected]>
-
-sub 57CE36BB68F1BC57
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mDMEYYx3eRYJKwYBBAHaRw8BAQdAV7zh1T+xL7mD2O63rTIvRfQ9kwL2Gvq/Q6PD
-9apCe2K0LkpldEJyYWlucyBDb21wb3NlIFRlYW0gPGNvbXBvc2VAamV0YnJhaW5z
-LmNvbT6ImgQTFgoAQhYhBCByOmOZvAYBVCg7N8+uFjtkrJGJBQJhjHd5AhsDBQkD
-wmcABQsJCAcCAyICAQYVCgkICwIEFgIDAQIeBwIXgAAKCRDPrhY7ZKyRiRslAQCE
-XiOkwreTSEDg7UXsRd1IruaQEUkrAFsk+1/FkqqvcwEAiAx2FgUTgDV8RoflRcaB
-kqPfkSvkvUBuJBQwqjGuhwa4OARhjHd5EgorBgEEAZdVAQUBAQdA/AOwflH/rum1
-g1gvFPBcqhvFOcN80VUb7OqoENSzUD4DAQgHiH4EGBYKACYWIQQgcjpjmbwGAVQo
-OzfPrhY7ZKyRiQUCYYx3eQIbDAUJA8JnAAAKCRDPrhY7ZKyRiSq0AQCEwGRGd5MO
-TT2kKJf9CphX0LOsqVBBSNvzoloV04wzywD+P4TmIz/CsigszDQy8yl1/rGvszo7
-gaUwnfnqN61JHgA=
-=DQGj
------END PGP PUBLIC KEY BLOCK-----
-
-
pub D041CAD2E452550F
uid Deanna <[email protected]>
@@ -12020,247 +11530,745 @@
=vnEw
-----END PGP PUBLIC KEY BLOCK-----
+pub 9DAADC1C9FCC82D0
+uid Benedikt Ritter (CODE SIGNING KEY) <[email protected]>
-pub D364ABAA39A47320
-sub 3F606403DCA455C8
+sub 923C08F9417B222D
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-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
-=5tlI
+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
+uGWBaZVODvhr9hDoUpp2+qte
+=rXX9
-----END PGP PUBLIC KEY BLOCK-----
-
-pub D4DA5EAB3CD7E958
-uid Jiaxiang Chen <[email protected]>
-
-sub D826E3935EE9DC71
+pub 379CE192D401AB61
+sub 0CFE993CDBE1D0A2
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-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
-=E4ez
+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
+N9IFsU1/E/XhP4QkRJrZI1F/
+=N8tg
-----END PGP PUBLIC KEY BLOCK-----
-
-pub D57506CD188FD842
-sub 63F72A7A8658D653
+pub 0D3B328562A119A7
+sub C45D01093DCFC371
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQENBFj2NXwBCADPJcGfWz4Zsfa/UEUF6a4aAIjqCy+rNmLf9Vs3HD6B5p1r7VkC
-e0HhxrfbkDkQu6aEmAwV6GwYiwWBf/LQYNdKm1FYZFhKLhyuTPiirFqIouEFqiK2
-HPFdil0d6Bi6HB27qe3NScpqMK21ectpQfTGlmd0HrSN55pSnb9k+Dnx5MdR+XNl
-pfA4f5jNBIrnsCvaY5jccyFfvGpzykVF0yaSikbcs9hJ3pbfddLuBJ4Tk+yePDjR
-FWJ2Rtau0Pbaz4CebAIQprLfdOuxKQ8l7jhMZpRE7+sz1mU6fvDnPyj5kvnoU4SB
-tVvsnSuILeewp99/MG/wE+B5uqxG6KNpxRgvABEBAAG5AQ0EWPY1fAEIANhZYkCh
-aM7zRmJZhzbwoHNfuKfSVYfNjCpRdu5PkutVxBsjqGWs47SjXEjhiTjAD/s3cgj8
-x/uHKmXXJoHUhnU+9RPlRiEwt6xdaEgRqMJyqrqIJ/PqmerMZsZsnAC4dFFDbR19
-lfDBNa5RjF7f2s+rHtaAPSMbn7lfeBpP7V/r4qUg9E2pRqoCCMqCtFRFlNgLwv7A
-jgMhaTaO1Am2sxfsTOVyoxCxC6kpJE8r4iRVstdfKifZrfStE7ZmtKmRjqLmblla
-GkQXWAlcayc6SLJa6bj61Ln043+qum9l5H5xUBHwfv1p/UPzNpZVGgZ/SVfV9rxL
-/DktPZ5S+HPSyBUAEQEAAYkBJQQYAQIADwUCWPY1fAIbDAUJAJ40AAAKCRDVdQbN
-GI/YQsl1CADJMZdQGxuAOmK16/0k8q7sNSbGtrdyD9n3yLsWg9cCTI9ecJdM1cXT
-RglhAfsm5sr+xJnyA6ShTn8KCxgRHPqLTIwSfmFNjePKmWUK1iBRdbNdbfHiKUKb
-Xc2CMwkwHj6hWo7rwh7WWS3gtKzldUirfIJoA13AXrtJQRq0qgV9qN5sEpVGr+fe
-5whzG9BallTirYztskrI82p3e4thRPr5XDK9r8SWJKPuhL9zEfStSMVnR0gO4n6w
-pFryXcDaWuA6/+hIzS+RwTQKpQYNbb/OKrkAUH6jDLzKtixWNwxuDJpVz5YHDJVI
-LCwzEShVwuejAYnuG+xpgw1jIxtoj/bGiQElBBgBAgAPAhsMBQJZnMEmBQkBRL+o
-AAoJENV1Bs0Yj9hCzpQIAMMZ7J4QXPur6jDgjpbWESvLbSSYGEt6uIMB8SEHBEJ1
-DdMNdRKu6AvUn7doVOhVDbzof6jGpycRFG4goL1fJM7pLljcOwJ+75FrYZCdC0sy
-JPd+QkpueUHyE+/lZpvWuu0vlgfDkfIFFhC96/h659oTt5j82l5YIXanpgQg/AiK
-l9joXXxvVt073y+ngFHpYhCkrdna6rxN4WRbVN2OlUJx8BP4tfFagYKaMSlPkA40
-03nUlwsPKQ8Bj4tASVSpCihlR5ijmxR3YxNlMET2f1ljvj8Uu3N0LrR9wVr2g7t7
-nqTzRs0OjV+r+qy7eoZ4NBugYFXpP/RMAXZJezpKfKU=
-=FXUZ
+mQINBE4rG7gBEADo5n849j3hlKrvFzt6y65grIxTlbLDXEB7+6sw0Xwuh4NrK/Zg
+0+eF0vvCCZrl3lHE2duD2ng9ZXz8EvUSNfwKMQz+cwF0klhP92u6mykKJ3/DZ4yo
+wojLPkIr5tVo4ybeVIbQ3N4+FnqzpNfs571KZHUOa2unwdgGK7OGMTxTkP8oaRwP
+H5VenaKoknbLbp2CUchQT3pkv3Yio+NIDGgZ1VmgOTqczI2KZe1viqRY32rBVKr1
+684Bgygf0ZfzMyKd1xK5UvDGhfQU+uDZrV9f81YMqJ9dZFjbZsyIhsEtIloTp0/Y
+kDtUMlkXF1c8EExpqTEUwEBwV+ow3IKVv3YDNNpZ8g8TQa7wKcpOia7UmEdXraY6
+PdP5tzClCqV0PqOxdNh+En9tw3VNKqAjQ9EE/nSbRz5d0JgdIA6SfPeXqAK5hxuT
+fdOdleywcOa1HRVN4xoEsOljfQiS1dz2xzou0mR1NpnD4PuGRdx4wwYGmkqulbbt
+1wQJRd/psyFfnpxrqk9I4frouzxMcrPUDH+T5qAVfkX3LG5XRGFkScWbZ65SXXB6
+wg6DsFNUXl1is01Wfda0TvBXdjO19RdcVSyD/DlAlXukmQb36Av3pHatR5Y8k7xN
+c1tU4G6dSfiD/JjwnCTzfqmHBnS4c2d1JKscPGRy+Y82Ghj2lPmunn6D9QARAQAB
+uQINBE4rG7gBEADdSXw7MJF5zFEN7siT74kGxyBO40gfhW2HTIbGXyUHKGpknHOH
+V3KYS0GEtvLc8QGOHv5qLfYlCejD5cYpzoDcWIUo1KZiaqG6LulcAy8sDuX3o5z0
+LpUikutXeIxGTgxdpc3SfYPhb43ir6pPI42MhgFOOAAhHLo9yE24G5FYna5S5OZx
+eOWiwelhYUxBMTIyA+vwCUii91ZSO5ByPU9d0QJBS2Y1Xwp0SDDa5z1x+SYRx1XO
+a8aD7/tb+K1G+giuedY5J2eVKvxFB0ABqdTNT1tj9bZmXqfKEjpaziXa9WVSNNU0
+De6IYZFsDJ9yC/3mYBB4rNd3iqQnlH6bTIaSWGA1I13JZQUm0dJet9IwxP7rCgM8
+lSsPXjvdTvHZItIIYQaMihUp3360G16ESiVRXIXwRyUztm9MMNhVzTkFXkJ9G5WX
++3Og8inNjzJViJGfqgZ4KNlXql9/BtqlsPcmTeMoZf2LCz86uTfUrhf18AVJJq2E
+B/R9M+TWQ7R9SEpQ49RoZUfVXb/HKVnWw9OjJyGFhc58MBGyT1VNGpvwDEzceJfG
+ri71lnyCAddNc10wNyfeF069wVoGTZyWklWgC7UB6dUn+9TYN2/ZpHtDzzdAoEOp
+pFdqib0+xfeY0mt9k0/jPvK2wqXMY3Vi2nvVDQNUEEJxMLSFBiqAA88EDwARAQAB
+iQIlBBgBAgAPBQJOKxu4AhsMBQkFJlwAAAoJEA07MoVioRmnkZsQAOG7gJyE2G7O
+6jP+O0O0HpczzcxAt6/z5lmEcdlbFkMv71385JJIKhOQ30dmfp4VfQuEMCai+XgS
+aZvLcsDs6AYqv9Rs85jUaWKIJUUiQAFlCqrUVYSP8Las5jm6XHMX+AZ6ObJmFCWw
+jLluxjA5Q8m+qPSqG/rMi4wEtTAJXVcH4nZ0W4TTUfzFPGHXnkyiqWmYYXMdAat3
+tCyHZ6DEN/CGEpLQJLM/0R2ZWTuI60KpUinlJOhs3GQvcyTwt6EfB8+KeXSc/2hr
+6KW7DlPLSYBO/6GF8VAzya6jjh1XTjnbYX78MxMNxwZyCj5lqQEWvJWwVqP03x9+
+q/invjWn1NRrOHrbFUGUxNH9UPVwwZ9/EqD0A25+T0MFTirzsyKiwvJYmuEWgvrJ
+h+L5LZUI1eETP7BLFeomnqcbZxhfEZqPZxU/sKcHBC68030DbxxySlhmlFHqS4ou
+wKSuGET1G0j2hmK1NBgkDvBtLnz314aSRLPvLIqMxgpU7O2dG0V/kHiK7atkQU+e
+GSXQpgrcNF/dGv9KdwdJMvJz7K51DCD/V/1Anrobba8ezv6IV6JGnxHAUeg/z98j
+o2b2FQQ4bwWKXQklMrz4kXmikwIH7Sjn1FjuQv2LFK/AMUodZJAC5cuxfADby2+O
+WPYQqlvqX5QcgnuZX8E1tLt1v31Ay8j+iQIlBBgBAgAPAhsMBQJTGCn3BQkKkKi7
+AAoJEA07MoVioRmnu1cP/RRb7tIFoQCzgblOZl5G6xXrkrDaUgGcvB/zpdy96vT6
+Sh4Tmdg/kl5EWuxkIk8b9CASLUebQe/DatdRvaV+IzxTJ5vz7uDdw7ieqrz5+ZeG
+yw0l9KUlP7b9kj8DRdVAJUO6Cd9/x7B9LhJpiiLm43JvmH6hmlgpqj+QpE+QInea
+7niX7J2sNd/M1cvYJTAHwbY/m8KTqNhHPwnRwWRTc42BrI8euBCdx3SZ7GZtgKzh
+6JMjIpg+XGtMqIwYdPxlqNZ3pB1oSBdJdkCKVCvd0mU2b+6gtouPfVZz8dio9IdG
+eAopk99k1XV4EvtOqSefAt0iMkjwmZgIcvy2KaLoLGYhUGn1NeoQ9eM4zCGMXL4l
+7EqFKiARlHbOuKv8eeOLL14UKVYoWqiBNo0SyU4D9l18OQ7tnPS7F0GSq5QeYfZT
+qFobrjEMVLXkVmSlfXfryFQYldsj9REmNrdOTKdxHL5aekurnWiP465SY3XgzJR1
++gXnn+j7wCkYYZNe2/OaDYX+4v0/c/AdXJmt4DsnA6279M/1El82edMeRXQi9e4d
+E4BO/OqluHpZcsAufM4bSK3OkmSxj+h976k7Xnl86ZWanhNPI8NcQUpcEDKIfye+
+1tRBjMfDhqdJ1SlwRMVxLiIcdI5cdj0qLUS8nXQLD8aSYK6jY6O/2DRtmsAmNFhE
+iQIlBBgBAgAPAhsMBQJYfp/GBQkOMEkJAAoJEA07MoVioRmnZ0YQAKxOp9KWQQJy
+9+R861eF4tWGBF+fpGAkJUiOQdFECIXnrciqUmEsYw+cn8+TIW8/1O9bbcsRfuxC
+K3/15jm1+042iSgi1UtOfXcubH1dvrWC9XyXhBKTYownWzgK2wDe4VQ7QyXlwCjK
+j9rtvw5v17AHH/uiN5K+wR9BK1bvZy0SS1XUlH1o2lDzWaaQrEP44ZCe32TNiYPe
+hmynSMHUZGDQNgL5nqtQ9V32zKT0bspvcJ4wHA7L9b8pfwDHNHg0Rt4q2aawBfFO
+EC49rkdQxDznEMk1CEqrCGaD5IbsKtnnaonmab3QCHDiiDNGjXpmxguaisJA+/2J
+pGQ89fFT9iG+wl174ygO/gZhBrPN1cWhmtMeMvlHMu6NkJKzYF1fYVR4kpWEGRcg
+zVl9leLAy/n6FgdfivRRqzSsmj/a1B95VBWE0bpbOlxxCCs2OkT4Dtor+gKploRC
+ff2Tzlq0VY4nVYFmmyG0nDSMrBsq+t6uQJEIu4hkQbZEiH2fiOSQloc8Rfj2YDHM
+yWaJBYy7Lzm6k9scT79t3iGzN5739YgsrYRstSG6TbNSbFB2lon2q45/vZfDlgM5
+FwKjBqD5GOcES8f/Q0rof01Gz4GdVk47Ofwv+WSkQa/8s5T6sNFMrJ2sNDVQrwot
+jhnjUrOIQaIMk5zmFCvYnGtY2BzqLVPWiQI8BBgBAgAmAhsMFiEEAZCCvADgMk4q
+70zwDTsyhWKhGacFAlxcD9UFCRPUjp0ACgkQDTsyhWKhGad3rxAAxd/l3iSg42JB
+aclOrrB5Yu6SjjMsZvVpCBC7NgfrWuBlPt3NxHW87J0Me1E0J+OYlnFdaGkKDMQu
+XSfFhoGHgDJ3q+UZYZeaIFb2DGVm6Q6byVL6LXo3pnbeldZt4p+6u1/HMeXKtwRe
+j86o51Aq9tmdxyFs/MHiqLBrk9a+tw24VFeT6GXRJApdsWPPFgf1yFr9chu3uCZH
+kaIlGf9fLaaeslL4++sGGaj6MKYs9VqzGTQOuWwowVBDDFnIrgwpK5v5Etss+vqc
+vdTfyF8B5kT45R0c1whGzt7yDTgFOa65vjoZbnX/4O0um+o+8GfX+uyoZWIV35EW
+qLsk35eHkt6hTu7bHGlk3yXhyFtfaHaxfBqPQFK2yjQMR4RaQht4nqzkvurxc3TT
+kfbxmsVGHXVxvKGCUFM6XdKa+qm3jAl3bWvDMXWU+SKwg32/ddUQr6WgYvSCiRMV
+inkXCvcV3LEMrUBLrS5wyyWOFS8xwQB9dqjMhxZSnfRBs2hoCK0A3DGGev0ibCgY
+vPyRKnQxuVzU/HJTwpISqHKLe4P/sIs/2vv8T1D8n+oor2hRumnf27CLC0pFGK1Q
+Qk+NXBJtX9Lsq8olj55uC5MPnxoMbHBibd8+vaF+HrjL0369SCnwNhLE2bZmtJ7u
+UGyrigQZu0gUujkogzGo8f7UOwHRBoA=
+=7aNS
-----END PGP PUBLIC KEY BLOCK-----
+pub 208B0AB1D63011C7
+uid Violeta Georgieva Georgieva (CODE SIGNING KEY) <[email protected]>
-pub D5F4C07A434AB3DA
-uid Egor Andreevici (My key) <[email protected]>
-
-sub 9D49CFE20A7A3EE7
+sub B4A1D8D630480593
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-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
-Umx6zyOUi5AfW8LWHwPYuk2dkLY=
-=KXp1
+mQINBFI6WiwBEAD+kkswnsY8eaqvYkS+ZB5MJr7juWrv9Lw9OGsIXFlTvD1XK01c
+E8k4+uA2sOtaXQ5wTMdc5N3YzAXqFxplWuafQgEvhyTTq37M5YCxvtYEZy/EHQYT
+iok5H97lMRKbhLdZB+wkdsa0P/L1FveCUiEawKY/Rrfi+UeRAneSV+m7S+RrPphZ
+M9aNSczqYKfAqlpUAlUcrF/bt59vjhepoHcE4ev6SB+PCs0vbvX4iTvvZCTk1lZ9
+InS2wdK80Jz9pRB0Uf3LEnZxt9e3RkIFdQOCcEISmNlBKQQKFG+zCpIAbVoMLKEw
+rXWl8mLzGzBbhGmLpFroem3Ln1YiAxUqnPR/MoBquYnpTINwePgwKVWyQ1TXG2MF
+Z7DPayBMN+G51rfLS/8iy35pAnNeqbWQjavdUis6/0aRMv5EYMFMAerutQ5v99bA
+rGj6OL3R6repJLOGT4YWcD/Tw+eU1lMWxbq8BbbRU9Fd0iVFhFyKB/DQSxofvTCe
+PdWXRrptrE0/SmvuoTRVPmB21WyJenKdNmVOQ6U+W1Rs+5IKAdWWrGPcUt0qTrRC
+SL8vAQ7MejYLovFtRHslJRs7T3ratpRcQUNOx1jytJhmSUJktNWZWNHqBTe/eOAU
+Yr+QAkQVQXvRVWzHkDHQRTOFmNYIDZYRkzSP19sBWRnYdCs6CbIVPgMJVwARAQAB
+tEVWaW9sZXRhIEdlb3JnaWV2YSBHZW9yZ2lldmEgKENPREUgU0lHTklORyBLRVkp
+IDx2aW9sZXRhZ2dAYXBhY2hlLm9yZz6JAjcEEwEKACEFAlI6WiwCGwMFCwkIBwMF
+FQoJCAsFFgIDAQACHgECF4AACgkQIIsKsdYwEccMXA/+KMQKWfw2T2CXLhqvQLoh
+Irj1Vi9leAttKqKp2NCHLK1jf1qKzUx5U81VvizIGUsDXGlAvnnavrj+hmQqZdsO
+CoJAo7ViIR1ZhNca1tFK4Sy03wdpNyUkvxVuC+3peXmwhjPJoqU2ONCuDl/bCczl
+QAQpgZCMO93h45U9H6JkjqK01aDorQHxvXo+Ap2IViQvDkNtJ515vG2k5K+x2XHw
+Tv19wr5N2rz407TWKzS5hh7QHRgg+PZs/zPf1YHD7Tg5K6vvmZd+5EsDrse6tZXy
+mzz2+8Yg1SNa765Aq6p1uAQf5NKeej/25TbRYT7RyIlgDXPcPrKxy0cKzpqFqCFs
+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
+BCfJ3B8rg6v0
+=3GO4
-----END PGP PUBLIC KEY BLOCK-----
+pub 1939A2520BAB1D90
+uid Daniel Dekany <[email protected]>
+uid Daniel Dekany <[email protected]>
-pub D73C68EE4152C255
-uid Eric Chang <[email protected]>
-
-sub A23FC45C6F9E2F57
+sub D068F0D7B6A63980
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-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
-zJV7rbKv80zNxWNJMOr+yshtM+Hclm3s
-=mRRB
+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
+1ejrktxPt0rVTJs=
+=Rkt1
-----END PGP PUBLIC KEY BLOCK-----
+pub 2E2010F8A7FF4A41
+sub E4D15F24364C7906
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGiBEnOgPURBADYutfvXAtNgf67BQ2gWTI6+nKfILIwMPzCbQPMd7pykzF5nPMu
+Nswt3E7efo5IP1Zsv6DRrLafAW0OJSmL/oo8/ta0AfqcxCCbJ6CUyViifRZ5T4nU
+WfuWTZiaKRQ57jtt0WnNpFNFf00gDbYJWs5b4RU5Vac/0B0WDQ0wvOJfBwCgylAw
+LrDQmwyOZcws9VbpvZvz9pMEAMRkV6DN8kvmfktpbUnHNuZJOps5botqKyffQVj/
+b2zh9mQ9yFpaSWESdFgpJNeBGtQJEDOz2G/q9ydTrYyCD8ILMKmsUlj/DAjaE7mU
+/NmSpHBUO97NJN/fdMgkkbkSlk4j64lGaVovQph9ehw3DsuSTF8IPvr/DXV9nuIc
+duxTBACUE6vsxZlzB9dXe5HjKCoPGr90kUm8uCG/CVu6fBVpZZa9B6+OM6NhEkLG
+FA/EKgKc/tvNIlPsRwX1R2RoV9/tR9N772ZjhLcEBKV2UO9mb5iAWWZaMJtQ06SI
+Ws9fyd+Zx3GGY1+iwWPUxZ2lSGLlfg3Sunl7Cni86tb0fTHTrrkCDQRJzoD1EAgA
+lYw+EWr/t9pNqJhzVpAZ9u3LMKJfrGopbO+jOW0T58mIdVF4oMF5WZ4lHPTgHrRL
+KxXNcGlzaxjxBKtkUbnjRTSGk7ExzGIcWoqq65RI8JgONif1VpBaS4Y8WwX/akQB
+nCAL+eV7UwHttVUKEmt4xUW5CNa4BgCFKtVdiomvdxnBHBCgfWNHXpNnQLWhuOGJ
+ZVyqq1ZAh0/vIxUBDSJZPxmEh5235+2CDK8Zu4FCcsi409zrLTtga+ggsN4tp22x
+vRgNs6nwARsk4paFII3OMkdMVJlGqU0oQ+H5I5PADBFSUYwpcIYne/+k19+QMR1x
+Ik+7EavzdOribLC/nwaLFwADBQf+INE8jnD6qg3g1gRN3S9MNh+PAPEsrM/7Gw0N
+CAhaf3METVwSzZfwVNiXM8DVEGjaBAPTBpuJdveHpTG43E4eibjXWTe7j5A5QSUx
+O7p3W4AXNTKldFnlKkVs+6ZKCkKeasY2/7do6Cf2Ed6lL1CDXEYcZRZ6BbkXruI/
+HqT/IP2mTw1i53S5Gxj3gaG/jOroXN5cBZnRoaPJQpuri9hdUJVqPNIDhe8dz3Zx
+kHEgVPMoanp8xti86ErSjgvsxGs6xjjuxC9CNjMjyod7d6E1NSt7gvVdksX3vok3
+QvIqQKDO6l777R9LQcxEStPz91mrBRTAyO6b7AtCk4/5S2hTdYhJBBgRAgAJBQJJ
+zoD1AhsMAAoJEC4gEPin/0pBVNMAoLT0LzbZNVmium/JNdBhDhufgi7JAJ9s7DMy
+snT2e4S6/VitgWdoI9iCfA==
+=sgte
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 438E9634A2319637
+uid Constantin Rack <[email protected]>
+
+sub 2C8E4A350000730C
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+qS9F
+=OTJj
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 6601E5C08DCCBB96
+uid Popma Remko <[email protected]>
+
+sub 0AC07D0BBD11498C
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+Ds1RyzdSprcN2g==
+=S4Fa
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 26E74B6874AEE127
+uid Sam Judd <[email protected]>
+
+sub B4E75C15C3C701AE
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFPsGJIBCADOxQoTLxpZVRIbLaRfsHa2y/TEIGvxLP7TgqTwspZYnwBd0cOW
+OHAvF8yGfdk5gvkGTlQ/xchwu2Ix05FO2c+fBoOgIG1Gn2Q+PwheZklS7S+V+GFk
+t5S3m6b54Pl2lKbcasaM99r5g2+MhxwVnG66ldLS9fdPWqWrviOC+EipHfGyuhj0
+R0E2Oh+dNHrsZR0vtoJawA8xDP5D1Ii3jEVdi71PF8OlavG7saAZXtOW1kU77oPa
+SmGFTmcFLjDP1alo95TTfBihaYiwFFnW7NQEi5Bw1u3G0+Vaoo5eJBQwYsNxLs3h
+I1d7wsqFW5LK6LSxEjfvEhJypi0XzrFkFzMvABEBAAG0H1NhbSBKdWRkIDxzYW0u
+YS5qdWRkQGdtYWlsLmNvbT6JATgEEwECACIFAlPsGJICGwMGCwkIBwMCBhUIAgkK
+CwQWAgMBAh4BAheAAAoJECbnS2h0ruEn9DUIAItn8TzZh44JQ0aRO3dgmh4kUnnJ
+cJyw+0m5m4gGyjZ3vFzbCXgzCHAz2jN3bh6crnUoheIUCn206NRz+aG0JGXAkgV7
+9R7QAKY3K8QzW0QWqHOKv1n4FbfPKhaGMnXYUcQjV9pkVgDmqV4QzjmegATVLkOE
+VVNUjWIP6wXwj0I/UW4jO608tTi9juH+XkDkpf+qqix8FUn81tw7/weWuZXFTpAe
+qAYzjtzzDse8uI1tZWxc8H6AvKCuigoTsD6xkfuPfL4a3JepER0R3WlGhW9hDLBc
+/VXGULLl612XfeG+xREy/pjILzp4ajTC9FdAmdWF2wQWhM9ZXt38FSBHg4+5AQ0E
+U+wYkgEIALu35o9Q309zBBZD6WLTMvFt/X+N6S/cUrNLMv3YvR/Bo1mtDxsYwmzo
+dWOHo6TNthWm1FIkDhHUMB58q9oHzL2/JIL2k/jCULOhj+YAT2N5fQwvZ2WBtWtf
+suFYFO5y7UKKUqo+2Dhnk8YuorPbKjVXELrHFIq0IRlKEKnDfNrkxwHBpfeU4QaC
+UcCW+OjRZFsgZVVc8ZjhvvKd9/vX4Jt/c4/O52Ym+YEYtZaiawcNYFAdMhaiwSF+
+dof+v2e6BIYOJrBifZuILqA87XsHQyBCABO1zhspt5X2QGGqkjVHiFJnYiTwqYX7
+2n1OpoMOklJZ+ShbbGpCst81i7lyz28AEQEAAYkBHwQYAQIACQUCU+wYkgIbDAAK
+CRAm50todK7hJ8OJCACtdgGnPNmYILYJ3jyXh+WPDvxr3y3yMKmC0pRhgs/WxGK6
+cmRV/ej8OB5aIWCaoWeJ03twgqiaSMbn+7ONkr1DbPLzqQGY+QJBJEvLE9m9YcAd
+BMHCT0fn9Op0AYQhoInOPcKLD6NFO+c91uLBOg0q316Wlpl0p3ULH526a2YVPeKw
+mjCVlhrQSoHgxagNrol4gC8bfpypsjTwCccjesiYMOPPU6eyHelFAAGEuVDmkh9g
+Gb9wOqgum0vJEummqOStTopEGr63PoWVMXSQbkrTrayCcxjSiKRfK10myhIGFU2n
+pCL9QbIT7Aw2vZ5VjIm6fWIOPJJz4dsRuYL9Ar8c
+=es9L
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 82B5574242C20D6F
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGNBFC1VWUBDADZwqBEEmSjwy2JADG0qCpvVQzC5KszL0CjzqTLPMBmLKNuc/36
+26MU4yI8Y+pcCTnC3LN9hrI0hxiP4zFFFyLYKkUWCZRAwj4OQlnyTDKa9frKBMed
+PJtihlQAKeCtMh9AOXNa+hZoAAEG/dfIOJhLyZB7JEuuwkil65R4yLrdnbbhPYMi
+1k0GJsaxG3IhkR/XQMO6m1KnThxyk2GPQNLFHUVSN+Gqz9m6u7oUxhhFjwUj3DZb
+8oGcQ08JR7IGdB8qV+XC997MUGjbRRu05hfWJecR0Z8xkprsdKSbFjuw24lZtsfJ
+w8advblczq//NvaUj2g/U/McoTPKoWXDFSPtw0UydazGtBUEM7SFer29upgyxA24
+oHoT4qUj3+lelhBbsf79YuI2M+q6OfeWXfOEO6xkcw54SmcvfYYatGg9UBiZq9PK
+oUfyn4IOKhxPY82N35tDfoeBXDAwr8r00NkFJl2vHv8QkIKQFF4HWLJw/aElij5t
+T34qVUE12H0+oikAEQEAAQ==
+=Uua5
+-----END PGP PUBLIC KEY BLOCK-----
pub D7C92B70FA1C814D
uid Matt Sicker (Apache Software Foundation) <[email protected]>
@@ -12680,210 +12688,535 @@
=K7VW
-----END PGP PUBLIC KEY BLOCK-----
-
-pub D9C565AA72BA2FDD
-uid grpc-java-team-sonatype <[email protected]>
-
-sub 9121AD263441EEDD
+pub 44CE7BF2825EA2CD
+sub E01173141D06B1BF
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-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
-=t7l/
+mQENBEzQQMUBCACbwbw7tuTWgwPsDAdQTWGO355jP75oBLHwGgEwV+OCKtxkNXNw
+wrJqXst83vmD1dEJyHflQww+d+Olj90IefQGfR+K7O005C2nky7eNGIomxaP52Y/
+90+tmw8qtsI4nsPWPuVj4WdFvlFgUwIZ0SmX4CauVzg0Ris8f0taxg7PH9zEvICs
+G/WAXdB9em08WDD6ruhMAvDF4W8Yy7mpGmdWiFD+B9OC006tv+GzYAvUHRFeCnnT
+SoKRiBeLejW+t4kpdMnEfC9ILAYBEEjNYvBIyPdPKBwNfy0yjRebsUf0eNmjGTpk
+VPlfofjVaUaOZytUOQvntYpocMX+377DGQIdABEBAAG5AQ0ETNBAxQEIANp35mwg
+ILWWQI36F2SyWFTFF8zupjzqlcF4Vx1Mjs2rQYErv1qs09TJfO+uxPRAva0fKik9
+PFmZ0vLM7UAveZgaknzjTQveOaAJuT5OjudoyptG81ilHO66+e9RnuyV6gSINnt6
+wnq4n8KRPoEmI/nxMhvmBCPw+YmxG3ZcU5Zko4GtjLA4J01nag7jY+LH08qFfPcK
+sADmx7EtCRuBcXgQ202kF3o7BjULcLV3R8vni3jp5nljH0vJG5USSY2ZR1bFiLtT
+CMO8cm+jIuay25iWil5DaejASIXzbzTtSYg9Skxet29AWjlrt1+zKZsMSLPbKJ6q
+hdW5XNU4Qo9ycx0AEQEAAYkBHwQYAQIACQUCTNBAxQIbDAAKCRBEznvygl6izZwg
+B/4gOqGHc0Cc165PZggwbf1nyJZ+af0QiKWasgoUzo4a7OSIISmBYPGnW/VP4EMs
+aNEhnqWK3Tu+cuidW6z7MWHRsqLcvYUKeiZE2IhnMP85ad2S14UOHE8cbkLwfIGe
++rIu+zYpzyc5bcRYqeLvd5Dk1H/eW0/hsadW9qpSWQRGxWPEsMqaAhiret0ntlGH
+2igswZ7SYNYLNtK78wppFqqFHfFvnVu1XNmiTDDuk2IokPIGRjeWO59eSR/kotg0
+zox4S+CJbRdQdPq2ofDNqKCIEtg6y4yM+dc7c7n1Txk53fMBMzXfGnLGfbTFLo1h
+pYdC5sepAZA1XWLRgZ3+5+vD
+=HSWu
-----END PGP PUBLIC KEY BLOCK-----
+pub 14A84C976D265B25
+uid Rafi Kamal <[email protected]>
-pub DDDAFA7674E54418
+sub 0190A8A50D88C2C9
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+sPa3uBnylgYyUnzuNZB3kLz3zAM04/jc8Vk=
+=/GAm
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub D57506CD188FD842
+sub 63F72A7A8658D653
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFj2NXwBCADPJcGfWz4Zsfa/UEUF6a4aAIjqCy+rNmLf9Vs3HD6B5p1r7VkC
+e0HhxrfbkDkQu6aEmAwV6GwYiwWBf/LQYNdKm1FYZFhKLhyuTPiirFqIouEFqiK2
+HPFdil0d6Bi6HB27qe3NScpqMK21ectpQfTGlmd0HrSN55pSnb9k+Dnx5MdR+XNl
+pfA4f5jNBIrnsCvaY5jccyFfvGpzykVF0yaSikbcs9hJ3pbfddLuBJ4Tk+yePDjR
+FWJ2Rtau0Pbaz4CebAIQprLfdOuxKQ8l7jhMZpRE7+sz1mU6fvDnPyj5kvnoU4SB
+tVvsnSuILeewp99/MG/wE+B5uqxG6KNpxRgvABEBAAG5AQ0EWPY1fAEIANhZYkCh
+aM7zRmJZhzbwoHNfuKfSVYfNjCpRdu5PkutVxBsjqGWs47SjXEjhiTjAD/s3cgj8
+x/uHKmXXJoHUhnU+9RPlRiEwt6xdaEgRqMJyqrqIJ/PqmerMZsZsnAC4dFFDbR19
+lfDBNa5RjF7f2s+rHtaAPSMbn7lfeBpP7V/r4qUg9E2pRqoCCMqCtFRFlNgLwv7A
+jgMhaTaO1Am2sxfsTOVyoxCxC6kpJE8r4iRVstdfKifZrfStE7ZmtKmRjqLmblla
+GkQXWAlcayc6SLJa6bj61Ln043+qum9l5H5xUBHwfv1p/UPzNpZVGgZ/SVfV9rxL
+/DktPZ5S+HPSyBUAEQEAAYkBJQQYAQIADwUCWPY1fAIbDAUJAJ40AAAKCRDVdQbN
+GI/YQsl1CADJMZdQGxuAOmK16/0k8q7sNSbGtrdyD9n3yLsWg9cCTI9ecJdM1cXT
+RglhAfsm5sr+xJnyA6ShTn8KCxgRHPqLTIwSfmFNjePKmWUK1iBRdbNdbfHiKUKb
+Xc2CMwkwHj6hWo7rwh7WWS3gtKzldUirfIJoA13AXrtJQRq0qgV9qN5sEpVGr+fe
+5whzG9BallTirYztskrI82p3e4thRPr5XDK9r8SWJKPuhL9zEfStSMVnR0gO4n6w
+pFryXcDaWuA6/+hIzS+RwTQKpQYNbb/OKrkAUH6jDLzKtixWNwxuDJpVz5YHDJVI
+LCwzEShVwuejAYnuG+xpgw1jIxtoj/bGiQElBBgBAgAPAhsMBQJZnMEmBQkBRL+o
+AAoJENV1Bs0Yj9hCzpQIAMMZ7J4QXPur6jDgjpbWESvLbSSYGEt6uIMB8SEHBEJ1
+DdMNdRKu6AvUn7doVOhVDbzof6jGpycRFG4goL1fJM7pLljcOwJ+75FrYZCdC0sy
+JPd+QkpueUHyE+/lZpvWuu0vlgfDkfIFFhC96/h659oTt5j82l5YIXanpgQg/AiK
+l9joXXxvVt073y+ngFHpYhCkrdna6rxN4WRbVN2OlUJx8BP4tfFagYKaMSlPkA40
+03nUlwsPKQ8Bj4tASVSpCihlR5ijmxR3YxNlMET2f1ljvj8Uu3N0LrR9wVr2g7t7
+nqTzRs0OjV+r+qy7eoZ4NBugYFXpP/RMAXZJezpKfKU=
+=FXUZ
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 85911F425EC61B51
+uid Marc Philipp <[email protected]>
+uid Marc Philipp <[email protected]>
+uid Marc Philipp <[email protected]>
+uid Open Source Development <[email protected]>
+
+sub 8B2A34A7D4A9B8B3
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+bpJ8mdzS2PJko7mm
+=NMA1
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 991EFB94DB91127D
+uid Antoine Mottier <[email protected]>
+
+sub C327DD2B96A50E1C
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+zXFYXic=
+=osYp
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub A41F13C999945293
+uid Thomas Neidhart <[email protected]>
+uid Thomas Neidhart (CODE SIGNING KEY) <[email protected]>
+
+sub 8183E80D264EE073
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+25lhPkZ/FaSYF1lb13TNIRT1q1My
+=pAbP
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 22E44AC0622B91C3
uid Cedric Beust <[email protected]>
-sub 50C6CC55C6F24FB1
+sub BFE9E301CD277BAF
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQENBF8tnmMBCADROe7j1ZvgiMgfsQKqCSuSqgMkfMT2DEXwZKdHqkj0gfx8MPQg
-OP1pmMgpIwIXKr5kZ9KMGiGULNnS+WU2SNqjyKeq3MlnSYW5Di52MoAD7W4cHmry
-8ekaasF/x0AS5Q3M/6X/EBOD8YLWaFkk+h5x8D4IOSqiOiWH8olGjY4ZmGblaldX
-PLr7BWSrPKQ1QDsoICn583Mnjz3YLlc4p5IKnY2wss1zm7/gQk6KkdL5bRuASxLh
-to2adZ1LEE8MQfHweauHCK915RmMg7W3KW66/EsuCyEwZKBwq6rIpAciym2FngJt
-CPnY0o4IMFSasV7d1xSH5N4jeHL3Hh2Yd9tHABEBAAG0H0NlZHJpYyBCZXVzdCA8
-Y2VkcmljQGJldXN0LmNvbT6JAU4EEwEIADgWIQR81StagpUTfIj7V0jd2vp2dOVE
-GAUCXy2eYwIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRDd2vp2dOVEGLQr
-CACZTTneMoaUR4pQHa/rQfGnYcYznSL32JUP98bgstwN+g5BoivHkrN/5IinELly
-n2nxrjrPucN2arjOvObiGk7UhvUY8h1kqWKWqc5Gsc/iXwnrIx9bwzwdbYaiKqMT
-E6RJ+naIN80rNRQnOMtBRTNmRWYZ9UMk2W1DEKZeCaKUJpO2lLpMW6R+Sta/pkq9
-L36F5G9qWBrVhUS4U/rEE27G7xiDZ7fCnjYt6lfvc6mKQ72BIUGtjVDRwBAiG98X
-Zn5+TqLaMkC8NotYInuV1/CwvfE9SuYH8dn3YJqAkkn57L74y8I0V54AyMXaLNp5
-G62uRD43Xw6rLakCxGNUafcouQENBF8tnmMBCADWQEHet457l0v27b6EVxjNZMGl
-NI939o3k4NdrCBglIojODXA9jp8VkisL7+klrpOP1vmoVd80Lk0fGSOdZDcIMbzW
-WChRMVMkY0vgeDqOgKw0j6e+isqN/vNipj2nh8cYm4q+LB6GVE0pfFCsrM8RFFew
-RO+esEuw0R1qXhNYLIwpRV3Ov4ZxDp1yM7KAHSBc86HJHy1t4LqLofjA+RBP8f/6
-2MmSRKLbDwruLz/02p0fR+lp2DiJ/IN40lGq1fSxRjXMTQnI+bIdsd7TlY0AbT6R
-NklBL3i492hxU188dva1PZM0sxAMZRXSt6cFCvz/jDvlf6jB6DmN18E2ad55ABEB
-AAGJATYEGAEIACAWIQR81StagpUTfIj7V0jd2vp2dOVEGAUCXy2eYwIbDAAKCRDd
-2vp2dOVEGAwbB/sFvYn1o5Q0r+ngdMJLCjQYT8a6uy8SH8N3k8RsTJ+ad0TdfOoG
-wvxl/SFB1MEjEVpXgbojjv01gVDola2ObIYSX+GWcvlJdfXKz8oZ5f8/KdRrAc3h
-z7gf8huUVeriwHoEEA7xi14kJZpwCPh8PiMMl5KQFWuG4D1eQnwOm54cIw/9hYB3
-R7oVI+2THlm3CAlFalsXzZ1N/l/JQG6LfPkKmrubr++FveXx6izjZssdFiaLg4dk
-AQdAwgpmFmCQHb63BCKzqPwDxpazpk1wP6Y5ornLu/ISaOo9VC9ylX+vUK93eq4K
-AFuUjn/Jk55tpdUEH8mW12W6Ukjt9FxVb8ZX
-=Vb7/
+mQENBFpqN94BCACaAb8Afmng1QPu5k5uzLoA1FJnF6Wf31ZU1FzDxHFHLNUYSWN2
+Bg6k95QH5ruZ+Z/QOJSoIB+b3htDklyxd8m+G2KsMIqnQs0BaTN18hb3PFyMIknM
+YWkkTPF3nVV9APk73AebTAcd2V1GB7xOP+L3T7tyUcB9/7bDeM3od6qPksdVGNMA
+0S32U8SNhe4jw8uXKdFL6PSxgyg9yeu0V7DyR92V9jF+ZicZWxaLeKpf/Vn3MBX8
+JdePR9SCJc8CNj0n/tsvg/aSmGZ3OMZTUYYvrtfgpXUw0WVkyma+T0ANcdDN91uZ
+P8lV3o+Ic8f15xwsTePDhMhmtOapIz/85ukFABEBAAG0H0NlZHJpYyBCZXVzdCA8
+Y2VkcmljQGJldXN0LmNvbT6JAU4EEwEIADgWIQTHC4RPAC8h9tK5yHUi5ErAYiuR
+wwUCWmo33gIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRAi5ErAYiuRw5Md
+B/9ajI8dvk0oUaenxcPCchWQ6pwA2B5w9yQVWQBoJbxMI+pvEqpS6ur7PI+bJ0or
+rCyNLiNj/okFuU6yeh9g8eeKIR3984HtBAkGo59TtH9kTg3HDZF2ys5j+tdtcb3r
+KrGafc41llryb4XTGiLjcCS4n6q1EmZIJjCwvt1sIO1fo3cBim/1kjhjMgXSpiYz
+yB+ve1NaG+f//nfallAnryxFHVfk2/N373cNZTD9bV2FRZs9SSO2mO9BoyG8deSF
+x89lwLxK7MeoSH6pAioMMRGoZhNz2Thb9voUjrqS3P3+auwPt//JbhmCR3Zg+upu
+n6Aw5q67aj4V959Qra3ZpD/TuQENBFpqN94BCADAfXydE1VYais6o/4JpVQwk9JL
+3r2hkgwfN68B2rRvw9ofXZoqaBCFgbw+Nvz15GLmONoiDvP4rb1TsaT2Ti/hTUb3
+ov2W1RJ6OFRmiSkOuOjZHlVslYF2fPlZEXWdJ9PWvoKM/3taaICXy/AVSm1NBera
+1l2MsJ1ePr6dpMMDBjUU15rzWm3WOqwBNE34whhOjvU9vDl8u4h1xV96E5B47ZbV
+B1pR6y3vSYQgwj6BYkp3Uz2Mg3GQ/nBFoNuwV/F7LiUb5W68wOe8Q98NuREh1ico
+/OM+iudjP2LO0vz2sGe6X5UZGwCfbJnlq/fqoPhiyW6HPb1+JHU08kKeY5BJABEB
+AAGJATYEGAEIACAWIQTHC4RPAC8h9tK5yHUi5ErAYiuRwwUCWmo33gIbDAAKCRAi
+5ErAYiuRw+XKB/0ToXO2daY6/ZlkfK69O8jRBzbhn90/2dePM/qLy5Fe3UaG2sge
+uFYbTMGbRPvCpn9E5bceczdhkJKqEj5dPHVhUU6+jeyH/DdDgrcP12SQR2vHg9hR
+e0pzVouiMDX4QnUbW09CwpmhymlIp3pXb5jNa4iNxjYIBmuHDEmMP+uW5Ue+e2lg
+IAFWRFovZ9C1DCg0YYyGktc47cakq3ENKNU2LFvRcbgoyfjM0EprSUColUUNN3yy
+UNc+I+bvGL5swhKqdnRHagbg7kelsn/05oDFGPQHi0/VOlWU7wBh+vUw6lb3Zi7C
+obUInUhW3rPu5LubTOtT+oIH7+RSUIEJO1hE
+=j2aw
-----END PGP PUBLIC KEY BLOCK-----
-
-pub DEA3D207428EF16D
-uid Dexmaker Team <[email protected]>
-
-sub E8D0C72FC5A02B28
+pub 55C7E5E701832382
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-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
-=Uwhf
+mI0EVdDLQQEEAJMtYCaTA56YsP5RzQzPvqVTaR2nZ27qRk36blHB9WmXK+NHpGeH
+PHgq59mLPVueo2/M5k/fFrCe36jHePP31gYpFtueeYDfsofHwod0WhsHyC7JfG8d
+jEnSczTCmOHRZ3ed9ef6SeWUozYCQAX/tAbpoCthe0lTDYhFhkzVCe/FABEBAAE=
+=45ZY
-----END PGP PUBLIC KEY BLOCK-----
-
-pub DEE12B9896F97E34
-sub 9A716F957BC42546
+pub 10066A9707090CF9
+sub 2B9F5DBAEAB53FE8
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQENBFAxQKwBCADJGPv6pmFEq0SDwAKESEgCdnXycbR0bNXpNa/3VGboNto1xKgd
-AQ/sI5x+CmN0hpUjklEwff6QIt3MlofEMkAzSfRmTobhJTK9W7r4+p5DuhJpi5Wz
-ITdbNCMT3Cvp13rRE+dx9qY+WFQmTYPf3gq+C6T8Q1i35ePNlCTN2RayaFxxR77D
-W93zKZDdd7I1qH0Vx7GGcSwBgBlEB8jmhNAkz/zAhv53S6px3ZttqYYmuwRtg6Fi
-i/u9VoDR/c9tyUq8L6oAUtg0mo4CP/tfUF/uZnibshEsLzbRP961VQXduhn8HcRp
-k6QPTj37B1vsNWJ9U7XXJ6pYnkizQo7sl5XxABEBAAG5AQ0EUDFArAEIALyNR+z1
-eBBF4S+dOEWKXz2ANmsp6RRhvR09QeQwNycVdbdEXpOiSZUCAkw/EhuJWmHBngat
-0KBO+7CIHyQqwHnqyatizzKXi1OuaEhMzPsQMwPRfYyWHgN0aklc5oOzB2RbSJN4
-et/oVvfAplVSjgR0v+56+qXw9TFlp4kxqFeJLycZ+5ImKQ+XclsBokKuE7cjeF+g
-O5oY/CFHdkxD8d+cLF8FSNUFMypuDQ4IH9zPYGkUJqsb2t67iMyxi14RqyN2YNqK
-JcwxTL42VBlUFlTBoF2Y3w0LNll6pR2WSNvpcj+5/uBjtY1qAj5e7yVts+d1YZsX
-7D76AV742RQ31kkAEQEAAYkCRAQYAQIADwUCUDFArAIbLgUJB4YfgAEpCRDe4SuY
-lvl+NMBdIAQZAQIABgUCUDFArAAKCRCacW+Ve8QlRhFDB/9xE/cXf5fVaLa598xL
-muXiD9U1B04dPdz445/chdDS9iGWBB+5QVvAqv2Jt0hyPN0+n9Mk/4lLStEEL8TP
-NLdTBP1JRvVWC1c+G3kTJq05Abj8CGFFm1UZhFRwCTJ+vrv8fSb15s+YYxBLIUdl
-tKld6OupTHm8A4XJQOhYxd5PHs72bJ3bXs4GmPLKD/RpYmXYJ9EZHQHKnrhZKJ8R
-JKTM6sxBrgdVeI1K0ekA0o5HAVpNEXgY1gG8Pa14jqK0iwlcI02ntqeJkobvv1wN
-vh+nJT2wM5QyLH737kdPrUdi63PfCYLOEHYhI6sFkzI/DAtI/C3wmHtTuRam3aLs
-Rnb7GNQH/i07ndoI4trmUor3X1JBbcjw2BVS+idCtML3jhKtziwK2/kz0rJqBQKa
-Z/zxgEfwkRPqhXLaBW8a1G/d1mGphazHqSaDqylz07XqR31ZtGCc6256anaVbWaW
-9HXUsU5ADNrAK9PdD0EibGB8YumuSTtApICUqN5SVz+h3Mi1MXVsmbiVSAZPzLTD
-0YRwzPJ3jiXIrKDUmZMM7oWwGx6nzW++tW8aKyLKm7x1/y8g+XHvySQiVOKAvvxj
-yPStkEW38Rls5nucpyLzLjoA5vlyIcOkeKCy2jlUmM56YrAIWNn/eCRFPHMOY1DO
-B1nUXMr+2W21xZO+/sWrEEysY0mdGU0=
-=uzFx
+mQENBFGKp5ABCADTyMhDq+7Kcv2wXOpOmZgp++JNO1erNUjVqFX7n9bT77DciEML
+LNxWVF1tkNqgkn0ughZTXK5EGdjUfZaJaDDfG4BIsox/ng4nDvIp4CtXqHbWqrlc
+SPsMl82uABh7ZJgsZM4Z7c8KirxYL42MiWu6hhRqfJZigWUd+ceKEDuFcNHcEA6h
+98LWFCZ7KHjKhZpUbMBurd5f+N2mn06YnVZrHVzX+q6REWGToF3p+mrBwstrGaiU
+j78gMgZnI2tiJ99HqmocjLXbwXxdvFmLkniBHAQ91D9fHfYL3odTEkjZ/Wi7DSZt
+PAbEhbBIKpFKnbazyMB8ACeF+m7jQ/Nq1+g7ABEBAAG5AQ0EUYqnkAEIAOMb65Q/
+m/7+A8XBVNXgoyGDksgTDSIfvePi4saGdSJOcQWc2HbEHFhqcOqr50h0aOEBN+7W
+B7X8ZMqqeCub1BlXLAs9gWhw5QK4mAKCtaARpmWj4sr22JscpMi4uutgcsfakRae
+Tmd1J7efjcDNL0/EsQKQSGht1AakJN8zfyb6IBuuAqj3xegwFCu3MRanRyY8DP4C
+YXfIyLBPLWfDVBViK0HOjEMEO7tdvsZ8h6ptLNqAYQQYcHFi75lKa626RVeEbxK3
+dptWfA7vQ59PlnsMhUZkiDDPzhnIatpfdBgA8EpBJ2Lrq7hE0nZI4/0rn/wxIPT9
+Ibl9JWeSfoT7Vc8AEQEAAYkBJQQYAQIADwUCUYqnkAIbDAUJBaOagAAKCRAQBmqX
+BwkM+aaFB/9TyOSAJtb7qonJ8Q5Un4JLIhfTIaBj3cMHzP0ZbotpskDqnvRhUe9f
+OM0KG+OibqaW8hKT3ZQVVIJeSVUCDYyrWX93KPV/tiL5F+5WWN+/L6Uvp6598oiA
+ZvYBNNA5Gzn8kh4b5d68Qyr9W/2TAWm+jVYywlguNHsysLLTvPVG5OGK48/dYSeO
+2PyCy7hpxV0z+xDinDDiVjwXc+vHoTg8ZDILQG83ZsICO7dO5FACCpFuKu2mjDvo
+bcV4ajxKHNvnnNwFUxuGNogQOiMaeH62T/WBCdeyE8X0A+UsH6WVXmXkCSDxRD96
+UdK1vJJR/sRkoSFvf8E1KmFZR351/wZQiQElBBgBAgAPAhsMBQJX8oreBQkZM+ZJ
+AAoJEBAGapcHCQz5ax8IAIMnwmPs5nvuo6A8mSEmKXzW2M9K4CimmR2HhLtFoo6n
+HRcrL05I/XUq4YxqQLMmZeQ+N3lk5RVfZwJDIY3NzR/R0dGiRP4z6F1sz7qRPYxL
+faFA8anPzrfW8tNtD9QeXhG9k2H4WVYdPwQe7zKmyf42XrJSX8bpgxAoRdGR6atr
+VZFf4Dwgua+SdIrSpeiqXCqPVSh6xoQ6svNXwnee94zY8/R8I+6gqI7E0XaZY8ub
+q4Ep950wDEkOIBB3HsTgUauXd9vdkFMnO20JWZRujDcE6U4GJsG6OsgllB2e0m9V
+OL8rBTxpelg6gJCVVXLOLUbuZ9UUebjIiAABCA6V/9A=
+=HrWq
-----END PGP PUBLIC KEY BLOCK-----
+pub 8D7F1BEC1E2ECAE7
+uid Tatu Saloranta (cowtowncoder) <[email protected]>
+uid Tatu Saloranta <[email protected]>
-pub E0130A3ED5A2079E
-sub 0AE7BBD7FEE66E0C
+sub E98008460EB9BB34
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQENBFlMSXMBCADcgN0/57D/gU5cDobPiRuDT6qAxb/NWhQiqwAocKd274r4gPJm
-RbffUEZEgKhjH6l0CQfilC4R4x2QtU9sNC9kB/D6zumoS1uI0Hmx1pC4UseUy55r
-20WDxujUQ7OcJbpe2cDcQVKmMok2top7ZJqt4KVosQEeT9jjsgBBbEtg4cWb5ddR
-5rf+aJw0v/6dMLef1r9YAo0ZtLc+g2dyacqw73tcWEd3oCH++SgE26NntN+GibZu
-VXSE5u6xI4KwfT2vUT3jt5Fb29myX4sxsfB7n/xageuJYy5ms1ABS+WDO5ssEZC4
-eQEVL7eyIb9YhNAW/WtjeAuOfOKNonoqKFGXABEBAAG5AQ0EWUxJcwEIAMgrP3U+
-7YCibxSQKOZrp63RaSUkv7mCvQ3Lx4P4ZD/sDEsLOiKkAc+ZU7ETTIQkEpHaibvC
-ZNrA+R0pfAj0LYBLstEIkUxtAaVM4DBQGN13Zdup46fI8rPZEyZVb2XpZ/qS4RYi
-StFyJzUdazBJs/IB7CT0xp4DUFUOrsykVy0aWzWt4z0QBe1x3AmpAO/DdrDN5gvt
-mWzWbV3f783PuK3g41ju7F9XX5nuuatNSNHOHt65XL4vmhmSfXuP6UFjK6MKzq9z
-pbZD4ipUPoKEId5ONDSucX4C8OydpC8+rFWJCDDDvocox3/l6TzihQXf8MDDcB0u
-1TgDPz4M/S2vBh8AEQEAAYkBHwQYAQgACQUCWUxJcwIbDAAKCRDgEwo+1aIHntk2
-B/42pBknUQB2YjkPryJ1B1ArcxaLO7gVo/lgT/rLGL7BuTYsFIl9kJUD156EfkmS
-AkfsxPzwUNh/GyfVQt09F6wheprx1fLNJCFIYA9ZA0WVZGSwbE3NdiuwEaJ3/HZ7
-7IteQh5LKllqFuSlZ3u0xdtGJjnAUU9wHxWH+0W3RPm62piSJcWUw7CSqEyuX+8Z
-+eq4HY0v74znfy6GyCiil7S1T9fdan22hP3xiJHgVKtyFmhhrz6YxcZLa0fYl+R3
-mCQvt2FuiaLL3d/uH0z6EzWs+XZNbjRBTGI9VmO7siIy6rjatdult3Sx1quBCixC
-4Ms2AWEA7bMqvUmCoB2M/0x8
-=6Sqy
+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
+Jqg9YirnHcrlYF0r
+=gukc
-----END PGP PUBLIC KEY BLOCK-----
-
pub E0CB7823CFD00FBF
uid Jake Wharton <[email protected]>
@@ -12920,177 +13253,6 @@
=bCXo
-----END PGP PUBLIC KEY BLOCK-----
-
-pub E16AB52D79FD224F
-sub 5A34A5E06B936F93
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFF/4bYBCADTeOLZiVGNbjlPrwG7UcMl+yXmEqpf9dB1A9cuicH3PWXj0WOb
-LSzHjzoRvRekEqSUmgoveey1lPuA2qjOUkXY6Kiyx+oLiG0/ObJHUQW2O+tjSQ0R
-ZXKd4ftaw65SLbwYO2JHzj5fLC9j2mZQiRjGs1bWM58c/dOKp1XaOc1/ffcl3L3q
-Up64jWH9r3yhPemh5SHo47UxNvItdaJJYnt20azpZj9oq1ebUuQFMaQDc/RTALhf
-Xb4BWO+z2PCmChz60i/Ko2ZKPJV2TqPqWO+aklgxTTwZZ0IvgFm/5n3Dtn5p5iGf
-qwKkHPJIDWc8cWYtxC608LFdqiAlYmp/oPi5ABEBAAG5AQ0EUX/htgEIALToF36j
-45OitNd4k17BSZJKnuS3uIL3tTw0fRqLv0/3EBaj4zD5Qc5YTKFgM66Bb5ybI63c
-wYhfSBHP2ZRS7oNdDbPd/30jDKNvmcDjIhGLT7bZJwC9SJVifHuvtzr6wBR8xoIt
-yYva5D3ax8ZvnzqIbMPeHou+0ZnRYSPjy2c2TxAJTjDOG461h9mVXDdK74wL8kQs
-IxqqYRIeEdmrXMrd/B8IPwuIv8w7LwzadNgRnXaJ5Q5bnMvvhVLnWKRt5aiQVBxc
-67FTujjqFF4Y/1UJb311K+1LSqNrTT7As8nhf2Gu/Gb47kw1bb7wBdKv2Swx5mYq
-iW5+ARQU7jCiUVkAEQEAAYkBHwQYAQIACQUCUX/htgIbDAAKCRDharUtef0iT2Sy
-CADAznSkG/8EdIU5UQhp/lY9h3WLzYI7aARw0IA6O4ijGLwcytO7TaWjEzUCMZdw
-01vAjVH1xNn9QvTgQV+2GyqyBNsjmgGt5/tK/+JtMgXUwr8+KsBf3908rOqAAZ3Y
-GyM9N8sRsyfPB/PHfv289sL2IKPxiFTGI0NGS3qOAKQ5TZvV7OPsP5+yHfeJG/Xh
-CW8p+nkMGpH4rE8Z6NKgLe/WC6J36aQ4kBfYneueH90Dc400rfGyL+0Gn1Rzuj2K
-FuUFK6q/GBlFaNo0azCqtdpcO6C3GpJYtISxpQ1Rp9kSEzSCL3tOli8Xs6gsruc+
-vCSIy8lzRw19ZO9G7qhjcHLc
-=vO0K
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub E16AB52D79FD224F
-uid Google Api Client Libraries (Releases) <[email protected]>
-
-sub 5A34A5E06B936F93
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFF/4bYBCADTeOLZiVGNbjlPrwG7UcMl+yXmEqpf9dB1A9cuicH3PWXj0WOb
-LSzHjzoRvRekEqSUmgoveey1lPuA2qjOUkXY6Kiyx+oLiG0/ObJHUQW2O+tjSQ0R
-ZXKd4ftaw65SLbwYO2JHzj5fLC9j2mZQiRjGs1bWM58c/dOKp1XaOc1/ffcl3L3q
-Up64jWH9r3yhPemh5SHo47UxNvItdaJJYnt20azpZj9oq1ebUuQFMaQDc/RTALhf
-Xb4BWO+z2PCmChz60i/Ko2ZKPJV2TqPqWO+aklgxTTwZZ0IvgFm/5n3Dtn5p5iGf
-qwKkHPJIDWc8cWYtxC608LFdqiAlYmp/oPi5ABEBAAG0T0dvb2dsZSBBcGkgQ2xp
-ZW50IExpYnJhcmllcyAoUmVsZWFzZXMpIDxnb29nbGUtYXBpLWNsaWVudC1saWJy
-YXJpZXNAZ29vZ2xlLmNvbT6JATgEEwECACIFAlF/4bYCGwMGCwkIBwMCBhUIAgkK
-CwQWAgMBAh4BAheAAAoJEOFqtS15/SJP6NYIAMbwdE5S9M/5tIhLPg2arbvnxfh2
-i1e2aKE6PcRlBGeNq8YzWQStIewRhoDbY4MY3dG0nX9wgXU6XFJNxjyjE5Gqpyrc
-xEhs6r+HfxlGwB/OCaDMGR89lcWn1xF7uju3Qsdkb6o2JuCSAqOh4M1zIqADSMMq
-OjuSJ13GddcUFQ/MEvouE7Leesls9AM724BNZfnyJjIfJqfk38rXCxKpMbxCJ2v2
-louDMu0LClA1efdvDBPOrc8+A74dsVh7cQqMoe5lCqrcoC5apMqlJ71UV7SIBNBr
-7+AD6p0ZdGY8C/pTCl+NGe/Skjdqk7uEbmyePpm4BaJTmbwIgiZdGxthUgO5AQ0E
-UX/htgEIALToF36j45OitNd4k17BSZJKnuS3uIL3tTw0fRqLv0/3EBaj4zD5Qc5Y
-TKFgM66Bb5ybI63cwYhfSBHP2ZRS7oNdDbPd/30jDKNvmcDjIhGLT7bZJwC9SJVi
-fHuvtzr6wBR8xoItyYva5D3ax8ZvnzqIbMPeHou+0ZnRYSPjy2c2TxAJTjDOG461
-h9mVXDdK74wL8kQsIxqqYRIeEdmrXMrd/B8IPwuIv8w7LwzadNgRnXaJ5Q5bnMvv
-hVLnWKRt5aiQVBxc67FTujjqFF4Y/1UJb311K+1LSqNrTT7As8nhf2Gu/Gb47kw1
-bb7wBdKv2Swx5mYqiW5+ARQU7jCiUVkAEQEAAYkBHwQYAQIACQUCUX/htgIbDAAK
-CRDharUtef0iT2SyCADAznSkG/8EdIU5UQhp/lY9h3WLzYI7aARw0IA6O4ijGLwc
-ytO7TaWjEzUCMZdw01vAjVH1xNn9QvTgQV+2GyqyBNsjmgGt5/tK/+JtMgXUwr8+
-KsBf3908rOqAAZ3YGyM9N8sRsyfPB/PHfv289sL2IKPxiFTGI0NGS3qOAKQ5TZvV
-7OPsP5+yHfeJG/XhCW8p+nkMGpH4rE8Z6NKgLe/WC6J36aQ4kBfYneueH90Dc400
-rfGyL+0Gn1Rzuj2KFuUFK6q/GBlFaNo0azCqtdpcO6C3GpJYtISxpQ1Rp9kSEzSC
-L3tOli8Xs6gsruc+vCSIy8lzRw19ZO9G7qhjcHLc
-=JOMJ
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub E3822B59020A349D
-sub 9351716690874F25
-sub 60EB70DDAAC2EC21
-sub 3D5839A2262CBBFB
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-bMW74dKTLoW6+aNn4F9nqCJ88A==
-=2g4Z
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub E93671C7272B7B3F
-uid Rolf Lear (JDOM) (Used to sign JDOM Packages) <[email protected]>
-
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFCPD00BCAC4tY8wMQTsCKyII/mMkUDAkXA2cLM47fY1Wn+iohtgtalUdA0v
-AhGvTdFU6/St35rOKNoyLC7Sy30FBYpAEfMB/x9j/CaQtdtGhaQU0hCvtWGhhS3J
-BJb3BIzhKuP2mx+6tgSPtP/meiF/K1GV8x4s+4JyrVxSFtqz+yp5szFNbIXA46cg
-UWOkzPhwA567Jf/8dUWysXb3lp59DG9anp2BQENwh/EmUhuhlPoM3PeUIPcZAiyD
-SMJCR/KooLzE78lAOK14oD8eV0qg3tT0R5RlsNKfFRRoo2bwwPhz0SUVqJlt7ehd
-By6ztFKej4M4ZKonnWUiVJhKEGm3dVoEAJTZABEBAAG0PVJvbGYgTGVhciAoSkRP
-TSkgKFVzZWQgdG8gc2lnbiBKRE9NIFBhY2thZ2VzKSA8amRvbUB0dWlzLm5ldD6J
-ATgEEwECACIFAlCPD00CGw8GCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEOk2
-cccnK3s/HJMIALDETleTycLBl02uRg9ZRwPNWANajpfeJK9yY/SgpVfVn0ExXtY3
-/1Sgc0kZn66c1ohjv3DhLJYTL0GgSfb6FmAkvXMTDfFcm3hMMQKBPTUxRKw+gmgX
-ITrrZbXZcEprlF8GWlAcpv/9X+m5X+u24C0nR8tOtwZkwQa9oUKyUajYrt5KUJUN
-JoVpd8ZDWspXw7HkdQaC+tMjU1i8rypptfpnSvHFXSgH49pe/EAT1C88mx74eGMR
-XGJKL4VdzvNi+m8ECrM1GE9+EHBBLExL7NEd17N75ZYQq5HTQYKEpWZRCewOFJS6
-+QWMp+oawQ7VUApo9bhGSH1E7X0IcVsqVr8=
-=bCVv
------END PGP PUBLIC KEY BLOCK-----
-
-
pub EB380DC13C39F675
uid Mark Vedder <[email protected]>
@@ -13172,6 +13334,659 @@
=gTWy
-----END PGP PUBLIC KEY BLOCK-----
+pub 0374CF2E8DD1BDFD
+uid Sonatype, Inc. (Sonatype release key) <[email protected]>
+
+sub F2E4DE8FA750E060
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+pA==
+=OkOT
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub B5A9E81B565E89E0
+sub 28FA4026A9B24A91
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+3JnT33a2taNG0TUPdkSq3adt
+=QSEW
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 083891AD4774845A
+uid Eclipse Project for JAXB <[email protected]>
+
+sub 8118B3BCDB1A5000
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+XCfM
+=930f
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub AE7AF7AE095EB290
+uid David Saff <[email protected]>
+
+sub C707929E5065E0BC
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=Exzw
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub C29B11246382A4D7
+uid charleskorn's Travis CI builds <[email protected]>
+
+sub 97149CA7141687A7
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQINBFwVgzkBEADF3gGO9iBXW9g7+yRjwTKuadaSW/32gDyREjKNSa7NA0HSCtnU
+dKapw6AaCFpznhfjPQL+bZX/YJUdrIXrSJ9iL//2Ay/JET7UhYBsHxaMm8VURpIK
+XFoCXmlHNTedlkFYFqEAGYxyyGYkI2Yvq9U461OXXDBOwp55uhCsoZQfdWvmdSWj
+WcHEPDd7mPuhm+5JMUJ61cLKfiQ/IXQ5x912CCUdCPLBdk4KyADXa0d2ADEdHJ/Q
+yu52S6MrZRSs3RGWng36gaEvP7+b9TYArFLh13em7FHV3y+bKhcwcyUcSH3J0jg1
+23gBNhh+W54KiWHmfDwrt3bkqe/YOTQ61/B6dcQF0LkIpKnLrhvwPXUgpb9te4YC
+XtSVABnqv6scz3SjQbF2zgBXnKNqPiIDJs2SgavkaPVl3L6urYubwHiIL3O8lbZR
+sMDeAYIgU2utkSEpox6I1W/cyyvuJ1HohQwaxkk7yIIe/1AzG1cKXNmZY4q4zcW0
+beJhZHKLJFiN2VGTNppRy1VlhNO1kjbx2xfn2g8PoF4DdUJCyeZBdtW5q4z8Pad6
+5AYV2z1Xc2t3CG4Z95D3/5owGxxxuTym9MOFi5H1pOVPJ+IFtSN1u3DkgO0xHI64
+9e4Y5q17GAvPTq8fCOscan9RIcfuw+ojND4U4uGXfyMakCK7zcmaRjvrxwARAQAB
+tDdjaGFybGVza29ybidzIFRyYXZpcyBDSSBidWlsZHMgPHRyYXZpc0BjaGFybGVz
+a29ybi5jb20+iQJOBBMBCAA4FiEEfLVIrP49R+kq+lZtwpsRJGOCpNcFAlwVgzkC
+GwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQwpsRJGOCpNdnqw/+Mw8FY2gy
+BrZWVMg//SgdF+MS8+3KnIxQOLPyXhXf2I7qUbR4p3kaW08fClm6pIl68pIv36Y+
+i0fIBdeNHXukFDU+JAYQx/4GAZlFryFbCJVCo5vhMZokf31VAn+uxCrqtIwEA9Yk
+lu1LHEWYFEu04UqJamSoPUWLan7m1b3LBNKPDzb3i50/h4gQvkNDXOSakcZZJ1MI
+yOdqMLa8FnU64pt3LX5ldw4HsgI07dBanUrHLGx3ixh7/0+6Rcl/FN/FnjTaaYZN
+h8VGBmBt/APHfh3C4iYSYPh1reQdLd/1KgVJZq9uButSYfsfiBHfJKaTv/dkIEj/
+nSAFuGQkjcGd82lwgIgUsQ7OsgAnyf/soS9sk/SLbTdZ1qYlU1kxlrRFLxE5us/W
+5WAkJnJQi4xB2G9wZLoz+yz9oKyvd5P5UvOU7CgDjeWl7LMz67hf8z7I9VGsMjXk
+x1qXJ+e8ya0sDTdJk/WClOrQt7gPIPuajbret9zDwkM2j5AmJF914z++RCLfZSud
+5fOeTNy5gIAk3YE7qAt9Y/L4OPQ93hd1mu5l79X+V5LYZ19GqrdtucPCKRqaTiB7
+ADwTappPJ9LBTI4mMvpxsZM1ev/AjQ2Ye18eF9JnYhFa3sBWxMIp174RjiG+l/ML
+OqwfxxcQM7fgIjjW+ZvBUlgQes4bCazaGqy5Ag0EXBWDOQEQALoj6Y/BAhWa23iQ
+n1/mccxlD6ZQbCF7T06KE/zLk9b/yTw8gm9ZE4qjYXq8p9vY4Pn/HAx27+cOl3Rd
+mCHIJsIQBAxREF4cH7cK6isSUqsOScWEyBdnYVBv7qRRo2t38sTOnmcHPPByn42p
+nIli0kuF8W2NF01LUyQ+zbohOWkrq1JHy/W4oLPFhJ0+/9WfDc7L4Kqpxjgu/xX2
+5hJ7uoN9hZNFon83efHyS3Hda+2p5Viy0Ep8s7UP8bZ2s7ljxv1AfPlZ7H4KUwa+
+i8g3jaL2K7jVdm18jl082jOnef/8BA9Mpc/sgdyM2TFAj2PYxEOAm5RglG86IrAf
+iqrbhp46a3I09rsk5tBjt+SELzM3vzm0wNJUQ8kxiK/7OWdLYabhy/MMH6YXDSUy
+5zQDM+GLBbH3LJ3vyWwXY3pLUQExKIqa7frmE2Ln63+ozEzvzDdmOuvTA2636MLY
+aOzDGwO5YtMAv4D4ltrKz0yjlZTng9Mr6HJftTJNs7MJ5zoxM8Qu1AFZQXvJxKpt
+Yq1fcUxv+oE+GoVLpGrEqSu2Sh4QKotSroGvKRFuhHWJmjk57nJ6khiGXCLS2IuW
+VHjRyNdu1K1DOByaIOsLFDG2A3U3hoj7TOazNkI5MlCOvvESlpYhdoUjUvu/4/Ov
+/QM+vZILIBL0amDrXoSHMme/5TlhABEBAAGJAjYEGAEIACAWIQR8tUis/j1H6Sr6
+Vm3CmxEkY4Kk1wUCXBWDOQIbDAAKCRDCmxEkY4Kk1yMqEAC4KCviUxmQWceARaxK
+ue9yq5My+vyhi9X4Uu1eCKCx8rIrnkGeqfdbqccm20puPEnwRDYLGGa8oGcVSapa
+qf8i+DPo1EsP1qspD6dpbiPClORG7dOOrv5gazlSU14VQep8B8DJiwusexKK/J2L
+a1lTNMSaSgPsLrpNfVld7u5s4qeW4KL7sSZoqR6z3sdV9uiBB/WzzqZFhaEao9Ms
+S5eqn1K3pHL9a9WQeL+mGOi39DzSY5t/eYUXOqg1sRxdpAucA9Qqh/i4jod89ji4
+UKJcQAx6Yj9i0adrS3htFFP8Cfq8REx3K3tu2pQOCvR/rc29YnrdM//zaW6K0Y8L
+raOObNXEAuITinR0Ow1FIolJmYmp5IwtStM1aL4JP1nnE6DU0buJxiYut6HT0Q0U
+yo7XWrFvWBHERhQC36PzHO7HSzZL4W2mTOLIjeZLF0Yhm/y9mnEv/ZsUX7XEqG46
+7rJht0AAI+THyWLN9SHI8algq2pGB/RS95jb0JnOxxbQjKnTGJzRosG5kzcQ7pPf
+FGuQ2wozUbd8qEDFoxM2WQdI28o4hdOqA4tMzqQKtLRsfrq8i2xafiI/R5jUX6Fn
+5TyvFLTPaMmD7Jew37k0FiIA40owmU7jMBJfgR0GcUg/Zu9xpkRU/pZDoZuy0YPr
+WLi/z9M5/VqJKMD6Dc6RCIwKYA==
+=SsPP
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub C92C5FEC70161C62
+uid Herve Boutemy <[email protected]>
+
+sub 64863FF4D1BF1809
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=GWfv
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub EEF9ECC7D5D90518
+uid Daniel Santiago Rivera <[email protected]>
+
+sub AE7B5A78012824FE
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=3gTW
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 3A1959EEF8726006
+uid Eclipse Project for JAF <[email protected]>
+
+sub D908A43FB7EC07AC
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+9Q==
+=PprS
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 7C7D8456294423BA
+uid Henri Tremblay <[email protected]>
+
+sub 9842FE565AA0601E
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGiBEvsZw4RBADH20nX+H1xvMBYmXRj1Aae4dRr6Y6qI7QRWHO6Z7/dxr9bk/NN
+Yjq5KsVOQxZzloVdtqx75rznT7fZq98g7Nq9IeEtB6k4tnh6XQLhljJMk0a3mzdt
+q3VzdxeVbwCaPJ0zixv8XPTAH6MpRJUvP9XjzxwaYHrjwcQ1LslW4TrIzwCgi5rf
+jChLCyKcaL05gqUjl4lmefED/iqOwYZw5pJ8+X+OHUViiOB43wsJt1brAhPj4KgB
+ODStcE6WlHFKi7YzcYNLzYMebSGYn6bj65b3qNf6rybWD1hGUFK4122Q7+HCH9Ic
+J+rr8HwjGFo/yxI0/mkyaF0BthXYPy4WtdsdTM2kgx8Zr3Q2rSt1jBPuV3q8d27z
+FZMiA/9cWPkRx0RfAJmBPKmKkbBkEtBbNau3G7MY1OEAkEkRnzmnyyjr5IP84A7K
+RdjTCvkbiQrOQH00Ki4sHIg+9Xv1gDg1XLkFDzRARKA1TxjL0OeS4RWF3iia7Swk
+MOnTdhR50pjb18W8kB4mEMZY7duP4nwDfQwHMwbFZGHrjImaurQpSGVucmkgVHJl
+bWJsYXkgPGhlbnJpLnRyZW1ibGF5QGdtYWlsLmNvbT6IYAQTEQIAIAUCS+xnDgIb
+AwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEHx9hFYpRCO6PVEAn2zcXoOXcW0I
+7Ht0qnUs4ZMM84ahAKCAKHGR83czneSiWoCsXKJQo9ZQ3LkCDQRL7GcQEAgAthrb
+FDDbIGq97dbX1ZEwNGpjILdeumxZzaCc5PgldHGA86TL2V9iPpONJtv7/Csr1c/r
+vH0IA/BFu+0Kde9UP+z9JycmfJpIsd2Qtxfhn9R4+Td0VtN9NNkpt1+JcThbzyQq
+4UU82uBKwSG/wzubOI4Fn+7ypIuNgDkqK0STIL3ucKF/RV77PsOBeLHkCGKIVhUU
+fY1D51BWZKKB1efaVK7PLdnsi64lAhbaexA43dwUUtVwQOvDzJVtkycV2IMwXwyH
+onlK+4vbcwIH2BAU46LIZy+VFaI+lNNmR9+xeWH49oJYnMWIXif4RzvO1ag2KKwl
+G2sacuVTtpWVqKayBwADBQf7BGl4POKtluAbX3a/KGnX1YyibPT2e4pdOxqbKTwu
+Rc7ILIK/LVcejVuLd+eOF1QmjToI7Y3qjlzvtaxSemfkxbIQpdus0SyHEEAGH/qj
+NuTs8ZwEl9tPPrKaJHbJ9kQrlDPwkufA0NDAXTE76UhcHPY0DeykAKEw2ravEqI7
+Y0nXR2WSmRLFChmQ+aNTm/9UGI/IoRdS/dgo1eaLD/7RLFeL5tGDe+2nj+B6j+52
+nZEmaRCWWU7O9jYL1cQu5WTurtneCLtIqehLsjuVz9ihBysYuUcTOV/6W0AIclQo
+MEiFR9Kyv0owDk6LtX2DgibJuAvvLlnajsiGm5nyVh3G1IhJBBgRAgAJBQJL7GcQ
+AhsMAAoJEHx9hFYpRCO6iXUAnRcLw17lBhe/WcKFRkzETSxaJcjIAJ4/P1NNOn/e
+ScLdx27sje7q3sBENw==
+=TjvQ
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub F42E87F9665015C9
+uid Jonathan Hedley <[email protected]>
+
+sub 6064B04A9DC688E0
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGiBEtsF2oRBACcai1CJgjBfgteTh61OuTg4dxFwvLSxXy8uM1ouJw5sMx+OKR9
+Uq6pAZ1+NAUckUrha9J6qhQ+WQtaO5PI1Cz2f9rY+FBRx3O+jeTaCgGxM8mGUM5e
+9lFqWQOAuCIWB1XPzoy5iTRDquD2q9NrgldpcwLX3EVtloIPKF7QLq72cwCgrb5X
+R25dB8PUdZKUt2TtJbjB+SMD/1UzAPirgX0/RpL9wUR1i14yIrTfpFP/yM9PE4ij
+qcZ1yafVdw64E1k5W4k+Pyl4D8DvSJvbJHvYjg8/G9V66WzaKcv+987fetUuePvY
+/rwxBPztqq8y6+hjBc8QVhZGWmAoGGEFO6MIGsSyN5ohqPMpNXkczIo+NMvDxGzz
+ld5ZA/9awGTsigBdpBK2F6GOmbvBv+Xebu9rbaJvBvP+npNx01s/f5sHPCxmBTFk
+m1vtaMdZ29RovrWPSZRj8WWes0bcisw80250r1CBlYzGzqEVZ7b0Hh2RfkfaxbYh
+wikyfTfA2iX8TUGBgirsZbyegjUadElhwFNDASnvLTEuQKeVLLQlSm9uYXRoYW4g
+SGVkbGV5IDxqb25hdGhhbkBoZWRsZXkubmV0Poh3BBMRAgAgBQJLbBdqAhsDBgsJ
+CAcDAgQVAggDBBYCAwECHgECF4AAIQkQ9C6H+WZQFckWIQTzGEvNVfTQFuMNTJv0
+Lof5ZlAVyUaVAJ98o4QsLXrRWAe4qp2AePIJa5pRhgCdGrNdOEgEImKoSwS00vWE
+RiojY0W5Ag0ES2wXahAIANLGdCWb1qCiBm/qOjDsCOqd7jG/olgcHWH6IdkT51GX
+QcBoSY6d9gok7dmN6mBHKguTbxeRVncdZuSjkHtTvkBaKjypwtWz4/bmToy1ape8
+ebUsAnjyGjDQfnzMRIeYWMC1rQc/J63Qj4MJvpwMHnKBPGH66Zq12ZP2C2pOeBTn
+hMC2Gj/BOLthR4hKjflpijIyEcC81aWAK1kQm0y4UkiskQcu1MRKL1B/ZiGuGLlO
+D29keuC8KKTBwgZuaMNFPJAsPL6VuNBqwXP9nmiHlwl9lye+xPbPWT4FujKCeiHN
+cVer6CySiBFfLeOHXijUsA31TWR8cnpmimvPxoKY1OcAAwUH/1My+ZV0Zsk3Sakb
+xyH1Fd4OAN1++3d7zq6Gm/CisODBcti4k4qDe27SisRPeyY6dtWGRXeyqZn7tov5
+K/UFSaPg0sXtqdsXEKM8kvpWsjyvIf+tS4cofL481eQFFgOWbqfj+yYf1kZYfRsb
+NJNL4pmDBSiJsN5ma+BAPFAo9nvOVyBzRwXdAdVSLpKuDo1OEIUa7rTXmyMtxmd+
+cpXGl0+b9fEav4kSQLiRaAs11GhPdP1ff9qG/ANQmBChi6HLzkIAbI+/toD+Vjj/
+lsSOE1jxDUSjFXIVQRPM1fu2GYmoTwsDkK/U0FjGlCCcWfOcq+zvA4STgV9wexBy
+H6aAA12IYAQYEQIACQUCS2wXagIbDAAhCRD0Lof5ZlAVyRYhBPMYS81V9NAW4w1M
+m/Quh/lmUBXJfs8AnAyiCC2xgVDR0RmOe5pmecSjFmwrAJ0W5jNfBpStUykXDnKq
+hD1krrLqx4hgBBgRAgAJBQJLbBdqAhsMACEJEPQuh/lmUBXJFiEE8xhLzVX00Bbj
+DUyb9C6H+WZQFcl+zwCfc7b8hD9OHMusz/ZR7dKl3a7nA34AoIdTiFJNKRczWAbd
+z17znsg+RUG5
+=8yMs
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub BF984B4145EA13F7
+sub 84761D363E7B0FC4
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBF7rgogBCADU9OwoEFdIgN5U0JU5pI7s3T1T1LeDMzAQ8l2Hq4jFrhnrjcEA
+ieDSut1YIv5NTBoZv4CrklaKvvQNUXPvKrFImA4OKhBodKV3wsq2efCATDGa1JAw
+VEJx6nJxxMsCLCJvmZsD+YE8/DIBI6jjnjh8jagZVkxkSRPvUIxlZCxytIyqXI0t
+O8pLh8+8p5e0PgGb9OoszxEQZdBavsixdpe+0feU9cz0l0jJYx3W4ErZeCGGwNat
+UUiW0ctb3iz7BkNhhoV9zepxkSLzCf5zBeyA+WfD34028pAfPpyAfDYXF4x55sVP
+/3MdWGB6eU6KzPG2/QV/6or5E+C1yCMrnMy1ABEBAAG5AQ0EXuuCiAEIAMExiS4A
+u6FPSlMyjCaT8EfxP05ey79rYSSZd/ixmqyVzJkXYbf/SJCBeX9+NtWU3LEuL0L9
+WXgAA9Ys18NaJzBMC4kiQJfyXK6Kak7sUfZWWvx3Ad3It35X4svJNuR9GoqgsOvC
+D1SPgK7MfTcAF8e4j2UUqgRnjM5S6dRa6AH2s3bCj8GE+YSH9Ag2osNcKBgosNiv
+w04tYh+sjx8W5ehKaOEMrBDO8OMYVeiIEOvBIjsCZpJgAnOBPh/7zIQ72tPa9Ou3
+nAWBwdiPBgqv5FTIVmHWMfAJKRRCW4ri2hN6toHGrjJMgobtwW56vTibb82EGLdY
+3BF41DQT2MEiM1UAEQEAAYkBPAQYAQgAJhYhBB0Ki153xninxyREWr+YS0FF6hP3
+BQJe64KIAhsMBQkDwmcAAAoJEL+YS0FF6hP3VWoH/1Uhih+Q/iJIddvBatWdzpgO
+e03ppK9pCWZ2KepukILbR8bpX3cqUiTbFD3W+ybrrY0k4Oe9hXcm3re0N2GAfEWf
+tRknxXH0TMeyWoBlldfSM5DjrljM88XAIkk/T2wcARv1PC59IIZGKOpixItF5Pps
+YII4YzlripU98sXBTSlJLU1/UZaT7XNOZ9O1/PVxADpVIeH6MVdWh4W7AV/dYZ5j
+d31NbXDTtyDJBUYoiq2hu10+RNoqq28WmJQGD8aqIuKOpeBA8EirLcRoDGELSqYT
+lQyC8nl8P5PgkEZ5CHcGymZlpzihR3ECrPJTk39Sb7D3SxCW4WrChV3kVfmLgvc=
+=WqT9
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub E93671C7272B7B3F
+uid Rolf Lear (JDOM) (Used to sign JDOM Packages) <[email protected]>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFCPD00BCAC4tY8wMQTsCKyII/mMkUDAkXA2cLM47fY1Wn+iohtgtalUdA0v
+AhGvTdFU6/St35rOKNoyLC7Sy30FBYpAEfMB/x9j/CaQtdtGhaQU0hCvtWGhhS3J
+BJb3BIzhKuP2mx+6tgSPtP/meiF/K1GV8x4s+4JyrVxSFtqz+yp5szFNbIXA46cg
+UWOkzPhwA567Jf/8dUWysXb3lp59DG9anp2BQENwh/EmUhuhlPoM3PeUIPcZAiyD
+SMJCR/KooLzE78lAOK14oD8eV0qg3tT0R5RlsNKfFRRoo2bwwPhz0SUVqJlt7ehd
+By6ztFKej4M4ZKonnWUiVJhKEGm3dVoEAJTZABEBAAG0PVJvbGYgTGVhciAoSkRP
+TSkgKFVzZWQgdG8gc2lnbiBKRE9NIFBhY2thZ2VzKSA8amRvbUB0dWlzLm5ldD6J
+ATgEEwECACIFAlCPD00CGw8GCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEOk2
+cccnK3s/HJMIALDETleTycLBl02uRg9ZRwPNWANajpfeJK9yY/SgpVfVn0ExXtY3
+/1Sgc0kZn66c1ohjv3DhLJYTL0GgSfb6FmAkvXMTDfFcm3hMMQKBPTUxRKw+gmgX
+ITrrZbXZcEprlF8GWlAcpv/9X+m5X+u24C0nR8tOtwZkwQa9oUKyUajYrt5KUJUN
+JoVpd8ZDWspXw7HkdQaC+tMjU1i8rypptfpnSvHFXSgH49pe/EAT1C88mx74eGMR
+XGJKL4VdzvNi+m8ECrM1GE9+EHBBLExL7NEd17N75ZYQq5HTQYKEpWZRCewOFJS6
++QWMp+oawQ7VUApo9bhGSH1E7X0IcVsqVr8=
+=bCVv
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 34918B7D3969D2F5
+uid Brad Corso <[email protected]>
+
+sub 5CE9BCD2ED28F793
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+QuOcn0ypycYY9I1Xl3Z/9D1jxT0Q
+=pU+S
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 056ACA74D46000BF
+uid Norman Maurer <[email protected]>
+
+sub DECB4AA7ECD68C0E
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGiBEoo3BYRBACXE2oGRA58Ml6s+kvfk6n/AJ+5OFeRT/Xelco/cpdxOVF5LkRk
+yd+vR2+F9ldBlH7CSTCmrdZIN3M3zrcWndrk/OQkCxNWVnE/a1li7L3G9nYr011k
+MwMM8MLkdf1Wr+FBunf1qpxPYuydfjWGFL749hYr4uQ8RbFDRQcmWLYCRwCgl+ur
+E28AmiICPcje59DNKHZZxd8D/Rk1LcZojARyMPjEsPOVSOh6kOaJQ/FOKN0j97k7
+ZqA+4C+OnIONSy22uMia9xO5g8oMLyHaRiA4S7JSIypYfX7JMCmwQCSLM/oQ5zct
+tsY7tGzCRBA7UVmW8uCDDZGmmzYIGQ7h1vcabgOFQ8wsteMHW3F0tU1K6oQut71x
+5KowA/9LeDjhl3tKizJn5hKf+NR8kTMcFFVMk8tf9/ZdqCG2gVTuB0EFimH47j1+
+YFWftvKg2IwF0qRnYuhpXn3kAtkzSwDr2T4r5CpDjttq+oBwhJ+N6lcPRoU26ijr
+nQ61Ek0jFFE5vfU7UODSLYXYbjf8McM6BtksY1SWfFBU5cVzgrQhTm9ybWFuIE1h
+dXJlciA8bm9ybWFuQGFwYWNoZS5vcmc+iGAEExECACAFAkoo3BYCGwMGCwkIBwMC
+BBUCCAMEFgIDAQIeAQIXgAAKCRAFasp01GAAvwh2AJ9HdFLGMuAGkk/wSv6dr6gM
+Xw32iACaA/Ez8jdn6/8kp/RpqMtUnl9c/Pq5AQ0ESijcFhAEAJIGBbVgN1O73XVP
+oGlZdqPd9n5QOjIy9cF6h5GBXEUDy3T+iVh1ak6Oqn1g3Wd0v2XgQ40gKWe/8O3M
+FhWkJbLENKhGyc9dLIpXDt9WIKfV3PNbblI/FmEYFqeJDNZUfaf/F3L3Lw0Z2YE1
+f0Kr3J64xuxJACUjAzXkssEqVUQ7AAMGA/9Tfa8rJD06apF3u22qd7DNao6UlUeo
+RIdluCpHfZQ10nEDTnFz5wNzHBlZDDoaketUZ5IY72hRKMcLMWRI5MaktQb9XvFp
+zhiGplsFGnzCBI99AqTsxy3m45AdVxbcVy2Lfeh9gzS+ZnL6m49Xf7mQuqQJatIX
+mWyplftyWc3XDYhJBBgRAgAJBQJKKNwWAhsMAAoJEAVqynTUYAC/qnQAoI/8QMuu
+PGrvivKDTCk2tA60w51gAJ9brzNybLCs1HYoPtjY97nOEy0tmw==
+=2BgH
+-----END PGP PUBLIC KEY BLOCK-----
pub EB9D04A9A679FE18
uid Uber Technologies Inc. (Uber Technologies Inc.) <[email protected]>
@@ -13243,38 +14058,32 @@
=fPJO
-----END PGP PUBLIC KEY BLOCK-----
-
-pub ECDFEA3CB4493B94
-sub 3BD211F725778C36
+pub BEABCFBEE059E4E5
+sub 6579F3D193AD0019
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQGiBERFeVERBACjfASThn15ynIICr0Gu8quGCl2rSSRar8TsjrbiwYB2MTW35Rg
-NjLU6MN5Nq4d5G8D5aMeoyGODstIHH8zA52sDGeHOMKfDaAraL+lGzElbpmaqP2s
-P+y+J4gDMlxSBoXY5HjfZUTogP4olWYJS0tWTFc6EiXcSH1zCo1rdo1TTwCg9/U5
-q+Us2XbjevKghRbRabl//R0EAIcimKSJf1w/3yVwrYeUh2Op0fM23y+JUAPcG8SD
-lRnHRnIrf2e0pAkQQ32us1zRaHbuHzcJc0lP1eyoQh0KoRZIUq/7mj9q6Dp3H63b
-VNAxU7O4DyPMMmlgTiZCjwN2qBclZ9zegGx51v2UR4b+qKhZZCHOSjdj0Xhq6P1L
-O7G9A/wItw9LtJhVBqXVxL/pNVNA++NneLMdl5OpAAqJtI44oflJpo/FJlnDFuHP
-ueLYZVWWGoOlPW0odKxI3fvMO0ZfTtm4VO0mjEN2kZ/OR8L3c2Tdx9AHS5lVqIh/
-T4fRqXl/zjbdE+ZqYqhEYelZat3V4EhBAmj2jFQiHsSbfMiSerkCDQRERXljEAgA
-3nHJ+5JvtwQIFzw95ZTPdB/4+Do6JzhZssC1L6ZtgjDh3zdEDbloXsyroawwcY6U
-+unak24iTXlbcI/IgZnYIzZcdHM70hi9KtfhSAMRDI+UaFsxLhvx8hcTUV0fzx+B
-8q6nvdI/8fnjJ6Cr0EaCmWOqEjERs9NL7va7Y33JirQQ3pwe6VpzaejE+OzpqQMA
-vfhLw9ucq+l2KGTTk/LccQU3sUIF0osAakPXbTPDHXFmqWkIp0GQIExCorW7FBbq
-+4Edd0n4H54z0kP/BLh3M6HgHTUQurV5yw+/enSv7B0wJPiULiUCWN1hb/Vyds9W
-Yo4NPL/MIlxH/ZVTUids0wADBQf/WpR4MjKrxrf6G20J+TXBnRV7cZPdx4FsUE8s
-CQFay4ZzXP24tkmWXQ1b8AcmUr6opnuMio6QXV1lFBIU2rrdoJ3uQihrc21cTE5/
-FzYkFrWH3ESlOuYUaqefWJp3B5i8lNoUdShAK4iwjxsM6J1Mnl/TT5V2nwvB38Co
-AcuKQTmUGNOAnECAPGmTy5NQ2YLZzRMHn9HzyWpNKLAEkp0qN9EVZK5TBGSnFP0f
-BfYPWHg+kaLVzpT3KhkzSGjE4cyWoyuIYwSb6/3FLnaCCalYaC8k2mEhw9oFaJc8
-yyIasKaoAnbPWdMXQR32ZSTUwWBd7GyA9U+wLaNamJramQEBFYhJBBgRAgAJBQJE
-RXljAhsMAAoJEOzf6jy0STuUac8AoK8Mz00VwJP+L1IEB+9rlPaWwPAkAKD1W5wH
-sZzmsaj6pFkpumu/OmsStg==
-=rjff
+mQENBFOv78cBCACj4w72ksYDdLAY3GzwpRa1fo6S4aF7r96PitlETY83ct7AVF7j
+XaBGk5ylNAZXan3vlsSAKtxlI7skZOE5iKjqDo7SUfohs1WXdmL765mUNsSmkbG+
+WMOwDneg7Z6+licSC780OUFbifiPOKpgzGuaj91vrNigOmtyA+cbIHckhy+t3/PQ
+w4fO0S3RyJvQM/aQeDsyvhhBf2QzrUN7RQSfS69n0gtlVcu8usM7FZwOlBDGVPqi
+2Pauuj9QEyQIqnn07uWAUTzKrWF/WtcAXmLMxs59VuVRC3xnPVxekQTcJeCKas2L
+Aaic1HKp3AfTOT7+Ao2RRg4GpIiFhaJpul0dABEBAAG5AQ0EU6/vxwEIALyM80xq
+kaopZN0A1tNL6KUnoLZx/Tme1qp10JQ+AtYP5eFqPpM2yQIkFgWoQFFRZ3saPsqE
+jYlAAeyrRLOJ65PGRycHckckdhyEmGFCbHl4bJl3qnfJZuAqOSUlmxMwvhFTi7Hc
+BCOcWOqCBm99Y91IIy6NGeB+D5Oe7RGox4a9iDDh/NfyYCTTRo1vR6GW4JK5y/oJ
+GfWGx0U3CkzrwPw5efhCgSXmo0U+tQyUSWKl+J9DtdR+kP5mNoWOOxYMN3w4D68A
+IDXdD9ECEAXZKcKAlEXQ3AkVQ+Gfi24S4z5ewsHm8he6HFOsYb+FYtEByeydskWl
+U829LN49xrG2sm0AEQEAAYkBHwQYAQIACQUCU6/vxwIbDAAKCRC+q8++4Fnk5S9M
+B/wLDuqtJf1ANTTf7pyQBmjyeD9QE/Tzv606tnLxZwkZKqtEa/+3EJuPJLYOVHkn
+XpWl4VlMdJv6DEg4DrOQuJDEvv0R7YrIRqKZcZNRn+9donI6PI9jqrbY+8ZWsoA1
+kom+hU2VEoutPgxkZsZPHMj3LfWTGouTa3/HEOP5cxi5leiqJmYLKKBXJs4iMNBO
+BsqNQQjD/0rLeyh1JlVF/bpsapQJJ2kijowt5Yqg0rPOC2qq7EQUV54EVhiq4+40
+iyn5JNPmXaRHH8lFCavNWLNUh9HxNZHUOb7/UmFG9T77reY4ATTl0hZUYKdCYHeX
+eOq2bxXEhHlRB6yktjak7zk8
+=y0Hp
-----END PGP PUBLIC KEY BLOCK-----
-
pub EE9E7DC9D92FC896
sub 3B7272A25F20140F
-----BEGIN PGP PUBLIC KEY BLOCK-----
@@ -13301,466 +14110,381 @@
=RmVV
-----END PGP PUBLIC KEY BLOCK-----
+pub B0F3710FA64900E7
+uid ?amonn McManus <[email protected]>
-pub EEF9ECC7D5D90518
-uid Daniel Santiago Rivera <[email protected]>
-
-sub AE7B5A78012824FE
+sub 7892707E9657EBD4
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-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
-=3gTW
+mQENBFdbSfIBCACrFI0ai/abnV2U2Wa9QQZwGk3Fegc8laiuTKc0GoYdyptd83/H
+hD5S61ppdkOugBjVTHdgda3xJ7zBZdnwjZvV/TyayQltbh6hU+BMlEolzXLgyvY7
+cAzKE+iKWbLLwfhRn1iuC7s5l1NLPsh44IUt3xDaFXNQrPO5OnRz8bqsGFVawxmu
+2bPqIjkhxEiYpxwaZZbDkgBR6rbBth6A7QOadQcj/9wNdekoM9dyg+olOUmnLrtA
+nMBhrvvbm2fZxTps3SZHlLV7+iSu71B5SqU/kT54/49n8vxrQiGvzp9K+t7c7EP2
+w4Ax1nYpRkCxYdHOX3YBdayUiP9ZaYH/YHtLABEBAAG0I8NhbW9ubiBNY01hbnVz
+IDxlYW1vbm5AbWNtYW51cy5uZXQ+iQE3BBMBCgAhBQJXW0nyAhsDBQsJCAcDBRUK
+CQgLBRYCAwEAAh4BAheAAAoJELDzcQ+mSQDnRqcH/Am3OQSYYBFrtOT3Zrf2NEma
+ojd48oWZ5xODFmqSs5ksd3op9qakbqkxITzq7BP6CkFbi2NEWYVbPp+jiSiGr02L
+yNA9ipiMBDyVZ7CXTBYqCQZ/3yQKOFN38U8R1SnoH1gDq/YdxDkSkWZEWQlXj4T9
+QR/fXWObN/oIdVDNONL99nqU0+xSvsE+toVHTH7upY7RcdDdnBEarKrifYjbCvpU
+0yiOgB1WOj91z/BrfpBFyJ6/qW2/qJun1Ja1bdpKPm0ZbTCupYOALJhf8dcznNDn
+gVCEB6L1+s693SuU2ZzFkdykpU/8WxlhjJcSqTpp8BIlwlFyOmZC7jrxArr2Jk65
+AQ0EV1tJ8gEIAJVavNan4WxxlwLwvnBj3/wcEWqN+kfMHENMSjmRWOYSmC332hhG
+LmTDi++BPWt2OOvHUusJV8dZP5D9yUBRFsKozIpyXyS76C5VYGMY8WZ6kyqn/mLC
+iwmnkOJ24kXLaaHPsQjv6i5f2KliDVhAGUHmNMJgH8o/GL7zZ03Mb8ZlKFZobp0d
+n+/lxoOtQSzR+cBz8NvMBkOKD8r4PJA6BxCR1HVEHsq4xSnjr/UZOYvh+Kaxfnop
+7Rn9in5MoY2rCY+PV59Xbx4grqNpjupyHEf1MHodJRj85JiClnLZk7dNJ/kr+zgg
+wbsd12/GHkBt/pxuWhe0eFcAOJmvqC3c4pUAEQEAAYkBHwQYAQoACQUCV1tJ8gIb
+DAAKCRCw83EPpkkA54FACACFZB2Tk96FQkr8+WHOz93CJs4UD88PosLaKmiXKP68
+arjH3y5jhNLBzqteZo0Crfw75DYWIZChdf5uLGKCWXBEytF4uoHOy9Lv/3emoSee
+nluFVcNjL7CIOQDRmqw1t/LjnsLbgvlwHix5f7I6Txu/J0HKJbq0XpoTqCzFK6sx
+EPHH3gZto+XfHk85haKd73SOM4edkmJx+jDXES1wb3K3SpYibt+uPVfLYXWxK7xA
+aztESTIqZ9RnYHzd/7z6DO4z//lfB7IVAqvM8ga7Qj58ObeqZxx2iVit5WUZ4cE3
+0crNGyXH/HKlAp+B9EvENnwr++TI1CGYthPLFHFc831L
+=MZeq
-----END PGP PUBLIC KEY BLOCK-----
+pub 5A68A2249128E2C6
+uid Tink Developers (Signing key for Maven artifacts) <[email protected]>
-pub F1F111AF65925306
-uid Luke Hutchison <[email protected]>
-
-sub EF375EEBBDEFD775
+sub 4E5C59DBFF7DACF9
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQENBFS2J+0BCADZI8RYk32YeO9gnEkY9RN+4dKb+H1AR4v+IGxmy0UYy+O8bo4m
-YzkQHTlPpEPGe10/quKk1embDifEfNa9mwcSJl+XUPFlTrSA97SR31mdyK/Ua146
-GKMW0F6v8aCgLUlm9BCJo/OmOat2jsc94SuKnPiRRywhmapte/8o9t7/0GghqLyj
-X+Ifz4WSKyKZ8oe9mRFg1ZIA+z52a8QnfyI8WS8bpGHM/dXkBXZpzIDlrfKvoZYb
-I2DcbOotJK/ZzStAZ81e4E/q2BEw96NUKJC5X+G8qahEFNJDcJz33UAxLiTFqWmw
-iKLqy8oL8p9qPYlx0IAXoW/GxV7E0rBoA95pABEBAAG0JUx1a2UgSHV0Y2hpc29u
-IDxsdWtlLmh1dGNoQGdtYWlsLmNvbT6JATgEEwECACIFAlS2J+0CGwMGCwkIBwMC
-BhUIAgkKCwQWAgMBAh4BAheAAAoJEPHxEa9lklMGaJIH/jjzVBHF28G+gYmktFGh
-zhclmHsEvfqNEgaWkjyUOVTlccA5Ej+8GWrumWqX9PJbHoZVJWeVikkjFsTltspx
-bQkIv+hygvqIyMBJLks32pLUCXlWrxOnTFTljWzPhy3TMeBzE5Zgt8YhHwyuLGRu
-roOnYz/1VDY5SHB8ST37VAr4lZdwslAwW8RLXAXfQfbKnMCwjNBZf4FmllZk6GWM
-3YyaTuWtQN0qEJ7y1BZJYZwKC7EFGk4viTuoU3gFC5uI6idcmFFBWxgYmnkbQilc
-akbBGU7qhsTyyAWxPlKZg7ldQoLFrZgoO9CAdmLLzbCyPM0w3MpPa4Szw1nyJb5r
-Qjm5AQ0EVLYn7QEIAMde+nVUcozJy9dzLCUpn91SCoWld/wTaSckxTnVMcr4uNLl
-JI/2PFjMb9ya91grr1yuwqSG3jE8P0Qdk9Bi6t6NkMIGUSJuzyIipsDDWaiCfjWx
-s7seFd9c+rgcH6r9CaUbNRfUrPqEZSeL+RDwIIz1gQkXmosF94DjZHP9abZYObH1
-/Or64CSRD8Ocf6kTRndwJOZkRdDtUX5NPFSiU17E/DoEkyryuXMR+Ci0b/hjQ4Jn
-riGeyy6c0StWQUW18SEYPV0j3VyRRUcOLhJajEu8KU4Xaaxgb/2X7o/BosjjQ8BP
-PUdTz2wRluU/1tKUQ8D+O8QH7dCR3lJt76kKWbsAEQEAAYkBHwQYAQIACQUCVLYn
-7QIbDAAKCRDx8RGvZZJTBvJ/B/9vrvZR1pFqDfux/ezze7ovgYF3jkxfQj3Hqgx1
-GvLYdvNacZiJG1bfGRuoEvLPv8lPIfEBTSqJGxzRiEl33eUUXlatI20Dh4oeRYUE
-70hCfqRn7cqITJ7nXwctMZGtwSLduNa4+cjKdSaWq6kffpQVSLrjvJYyxk8td+Nv
-CLYiTDnyybAmSGge44RppDjwGsQ+9X8wyd5b9hwcBQOY4UTm/6RPDJF66KPlPaU2
-qy8NeQB5AcO6goAdGI9WwOJuxg9IzULwpCvRYB0chLKkGOBh0vuyQbHoRmI6gs2K
-/I3i0q8Df30ObL7oBALsr2QfkkKatq4qx+xU7QMdeMs8STRj
-=CCVw
+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
+=TnZo
-----END PGP PUBLIC KEY BLOCK-----
+pub 5A68A2249128E2C6
+uid Tink Developers (Signing key for Maven artifacts) <[email protected]>
-pub F3D1600878E85A3D
-uid Netty Project Bot <[email protected]>
-
-sub 1C9F436B883DCCF6
+sub 4E5C59DBFF7DACF9
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQINBGAhOxEBEADdB5Jy2sSOndOMCTyk8IFIJYPogjXtN7CnyIlqr4jEB5G87TJf
-m7OxB95aIVS1vSA5ghCm88N1mKtW6jyYjgLFQbbyD9/X3ShVZjh8B2R4atL93SSK
-ppfSrQE3+EohYzu/X5agtzMhg4VplfY67yBUFXEqTucXpYumKLctrYtOUgDCgs4s
-4BixyAidsUxP9Uet2CsBiK7jlIe21EQz60QGvQ81pDaerwCxUsxtd4Fps+gSm6cY
-7Q+CrJRmV+rGpOt2f9NAyGdqqy71tjd5e7VC6GHyDxiB4xnDKQDGpfiMtGnxHPfe
-OaeYriCWQPpUIw7dg4eTVHKXlJ4FAc6W3Qdl0mlNKNIFizhcNxrie2FbLNxZYV+G
-B3GkDZt5Oas1O/iWcQt2QcalwTJWBY35kSl+uZilDAeU94vzuu1SQCZqmTtH82oa
-xp4eD4fqP5dB3qH/alao8IVlNRmbrEdbg2fZg4xVVmm+CF+gPnxswZRIptY2rsbb
-oEM8dWxakT5zvjox+v5J+qmEkE5WLlL/DlokOnJlAjJ3fkq6qGengQNjlrMIZjcL
-olHfr8gbYD2u4A7Dz9hls4fDz8OGqzHkSbNYm9hO9q5AWnqAWcSLPHkJ3mim91AW
-enWzfqoxNNR6L02mDvippqpfEoFTgqmZvYun8r1qTU5UaQnz3Od7QAf72wARAQAB
-tD5OZXR0eSBQcm9qZWN0IEJvdCA8bmV0dHktcHJvamVjdC1ib3RAdXNlcnMubm9y
-ZXBseS5naXRodWIuY29tPokCTgQTAQgAOBYhBA010/YAeGVRJpCOivPRYAh46Fo9
-BQJgITsRAhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEPPRYAh46Fo9UWAP
-/RmQ5CplWlfZgkiILVT105i//T9pmUS4x2mW564pIB7RpQD8WVzt06p3wBVUvHtN
-gdfVHj+3mxdGLjCtcEoi8cFSvImsqM9X69823ZrsfJGKJxxerrn+b4crHLZqxSrw
-B4QwVdxsok/jyPOo1joZlv5QhGFFp5XcMqgw0UexSBZ1yhmy//40M5jVOvVvN1F+
-DwZp63/7Ll3dnIhegKH31FGCwy5tVyL3O2kGnCT2crF6QGcNDJB6KqGiBKbU5FLw
-rrbrTeIRuUu3CXS7oiem3sbrmO+NDYIwijGlqMHI2Nw4pNBnEHSm0RZO7I+GbZfy
-Fe4xF4CMH7xvtpIdDtZ9Sk1odk7MUYrfTbDIfmzPlDpaCy6XS0Xcd6QjUosaLj7P
-ImilSxYNeIbMyaAdLZQhq3iywacooOehgzAA4VPsdE6UW8YWMxntbJ080h10wMHl
-MqHK2QWwnX81Uo0fuPsqGTQKHu/WH82IPsSAp1Cek0l9Ye6vRacwC87dGSrDG+RR
-d6eNAbUTLiknbWbK9T+XC+qCeImpn87pbZN8uUOYeqwyzc12gY8KX4iu5gbMKebk
-3+sx5B4YOGsBMhjfbLK77j56yBTpSc7R7JBp7DZ+WvnlsxXGTbMG85MpUvmQHnmK
-+CEQG0Cd6wC4vXRe8VLJScHGMjxDndJPGGyIiLv0IPgDuQINBGAhOxEBEADJSkJ3
-U5vrwpDYr4k2L1Cawqh9/02nAuazvNbl2ocjVHaDD51HJlm2DxwNg8obelCuVK1I
-klc8MLO0BcRILu3AKCK/6sVzy75r3oTH6yjZtOCWiPbmxXHxUjmyOrZW+ICaUy29
-PnXag3owpWz2dEE1xllDLAgs0zl9lWZGFvq94epBWfrj0vd0KL61ubwfLAhG+Kek
-PpUz3MwiT1kt96epBlkTtUGsH+u/RtGeDhbr8vdP9AX7JHr/UMZLGCajKy+70yFY
-CIfFBnu8veTldTVo05/fTNk5ADJOBZjcINkS0NGnpKmgL7xmQI8362Irg6mKihWL
-Ub/2DBpGya/Rp0j8Qw9OspsJGMHUo7rTHSm462noWXvjq2nNmu8Vb3Xj4JVJsIWT
-aoDdODJ/eRnrTci/eMS6lcoaVX3Yp5oatdF8/2X9ZoR5Pg1HYDRyiibZvGrZS5UA
-p0o7ajqit7l0Jlc9Md0nIkalD1rcSTqAWA2TUWyYCKBb4ec5v/9uw8rg672VcbVU
-oWb+gEIxN9hJfijyrW4CGMdRpTr68tEivgliYLDcSvLYZKRUldIKKpMntOtUKyUb
-SfwlJUKux6Hx2Ysi41zQD2mfg6/Mw6JhTa4lvbGrX9D6HxS2ct7o76O5uXWSDR5A
-TwmQsYug3OgVKIEo0UvKHogQFCWNlMwR6/Zy8wARAQABiQI2BBgBCAAgFiEEDTXT
-9gB4ZVEmkI6K89FgCHjoWj0FAmAhOxECGwwACgkQ89FgCHjoWj12GRAAnQ5g/B+K
-yCaGPokZcGh+KnieuUaS7txeS5fAzN40utUJA/JxwoG7AselbZ68QQIzG6XgNsFa
-5fEpJcC3o+mkjlVMvaNxPWRlLO7TMZ9N0AldwSCXdRLrEbx8Uw1omXvC5d80Qfkn
-D1sDikPZhAGLPLK0PfM4DxUbLedxweDLALWt2C1BpnPKF26jQN4ZBrUBcLlXtkPO
-rAcxmCXsyS1yh+iM5hNK+s+CJ98tMlDw1U6oMXuW8lp9DloJXL7y11ftCPNr7vf4
-J/KbafBkKTP6AZpl7lJQ1k/1hZxE+Wk2bSgRuq03wbs2SudBw2xLDx0hl6JT60pC
-adWvN/hhpWGyqOYZRAY7BxrHYEMLhx0fYwHH9d/aagTHipeYz+3S6C++C3pFXpa0
-0geg8ytpg/KC8d+6rRr13lCfbV50O7nQ74rAXBx/4e8l6W3pRG5mX+00Z+WAPY9e
-pujtHDT/94DmXZaJ35WeqSwUocXFUvJ2B6R7srxtuyPIuXlSJ8z+T2R5az0Jk2T7
-CqltUx/wQadosFq3jsvl+RtnBimwYIiS1UreX5mVbBZiGpTlaFNhxfdXW1XmmfGz
-+31CPxEIzHA5kbJzzaB/ofX3IjRSQB+rpxetnGCXKnclUUyruTMY5XMGD/VGCOLw
-eOotdxJF6J5yWErznxlExP5YBIHvIQljCyU=
-=WKVz
+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
+=TnZo
-----END PGP PUBLIC KEY BLOCK-----
+pub 5A68A2249128E2C6
+uid Tink Developers (Signing key for Maven artifacts) <[email protected]>
-pub F406F31BC1468EBA
-sub 4BB1ED965FF68B71
+sub 4E5C59DBFF7DACF9
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQENBFmnALcBCAD1KazT9eswNXzML5+M72qhdIX4VlJrrOzeiQtTW9vbXj7DZUnw
-U8m2bNmKHtpnyXQ3Vl7FE/e8CKGUVKmB854VJGDSyjToeAnt8A0Lg4smaSfgbEim
-rVi6jkgSCjzvNFUsKx4uOCkI59lbAWcww1aoQZcjW3D0ZTrrjo5ilx/zNXbKMfX5
-KosRIO3OzIfHYOjsmbLKj9U6pj85AXJ3/aKuRMLbFvOE3KZTxKLhl8LsgSgJFg2g
-XFKOJeXyRHCLTlsRB2qD+jAXeE0f7nTQ3xMnMUi9U2SN4WuYxxFTtrZ7QyIze0/4
-568f0ylZda+3j/FkbcZK4KJEi11kqS/ph9UNABEBAAG5AQ0EWacAtwEIAKH79EfC
-C5z/pkDx9MVSnoA5WAYX20KL+ErpMnaRbwzpizQeQVhqDjiKGCk6qyC4PUUk+H3I
-aYuTQN+rABVur4S2sO6AyNUETpAMNmrZNvClG/p6gnlYml0vzvEKtsa3U88rTTWx
-fzoecQs0UugkUrRuJI4XJyTMgRuDDLClH7IUjkrUmw2g6EzlDVdLczcpLxvP93j6
-I8R+DwDwlCX6Nqw5Nnr7Q16n9sPgDthJAF+7VS7xXs/jeGROFckdrolrQGirwbfa
-Kh4k0gfSJykV1ivuKx7QOWN6bYejph9DXD8oxE+Nne1y8tfNZFw16i75y46zAVqr
-rKY79Pkcr4RgP9sAEQEAAYkBHwQYAQIACQUCWacAtwIbDAAKCRD0BvMbwUaOunu/
-CADJcTU+K/cg8ItaIfMWM+miuYpoITqDiMpMw+2RkUnlXwn1ouZP0QP7Cpt3mq+K
-Ihei1JIRKR5+XvMV5h8ffvDy6gKpWdsUFadyLMNY07/HVtE2ydUjDhPo5vb2AWe0
-9qMZWef1/hQumkqqhz9Dbs/L8QATpnYVAtv4QMKFwDAXYCgnBijZClYwwhnJwJ3U
-rPejhP0MQomdy/li9kFMlkp795s0Ng5I/BjkFYg/S3IFQEHsgizPclibJdUR8P2C
-GXOcxXB5dE7ykv51FxMpcpgd6jnK0XRzWwQExelrRb5ys/D7pDiJBuGG/u4Hykbm
-LuHslpPWYJ7ZOeVf01xL+I5T
-=dLR3
+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
+=TnZo
-----END PGP PUBLIC KEY BLOCK-----
+pub 5A68A2249128E2C6
+uid Tink Developers (Signing key for Maven artifacts) <[email protected]>
-pub F42E87F9665015C9
-uid Jonathan Hedley <[email protected]>
-
-sub 6064B04A9DC688E0
+sub 4E5C59DBFF7DACF9
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQGiBEtsF2oRBACcai1CJgjBfgteTh61OuTg4dxFwvLSxXy8uM1ouJw5sMx+OKR9
-Uq6pAZ1+NAUckUrha9J6qhQ+WQtaO5PI1Cz2f9rY+FBRx3O+jeTaCgGxM8mGUM5e
-9lFqWQOAuCIWB1XPzoy5iTRDquD2q9NrgldpcwLX3EVtloIPKF7QLq72cwCgrb5X
-R25dB8PUdZKUt2TtJbjB+SMD/1UzAPirgX0/RpL9wUR1i14yIrTfpFP/yM9PE4ij
-qcZ1yafVdw64E1k5W4k+Pyl4D8DvSJvbJHvYjg8/G9V66WzaKcv+987fetUuePvY
-/rwxBPztqq8y6+hjBc8QVhZGWmAoGGEFO6MIGsSyN5ohqPMpNXkczIo+NMvDxGzz
-ld5ZA/9awGTsigBdpBK2F6GOmbvBv+Xebu9rbaJvBvP+npNx01s/f5sHPCxmBTFk
-m1vtaMdZ29RovrWPSZRj8WWes0bcisw80250r1CBlYzGzqEVZ7b0Hh2RfkfaxbYh
-wikyfTfA2iX8TUGBgirsZbyegjUadElhwFNDASnvLTEuQKeVLLQlSm9uYXRoYW4g
-SGVkbGV5IDxqb25hdGhhbkBoZWRsZXkubmV0Poh3BBMRAgAgBQJLbBdqAhsDBgsJ
-CAcDAgQVAggDBBYCAwECHgECF4AAIQkQ9C6H+WZQFckWIQTzGEvNVfTQFuMNTJv0
-Lof5ZlAVyUaVAJ98o4QsLXrRWAe4qp2AePIJa5pRhgCdGrNdOEgEImKoSwS00vWE
-RiojY0W5Ag0ES2wXahAIANLGdCWb1qCiBm/qOjDsCOqd7jG/olgcHWH6IdkT51GX
-QcBoSY6d9gok7dmN6mBHKguTbxeRVncdZuSjkHtTvkBaKjypwtWz4/bmToy1ape8
-ebUsAnjyGjDQfnzMRIeYWMC1rQc/J63Qj4MJvpwMHnKBPGH66Zq12ZP2C2pOeBTn
-hMC2Gj/BOLthR4hKjflpijIyEcC81aWAK1kQm0y4UkiskQcu1MRKL1B/ZiGuGLlO
-D29keuC8KKTBwgZuaMNFPJAsPL6VuNBqwXP9nmiHlwl9lye+xPbPWT4FujKCeiHN
-cVer6CySiBFfLeOHXijUsA31TWR8cnpmimvPxoKY1OcAAwUH/1My+ZV0Zsk3Sakb
-xyH1Fd4OAN1++3d7zq6Gm/CisODBcti4k4qDe27SisRPeyY6dtWGRXeyqZn7tov5
-K/UFSaPg0sXtqdsXEKM8kvpWsjyvIf+tS4cofL481eQFFgOWbqfj+yYf1kZYfRsb
-NJNL4pmDBSiJsN5ma+BAPFAo9nvOVyBzRwXdAdVSLpKuDo1OEIUa7rTXmyMtxmd+
-cpXGl0+b9fEav4kSQLiRaAs11GhPdP1ff9qG/ANQmBChi6HLzkIAbI+/toD+Vjj/
-lsSOE1jxDUSjFXIVQRPM1fu2GYmoTwsDkK/U0FjGlCCcWfOcq+zvA4STgV9wexBy
-H6aAA12IYAQYEQIACQUCS2wXagIbDAAhCRD0Lof5ZlAVyRYhBPMYS81V9NAW4w1M
-m/Quh/lmUBXJfs8AnAyiCC2xgVDR0RmOe5pmecSjFmwrAJ0W5jNfBpStUykXDnKq
-hD1krrLqx4hgBBgRAgAJBQJLbBdqAhsMACEJEPQuh/lmUBXJFiEE8xhLzVX00Bbj
-DUyb9C6H+WZQFcl+zwCfc7b8hD9OHMusz/ZR7dKl3a7nA34AoIdTiFJNKRczWAbd
-z17znsg+RUG5
-=8yMs
+mQINBGPcwwABEADTw/gqmHh4LTSDsBP0KMoXFtFQnv7xmVPPrPjt0NxGn3w2WIou
+7UaLUTViKkgm92h72gyM7N9JfNBLcYrqVf9ed75MPdGQgzIhkVg3SLWZGFoIQUJ4
+VznKuqJmd0dSRtApXL9ZoVXf1mLnbLkOvfLfw2hVIsMJcW9/G4It7pPY82IiwTLn
+XG/pw6+wLa5FGCM4mldPnyBDR935nSkgnZzQJyDESXZKS1uiU1rMcGWkVLJ1UYfg
+fT5c6jAk+75vhyQEvHReoa1T8fgBPD0jAlE7T80460x8dramshhAAIOZLnlAuiBN
+A7KPY7cUDxDyFNLdhj7lGjPP1UTv5mdcZc0H6tgaapOB8QzqnkAJN7GrPHjAWnu7
+ujdiT+lmng+waiBfoQN7HQyJXng8Skj1tVYjuAUNgUuA6p1hL30k9Ny9wO2BBg23
+OXYn8yLptZCUg4T31w2ko2PReSxMeEI6S2jWTALP9HH1Q1sinQnlJ8SfPAssG8wn
+qjaV4PtS8bO+Gy2NosG389dzibrmVJAHqymTLlaviWgeqAXEwZhbVcSOv+B3JgAX
+h1dI2zDJUMGV7jNbKa+UNGb+di8T3J5JEXCNM/Zvm3KNudfZFbcNS1pEzNRzm4gh
+kmNHQEtknSm6NHaWIP5eMIxsKGUA6qTR8XE9qrvpwV35rwbxmPHSowHzzwARAQAB
+tEdUaW5rIERldmVsb3BlcnMgKFNpZ25pbmcga2V5IGZvciBNYXZlbiBhcnRpZmFj
+dHMpIDx0aW5rLWRldkBnb29nbGUuY29tPokCTgQTAQoAOBYhBHOXbJw5wUebhOJk
+GlpooiSRKOLGBQJj3MMAAhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEFpo
+oiSRKOLGX3YP/iAVKH2H5ZKxO78FTLS8Jf1bl48Z31kTnvZg/sMFA51D9p+kBxns
+dNe/4UAt7R7hchlJ6tah9+L5bBf3eU0r4vNwE7+d6WiYoKgGVaegRHfOJEqSlnXo
+a6b3J2ML2vgnRpWTFJPdtZXKekodf76We6YshbHfuix5B0Zfztn2UC54cuhCsi83
+FhEMW9WvMe4Men9u4MsiQU+wCYUtsRV6bZpLWbrYFJyB75/IwWiLZv4AiVIqUpB6
+yw/lTDsPTyrncEfE2+DYwyHduieY+gIR6SGkJh+7VF3ESj6UR1i7+sdcvWbLgJXe
+JoqQBROxnApKh/3LIDUGuONfiryEaC5Xy/l1YkEUsgp5RA5YrotFkTEZCvud6M9m
+iBrFOz0xAHwu84OfcSJsmzARh8lItd4wImykXnhyiTInVUrq9OeDN94RSTFQ7+Mh
+RT+CBnh6Z8y3jL9ekCpGZrxB0K4T4FBxQ0QNLnPZK2OfTEvmC2haP2sofbrYbo31
+TlafpzPfLXyp5sBGevT/vUd3YbXS69L3lDRKoOnJy3PK3UUpeSxTP0sN53mnembu
+8R6eHzuisrb1vl9wsIJ0EFn5F331xQagKYzDn0Vp63KltD3xOnB+itcsZETYamuL
+MHk3TXrNg47Iu6fbLEw9M2HHYDBm70AI1PpXtT4mtQ+TU18JtPM4ZpvHuQINBGPc
+wwABEADh/vvuWr2Pl5xD/gF1vKIdy+sNTTadx7EoAsdnrYShtP3jvUPL9VDvbpyH
+K9B6wFEulUM037L7BOl9khg9oO4G/NXlU3wiIJk4dI4tBrj1IAFD7z3qQ2Sgpy/b
+TsBRZZCwOiW28IxqQsx5DE4i5YYOEjjyqZiza4/I3TchKN0sEOwb77MEUrYS1CUe
+lpl/zFlYZNGXT/oDjJI2bVs1pvCMtb2iQW7m6JvDEY0xZ7zoRm2rJA567oV3WAO6
+u2T2tpAzfu1SYJRRPbUt45pdzWSZUzCQwcB0ZTAuQbK4nIsjPGv6oAPm3PgpEpW2
+PBHPux+UHN03k/vEpb5XLLTBuWIdgtXRzD2vSkEO7A6CBkYTY4TY5UodLgV+szYl
+G+N00m0h2SOf/9FEijRIA2XMfNYZ6E8x3I0ADXmOEE1MfdBGSEtk/Tzb/NX8Bb8/
+zk1tKRI00vEz1bjOTsiRZQ6Aod+hUcCPasTUAKIgTpe30zd1v1krF4leVRXHWJbU
+mpsr7CoJRIrKBghkP7K0vLUQzes0djxl/J9C8Ru7bjM6Ndjmy5+oSCMMPJyJ/Wpd
++fEWZxgIukAnjLtuZTUVeMESzP1CkUeNv+aGadPNGw97VRAFEfk6508ihg+TVEiy
+FORV/njYUB+4zm/+aczd6KKT24t6DIVdm1FkSds8SpcDT8Ei0wARAQABiQI2BBgB
+CgAgFiEEc5dsnDnBR5uE4mQaWmiiJJEo4sYFAmPcwwACGwwACgkQWmiiJJEo4sbA
+dRAAlzA7kLCzFnCSYr2TgCfQEoI8yslnPL0flq7ghw5yBK4OdUbYoUBYBroZMJLw
+hPvyaEdp3t63Sl/9GsYNfub+TAOJA64WuRtOT1QbOh6+U5T7X5yvPM3FAGUuYOlk
+1ABuTAtbOWW+iPOpE7sZaai0j9zH2vPyviBqZ6GtvsuVT7ynRbrYuWe9127ZkJet
+6zPzGXoyTE+FaGOdv/wd+9u1Qjk/lYowNoQ7xXWbnF4jD3o6lM56uOgvPUFoSnzb
+sd1fCXcfQ4wj+O3yEoMDVa1K9eIrSz7TrL5K4VzfOxaHxPh2orE8dFgjXy0Vm/KC
+XTOc9DcJXCjqJVh9RoDxTaNkjWfkN+1bq9NUaPauRduMwlkbk904ygXxMJ485hm5
+uSaCKM8eYBp4y/CdwOcnonBEg+lS3rVIcfDUByRrim5pOsIlSe3f2OX3txMYQvXJ
+ivYOA4phKSpntp4TDzGkZfLbCIpaFowR3px/c2LKuQmTmr+Vl8v5W4kBgQGEDdxY
+a7jhYx9HbLimtQG2XcCC+javwdubT/ItHrfcAB6B+dV0iRA5b4QDGtU0CsD9tY3N
+oaTSCeYc7Xae5YCXr3viH8vWPap984XZWLJZXM2s2Vm1XdeBTQxWCGVER9dnzGGE
+DsHNOZoy3UpsL+GQ+AORGsEAjOVJQnCjqUh7gtB8cwiPvps=
+=TnZo
-----END PGP PUBLIC KEY BLOCK-----
+pub 5E1F79A7C298661E
+uid David P. Baker <[email protected]>
-pub F6D4A1D411E9D1AE
-sub B5CB27F94F97173B
+sub A7CC6488427379A4
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQENBE89LqsBCAC/C7QToaRF8eZgGOxcvp9aG+mFFCMjaRAb4Mh59OYdmUb6ZjfO
-9388HPebGbPNR8SHYs0dBIuWY4ZJ7oUTYPswasL8vB0iPFdyHhvkCca+yk0b8ZBM
-DmFlISm9HkYpoVjcFUp1oivyeJ5LRTJTd5JGEd/SWFRbB4TimdKXBzej9fIm2zVl
-KInEMMd8HnSYE6nm3aNkbyiqhx81bFvl8x6X3ZMWcKs+TAVXdP9uLVvWowUwcApk
-xpee442Ld1QfzMqdDnA6bGrp8LN8PZF9AXQ9Z6LTQL3p9PIq/6LPueQjpJWM+2j8
-BfhbW/F2kyHRwVNkjaa68A544shgxJcrxWzJABEBAAG5AQ0ETz0uqwEIALmEZ0xN
-tuX1cLsNUzzq0HVzwDiw5IquPWy33McESXvkaMyqyQtYisW++dY06MxBCS3uV4+1
-nKI6oA7Lk482ixwzbwws0Rb8H5CeLHDEwGXfthmLAvDdxoNCUYAtpVOMGcbGpy51
-TG3V9i9JWe1px+kvhieX9BLfDzP4Pldho9lK2gYRhmpPDgUOjYZgiQXMmIPAYfdH
-IA/VdYTETC0lu4Adb56SzOwvGMpnd3rXWUiJbZg7lW97hvbOFMKudbNjBCrF7LhW
-Ah089MU9rvunuz7mquVdNtfEBkdVrqZJdvYiFBee4RUe3+qGCpHnLzynOGHr+iIt
-DG73NR9fZCzl1K8AEQEAAYkBHwQYAQIACQUCTz0uqwIbDAAKCRD21KHUEenRrp0k
-B/wPuP2W69oweOqtSRDf1FeFNzAUIjbwjkg/bTjzJwb1cyedx7rbxhpJmn27W8A2
-WjfmDLOn4orQTKoxf3kP6SeeGhYLkzxjBa5Rco89p/6X35By6VR4LPFeTOACyE7b
-cAjqPFb+7t1YzvnmuZIgpvTKickq1D9g7+JT1Qd9nqBFKlg8aMngAooVvlLXaPEw
-Q1XfkfMN+ltwlEr7o1ts/YzDUxflaFVg0FnN7qezam/s7VvcK46rO95yQr/Wyz2o
-VDzc34e+Nr/b2pN05MDHA0dXmb/irwPBl0mTOgAgC805qkR14xhd1GeL6MEA34k8
-2Sq/O3gWhBaB3KOy55/lvvKp
-=CmMl
+mQENBFgRFtYBCADud9fmvTI8Dbs+9GcZUIVzxkL84QYHSDxI9fF+sxfAviq1U+YJ
+a+ZLIW7HsXx8vpn3hqIqAbDxHjrb6MEJ3OWD5Ks7O9Lq7HOhtqAT/mpV3fZmf6pF
+zdEw7c4UrfbtKyBY2kSBpKzTfu6HD3q4OBDm59Ezs2XFhKrXtlNC0fQ30ysBpIvm
+vZH/opwlBgyELKnAYJ6eCmdW1iiju7DPKDBOrGi6zgvslToLpnZeSg6hzSyjM15n
+Gx6Dgby0GNR4VEVze/UdOpsFVTSfP9qXgdt5ZOWQqW2Jg5V/ezvk+3Ok+ecfHWRz
+q8tHkagnqn0SfP6mLqUNvmvAH7xp8crH8L/TABEBAAG0H0RhdmlkIFAuIEJha2Vy
+IDxkcGJAZ29vZ2xlLmNvbT6JATgEEwECACIFAlgRFtYCGwMGCwkIBwMCBhUIAgkK
+CwQWAgMBAh4BAheAAAoJEF4feafCmGYepYQH/AoDwA/N5Zq0z686DtrAu3KeQCap
+YbI4oNQ/yhCuCivJy9ORkqOLRZDhrfkmwFmetOmDeg8GAfoMEDUSvgXLqqli4wMS
+UNNlRA18X6g8N/FS7w/rWP0wp68boPK/Ry9Q/f7SFmMxrObT7aSX4hnhzWZfWTZy
+YkhWN9Y3+nXFtaT/XViZtHoxLZP0Ei92N0zcWGkKs/drH84OS+XMVRktCNExyXUY
+wD/cyD9n6r6f/TGtaL8cpXqu46IhLpeaPMPWqikZCLX/2KGSwiO4H2juTkkhQn8E
+bCZziDmfDY6RAa5xrsOnFeLYGbqbkoK7BfR9d+tMFtkgkXxqpHFMjW3a4QG5AQ0E
+WBEW1gEIAMuetYIGcqEC7KdfWn6EKmO7ZucfOEirvo+WXclo48WX0Eo0gsTghKPG
+TS2kOzglwn/wYCbBVKzYaOngZljIcrR47hJiY/u7OH7EjiCiB0sh5WuEqOaCPPFo
+8lCA1+SBPAF+c1d7SfIEABL/WCc6e1rkKhe7wkBSclspL8YQUG3cr5G/cSCGOV69
+TsCqq7rtezjkSsfE5dxmcs39Ouur7hs25DKehufUA5bV2i51v49WIuTE8x53VfIn
+YsJyeRs7f4sx3hmkwN+EL2mo1YFymGwEkp8iB0Jtrpsevl4AFOajl6X4IrdLn6+X
+Sok/1mzIm+t1ZHokQ3mUWe5FC9c1Y1MAEQEAAYkBHwQYAQIACQUCWBEW1gIbDAAK
+CRBeH3mnwphmHv59CACEnAU1vbN4qxquAzNuaalyV6Hyx9olUQqPHopRGBA2ulPs
+0l+gtAXz5USotNsh3Ai5j39Y4J+qxN3HuDtscxEReogawzOo/B+1IKuGuuTzvL6f
+U6ZFUnEosxChAKwJo9eS5xlyenyumTcXx5yB/5X5nqTes6tcZlDcEefh7K5Iaazw
+E5caITBX0ze8g7WQzRxyN+vuhY30U7P8TTKxAsavdSBVIb+Hp0e2W2S5T3ogXaGk
+Ii5qllr9uhfX+E9zLxJJKfJot33ix647mPwpXxo7K6teo2rkwOTQij1sEe2sbMZi
+KZkn4rYSgLpZiVLPiDYuP3RTuHnFenYROA/YcDvA
+=qbvN
-----END PGP PUBLIC KEY BLOCK-----
-
-pub F800DD0933ECF7F7
-sub 592C39141EB02A78
+pub 72385FF0AF338D52
+sub 458AAC45B5189772
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQMuBEvQhhQRCADQ2MH2FpQD7pbCTDJ4uvPSeaOz0IUhkX9bK4sKvIISx8MbHhR4
-k4sXi+vVkLngWCMUV4nB4WcCibk2S184SzL0TstTDrudxe4eJFVbmZw0GrgASugQ
-aD+8daVhMgQZEjvEB7kjaYzMyljzVRE/o30AaizHPMVytZQpIL7GTsaBcGtxLkyq
-JG+SF+fN3WAKiMyKCUTaji1owY5SyZIbPBBHqcIQVdtCFRPXhLDNnGHUz/ubI4Fn
-U5sN9gEe7raXQfvZzwS6fW2SaxhxMXDNVDEipY7okuRKQ0wPWqcanh9dri8qoTfI
-7MOqfWWKL3NF1hnjuutyGTTKCllyTWEW4MfjAQCJBTUh43abqyHej9Dzcc2lSgLn
-xeN5iM48tYZRv+aYxQf/b9rWigbReKL7iYmCTqd+hLfh0YDmaJbZ8ZZM4p/YZ5tL
-NdkNJR5TiWwH9ub0BvXYOtYUwclOaaD85CKNN8IU+A/YcrWP2O8fBQw5lqARuGx+
-TjG7c+WRVn+fLrTzrzbUYh+/Jg5UYCbDYh6H2kLKnPVQPzSjDScJNtevFnX+IRjT
-7woB/WHlrfvowZGO1kclypZZS6nDiPYhEk1isEU+nD7OvvM1fQN1rdl0QhkLUh2w
-qKiM3xvY42LGicnJcxyMSODkYlG6J6OE2sFDBJ1axa90+S8Jze1fBlbQVb7OF6ma
-31mhOedb6xiqJ17/5Kx9gPEUpVMpkrDUVToIv18c6wf+J2TJ1sdMPqUsiuKHDQq1
-elTxtfq5ELQoNlnuK+mRrsSMfa1I6jE7QbZkCcoTNnD5ikOVmkHJFQlEZsmaKCrD
-oUpEyELdzFy1ghfGDPbvv1a5AoGVsR+sj39XNckBgZS+25vZupBxWvTd8Fj/KY5l
-a1aQlPUyMgqmo7rdE3WEzv7v11xBy6wQMAoGu6lp9tnaAE7sPEy/UHuYSexCO3Ar
-83sZ9o9ZQa+z33QU5Z0guNz+efCkFfG4nqjHjZ8ZY5VvWlw0W2gxNqzNCeQR7m14
-C4J2TNNn/F2nGAKEpKEgp8IjpEXYZ6kF9xoSkJ07bjujvf5vtvAm10h+ZEumKSiS
-mbkCDQRL0IYUEAgA7Ci1jY5JdrLs7pKjhbqP1lkZKDRn+0fDgix9y2JP2O0lJ6Am
-SAVUE6Mi+izqV97q3vMmOkIuDFLoBP79/YOaDlMWAj9QelNWwz30yT6LB5Wgw0c/
-Tpi5lQD5K75L84u2vAFjoOwvnLx3cKjC7TG2h7zxt9EHEtLFAFP2JBtsMvcmpFPP
-Ucpv0+/RFLhRV6JPxEUKiVbz52pgBLSa83vtZI4d6CDu/W3QXvCw7uYoTWx7e0+K
-rrZj3LE7KUzEa/Vazsn6Nwhi7VL0irNOZJGALdhrxLA8iGnPYDys78vPBWB3k4VQ
-G7rgvdVXiAldMNtoy7sNuhtI8Cicgl0JG/6flwADBQf+O8kWSrda5ezDK7vWAhBh
-r3tEMIE08eL/HPErE3DOzud8oyV8B7Z89ZOjSqzn/6EQdnEGnVRr/isOJcmgAXQQ
-RpJfFQ4dnpEeestJ5y5hzrtbMvfZ/Wms3WFgjgfYl5+TAbSF3Gz9VNn5AmaeA18i
-d8qzNVQ/e8J9zXfLV62qRLzbAS74K6rzGpYaZEWFAid1KLTu0S+I/ZuvQfZ83jyq
-oenwS0iYawM824w5oCDN/+8cDzLcHipN+B6g6S+X9m8s5E3RZGVKqUjd+fTRg0LY
-JkkasJwQa+20AadpCE0RZtR82jrbyLfNY2FFJT3TKYnaVhYcjpPBqffevhwSRIEs
-KYhnBBgRCAAPBQJL0IYUAhsMBQkDwmcAAAoJEPgA3Qkz7Pf3m+4A/RghXcZwWrZB
-/vvvAfhkYQeQJjPmYluGNebJ4wPi5ZI8AQCBjv2b6yDTWPenmPNeSB88HWjSL8/A
-mimEzF5VTg7GrQ==
-=Q4rB
+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
+BemLeqNijrvozak+6IJUvgac
+=NN0Q
-----END PGP PUBLIC KEY BLOCK-----
+pub 353A436E043E3145
+uid Garvin LeClaire <[email protected]>
-pub FD5DEA07FCB690A8
-uid Baptiste Mathus (Baptiste <batmat> Mathus @ CloudBees) <[email protected]>
-uid Baptiste Mathus (CloudBees alias for Baptiste <batmat> Mathus' account for infra access) <[email protected]>
-uid Baptiste Mathus <[email protected]>
-
-sub 5F68B9B2F1725F16
+sub 7494750BDF4F8FAE
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.68
-mQENBFFCLwoBCADxtcGi0nfolr1kGWe3jQ7n18roJFwBs4Q52nx0h4+a8ZGr7/1E
-1brakrz3t/cTSZIrhfru8kirP8cJtXBxpd/nCeRrB/4ZtXPUJiGwKx6sVGr0ix6U
-eZKQb3anH3jdGTzZ2csqt6Ro85SvIHfqAREcPOoQk7Kz3DFOGbSfECN2Wf1pTnRT
-jdF1Z5DkoTd8sGBmGOdhNMzgqMTHz6np6M2B/JVP5DpcKPbbMhQ75RPcxNEb4QSa
-HtCL+gMZiF7fndWx2Tjbpanbb5+TomfWOMizpkyziyYeUmGoyggrnXQ4BMlzsIuK
-ATz6wA5j4qfRLfoDDgNv5UacVAtWL+rlTP8NABEBAAG0TkJhcHRpc3RlIE1hdGh1
-cyAoQmFwdGlzdGUgPGJhdG1hdD4gTWF0aHVzIEAgQ2xvdWRCZWVzKSA8Ym1hdGh1
-c0BjbG91ZGJlZXMuY29tPokBOAQTAQIAIgUCV81wjAIbAwYLCQgHAwIGFQgCCQoL
-BBYCAwECHgECF4AACgkQ/V3qB/y2kKhonAf+Lcl9bj90OOyUANRNkZnuq2sLI+KD
-kerGmbwG7FJCM/Hvq6MgtNaXt98RfU7a1aBmmM6uTOBFko+7o8QXocnU/2TrlsnU
-yMHsFfO7OQSQJebSSyAyE1vy5VYzblsqgfs7Zreb3BO/awzr0GZXjR+g/q6ivxhK
-+2pIkdfuBBkConNzoPqSC1f/F4qZuCi1e/VM5LmincIUEnWUR/PXpgXOwu/KoyzX
-X8VC/Vwk73vGaeBN3avCMVzNUmyYXELzcimcaa70ISKReUJvoYqHEDyVcMk9Yzjn
-VosDTfun0kUcfs2nd0ZySyygn80JHsZURIzEAnliz56lE8Fq5i2MO9o0ErRwQmFw
-dGlzdGUgTWF0aHVzIChDbG91ZEJlZXMgYWxpYXMgZm9yIEJhcHRpc3RlIDxiYXRt
-YXQ+IE1hdGh1cycgYWNjb3VudCBmb3IgaW5mcmEgYWNjZXNzKSA8Ym1hdGh1c0Bj
-bG91ZGJlZXMuY29tPokBOAQTAQIAIgUCV81mXwIbAwYLCQgHAwIGFQgCCQoLBBYC
-AwECHgECF4AACgkQ/V3qB/y2kKjQQQf+K6NNaERzm+5dkPOdmrVQQPAXrUxGW6b5
-Bsx12mU4qJKxQsq9tKsw9kdkvlP7rVhJATBk4J3ZYGWSqQajnVcAxznlWZVksWqo
-rCtYAH2+rhlUBo7/mvDnCW+z0vfEwBS4vQM3Oo83CyOecSnn98wp+W1O+TdCZVAf
-k8UOrODdc55VpXoQTw4PZ2uGr/56EFNYNXia6O7H0FuyDM6g5ilFd5Wxpp7qS7D7
-zJkWciSGmOwcw4NeeAMAu0bv8X9vmom30EEoFa6o3GHUJz0/DsbaoAOxcVMIymY+
-SzQQ+XyaHpTeRdpWB2qQo6BHSktm+vxp54811qSwyqPp0uKjHmVFLbQnQmFwdGlz
-dGUgTWF0aHVzIDxiYXB0aXN0ZUBjb2RlaGF1cy5vcmc+iQE4BBMBAgAiBQJRQi8K
-AhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRD9XeoH/LaQqLyjB/9diBWw
-NMYG6UB3ijZYyUo0P3F49JcboW8U8vtGkDjZU8bSHkDQX/1mstMSTPoO63TrszRh
-UCn7lMxHfDaYVhbr6N622Jc10WhGiJICPGSz4azHdQA4e2tC2l2BCMnq7mvJ0bVx
-uqVb3VE5P2R884g3K8Jq3O3tjWTten5Z63UvqPcPmpN2C8WoI4EDWqxTAxyJs0GQ
-hNnfPDKycIpv7ESjprJ7c4oo/K0YUtlK5rF3eNorZSOrj6adsrdcf7IMvQxnI2Ro
-tFr49wqdvn3fTW7db+1qoXAvsHV7bHZPxc4OmOeCuqNOoh4J5ftROO8o0Gi/wC4B
-bniNzu7SndfMOTjXuQENBFFCLwoBCACaK5wadodZGLdBAAcRg9rwBzPy+F7ZXdwQ
-A1kHo0Z6xhQJP2/X3C/rEgKW59QhBLyEMBPELRtO5vTC5UYLu0pHK0XsOEacFVTW
-GQ+gLGp2UkScAJEgAQPYNNWrAz0MoAPQ//RW2Byph+WBVtgnP09nmq/WcXjv0tz7
-FrSFW/A0uADkcEdWGx6ItNiHRAZBgO4uzSY8GUw2YSEBjAilDwVs/Jftj5dlJlwI
-JzA0VzNIFunKwBTicMHSSHRNic+zlxMOs02a3XK3NBPv9a5DIffZuU9657rHmZM9
-zaS1PyHsMbpZsy+hFtxMFfVuViojg63ZC5eh9C/ghKCIbP0F+L9tABEBAAGJAR8E
-GAECAAkFAlFCLwoCGwwACgkQ/V3qB/y2kKgcqgf9EGoznHgOwfohcWsi6uIuLgsT
-ypd2f+zPAYpgySP8LK2+UZBnTzo6zxtWB0ZZAj8ICdciVOdcSYim/X29pRzygKYD
-JpHh7ZvvxeB9bxg7Gfd8Ml5Ycdf1x8L/Psi8kajbkMczrhClxhAR76Zqjpm6gvyi
-e+21f6qAnx9B+J5jQpN6p5uLg1Ac3dU+kY9MJLL8qy53yXxJHfcF+hMoAVZPajU2
-fzySiLttENnxXHIqJiYj/N53RJmcQdYLNjQNwfpq01DJy0k5nvXDGCZmgUB2T7w1
-sVIIF1w0sMxaEy8blxB+j25b3KhYYe9NiQvK+/gthDgWyhkHs2UALPQwIfd9ig==
-=YlII
------END PGP PUBLIC KEY BLOCK-----
-pub 1861C322C56014B2
-sub 9A347756830C4541
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQGiBEGVK0ERBADwhGhmOMvSgvGaqHW3ial0NS80ZXyE1EeNL6ke/WrXHB4dT6if
-inoAuUgRz3v9Na4rjSQ8YVFjn3NaZq1i8RM2KJOUU8ZkJ2AsrH6fqStjofLTd5ng
-iQaq2wLM5rTQfdjLsGQb1iDNDyCXU56+/l4mFZ2JiEGCq3Re9EFHelRBKQCg/7k0
-BIfyoFVTHw39PKaDBmCYF2sD/3CMD0J/WldhBM7gLOndH9/YEQaEMy+PJNXcfTWN
-WLygGPSOQdNBulyLkvcFIZjUTxFVakh7FbjMq3dsAP1oqthwmK7L8A1zsvRgp/TI
-4YMHkZSkgcs0PBBby+h/lpgRrWmtwjTPzql/K5xX4VSRS+umHye/7R+4ZEH7mABa
-m/ZABADkPGG2ECvfjNosPQDHZVFuF9oVaske0OjzxI+rU6sR1fJKtbOPl9d+bgz+
-df7rZ3mwppkPX2r/muUbd0CM1Se10sK7ZAoPYmWqHX+vB/oj3Jq+iqb6M5mDZzEz
-6h4hdnaGERyxbktZvhRV7Psco9CGi8o7RFUQTR79Y5ElnBavqLkCDQRBlStBEAgA
-9kJXtwh/CBdyorrWqULzBej5UxE5T7bxbrlLOCDaAadWoxTpj0BV89AHxstDqZSt
-90xkhkn4DIO9ZekX1KHTUPj1WV/cdlJPPT2N286Z4VeSWc39uK50T8X8dryDxUcw
-Yc58yWb/Ffm7/ZFexwGq01uejaClcjrUGvC/RgBYK+X0iP1YTknbzSC0neSRBzZr
-M2w4DUUdD3yIsxx8Wy2O9vPJI8BD8KVbGI2Ou1WMuF040zT9fBdXQ6MdGGzeMyEs
-tSr/POGxKUAYEY18hKcKctaGxAMZyAcpesqVDNmWn6vQClCbAkbTCD1mpF1Bn5x8
-vYlLIhkmuquiXsNV6TILOwACAggAw6kL0PhPZ/EPI0mPfmIYeaKUgTB8q47nDKY4
-6wDs1l/msVJHAVwGEBHuxmbC7r/qfAgfSW+/Lj4XbSLCqaZIWSu6lfY43IOIYXD4
-pe5cCnWkQij+h3LxRR6uDmBr5cwheHEuB2sMFU5lJiiQR1+eXYkPNK4FgVQpHLWe
-boODAlTf0j8gRR+aTs5eWXqfSA+UEsXpn6453bfZKELXkRmEznb4xyGWJaLW2Mlm
-aRlauYvc61M7FK8z15SSZbq6oictpnEcfkgnBxcNza3jZQV7WOWZ3BlD1nKQ661s
-bmS81/nLnxbov9ASs25K2olXBsHkERhjMnERedvv7avlmBwi1ohMBBgRAgAMBQJB
-lStBBRsMAAAAAAoJEBhhwyLFYBSyGTQAn2u/CvPzKwRv1FUkPYR751j9PGwDAJ4k
-Pt2uco8an9pO9/oqU6vlZUr38w==
-=alQS
------END PGP PUBLIC KEY BLOCK-----
-
-
------BEGIN PGP PUBLIC KEY BLOCK-----
-Comment: 10F3 C7A0 2ECA 55E5 02BA DCF3 991E FB94 DB91 127D
-Comment: Antoine Mottier <[email protected]>
-
-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
-zXFYXic=
-=YKsx
------END PGP PUBLIC KEY BLOCK-----
-
-
-pub E6EC76B4C6D3AE8E
-uid Sandy Zhang <[email protected]>
-
-sub 52410ED7B05AD2E9
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-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
-MmIzscVR5uuvPq1m2aUkkKLFWLBqkpuelMmW
-=W+so
+mQENBE1/v9YBCADaUiBecDzwU5g9Gmn3T9pAa17OlUl2iH0zn8tNTUg++bW/A9m3
+lWykQBlvPOi32lqZ5q7yewSNBGHl/pHRRVsIE6hhkVigNQbMztRFPshKCU/0RvKu
+29cew2T37crxYFGShYFwiJgOdQmXqhgIai0S2sW0Iavf5/PJJjXbrM1YIqUqkf73
+unns/lIDEiIDXCnGRNJKzGWTPsbt5R3hVo9mFraPUxapw3b9C/2GGDT/mwR51IOf
+rHkQby7Uh6XzDC8jWIH/BrFT6gFRZgKn9BRi3meB5vPip0rvcxPQnmvi2R4iUIyg
+DvCsUpXr6RpAEK6/p4k17JeglxCDlAbTDLUHABEBAAG0K0dhcnZpbiBMZUNsYWly
+ZSA8Z2FydmluLmxlY2xhaXJlQGdtYWlsLmNvbT6JATgEEwECACIFAk1/v9YCGwMG
+CwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEDU6Q24EPjFFHoQIAJXH6gRuS250
+q/EBG6vHSSqVWsck3vDwo22zGwAXOmuZ1YH7kCdzyfs9i3LnmtTyMUymvCBE0y94
+Bn2fFbin6CQsPS5U40NiquBo1wxyR8qO9pFpANlq4old1qW8t9mZBkwBjBpN6Pmf
+L5vbrgCECN46wVGqarPxseBgVjK7BB9E3qv9ymUrUJ8DSvL3b6vUwNEIqXDcZHKn
+xn4EX611YigPYiQazByw8UNq0a8kR262JN2ND64IxjBtFikdjuP5nck9Iz/yQ++V
+YpS2QfsaToCJfl8DhsVcht6N6pgo5FfDPOOhZyuDPCC+8j83JaeRS5sw6NcK03rk
+tNsnz4hef+u5AQ0ETX+/1gEIAJsFRfWMDIoJMsLPltDrrPsg1lpl2RFQuPqjZfPM
+0AAiAJTB/UhRfoMoijggV/m5r0y9d6LH4XhCynm+2VC/6TTxkvMKHAQroZFKzBKj
+vpCKXYaLgiMNi0XfsQ8p7/0nEUA1XXZDOrol9JJQ+3XxaQv3+64u+ZiZY7JrcH9M
+tytyVcsqOnQe8ST02pnpjwOIqh0TZt+HB17PWraDWRETspAMfbmoZSB9vEBiHsSo
+ELZYywFxcsxB+nbMunYONTjp/14MRKKlxeTLlH7CfJwaGV/2rvN+dKOymbg2uA4y
+/wrZrOJVE3G7IP5ehQ/Pitcb1TP6Q5LISdAo7zGFslS9iD8AEQEAAYkBHwQYAQIA
+CQUCTX+/1gIbDAAKCRA1OkNuBD4xRZ+QB/45ejZ9k7v3Yh4MtyY0th94E2h8UK3g
+T1axDIEyeWqQZaVxqvA8gG2kXhFP97c/WINUScMcdOCqTpUWRnQaZgcvD39/AFc5
+Bb3kN8Mo69YoOGkRRkvsY28NhRQBjn96QKUBmc4vGNBLV/XCsbhSD8T5KJdFszVc
+THg5q237mYucSzDfU9/0EUeSuFwwtng93Y4Rt5nDTm1MLcnBi5CTGw6Q1FL9orGN
+Hi6OXcwXDGKK1iiWjUjrmXwpgp5Zv+A4WcmG2dZHADjBlsgeHhfWCfxdJeMNZ5BO
+LL6SHLRuKiw6HUKNYs6BZNNdPQXapzKhCpSuFHW+84/4S2jX89AAfhTk
+=S97J
-----END PGP PUBLIC KEY BLOCK-----
diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index b0ef115..9a07f43 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -5,7 +5,7 @@
<verify-metadata>true</verify-metadata>
<verify-signatures>true</verify-signatures>
<key-servers enabled="false">
- <key-server uri="https://keyserver.ubuntu.com"/>
+ <key-server uri="https://keyserver.ubuntu.com"/>
</key-servers>
<trusted-artifacts>
<trust group="ch.qos.logback" name="logback-classic" version="1.2.11" reason="b/234161459"/>
@@ -231,6 +231,7 @@
<trusting group="org.jvnet.staxex"/>
<trusting group="^com[.]sun($|([.].*))" regex="true"/>
</trusted-key>
+ <trusted-key id="713da88be50911535fe716f5208b0ab1d63011c7" group="org.apache.tomcat" name="annotations-api" version="6.0.53"/>
<trusted-key id="720746177725a89207a7075bfd5dea07fcb690a8" group="org.codehaus.mojo"/>
<trusted-key id="73976c9c39c1479b84e2641a5a68a2249128e2c6" group="com.google.crypto.tink" name="tink-android" version="1.8.0"/>
<trusted-key id="748f15b2cf9ba8f024155e6ed7c92b70fa1c814d" group="org.apache.logging.log4j"/>
@@ -326,6 +327,7 @@
<trusted-key id="b46dc71e03feeb7f89d1f2491f7a8f87b9d8f501" group="org.jetbrains.trove4j"/>
<trusted-key id="b47034c19c9b1f3dc3702f8d476634a4694e716a" group="com.googlecode.java-diff-utils"/>
<trusted-key id="b4ac8cdc141af0ae468d16921da784ccb5c46dd5" group="net.bytebuddy"/>
+ <trusted-key id="b69a63a5ef7183dbc09199ac26e74b6874aee127" group="com.github.bumptech.glide"/>
<trusted-key id="b6e73d84ea4fcc47166087253faad2cd5ecbb314" group="org.apache.commons"/>
<trusted-key id="b801e2f8ef035068ec1139cc29579f18fa8fd93b" group="com.google.j2objc"/>
<trusted-key id="b9cca13c59f21c6ce841a8d1a4b1a03fb9c2ce23" group="com.squareup.leakcanary"/>
@@ -380,6 +382,7 @@
</trusted-key>
<trusted-key id="db0597e3144342256bc81e3ec727d053c4481cf5" group="org.tensorflow"/>
<trusted-key id="dbd744ace7ade6aa50dd591f66b50994442d2d40">
+ <trusting group="com.squareup.okhttp3"/>
<trusting group="com.squareup.okio"/>
<trusting group="com.squareup.wire"/>
</trusted-key>
@@ -476,6 +479,14 @@
<sha256 value="9fb18fd29b9dfe2e7ed5fe98a3be433a4c3cc4ea8f47f2b444155c39b4afddf5" origin="Generated by Gradle" reason="Unsigned. Used by media3."/>
</artifact>
</component>
+ <component group="com.google.ads.interactivemedia.v3" name="interactivemedia" version="3.30.1">
+ <artifact name="interactivemedia-3.30.1.aar">
+ <sha256 value="e2cc79031befb48c6212a0c71cf1535416a8903a9a373ba6c8b95dec95db83c0" origin="Generated by Gradle" reason="Artifact is not signed"/>
+ </artifact>
+ <artifact name="interactivemedia-3.30.1.pom">
+ <sha256 value="19f7d921a20d3be022620dd78bd708b2c16362cece59781c94b74a51f078243c" origin="Generated by Gradle" reason="Artifact is not signed"/>
+ </artifact>
+ </component>
<component group="com.google.android.apps.common.testing.accessibility.framework" name="accessibility-test-framework" version="2.1">
<artifact name="accessibility-test-framework-2.1.jar">
<sha256 value="7b0aa6ed7553597ce0610684a9f7eca8021eee218f2e2f427c04a7fbf5f920bd" origin="Generated by Gradle" reason="Artifact is not signed"/>
@@ -548,6 +559,14 @@
<sha256 value="c6898b1f71e69b15bf90c31fc3ef2de1cffbf454a770700f755b5a47ea48b540" origin="Generated by Gradle"/>
</artifact>
</component>
+ <component group="com.google.android.tv" name="tv-ads" version="1.0.0-alpha02">
+ <artifact name="tv-ads-1.0.0-alpha02.aar">
+ <sha256 value="d92a8eb07b926cdd199f3bdaf33478565cab125b92859e84f7abb5b7219bc5e4" origin="Generated by Gradle" reason="Artifact is not signed"/>
+ </artifact>
+ <artifact name="tv-ads-1.0.0-alpha02.pom">
+ <sha256 value="7b4315f0127628f2203ab66dfe490a9a07e06a38fb8e15ea2df1a35f1619308d" origin="Generated by Gradle" reason="Artifact is not signed"/>
+ </artifact>
+ </component>
<component group="com.google.camerax.effects" name="portrait" version="0.0.1">
<artifact name="portrait-0.0.1.aar">
<sha256 value="86d3e99a6123e3f830bf3f70392b30fc8d238374104ce00a02de20d8613af607" origin="Generated by Gradle"/>
diff --git a/graphics/filters/filters/api/public_plus_experimental_current.txt b/graphics/filters/filters/api/public_plus_experimental_current.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/graphics/filters/filters/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/graphics/graphics-core/api/current.txt b/graphics/graphics-core/api/current.txt
index 0079079..d7e7ba8 100644
--- a/graphics/graphics-core/api/current.txt
+++ b/graphics/graphics-core/api/current.txt
@@ -15,8 +15,8 @@
method public void cancel();
method public void commit();
method public boolean isValid();
- method public void release(boolean cancelPending, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onReleaseComplete);
method public void release(boolean cancelPending);
+ method public void release(boolean cancelPending, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onReleaseComplete);
method public void renderFrontBufferedLayer(T param);
method public void renderMultiBufferedLayer(java.util.Collection<? extends T> params);
}
@@ -37,15 +37,15 @@
}
@RequiresApi(android.os.Build.VERSION_CODES.Q) public final class GLFrontBufferedRenderer<T> {
- ctor public GLFrontBufferedRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLFrontBufferedRenderer.Callback<T> callback, optional androidx.graphics.opengl.GLRenderer? glRenderer);
ctor public GLFrontBufferedRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLFrontBufferedRenderer.Callback<T> callback);
+ ctor public GLFrontBufferedRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLFrontBufferedRenderer.Callback<T> callback, optional androidx.graphics.opengl.GLRenderer? glRenderer);
method public void cancel();
method public void clear();
method public void commit();
method public void execute(Runnable runnable);
method public boolean isValid();
- method public void release(boolean cancelPending, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onReleaseComplete);
method public void release(boolean cancelPending);
+ method public void release(boolean cancelPending, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onReleaseComplete);
method public void renderFrontBufferedLayer(T param);
method public void renderMultiBufferedLayer(java.util.Collection<? extends T> params);
}
@@ -89,19 +89,19 @@
method public androidx.graphics.opengl.GLRenderer.RenderTarget attach(android.view.SurfaceView surfaceView, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
method public androidx.graphics.opengl.GLRenderer.RenderTarget attach(android.view.TextureView textureView, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
method public androidx.graphics.opengl.GLRenderer.RenderTarget createRenderTarget(int width, int height, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
- method public void detach(androidx.graphics.opengl.GLRenderer.RenderTarget target, boolean cancelPending, optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onDetachComplete);
method public void detach(androidx.graphics.opengl.GLRenderer.RenderTarget target, boolean cancelPending);
+ method public void detach(androidx.graphics.opengl.GLRenderer.RenderTarget target, boolean cancelPending, optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onDetachComplete);
method public void execute(Runnable runnable);
method public boolean isRunning();
method public void registerEGLContextCallback(androidx.graphics.opengl.GLRenderer.EGLContextCallback callback);
- method public void requestRender(androidx.graphics.opengl.GLRenderer.RenderTarget target, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onRenderComplete);
method public void requestRender(androidx.graphics.opengl.GLRenderer.RenderTarget target);
- method public void resize(androidx.graphics.opengl.GLRenderer.RenderTarget target, int width, int height, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onResizeComplete);
+ method public void requestRender(androidx.graphics.opengl.GLRenderer.RenderTarget target, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onRenderComplete);
method public void resize(androidx.graphics.opengl.GLRenderer.RenderTarget target, int width, int height);
- method public void start(optional String name);
+ method public void resize(androidx.graphics.opengl.GLRenderer.RenderTarget target, int width, int height, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onResizeComplete);
method public void start();
- method public void stop(boolean cancelPending, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer,kotlin.Unit>? onStop);
+ method public void start(optional String name);
method public void stop(boolean cancelPending);
+ method public void stop(boolean cancelPending, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer,kotlin.Unit>? onStop);
method public void unregisterEGLContextCallback(androidx.graphics.opengl.GLRenderer.EGLContextCallback callback);
field public static final androidx.graphics.opengl.GLRenderer.Companion Companion;
}
@@ -120,13 +120,13 @@
}
public static final class GLRenderer.RenderTarget {
- method public void detach(boolean cancelPending, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onDetachComplete);
method public void detach(boolean cancelPending);
+ method public void detach(boolean cancelPending, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onDetachComplete);
method public boolean isAttached();
- method public void requestRender(optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onRenderComplete);
method public void requestRender();
- method public void resize(int width, int height, optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onResizeComplete);
+ method public void requestRender(optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onRenderComplete);
method public void resize(int width, int height);
+ method public void resize(int width, int height, optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onResizeComplete);
}
public interface SyncStrategy {
@@ -189,8 +189,8 @@
method public void initialize();
method public boolean isExtensionSupported(String extensionName);
method public android.opengl.EGLConfig? loadConfig(androidx.graphics.opengl.egl.EGLConfigAttributes configAttributes);
- method public boolean makeCurrent(android.opengl.EGLSurface drawSurface, optional android.opengl.EGLSurface readSurface);
method public boolean makeCurrent(android.opengl.EGLSurface drawSurface);
+ method public boolean makeCurrent(android.opengl.EGLSurface drawSurface, optional android.opengl.EGLSurface readSurface);
method public void release();
method public void swapAndFlushBuffers();
property public final android.opengl.EGLSurface currentDrawSurface;
@@ -288,12 +288,12 @@
method public void close();
method public void commit();
method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public void commitTransactionOnDraw(android.view.AttachedSurfaceControl attachedSurfaceControl);
- method public androidx.graphics.surface.SurfaceControlCompat.Transaction reparent(androidx.graphics.surface.SurfaceControlCompat surfaceControl, androidx.graphics.surface.SurfaceControlCompat? newParent);
method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public androidx.graphics.surface.SurfaceControlCompat.Transaction reparent(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.view.AttachedSurfaceControl attachedSurfaceControl);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction reparent(androidx.graphics.surface.SurfaceControlCompat surfaceControl, androidx.graphics.surface.SurfaceControlCompat? newParent);
method public androidx.graphics.surface.SurfaceControlCompat.Transaction setAlpha(androidx.graphics.surface.SurfaceControlCompat surfaceControl, float alpha);
- method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBuffer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.hardware.HardwareBuffer? buffer, optional androidx.hardware.SyncFenceCompat? fence, optional kotlin.jvm.functions.Function0<kotlin.Unit>? releaseCallback);
- method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBuffer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.hardware.HardwareBuffer? buffer, optional androidx.hardware.SyncFenceCompat? fence);
method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBuffer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.hardware.HardwareBuffer? buffer);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBuffer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.hardware.HardwareBuffer? buffer, optional androidx.hardware.SyncFenceCompat? fence);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBuffer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.hardware.HardwareBuffer? buffer, optional androidx.hardware.SyncFenceCompat? fence, optional kotlin.jvm.functions.Function0<kotlin.Unit>? releaseCallback);
method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBufferTransform(androidx.graphics.surface.SurfaceControlCompat surfaceControl, int transformation);
method public androidx.graphics.surface.SurfaceControlCompat.Transaction setCrop(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.graphics.Rect? crop);
method public androidx.graphics.surface.SurfaceControlCompat.Transaction setDamageRegion(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.graphics.Region? region);
diff --git a/graphics/graphics-core/api/public_plus_experimental_current.txt b/graphics/graphics-core/api/public_plus_experimental_current.txt
index 0079079..d7e7ba8 100644
--- a/graphics/graphics-core/api/public_plus_experimental_current.txt
+++ b/graphics/graphics-core/api/public_plus_experimental_current.txt
@@ -15,8 +15,8 @@
method public void cancel();
method public void commit();
method public boolean isValid();
- method public void release(boolean cancelPending, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onReleaseComplete);
method public void release(boolean cancelPending);
+ method public void release(boolean cancelPending, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onReleaseComplete);
method public void renderFrontBufferedLayer(T param);
method public void renderMultiBufferedLayer(java.util.Collection<? extends T> params);
}
@@ -37,15 +37,15 @@
}
@RequiresApi(android.os.Build.VERSION_CODES.Q) public final class GLFrontBufferedRenderer<T> {
- ctor public GLFrontBufferedRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLFrontBufferedRenderer.Callback<T> callback, optional androidx.graphics.opengl.GLRenderer? glRenderer);
ctor public GLFrontBufferedRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLFrontBufferedRenderer.Callback<T> callback);
+ ctor public GLFrontBufferedRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLFrontBufferedRenderer.Callback<T> callback, optional androidx.graphics.opengl.GLRenderer? glRenderer);
method public void cancel();
method public void clear();
method public void commit();
method public void execute(Runnable runnable);
method public boolean isValid();
- method public void release(boolean cancelPending, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onReleaseComplete);
method public void release(boolean cancelPending);
+ method public void release(boolean cancelPending, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onReleaseComplete);
method public void renderFrontBufferedLayer(T param);
method public void renderMultiBufferedLayer(java.util.Collection<? extends T> params);
}
@@ -89,19 +89,19 @@
method public androidx.graphics.opengl.GLRenderer.RenderTarget attach(android.view.SurfaceView surfaceView, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
method public androidx.graphics.opengl.GLRenderer.RenderTarget attach(android.view.TextureView textureView, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
method public androidx.graphics.opengl.GLRenderer.RenderTarget createRenderTarget(int width, int height, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
- method public void detach(androidx.graphics.opengl.GLRenderer.RenderTarget target, boolean cancelPending, optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onDetachComplete);
method public void detach(androidx.graphics.opengl.GLRenderer.RenderTarget target, boolean cancelPending);
+ method public void detach(androidx.graphics.opengl.GLRenderer.RenderTarget target, boolean cancelPending, optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onDetachComplete);
method public void execute(Runnable runnable);
method public boolean isRunning();
method public void registerEGLContextCallback(androidx.graphics.opengl.GLRenderer.EGLContextCallback callback);
- method public void requestRender(androidx.graphics.opengl.GLRenderer.RenderTarget target, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onRenderComplete);
method public void requestRender(androidx.graphics.opengl.GLRenderer.RenderTarget target);
- method public void resize(androidx.graphics.opengl.GLRenderer.RenderTarget target, int width, int height, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onResizeComplete);
+ method public void requestRender(androidx.graphics.opengl.GLRenderer.RenderTarget target, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onRenderComplete);
method public void resize(androidx.graphics.opengl.GLRenderer.RenderTarget target, int width, int height);
- method public void start(optional String name);
+ method public void resize(androidx.graphics.opengl.GLRenderer.RenderTarget target, int width, int height, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onResizeComplete);
method public void start();
- method public void stop(boolean cancelPending, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer,kotlin.Unit>? onStop);
+ method public void start(optional String name);
method public void stop(boolean cancelPending);
+ method public void stop(boolean cancelPending, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer,kotlin.Unit>? onStop);
method public void unregisterEGLContextCallback(androidx.graphics.opengl.GLRenderer.EGLContextCallback callback);
field public static final androidx.graphics.opengl.GLRenderer.Companion Companion;
}
@@ -120,13 +120,13 @@
}
public static final class GLRenderer.RenderTarget {
- method public void detach(boolean cancelPending, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onDetachComplete);
method public void detach(boolean cancelPending);
+ method public void detach(boolean cancelPending, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onDetachComplete);
method public boolean isAttached();
- method public void requestRender(optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onRenderComplete);
method public void requestRender();
- method public void resize(int width, int height, optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onResizeComplete);
+ method public void requestRender(optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onRenderComplete);
method public void resize(int width, int height);
+ method public void resize(int width, int height, optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onResizeComplete);
}
public interface SyncStrategy {
@@ -189,8 +189,8 @@
method public void initialize();
method public boolean isExtensionSupported(String extensionName);
method public android.opengl.EGLConfig? loadConfig(androidx.graphics.opengl.egl.EGLConfigAttributes configAttributes);
- method public boolean makeCurrent(android.opengl.EGLSurface drawSurface, optional android.opengl.EGLSurface readSurface);
method public boolean makeCurrent(android.opengl.EGLSurface drawSurface);
+ method public boolean makeCurrent(android.opengl.EGLSurface drawSurface, optional android.opengl.EGLSurface readSurface);
method public void release();
method public void swapAndFlushBuffers();
property public final android.opengl.EGLSurface currentDrawSurface;
@@ -288,12 +288,12 @@
method public void close();
method public void commit();
method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public void commitTransactionOnDraw(android.view.AttachedSurfaceControl attachedSurfaceControl);
- method public androidx.graphics.surface.SurfaceControlCompat.Transaction reparent(androidx.graphics.surface.SurfaceControlCompat surfaceControl, androidx.graphics.surface.SurfaceControlCompat? newParent);
method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public androidx.graphics.surface.SurfaceControlCompat.Transaction reparent(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.view.AttachedSurfaceControl attachedSurfaceControl);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction reparent(androidx.graphics.surface.SurfaceControlCompat surfaceControl, androidx.graphics.surface.SurfaceControlCompat? newParent);
method public androidx.graphics.surface.SurfaceControlCompat.Transaction setAlpha(androidx.graphics.surface.SurfaceControlCompat surfaceControl, float alpha);
- method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBuffer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.hardware.HardwareBuffer? buffer, optional androidx.hardware.SyncFenceCompat? fence, optional kotlin.jvm.functions.Function0<kotlin.Unit>? releaseCallback);
- method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBuffer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.hardware.HardwareBuffer? buffer, optional androidx.hardware.SyncFenceCompat? fence);
method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBuffer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.hardware.HardwareBuffer? buffer);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBuffer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.hardware.HardwareBuffer? buffer, optional androidx.hardware.SyncFenceCompat? fence);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBuffer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.hardware.HardwareBuffer? buffer, optional androidx.hardware.SyncFenceCompat? fence, optional kotlin.jvm.functions.Function0<kotlin.Unit>? releaseCallback);
method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBufferTransform(androidx.graphics.surface.SurfaceControlCompat surfaceControl, int transformation);
method public androidx.graphics.surface.SurfaceControlCompat.Transaction setCrop(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.graphics.Rect? crop);
method public androidx.graphics.surface.SurfaceControlCompat.Transaction setDamageRegion(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.graphics.Region? region);
diff --git a/graphics/graphics-core/api/restricted_current.txt b/graphics/graphics-core/api/restricted_current.txt
index f265e02..4a220ca 100644
--- a/graphics/graphics-core/api/restricted_current.txt
+++ b/graphics/graphics-core/api/restricted_current.txt
@@ -15,8 +15,8 @@
method public void cancel();
method public void commit();
method public boolean isValid();
- method public void release(boolean cancelPending, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onReleaseComplete);
method public void release(boolean cancelPending);
+ method public void release(boolean cancelPending, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onReleaseComplete);
method public void renderFrontBufferedLayer(T param);
method public void renderMultiBufferedLayer(java.util.Collection<? extends T> params);
}
@@ -37,15 +37,15 @@
}
@RequiresApi(android.os.Build.VERSION_CODES.Q) public final class GLFrontBufferedRenderer<T> {
- ctor public GLFrontBufferedRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLFrontBufferedRenderer.Callback<T> callback, optional androidx.graphics.opengl.GLRenderer? glRenderer);
ctor public GLFrontBufferedRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLFrontBufferedRenderer.Callback<T> callback);
+ ctor public GLFrontBufferedRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLFrontBufferedRenderer.Callback<T> callback, optional androidx.graphics.opengl.GLRenderer? glRenderer);
method public void cancel();
method public void clear();
method public void commit();
method public void execute(Runnable runnable);
method public boolean isValid();
- method public void release(boolean cancelPending, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onReleaseComplete);
method public void release(boolean cancelPending);
+ method public void release(boolean cancelPending, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onReleaseComplete);
method public void renderFrontBufferedLayer(T param);
method public void renderMultiBufferedLayer(java.util.Collection<? extends T> params);
}
@@ -89,19 +89,19 @@
method public androidx.graphics.opengl.GLRenderer.RenderTarget attach(android.view.SurfaceView surfaceView, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
method public androidx.graphics.opengl.GLRenderer.RenderTarget attach(android.view.TextureView textureView, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
method public androidx.graphics.opengl.GLRenderer.RenderTarget createRenderTarget(int width, int height, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
- method public void detach(androidx.graphics.opengl.GLRenderer.RenderTarget target, boolean cancelPending, optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onDetachComplete);
method public void detach(androidx.graphics.opengl.GLRenderer.RenderTarget target, boolean cancelPending);
+ method public void detach(androidx.graphics.opengl.GLRenderer.RenderTarget target, boolean cancelPending, optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onDetachComplete);
method public void execute(Runnable runnable);
method public boolean isRunning();
method public void registerEGLContextCallback(androidx.graphics.opengl.GLRenderer.EGLContextCallback callback);
- method public void requestRender(androidx.graphics.opengl.GLRenderer.RenderTarget target, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onRenderComplete);
method public void requestRender(androidx.graphics.opengl.GLRenderer.RenderTarget target);
- method public void resize(androidx.graphics.opengl.GLRenderer.RenderTarget target, int width, int height, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onResizeComplete);
+ method public void requestRender(androidx.graphics.opengl.GLRenderer.RenderTarget target, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onRenderComplete);
method public void resize(androidx.graphics.opengl.GLRenderer.RenderTarget target, int width, int height);
- method public void start(optional String name);
+ method public void resize(androidx.graphics.opengl.GLRenderer.RenderTarget target, int width, int height, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onResizeComplete);
method public void start();
- method public void stop(boolean cancelPending, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer,kotlin.Unit>? onStop);
+ method public void start(optional String name);
method public void stop(boolean cancelPending);
+ method public void stop(boolean cancelPending, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer,kotlin.Unit>? onStop);
method public void unregisterEGLContextCallback(androidx.graphics.opengl.GLRenderer.EGLContextCallback callback);
field public static final androidx.graphics.opengl.GLRenderer.Companion Companion;
}
@@ -120,13 +120,13 @@
}
public static final class GLRenderer.RenderTarget {
- method public void detach(boolean cancelPending, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onDetachComplete);
method public void detach(boolean cancelPending);
+ method public void detach(boolean cancelPending, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onDetachComplete);
method public boolean isAttached();
- method public void requestRender(optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onRenderComplete);
method public void requestRender();
- method public void resize(int width, int height, optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onResizeComplete);
+ method public void requestRender(optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onRenderComplete);
method public void resize(int width, int height);
+ method public void resize(int width, int height, optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onResizeComplete);
}
public interface SyncStrategy {
@@ -190,8 +190,8 @@
method public void initialize();
method public boolean isExtensionSupported(String extensionName);
method public android.opengl.EGLConfig? loadConfig(androidx.graphics.opengl.egl.EGLConfigAttributes configAttributes);
- method public boolean makeCurrent(android.opengl.EGLSurface drawSurface, optional android.opengl.EGLSurface readSurface);
method public boolean makeCurrent(android.opengl.EGLSurface drawSurface);
+ method public boolean makeCurrent(android.opengl.EGLSurface drawSurface, optional android.opengl.EGLSurface readSurface);
method public void release();
method public void swapAndFlushBuffers();
property public final android.opengl.EGLSurface currentDrawSurface;
@@ -289,12 +289,12 @@
method public void close();
method public void commit();
method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public void commitTransactionOnDraw(android.view.AttachedSurfaceControl attachedSurfaceControl);
- method public androidx.graphics.surface.SurfaceControlCompat.Transaction reparent(androidx.graphics.surface.SurfaceControlCompat surfaceControl, androidx.graphics.surface.SurfaceControlCompat? newParent);
method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public androidx.graphics.surface.SurfaceControlCompat.Transaction reparent(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.view.AttachedSurfaceControl attachedSurfaceControl);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction reparent(androidx.graphics.surface.SurfaceControlCompat surfaceControl, androidx.graphics.surface.SurfaceControlCompat? newParent);
method public androidx.graphics.surface.SurfaceControlCompat.Transaction setAlpha(androidx.graphics.surface.SurfaceControlCompat surfaceControl, float alpha);
- method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBuffer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.hardware.HardwareBuffer? buffer, optional androidx.hardware.SyncFenceCompat? fence, optional kotlin.jvm.functions.Function0<kotlin.Unit>? releaseCallback);
- method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBuffer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.hardware.HardwareBuffer? buffer, optional androidx.hardware.SyncFenceCompat? fence);
method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBuffer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.hardware.HardwareBuffer? buffer);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBuffer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.hardware.HardwareBuffer? buffer, optional androidx.hardware.SyncFenceCompat? fence);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBuffer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.hardware.HardwareBuffer? buffer, optional androidx.hardware.SyncFenceCompat? fence, optional kotlin.jvm.functions.Function0<kotlin.Unit>? releaseCallback);
method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBufferTransform(androidx.graphics.surface.SurfaceControlCompat surfaceControl, int transformation);
method public androidx.graphics.surface.SurfaceControlCompat.Transaction setCrop(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.graphics.Rect? crop);
method public androidx.graphics.surface.SurfaceControlCompat.Transaction setDamageRegion(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.graphics.Region? region);
diff --git a/graphics/graphics-core/build.gradle b/graphics/graphics-core/build.gradle
index f20971b..b99b3c8 100644
--- a/graphics/graphics-core/build.gradle
+++ b/graphics/graphics-core/build.gradle
@@ -61,7 +61,7 @@
}
androidx {
- name = "Android Graphics Core"
+ name = "Graphics Core"
type = LibraryType.PUBLISHED_LIBRARY
mavenVersion = LibraryVersions.GRAPHICS_CORE
inceptionYear = "2021"
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/BufferTransformHintResolverTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/BufferTransformHintResolverTest.kt
index 067f6ba..ff5d80f 100644
--- a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/BufferTransformHintResolverTest.kt
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/BufferTransformHintResolverTest.kt
@@ -27,8 +27,8 @@
import androidx.graphics.lowlatency.BufferTransformHintResolver.Companion.ORIENTATION_90
import androidx.graphics.lowlatency.BufferTransformHintResolver.Companion.UNKNOWN_TRANSFORM
import androidx.graphics.surface.SurfaceControlCompat.Companion.BUFFER_TRANSFORM_IDENTITY
-import androidx.graphics.surface.SurfaceControlCompat.Companion.BUFFER_TRANSFORM_ROTATE_270
import androidx.graphics.surface.SurfaceControlCompat.Companion.BUFFER_TRANSFORM_ROTATE_180
+import androidx.graphics.surface.SurfaceControlCompat.Companion.BUFFER_TRANSFORM_ROTATE_270
import androidx.graphics.surface.SurfaceControlCompat.Companion.BUFFER_TRANSFORM_ROTATE_90
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SdkSuppress
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/BufferTransformerTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/BufferTransformerTest.kt
index 786a9fa7..ff9a987 100644
--- a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/BufferTransformerTest.kt
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/BufferTransformerTest.kt
@@ -52,6 +52,7 @@
val expected = createMatrix()
assertEquals(transform.transform.size, SIZE)
assertIsEqual(transform.transform, expected)
+ assertEquals(BUFFER_TRANSFORM_IDENTITY, transform.computedTransform)
}
@Test
@@ -69,6 +70,7 @@
}
)
assertIsEqual(transform.transform, expected)
+ assertEquals(BUFFER_TRANSFORM_ROTATE_90, transform.computedTransform)
}
@Test
@@ -86,6 +88,7 @@
}
)
assertIsEqual(transform.transform, expected)
+ assertEquals(BUFFER_TRANSFORM_ROTATE_180, transform.computedTransform)
}
@Test
@@ -103,6 +106,7 @@
}
)
assertIsEqual(transform.transform, expected)
+ assertEquals(BUFFER_TRANSFORM_ROTATE_270, transform.computedTransform)
}
@Test
@@ -115,6 +119,7 @@
val expected = createMatrix()
assertEquals(transform.transform.size, SIZE)
assertIsEqual(transform.transform, expected)
+ assertEquals(BufferTransformHintResolver.UNKNOWN_TRANSFORM, transform.computedTransform)
}
private inline fun createMatrix(block: FloatArray.() -> Unit = {}): FloatArray =
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/SampleInkViewActivity.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/SampleInkViewActivity.kt
index 56ffdec..458ad0c 100644
--- a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/SampleInkViewActivity.kt
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/SampleInkViewActivity.kt
@@ -21,9 +21,9 @@
import android.os.Bundle
import android.view.Gravity
import android.view.View
-import android.widget.FrameLayout.LayoutParams.WRAP_CONTENT
import android.widget.Button
import android.widget.FrameLayout
+import android.widget.FrameLayout.LayoutParams.WRAP_CONTENT
import android.widget.LinearLayout.LayoutParams.MATCH_PARENT
import androidx.annotation.RequiresApi
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/GLRendererTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/GLRendererTest.kt
index 43f1de6..8d31c50 100644
--- a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/GLRendererTest.kt
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/GLRendererTest.kt
@@ -43,11 +43,11 @@
import androidx.graphics.isAllColor
import androidx.graphics.lowlatency.LineRenderer
import androidx.graphics.lowlatency.Rectangle
-import androidx.hardware.SyncFenceCompat
import androidx.graphics.opengl.egl.EGLManager
import androidx.graphics.opengl.egl.EGLSpec
import androidx.graphics.opengl.egl.supportsNativeAndroidFence
import androidx.graphics.verifyQuadrants
+import androidx.hardware.SyncFenceCompat
import androidx.lifecycle.Lifecycle.State
import androidx.test.core.app.ActivityScenario
import androidx.test.ext.junit.runners.AndroidJUnit4
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLManagerTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLManagerTest.kt
index d2a9139..8a8486e 100644
--- a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLManagerTest.kt
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLManagerTest.kt
@@ -32,11 +32,6 @@
import androidx.opengl.EGLBindings
import androidx.opengl.EGLExt
import androidx.opengl.EGLExt.Companion.EGL_ANDROID_CLIENT_BUFFER
-import androidx.opengl.EGLExt.Companion.EGL_SYNC_CONDITION_KHR
-import androidx.opengl.EGLExt.Companion.EGL_SYNC_FENCE_KHR
-import androidx.opengl.EGLExt.Companion.EGL_SYNC_NATIVE_FENCE_ANDROID
-import androidx.opengl.EGLExt.Companion.EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR
-import androidx.opengl.EGLExt.Companion.EGL_SYNC_TYPE_KHR
import androidx.opengl.EGLExt.Companion.EGL_ANDROID_IMAGE_NATIVE_BUFFER
import androidx.opengl.EGLExt.Companion.EGL_ANDROID_NATIVE_FENCE_SYNC
import androidx.opengl.EGLExt.Companion.EGL_FOREVER_KHR
@@ -44,8 +39,13 @@
import androidx.opengl.EGLExt.Companion.EGL_KHR_IMAGE
import androidx.opengl.EGLExt.Companion.EGL_KHR_IMAGE_BASE
import androidx.opengl.EGLExt.Companion.EGL_KHR_SURFACELESS_CONTEXT
+import androidx.opengl.EGLExt.Companion.EGL_SYNC_CONDITION_KHR
+import androidx.opengl.EGLExt.Companion.EGL_SYNC_FENCE_KHR
import androidx.opengl.EGLExt.Companion.EGL_SYNC_FLUSH_COMMANDS_BIT_KHR
+import androidx.opengl.EGLExt.Companion.EGL_SYNC_NATIVE_FENCE_ANDROID
+import androidx.opengl.EGLExt.Companion.EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR
import androidx.opengl.EGLExt.Companion.EGL_SYNC_STATUS_KHR
+import androidx.opengl.EGLExt.Companion.EGL_SYNC_TYPE_KHR
import androidx.opengl.EGLSyncKHR
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SdkSuppress
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/BufferTransformer.kt b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/BufferTransformer.kt
index 87b7537..6367e09 100644
--- a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/BufferTransformer.kt
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/BufferTransformer.kt
@@ -40,6 +40,9 @@
var glHeight = 0
private set
+ var computedTransform: Int = BufferTransformHintResolver.UNKNOWN_TRANSFORM
+ private set
+
fun invertBufferTransform(transform: Int): Int =
when (transform) {
SurfaceControlCompat.BUFFER_TRANSFORM_ROTATE_90 ->
@@ -65,6 +68,7 @@
val fHeight = height.toFloat()
glWidth = width
glHeight = height
+ computedTransform = transformHint
when (transformHint) {
SurfaceControlCompat.BUFFER_TRANSFORM_ROTATE_90 -> {
Matrix.setRotateM(mViewTransform, 0, -90f, 0f, 0f, 1f)
@@ -82,8 +86,12 @@
glWidth = height
glHeight = width
}
+ SurfaceControlCompat.BUFFER_TRANSFORM_IDENTITY -> {
+ Matrix.setIdentityM(mViewTransform, 0)
+ }
// Identity or unknown case, just set the identity matrix
else -> {
+ computedTransform = BufferTransformHintResolver.UNKNOWN_TRANSFORM
Matrix.setIdentityM(mViewTransform, 0)
}
}
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/opengl/FrameBufferRenderer.kt b/graphics/graphics-core/src/main/java/androidx/graphics/opengl/FrameBufferRenderer.kt
index 19a3ed5..bafcff8 100644
--- a/graphics/graphics-core/src/main/java/androidx/graphics/opengl/FrameBufferRenderer.kt
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/opengl/FrameBufferRenderer.kt
@@ -25,13 +25,13 @@
import android.util.Log
import android.view.Surface
import androidx.annotation.RequiresApi
-import androidx.hardware.SyncFenceCompat
import androidx.graphics.opengl.egl.EGLManager
import androidx.graphics.opengl.egl.EGLSpec
+import androidx.hardware.SyncFenceCompat
import androidx.opengl.EGLExt
-import java.util.concurrent.atomic.AtomicBoolean
import androidx.opengl.EGLExt.Companion.EGL_ANDROID_NATIVE_FENCE_SYNC
import androidx.opengl.EGLExt.Companion.EGL_KHR_FENCE_SYNC
+import java.util.concurrent.atomic.AtomicBoolean
/**
* [GLRenderer.RenderCallback] implementation that renders content into a frame buffer object
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlImpl.kt b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlImpl.kt
index 9d8af62..460f50a 100644
--- a/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlImpl.kt
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlImpl.kt
@@ -25,9 +25,9 @@
import android.view.SurfaceControl
import android.view.SurfaceView
import androidx.annotation.RequiresApi
+import androidx.graphics.surface.SurfaceControlCompat.TransactionCommittedListener
import androidx.hardware.SyncFenceCompat
import androidx.hardware.SyncFenceImpl
-import androidx.graphics.surface.SurfaceControlCompat.TransactionCommittedListener
import java.util.concurrent.Executor
/**
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlV29.kt b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlV29.kt
index c1e1701..8a303de 100644
--- a/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlV29.kt
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlV29.kt
@@ -26,9 +26,9 @@
import androidx.annotation.RequiresApi
import androidx.graphics.lowlatency.BufferTransformHintResolver.Companion.UNKNOWN_TRANSFORM
import androidx.graphics.lowlatency.FrontBufferUtils
-import androidx.hardware.SyncFenceImpl
import androidx.graphics.surface.SurfaceControlCompat.Companion.BUFFER_TRANSFORM_ROTATE_270
import androidx.graphics.surface.SurfaceControlCompat.Companion.BUFFER_TRANSFORM_ROTATE_90
+import androidx.hardware.SyncFenceImpl
import androidx.hardware.SyncFenceV19
import java.util.concurrent.Executor
diff --git a/graphics/graphics-core/src/main/java/androidx/hardware/SyncFenceCompat.kt b/graphics/graphics-core/src/main/java/androidx/hardware/SyncFenceCompat.kt
index 29bc952..2b17fc6 100644
--- a/graphics/graphics-core/src/main/java/androidx/hardware/SyncFenceCompat.kt
+++ b/graphics/graphics-core/src/main/java/androidx/hardware/SyncFenceCompat.kt
@@ -22,8 +22,8 @@
import android.os.Build
import androidx.annotation.RequiresApi
import androidx.graphics.lowlatency.FrontBufferUtils
-import androidx.opengl.EGLExt
import androidx.graphics.surface.SurfaceControlCompat
+import androidx.opengl.EGLExt
import androidx.opengl.EGLSyncKHR
/**
diff --git a/graphics/graphics-shapes/api/current.txt b/graphics/graphics-shapes/api/current.txt
index e4a534d..826e6be 100644
--- a/graphics/graphics-shapes/api/current.txt
+++ b/graphics/graphics-shapes/api/current.txt
@@ -26,15 +26,15 @@
method public android.graphics.PointF getP3();
method public static androidx.graphics.shapes.Cubic interpolate(androidx.graphics.shapes.Cubic start, androidx.graphics.shapes.Cubic end, float t);
method public operator androidx.graphics.shapes.Cubic plus(androidx.graphics.shapes.Cubic o);
- method public android.graphics.PointF pointOnCurve(float t, optional android.graphics.PointF result);
method public android.graphics.PointF pointOnCurve(float t);
+ method public android.graphics.PointF pointOnCurve(float t, optional android.graphics.PointF result);
method public androidx.graphics.shapes.Cubic reverse();
method public kotlin.Pair<androidx.graphics.shapes.Cubic,androidx.graphics.shapes.Cubic> split(float t);
method public static androidx.graphics.shapes.Cubic straightLine(android.graphics.PointF p0, android.graphics.PointF p1);
method public operator androidx.graphics.shapes.Cubic times(float x);
method public operator androidx.graphics.shapes.Cubic times(int x);
- method public void transform(android.graphics.Matrix matrix, optional float[] points);
method public void transform(android.graphics.Matrix matrix);
+ method public void transform(android.graphics.Matrix matrix, optional float[] points);
property public final android.graphics.PointF p0;
property public final android.graphics.PointF p1;
property public final android.graphics.PointF p2;
@@ -49,13 +49,13 @@
}
public final class CubicShape {
- ctor public CubicShape(java.util.List<androidx.graphics.shapes.Cubic> cubics);
ctor public CubicShape(androidx.graphics.shapes.CubicShape sourceShape);
+ ctor public CubicShape(java.util.List<androidx.graphics.shapes.Cubic> cubics);
method public android.graphics.RectF getBounds();
method public java.util.List<androidx.graphics.shapes.Cubic> getCubics();
method public android.graphics.Path toPath();
- method public void transform(android.graphics.Matrix matrix, optional float[] points);
method public void transform(android.graphics.Matrix matrix);
+ method public void transform(android.graphics.Matrix matrix, optional float[] points);
property public final android.graphics.RectF bounds;
property public final java.util.List<androidx.graphics.shapes.Cubic> cubics;
}
@@ -81,9 +81,9 @@
}
public final class RoundedPolygon {
- ctor public RoundedPolygon(java.util.List<? extends android.graphics.PointF> vertices, optional androidx.graphics.shapes.CornerRounding rounding, optional java.util.List<androidx.graphics.shapes.CornerRounding>? perVertexRounding, optional android.graphics.PointF? center);
- ctor public RoundedPolygon(@IntRange(from=3L) int numVertices, optional float radius, optional android.graphics.PointF center, optional androidx.graphics.shapes.CornerRounding rounding, optional java.util.List<androidx.graphics.shapes.CornerRounding>? perVertexRounding);
ctor public RoundedPolygon(androidx.graphics.shapes.RoundedPolygon source);
+ ctor public RoundedPolygon(@IntRange(from=3L) int numVertices, optional float radius, optional android.graphics.PointF center, optional androidx.graphics.shapes.CornerRounding rounding, optional java.util.List<androidx.graphics.shapes.CornerRounding>? perVertexRounding);
+ ctor public RoundedPolygon(java.util.List<? extends android.graphics.PointF> vertices, optional androidx.graphics.shapes.CornerRounding rounding, optional java.util.List<androidx.graphics.shapes.CornerRounding>? perVertexRounding, optional android.graphics.PointF? center);
method public android.graphics.RectF getBounds();
method public android.graphics.PointF getCenter();
method public void setBounds(android.graphics.RectF);
@@ -103,18 +103,18 @@
}
public final class ShapesKt {
- method public static androidx.graphics.shapes.RoundedPolygon circle(androidx.graphics.shapes.RoundedPolygon.Companion, optional @IntRange(from=3L) int numVertices, optional float radius, optional android.graphics.PointF center);
- method public static androidx.graphics.shapes.RoundedPolygon circle(androidx.graphics.shapes.RoundedPolygon.Companion, optional @IntRange(from=3L) int numVertices, optional float radius);
- method public static androidx.graphics.shapes.RoundedPolygon circle(androidx.graphics.shapes.RoundedPolygon.Companion, optional @IntRange(from=3L) int numVertices);
method public static androidx.graphics.shapes.RoundedPolygon circle(androidx.graphics.shapes.RoundedPolygon.Companion);
+ method public static androidx.graphics.shapes.RoundedPolygon circle(androidx.graphics.shapes.RoundedPolygon.Companion, optional @IntRange(from=3L) int numVertices);
+ method public static androidx.graphics.shapes.RoundedPolygon circle(androidx.graphics.shapes.RoundedPolygon.Companion, optional @IntRange(from=3L) int numVertices, optional float radius);
+ method public static androidx.graphics.shapes.RoundedPolygon circle(androidx.graphics.shapes.RoundedPolygon.Companion, optional @IntRange(from=3L) int numVertices, optional float radius, optional android.graphics.PointF center);
method public static androidx.graphics.shapes.RoundedPolygon rectangle(androidx.graphics.shapes.RoundedPolygon.Companion, optional float width, optional float height, optional androidx.graphics.shapes.CornerRounding rounding, optional java.util.List<androidx.graphics.shapes.CornerRounding>? perVertexRounding, optional android.graphics.PointF center);
- method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius, optional float radius, optional float innerRadius, optional androidx.graphics.shapes.CornerRounding rounding, optional androidx.graphics.shapes.CornerRounding? innerRounding, optional java.util.List<androidx.graphics.shapes.CornerRounding>? perVertexRounding, optional android.graphics.PointF center);
- method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius, optional float radius, optional float innerRadius, optional androidx.graphics.shapes.CornerRounding rounding, optional androidx.graphics.shapes.CornerRounding? innerRounding, optional java.util.List<androidx.graphics.shapes.CornerRounding>? perVertexRounding);
- method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius, optional float radius, optional float innerRadius, optional androidx.graphics.shapes.CornerRounding rounding, optional androidx.graphics.shapes.CornerRounding? innerRounding);
- method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius, optional float radius, optional float innerRadius, optional androidx.graphics.shapes.CornerRounding rounding);
- method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius, optional float radius, optional float innerRadius);
- method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius, optional float radius);
method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius);
+ method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius, optional float radius);
+ method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius, optional float radius, optional float innerRadius);
+ method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius, optional float radius, optional float innerRadius, optional androidx.graphics.shapes.CornerRounding rounding);
+ method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius, optional float radius, optional float innerRadius, optional androidx.graphics.shapes.CornerRounding rounding, optional androidx.graphics.shapes.CornerRounding? innerRounding);
+ method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius, optional float radius, optional float innerRadius, optional androidx.graphics.shapes.CornerRounding rounding, optional androidx.graphics.shapes.CornerRounding? innerRounding, optional java.util.List<androidx.graphics.shapes.CornerRounding>? perVertexRounding);
+ method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius, optional float radius, optional float innerRadius, optional androidx.graphics.shapes.CornerRounding rounding, optional androidx.graphics.shapes.CornerRounding? innerRounding, optional java.util.List<androidx.graphics.shapes.CornerRounding>? perVertexRounding, optional android.graphics.PointF center);
}
}
diff --git a/graphics/graphics-shapes/api/public_plus_experimental_current.txt b/graphics/graphics-shapes/api/public_plus_experimental_current.txt
deleted file mode 100644
index e4a534d..0000000
--- a/graphics/graphics-shapes/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,121 +0,0 @@
-// Signature format: 4.0
-package androidx.graphics.shapes {
-
- public final class CornerRounding {
- ctor public CornerRounding(optional @FloatRange(from=0.0) float radius, optional @FloatRange(from=0.0, to=1.0) float smoothing);
- method public float getRadius();
- method public float getSmoothing();
- property public final float radius;
- property public final float smoothing;
- field public static final androidx.graphics.shapes.CornerRounding.Companion Companion;
- field public static final androidx.graphics.shapes.CornerRounding Unrounded;
- }
-
- public static final class CornerRounding.Companion {
- }
-
- public final class Cubic {
- ctor public Cubic(android.graphics.PointF p0, android.graphics.PointF p1, android.graphics.PointF p2, android.graphics.PointF p3);
- ctor public Cubic(androidx.graphics.shapes.Cubic cubic);
- method public static androidx.graphics.shapes.Cubic circularArc(android.graphics.PointF center, android.graphics.PointF p0, android.graphics.PointF p1);
- method public operator androidx.graphics.shapes.Cubic div(float x);
- method public operator androidx.graphics.shapes.Cubic div(int x);
- method public android.graphics.PointF getP0();
- method public android.graphics.PointF getP1();
- method public android.graphics.PointF getP2();
- method public android.graphics.PointF getP3();
- method public static androidx.graphics.shapes.Cubic interpolate(androidx.graphics.shapes.Cubic start, androidx.graphics.shapes.Cubic end, float t);
- method public operator androidx.graphics.shapes.Cubic plus(androidx.graphics.shapes.Cubic o);
- method public android.graphics.PointF pointOnCurve(float t, optional android.graphics.PointF result);
- method public android.graphics.PointF pointOnCurve(float t);
- method public androidx.graphics.shapes.Cubic reverse();
- method public kotlin.Pair<androidx.graphics.shapes.Cubic,androidx.graphics.shapes.Cubic> split(float t);
- method public static androidx.graphics.shapes.Cubic straightLine(android.graphics.PointF p0, android.graphics.PointF p1);
- method public operator androidx.graphics.shapes.Cubic times(float x);
- method public operator androidx.graphics.shapes.Cubic times(int x);
- method public void transform(android.graphics.Matrix matrix, optional float[] points);
- method public void transform(android.graphics.Matrix matrix);
- property public final android.graphics.PointF p0;
- property public final android.graphics.PointF p1;
- property public final android.graphics.PointF p2;
- property public final android.graphics.PointF p3;
- field public static final androidx.graphics.shapes.Cubic.Companion Companion;
- }
-
- public static final class Cubic.Companion {
- method public androidx.graphics.shapes.Cubic circularArc(android.graphics.PointF center, android.graphics.PointF p0, android.graphics.PointF p1);
- method public androidx.graphics.shapes.Cubic interpolate(androidx.graphics.shapes.Cubic start, androidx.graphics.shapes.Cubic end, float t);
- method public androidx.graphics.shapes.Cubic straightLine(android.graphics.PointF p0, android.graphics.PointF p1);
- }
-
- public final class CubicShape {
- ctor public CubicShape(java.util.List<androidx.graphics.shapes.Cubic> cubics);
- ctor public CubicShape(androidx.graphics.shapes.CubicShape sourceShape);
- method public android.graphics.RectF getBounds();
- method public java.util.List<androidx.graphics.shapes.Cubic> getCubics();
- method public android.graphics.Path toPath();
- method public void transform(android.graphics.Matrix matrix, optional float[] points);
- method public void transform(android.graphics.Matrix matrix);
- property public final android.graphics.RectF bounds;
- property public final java.util.List<androidx.graphics.shapes.Cubic> cubics;
- }
-
- public final class CubicShapeKt {
- method public static void drawCubicShape(android.graphics.Canvas, androidx.graphics.shapes.CubicShape shape, android.graphics.Paint paint);
- }
-
- public final class Morph {
- ctor public Morph(androidx.graphics.shapes.RoundedPolygon start, androidx.graphics.shapes.RoundedPolygon end);
- method public java.util.List<androidx.graphics.shapes.Cubic> asCubics();
- method public android.graphics.Path asPath();
- method public android.graphics.RectF getBounds();
- method public float getProgress();
- method public void setProgress(float);
- method public void transform(android.graphics.Matrix matrix);
- property public final android.graphics.RectF bounds;
- property public final float progress;
- }
-
- public final class MorphKt {
- method public static void drawMorph(android.graphics.Canvas, androidx.graphics.shapes.Morph morph, android.graphics.Paint paint);
- }
-
- public final class RoundedPolygon {
- ctor public RoundedPolygon(java.util.List<? extends android.graphics.PointF> vertices, optional androidx.graphics.shapes.CornerRounding rounding, optional java.util.List<androidx.graphics.shapes.CornerRounding>? perVertexRounding, optional android.graphics.PointF? center);
- ctor public RoundedPolygon(@IntRange(from=3L) int numVertices, optional float radius, optional android.graphics.PointF center, optional androidx.graphics.shapes.CornerRounding rounding, optional java.util.List<androidx.graphics.shapes.CornerRounding>? perVertexRounding);
- ctor public RoundedPolygon(androidx.graphics.shapes.RoundedPolygon source);
- method public android.graphics.RectF getBounds();
- method public android.graphics.PointF getCenter();
- method public void setBounds(android.graphics.RectF);
- method public androidx.graphics.shapes.CubicShape toCubicShape();
- method public android.graphics.Path toPath();
- method public void transform(android.graphics.Matrix matrix);
- property public final android.graphics.RectF bounds;
- property public final android.graphics.PointF center;
- field public static final androidx.graphics.shapes.RoundedPolygon.Companion Companion;
- }
-
- public static final class RoundedPolygon.Companion {
- }
-
- public final class RoundedPolygonKt {
- method public static void drawPolygon(android.graphics.Canvas, androidx.graphics.shapes.RoundedPolygon polygon, android.graphics.Paint paint);
- }
-
- public final class ShapesKt {
- method public static androidx.graphics.shapes.RoundedPolygon circle(androidx.graphics.shapes.RoundedPolygon.Companion, optional @IntRange(from=3L) int numVertices, optional float radius, optional android.graphics.PointF center);
- method public static androidx.graphics.shapes.RoundedPolygon circle(androidx.graphics.shapes.RoundedPolygon.Companion, optional @IntRange(from=3L) int numVertices, optional float radius);
- method public static androidx.graphics.shapes.RoundedPolygon circle(androidx.graphics.shapes.RoundedPolygon.Companion, optional @IntRange(from=3L) int numVertices);
- method public static androidx.graphics.shapes.RoundedPolygon circle(androidx.graphics.shapes.RoundedPolygon.Companion);
- method public static androidx.graphics.shapes.RoundedPolygon rectangle(androidx.graphics.shapes.RoundedPolygon.Companion, optional float width, optional float height, optional androidx.graphics.shapes.CornerRounding rounding, optional java.util.List<androidx.graphics.shapes.CornerRounding>? perVertexRounding, optional android.graphics.PointF center);
- method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius, optional float radius, optional float innerRadius, optional androidx.graphics.shapes.CornerRounding rounding, optional androidx.graphics.shapes.CornerRounding? innerRounding, optional java.util.List<androidx.graphics.shapes.CornerRounding>? perVertexRounding, optional android.graphics.PointF center);
- method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius, optional float radius, optional float innerRadius, optional androidx.graphics.shapes.CornerRounding rounding, optional androidx.graphics.shapes.CornerRounding? innerRounding, optional java.util.List<androidx.graphics.shapes.CornerRounding>? perVertexRounding);
- method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius, optional float radius, optional float innerRadius, optional androidx.graphics.shapes.CornerRounding rounding, optional androidx.graphics.shapes.CornerRounding? innerRounding);
- method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius, optional float radius, optional float innerRadius, optional androidx.graphics.shapes.CornerRounding rounding);
- method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius, optional float radius, optional float innerRadius);
- method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius, optional float radius);
- method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius);
- }
-
-}
-
diff --git a/graphics/graphics-shapes/api/restricted_current.txt b/graphics/graphics-shapes/api/restricted_current.txt
index e4a534d..826e6be 100644
--- a/graphics/graphics-shapes/api/restricted_current.txt
+++ b/graphics/graphics-shapes/api/restricted_current.txt
@@ -26,15 +26,15 @@
method public android.graphics.PointF getP3();
method public static androidx.graphics.shapes.Cubic interpolate(androidx.graphics.shapes.Cubic start, androidx.graphics.shapes.Cubic end, float t);
method public operator androidx.graphics.shapes.Cubic plus(androidx.graphics.shapes.Cubic o);
- method public android.graphics.PointF pointOnCurve(float t, optional android.graphics.PointF result);
method public android.graphics.PointF pointOnCurve(float t);
+ method public android.graphics.PointF pointOnCurve(float t, optional android.graphics.PointF result);
method public androidx.graphics.shapes.Cubic reverse();
method public kotlin.Pair<androidx.graphics.shapes.Cubic,androidx.graphics.shapes.Cubic> split(float t);
method public static androidx.graphics.shapes.Cubic straightLine(android.graphics.PointF p0, android.graphics.PointF p1);
method public operator androidx.graphics.shapes.Cubic times(float x);
method public operator androidx.graphics.shapes.Cubic times(int x);
- method public void transform(android.graphics.Matrix matrix, optional float[] points);
method public void transform(android.graphics.Matrix matrix);
+ method public void transform(android.graphics.Matrix matrix, optional float[] points);
property public final android.graphics.PointF p0;
property public final android.graphics.PointF p1;
property public final android.graphics.PointF p2;
@@ -49,13 +49,13 @@
}
public final class CubicShape {
- ctor public CubicShape(java.util.List<androidx.graphics.shapes.Cubic> cubics);
ctor public CubicShape(androidx.graphics.shapes.CubicShape sourceShape);
+ ctor public CubicShape(java.util.List<androidx.graphics.shapes.Cubic> cubics);
method public android.graphics.RectF getBounds();
method public java.util.List<androidx.graphics.shapes.Cubic> getCubics();
method public android.graphics.Path toPath();
- method public void transform(android.graphics.Matrix matrix, optional float[] points);
method public void transform(android.graphics.Matrix matrix);
+ method public void transform(android.graphics.Matrix matrix, optional float[] points);
property public final android.graphics.RectF bounds;
property public final java.util.List<androidx.graphics.shapes.Cubic> cubics;
}
@@ -81,9 +81,9 @@
}
public final class RoundedPolygon {
- ctor public RoundedPolygon(java.util.List<? extends android.graphics.PointF> vertices, optional androidx.graphics.shapes.CornerRounding rounding, optional java.util.List<androidx.graphics.shapes.CornerRounding>? perVertexRounding, optional android.graphics.PointF? center);
- ctor public RoundedPolygon(@IntRange(from=3L) int numVertices, optional float radius, optional android.graphics.PointF center, optional androidx.graphics.shapes.CornerRounding rounding, optional java.util.List<androidx.graphics.shapes.CornerRounding>? perVertexRounding);
ctor public RoundedPolygon(androidx.graphics.shapes.RoundedPolygon source);
+ ctor public RoundedPolygon(@IntRange(from=3L) int numVertices, optional float radius, optional android.graphics.PointF center, optional androidx.graphics.shapes.CornerRounding rounding, optional java.util.List<androidx.graphics.shapes.CornerRounding>? perVertexRounding);
+ ctor public RoundedPolygon(java.util.List<? extends android.graphics.PointF> vertices, optional androidx.graphics.shapes.CornerRounding rounding, optional java.util.List<androidx.graphics.shapes.CornerRounding>? perVertexRounding, optional android.graphics.PointF? center);
method public android.graphics.RectF getBounds();
method public android.graphics.PointF getCenter();
method public void setBounds(android.graphics.RectF);
@@ -103,18 +103,18 @@
}
public final class ShapesKt {
- method public static androidx.graphics.shapes.RoundedPolygon circle(androidx.graphics.shapes.RoundedPolygon.Companion, optional @IntRange(from=3L) int numVertices, optional float radius, optional android.graphics.PointF center);
- method public static androidx.graphics.shapes.RoundedPolygon circle(androidx.graphics.shapes.RoundedPolygon.Companion, optional @IntRange(from=3L) int numVertices, optional float radius);
- method public static androidx.graphics.shapes.RoundedPolygon circle(androidx.graphics.shapes.RoundedPolygon.Companion, optional @IntRange(from=3L) int numVertices);
method public static androidx.graphics.shapes.RoundedPolygon circle(androidx.graphics.shapes.RoundedPolygon.Companion);
+ method public static androidx.graphics.shapes.RoundedPolygon circle(androidx.graphics.shapes.RoundedPolygon.Companion, optional @IntRange(from=3L) int numVertices);
+ method public static androidx.graphics.shapes.RoundedPolygon circle(androidx.graphics.shapes.RoundedPolygon.Companion, optional @IntRange(from=3L) int numVertices, optional float radius);
+ method public static androidx.graphics.shapes.RoundedPolygon circle(androidx.graphics.shapes.RoundedPolygon.Companion, optional @IntRange(from=3L) int numVertices, optional float radius, optional android.graphics.PointF center);
method public static androidx.graphics.shapes.RoundedPolygon rectangle(androidx.graphics.shapes.RoundedPolygon.Companion, optional float width, optional float height, optional androidx.graphics.shapes.CornerRounding rounding, optional java.util.List<androidx.graphics.shapes.CornerRounding>? perVertexRounding, optional android.graphics.PointF center);
- method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius, optional float radius, optional float innerRadius, optional androidx.graphics.shapes.CornerRounding rounding, optional androidx.graphics.shapes.CornerRounding? innerRounding, optional java.util.List<androidx.graphics.shapes.CornerRounding>? perVertexRounding, optional android.graphics.PointF center);
- method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius, optional float radius, optional float innerRadius, optional androidx.graphics.shapes.CornerRounding rounding, optional androidx.graphics.shapes.CornerRounding? innerRounding, optional java.util.List<androidx.graphics.shapes.CornerRounding>? perVertexRounding);
- method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius, optional float radius, optional float innerRadius, optional androidx.graphics.shapes.CornerRounding rounding, optional androidx.graphics.shapes.CornerRounding? innerRounding);
- method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius, optional float radius, optional float innerRadius, optional androidx.graphics.shapes.CornerRounding rounding);
- method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius, optional float radius, optional float innerRadius);
- method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius, optional float radius);
method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius);
+ method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius, optional float radius);
+ method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius, optional float radius, optional float innerRadius);
+ method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius, optional float radius, optional float innerRadius, optional androidx.graphics.shapes.CornerRounding rounding);
+ method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius, optional float radius, optional float innerRadius, optional androidx.graphics.shapes.CornerRounding rounding, optional androidx.graphics.shapes.CornerRounding? innerRounding);
+ method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius, optional float radius, optional float innerRadius, optional androidx.graphics.shapes.CornerRounding rounding, optional androidx.graphics.shapes.CornerRounding? innerRounding, optional java.util.List<androidx.graphics.shapes.CornerRounding>? perVertexRounding);
+ method public static androidx.graphics.shapes.RoundedPolygon star(androidx.graphics.shapes.RoundedPolygon.Companion, int numVerticesPerRadius, optional float radius, optional float innerRadius, optional androidx.graphics.shapes.CornerRounding rounding, optional androidx.graphics.shapes.CornerRounding? innerRounding, optional java.util.List<androidx.graphics.shapes.CornerRounding>? perVertexRounding, optional android.graphics.PointF center);
}
}
diff --git a/graphics/graphics-shapes/build.gradle b/graphics/graphics-shapes/build.gradle
index f04e619..5e5dfc1 100644
--- a/graphics/graphics-shapes/build.gradle
+++ b/graphics/graphics-shapes/build.gradle
@@ -37,7 +37,7 @@
}
androidx {
- name = "Android Graphics Shapes"
+ name = "Graphics Shapes"
type = LibraryType.PUBLISHED_LIBRARY
mavenVersion = LibraryVersions.GRAPHICS_SHAPES
inceptionYear = "2022"
diff --git a/gridlayout/gridlayout/api/1.1.0-beta01.txt b/gridlayout/gridlayout/api/1.1.0-beta01.txt
index abbe71f..475b482 100644
--- a/gridlayout/gridlayout/api/1.1.0-beta01.txt
+++ b/gridlayout/gridlayout/api/1.1.0-beta01.txt
@@ -2,9 +2,9 @@
package androidx.gridlayout.widget {
public class GridLayout extends android.view.ViewGroup {
- ctor public GridLayout(android.content.Context!, android.util.AttributeSet!, int);
- ctor public GridLayout(android.content.Context!, android.util.AttributeSet!);
ctor public GridLayout(android.content.Context!);
+ ctor public GridLayout(android.content.Context!, android.util.AttributeSet!);
+ ctor public GridLayout(android.content.Context!, android.util.AttributeSet!, int);
method protected androidx.gridlayout.widget.GridLayout.LayoutParams! generateDefaultLayoutParams();
method public androidx.gridlayout.widget.GridLayout.LayoutParams! generateLayoutParams(android.util.AttributeSet!);
method protected androidx.gridlayout.widget.GridLayout.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
@@ -24,14 +24,14 @@
method public void setRowCount(int);
method public void setRowOrderPreserved(boolean);
method public void setUseDefaultMargins(boolean);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int, androidx.gridlayout.widget.GridLayout.Alignment!, float);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, androidx.gridlayout.widget.GridLayout.Alignment!, float);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int, float);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, float);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int, androidx.gridlayout.widget.GridLayout.Alignment!);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, androidx.gridlayout.widget.GridLayout.Alignment!);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int);
method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int);
+ method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, androidx.gridlayout.widget.GridLayout.Alignment!);
+ method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, androidx.gridlayout.widget.GridLayout.Alignment!, float);
+ method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, float);
+ method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int);
+ method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int, androidx.gridlayout.widget.GridLayout.Alignment!);
+ method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int, androidx.gridlayout.widget.GridLayout.Alignment!, float);
+ method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int, float);
field public static final int ALIGN_BOUNDS = 0; // 0x0
field public static final int ALIGN_MARGINS = 1; // 0x1
field public static final androidx.gridlayout.widget.GridLayout.Alignment! BASELINE;
@@ -52,12 +52,12 @@
}
public static class GridLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
- ctor public GridLayout.LayoutParams(androidx.gridlayout.widget.GridLayout.Spec!, androidx.gridlayout.widget.GridLayout.Spec!);
ctor public GridLayout.LayoutParams();
+ ctor public GridLayout.LayoutParams(android.content.Context!, android.util.AttributeSet!);
ctor public GridLayout.LayoutParams(android.view.ViewGroup.LayoutParams!);
ctor public GridLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
ctor public GridLayout.LayoutParams(androidx.gridlayout.widget.GridLayout.LayoutParams!);
- ctor public GridLayout.LayoutParams(android.content.Context!, android.util.AttributeSet!);
+ ctor public GridLayout.LayoutParams(androidx.gridlayout.widget.GridLayout.Spec!, androidx.gridlayout.widget.GridLayout.Spec!);
method public void setGravity(int);
field public androidx.gridlayout.widget.GridLayout.Spec! columnSpec;
field public androidx.gridlayout.widget.GridLayout.Spec! rowSpec;
diff --git a/gridlayout/gridlayout/api/current.txt b/gridlayout/gridlayout/api/current.txt
index abbe71f..475b482 100644
--- a/gridlayout/gridlayout/api/current.txt
+++ b/gridlayout/gridlayout/api/current.txt
@@ -2,9 +2,9 @@
package androidx.gridlayout.widget {
public class GridLayout extends android.view.ViewGroup {
- ctor public GridLayout(android.content.Context!, android.util.AttributeSet!, int);
- ctor public GridLayout(android.content.Context!, android.util.AttributeSet!);
ctor public GridLayout(android.content.Context!);
+ ctor public GridLayout(android.content.Context!, android.util.AttributeSet!);
+ ctor public GridLayout(android.content.Context!, android.util.AttributeSet!, int);
method protected androidx.gridlayout.widget.GridLayout.LayoutParams! generateDefaultLayoutParams();
method public androidx.gridlayout.widget.GridLayout.LayoutParams! generateLayoutParams(android.util.AttributeSet!);
method protected androidx.gridlayout.widget.GridLayout.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
@@ -24,14 +24,14 @@
method public void setRowCount(int);
method public void setRowOrderPreserved(boolean);
method public void setUseDefaultMargins(boolean);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int, androidx.gridlayout.widget.GridLayout.Alignment!, float);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, androidx.gridlayout.widget.GridLayout.Alignment!, float);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int, float);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, float);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int, androidx.gridlayout.widget.GridLayout.Alignment!);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, androidx.gridlayout.widget.GridLayout.Alignment!);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int);
method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int);
+ method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, androidx.gridlayout.widget.GridLayout.Alignment!);
+ method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, androidx.gridlayout.widget.GridLayout.Alignment!, float);
+ method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, float);
+ method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int);
+ method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int, androidx.gridlayout.widget.GridLayout.Alignment!);
+ method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int, androidx.gridlayout.widget.GridLayout.Alignment!, float);
+ method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int, float);
field public static final int ALIGN_BOUNDS = 0; // 0x0
field public static final int ALIGN_MARGINS = 1; // 0x1
field public static final androidx.gridlayout.widget.GridLayout.Alignment! BASELINE;
@@ -52,12 +52,12 @@
}
public static class GridLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
- ctor public GridLayout.LayoutParams(androidx.gridlayout.widget.GridLayout.Spec!, androidx.gridlayout.widget.GridLayout.Spec!);
ctor public GridLayout.LayoutParams();
+ ctor public GridLayout.LayoutParams(android.content.Context!, android.util.AttributeSet!);
ctor public GridLayout.LayoutParams(android.view.ViewGroup.LayoutParams!);
ctor public GridLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
ctor public GridLayout.LayoutParams(androidx.gridlayout.widget.GridLayout.LayoutParams!);
- ctor public GridLayout.LayoutParams(android.content.Context!, android.util.AttributeSet!);
+ ctor public GridLayout.LayoutParams(androidx.gridlayout.widget.GridLayout.Spec!, androidx.gridlayout.widget.GridLayout.Spec!);
method public void setGravity(int);
field public androidx.gridlayout.widget.GridLayout.Spec! columnSpec;
field public androidx.gridlayout.widget.GridLayout.Spec! rowSpec;
diff --git a/gridlayout/gridlayout/api/public_plus_experimental_1.1.0-beta01.txt b/gridlayout/gridlayout/api/public_plus_experimental_1.1.0-beta01.txt
deleted file mode 100644
index abbe71f..0000000
--- a/gridlayout/gridlayout/api/public_plus_experimental_1.1.0-beta01.txt
+++ /dev/null
@@ -1,71 +0,0 @@
-// Signature format: 4.0
-package androidx.gridlayout.widget {
-
- public class GridLayout extends android.view.ViewGroup {
- ctor public GridLayout(android.content.Context!, android.util.AttributeSet!, int);
- ctor public GridLayout(android.content.Context!, android.util.AttributeSet!);
- ctor public GridLayout(android.content.Context!);
- method protected androidx.gridlayout.widget.GridLayout.LayoutParams! generateDefaultLayoutParams();
- method public androidx.gridlayout.widget.GridLayout.LayoutParams! generateLayoutParams(android.util.AttributeSet!);
- method protected androidx.gridlayout.widget.GridLayout.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
- method public int getAlignmentMode();
- method public int getColumnCount();
- method public int getOrientation();
- method public android.util.Printer! getPrinter();
- method public int getRowCount();
- method public boolean getUseDefaultMargins();
- method public boolean isColumnOrderPreserved();
- method public boolean isRowOrderPreserved();
- method public void setAlignmentMode(int);
- method public void setColumnCount(int);
- method public void setColumnOrderPreserved(boolean);
- method public void setOrientation(int);
- method public void setPrinter(android.util.Printer!);
- method public void setRowCount(int);
- method public void setRowOrderPreserved(boolean);
- method public void setUseDefaultMargins(boolean);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int, androidx.gridlayout.widget.GridLayout.Alignment!, float);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, androidx.gridlayout.widget.GridLayout.Alignment!, float);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int, float);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, float);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int, androidx.gridlayout.widget.GridLayout.Alignment!);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, androidx.gridlayout.widget.GridLayout.Alignment!);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int);
- field public static final int ALIGN_BOUNDS = 0; // 0x0
- field public static final int ALIGN_MARGINS = 1; // 0x1
- field public static final androidx.gridlayout.widget.GridLayout.Alignment! BASELINE;
- field public static final androidx.gridlayout.widget.GridLayout.Alignment! BOTTOM;
- field public static final androidx.gridlayout.widget.GridLayout.Alignment! CENTER;
- field public static final androidx.gridlayout.widget.GridLayout.Alignment! END;
- field public static final androidx.gridlayout.widget.GridLayout.Alignment! FILL;
- field public static final int HORIZONTAL = 0; // 0x0
- field public static final androidx.gridlayout.widget.GridLayout.Alignment! LEFT;
- field public static final androidx.gridlayout.widget.GridLayout.Alignment! RIGHT;
- field public static final androidx.gridlayout.widget.GridLayout.Alignment! START;
- field public static final androidx.gridlayout.widget.GridLayout.Alignment! TOP;
- field public static final int UNDEFINED = -2147483648; // 0x80000000
- field public static final int VERTICAL = 1; // 0x1
- }
-
- public abstract static class GridLayout.Alignment {
- }
-
- public static class GridLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
- ctor public GridLayout.LayoutParams(androidx.gridlayout.widget.GridLayout.Spec!, androidx.gridlayout.widget.GridLayout.Spec!);
- ctor public GridLayout.LayoutParams();
- ctor public GridLayout.LayoutParams(android.view.ViewGroup.LayoutParams!);
- ctor public GridLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
- ctor public GridLayout.LayoutParams(androidx.gridlayout.widget.GridLayout.LayoutParams!);
- ctor public GridLayout.LayoutParams(android.content.Context!, android.util.AttributeSet!);
- method public void setGravity(int);
- field public androidx.gridlayout.widget.GridLayout.Spec! columnSpec;
- field public androidx.gridlayout.widget.GridLayout.Spec! rowSpec;
- }
-
- public static class GridLayout.Spec {
- method public androidx.gridlayout.widget.GridLayout.Alignment! getAbsoluteAlignment(boolean);
- }
-
-}
-
diff --git a/gridlayout/gridlayout/api/public_plus_experimental_current.txt b/gridlayout/gridlayout/api/public_plus_experimental_current.txt
deleted file mode 100644
index abbe71f..0000000
--- a/gridlayout/gridlayout/api/public_plus_experimental_current.txt
+++ /dev/null
@@ -1,71 +0,0 @@
-// Signature format: 4.0
-package androidx.gridlayout.widget {
-
- public class GridLayout extends android.view.ViewGroup {
- ctor public GridLayout(android.content.Context!, android.util.AttributeSet!, int);
- ctor public GridLayout(android.content.Context!, android.util.AttributeSet!);
- ctor public GridLayout(android.content.Context!);
- method protected androidx.gridlayout.widget.GridLayout.LayoutParams! generateDefaultLayoutParams();
- method public androidx.gridlayout.widget.GridLayout.LayoutParams! generateLayoutParams(android.util.AttributeSet!);
- method protected androidx.gridlayout.widget.GridLayout.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
- method public int getAlignmentMode();
- method public int getColumnCount();
- method public int getOrientation();
- method public android.util.Printer! getPrinter();
- method public int getRowCount();
- method public boolean getUseDefaultMargins();
- method public boolean isColumnOrderPreserved();
- method public boolean isRowOrderPreserved();
- method public void setAlignmentMode(int);
- method public void setColumnCount(int);
- method public void setColumnOrderPreserved(boolean);
- method public void setOrientation(int);
- method public void setPrinter(android.util.Printer!);
- method public void setRowCount(int);
- method public void setRowOrderPreserved(boolean);
- method public void setUseDefaultMargins(boolean);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int, androidx.gridlayout.widget.GridLayout.Alignment!, float);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, androidx.gridlayout.widget.GridLayout.Alignment!, float);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int, float);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, float);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int, androidx.gridlayout.widget.GridLayout.Alignment!);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, androidx.gridlayout.widget.GridLayout.Alignment!);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int);
- field public static final int ALIGN_BOUNDS = 0; // 0x0
- field public static final int ALIGN_MARGINS = 1; // 0x1
- field public static final androidx.gridlayout.widget.GridLayout.Alignment! BASELINE;
- field public static final androidx.gridlayout.widget.GridLayout.Alignment! BOTTOM;
- field public static final androidx.gridlayout.widget.GridLayout.Alignment! CENTER;
- field public static final androidx.gridlayout.widget.GridLayout.Alignment! END;
- field public static final androidx.gridlayout.widget.GridLayout.Alignment! FILL;
- field public static final int HORIZONTAL = 0; // 0x0
- field public static final androidx.gridlayout.widget.GridLayout.Alignment! LEFT;
- field public static final androidx.gridlayout.widget.GridLayout.Alignment! RIGHT;
- field public static final androidx.gridlayout.widget.GridLayout.Alignment! START;
- field public static final androidx.gridlayout.widget.GridLayout.Alignment! TOP;
- field public static final int UNDEFINED = -2147483648; // 0x80000000
- field public static final int VERTICAL = 1; // 0x1
- }
-
- public abstract static class GridLayout.Alignment {
- }
-
- public static class GridLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
- ctor public GridLayout.LayoutParams(androidx.gridlayout.widget.GridLayout.Spec!, androidx.gridlayout.widget.GridLayout.Spec!);
- ctor public GridLayout.LayoutParams();
- ctor public GridLayout.LayoutParams(android.view.ViewGroup.LayoutParams!);
- ctor public GridLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
- ctor public GridLayout.LayoutParams(androidx.gridlayout.widget.GridLayout.LayoutParams!);
- ctor public GridLayout.LayoutParams(android.content.Context!, android.util.AttributeSet!);
- method public void setGravity(int);
- field public androidx.gridlayout.widget.GridLayout.Spec! columnSpec;
- field public androidx.gridlayout.widget.GridLayout.Spec! rowSpec;
- }
-
- public static class GridLayout.Spec {
- method public androidx.gridlayout.widget.GridLayout.Alignment! getAbsoluteAlignment(boolean);
- }
-
-}
-
diff --git a/gridlayout/gridlayout/api/restricted_1.1.0-beta01.txt b/gridlayout/gridlayout/api/restricted_1.1.0-beta01.txt
index abbe71f..475b482 100644
--- a/gridlayout/gridlayout/api/restricted_1.1.0-beta01.txt
+++ b/gridlayout/gridlayout/api/restricted_1.1.0-beta01.txt
@@ -2,9 +2,9 @@
package androidx.gridlayout.widget {
public class GridLayout extends android.view.ViewGroup {
- ctor public GridLayout(android.content.Context!, android.util.AttributeSet!, int);
- ctor public GridLayout(android.content.Context!, android.util.AttributeSet!);
ctor public GridLayout(android.content.Context!);
+ ctor public GridLayout(android.content.Context!, android.util.AttributeSet!);
+ ctor public GridLayout(android.content.Context!, android.util.AttributeSet!, int);
method protected androidx.gridlayout.widget.GridLayout.LayoutParams! generateDefaultLayoutParams();
method public androidx.gridlayout.widget.GridLayout.LayoutParams! generateLayoutParams(android.util.AttributeSet!);
method protected androidx.gridlayout.widget.GridLayout.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
@@ -24,14 +24,14 @@
method public void setRowCount(int);
method public void setRowOrderPreserved(boolean);
method public void setUseDefaultMargins(boolean);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int, androidx.gridlayout.widget.GridLayout.Alignment!, float);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, androidx.gridlayout.widget.GridLayout.Alignment!, float);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int, float);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, float);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int, androidx.gridlayout.widget.GridLayout.Alignment!);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, androidx.gridlayout.widget.GridLayout.Alignment!);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int);
method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int);
+ method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, androidx.gridlayout.widget.GridLayout.Alignment!);
+ method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, androidx.gridlayout.widget.GridLayout.Alignment!, float);
+ method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, float);
+ method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int);
+ method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int, androidx.gridlayout.widget.GridLayout.Alignment!);
+ method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int, androidx.gridlayout.widget.GridLayout.Alignment!, float);
+ method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int, float);
field public static final int ALIGN_BOUNDS = 0; // 0x0
field public static final int ALIGN_MARGINS = 1; // 0x1
field public static final androidx.gridlayout.widget.GridLayout.Alignment! BASELINE;
@@ -52,12 +52,12 @@
}
public static class GridLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
- ctor public GridLayout.LayoutParams(androidx.gridlayout.widget.GridLayout.Spec!, androidx.gridlayout.widget.GridLayout.Spec!);
ctor public GridLayout.LayoutParams();
+ ctor public GridLayout.LayoutParams(android.content.Context!, android.util.AttributeSet!);
ctor public GridLayout.LayoutParams(android.view.ViewGroup.LayoutParams!);
ctor public GridLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
ctor public GridLayout.LayoutParams(androidx.gridlayout.widget.GridLayout.LayoutParams!);
- ctor public GridLayout.LayoutParams(android.content.Context!, android.util.AttributeSet!);
+ ctor public GridLayout.LayoutParams(androidx.gridlayout.widget.GridLayout.Spec!, androidx.gridlayout.widget.GridLayout.Spec!);
method public void setGravity(int);
field public androidx.gridlayout.widget.GridLayout.Spec! columnSpec;
field public androidx.gridlayout.widget.GridLayout.Spec! rowSpec;
diff --git a/gridlayout/gridlayout/api/restricted_current.txt b/gridlayout/gridlayout/api/restricted_current.txt
index abbe71f..475b482 100644
--- a/gridlayout/gridlayout/api/restricted_current.txt
+++ b/gridlayout/gridlayout/api/restricted_current.txt
@@ -2,9 +2,9 @@
package androidx.gridlayout.widget {
public class GridLayout extends android.view.ViewGroup {
- ctor public GridLayout(android.content.Context!, android.util.AttributeSet!, int);
- ctor public GridLayout(android.content.Context!, android.util.AttributeSet!);
ctor public GridLayout(android.content.Context!);
+ ctor public GridLayout(android.content.Context!, android.util.AttributeSet!);
+ ctor public GridLayout(android.content.Context!, android.util.AttributeSet!, int);
method protected androidx.gridlayout.widget.GridLayout.LayoutParams! generateDefaultLayoutParams();
method public androidx.gridlayout.widget.GridLayout.LayoutParams! generateLayoutParams(android.util.AttributeSet!);
method protected androidx.gridlayout.widget.GridLayout.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
@@ -24,14 +24,14 @@
method public void setRowCount(int);
method public void setRowOrderPreserved(boolean);
method public void setUseDefaultMargins(boolean);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int, androidx.gridlayout.widget.GridLayout.Alignment!, float);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, androidx.gridlayout.widget.GridLayout.Alignment!, float);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int, float);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, float);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int, androidx.gridlayout.widget.GridLayout.Alignment!);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, androidx.gridlayout.widget.GridLayout.Alignment!);
- method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int);
method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int);
+ method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, androidx.gridlayout.widget.GridLayout.Alignment!);
+ method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, androidx.gridlayout.widget.GridLayout.Alignment!, float);
+ method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, float);
+ method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int);
+ method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int, androidx.gridlayout.widget.GridLayout.Alignment!);
+ method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int, androidx.gridlayout.widget.GridLayout.Alignment!, float);
+ method public static androidx.gridlayout.widget.GridLayout.Spec! spec(int, int, float);
field public static final int ALIGN_BOUNDS = 0; // 0x0
field public static final int ALIGN_MARGINS = 1; // 0x1
field public static final androidx.gridlayout.widget.GridLayout.Alignment! BASELINE;
@@ -52,12 +52,12 @@
}
public static class GridLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
- ctor public GridLayout.LayoutParams(androidx.gridlayout.widget.GridLayout.Spec!, androidx.gridlayout.widget.GridLayout.Spec!);
ctor public GridLayout.LayoutParams();
+ ctor public GridLayout.LayoutParams(android.content.Context!, android.util.AttributeSet!);
ctor public GridLayout.LayoutParams(android.view.ViewGroup.LayoutParams!);
ctor public GridLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
ctor public GridLayout.LayoutParams(androidx.gridlayout.widget.GridLayout.LayoutParams!);
- ctor public GridLayout.LayoutParams(android.content.Context!, android.util.AttributeSet!);
+ ctor public GridLayout.LayoutParams(androidx.gridlayout.widget.GridLayout.Spec!, androidx.gridlayout.widget.GridLayout.Spec!);
method public void setGravity(int);
field public androidx.gridlayout.widget.GridLayout.Spec! columnSpec;
field public androidx.gridlayout.widget.GridLayout.Spec! rowSpec;
diff --git a/gridlayout/gridlayout/build.gradle b/gridlayout/gridlayout/build.gradle
index 44db995..9fdbcdb 100644
--- a/gridlayout/gridlayout/build.gradle
+++ b/gridlayout/gridlayout/build.gradle
@@ -17,7 +17,7 @@
}
androidx {
- name = "Android Support Grid Layout"
+ name = "Grid Layout"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2013"
description = "Android Support Grid Layout"
diff --git a/health/connect/connect-client-proto/build.gradle b/health/connect/connect-client-proto/build.gradle
index 0458446..0ed136e 100644
--- a/health/connect/connect-client-proto/build.gradle
+++ b/health/connect/connect-client-proto/build.gradle
@@ -78,7 +78,7 @@
artifacts.add(jarjarConf.name, preferencesProtoJarJarTask.flatMap { it.archiveFile })
androidx {
- name = "AndroidX Health Connect Client Proto"
+ name = "Health Connect Client Proto"
publish = Publish.NONE
inceptionYear = "2022"
description = "Proto files for health-connect-client"
diff --git a/health/connect/connect-client/api/current.txt b/health/connect/connect-client/api/current.txt
index 0a8378c..138be5e 100644
--- a/health/connect/connect-client/api/current.txt
+++ b/health/connect/connect-client/api/current.txt
@@ -5,20 +5,20 @@
method public suspend Object? aggregate(androidx.health.connect.client.request.AggregateRequest request, kotlin.coroutines.Continuation<? super androidx.health.connect.client.aggregate.AggregationResult>);
method public suspend Object? aggregateGroupByDuration(androidx.health.connect.client.request.AggregateGroupByDurationRequest request, kotlin.coroutines.Continuation<? super java.util.List<? extends androidx.health.connect.client.aggregate.AggregationResultGroupedByDuration>>);
method public suspend Object? aggregateGroupByPeriod(androidx.health.connect.client.request.AggregateGroupByPeriodRequest request, kotlin.coroutines.Continuation<? super java.util.List<? extends androidx.health.connect.client.aggregate.AggregationResultGroupedByPeriod>>);
- method public suspend Object? deleteRecords(kotlin.reflect.KClass<? extends androidx.health.connect.client.records.Record> recordType, java.util.List<java.lang.String> recordIdsList, java.util.List<java.lang.String> clientRecordIdsList, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public suspend Object? deleteRecords(kotlin.reflect.KClass<? extends androidx.health.connect.client.records.Record> recordType, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public suspend Object? deleteRecords(kotlin.reflect.KClass<? extends androidx.health.connect.client.records.Record> recordType, java.util.List<java.lang.String> recordIdsList, java.util.List<java.lang.String> clientRecordIdsList, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public suspend Object? getChanges(String changesToken, kotlin.coroutines.Continuation<? super androidx.health.connect.client.response.ChangesResponse>);
method public suspend Object? getChangesToken(androidx.health.connect.client.request.ChangesTokenRequest request, kotlin.coroutines.Continuation<? super java.lang.String>);
method public default static String getHealthConnectSettingsAction();
- method public default static androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, optional String providerPackageName);
method public default static androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context);
+ method public default static androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, optional String providerPackageName);
method public androidx.health.connect.client.PermissionController getPermissionController();
- method public default static int getSdkStatus(android.content.Context context, optional String providerPackageName);
method public default static int getSdkStatus(android.content.Context context);
+ method public default static int getSdkStatus(android.content.Context context, optional String providerPackageName);
method public suspend Object? insertRecords(java.util.List<? extends androidx.health.connect.client.records.Record> records, kotlin.coroutines.Continuation<? super androidx.health.connect.client.response.InsertRecordsResponse>);
method @Deprecated public default static boolean isApiSupported();
- method @Deprecated public default static boolean isProviderAvailable(android.content.Context context, optional String providerPackageName);
method @Deprecated public default static boolean isProviderAvailable(android.content.Context context);
+ method @Deprecated public default static boolean isProviderAvailable(android.content.Context context, optional String providerPackageName);
method public suspend <T extends androidx.health.connect.client.records.Record> Object? readRecord(kotlin.reflect.KClass<T> recordType, String recordId, kotlin.coroutines.Continuation<? super androidx.health.connect.client.response.ReadRecordResponse<T>>);
method public suspend <T extends androidx.health.connect.client.records.Record> Object? readRecords(androidx.health.connect.client.request.ReadRecordsRequest<T> request, kotlin.coroutines.Continuation<? super androidx.health.connect.client.response.ReadRecordsResponse<T>>);
method public suspend Object? updateRecords(java.util.List<? extends androidx.health.connect.client.records.Record> records, kotlin.coroutines.Continuation<? super kotlin.Unit>);
@@ -32,13 +32,13 @@
public static final class HealthConnectClient.Companion {
method public String getHealthConnectSettingsAction();
- method public androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, optional String providerPackageName);
method public androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context);
- method public int getSdkStatus(android.content.Context context, optional String providerPackageName);
+ method public androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, optional String providerPackageName);
method public int getSdkStatus(android.content.Context context);
+ method public int getSdkStatus(android.content.Context context, optional String providerPackageName);
method @Deprecated public boolean isApiSupported();
- method @Deprecated public boolean isProviderAvailable(android.content.Context context, optional String providerPackageName);
method @Deprecated public boolean isProviderAvailable(android.content.Context context);
+ method @Deprecated public boolean isProviderAvailable(android.content.Context context, optional String providerPackageName);
property public final String ACTION_HEALTH_CONNECT_SETTINGS;
field public static final int SDK_AVAILABLE = 3; // 0x3
field public static final int SDK_UNAVAILABLE = 1; // 0x1
@@ -46,16 +46,16 @@
}
@kotlin.jvm.JvmDefaultWithCompatibility public interface PermissionController {
- method public default static androidx.activity.result.contract.ActivityResultContract<java.util.Set<java.lang.String>,java.util.Set<java.lang.String>> createRequestPermissionResultContract(optional String providerPackageName);
method public default static androidx.activity.result.contract.ActivityResultContract<java.util.Set<java.lang.String>,java.util.Set<java.lang.String>> createRequestPermissionResultContract();
+ method public default static androidx.activity.result.contract.ActivityResultContract<java.util.Set<java.lang.String>,java.util.Set<java.lang.String>> createRequestPermissionResultContract(optional String providerPackageName);
method public suspend Object? getGrantedPermissions(kotlin.coroutines.Continuation<? super java.util.Set<? extends java.lang.String>>);
method public suspend Object? revokeAllPermissions(kotlin.coroutines.Continuation<? super kotlin.Unit>);
field public static final androidx.health.connect.client.PermissionController.Companion Companion;
}
public static final class PermissionController.Companion {
- method public androidx.activity.result.contract.ActivityResultContract<java.util.Set<java.lang.String>,java.util.Set<java.lang.String>> createRequestPermissionResultContract(optional String providerPackageName);
method public androidx.activity.result.contract.ActivityResultContract<java.util.Set<java.lang.String>,java.util.Set<java.lang.String>> createRequestPermissionResultContract();
+ method public androidx.activity.result.contract.ActivityResultContract<java.util.Set<java.lang.String>,java.util.Set<java.lang.String>> createRequestPermissionResultContract(optional String providerPackageName);
}
}
@@ -421,21 +421,119 @@
public static final class ElevationGainedRecord.Companion {
}
+ public final class ExerciseLap {
+ ctor public ExerciseLap(java.time.Instant startTime, java.time.Instant endTime, optional androidx.health.connect.client.units.Length? length);
+ method public java.time.Instant getEndTime();
+ method public androidx.health.connect.client.units.Length? getLength();
+ method public java.time.Instant getStartTime();
+ property public final java.time.Instant endTime;
+ property public final androidx.health.connect.client.units.Length? length;
+ property public final java.time.Instant startTime;
+ }
+
+ public final class ExerciseSegment {
+ ctor public ExerciseSegment(java.time.Instant startTime, java.time.Instant endTime, int segmentType, optional int repetitions);
+ method public java.time.Instant getEndTime();
+ method public int getRepetitions();
+ method public int getSegmentType();
+ method public java.time.Instant getStartTime();
+ property public final java.time.Instant endTime;
+ property public final int repetitions;
+ property public final int segmentType;
+ property public final java.time.Instant startTime;
+ field public static final androidx.health.connect.client.records.ExerciseSegment.Companion Companion;
+ field public static final int EXERCISE_SEGMENT_TYPE_ARM_CURL = 1; // 0x1
+ field public static final int EXERCISE_SEGMENT_TYPE_BACK_EXTENSION = 2; // 0x2
+ field public static final int EXERCISE_SEGMENT_TYPE_BALL_SLAM = 3; // 0x3
+ field public static final int EXERCISE_SEGMENT_TYPE_BARBELL_SHOULDER_PRESS = 4; // 0x4
+ field public static final int EXERCISE_SEGMENT_TYPE_BENCH_PRESS = 5; // 0x5
+ field public static final int EXERCISE_SEGMENT_TYPE_BENCH_SIT_UP = 6; // 0x6
+ field public static final int EXERCISE_SEGMENT_TYPE_BIKING = 7; // 0x7
+ field public static final int EXERCISE_SEGMENT_TYPE_BIKING_STATIONARY = 8; // 0x8
+ field public static final int EXERCISE_SEGMENT_TYPE_BURPEE = 9; // 0x9
+ field public static final int EXERCISE_SEGMENT_TYPE_CRUNCH = 10; // 0xa
+ field public static final int EXERCISE_SEGMENT_TYPE_DEADLIFT = 11; // 0xb
+ field public static final int EXERCISE_SEGMENT_TYPE_DOUBLE_ARM_TRICEPS_EXTENSION = 12; // 0xc
+ field public static final int EXERCISE_SEGMENT_TYPE_DUMBBELL_CURL_LEFT_ARM = 13; // 0xd
+ field public static final int EXERCISE_SEGMENT_TYPE_DUMBBELL_CURL_RIGHT_ARM = 14; // 0xe
+ field public static final int EXERCISE_SEGMENT_TYPE_DUMBBELL_FRONT_RAISE = 15; // 0xf
+ field public static final int EXERCISE_SEGMENT_TYPE_DUMBBELL_LATERAL_RAISE = 16; // 0x10
+ field public static final int EXERCISE_SEGMENT_TYPE_DUMBBELL_ROW = 17; // 0x11
+ field public static final int EXERCISE_SEGMENT_TYPE_DUMBBELL_TRICEPS_EXTENSION_LEFT_ARM = 18; // 0x12
+ field public static final int EXERCISE_SEGMENT_TYPE_DUMBBELL_TRICEPS_EXTENSION_RIGHT_ARM = 19; // 0x13
+ field public static final int EXERCISE_SEGMENT_TYPE_DUMBBELL_TRICEPS_EXTENSION_TWO_ARM = 20; // 0x14
+ field public static final int EXERCISE_SEGMENT_TYPE_ELLIPTICAL = 21; // 0x15
+ field public static final int EXERCISE_SEGMENT_TYPE_FORWARD_TWIST = 22; // 0x16
+ field public static final int EXERCISE_SEGMENT_TYPE_FRONT_RAISE = 23; // 0x17
+ field public static final int EXERCISE_SEGMENT_TYPE_HIGH_INTENSITY_INTERVAL_TRAINING = 24; // 0x18
+ field public static final int EXERCISE_SEGMENT_TYPE_HIP_THRUST = 25; // 0x19
+ field public static final int EXERCISE_SEGMENT_TYPE_HULA_HOOP = 26; // 0x1a
+ field public static final int EXERCISE_SEGMENT_TYPE_JUMPING_JACK = 27; // 0x1b
+ field public static final int EXERCISE_SEGMENT_TYPE_JUMP_ROPE = 28; // 0x1c
+ field public static final int EXERCISE_SEGMENT_TYPE_KETTLEBELL_SWING = 29; // 0x1d
+ field public static final int EXERCISE_SEGMENT_TYPE_LATERAL_RAISE = 30; // 0x1e
+ field public static final int EXERCISE_SEGMENT_TYPE_LAT_PULL_DOWN = 31; // 0x1f
+ field public static final int EXERCISE_SEGMENT_TYPE_LEG_CURL = 32; // 0x20
+ field public static final int EXERCISE_SEGMENT_TYPE_LEG_EXTENSION = 33; // 0x21
+ field public static final int EXERCISE_SEGMENT_TYPE_LEG_PRESS = 34; // 0x22
+ field public static final int EXERCISE_SEGMENT_TYPE_LEG_RAISE = 35; // 0x23
+ field public static final int EXERCISE_SEGMENT_TYPE_LUNGE = 36; // 0x24
+ field public static final int EXERCISE_SEGMENT_TYPE_MOUNTAIN_CLIMBER = 37; // 0x25
+ field public static final int EXERCISE_SEGMENT_TYPE_OTHER_WORKOUT = 38; // 0x26
+ field public static final int EXERCISE_SEGMENT_TYPE_PAUSE = 39; // 0x27
+ field public static final int EXERCISE_SEGMENT_TYPE_PILATES = 40; // 0x28
+ field public static final int EXERCISE_SEGMENT_TYPE_PLANK = 41; // 0x29
+ field public static final int EXERCISE_SEGMENT_TYPE_PULL_UP = 42; // 0x2a
+ field public static final int EXERCISE_SEGMENT_TYPE_PUNCH = 43; // 0x2b
+ field public static final int EXERCISE_SEGMENT_TYPE_REST = 44; // 0x2c
+ field public static final int EXERCISE_SEGMENT_TYPE_ROWING_MACHINE = 45; // 0x2d
+ field public static final int EXERCISE_SEGMENT_TYPE_RUNNING = 46; // 0x2e
+ field public static final int EXERCISE_SEGMENT_TYPE_RUNNING_TREADMILL = 47; // 0x2f
+ field public static final int EXERCISE_SEGMENT_TYPE_SHOULDER_PRESS = 48; // 0x30
+ field public static final int EXERCISE_SEGMENT_TYPE_SINGLE_ARM_TRICEPS_EXTENSION = 49; // 0x31
+ field public static final int EXERCISE_SEGMENT_TYPE_SIT_UP = 50; // 0x32
+ field public static final int EXERCISE_SEGMENT_TYPE_SQUAT = 51; // 0x33
+ field public static final int EXERCISE_SEGMENT_TYPE_STAIR_CLIMBING = 52; // 0x34
+ field public static final int EXERCISE_SEGMENT_TYPE_STAIR_CLIMBING_MACHINE = 53; // 0x35
+ field public static final int EXERCISE_SEGMENT_TYPE_STRETCHING = 54; // 0x36
+ field public static final int EXERCISE_SEGMENT_TYPE_SWIMMING_BACKSTROKE = 55; // 0x37
+ field public static final int EXERCISE_SEGMENT_TYPE_SWIMMING_BREASTSTROKE = 56; // 0x38
+ field public static final int EXERCISE_SEGMENT_TYPE_SWIMMING_BUTTERFLY = 57; // 0x39
+ field public static final int EXERCISE_SEGMENT_TYPE_SWIMMING_FREESTYLE = 58; // 0x3a
+ field public static final int EXERCISE_SEGMENT_TYPE_SWIMMING_MIXED = 59; // 0x3b
+ field public static final int EXERCISE_SEGMENT_TYPE_SWIMMING_OPEN_WATER = 60; // 0x3c
+ field public static final int EXERCISE_SEGMENT_TYPE_SWIMMING_OTHER = 61; // 0x3d
+ field public static final int EXERCISE_SEGMENT_TYPE_SWIMMING_POOL = 62; // 0x3e
+ field public static final int EXERCISE_SEGMENT_TYPE_UNKNOWN = 0; // 0x0
+ field public static final int EXERCISE_SEGMENT_TYPE_UPPER_TWIST = 63; // 0x3f
+ field public static final int EXERCISE_SEGMENT_TYPE_WALKING = 64; // 0x40
+ field public static final int EXERCISE_SEGMENT_TYPE_WEIGHTLIFTING = 65; // 0x41
+ field public static final int EXERCISE_SEGMENT_TYPE_WHEELCHAIR = 66; // 0x42
+ field public static final int EXERCISE_SEGMENT_TYPE_YOGA = 67; // 0x43
+ }
+
+ public static final class ExerciseSegment.Companion {
+ }
+
public final class ExerciseSessionRecord implements androidx.health.connect.client.records.Record {
- ctor public ExerciseSessionRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, int exerciseType, optional String? title, optional String? notes, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+ ctor public ExerciseSessionRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, int exerciseType, optional String? title, optional String? notes, optional androidx.health.connect.client.records.metadata.Metadata metadata, optional java.util.List<androidx.health.connect.client.records.ExerciseSegment> segments, optional java.util.List<androidx.health.connect.client.records.ExerciseLap> laps);
method public java.time.Instant getEndTime();
method public java.time.ZoneOffset? getEndZoneOffset();
method public int getExerciseType();
+ method public java.util.List<androidx.health.connect.client.records.ExerciseLap> getLaps();
method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
method public String? getNotes();
+ method public java.util.List<androidx.health.connect.client.records.ExerciseSegment> getSegments();
method public java.time.Instant getStartTime();
method public java.time.ZoneOffset? getStartZoneOffset();
method public String? getTitle();
property public java.time.Instant endTime;
property public java.time.ZoneOffset? endZoneOffset;
property public final int exerciseType;
+ property public final java.util.List<androidx.health.connect.client.records.ExerciseLap> laps;
property public androidx.health.connect.client.records.metadata.Metadata metadata;
property public final String? notes;
+ property public final java.util.List<androidx.health.connect.client.records.ExerciseSegment> segments;
property public java.time.Instant startTime;
property public java.time.ZoneOffset? startZoneOffset;
property public final String? title;
@@ -944,11 +1042,12 @@
}
public final class SleepSessionRecord implements androidx.health.connect.client.records.Record {
- ctor public SleepSessionRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional String? title, optional String? notes, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+ ctor public SleepSessionRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional String? title, optional String? notes, optional java.util.List<androidx.health.connect.client.records.SleepSessionRecord.Stage> stages, optional androidx.health.connect.client.records.metadata.Metadata metadata);
method public java.time.Instant getEndTime();
method public java.time.ZoneOffset? getEndZoneOffset();
method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
method public String? getNotes();
+ method public java.util.List<androidx.health.connect.client.records.SleepSessionRecord.Stage> getStages();
method public java.time.Instant getStartTime();
method public java.time.ZoneOffset? getStartZoneOffset();
method public String? getTitle();
@@ -956,32 +1055,14 @@
property public java.time.ZoneOffset? endZoneOffset;
property public androidx.health.connect.client.records.metadata.Metadata metadata;
property public final String? notes;
+ property public final java.util.List<androidx.health.connect.client.records.SleepSessionRecord.Stage> stages;
property public java.time.Instant startTime;
property public java.time.ZoneOffset? startZoneOffset;
property public final String? title;
field public static final androidx.health.connect.client.records.SleepSessionRecord.Companion Companion;
field public static final androidx.health.connect.client.aggregate.AggregateMetric<java.time.Duration> SLEEP_DURATION_TOTAL;
- }
-
- public static final class SleepSessionRecord.Companion {
- }
-
- public final class SleepStageRecord implements androidx.health.connect.client.records.Record {
- ctor public SleepStageRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, int stage, optional androidx.health.connect.client.records.metadata.Metadata metadata);
- method public java.time.Instant getEndTime();
- method public java.time.ZoneOffset? getEndZoneOffset();
- method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
- method public int getStage();
- method public java.time.Instant getStartTime();
- method public java.time.ZoneOffset? getStartZoneOffset();
- property public java.time.Instant endTime;
- property public java.time.ZoneOffset? endZoneOffset;
- property public androidx.health.connect.client.records.metadata.Metadata metadata;
- property public final int stage;
- property public java.time.Instant startTime;
- property public java.time.ZoneOffset? startZoneOffset;
- field public static final androidx.health.connect.client.records.SleepStageRecord.Companion Companion;
field public static final int STAGE_TYPE_AWAKE = 1; // 0x1
+ field public static final int STAGE_TYPE_AWAKE_IN_BED = 7; // 0x7
field public static final int STAGE_TYPE_DEEP = 5; // 0x5
field public static final int STAGE_TYPE_LIGHT = 4; // 0x4
field public static final int STAGE_TYPE_OUT_OF_BED = 3; // 0x3
@@ -990,7 +1071,17 @@
field public static final int STAGE_TYPE_UNKNOWN = 0; // 0x0
}
- public static final class SleepStageRecord.Companion {
+ public static final class SleepSessionRecord.Companion {
+ }
+
+ public static final class SleepSessionRecord.Stage {
+ ctor public SleepSessionRecord.Stage(java.time.Instant startTime, java.time.Instant endTime, int stage);
+ method public java.time.Instant getEndTime();
+ method public int getStage();
+ method public java.time.Instant getStartTime();
+ property public final java.time.Instant endTime;
+ property public final int stage;
+ property public final java.time.Instant startTime;
}
public final class SpeedRecord implements androidx.health.connect.client.records.Record {
diff --git a/health/connect/connect-client/api/public_plus_experimental_current.txt b/health/connect/connect-client/api/public_plus_experimental_current.txt
index 0a8378c..138be5e 100644
--- a/health/connect/connect-client/api/public_plus_experimental_current.txt
+++ b/health/connect/connect-client/api/public_plus_experimental_current.txt
@@ -5,20 +5,20 @@
method public suspend Object? aggregate(androidx.health.connect.client.request.AggregateRequest request, kotlin.coroutines.Continuation<? super androidx.health.connect.client.aggregate.AggregationResult>);
method public suspend Object? aggregateGroupByDuration(androidx.health.connect.client.request.AggregateGroupByDurationRequest request, kotlin.coroutines.Continuation<? super java.util.List<? extends androidx.health.connect.client.aggregate.AggregationResultGroupedByDuration>>);
method public suspend Object? aggregateGroupByPeriod(androidx.health.connect.client.request.AggregateGroupByPeriodRequest request, kotlin.coroutines.Continuation<? super java.util.List<? extends androidx.health.connect.client.aggregate.AggregationResultGroupedByPeriod>>);
- method public suspend Object? deleteRecords(kotlin.reflect.KClass<? extends androidx.health.connect.client.records.Record> recordType, java.util.List<java.lang.String> recordIdsList, java.util.List<java.lang.String> clientRecordIdsList, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public suspend Object? deleteRecords(kotlin.reflect.KClass<? extends androidx.health.connect.client.records.Record> recordType, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public suspend Object? deleteRecords(kotlin.reflect.KClass<? extends androidx.health.connect.client.records.Record> recordType, java.util.List<java.lang.String> recordIdsList, java.util.List<java.lang.String> clientRecordIdsList, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public suspend Object? getChanges(String changesToken, kotlin.coroutines.Continuation<? super androidx.health.connect.client.response.ChangesResponse>);
method public suspend Object? getChangesToken(androidx.health.connect.client.request.ChangesTokenRequest request, kotlin.coroutines.Continuation<? super java.lang.String>);
method public default static String getHealthConnectSettingsAction();
- method public default static androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, optional String providerPackageName);
method public default static androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context);
+ method public default static androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, optional String providerPackageName);
method public androidx.health.connect.client.PermissionController getPermissionController();
- method public default static int getSdkStatus(android.content.Context context, optional String providerPackageName);
method public default static int getSdkStatus(android.content.Context context);
+ method public default static int getSdkStatus(android.content.Context context, optional String providerPackageName);
method public suspend Object? insertRecords(java.util.List<? extends androidx.health.connect.client.records.Record> records, kotlin.coroutines.Continuation<? super androidx.health.connect.client.response.InsertRecordsResponse>);
method @Deprecated public default static boolean isApiSupported();
- method @Deprecated public default static boolean isProviderAvailable(android.content.Context context, optional String providerPackageName);
method @Deprecated public default static boolean isProviderAvailable(android.content.Context context);
+ method @Deprecated public default static boolean isProviderAvailable(android.content.Context context, optional String providerPackageName);
method public suspend <T extends androidx.health.connect.client.records.Record> Object? readRecord(kotlin.reflect.KClass<T> recordType, String recordId, kotlin.coroutines.Continuation<? super androidx.health.connect.client.response.ReadRecordResponse<T>>);
method public suspend <T extends androidx.health.connect.client.records.Record> Object? readRecords(androidx.health.connect.client.request.ReadRecordsRequest<T> request, kotlin.coroutines.Continuation<? super androidx.health.connect.client.response.ReadRecordsResponse<T>>);
method public suspend Object? updateRecords(java.util.List<? extends androidx.health.connect.client.records.Record> records, kotlin.coroutines.Continuation<? super kotlin.Unit>);
@@ -32,13 +32,13 @@
public static final class HealthConnectClient.Companion {
method public String getHealthConnectSettingsAction();
- method public androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, optional String providerPackageName);
method public androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context);
- method public int getSdkStatus(android.content.Context context, optional String providerPackageName);
+ method public androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, optional String providerPackageName);
method public int getSdkStatus(android.content.Context context);
+ method public int getSdkStatus(android.content.Context context, optional String providerPackageName);
method @Deprecated public boolean isApiSupported();
- method @Deprecated public boolean isProviderAvailable(android.content.Context context, optional String providerPackageName);
method @Deprecated public boolean isProviderAvailable(android.content.Context context);
+ method @Deprecated public boolean isProviderAvailable(android.content.Context context, optional String providerPackageName);
property public final String ACTION_HEALTH_CONNECT_SETTINGS;
field public static final int SDK_AVAILABLE = 3; // 0x3
field public static final int SDK_UNAVAILABLE = 1; // 0x1
@@ -46,16 +46,16 @@
}
@kotlin.jvm.JvmDefaultWithCompatibility public interface PermissionController {
- method public default static androidx.activity.result.contract.ActivityResultContract<java.util.Set<java.lang.String>,java.util.Set<java.lang.String>> createRequestPermissionResultContract(optional String providerPackageName);
method public default static androidx.activity.result.contract.ActivityResultContract<java.util.Set<java.lang.String>,java.util.Set<java.lang.String>> createRequestPermissionResultContract();
+ method public default static androidx.activity.result.contract.ActivityResultContract<java.util.Set<java.lang.String>,java.util.Set<java.lang.String>> createRequestPermissionResultContract(optional String providerPackageName);
method public suspend Object? getGrantedPermissions(kotlin.coroutines.Continuation<? super java.util.Set<? extends java.lang.String>>);
method public suspend Object? revokeAllPermissions(kotlin.coroutines.Continuation<? super kotlin.Unit>);
field public static final androidx.health.connect.client.PermissionController.Companion Companion;
}
public static final class PermissionController.Companion {
- method public androidx.activity.result.contract.ActivityResultContract<java.util.Set<java.lang.String>,java.util.Set<java.lang.String>> createRequestPermissionResultContract(optional String providerPackageName);
method public androidx.activity.result.contract.ActivityResultContract<java.util.Set<java.lang.String>,java.util.Set<java.lang.String>> createRequestPermissionResultContract();
+ method public androidx.activity.result.contract.ActivityResultContract<java.util.Set<java.lang.String>,java.util.Set<java.lang.String>> createRequestPermissionResultContract(optional String providerPackageName);
}
}
@@ -421,21 +421,119 @@
public static final class ElevationGainedRecord.Companion {
}
+ public final class ExerciseLap {
+ ctor public ExerciseLap(java.time.Instant startTime, java.time.Instant endTime, optional androidx.health.connect.client.units.Length? length);
+ method public java.time.Instant getEndTime();
+ method public androidx.health.connect.client.units.Length? getLength();
+ method public java.time.Instant getStartTime();
+ property public final java.time.Instant endTime;
+ property public final androidx.health.connect.client.units.Length? length;
+ property public final java.time.Instant startTime;
+ }
+
+ public final class ExerciseSegment {
+ ctor public ExerciseSegment(java.time.Instant startTime, java.time.Instant endTime, int segmentType, optional int repetitions);
+ method public java.time.Instant getEndTime();
+ method public int getRepetitions();
+ method public int getSegmentType();
+ method public java.time.Instant getStartTime();
+ property public final java.time.Instant endTime;
+ property public final int repetitions;
+ property public final int segmentType;
+ property public final java.time.Instant startTime;
+ field public static final androidx.health.connect.client.records.ExerciseSegment.Companion Companion;
+ field public static final int EXERCISE_SEGMENT_TYPE_ARM_CURL = 1; // 0x1
+ field public static final int EXERCISE_SEGMENT_TYPE_BACK_EXTENSION = 2; // 0x2
+ field public static final int EXERCISE_SEGMENT_TYPE_BALL_SLAM = 3; // 0x3
+ field public static final int EXERCISE_SEGMENT_TYPE_BARBELL_SHOULDER_PRESS = 4; // 0x4
+ field public static final int EXERCISE_SEGMENT_TYPE_BENCH_PRESS = 5; // 0x5
+ field public static final int EXERCISE_SEGMENT_TYPE_BENCH_SIT_UP = 6; // 0x6
+ field public static final int EXERCISE_SEGMENT_TYPE_BIKING = 7; // 0x7
+ field public static final int EXERCISE_SEGMENT_TYPE_BIKING_STATIONARY = 8; // 0x8
+ field public static final int EXERCISE_SEGMENT_TYPE_BURPEE = 9; // 0x9
+ field public static final int EXERCISE_SEGMENT_TYPE_CRUNCH = 10; // 0xa
+ field public static final int EXERCISE_SEGMENT_TYPE_DEADLIFT = 11; // 0xb
+ field public static final int EXERCISE_SEGMENT_TYPE_DOUBLE_ARM_TRICEPS_EXTENSION = 12; // 0xc
+ field public static final int EXERCISE_SEGMENT_TYPE_DUMBBELL_CURL_LEFT_ARM = 13; // 0xd
+ field public static final int EXERCISE_SEGMENT_TYPE_DUMBBELL_CURL_RIGHT_ARM = 14; // 0xe
+ field public static final int EXERCISE_SEGMENT_TYPE_DUMBBELL_FRONT_RAISE = 15; // 0xf
+ field public static final int EXERCISE_SEGMENT_TYPE_DUMBBELL_LATERAL_RAISE = 16; // 0x10
+ field public static final int EXERCISE_SEGMENT_TYPE_DUMBBELL_ROW = 17; // 0x11
+ field public static final int EXERCISE_SEGMENT_TYPE_DUMBBELL_TRICEPS_EXTENSION_LEFT_ARM = 18; // 0x12
+ field public static final int EXERCISE_SEGMENT_TYPE_DUMBBELL_TRICEPS_EXTENSION_RIGHT_ARM = 19; // 0x13
+ field public static final int EXERCISE_SEGMENT_TYPE_DUMBBELL_TRICEPS_EXTENSION_TWO_ARM = 20; // 0x14
+ field public static final int EXERCISE_SEGMENT_TYPE_ELLIPTICAL = 21; // 0x15
+ field public static final int EXERCISE_SEGMENT_TYPE_FORWARD_TWIST = 22; // 0x16
+ field public static final int EXERCISE_SEGMENT_TYPE_FRONT_RAISE = 23; // 0x17
+ field public static final int EXERCISE_SEGMENT_TYPE_HIGH_INTENSITY_INTERVAL_TRAINING = 24; // 0x18
+ field public static final int EXERCISE_SEGMENT_TYPE_HIP_THRUST = 25; // 0x19
+ field public static final int EXERCISE_SEGMENT_TYPE_HULA_HOOP = 26; // 0x1a
+ field public static final int EXERCISE_SEGMENT_TYPE_JUMPING_JACK = 27; // 0x1b
+ field public static final int EXERCISE_SEGMENT_TYPE_JUMP_ROPE = 28; // 0x1c
+ field public static final int EXERCISE_SEGMENT_TYPE_KETTLEBELL_SWING = 29; // 0x1d
+ field public static final int EXERCISE_SEGMENT_TYPE_LATERAL_RAISE = 30; // 0x1e
+ field public static final int EXERCISE_SEGMENT_TYPE_LAT_PULL_DOWN = 31; // 0x1f
+ field public static final int EXERCISE_SEGMENT_TYPE_LEG_CURL = 32; // 0x20
+ field public static final int EXERCISE_SEGMENT_TYPE_LEG_EXTENSION = 33; // 0x21
+ field public static final int EXERCISE_SEGMENT_TYPE_LEG_PRESS = 34; // 0x22
+ field public static final int EXERCISE_SEGMENT_TYPE_LEG_RAISE = 35; // 0x23
+ field public static final int EXERCISE_SEGMENT_TYPE_LUNGE = 36; // 0x24
+ field public static final int EXERCISE_SEGMENT_TYPE_MOUNTAIN_CLIMBER = 37; // 0x25
+ field public static final int EXERCISE_SEGMENT_TYPE_OTHER_WORKOUT = 38; // 0x26
+ field public static final int EXERCISE_SEGMENT_TYPE_PAUSE = 39; // 0x27
+ field public static final int EXERCISE_SEGMENT_TYPE_PILATES = 40; // 0x28
+ field public static final int EXERCISE_SEGMENT_TYPE_PLANK = 41; // 0x29
+ field public static final int EXERCISE_SEGMENT_TYPE_PULL_UP = 42; // 0x2a
+ field public static final int EXERCISE_SEGMENT_TYPE_PUNCH = 43; // 0x2b
+ field public static final int EXERCISE_SEGMENT_TYPE_REST = 44; // 0x2c
+ field public static final int EXERCISE_SEGMENT_TYPE_ROWING_MACHINE = 45; // 0x2d
+ field public static final int EXERCISE_SEGMENT_TYPE_RUNNING = 46; // 0x2e
+ field public static final int EXERCISE_SEGMENT_TYPE_RUNNING_TREADMILL = 47; // 0x2f
+ field public static final int EXERCISE_SEGMENT_TYPE_SHOULDER_PRESS = 48; // 0x30
+ field public static final int EXERCISE_SEGMENT_TYPE_SINGLE_ARM_TRICEPS_EXTENSION = 49; // 0x31
+ field public static final int EXERCISE_SEGMENT_TYPE_SIT_UP = 50; // 0x32
+ field public static final int EXERCISE_SEGMENT_TYPE_SQUAT = 51; // 0x33
+ field public static final int EXERCISE_SEGMENT_TYPE_STAIR_CLIMBING = 52; // 0x34
+ field public static final int EXERCISE_SEGMENT_TYPE_STAIR_CLIMBING_MACHINE = 53; // 0x35
+ field public static final int EXERCISE_SEGMENT_TYPE_STRETCHING = 54; // 0x36
+ field public static final int EXERCISE_SEGMENT_TYPE_SWIMMING_BACKSTROKE = 55; // 0x37
+ field public static final int EXERCISE_SEGMENT_TYPE_SWIMMING_BREASTSTROKE = 56; // 0x38
+ field public static final int EXERCISE_SEGMENT_TYPE_SWIMMING_BUTTERFLY = 57; // 0x39
+ field public static final int EXERCISE_SEGMENT_TYPE_SWIMMING_FREESTYLE = 58; // 0x3a
+ field public static final int EXERCISE_SEGMENT_TYPE_SWIMMING_MIXED = 59; // 0x3b
+ field public static final int EXERCISE_SEGMENT_TYPE_SWIMMING_OPEN_WATER = 60; // 0x3c
+ field public static final int EXERCISE_SEGMENT_TYPE_SWIMMING_OTHER = 61; // 0x3d
+ field public static final int EXERCISE_SEGMENT_TYPE_SWIMMING_POOL = 62; // 0x3e
+ field public static final int EXERCISE_SEGMENT_TYPE_UNKNOWN = 0; // 0x0
+ field public static final int EXERCISE_SEGMENT_TYPE_UPPER_TWIST = 63; // 0x3f
+ field public static final int EXERCISE_SEGMENT_TYPE_WALKING = 64; // 0x40
+ field public static final int EXERCISE_SEGMENT_TYPE_WEIGHTLIFTING = 65; // 0x41
+ field public static final int EXERCISE_SEGMENT_TYPE_WHEELCHAIR = 66; // 0x42
+ field public static final int EXERCISE_SEGMENT_TYPE_YOGA = 67; // 0x43
+ }
+
+ public static final class ExerciseSegment.Companion {
+ }
+
public final class ExerciseSessionRecord implements androidx.health.connect.client.records.Record {
- ctor public ExerciseSessionRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, int exerciseType, optional String? title, optional String? notes, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+ ctor public ExerciseSessionRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, int exerciseType, optional String? title, optional String? notes, optional androidx.health.connect.client.records.metadata.Metadata metadata, optional java.util.List<androidx.health.connect.client.records.ExerciseSegment> segments, optional java.util.List<androidx.health.connect.client.records.ExerciseLap> laps);
method public java.time.Instant getEndTime();
method public java.time.ZoneOffset? getEndZoneOffset();
method public int getExerciseType();
+ method public java.util.List<androidx.health.connect.client.records.ExerciseLap> getLaps();
method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
method public String? getNotes();
+ method public java.util.List<androidx.health.connect.client.records.ExerciseSegment> getSegments();
method public java.time.Instant getStartTime();
method public java.time.ZoneOffset? getStartZoneOffset();
method public String? getTitle();
property public java.time.Instant endTime;
property public java.time.ZoneOffset? endZoneOffset;
property public final int exerciseType;
+ property public final java.util.List<androidx.health.connect.client.records.ExerciseLap> laps;
property public androidx.health.connect.client.records.metadata.Metadata metadata;
property public final String? notes;
+ property public final java.util.List<androidx.health.connect.client.records.ExerciseSegment> segments;
property public java.time.Instant startTime;
property public java.time.ZoneOffset? startZoneOffset;
property public final String? title;
@@ -944,11 +1042,12 @@
}
public final class SleepSessionRecord implements androidx.health.connect.client.records.Record {
- ctor public SleepSessionRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional String? title, optional String? notes, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+ ctor public SleepSessionRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional String? title, optional String? notes, optional java.util.List<androidx.health.connect.client.records.SleepSessionRecord.Stage> stages, optional androidx.health.connect.client.records.metadata.Metadata metadata);
method public java.time.Instant getEndTime();
method public java.time.ZoneOffset? getEndZoneOffset();
method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
method public String? getNotes();
+ method public java.util.List<androidx.health.connect.client.records.SleepSessionRecord.Stage> getStages();
method public java.time.Instant getStartTime();
method public java.time.ZoneOffset? getStartZoneOffset();
method public String? getTitle();
@@ -956,32 +1055,14 @@
property public java.time.ZoneOffset? endZoneOffset;
property public androidx.health.connect.client.records.metadata.Metadata metadata;
property public final String? notes;
+ property public final java.util.List<androidx.health.connect.client.records.SleepSessionRecord.Stage> stages;
property public java.time.Instant startTime;
property public java.time.ZoneOffset? startZoneOffset;
property public final String? title;
field public static final androidx.health.connect.client.records.SleepSessionRecord.Companion Companion;
field public static final androidx.health.connect.client.aggregate.AggregateMetric<java.time.Duration> SLEEP_DURATION_TOTAL;
- }
-
- public static final class SleepSessionRecord.Companion {
- }
-
- public final class SleepStageRecord implements androidx.health.connect.client.records.Record {
- ctor public SleepStageRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, int stage, optional androidx.health.connect.client.records.metadata.Metadata metadata);
- method public java.time.Instant getEndTime();
- method public java.time.ZoneOffset? getEndZoneOffset();
- method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
- method public int getStage();
- method public java.time.Instant getStartTime();
- method public java.time.ZoneOffset? getStartZoneOffset();
- property public java.time.Instant endTime;
- property public java.time.ZoneOffset? endZoneOffset;
- property public androidx.health.connect.client.records.metadata.Metadata metadata;
- property public final int stage;
- property public java.time.Instant startTime;
- property public java.time.ZoneOffset? startZoneOffset;
- field public static final androidx.health.connect.client.records.SleepStageRecord.Companion Companion;
field public static final int STAGE_TYPE_AWAKE = 1; // 0x1
+ field public static final int STAGE_TYPE_AWAKE_IN_BED = 7; // 0x7
field public static final int STAGE_TYPE_DEEP = 5; // 0x5
field public static final int STAGE_TYPE_LIGHT = 4; // 0x4
field public static final int STAGE_TYPE_OUT_OF_BED = 3; // 0x3
@@ -990,7 +1071,17 @@
field public static final int STAGE_TYPE_UNKNOWN = 0; // 0x0
}
- public static final class SleepStageRecord.Companion {
+ public static final class SleepSessionRecord.Companion {
+ }
+
+ public static final class SleepSessionRecord.Stage {
+ ctor public SleepSessionRecord.Stage(java.time.Instant startTime, java.time.Instant endTime, int stage);
+ method public java.time.Instant getEndTime();
+ method public int getStage();
+ method public java.time.Instant getStartTime();
+ property public final java.time.Instant endTime;
+ property public final int stage;
+ property public final java.time.Instant startTime;
}
public final class SpeedRecord implements androidx.health.connect.client.records.Record {
diff --git a/health/connect/connect-client/api/restricted_current.txt b/health/connect/connect-client/api/restricted_current.txt
index 970eb61..4da244d 100644
--- a/health/connect/connect-client/api/restricted_current.txt
+++ b/health/connect/connect-client/api/restricted_current.txt
@@ -5,20 +5,20 @@
method public suspend Object? aggregate(androidx.health.connect.client.request.AggregateRequest request, kotlin.coroutines.Continuation<? super androidx.health.connect.client.aggregate.AggregationResult>);
method public suspend Object? aggregateGroupByDuration(androidx.health.connect.client.request.AggregateGroupByDurationRequest request, kotlin.coroutines.Continuation<? super java.util.List<? extends androidx.health.connect.client.aggregate.AggregationResultGroupedByDuration>>);
method public suspend Object? aggregateGroupByPeriod(androidx.health.connect.client.request.AggregateGroupByPeriodRequest request, kotlin.coroutines.Continuation<? super java.util.List<? extends androidx.health.connect.client.aggregate.AggregationResultGroupedByPeriod>>);
- method public suspend Object? deleteRecords(kotlin.reflect.KClass<? extends androidx.health.connect.client.records.Record> recordType, java.util.List<java.lang.String> recordIdsList, java.util.List<java.lang.String> clientRecordIdsList, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public suspend Object? deleteRecords(kotlin.reflect.KClass<? extends androidx.health.connect.client.records.Record> recordType, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public suspend Object? deleteRecords(kotlin.reflect.KClass<? extends androidx.health.connect.client.records.Record> recordType, java.util.List<java.lang.String> recordIdsList, java.util.List<java.lang.String> clientRecordIdsList, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public suspend Object? getChanges(String changesToken, kotlin.coroutines.Continuation<? super androidx.health.connect.client.response.ChangesResponse>);
method public suspend Object? getChangesToken(androidx.health.connect.client.request.ChangesTokenRequest request, kotlin.coroutines.Continuation<? super java.lang.String>);
method public default static String getHealthConnectSettingsAction();
- method public default static androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, optional String providerPackageName);
method public default static androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context);
+ method public default static androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, optional String providerPackageName);
method public androidx.health.connect.client.PermissionController getPermissionController();
- method public default static int getSdkStatus(android.content.Context context, optional String providerPackageName);
method public default static int getSdkStatus(android.content.Context context);
+ method public default static int getSdkStatus(android.content.Context context, optional String providerPackageName);
method public suspend Object? insertRecords(java.util.List<? extends androidx.health.connect.client.records.Record> records, kotlin.coroutines.Continuation<? super androidx.health.connect.client.response.InsertRecordsResponse>);
method @Deprecated public default static boolean isApiSupported();
- method @Deprecated public default static boolean isProviderAvailable(android.content.Context context, optional String providerPackageName);
method @Deprecated public default static boolean isProviderAvailable(android.content.Context context);
+ method @Deprecated public default static boolean isProviderAvailable(android.content.Context context, optional String providerPackageName);
method public suspend <T extends androidx.health.connect.client.records.Record> Object? readRecord(kotlin.reflect.KClass<T> recordType, String recordId, kotlin.coroutines.Continuation<? super androidx.health.connect.client.response.ReadRecordResponse<T>>);
method public suspend <T extends androidx.health.connect.client.records.Record> Object? readRecords(androidx.health.connect.client.request.ReadRecordsRequest<T> request, kotlin.coroutines.Continuation<? super androidx.health.connect.client.response.ReadRecordsResponse<T>>);
method public suspend Object? updateRecords(java.util.List<? extends androidx.health.connect.client.records.Record> records, kotlin.coroutines.Continuation<? super kotlin.Unit>);
@@ -32,13 +32,13 @@
public static final class HealthConnectClient.Companion {
method public String getHealthConnectSettingsAction();
- method public androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, optional String providerPackageName);
method public androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context);
- method public int getSdkStatus(android.content.Context context, optional String providerPackageName);
+ method public androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, optional String providerPackageName);
method public int getSdkStatus(android.content.Context context);
+ method public int getSdkStatus(android.content.Context context, optional String providerPackageName);
method @Deprecated public boolean isApiSupported();
- method @Deprecated public boolean isProviderAvailable(android.content.Context context, optional String providerPackageName);
method @Deprecated public boolean isProviderAvailable(android.content.Context context);
+ method @Deprecated public boolean isProviderAvailable(android.content.Context context, optional String providerPackageName);
property public final String ACTION_HEALTH_CONNECT_SETTINGS;
field public static final int SDK_AVAILABLE = 3; // 0x3
field public static final int SDK_UNAVAILABLE = 1; // 0x1
@@ -46,16 +46,16 @@
}
@kotlin.jvm.JvmDefaultWithCompatibility public interface PermissionController {
- method public default static androidx.activity.result.contract.ActivityResultContract<java.util.Set<java.lang.String>,java.util.Set<java.lang.String>> createRequestPermissionResultContract(optional String providerPackageName);
method public default static androidx.activity.result.contract.ActivityResultContract<java.util.Set<java.lang.String>,java.util.Set<java.lang.String>> createRequestPermissionResultContract();
+ method public default static androidx.activity.result.contract.ActivityResultContract<java.util.Set<java.lang.String>,java.util.Set<java.lang.String>> createRequestPermissionResultContract(optional String providerPackageName);
method public suspend Object? getGrantedPermissions(kotlin.coroutines.Continuation<? super java.util.Set<? extends java.lang.String>>);
method public suspend Object? revokeAllPermissions(kotlin.coroutines.Continuation<? super kotlin.Unit>);
field public static final androidx.health.connect.client.PermissionController.Companion Companion;
}
public static final class PermissionController.Companion {
- method public androidx.activity.result.contract.ActivityResultContract<java.util.Set<java.lang.String>,java.util.Set<java.lang.String>> createRequestPermissionResultContract(optional String providerPackageName);
method public androidx.activity.result.contract.ActivityResultContract<java.util.Set<java.lang.String>,java.util.Set<java.lang.String>> createRequestPermissionResultContract();
+ method public androidx.activity.result.contract.ActivityResultContract<java.util.Set<java.lang.String>,java.util.Set<java.lang.String>> createRequestPermissionResultContract(optional String providerPackageName);
}
}
@@ -421,21 +421,119 @@
public static final class ElevationGainedRecord.Companion {
}
+ public final class ExerciseLap {
+ ctor public ExerciseLap(java.time.Instant startTime, java.time.Instant endTime, optional androidx.health.connect.client.units.Length? length);
+ method public java.time.Instant getEndTime();
+ method public androidx.health.connect.client.units.Length? getLength();
+ method public java.time.Instant getStartTime();
+ property public final java.time.Instant endTime;
+ property public final androidx.health.connect.client.units.Length? length;
+ property public final java.time.Instant startTime;
+ }
+
+ public final class ExerciseSegment {
+ ctor public ExerciseSegment(java.time.Instant startTime, java.time.Instant endTime, int segmentType, optional int repetitions);
+ method public java.time.Instant getEndTime();
+ method public int getRepetitions();
+ method public int getSegmentType();
+ method public java.time.Instant getStartTime();
+ property public final java.time.Instant endTime;
+ property public final int repetitions;
+ property public final int segmentType;
+ property public final java.time.Instant startTime;
+ field public static final androidx.health.connect.client.records.ExerciseSegment.Companion Companion;
+ field public static final int EXERCISE_SEGMENT_TYPE_ARM_CURL = 1; // 0x1
+ field public static final int EXERCISE_SEGMENT_TYPE_BACK_EXTENSION = 2; // 0x2
+ field public static final int EXERCISE_SEGMENT_TYPE_BALL_SLAM = 3; // 0x3
+ field public static final int EXERCISE_SEGMENT_TYPE_BARBELL_SHOULDER_PRESS = 4; // 0x4
+ field public static final int EXERCISE_SEGMENT_TYPE_BENCH_PRESS = 5; // 0x5
+ field public static final int EXERCISE_SEGMENT_TYPE_BENCH_SIT_UP = 6; // 0x6
+ field public static final int EXERCISE_SEGMENT_TYPE_BIKING = 7; // 0x7
+ field public static final int EXERCISE_SEGMENT_TYPE_BIKING_STATIONARY = 8; // 0x8
+ field public static final int EXERCISE_SEGMENT_TYPE_BURPEE = 9; // 0x9
+ field public static final int EXERCISE_SEGMENT_TYPE_CRUNCH = 10; // 0xa
+ field public static final int EXERCISE_SEGMENT_TYPE_DEADLIFT = 11; // 0xb
+ field public static final int EXERCISE_SEGMENT_TYPE_DOUBLE_ARM_TRICEPS_EXTENSION = 12; // 0xc
+ field public static final int EXERCISE_SEGMENT_TYPE_DUMBBELL_CURL_LEFT_ARM = 13; // 0xd
+ field public static final int EXERCISE_SEGMENT_TYPE_DUMBBELL_CURL_RIGHT_ARM = 14; // 0xe
+ field public static final int EXERCISE_SEGMENT_TYPE_DUMBBELL_FRONT_RAISE = 15; // 0xf
+ field public static final int EXERCISE_SEGMENT_TYPE_DUMBBELL_LATERAL_RAISE = 16; // 0x10
+ field public static final int EXERCISE_SEGMENT_TYPE_DUMBBELL_ROW = 17; // 0x11
+ field public static final int EXERCISE_SEGMENT_TYPE_DUMBBELL_TRICEPS_EXTENSION_LEFT_ARM = 18; // 0x12
+ field public static final int EXERCISE_SEGMENT_TYPE_DUMBBELL_TRICEPS_EXTENSION_RIGHT_ARM = 19; // 0x13
+ field public static final int EXERCISE_SEGMENT_TYPE_DUMBBELL_TRICEPS_EXTENSION_TWO_ARM = 20; // 0x14
+ field public static final int EXERCISE_SEGMENT_TYPE_ELLIPTICAL = 21; // 0x15
+ field public static final int EXERCISE_SEGMENT_TYPE_FORWARD_TWIST = 22; // 0x16
+ field public static final int EXERCISE_SEGMENT_TYPE_FRONT_RAISE = 23; // 0x17
+ field public static final int EXERCISE_SEGMENT_TYPE_HIGH_INTENSITY_INTERVAL_TRAINING = 24; // 0x18
+ field public static final int EXERCISE_SEGMENT_TYPE_HIP_THRUST = 25; // 0x19
+ field public static final int EXERCISE_SEGMENT_TYPE_HULA_HOOP = 26; // 0x1a
+ field public static final int EXERCISE_SEGMENT_TYPE_JUMPING_JACK = 27; // 0x1b
+ field public static final int EXERCISE_SEGMENT_TYPE_JUMP_ROPE = 28; // 0x1c
+ field public static final int EXERCISE_SEGMENT_TYPE_KETTLEBELL_SWING = 29; // 0x1d
+ field public static final int EXERCISE_SEGMENT_TYPE_LATERAL_RAISE = 30; // 0x1e
+ field public static final int EXERCISE_SEGMENT_TYPE_LAT_PULL_DOWN = 31; // 0x1f
+ field public static final int EXERCISE_SEGMENT_TYPE_LEG_CURL = 32; // 0x20
+ field public static final int EXERCISE_SEGMENT_TYPE_LEG_EXTENSION = 33; // 0x21
+ field public static final int EXERCISE_SEGMENT_TYPE_LEG_PRESS = 34; // 0x22
+ field public static final int EXERCISE_SEGMENT_TYPE_LEG_RAISE = 35; // 0x23
+ field public static final int EXERCISE_SEGMENT_TYPE_LUNGE = 36; // 0x24
+ field public static final int EXERCISE_SEGMENT_TYPE_MOUNTAIN_CLIMBER = 37; // 0x25
+ field public static final int EXERCISE_SEGMENT_TYPE_OTHER_WORKOUT = 38; // 0x26
+ field public static final int EXERCISE_SEGMENT_TYPE_PAUSE = 39; // 0x27
+ field public static final int EXERCISE_SEGMENT_TYPE_PILATES = 40; // 0x28
+ field public static final int EXERCISE_SEGMENT_TYPE_PLANK = 41; // 0x29
+ field public static final int EXERCISE_SEGMENT_TYPE_PULL_UP = 42; // 0x2a
+ field public static final int EXERCISE_SEGMENT_TYPE_PUNCH = 43; // 0x2b
+ field public static final int EXERCISE_SEGMENT_TYPE_REST = 44; // 0x2c
+ field public static final int EXERCISE_SEGMENT_TYPE_ROWING_MACHINE = 45; // 0x2d
+ field public static final int EXERCISE_SEGMENT_TYPE_RUNNING = 46; // 0x2e
+ field public static final int EXERCISE_SEGMENT_TYPE_RUNNING_TREADMILL = 47; // 0x2f
+ field public static final int EXERCISE_SEGMENT_TYPE_SHOULDER_PRESS = 48; // 0x30
+ field public static final int EXERCISE_SEGMENT_TYPE_SINGLE_ARM_TRICEPS_EXTENSION = 49; // 0x31
+ field public static final int EXERCISE_SEGMENT_TYPE_SIT_UP = 50; // 0x32
+ field public static final int EXERCISE_SEGMENT_TYPE_SQUAT = 51; // 0x33
+ field public static final int EXERCISE_SEGMENT_TYPE_STAIR_CLIMBING = 52; // 0x34
+ field public static final int EXERCISE_SEGMENT_TYPE_STAIR_CLIMBING_MACHINE = 53; // 0x35
+ field public static final int EXERCISE_SEGMENT_TYPE_STRETCHING = 54; // 0x36
+ field public static final int EXERCISE_SEGMENT_TYPE_SWIMMING_BACKSTROKE = 55; // 0x37
+ field public static final int EXERCISE_SEGMENT_TYPE_SWIMMING_BREASTSTROKE = 56; // 0x38
+ field public static final int EXERCISE_SEGMENT_TYPE_SWIMMING_BUTTERFLY = 57; // 0x39
+ field public static final int EXERCISE_SEGMENT_TYPE_SWIMMING_FREESTYLE = 58; // 0x3a
+ field public static final int EXERCISE_SEGMENT_TYPE_SWIMMING_MIXED = 59; // 0x3b
+ field public static final int EXERCISE_SEGMENT_TYPE_SWIMMING_OPEN_WATER = 60; // 0x3c
+ field public static final int EXERCISE_SEGMENT_TYPE_SWIMMING_OTHER = 61; // 0x3d
+ field public static final int EXERCISE_SEGMENT_TYPE_SWIMMING_POOL = 62; // 0x3e
+ field public static final int EXERCISE_SEGMENT_TYPE_UNKNOWN = 0; // 0x0
+ field public static final int EXERCISE_SEGMENT_TYPE_UPPER_TWIST = 63; // 0x3f
+ field public static final int EXERCISE_SEGMENT_TYPE_WALKING = 64; // 0x40
+ field public static final int EXERCISE_SEGMENT_TYPE_WEIGHTLIFTING = 65; // 0x41
+ field public static final int EXERCISE_SEGMENT_TYPE_WHEELCHAIR = 66; // 0x42
+ field public static final int EXERCISE_SEGMENT_TYPE_YOGA = 67; // 0x43
+ }
+
+ public static final class ExerciseSegment.Companion {
+ }
+
public final class ExerciseSessionRecord implements androidx.health.connect.client.records.IntervalRecord {
- ctor public ExerciseSessionRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, int exerciseType, optional String? title, optional String? notes, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+ ctor public ExerciseSessionRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, int exerciseType, optional String? title, optional String? notes, optional androidx.health.connect.client.records.metadata.Metadata metadata, optional java.util.List<androidx.health.connect.client.records.ExerciseSegment> segments, optional java.util.List<androidx.health.connect.client.records.ExerciseLap> laps);
method public java.time.Instant getEndTime();
method public java.time.ZoneOffset? getEndZoneOffset();
method public int getExerciseType();
+ method public java.util.List<androidx.health.connect.client.records.ExerciseLap> getLaps();
method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
method public String? getNotes();
+ method public java.util.List<androidx.health.connect.client.records.ExerciseSegment> getSegments();
method public java.time.Instant getStartTime();
method public java.time.ZoneOffset? getStartZoneOffset();
method public String? getTitle();
property public java.time.Instant endTime;
property public java.time.ZoneOffset? endZoneOffset;
property public final int exerciseType;
+ property public final java.util.List<androidx.health.connect.client.records.ExerciseLap> laps;
property public androidx.health.connect.client.records.metadata.Metadata metadata;
property public final String? notes;
+ property public final java.util.List<androidx.health.connect.client.records.ExerciseSegment> segments;
property public java.time.Instant startTime;
property public java.time.ZoneOffset? startZoneOffset;
property public final String? title;
@@ -967,11 +1065,12 @@
}
public final class SleepSessionRecord implements androidx.health.connect.client.records.IntervalRecord {
- ctor public SleepSessionRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional String? title, optional String? notes, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+ ctor public SleepSessionRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional String? title, optional String? notes, optional java.util.List<androidx.health.connect.client.records.SleepSessionRecord.Stage> stages, optional androidx.health.connect.client.records.metadata.Metadata metadata);
method public java.time.Instant getEndTime();
method public java.time.ZoneOffset? getEndZoneOffset();
method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
method public String? getNotes();
+ method public java.util.List<androidx.health.connect.client.records.SleepSessionRecord.Stage> getStages();
method public java.time.Instant getStartTime();
method public java.time.ZoneOffset? getStartZoneOffset();
method public String? getTitle();
@@ -979,32 +1078,14 @@
property public java.time.ZoneOffset? endZoneOffset;
property public androidx.health.connect.client.records.metadata.Metadata metadata;
property public final String? notes;
+ property public final java.util.List<androidx.health.connect.client.records.SleepSessionRecord.Stage> stages;
property public java.time.Instant startTime;
property public java.time.ZoneOffset? startZoneOffset;
property public final String? title;
field public static final androidx.health.connect.client.records.SleepSessionRecord.Companion Companion;
field public static final androidx.health.connect.client.aggregate.AggregateMetric<java.time.Duration> SLEEP_DURATION_TOTAL;
- }
-
- public static final class SleepSessionRecord.Companion {
- }
-
- public final class SleepStageRecord implements androidx.health.connect.client.records.IntervalRecord {
- ctor public SleepStageRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, int stage, optional androidx.health.connect.client.records.metadata.Metadata metadata);
- method public java.time.Instant getEndTime();
- method public java.time.ZoneOffset? getEndZoneOffset();
- method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
- method public int getStage();
- method public java.time.Instant getStartTime();
- method public java.time.ZoneOffset? getStartZoneOffset();
- property public java.time.Instant endTime;
- property public java.time.ZoneOffset? endZoneOffset;
- property public androidx.health.connect.client.records.metadata.Metadata metadata;
- property public final int stage;
- property public java.time.Instant startTime;
- property public java.time.ZoneOffset? startZoneOffset;
- field public static final androidx.health.connect.client.records.SleepStageRecord.Companion Companion;
field public static final int STAGE_TYPE_AWAKE = 1; // 0x1
+ field public static final int STAGE_TYPE_AWAKE_IN_BED = 7; // 0x7
field public static final int STAGE_TYPE_DEEP = 5; // 0x5
field public static final int STAGE_TYPE_LIGHT = 4; // 0x4
field public static final int STAGE_TYPE_OUT_OF_BED = 3; // 0x3
@@ -1013,7 +1094,17 @@
field public static final int STAGE_TYPE_UNKNOWN = 0; // 0x0
}
- public static final class SleepStageRecord.Companion {
+ public static final class SleepSessionRecord.Companion {
+ }
+
+ public static final class SleepSessionRecord.Stage {
+ ctor public SleepSessionRecord.Stage(java.time.Instant startTime, java.time.Instant endTime, int stage);
+ method public java.time.Instant getEndTime();
+ method public int getStage();
+ method public java.time.Instant getStartTime();
+ property public final java.time.Instant endTime;
+ property public final int stage;
+ property public final java.time.Instant startTime;
}
public final class SpeedRecord implements androidx.health.connect.client.records.SeriesRecord<androidx.health.connect.client.records.SpeedRecord.Sample> {
diff --git a/health/connect/connect-client/build.gradle b/health/connect/connect-client/build.gradle
index 06b657b..f3b4530 100644
--- a/health/connect/connect-client/build.gradle
+++ b/health/connect/connect-client/build.gradle
@@ -73,7 +73,7 @@
}
androidx {
- name = "AndroidX Health Connect Client Library"
+ name = "Health Connect Client"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2022"
description = "read or write user's health and fitness records."
diff --git a/health/connect/connect-client/proguard-rules.pro b/health/connect/connect-client/proguard-rules.pro
index 5f54197..0442efc 100644
--- a/health/connect/connect-client/proguard-rules.pro
+++ b/health/connect/connect-client/proguard-rules.pro
@@ -26,3 +26,7 @@
# Permissions are put into Intents and retrieved via getParcelable, which uses
# reflection and require name to be kept in client apps.
-keepnames class androidx.health.platform.client.permission.Permission
+
+# ExerciseRoute is put into Intents and retrieved via getParcelable, which uses
+# reflection and require name to be kept in client apps.
+-keepnames class androidx.health.platform.client.exerciseroute.ExerciseRoute
diff --git a/health/connect/connect-client/samples/build.gradle b/health/connect/connect-client/samples/build.gradle
index 2d8bd45..b1b2388 100644
--- a/health/connect/connect-client/samples/build.gradle
+++ b/health/connect/connect-client/samples/build.gradle
@@ -34,7 +34,7 @@
}
androidx {
- name = "AndroidX Health Connect Library Samples"
+ name = "Health Connect Samples"
type = LibraryType.SAMPLES
inceptionYear = "2022"
description = "Contains the sample code for the Androidx Health Connect Library"
diff --git a/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/AggregationSamples.kt b/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/AggregationSamples.kt
index 829941f5..e6a48dc 100644
--- a/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/AggregationSamples.kt
+++ b/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/AggregationSamples.kt
@@ -23,9 +23,9 @@
import androidx.health.connect.client.records.DistanceRecord
import androidx.health.connect.client.records.HeartRateRecord
import androidx.health.connect.client.records.StepsRecord
-import androidx.health.connect.client.request.AggregateRequest
import androidx.health.connect.client.request.AggregateGroupByDurationRequest
import androidx.health.connect.client.request.AggregateGroupByPeriodRequest
+import androidx.health.connect.client.request.AggregateRequest
import androidx.health.connect.client.time.TimeRangeFilter
import java.time.Duration
import java.time.Instant
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt
index 9723271..a410c3f 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt
@@ -421,9 +421,10 @@
metadata = metadata,
segments = subTypeDataListsMap["segments"]?.toSegmentList() ?: emptyList(),
laps = subTypeDataListsMap["laps"]?.toLapList() ?: emptyList(),
- route = subTypeDataListsMap["route"]?.let {
- ExerciseRoute(route = it.toLocationList())
- },
+ route =
+ subTypeDataListsMap["route"]?.let {
+ ExerciseRoute(route = it.toLocationList())
+ },
hasRoute = valuesMap["hasRoute"]?.booleanVal ?: false,
)
"Distance" ->
@@ -580,3 +581,20 @@
else -> throw RuntimeException("Unknown data type ${dataType.name}")
}
}
+
+fun toExerciseRoute(
+ protoWrapper: androidx.health.platform.client.exerciseroute.ExerciseRoute
+): ExerciseRoute {
+ return ExerciseRoute(
+ protoWrapper.proto.valuesList.map { value ->
+ ExerciseRoute.Location(
+ time = Instant.ofEpochMilli(value.startTimeMillis),
+ latitude = value.valuesMap["latitude"]!!.doubleVal,
+ longitude = value.valuesMap["longitude"]!!.doubleVal,
+ altitude = value.valuesMap["altitude"]?.doubleVal?.meters,
+ horizontalAccuracy = value.valuesMap["horizontal_accuracy"]?.doubleVal?.meters,
+ verticalAccuracy = value.valuesMap["vertical_accuracy"]?.doubleVal?.meters
+ )
+ }
+ )
+}
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt
index 57b0fba..f2fa0f4 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt
@@ -18,12 +18,12 @@
package androidx.health.connect.client.impl.converters.records
import androidx.annotation.RestrictTo
-import androidx.health.connect.client.records.SleepSessionRecord
-import androidx.health.connect.client.records.SleepSessionRecord.Companion.STAGE_TYPE_STRING_TO_INT_MAP
import androidx.health.connect.client.records.ExerciseLap
import androidx.health.connect.client.records.ExerciseRoute
import androidx.health.connect.client.records.ExerciseSegment
import androidx.health.connect.client.records.ExerciseSegment.Companion.EXERCISE_SEGMENT_TYPE_UNKNOWN
+import androidx.health.connect.client.records.SleepSessionRecord
+import androidx.health.connect.client.records.SleepSessionRecord.Companion.STAGE_TYPE_STRING_TO_INT_MAP
import androidx.health.connect.client.records.metadata.DataOrigin
import androidx.health.connect.client.records.metadata.Device
import androidx.health.connect.client.records.metadata.Metadata
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/permission/RequestExerciseRouteInternal.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/permission/RequestExerciseRouteInternal.kt
new file mode 100644
index 0000000..4417c02
--- /dev/null
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/permission/RequestExerciseRouteInternal.kt
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.health.connect.client.permission
+
+import android.content.Context
+import android.content.Intent
+import androidx.activity.result.contract.ActivityResultContract
+import androidx.annotation.RestrictTo
+import androidx.health.connect.client.HealthConnectClient
+import androidx.health.connect.client.impl.converters.records.toExerciseRoute
+import androidx.health.connect.client.records.ExerciseRoute
+import androidx.health.platform.client.impl.logger.Logger
+import androidx.health.platform.client.service.HealthDataServiceConstants
+
+/**
+ * An [ActivityResultContract] to request a route associated with an {@code ExerciseSessionRecord}.
+ *
+ * @see androidx.activity.ComponentActivity.registerForActivityResult
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+internal class RequestExerciseRouteInternal : ActivityResultContract<String?, ExerciseRoute?>() {
+ override fun createIntent(context: Context, input: String?): Intent {
+ require(!input.isNullOrEmpty()) { "Session identifier is required" }
+ return Intent(HealthDataServiceConstants.ACTION_REQUEST_ROUTE).apply {
+ putExtra(HealthDataServiceConstants.EXTRA_SESSION_ID, input)
+ }
+ }
+
+ @Suppress("DEPRECATION") // getParcelableExtra
+ override fun parseResult(resultCode: Int, intent: Intent?): ExerciseRoute? {
+ val route =
+ intent?.getParcelableExtra<androidx.health.platform.client.exerciseroute.ExerciseRoute>(
+ HealthDataServiceConstants.EXTRA_EXERCISE_ROUTE
+ )
+ if (route == null) {
+ Logger.debug(HealthConnectClient.HEALTH_CONNECT_CLIENT_TAG, "No route returned.")
+ return null
+ }
+ Logger.debug(HealthConnectClient.HEALTH_CONNECT_CLIENT_TAG, "Returned a route.")
+ return toExerciseRoute(route)
+ }
+}
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseLap.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseLap.kt
index 08aa1fc..290feb0 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseLap.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseLap.kt
@@ -16,21 +16,19 @@
package androidx.health.connect.client.records
-import androidx.annotation.RestrictTo
import androidx.health.connect.client.units.Length
import java.time.Instant
/**
* Captures the time of a lap within an exercise session.
*
- * <p>Each lap contains the start and end time and optional [Length] of the lap (e.g. pool
- * length while swimming or a track lap while running). There may or may not be direct correlation
- * with [ExerciseSegment] start and end times, e.g. [ExerciseSessionRecord] of type
- * running without any segments can be divided into laps of different lengths.
+ * <p>Each lap contains the start and end time and optional [Length] of the lap (e.g. pool length
+ * while swimming or a track lap while running). There may or may not be direct correlation with
+ * [ExerciseSegment] start and end times, e.g. [ExerciseSessionRecord] of type running without any
+ * segments can be divided into laps of different lengths.
*
* @see ExerciseSessionRecord
*/
-@RestrictTo(RestrictTo.Scope.LIBRARY)
public class ExerciseLap(
public val startTime: Instant,
public val endTime: Instant,
@@ -62,4 +60,4 @@
result = 31 * result + length.hashCode()
return result
}
-}
\ No newline at end of file
+}
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseSegment.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseSegment.kt
index 67cf876..6afd2ee 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseSegment.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseSegment.kt
@@ -28,7 +28,6 @@
*
* @see ExerciseSessionRecord
*/
-@RestrictTo(RestrictTo.Scope.LIBRARY)
public class ExerciseSegment(
public val startTime: Instant,
public val endTime: Instant,
@@ -70,10 +69,7 @@
if (UNIVERSAL_SEGMENTS.contains(segmentType)) {
return true
}
- if (!SESSION_TO_SEGMENTS_MAPPING.contains(sessionType)) {
- return false
- }
- return SESSION_TO_SEGMENTS_MAPPING[sessionType]!!.contains(segmentType)
+ return SESSION_TO_SEGMENTS_MAPPING[sessionType]?.contains(segmentType) ?: false
}
companion object {
@@ -280,179 +276,48 @@
/** Use this type for yoga. */
const val EXERCISE_SEGMENT_TYPE_YOGA = 67
- internal val UNIVERSAL_SESSION_TYPES = setOf(
- ExerciseSessionRecord.EXERCISE_TYPE_BOOT_CAMP,
- ExerciseSessionRecord.EXERCISE_TYPE_HIGH_INTENSITY_INTERVAL_TRAINING,
- ExerciseSessionRecord.EXERCISE_TYPE_OTHER_WORKOUT,
- )
+ internal val UNIVERSAL_SESSION_TYPES =
+ setOf(
+ ExerciseSessionRecord.EXERCISE_TYPE_BOOT_CAMP,
+ ExerciseSessionRecord.EXERCISE_TYPE_HIGH_INTENSITY_INTERVAL_TRAINING,
+ ExerciseSessionRecord.EXERCISE_TYPE_OTHER_WORKOUT,
+ )
- internal val UNIVERSAL_SEGMENTS = setOf(
- EXERCISE_SEGMENT_TYPE_OTHER_WORKOUT,
- EXERCISE_SEGMENT_TYPE_PAUSE,
- EXERCISE_SEGMENT_TYPE_REST,
- EXERCISE_SEGMENT_TYPE_STRETCHING,
- EXERCISE_SEGMENT_TYPE_UNKNOWN,
- )
-
- internal val EXERCISE_SEGMENTS = setOf(
- EXERCISE_SEGMENT_TYPE_ARM_CURL,
- EXERCISE_SEGMENT_TYPE_BACK_EXTENSION,
- EXERCISE_SEGMENT_TYPE_BALL_SLAM,
- EXERCISE_SEGMENT_TYPE_BARBELL_SHOULDER_PRESS,
- EXERCISE_SEGMENT_TYPE_BENCH_PRESS,
- EXERCISE_SEGMENT_TYPE_BENCH_SIT_UP,
- EXERCISE_SEGMENT_TYPE_BURPEE,
- EXERCISE_SEGMENT_TYPE_CRUNCH,
- EXERCISE_SEGMENT_TYPE_DEADLIFT,
- EXERCISE_SEGMENT_TYPE_DOUBLE_ARM_TRICEPS_EXTENSION,
- EXERCISE_SEGMENT_TYPE_DUMBBELL_CURL_LEFT_ARM,
- EXERCISE_SEGMENT_TYPE_DUMBBELL_CURL_RIGHT_ARM,
- EXERCISE_SEGMENT_TYPE_DUMBBELL_FRONT_RAISE,
- EXERCISE_SEGMENT_TYPE_DUMBBELL_LATERAL_RAISE,
- EXERCISE_SEGMENT_TYPE_DUMBBELL_ROW,
- EXERCISE_SEGMENT_TYPE_DUMBBELL_TRICEPS_EXTENSION_LEFT_ARM,
- EXERCISE_SEGMENT_TYPE_DUMBBELL_TRICEPS_EXTENSION_RIGHT_ARM,
- EXERCISE_SEGMENT_TYPE_DUMBBELL_TRICEPS_EXTENSION_TWO_ARM,
- EXERCISE_SEGMENT_TYPE_FORWARD_TWIST,
- EXERCISE_SEGMENT_TYPE_FRONT_RAISE,
- EXERCISE_SEGMENT_TYPE_HIP_THRUST,
- EXERCISE_SEGMENT_TYPE_HULA_HOOP,
- EXERCISE_SEGMENT_TYPE_JUMP_ROPE,
- EXERCISE_SEGMENT_TYPE_JUMPING_JACK,
- EXERCISE_SEGMENT_TYPE_KETTLEBELL_SWING,
- EXERCISE_SEGMENT_TYPE_LATERAL_RAISE,
- EXERCISE_SEGMENT_TYPE_LAT_PULL_DOWN,
- EXERCISE_SEGMENT_TYPE_LEG_CURL,
- EXERCISE_SEGMENT_TYPE_LEG_EXTENSION,
- EXERCISE_SEGMENT_TYPE_LEG_PRESS,
- EXERCISE_SEGMENT_TYPE_LEG_RAISE,
- EXERCISE_SEGMENT_TYPE_LUNGE,
- EXERCISE_SEGMENT_TYPE_MOUNTAIN_CLIMBER,
- EXERCISE_SEGMENT_TYPE_PLANK,
- EXERCISE_SEGMENT_TYPE_PULL_UP,
- EXERCISE_SEGMENT_TYPE_PUNCH,
- EXERCISE_SEGMENT_TYPE_SHOULDER_PRESS,
- EXERCISE_SEGMENT_TYPE_SINGLE_ARM_TRICEPS_EXTENSION,
- EXERCISE_SEGMENT_TYPE_SIT_UP,
- EXERCISE_SEGMENT_TYPE_SQUAT,
- EXERCISE_SEGMENT_TYPE_UPPER_TWIST,
- EXERCISE_SEGMENT_TYPE_WEIGHTLIFTING
- )
- internal val SWIMMING_SEGMENTS = setOf(
- EXERCISE_SEGMENT_TYPE_SWIMMING_BACKSTROKE,
- EXERCISE_SEGMENT_TYPE_SWIMMING_BREASTSTROKE,
- EXERCISE_SEGMENT_TYPE_SWIMMING_FREESTYLE,
- EXERCISE_SEGMENT_TYPE_SWIMMING_BUTTERFLY,
- EXERCISE_SEGMENT_TYPE_SWIMMING_MIXED,
- EXERCISE_SEGMENT_TYPE_SWIMMING_OTHER
- )
-
- private val SESSION_TO_SEGMENTS_MAPPING = mapOf(
- ExerciseSessionRecord.EXERCISE_TYPE_BIKING to setOf(EXERCISE_SEGMENT_TYPE_BIKING),
- ExerciseSessionRecord.EXERCISE_TYPE_BIKING_STATIONARY to setOf(
- EXERCISE_SEGMENT_TYPE_BIKING_STATIONARY
- ),
- ExerciseSessionRecord.EXERCISE_TYPE_CALISTHENICS to EXERCISE_SEGMENTS,
- ExerciseSessionRecord.EXERCISE_TYPE_ELLIPTICAL
- to setOf(EXERCISE_SEGMENT_TYPE_ELLIPTICAL),
- ExerciseSessionRecord.EXERCISE_TYPE_EXERCISE_CLASS to setOf(
- EXERCISE_SEGMENT_TYPE_YOGA,
- EXERCISE_SEGMENT_TYPE_BIKING_STATIONARY,
- EXERCISE_SEGMENT_TYPE_PILATES,
- EXERCISE_SEGMENT_TYPE_HIGH_INTENSITY_INTERVAL_TRAINING
- ),
- ExerciseSessionRecord.EXERCISE_TYPE_GYMNASTICS to EXERCISE_SEGMENTS,
- ExerciseSessionRecord.EXERCISE_TYPE_HIKING to setOf(
- EXERCISE_SEGMENT_TYPE_WALKING,
- EXERCISE_SEGMENT_TYPE_WHEELCHAIR
- ),
- ExerciseSessionRecord.EXERCISE_TYPE_PILATES to setOf(EXERCISE_SEGMENT_TYPE_PILATES),
- ExerciseSessionRecord.EXERCISE_TYPE_ROWING_MACHINE to setOf(
- EXERCISE_SEGMENT_TYPE_ROWING_MACHINE
- ),
- ExerciseSessionRecord.EXERCISE_TYPE_RUNNING to setOf(
- EXERCISE_SEGMENT_TYPE_RUNNING,
- EXERCISE_SEGMENT_TYPE_WALKING
- ),
- ExerciseSessionRecord.EXERCISE_TYPE_RUNNING_TREADMILL to setOf(
- EXERCISE_SEGMENT_TYPE_RUNNING_TREADMILL
- ),
- ExerciseSessionRecord.EXERCISE_TYPE_STRENGTH_TRAINING to EXERCISE_SEGMENTS,
- ExerciseSessionRecord.EXERCISE_TYPE_STAIR_CLIMBING to setOf(
- EXERCISE_SEGMENT_TYPE_STAIR_CLIMBING
- ),
- ExerciseSessionRecord.EXERCISE_TYPE_STAIR_CLIMBING_MACHINE to setOf(
- EXERCISE_SEGMENT_TYPE_STAIR_CLIMBING_MACHINE
- ),
- ExerciseSessionRecord.EXERCISE_TYPE_SWIMMING_OPEN_WATER to buildSet {
- add(EXERCISE_SEGMENT_TYPE_SWIMMING_OPEN_WATER)
- addAll(SWIMMING_SEGMENTS)
- },
- ExerciseSessionRecord.EXERCISE_TYPE_SWIMMING_POOL to buildSet {
- add(EXERCISE_SEGMENT_TYPE_SWIMMING_POOL)
- addAll(SWIMMING_SEGMENTS)
- },
- ExerciseSessionRecord.EXERCISE_TYPE_WALKING to setOf(EXERCISE_SEGMENT_TYPE_WALKING),
- ExerciseSessionRecord.EXERCISE_TYPE_WHEELCHAIR
- to setOf(EXERCISE_SEGMENT_TYPE_WHEELCHAIR),
- ExerciseSessionRecord.EXERCISE_TYPE_WEIGHTLIFTING to EXERCISE_SEGMENTS,
- ExerciseSessionRecord.EXERCISE_TYPE_YOGA to setOf(EXERCISE_SEGMENT_TYPE_YOGA),
- )
-
- /**
- * List of supported segment types on Health Platform.
- *
- * @suppress
- */
- @Retention(AnnotationRetention.SOURCE)
- @RestrictTo(RestrictTo.Scope.LIBRARY)
- @IntDef(
- value =
- [
- EXERCISE_SEGMENT_TYPE_UNKNOWN,
- EXERCISE_SEGMENT_TYPE_BARBELL_SHOULDER_PRESS,
- EXERCISE_SEGMENT_TYPE_BENCH_SIT_UP,
- EXERCISE_SEGMENT_TYPE_BIKING,
- EXERCISE_SEGMENT_TYPE_BIKING_STATIONARY,
- EXERCISE_SEGMENT_TYPE_DUMBBELL_CURL_LEFT_ARM,
- EXERCISE_SEGMENT_TYPE_DUMBBELL_CURL_RIGHT_ARM,
- EXERCISE_SEGMENT_TYPE_DUMBBELL_FRONT_RAISE,
- EXERCISE_SEGMENT_TYPE_DUMBBELL_LATERAL_RAISE,
- EXERCISE_SEGMENT_TYPE_DUMBBELL_TRICEPS_EXTENSION_LEFT_ARM,
- EXERCISE_SEGMENT_TYPE_DUMBBELL_TRICEPS_EXTENSION_RIGHT_ARM,
- EXERCISE_SEGMENT_TYPE_DUMBBELL_TRICEPS_EXTENSION_TWO_ARM,
- EXERCISE_SEGMENT_TYPE_FORWARD_TWIST,
- EXERCISE_SEGMENT_TYPE_ELLIPTICAL,
- EXERCISE_SEGMENT_TYPE_HIGH_INTENSITY_INTERVAL_TRAINING,
- EXERCISE_SEGMENT_TYPE_PILATES,
- EXERCISE_SEGMENT_TYPE_ROWING_MACHINE,
- EXERCISE_SEGMENT_TYPE_RUNNING,
- EXERCISE_SEGMENT_TYPE_RUNNING_TREADMILL,
- EXERCISE_SEGMENT_TYPE_STAIR_CLIMBING,
- EXERCISE_SEGMENT_TYPE_STAIR_CLIMBING_MACHINE,
- EXERCISE_SEGMENT_TYPE_STRETCHING,
- EXERCISE_SEGMENT_TYPE_SWIMMING_OPEN_WATER,
- EXERCISE_SEGMENT_TYPE_SWIMMING_POOL,
- EXERCISE_SEGMENT_TYPE_UPPER_TWIST,
- EXERCISE_SEGMENT_TYPE_WALKING,
- EXERCISE_SEGMENT_TYPE_WEIGHTLIFTING,
- EXERCISE_SEGMENT_TYPE_WHEELCHAIR,
+ internal val UNIVERSAL_SEGMENTS =
+ setOf(
EXERCISE_SEGMENT_TYPE_OTHER_WORKOUT,
- EXERCISE_SEGMENT_TYPE_YOGA,
+ EXERCISE_SEGMENT_TYPE_PAUSE,
+ EXERCISE_SEGMENT_TYPE_REST,
+ EXERCISE_SEGMENT_TYPE_STRETCHING,
+ EXERCISE_SEGMENT_TYPE_UNKNOWN,
+ )
+
+ internal val EXERCISE_SEGMENTS =
+ setOf(
EXERCISE_SEGMENT_TYPE_ARM_CURL,
EXERCISE_SEGMENT_TYPE_BACK_EXTENSION,
EXERCISE_SEGMENT_TYPE_BALL_SLAM,
+ EXERCISE_SEGMENT_TYPE_BARBELL_SHOULDER_PRESS,
EXERCISE_SEGMENT_TYPE_BENCH_PRESS,
+ EXERCISE_SEGMENT_TYPE_BENCH_SIT_UP,
EXERCISE_SEGMENT_TYPE_BURPEE,
EXERCISE_SEGMENT_TYPE_CRUNCH,
EXERCISE_SEGMENT_TYPE_DEADLIFT,
EXERCISE_SEGMENT_TYPE_DOUBLE_ARM_TRICEPS_EXTENSION,
+ EXERCISE_SEGMENT_TYPE_DUMBBELL_CURL_LEFT_ARM,
+ EXERCISE_SEGMENT_TYPE_DUMBBELL_CURL_RIGHT_ARM,
+ EXERCISE_SEGMENT_TYPE_DUMBBELL_FRONT_RAISE,
+ EXERCISE_SEGMENT_TYPE_DUMBBELL_LATERAL_RAISE,
EXERCISE_SEGMENT_TYPE_DUMBBELL_ROW,
+ EXERCISE_SEGMENT_TYPE_DUMBBELL_TRICEPS_EXTENSION_LEFT_ARM,
+ EXERCISE_SEGMENT_TYPE_DUMBBELL_TRICEPS_EXTENSION_RIGHT_ARM,
+ EXERCISE_SEGMENT_TYPE_DUMBBELL_TRICEPS_EXTENSION_TWO_ARM,
+ EXERCISE_SEGMENT_TYPE_FORWARD_TWIST,
EXERCISE_SEGMENT_TYPE_FRONT_RAISE,
EXERCISE_SEGMENT_TYPE_HIP_THRUST,
EXERCISE_SEGMENT_TYPE_HULA_HOOP,
- EXERCISE_SEGMENT_TYPE_JUMPING_JACK,
EXERCISE_SEGMENT_TYPE_JUMP_ROPE,
+ EXERCISE_SEGMENT_TYPE_JUMPING_JACK,
EXERCISE_SEGMENT_TYPE_KETTLEBELL_SWING,
EXERCISE_SEGMENT_TYPE_LATERAL_RAISE,
EXERCISE_SEGMENT_TYPE_LAT_PULL_DOWN,
@@ -469,16 +334,146 @@
EXERCISE_SEGMENT_TYPE_SINGLE_ARM_TRICEPS_EXTENSION,
EXERCISE_SEGMENT_TYPE_SIT_UP,
EXERCISE_SEGMENT_TYPE_SQUAT,
- EXERCISE_SEGMENT_TYPE_SWIMMING_FREESTYLE,
+ EXERCISE_SEGMENT_TYPE_UPPER_TWIST,
+ EXERCISE_SEGMENT_TYPE_WEIGHTLIFTING
+ )
+ internal val SWIMMING_SEGMENTS =
+ setOf(
EXERCISE_SEGMENT_TYPE_SWIMMING_BACKSTROKE,
EXERCISE_SEGMENT_TYPE_SWIMMING_BREASTSTROKE,
+ EXERCISE_SEGMENT_TYPE_SWIMMING_FREESTYLE,
EXERCISE_SEGMENT_TYPE_SWIMMING_BUTTERFLY,
EXERCISE_SEGMENT_TYPE_SWIMMING_MIXED,
- EXERCISE_SEGMENT_TYPE_SWIMMING_OTHER,
- EXERCISE_SEGMENT_TYPE_REST,
- EXERCISE_SEGMENT_TYPE_PAUSE,
- ]
+ EXERCISE_SEGMENT_TYPE_SWIMMING_OTHER
+ )
+
+ private val SESSION_TO_SEGMENTS_MAPPING =
+ mapOf(
+ ExerciseSessionRecord.EXERCISE_TYPE_BIKING to setOf(EXERCISE_SEGMENT_TYPE_BIKING),
+ ExerciseSessionRecord.EXERCISE_TYPE_BIKING_STATIONARY to
+ setOf(EXERCISE_SEGMENT_TYPE_BIKING_STATIONARY),
+ ExerciseSessionRecord.EXERCISE_TYPE_CALISTHENICS to EXERCISE_SEGMENTS,
+ ExerciseSessionRecord.EXERCISE_TYPE_ELLIPTICAL to
+ setOf(EXERCISE_SEGMENT_TYPE_ELLIPTICAL),
+ ExerciseSessionRecord.EXERCISE_TYPE_EXERCISE_CLASS to
+ setOf(
+ EXERCISE_SEGMENT_TYPE_YOGA,
+ EXERCISE_SEGMENT_TYPE_BIKING_STATIONARY,
+ EXERCISE_SEGMENT_TYPE_PILATES,
+ EXERCISE_SEGMENT_TYPE_HIGH_INTENSITY_INTERVAL_TRAINING
+ ),
+ ExerciseSessionRecord.EXERCISE_TYPE_GYMNASTICS to EXERCISE_SEGMENTS,
+ ExerciseSessionRecord.EXERCISE_TYPE_HIKING to
+ setOf(EXERCISE_SEGMENT_TYPE_WALKING, EXERCISE_SEGMENT_TYPE_WHEELCHAIR),
+ ExerciseSessionRecord.EXERCISE_TYPE_PILATES to setOf(EXERCISE_SEGMENT_TYPE_PILATES),
+ ExerciseSessionRecord.EXERCISE_TYPE_ROWING_MACHINE to
+ setOf(EXERCISE_SEGMENT_TYPE_ROWING_MACHINE),
+ ExerciseSessionRecord.EXERCISE_TYPE_RUNNING to
+ setOf(EXERCISE_SEGMENT_TYPE_RUNNING, EXERCISE_SEGMENT_TYPE_WALKING),
+ ExerciseSessionRecord.EXERCISE_TYPE_RUNNING_TREADMILL to
+ setOf(EXERCISE_SEGMENT_TYPE_RUNNING_TREADMILL),
+ ExerciseSessionRecord.EXERCISE_TYPE_STRENGTH_TRAINING to EXERCISE_SEGMENTS,
+ ExerciseSessionRecord.EXERCISE_TYPE_STAIR_CLIMBING to
+ setOf(EXERCISE_SEGMENT_TYPE_STAIR_CLIMBING),
+ ExerciseSessionRecord.EXERCISE_TYPE_STAIR_CLIMBING_MACHINE to
+ setOf(EXERCISE_SEGMENT_TYPE_STAIR_CLIMBING_MACHINE),
+ ExerciseSessionRecord.EXERCISE_TYPE_SWIMMING_OPEN_WATER to
+ buildSet {
+ add(EXERCISE_SEGMENT_TYPE_SWIMMING_OPEN_WATER)
+ addAll(SWIMMING_SEGMENTS)
+ },
+ ExerciseSessionRecord.EXERCISE_TYPE_SWIMMING_POOL to
+ buildSet {
+ add(EXERCISE_SEGMENT_TYPE_SWIMMING_POOL)
+ addAll(SWIMMING_SEGMENTS)
+ },
+ ExerciseSessionRecord.EXERCISE_TYPE_WALKING to setOf(EXERCISE_SEGMENT_TYPE_WALKING),
+ ExerciseSessionRecord.EXERCISE_TYPE_WHEELCHAIR to
+ setOf(EXERCISE_SEGMENT_TYPE_WHEELCHAIR),
+ ExerciseSessionRecord.EXERCISE_TYPE_WEIGHTLIFTING to EXERCISE_SEGMENTS,
+ ExerciseSessionRecord.EXERCISE_TYPE_YOGA to setOf(EXERCISE_SEGMENT_TYPE_YOGA),
+ )
+
+ /**
+ * List of supported segment types on Health Platform.
+ *
+ * @suppress
+ */
+ @Retention(AnnotationRetention.SOURCE)
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
+ @IntDef(
+ value =
+ [
+ EXERCISE_SEGMENT_TYPE_UNKNOWN,
+ EXERCISE_SEGMENT_TYPE_BARBELL_SHOULDER_PRESS,
+ EXERCISE_SEGMENT_TYPE_BENCH_SIT_UP,
+ EXERCISE_SEGMENT_TYPE_BIKING,
+ EXERCISE_SEGMENT_TYPE_BIKING_STATIONARY,
+ EXERCISE_SEGMENT_TYPE_DUMBBELL_CURL_LEFT_ARM,
+ EXERCISE_SEGMENT_TYPE_DUMBBELL_CURL_RIGHT_ARM,
+ EXERCISE_SEGMENT_TYPE_DUMBBELL_FRONT_RAISE,
+ EXERCISE_SEGMENT_TYPE_DUMBBELL_LATERAL_RAISE,
+ EXERCISE_SEGMENT_TYPE_DUMBBELL_TRICEPS_EXTENSION_LEFT_ARM,
+ EXERCISE_SEGMENT_TYPE_DUMBBELL_TRICEPS_EXTENSION_RIGHT_ARM,
+ EXERCISE_SEGMENT_TYPE_DUMBBELL_TRICEPS_EXTENSION_TWO_ARM,
+ EXERCISE_SEGMENT_TYPE_FORWARD_TWIST,
+ EXERCISE_SEGMENT_TYPE_ELLIPTICAL,
+ EXERCISE_SEGMENT_TYPE_HIGH_INTENSITY_INTERVAL_TRAINING,
+ EXERCISE_SEGMENT_TYPE_PILATES,
+ EXERCISE_SEGMENT_TYPE_ROWING_MACHINE,
+ EXERCISE_SEGMENT_TYPE_RUNNING,
+ EXERCISE_SEGMENT_TYPE_RUNNING_TREADMILL,
+ EXERCISE_SEGMENT_TYPE_STAIR_CLIMBING,
+ EXERCISE_SEGMENT_TYPE_STAIR_CLIMBING_MACHINE,
+ EXERCISE_SEGMENT_TYPE_STRETCHING,
+ EXERCISE_SEGMENT_TYPE_SWIMMING_OPEN_WATER,
+ EXERCISE_SEGMENT_TYPE_SWIMMING_POOL,
+ EXERCISE_SEGMENT_TYPE_UPPER_TWIST,
+ EXERCISE_SEGMENT_TYPE_WALKING,
+ EXERCISE_SEGMENT_TYPE_WEIGHTLIFTING,
+ EXERCISE_SEGMENT_TYPE_WHEELCHAIR,
+ EXERCISE_SEGMENT_TYPE_OTHER_WORKOUT,
+ EXERCISE_SEGMENT_TYPE_YOGA,
+ EXERCISE_SEGMENT_TYPE_ARM_CURL,
+ EXERCISE_SEGMENT_TYPE_BACK_EXTENSION,
+ EXERCISE_SEGMENT_TYPE_BALL_SLAM,
+ EXERCISE_SEGMENT_TYPE_BENCH_PRESS,
+ EXERCISE_SEGMENT_TYPE_BURPEE,
+ EXERCISE_SEGMENT_TYPE_CRUNCH,
+ EXERCISE_SEGMENT_TYPE_DEADLIFT,
+ EXERCISE_SEGMENT_TYPE_DOUBLE_ARM_TRICEPS_EXTENSION,
+ EXERCISE_SEGMENT_TYPE_DUMBBELL_ROW,
+ EXERCISE_SEGMENT_TYPE_FRONT_RAISE,
+ EXERCISE_SEGMENT_TYPE_HIP_THRUST,
+ EXERCISE_SEGMENT_TYPE_HULA_HOOP,
+ EXERCISE_SEGMENT_TYPE_JUMPING_JACK,
+ EXERCISE_SEGMENT_TYPE_JUMP_ROPE,
+ EXERCISE_SEGMENT_TYPE_KETTLEBELL_SWING,
+ EXERCISE_SEGMENT_TYPE_LATERAL_RAISE,
+ EXERCISE_SEGMENT_TYPE_LAT_PULL_DOWN,
+ EXERCISE_SEGMENT_TYPE_LEG_CURL,
+ EXERCISE_SEGMENT_TYPE_LEG_EXTENSION,
+ EXERCISE_SEGMENT_TYPE_LEG_PRESS,
+ EXERCISE_SEGMENT_TYPE_LEG_RAISE,
+ EXERCISE_SEGMENT_TYPE_LUNGE,
+ EXERCISE_SEGMENT_TYPE_MOUNTAIN_CLIMBER,
+ EXERCISE_SEGMENT_TYPE_PLANK,
+ EXERCISE_SEGMENT_TYPE_PULL_UP,
+ EXERCISE_SEGMENT_TYPE_PUNCH,
+ EXERCISE_SEGMENT_TYPE_SHOULDER_PRESS,
+ EXERCISE_SEGMENT_TYPE_SINGLE_ARM_TRICEPS_EXTENSION,
+ EXERCISE_SEGMENT_TYPE_SIT_UP,
+ EXERCISE_SEGMENT_TYPE_SQUAT,
+ EXERCISE_SEGMENT_TYPE_SWIMMING_FREESTYLE,
+ EXERCISE_SEGMENT_TYPE_SWIMMING_BACKSTROKE,
+ EXERCISE_SEGMENT_TYPE_SWIMMING_BREASTSTROKE,
+ EXERCISE_SEGMENT_TYPE_SWIMMING_BUTTERFLY,
+ EXERCISE_SEGMENT_TYPE_SWIMMING_MIXED,
+ EXERCISE_SEGMENT_TYPE_SWIMMING_OTHER,
+ EXERCISE_SEGMENT_TYPE_REST,
+ EXERCISE_SEGMENT_TYPE_PAUSE,
+ ]
)
annotation class ExerciseSegmentTypes
}
-}
\ No newline at end of file
+}
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseSessionRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseSessionRecord.kt
index 4c9cb06..1709165 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseSessionRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseSessionRecord.kt
@@ -34,7 +34,9 @@
*
* @sample androidx.health.connect.client.samples.ReadExerciseSessions
*/
-public class ExerciseSessionRecord @RestrictTo(RestrictTo.Scope.LIBRARY) constructor(
+public class ExerciseSessionRecord
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+constructor(
override val startTime: Instant,
override val startZoneOffset: ZoneOffset?,
override val endTime: Instant,
@@ -46,22 +48,23 @@
/** Additional notes for the session. Optional field. */
public val notes: String? = null,
override val metadata: Metadata = Metadata.EMPTY,
- @get:RestrictTo(RestrictTo.Scope.LIBRARY)
- /** [ExerciseSegment]s of the session. Optional field.
- * Time in segments should be within the parent session, and should not overlap with each other.
+ /**
+ * [ExerciseSegment]s of the session. Optional field. Time in segments should be within the
+ * parent session, and should not overlap with each other.
*/
public val segments: List<ExerciseSegment> = emptyList(),
- @get:RestrictTo(RestrictTo.Scope.LIBRARY)
- /** [ExerciseLap]s of the session. Optional field.
- * Time in laps should be within the parent session, and should not overlap with each other.
+ /**
+ * [ExerciseLap]s of the session. Optional field. Time in laps should be within the parent
+ * session, and should not overlap with each other.
*/
public val laps: List<ExerciseLap> = emptyList(),
@get:RestrictTo(RestrictTo.Scope.LIBRARY)
/** [ExerciseRoute]s of the session. Optional field. */
public val route: ExerciseRoute? = null,
@get:RestrictTo(RestrictTo.Scope.LIBRARY)
- /** Indicates whether or not the underlying [ExerciseSessionRecord] has a route, even it's not
- * present because lack of permission.
+ /**
+ * Indicates whether or not the underlying [ExerciseSessionRecord] has a route, even it's not
+ * present because lack of permission.
*/
public val hasRoute: Boolean = false,
) : IntervalRecord {
@@ -78,6 +81,8 @@
/** Additional notes for the session. Optional field. */
notes: String? = null,
metadata: Metadata = Metadata.EMPTY,
+ segments: List<ExerciseSegment> = emptyList(),
+ laps: List<ExerciseLap> = emptyList(),
) : this(
startTime,
startZoneOffset,
@@ -87,10 +92,9 @@
title,
notes,
metadata,
- emptyList(),
- emptyList(),
- null,
- false
+ segments,
+ laps,
+ null
)
@RestrictTo(RestrictTo.Scope.LIBRARY)
@@ -163,12 +167,9 @@
}
require(route == null || hasRoute) { "hasRoute must be true if the route is not null" }
if (route != null) {
- require(
- route.isWithin(
- startTime,
- endTime
- )
- ) { "route can not be out of parent time range." }
+ require(route.isWithin(startTime, endTime)) {
+ "route can not be out of parent time range."
+ }
}
}
@@ -396,69 +397,69 @@
@RestrictTo(RestrictTo.Scope.LIBRARY)
@IntDef(
value =
- [
- EXERCISE_TYPE_BADMINTON,
- EXERCISE_TYPE_BASEBALL,
- EXERCISE_TYPE_BASKETBALL,
- EXERCISE_TYPE_BIKING,
- EXERCISE_TYPE_BIKING_STATIONARY,
- EXERCISE_TYPE_BOOT_CAMP,
- EXERCISE_TYPE_BOXING,
- EXERCISE_TYPE_CALISTHENICS,
- EXERCISE_TYPE_CRICKET,
- EXERCISE_TYPE_DANCING,
- EXERCISE_TYPE_ELLIPTICAL,
- EXERCISE_TYPE_EXERCISE_CLASS,
- EXERCISE_TYPE_FENCING,
- EXERCISE_TYPE_FOOTBALL_AMERICAN,
- EXERCISE_TYPE_FOOTBALL_AUSTRALIAN,
- EXERCISE_TYPE_FRISBEE_DISC,
- EXERCISE_TYPE_GOLF,
- EXERCISE_TYPE_GUIDED_BREATHING,
- EXERCISE_TYPE_GYMNASTICS,
- EXERCISE_TYPE_HANDBALL,
- EXERCISE_TYPE_HIGH_INTENSITY_INTERVAL_TRAINING,
- EXERCISE_TYPE_HIKING,
- EXERCISE_TYPE_ICE_HOCKEY,
- EXERCISE_TYPE_ICE_SKATING,
- EXERCISE_TYPE_MARTIAL_ARTS,
- EXERCISE_TYPE_PADDLING,
- EXERCISE_TYPE_PARAGLIDING,
- EXERCISE_TYPE_PILATES,
- EXERCISE_TYPE_RACQUETBALL,
- EXERCISE_TYPE_ROCK_CLIMBING,
- EXERCISE_TYPE_ROLLER_HOCKEY,
- EXERCISE_TYPE_ROWING,
- EXERCISE_TYPE_ROWING_MACHINE,
- EXERCISE_TYPE_RUGBY,
- EXERCISE_TYPE_RUNNING,
- EXERCISE_TYPE_RUNNING_TREADMILL,
- EXERCISE_TYPE_SAILING,
- EXERCISE_TYPE_SCUBA_DIVING,
- EXERCISE_TYPE_SKATING,
- EXERCISE_TYPE_SKIING,
- EXERCISE_TYPE_SNOWBOARDING,
- EXERCISE_TYPE_SNOWSHOEING,
- EXERCISE_TYPE_SOCCER,
- EXERCISE_TYPE_SOFTBALL,
- EXERCISE_TYPE_SQUASH,
- EXERCISE_TYPE_STAIR_CLIMBING,
- EXERCISE_TYPE_STAIR_CLIMBING_MACHINE,
- EXERCISE_TYPE_STRENGTH_TRAINING,
- EXERCISE_TYPE_STRETCHING,
- EXERCISE_TYPE_SURFING,
- EXERCISE_TYPE_SWIMMING_OPEN_WATER,
- EXERCISE_TYPE_SWIMMING_POOL,
- EXERCISE_TYPE_TABLE_TENNIS,
- EXERCISE_TYPE_TENNIS,
- EXERCISE_TYPE_VOLLEYBALL,
- EXERCISE_TYPE_WALKING,
- EXERCISE_TYPE_WATER_POLO,
- EXERCISE_TYPE_WEIGHTLIFTING,
- EXERCISE_TYPE_WHEELCHAIR,
- EXERCISE_TYPE_OTHER_WORKOUT,
- EXERCISE_TYPE_YOGA,
- ]
+ [
+ EXERCISE_TYPE_BADMINTON,
+ EXERCISE_TYPE_BASEBALL,
+ EXERCISE_TYPE_BASKETBALL,
+ EXERCISE_TYPE_BIKING,
+ EXERCISE_TYPE_BIKING_STATIONARY,
+ EXERCISE_TYPE_BOOT_CAMP,
+ EXERCISE_TYPE_BOXING,
+ EXERCISE_TYPE_CALISTHENICS,
+ EXERCISE_TYPE_CRICKET,
+ EXERCISE_TYPE_DANCING,
+ EXERCISE_TYPE_ELLIPTICAL,
+ EXERCISE_TYPE_EXERCISE_CLASS,
+ EXERCISE_TYPE_FENCING,
+ EXERCISE_TYPE_FOOTBALL_AMERICAN,
+ EXERCISE_TYPE_FOOTBALL_AUSTRALIAN,
+ EXERCISE_TYPE_FRISBEE_DISC,
+ EXERCISE_TYPE_GOLF,
+ EXERCISE_TYPE_GUIDED_BREATHING,
+ EXERCISE_TYPE_GYMNASTICS,
+ EXERCISE_TYPE_HANDBALL,
+ EXERCISE_TYPE_HIGH_INTENSITY_INTERVAL_TRAINING,
+ EXERCISE_TYPE_HIKING,
+ EXERCISE_TYPE_ICE_HOCKEY,
+ EXERCISE_TYPE_ICE_SKATING,
+ EXERCISE_TYPE_MARTIAL_ARTS,
+ EXERCISE_TYPE_PADDLING,
+ EXERCISE_TYPE_PARAGLIDING,
+ EXERCISE_TYPE_PILATES,
+ EXERCISE_TYPE_RACQUETBALL,
+ EXERCISE_TYPE_ROCK_CLIMBING,
+ EXERCISE_TYPE_ROLLER_HOCKEY,
+ EXERCISE_TYPE_ROWING,
+ EXERCISE_TYPE_ROWING_MACHINE,
+ EXERCISE_TYPE_RUGBY,
+ EXERCISE_TYPE_RUNNING,
+ EXERCISE_TYPE_RUNNING_TREADMILL,
+ EXERCISE_TYPE_SAILING,
+ EXERCISE_TYPE_SCUBA_DIVING,
+ EXERCISE_TYPE_SKATING,
+ EXERCISE_TYPE_SKIING,
+ EXERCISE_TYPE_SNOWBOARDING,
+ EXERCISE_TYPE_SNOWSHOEING,
+ EXERCISE_TYPE_SOCCER,
+ EXERCISE_TYPE_SOFTBALL,
+ EXERCISE_TYPE_SQUASH,
+ EXERCISE_TYPE_STAIR_CLIMBING,
+ EXERCISE_TYPE_STAIR_CLIMBING_MACHINE,
+ EXERCISE_TYPE_STRENGTH_TRAINING,
+ EXERCISE_TYPE_STRETCHING,
+ EXERCISE_TYPE_SURFING,
+ EXERCISE_TYPE_SWIMMING_OPEN_WATER,
+ EXERCISE_TYPE_SWIMMING_POOL,
+ EXERCISE_TYPE_TABLE_TENNIS,
+ EXERCISE_TYPE_TENNIS,
+ EXERCISE_TYPE_VOLLEYBALL,
+ EXERCISE_TYPE_WALKING,
+ EXERCISE_TYPE_WATER_POLO,
+ EXERCISE_TYPE_WEIGHTLIFTING,
+ EXERCISE_TYPE_WHEELCHAIR,
+ EXERCISE_TYPE_OTHER_WORKOUT,
+ EXERCISE_TYPE_YOGA,
+ ]
)
annotation class ExerciseTypes
}
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SleepSessionRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SleepSessionRecord.kt
index 2337212..4aafec9 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SleepSessionRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SleepSessionRecord.kt
@@ -32,14 +32,15 @@
* continuous but shouldn't overlap.
*
* Example code demonstrate how to read sleep session with stages:
+ *
* @sample androidx.health.connect.client.samples.ReadSleepSessions
*
* When deleting a session, associated sleep stage records need to be deleted separately:
- * @sample androidx.health.connect.client.samples.DeleteSleepSession
*
+ * @sample androidx.health.connect.client.samples.DeleteSleepSession
* @see SleepStageRecord
*/
-public class SleepSessionRecord @RestrictTo(RestrictTo.Scope.LIBRARY) constructor(
+public class SleepSessionRecord(
override val startTime: Instant,
override val startZoneOffset: ZoneOffset?,
override val endTime: Instant,
@@ -48,30 +49,9 @@
public val title: String? = null,
/** Additional notes for the session. Optional field. */
public val notes: String? = null,
- @get:RestrictTo(RestrictTo.Scope.LIBRARY)
public val stages: List<Stage> = emptyList(),
override val metadata: Metadata = Metadata.EMPTY,
) : IntervalRecord {
- public constructor(
- startTime: Instant,
- startZoneOffset: ZoneOffset?,
- endTime: Instant,
- endZoneOffset: ZoneOffset?,
- /** Title of the session. Optional field. */
- title: String? = null,
- /** Additional notes for the session. Optional field. */
- notes: String? = null,
- metadata: Metadata = Metadata.EMPTY,
- ) : this(
- startTime,
- startZoneOffset,
- endTime,
- endZoneOffset,
- title,
- notes,
- emptyList(),
- metadata
- )
init {
require(startTime.isBefore(endTime)) { "startTime must be before endTime." }
@@ -124,38 +104,30 @@
AggregateMetric.durationMetric("SleepSession")
/** Use this type if the stage of sleep is unknown. */
- @RestrictTo(RestrictTo.Scope.LIBRARY)
const val STAGE_TYPE_UNKNOWN = 0
/**
* The user is awake and either known to be in bed, or it is unknown whether they are in bed
* or not.
*/
- @RestrictTo(RestrictTo.Scope.LIBRARY)
const val STAGE_TYPE_AWAKE = 1
/** The user is asleep but the particular stage of sleep (light, deep or REM) is unknown. */
- @RestrictTo(RestrictTo.Scope.LIBRARY)
const val STAGE_TYPE_SLEEPING = 2
/** The user is out of bed and assumed to be awake. */
- @RestrictTo(RestrictTo.Scope.LIBRARY)
const val STAGE_TYPE_OUT_OF_BED = 3
/** The user is in a light sleep stage. */
- @RestrictTo(RestrictTo.Scope.LIBRARY)
const val STAGE_TYPE_LIGHT = 4
/** The user is in a deep sleep stage. */
- @RestrictTo(RestrictTo.Scope.LIBRARY)
const val STAGE_TYPE_DEEP = 5
/** The user is in a REM sleep stage. */
- @RestrictTo(RestrictTo.Scope.LIBRARY)
const val STAGE_TYPE_REM = 6
/** The user is awake and in bed. */
- @RestrictTo(RestrictTo.Scope.LIBRARY)
const val STAGE_TYPE_AWAKE_IN_BED = 7
@RestrictTo(RestrictTo.Scope.LIBRARY)
@@ -180,21 +152,22 @@
/**
* Type of sleep stage.
+ *
* @suppress
*/
@Retention(AnnotationRetention.SOURCE)
@IntDef(
value =
- [
- STAGE_TYPE_UNKNOWN,
- STAGE_TYPE_AWAKE,
- STAGE_TYPE_SLEEPING,
- STAGE_TYPE_OUT_OF_BED,
- STAGE_TYPE_LIGHT,
- STAGE_TYPE_DEEP,
- STAGE_TYPE_REM,
- STAGE_TYPE_AWAKE_IN_BED,
- ]
+ [
+ STAGE_TYPE_UNKNOWN,
+ STAGE_TYPE_AWAKE,
+ STAGE_TYPE_SLEEPING,
+ STAGE_TYPE_OUT_OF_BED,
+ STAGE_TYPE_LIGHT,
+ STAGE_TYPE_DEEP,
+ STAGE_TYPE_REM,
+ STAGE_TYPE_AWAKE_IN_BED,
+ ]
)
@RestrictTo(RestrictTo.Scope.LIBRARY)
annotation class StageTypes
@@ -204,7 +177,6 @@
*
* @see SleepSessionRecord
*/
- @RestrictTo(RestrictTo.Scope.LIBRARY)
public class Stage(
val startTime: Instant,
val endTime: Instant,
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SleepStageRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SleepStageRecord.kt
index 1a566d9..f1af1da 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SleepStageRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SleepStageRecord.kt
@@ -26,6 +26,7 @@
*
* @see SleepSessionRecord
*/
+@RestrictTo(RestrictTo.Scope.LIBRARY)
public class SleepStageRecord(
override val startTime: Instant,
override val startZoneOffset: ZoneOffset?,
@@ -94,6 +95,7 @@
/**
* Type of sleep stage.
+ *
* @suppress
*/
@Retention(AnnotationRetention.SOURCE)
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/AggregateRequest.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/AggregateRequest.kt
index a8984a6..e6d96bb 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/AggregateRequest.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/AggregateRequest.kt
@@ -15,10 +15,10 @@
*/
package androidx.health.connect.client.request
+import androidx.health.connect.client.HealthConnectClient
import androidx.health.connect.client.aggregate.AggregateMetric
import androidx.health.connect.client.records.metadata.DataOrigin
import androidx.health.connect.client.time.TimeRangeFilter
-import androidx.health.connect.client.HealthConnectClient
/**
* Request object to read aggregations for given [AggregateMetric]s in Android Health Platform.
diff --git a/health/connect/connect-client/src/main/java/androidx/health/platform/client/service/HealthDataServiceConstants.java b/health/connect/connect-client/src/main/java/androidx/health/platform/client/service/HealthDataServiceConstants.java
index b1922e6..0f531f9 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/platform/client/service/HealthDataServiceConstants.java
+++ b/health/connect/connect-client/src/main/java/androidx/health/platform/client/service/HealthDataServiceConstants.java
@@ -31,7 +31,10 @@
public static final String KEY_GRANTED_PERMISSIONS_STRING = "granted_permissions_string";
public static final String KEY_REQUESTED_PERMISSIONS_JETPACK = "requested_permissions_jetpack";
public static final String KEY_REQUESTED_PERMISSIONS_STRING = "requested_permissions_string";
-
+ public static final String ACTION_REQUEST_ROUTE =
+ "androidx.health.action.REQUEST_EXERCISE_ROUTE";
+ public static final String EXTRA_SESSION_ID = "androidx.health.connect.extra.SESSION_ID";
+ public static final String EXTRA_EXERCISE_ROUTE = "android.health.connect.extra.EXERCISE_ROUTE";
private HealthDataServiceConstants() {}
}
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/permission/RequestExerciseRouteInternalTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/permission/RequestExerciseRouteInternalTest.kt
new file mode 100644
index 0000000..b650485
--- /dev/null
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/permission/RequestExerciseRouteInternalTest.kt
@@ -0,0 +1,136 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+package androidx.health.connect.client.permission
+
+import android.content.Context
+import android.content.Intent
+import androidx.health.connect.client.records.ExerciseRoute
+import androidx.health.connect.client.units.Length
+import androidx.health.platform.client.proto.DataProto
+import androidx.health.platform.client.service.HealthDataServiceConstants
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.google.common.truth.Truth.assertThat
+import java.time.Instant
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+class RequestExerciseRouteInternalTest {
+
+ private lateinit var context: Context
+
+ @Before
+ fun setUp() {
+ context = ApplicationProvider.getApplicationContext()
+ }
+
+ @Test
+ fun createIntentTest() {
+ val requestRouteContract = RequestExerciseRouteInternal()
+ val intent = requestRouteContract.createIntent(context, "someUid")
+ assertThat(intent.action).isEqualTo("androidx.health.action.REQUEST_EXERCISE_ROUTE")
+ assertThat(intent.getStringExtra(HealthDataServiceConstants.EXTRA_SESSION_ID))
+ .isEqualTo("someUid")
+ }
+
+ @Test
+ fun parseIntent_null() {
+ val requestRouteContract = RequestExerciseRouteInternal()
+ val result = requestRouteContract.parseResult(0, null)
+ assertThat(result).isNull()
+ }
+
+ @Test
+ fun parseIntent_emptyIntent() {
+ val requestRouteContract = RequestExerciseRouteInternal()
+ val result = requestRouteContract.parseResult(0, Intent())
+ assertThat(result).isNull()
+ }
+
+ @Test
+ fun parseIntent_emptyRoute() {
+ val requestRouteContract = RequestExerciseRouteInternal()
+ val intent = Intent()
+ intent.putExtra(
+ HealthDataServiceConstants.EXTRA_EXERCISE_ROUTE,
+ androidx.health.platform.client.exerciseroute.ExerciseRoute(
+ DataProto.DataPoint.SubTypeDataList.newBuilder().build()
+ )
+ )
+ val result = requestRouteContract.parseResult(0, intent)
+ assertThat(result).isEqualTo(ExerciseRoute(listOf()))
+ }
+
+ @Test
+ fun parseIntent() {
+ val requestRouteContract = RequestExerciseRouteInternal()
+ val intent = Intent()
+ val protoLocation1 =
+ DataProto.SubTypeDataValue.newBuilder()
+ .setStartTimeMillis(1234L)
+ .setEndTimeMillis(2345L)
+ .putValues("latitude", DataProto.Value.newBuilder().setDoubleVal(23.4).build())
+ .putValues("longitude", DataProto.Value.newBuilder().setDoubleVal(-23.4).build())
+ .putValues("altitude", DataProto.Value.newBuilder().setDoubleVal(12.3).build())
+ .putValues(
+ "horizontal_accuracy",
+ DataProto.Value.newBuilder().setDoubleVal(0.9).build()
+ )
+ .putValues(
+ "vertical_accuracy",
+ DataProto.Value.newBuilder().setDoubleVal(0.3).build()
+ )
+ .build()
+ val protoLocation2 =
+ DataProto.SubTypeDataValue.newBuilder()
+ .setStartTimeMillis(3456L)
+ .setEndTimeMillis(4567L)
+ .putValues("latitude", DataProto.Value.newBuilder().setDoubleVal(23.45).build())
+ .putValues("longitude", DataProto.Value.newBuilder().setDoubleVal(-23.45).build())
+ .build()
+ intent.putExtra(
+ HealthDataServiceConstants.EXTRA_EXERCISE_ROUTE,
+ androidx.health.platform.client.exerciseroute.ExerciseRoute(
+ DataProto.DataPoint.SubTypeDataList.newBuilder()
+ .addAllValues(listOf(protoLocation1, protoLocation2))
+ .build()
+ )
+ )
+ val result = requestRouteContract.parseResult(0, intent)
+ assertThat(result)
+ .isEqualTo(
+ ExerciseRoute(
+ listOf(
+ ExerciseRoute.Location(
+ time = Instant.ofEpochMilli(1234L),
+ latitude = 23.4,
+ longitude = -23.4,
+ horizontalAccuracy = Length.meters(0.9),
+ verticalAccuracy = Length.meters(0.3),
+ altitude = Length.meters(12.3)
+ ),
+ ExerciseRoute.Location(
+ time = Instant.ofEpochMilli(3456L),
+ latitude = 23.45,
+ longitude = -23.45,
+ )
+ )
+ )
+ )
+ }
+}
diff --git a/health/health-services-client/api/1.0.0-beta04.txt b/health/health-services-client/api/1.0.0-beta04.txt
index f2df4c7..92e1fab 100644
--- a/health/health-services-client/api/1.0.0-beta04.txt
+++ b/health/health-services-client/api/1.0.0-beta04.txt
@@ -187,11 +187,11 @@
}
public final class DataPointContainer {
- ctor public DataPointContainer(java.util.Map<androidx.health.services.client.data.DataType<?,?>,? extends java.util.List<? extends androidx.health.services.client.data.DataPoint<?>>> dataPoints);
ctor public DataPointContainer(java.util.List<? extends androidx.health.services.client.data.DataPoint<?>> dataPointList);
+ ctor public DataPointContainer(java.util.Map<androidx.health.services.client.data.DataType<?,?>,? extends java.util.List<? extends androidx.health.services.client.data.DataPoint<?>>> dataPoints);
method public java.util.List<androidx.health.services.client.data.CumulativeDataPoint<?>> getCumulativeDataPoints();
- method public <T, D extends androidx.health.services.client.data.DataPoint<T>> java.util.List<D> getData(androidx.health.services.client.data.DeltaDataType<T,D> type);
method public <T extends java.lang.Number, D extends androidx.health.services.client.data.DataPoint<T>> D? getData(androidx.health.services.client.data.AggregateDataType<T,D> type);
+ method public <T, D extends androidx.health.services.client.data.DataPoint<T>> java.util.List<D> getData(androidx.health.services.client.data.DeltaDataType<T,D> type);
method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getDataTypes();
method public java.util.List<androidx.health.services.client.data.IntervalDataPoint<?>> getIntervalDataPoints();
method public java.util.List<androidx.health.services.client.data.SampleDataPoint<?>> getSampleDataPoints();
@@ -317,8 +317,8 @@
}
public final class ExerciseCapabilities {
- ctor public ExerciseCapabilities(java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities, optional java.util.Set<androidx.health.services.client.data.BatchingMode> supportedBatchingModeOverrides);
ctor public ExerciseCapabilities(java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities);
+ ctor public ExerciseCapabilities(java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities, optional java.util.Set<androidx.health.services.client.data.BatchingMode> supportedBatchingModeOverrides);
method public java.util.Set<androidx.health.services.client.data.ExerciseType> getAutoPauseAndResumeEnabledExercises();
method public androidx.health.services.client.data.ExerciseTypeCapabilities getExerciseTypeCapabilities(androidx.health.services.client.data.ExerciseType exercise);
method public java.util.Set<androidx.health.services.client.data.BatchingMode> getSupportedBatchingModeOverrides();
@@ -331,9 +331,9 @@
}
public final class ExerciseConfig {
- ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters, optional androidx.health.services.client.data.ExerciseTypeConfig? exerciseTypeConfig, optional java.util.Set<androidx.health.services.client.data.BatchingMode> batchingModeOverrides);
- ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters, optional androidx.health.services.client.data.ExerciseTypeConfig? exerciseTypeConfig);
ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters);
+ ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters, optional androidx.health.services.client.data.ExerciseTypeConfig? exerciseTypeConfig);
+ ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters, optional androidx.health.services.client.data.ExerciseTypeConfig? exerciseTypeConfig, optional java.util.Set<androidx.health.services.client.data.BatchingMode> batchingModeOverrides);
method public static androidx.health.services.client.data.ExerciseConfig.Builder builder(androidx.health.services.client.data.ExerciseType exerciseType);
method public java.util.Set<androidx.health.services.client.data.BatchingMode> getBatchingModeOverrides();
method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getDataTypes();
diff --git a/health/health-services-client/api/current.txt b/health/health-services-client/api/current.txt
index f2df4c7..92e1fab 100644
--- a/health/health-services-client/api/current.txt
+++ b/health/health-services-client/api/current.txt
@@ -187,11 +187,11 @@
}
public final class DataPointContainer {
- ctor public DataPointContainer(java.util.Map<androidx.health.services.client.data.DataType<?,?>,? extends java.util.List<? extends androidx.health.services.client.data.DataPoint<?>>> dataPoints);
ctor public DataPointContainer(java.util.List<? extends androidx.health.services.client.data.DataPoint<?>> dataPointList);
+ ctor public DataPointContainer(java.util.Map<androidx.health.services.client.data.DataType<?,?>,? extends java.util.List<? extends androidx.health.services.client.data.DataPoint<?>>> dataPoints);
method public java.util.List<androidx.health.services.client.data.CumulativeDataPoint<?>> getCumulativeDataPoints();
- method public <T, D extends androidx.health.services.client.data.DataPoint<T>> java.util.List<D> getData(androidx.health.services.client.data.DeltaDataType<T,D> type);
method public <T extends java.lang.Number, D extends androidx.health.services.client.data.DataPoint<T>> D? getData(androidx.health.services.client.data.AggregateDataType<T,D> type);
+ method public <T, D extends androidx.health.services.client.data.DataPoint<T>> java.util.List<D> getData(androidx.health.services.client.data.DeltaDataType<T,D> type);
method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getDataTypes();
method public java.util.List<androidx.health.services.client.data.IntervalDataPoint<?>> getIntervalDataPoints();
method public java.util.List<androidx.health.services.client.data.SampleDataPoint<?>> getSampleDataPoints();
@@ -317,8 +317,8 @@
}
public final class ExerciseCapabilities {
- ctor public ExerciseCapabilities(java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities, optional java.util.Set<androidx.health.services.client.data.BatchingMode> supportedBatchingModeOverrides);
ctor public ExerciseCapabilities(java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities);
+ ctor public ExerciseCapabilities(java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities, optional java.util.Set<androidx.health.services.client.data.BatchingMode> supportedBatchingModeOverrides);
method public java.util.Set<androidx.health.services.client.data.ExerciseType> getAutoPauseAndResumeEnabledExercises();
method public androidx.health.services.client.data.ExerciseTypeCapabilities getExerciseTypeCapabilities(androidx.health.services.client.data.ExerciseType exercise);
method public java.util.Set<androidx.health.services.client.data.BatchingMode> getSupportedBatchingModeOverrides();
@@ -331,9 +331,9 @@
}
public final class ExerciseConfig {
- ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters, optional androidx.health.services.client.data.ExerciseTypeConfig? exerciseTypeConfig, optional java.util.Set<androidx.health.services.client.data.BatchingMode> batchingModeOverrides);
- ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters, optional androidx.health.services.client.data.ExerciseTypeConfig? exerciseTypeConfig);
ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters);
+ ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters, optional androidx.health.services.client.data.ExerciseTypeConfig? exerciseTypeConfig);
+ ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters, optional androidx.health.services.client.data.ExerciseTypeConfig? exerciseTypeConfig, optional java.util.Set<androidx.health.services.client.data.BatchingMode> batchingModeOverrides);
method public static androidx.health.services.client.data.ExerciseConfig.Builder builder(androidx.health.services.client.data.ExerciseType exerciseType);
method public java.util.Set<androidx.health.services.client.data.BatchingMode> getBatchingModeOverrides();
method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getDataTypes();
diff --git a/health/health-services-client/api/public_plus_experimental_1.0.0-beta04.txt b/health/health-services-client/api/public_plus_experimental_1.0.0-beta04.txt
index f2df4c7..92e1fab 100644
--- a/health/health-services-client/api/public_plus_experimental_1.0.0-beta04.txt
+++ b/health/health-services-client/api/public_plus_experimental_1.0.0-beta04.txt
@@ -187,11 +187,11 @@
}
public final class DataPointContainer {
- ctor public DataPointContainer(java.util.Map<androidx.health.services.client.data.DataType<?,?>,? extends java.util.List<? extends androidx.health.services.client.data.DataPoint<?>>> dataPoints);
ctor public DataPointContainer(java.util.List<? extends androidx.health.services.client.data.DataPoint<?>> dataPointList);
+ ctor public DataPointContainer(java.util.Map<androidx.health.services.client.data.DataType<?,?>,? extends java.util.List<? extends androidx.health.services.client.data.DataPoint<?>>> dataPoints);
method public java.util.List<androidx.health.services.client.data.CumulativeDataPoint<?>> getCumulativeDataPoints();
- method public <T, D extends androidx.health.services.client.data.DataPoint<T>> java.util.List<D> getData(androidx.health.services.client.data.DeltaDataType<T,D> type);
method public <T extends java.lang.Number, D extends androidx.health.services.client.data.DataPoint<T>> D? getData(androidx.health.services.client.data.AggregateDataType<T,D> type);
+ method public <T, D extends androidx.health.services.client.data.DataPoint<T>> java.util.List<D> getData(androidx.health.services.client.data.DeltaDataType<T,D> type);
method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getDataTypes();
method public java.util.List<androidx.health.services.client.data.IntervalDataPoint<?>> getIntervalDataPoints();
method public java.util.List<androidx.health.services.client.data.SampleDataPoint<?>> getSampleDataPoints();
@@ -317,8 +317,8 @@
}
public final class ExerciseCapabilities {
- ctor public ExerciseCapabilities(java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities, optional java.util.Set<androidx.health.services.client.data.BatchingMode> supportedBatchingModeOverrides);
ctor public ExerciseCapabilities(java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities);
+ ctor public ExerciseCapabilities(java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities, optional java.util.Set<androidx.health.services.client.data.BatchingMode> supportedBatchingModeOverrides);
method public java.util.Set<androidx.health.services.client.data.ExerciseType> getAutoPauseAndResumeEnabledExercises();
method public androidx.health.services.client.data.ExerciseTypeCapabilities getExerciseTypeCapabilities(androidx.health.services.client.data.ExerciseType exercise);
method public java.util.Set<androidx.health.services.client.data.BatchingMode> getSupportedBatchingModeOverrides();
@@ -331,9 +331,9 @@
}
public final class ExerciseConfig {
- ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters, optional androidx.health.services.client.data.ExerciseTypeConfig? exerciseTypeConfig, optional java.util.Set<androidx.health.services.client.data.BatchingMode> batchingModeOverrides);
- ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters, optional androidx.health.services.client.data.ExerciseTypeConfig? exerciseTypeConfig);
ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters);
+ ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters, optional androidx.health.services.client.data.ExerciseTypeConfig? exerciseTypeConfig);
+ ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters, optional androidx.health.services.client.data.ExerciseTypeConfig? exerciseTypeConfig, optional java.util.Set<androidx.health.services.client.data.BatchingMode> batchingModeOverrides);
method public static androidx.health.services.client.data.ExerciseConfig.Builder builder(androidx.health.services.client.data.ExerciseType exerciseType);
method public java.util.Set<androidx.health.services.client.data.BatchingMode> getBatchingModeOverrides();
method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getDataTypes();
diff --git a/health/health-services-client/api/public_plus_experimental_current.txt b/health/health-services-client/api/public_plus_experimental_current.txt
index f2df4c7..92e1fab 100644
--- a/health/health-services-client/api/public_plus_experimental_current.txt
+++ b/health/health-services-client/api/public_plus_experimental_current.txt
@@ -187,11 +187,11 @@
}
public final class DataPointContainer {
- ctor public DataPointContainer(java.util.Map<androidx.health.services.client.data.DataType<?,?>,? extends java.util.List<? extends androidx.health.services.client.data.DataPoint<?>>> dataPoints);
ctor public DataPointContainer(java.util.List<? extends androidx.health.services.client.data.DataPoint<?>> dataPointList);
+ ctor public DataPointContainer(java.util.Map<androidx.health.services.client.data.DataType<?,?>,? extends java.util.List<? extends androidx.health.services.client.data.DataPoint<?>>> dataPoints);
method public java.util.List<androidx.health.services.client.data.CumulativeDataPoint<?>> getCumulativeDataPoints();
- method public <T, D extends androidx.health.services.client.data.DataPoint<T>> java.util.List<D> getData(androidx.health.services.client.data.DeltaDataType<T,D> type);
method public <T extends java.lang.Number, D extends androidx.health.services.client.data.DataPoint<T>> D? getData(androidx.health.services.client.data.AggregateDataType<T,D> type);
+ method public <T, D extends androidx.health.services.client.data.DataPoint<T>> java.util.List<D> getData(androidx.health.services.client.data.DeltaDataType<T,D> type);
method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getDataTypes();
method public java.util.List<androidx.health.services.client.data.IntervalDataPoint<?>> getIntervalDataPoints();
method public java.util.List<androidx.health.services.client.data.SampleDataPoint<?>> getSampleDataPoints();
@@ -317,8 +317,8 @@
}
public final class ExerciseCapabilities {
- ctor public ExerciseCapabilities(java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities, optional java.util.Set<androidx.health.services.client.data.BatchingMode> supportedBatchingModeOverrides);
ctor public ExerciseCapabilities(java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities);
+ ctor public ExerciseCapabilities(java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities, optional java.util.Set<androidx.health.services.client.data.BatchingMode> supportedBatchingModeOverrides);
method public java.util.Set<androidx.health.services.client.data.ExerciseType> getAutoPauseAndResumeEnabledExercises();
method public androidx.health.services.client.data.ExerciseTypeCapabilities getExerciseTypeCapabilities(androidx.health.services.client.data.ExerciseType exercise);
method public java.util.Set<androidx.health.services.client.data.BatchingMode> getSupportedBatchingModeOverrides();
@@ -331,9 +331,9 @@
}
public final class ExerciseConfig {
- ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters, optional androidx.health.services.client.data.ExerciseTypeConfig? exerciseTypeConfig, optional java.util.Set<androidx.health.services.client.data.BatchingMode> batchingModeOverrides);
- ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters, optional androidx.health.services.client.data.ExerciseTypeConfig? exerciseTypeConfig);
ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters);
+ ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters, optional androidx.health.services.client.data.ExerciseTypeConfig? exerciseTypeConfig);
+ ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters, optional androidx.health.services.client.data.ExerciseTypeConfig? exerciseTypeConfig, optional java.util.Set<androidx.health.services.client.data.BatchingMode> batchingModeOverrides);
method public static androidx.health.services.client.data.ExerciseConfig.Builder builder(androidx.health.services.client.data.ExerciseType exerciseType);
method public java.util.Set<androidx.health.services.client.data.BatchingMode> getBatchingModeOverrides();
method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getDataTypes();
diff --git a/health/health-services-client/api/restricted_1.0.0-beta04.txt b/health/health-services-client/api/restricted_1.0.0-beta04.txt
index f2df4c7..92e1fab 100644
--- a/health/health-services-client/api/restricted_1.0.0-beta04.txt
+++ b/health/health-services-client/api/restricted_1.0.0-beta04.txt
@@ -187,11 +187,11 @@
}
public final class DataPointContainer {
- ctor public DataPointContainer(java.util.Map<androidx.health.services.client.data.DataType<?,?>,? extends java.util.List<? extends androidx.health.services.client.data.DataPoint<?>>> dataPoints);
ctor public DataPointContainer(java.util.List<? extends androidx.health.services.client.data.DataPoint<?>> dataPointList);
+ ctor public DataPointContainer(java.util.Map<androidx.health.services.client.data.DataType<?,?>,? extends java.util.List<? extends androidx.health.services.client.data.DataPoint<?>>> dataPoints);
method public java.util.List<androidx.health.services.client.data.CumulativeDataPoint<?>> getCumulativeDataPoints();
- method public <T, D extends androidx.health.services.client.data.DataPoint<T>> java.util.List<D> getData(androidx.health.services.client.data.DeltaDataType<T,D> type);
method public <T extends java.lang.Number, D extends androidx.health.services.client.data.DataPoint<T>> D? getData(androidx.health.services.client.data.AggregateDataType<T,D> type);
+ method public <T, D extends androidx.health.services.client.data.DataPoint<T>> java.util.List<D> getData(androidx.health.services.client.data.DeltaDataType<T,D> type);
method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getDataTypes();
method public java.util.List<androidx.health.services.client.data.IntervalDataPoint<?>> getIntervalDataPoints();
method public java.util.List<androidx.health.services.client.data.SampleDataPoint<?>> getSampleDataPoints();
@@ -317,8 +317,8 @@
}
public final class ExerciseCapabilities {
- ctor public ExerciseCapabilities(java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities, optional java.util.Set<androidx.health.services.client.data.BatchingMode> supportedBatchingModeOverrides);
ctor public ExerciseCapabilities(java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities);
+ ctor public ExerciseCapabilities(java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities, optional java.util.Set<androidx.health.services.client.data.BatchingMode> supportedBatchingModeOverrides);
method public java.util.Set<androidx.health.services.client.data.ExerciseType> getAutoPauseAndResumeEnabledExercises();
method public androidx.health.services.client.data.ExerciseTypeCapabilities getExerciseTypeCapabilities(androidx.health.services.client.data.ExerciseType exercise);
method public java.util.Set<androidx.health.services.client.data.BatchingMode> getSupportedBatchingModeOverrides();
@@ -331,9 +331,9 @@
}
public final class ExerciseConfig {
- ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters, optional androidx.health.services.client.data.ExerciseTypeConfig? exerciseTypeConfig, optional java.util.Set<androidx.health.services.client.data.BatchingMode> batchingModeOverrides);
- ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters, optional androidx.health.services.client.data.ExerciseTypeConfig? exerciseTypeConfig);
ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters);
+ ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters, optional androidx.health.services.client.data.ExerciseTypeConfig? exerciseTypeConfig);
+ ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters, optional androidx.health.services.client.data.ExerciseTypeConfig? exerciseTypeConfig, optional java.util.Set<androidx.health.services.client.data.BatchingMode> batchingModeOverrides);
method public static androidx.health.services.client.data.ExerciseConfig.Builder builder(androidx.health.services.client.data.ExerciseType exerciseType);
method public java.util.Set<androidx.health.services.client.data.BatchingMode> getBatchingModeOverrides();
method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getDataTypes();
diff --git a/health/health-services-client/api/restricted_current.txt b/health/health-services-client/api/restricted_current.txt
index f2df4c7..92e1fab 100644
--- a/health/health-services-client/api/restricted_current.txt
+++ b/health/health-services-client/api/restricted_current.txt
@@ -187,11 +187,11 @@
}
public final class DataPointContainer {
- ctor public DataPointContainer(java.util.Map<androidx.health.services.client.data.DataType<?,?>,? extends java.util.List<? extends androidx.health.services.client.data.DataPoint<?>>> dataPoints);
ctor public DataPointContainer(java.util.List<? extends androidx.health.services.client.data.DataPoint<?>> dataPointList);
+ ctor public DataPointContainer(java.util.Map<androidx.health.services.client.data.DataType<?,?>,? extends java.util.List<? extends androidx.health.services.client.data.DataPoint<?>>> dataPoints);
method public java.util.List<androidx.health.services.client.data.CumulativeDataPoint<?>> getCumulativeDataPoints();
- method public <T, D extends androidx.health.services.client.data.DataPoint<T>> java.util.List<D> getData(androidx.health.services.client.data.DeltaDataType<T,D> type);
method public <T extends java.lang.Number, D extends androidx.health.services.client.data.DataPoint<T>> D? getData(androidx.health.services.client.data.AggregateDataType<T,D> type);
+ method public <T, D extends androidx.health.services.client.data.DataPoint<T>> java.util.List<D> getData(androidx.health.services.client.data.DeltaDataType<T,D> type);
method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getDataTypes();
method public java.util.List<androidx.health.services.client.data.IntervalDataPoint<?>> getIntervalDataPoints();
method public java.util.List<androidx.health.services.client.data.SampleDataPoint<?>> getSampleDataPoints();
@@ -317,8 +317,8 @@
}
public final class ExerciseCapabilities {
- ctor public ExerciseCapabilities(java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities, optional java.util.Set<androidx.health.services.client.data.BatchingMode> supportedBatchingModeOverrides);
ctor public ExerciseCapabilities(java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities);
+ ctor public ExerciseCapabilities(java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities, optional java.util.Set<androidx.health.services.client.data.BatchingMode> supportedBatchingModeOverrides);
method public java.util.Set<androidx.health.services.client.data.ExerciseType> getAutoPauseAndResumeEnabledExercises();
method public androidx.health.services.client.data.ExerciseTypeCapabilities getExerciseTypeCapabilities(androidx.health.services.client.data.ExerciseType exercise);
method public java.util.Set<androidx.health.services.client.data.BatchingMode> getSupportedBatchingModeOverrides();
@@ -331,9 +331,9 @@
}
public final class ExerciseConfig {
- ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters, optional androidx.health.services.client.data.ExerciseTypeConfig? exerciseTypeConfig, optional java.util.Set<androidx.health.services.client.data.BatchingMode> batchingModeOverrides);
- ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters, optional androidx.health.services.client.data.ExerciseTypeConfig? exerciseTypeConfig);
ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters);
+ ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters, optional androidx.health.services.client.data.ExerciseTypeConfig? exerciseTypeConfig);
+ ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters, optional androidx.health.services.client.data.ExerciseTypeConfig? exerciseTypeConfig, optional java.util.Set<androidx.health.services.client.data.BatchingMode> batchingModeOverrides);
method public static androidx.health.services.client.data.ExerciseConfig.Builder builder(androidx.health.services.client.data.ExerciseType exerciseType);
method public java.util.Set<androidx.health.services.client.data.BatchingMode> getBatchingModeOverrides();
method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getDataTypes();
diff --git a/health/health-services-client/build.gradle b/health/health-services-client/build.gradle
index 65a44a0..a0df417 100644
--- a/health/health-services-client/build.gradle
+++ b/health/health-services-client/build.gradle
@@ -79,7 +79,7 @@
}
androidx {
- name = "AndroidX Health Services Client Library"
+ name = "Health Services Client"
type = LibraryType.PUBLISHED_LIBRARY
mavenVersion = LibraryVersions.HEALTH_SERVICES_CLIENT
inceptionYear = "2021"
diff --git a/health/health-services-client/src/main/java/androidx/health/services/client/ExerciseClient.kt b/health/health-services-client/src/main/java/androidx/health/services/client/ExerciseClient.kt
index e1b58d7..080b83a 100644
--- a/health/health-services-client/src/main/java/androidx/health/services/client/ExerciseClient.kt
+++ b/health/health-services-client/src/main/java/androidx/health/services/client/ExerciseClient.kt
@@ -21,10 +21,10 @@
import androidx.health.services.client.data.DataType
import androidx.health.services.client.data.ExerciseCapabilities
import androidx.health.services.client.data.ExerciseConfig
+import androidx.health.services.client.data.ExerciseEndReason
import androidx.health.services.client.data.ExerciseGoal
import androidx.health.services.client.data.ExerciseInfo
import androidx.health.services.client.data.ExerciseState
-import androidx.health.services.client.data.ExerciseEndReason
import androidx.health.services.client.data.ExerciseType
import androidx.health.services.client.data.ExerciseTypeConfig
import androidx.health.services.client.data.ExerciseUpdate
diff --git a/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseEndReason.kt b/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseEndReason.kt
index b0ac3ad..6072b1d9 100644
--- a/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseEndReason.kt
+++ b/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseEndReason.kt
@@ -18,8 +18,8 @@
import androidx.annotation.IntDef
import androidx.annotation.RestrictTo
-import androidx.health.services.client.proto.DataProto
import androidx.health.services.client.ExerciseClient
+import androidx.health.services.client.proto.DataProto
import kotlin.annotation.AnnotationRetention.SOURCE
/**
diff --git a/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseUpdate.kt b/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseUpdate.kt
index 456443a..bf9b12f 100644
--- a/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseUpdate.kt
+++ b/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseUpdate.kt
@@ -16,13 +16,13 @@
package androidx.health.services.client.data
-import androidx.health.services.client.proto.DataProto.ExerciseUpdate.LatestMetricsEntry as LatestMetricsEntryProto
import androidx.annotation.RestrictTo
import androidx.annotation.RestrictTo.Scope
import androidx.health.services.client.data.ExerciseEndReason.Companion.toProto
import androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint
import androidx.health.services.client.proto.DataProto
import androidx.health.services.client.proto.DataProto.AchievedExerciseGoal
+import androidx.health.services.client.proto.DataProto.ExerciseUpdate.LatestMetricsEntry as LatestMetricsEntryProto
import java.time.Duration
import java.time.Instant
diff --git a/health/health-services-client/src/main/java/androidx/health/services/client/data/LocationAccuracy.kt b/health/health-services-client/src/main/java/androidx/health/services/client/data/LocationAccuracy.kt
index 25aa2a8..4d5edbf 100644
--- a/health/health-services-client/src/main/java/androidx/health/services/client/data/LocationAccuracy.kt
+++ b/health/health-services-client/src/main/java/androidx/health/services/client/data/LocationAccuracy.kt
@@ -16,10 +16,10 @@
package androidx.health.services.client.data
-import androidx.health.services.client.proto.DataProto
-import androidx.health.services.client.proto.DataProto.DataPointAccuracy.LocationAccuracy as LocationAccuracyProto
import android.util.Log
import androidx.annotation.FloatRange
+import androidx.health.services.client.proto.DataProto
+import androidx.health.services.client.proto.DataProto.DataPointAccuracy.LocationAccuracy as LocationAccuracyProto
/** Accuracy for a [DataType.LOCATION] data point. */
@Suppress("ParcelCreator")
diff --git a/health/health-services-client/src/main/java/androidx/health/services/client/data/PassiveGoal.kt b/health/health-services-client/src/main/java/androidx/health/services/client/data/PassiveGoal.kt
index bfb1d9a..71c64a0 100644
--- a/health/health-services-client/src/main/java/androidx/health/services/client/data/PassiveGoal.kt
+++ b/health/health-services-client/src/main/java/androidx/health/services/client/data/PassiveGoal.kt
@@ -16,10 +16,10 @@
package androidx.health.services.client.data
-import androidx.health.services.client.proto.DataProto.PassiveGoal as PassiveGoalProto
import androidx.annotation.IntDef
import androidx.annotation.RestrictTo
import androidx.health.services.client.data.PassiveGoal.TriggerFrequency.Companion.toProto
+import androidx.health.services.client.proto.DataProto.PassiveGoal as PassiveGoalProto
/**
* Defines a passive goal that will be triggered when the specified condition is met which will
diff --git a/health/health-services-client/src/main/java/androidx/health/services/client/data/PassiveMonitoringUpdate.kt b/health/health-services-client/src/main/java/androidx/health/services/client/data/PassiveMonitoringUpdate.kt
index 61b74cb..1f262f7 100644
--- a/health/health-services-client/src/main/java/androidx/health/services/client/data/PassiveMonitoringUpdate.kt
+++ b/health/health-services-client/src/main/java/androidx/health/services/client/data/PassiveMonitoringUpdate.kt
@@ -16,8 +16,8 @@
package androidx.health.services.client.data
-import androidx.health.services.client.proto.DataProto.PassiveMonitoringUpdate as PassiveMonitoringUpdateProto
import androidx.health.services.client.proto.DataProto
+import androidx.health.services.client.proto.DataProto.PassiveMonitoringUpdate as PassiveMonitoringUpdateProto
/**
* Represents an update from Passive tracking.
diff --git a/health/health-services-client/src/test/java/androidx/health/services/client/data/DataTypeTest.kt b/health/health-services-client/src/test/java/androidx/health/services/client/data/DataTypeTest.kt
index 3d9858c..6ab8729 100644
--- a/health/health-services-client/src/test/java/androidx/health/services/client/data/DataTypeTest.kt
+++ b/health/health-services-client/src/test/java/androidx/health/services/client/data/DataTypeTest.kt
@@ -20,14 +20,14 @@
import androidx.health.services.client.data.DataType.Companion.ABSOLUTE_ELEVATION_STATS
import androidx.health.services.client.data.DataType.Companion.ACTIVE_EXERCISE_DURATION_TOTAL
import androidx.health.services.client.data.DataType.Companion.CALORIES
-import androidx.health.services.client.data.DataType.Companion.CALORIES_TOTAL
import androidx.health.services.client.data.DataType.Companion.CALORIES_DAILY
+import androidx.health.services.client.data.DataType.Companion.CALORIES_TOTAL
import androidx.health.services.client.data.DataType.Companion.DISTANCE_DAILY
import androidx.health.services.client.data.DataType.Companion.FLOORS_DAILY
-import androidx.health.services.client.data.DataType.Companion.STEPS_DAILY
import androidx.health.services.client.data.DataType.Companion.FORMAT_BYTE_ARRAY
import androidx.health.services.client.data.DataType.Companion.LOCATION
import androidx.health.services.client.data.DataType.Companion.STEPS
+import androidx.health.services.client.data.DataType.Companion.STEPS_DAILY
import androidx.health.services.client.data.DataType.Companion.SWIMMING_LAP_COUNT
import androidx.health.services.client.data.DataType.TimeType.Companion.INTERVAL
import androidx.health.services.client.data.DataType.TimeType.Companion.UNKNOWN
@@ -36,11 +36,11 @@
import androidx.health.services.client.proto.DataProto.DataType.TimeType.TIME_TYPE_UNKNOWN
import com.google.common.truth.Truth.assertThat
import kotlin.reflect.KVisibility
+import kotlin.reflect.full.declaredMemberProperties
+import kotlin.reflect.jvm.javaField
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
-import kotlin.reflect.full.declaredMemberProperties
-import kotlin.reflect.jvm.javaField
@RunWith(RobolectricTestRunner::class)
internal class DataTypeTest {
diff --git a/health/health-services-client/src/test/java/androidx/health/services/client/impl/ServiceBackedExerciseClientTest.kt b/health/health-services-client/src/test/java/androidx/health/services/client/impl/ServiceBackedExerciseClientTest.kt
index 1164cbf..c918351 100644
--- a/health/health-services-client/src/test/java/androidx/health/services/client/impl/ServiceBackedExerciseClientTest.kt
+++ b/health/health-services-client/src/test/java/androidx/health/services/client/impl/ServiceBackedExerciseClientTest.kt
@@ -31,8 +31,8 @@
import androidx.health.services.client.data.ExerciseLapSummary
import androidx.health.services.client.data.ExerciseType
import androidx.health.services.client.data.ExerciseUpdate
-import androidx.health.services.client.data.WarmUpConfig
import androidx.health.services.client.data.GolfExerciseTypeConfig
+import androidx.health.services.client.data.WarmUpConfig
import androidx.health.services.client.impl.event.ExerciseUpdateListenerEvent
import androidx.health.services.client.impl.internal.IExerciseInfoCallback
import androidx.health.services.client.impl.internal.IStatusCallback
diff --git a/heifwriter/heifwriter/api/current.txt b/heifwriter/heifwriter/api/current.txt
index 8a45d85..ce07b53 100644
--- a/heifwriter/heifwriter/api/current.txt
+++ b/heifwriter/heifwriter/api/current.txt
@@ -16,8 +16,8 @@
}
public static final class HeifWriter.Builder {
- ctor public HeifWriter.Builder(String, int, int, int);
ctor public HeifWriter.Builder(java.io.FileDescriptor, int, int, int);
+ ctor public HeifWriter.Builder(String, int, int, int);
method public androidx.heifwriter.HeifWriter! build() throws java.io.IOException;
method public androidx.heifwriter.HeifWriter.Builder! setGridEnabled(boolean);
method public androidx.heifwriter.HeifWriter.Builder! setHandler(android.os.Handler?);
diff --git a/heifwriter/heifwriter/api/public_plus_experimental_current.txt b/heifwriter/heifwriter/api/public_plus_experimental_current.txt
index 8a45d85..ce07b53 100644
--- a/heifwriter/heifwriter/api/public_plus_experimental_current.txt
+++ b/heifwriter/heifwriter/api/public_plus_experimental_current.txt
@@ -16,8 +16,8 @@
}
public static final class HeifWriter.Builder {
- ctor public HeifWriter.Builder(String, int, int, int);
ctor public HeifWriter.Builder(java.io.FileDescriptor, int, int, int);
+ ctor public HeifWriter.Builder(String, int, int, int);
method public androidx.heifwriter.HeifWriter! build() throws java.io.IOException;
method public androidx.heifwriter.HeifWriter.Builder! setGridEnabled(boolean);
method public androidx.heifwriter.HeifWriter.Builder! setHandler(android.os.Handler?);
diff --git a/heifwriter/heifwriter/api/restricted_current.txt b/heifwriter/heifwriter/api/restricted_current.txt
index 8a45d85..ce07b53 100644
--- a/heifwriter/heifwriter/api/restricted_current.txt
+++ b/heifwriter/heifwriter/api/restricted_current.txt
@@ -16,8 +16,8 @@
}
public static final class HeifWriter.Builder {
- ctor public HeifWriter.Builder(String, int, int, int);
ctor public HeifWriter.Builder(java.io.FileDescriptor, int, int, int);
+ ctor public HeifWriter.Builder(String, int, int, int);
method public androidx.heifwriter.HeifWriter! build() throws java.io.IOException;
method public androidx.heifwriter.HeifWriter.Builder! setGridEnabled(boolean);
method public androidx.heifwriter.HeifWriter.Builder! setHandler(android.os.Handler?);
diff --git a/heifwriter/heifwriter/build.gradle b/heifwriter/heifwriter/build.gradle
index 7bffa1a7..3e8ff02 100644
--- a/heifwriter/heifwriter/build.gradle
+++ b/heifwriter/heifwriter/build.gradle
@@ -23,7 +23,7 @@
}
androidx {
- name = "Android Support HeifWriter"
+ name = "HeifWriter"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "Android Support HeifWriter for writing HEIF still images"
diff --git a/hilt/hilt-common/build.gradle b/hilt/hilt-common/build.gradle
index 24537d9..4737307 100644
--- a/hilt/hilt-common/build.gradle
+++ b/hilt/hilt-common/build.gradle
@@ -27,7 +27,7 @@
}
androidx {
- name = "AndroidX Hilt Extension Annotations"
+ name = "Hilt Common"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.HILT
inceptionYear = "2020"
diff --git a/hilt/hilt-compiler/build.gradle b/hilt/hilt-compiler/build.gradle
index eb22d1c..e6b2f0e7 100644
--- a/hilt/hilt-compiler/build.gradle
+++ b/hilt/hilt-compiler/build.gradle
@@ -52,7 +52,7 @@
}
androidx {
- name = "AndroidX Hilt Extension Compiler"
+ name = "Hilt Extension Compiler"
type = LibraryType.ANNOTATION_PROCESSOR
mavenVersion = LibraryVersions.HILT
inceptionYear = "2020"
diff --git a/hilt/hilt-compiler/src/main/kotlin/androidx/hilt/AndroidXHiltProcessor.kt b/hilt/hilt-compiler/src/main/kotlin/androidx/hilt/AndroidXHiltProcessor.kt
index 668af93..277140b 100644
--- a/hilt/hilt-compiler/src/main/kotlin/androidx/hilt/AndroidXHiltProcessor.kt
+++ b/hilt/hilt-compiler/src/main/kotlin/androidx/hilt/AndroidXHiltProcessor.kt
@@ -18,14 +18,14 @@
import androidx.hilt.work.WorkerStep
import com.google.auto.service.AutoService
-import net.ltgt.gradle.incap.IncrementalAnnotationProcessor
-import net.ltgt.gradle.incap.IncrementalAnnotationProcessorType.ISOLATING
import javax.annotation.processing.AbstractProcessor
import javax.annotation.processing.Processor
import javax.annotation.processing.RoundEnvironment
import javax.lang.model.SourceVersion
import javax.lang.model.element.Element
import javax.lang.model.element.TypeElement
+import net.ltgt.gradle.incap.IncrementalAnnotationProcessor
+import net.ltgt.gradle.incap.IncrementalAnnotationProcessorType.ISOLATING
/**
* Annotation processor for the various AndroidX Hilt extensions.
diff --git a/hilt/hilt-navigation-compose/src/androidTest/java/androidx/hilt/navigation/compose/HiltViewModelComposeTest.kt b/hilt/hilt-navigation-compose/src/androidTest/java/androidx/hilt/navigation/compose/HiltViewModelComposeTest.kt
index 9ca7c4d..ad8f010 100644
--- a/hilt/hilt-navigation-compose/src/androidTest/java/androidx/hilt/navigation/compose/HiltViewModelComposeTest.kt
+++ b/hilt/hilt-navigation-compose/src/androidTest/java/androidx/hilt/navigation/compose/HiltViewModelComposeTest.kt
@@ -48,10 +48,10 @@
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.android.testing.HiltAndroidRule
import dagger.hilt.android.testing.HiltAndroidTest
+import javax.inject.Inject
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import javax.inject.Inject
@LargeTest
@HiltAndroidTest
diff --git a/hilt/hilt-navigation-fragment/build.gradle b/hilt/hilt-navigation-fragment/build.gradle
index 22eea96..814229f 100644
--- a/hilt/hilt-navigation-fragment/build.gradle
+++ b/hilt/hilt-navigation-fragment/build.gradle
@@ -56,7 +56,7 @@
}
androidx {
- name = "Android Navigation Fragment Hilt Extension"
+ name = "Navigation Fragment Hilt Extension"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.HILT
inceptionYear = "2021"
diff --git a/hilt/hilt-navigation-fragment/src/androidTest/java/androidx/hilt/navigation/fragment/HiltNavGraphViewModelLazyTest.kt b/hilt/hilt-navigation-fragment/src/androidTest/java/androidx/hilt/navigation/fragment/HiltNavGraphViewModelLazyTest.kt
index 06352ae..6cc6dc8 100644
--- a/hilt/hilt-navigation-fragment/src/androidTest/java/androidx/hilt/navigation/fragment/HiltNavGraphViewModelLazyTest.kt
+++ b/hilt/hilt-navigation-fragment/src/androidTest/java/androidx/hilt/navigation/fragment/HiltNavGraphViewModelLazyTest.kt
@@ -38,10 +38,10 @@
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.android.testing.HiltAndroidRule
import dagger.hilt.android.testing.HiltAndroidTest
+import javax.inject.Inject
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import javax.inject.Inject
/*
* Copyright 2021 The Android Open Source Project
diff --git a/hilt/hilt-navigation/api/current.txt b/hilt/hilt-navigation/api/current.txt
index cc317b6..551dabc 100644
--- a/hilt/hilt-navigation/api/current.txt
+++ b/hilt/hilt-navigation/api/current.txt
@@ -2,8 +2,8 @@
package androidx.hilt.navigation {
public final class HiltViewModelFactory {
- method public static androidx.lifecycle.ViewModelProvider.Factory create(android.content.Context context, androidx.navigation.NavBackStackEntry navBackStackEntry);
method public static androidx.lifecycle.ViewModelProvider.Factory create(android.content.Context context, androidx.lifecycle.ViewModelProvider.Factory delegateFactory);
+ method public static androidx.lifecycle.ViewModelProvider.Factory create(android.content.Context context, androidx.navigation.NavBackStackEntry navBackStackEntry);
}
}
diff --git a/hilt/hilt-navigation/api/public_plus_experimental_current.txt b/hilt/hilt-navigation/api/public_plus_experimental_current.txt
index cc317b6..551dabc 100644
--- a/hilt/hilt-navigation/api/public_plus_experimental_current.txt
+++ b/hilt/hilt-navigation/api/public_plus_experimental_current.txt
@@ -2,8 +2,8 @@
package androidx.hilt.navigation {
public final class HiltViewModelFactory {
- method public static androidx.lifecycle.ViewModelProvider.Factory create(android.content.Context context, androidx.navigation.NavBackStackEntry navBackStackEntry);
method public static androidx.lifecycle.ViewModelProvider.Factory create(android.content.Context context, androidx.lifecycle.ViewModelProvider.Factory delegateFactory);
+ method public static androidx.lifecycle.ViewModelProvider.Factory create(android.content.Context context, androidx.navigation.NavBackStackEntry navBackStackEntry);
}
}
diff --git a/hilt/hilt-navigation/api/restricted_current.txt b/hilt/hilt-navigation/api/restricted_current.txt
index cc317b6..551dabc 100644
--- a/hilt/hilt-navigation/api/restricted_current.txt
+++ b/hilt/hilt-navigation/api/restricted_current.txt
@@ -2,8 +2,8 @@
package androidx.hilt.navigation {
public final class HiltViewModelFactory {
- method public static androidx.lifecycle.ViewModelProvider.Factory create(android.content.Context context, androidx.navigation.NavBackStackEntry navBackStackEntry);
method public static androidx.lifecycle.ViewModelProvider.Factory create(android.content.Context context, androidx.lifecycle.ViewModelProvider.Factory delegateFactory);
+ method public static androidx.lifecycle.ViewModelProvider.Factory create(android.content.Context context, androidx.navigation.NavBackStackEntry navBackStackEntry);
}
}
diff --git a/hilt/hilt-navigation/build.gradle b/hilt/hilt-navigation/build.gradle
index ad4e41a..6539c86 100644
--- a/hilt/hilt-navigation/build.gradle
+++ b/hilt/hilt-navigation/build.gradle
@@ -32,7 +32,7 @@
}
androidx {
- name = "Android Navigation Hilt Extension"
+ name = "Navigation Hilt Extension"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.HILT
inceptionYear = "2021"
diff --git a/hilt/hilt-work/build.gradle b/hilt/hilt-work/build.gradle
index 46f258b..abe1186 100644
--- a/hilt/hilt-work/build.gradle
+++ b/hilt/hilt-work/build.gradle
@@ -37,7 +37,7 @@
}
androidx {
- name = "Android Lifecycle WorkManager Hilt Extension"
+ name = "WorkManager Hilt Extension"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.HILT
inceptionYear = "2020"
diff --git a/hilt/integration-tests/workerapp/src/androidTest/java/androidx/hilt/integration/workerapp/SimpleTest.kt b/hilt/integration-tests/workerapp/src/androidTest/java/androidx/hilt/integration/workerapp/SimpleTest.kt
index 477c46b..46cc51c 100644
--- a/hilt/integration-tests/workerapp/src/androidTest/java/androidx/hilt/integration/workerapp/SimpleTest.kt
+++ b/hilt/integration-tests/workerapp/src/androidTest/java/androidx/hilt/integration/workerapp/SimpleTest.kt
@@ -27,12 +27,12 @@
import com.google.common.truth.Truth.assertThat
import dagger.hilt.android.testing.HiltAndroidRule
import dagger.hilt.android.testing.HiltAndroidTest
+import javax.inject.Inject
import kotlinx.coroutines.runBlocking
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import javax.inject.Inject
@SmallTest
@HiltAndroidTest
diff --git a/input/input-motionprediction/build.gradle b/input/input-motionprediction/build.gradle
index c630796..e5e6f105 100644
--- a/input/input-motionprediction/build.gradle
+++ b/input/input-motionprediction/build.gradle
@@ -39,7 +39,7 @@
}
androidx {
- name = "Android Motion Prediction"
+ name = "Motion Prediction"
type = LibraryType.PUBLISHED_LIBRARY
mavenVersion = LibraryVersions.INPUT_MOTIONPREDICTION
inceptionYear = "2022"
diff --git a/inspection/inspection-gradle-plugin/build.gradle b/inspection/inspection-gradle-plugin/build.gradle
index 4589093..bddd9ff 100644
--- a/inspection/inspection-gradle-plugin/build.gradle
+++ b/inspection/inspection-gradle-plugin/build.gradle
@@ -52,7 +52,7 @@
}
androidx {
- name = "Android Inspection Gradle Plugin"
+ name = "Inspection Gradle Plugin"
type = LibraryType.GRADLE_PLUGIN
publish = Publish.NONE
inceptionYear = "2019"
diff --git a/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/GenerateInspectionPlatformVersionTask.kt b/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/GenerateInspectionPlatformVersionTask.kt
index 84a7b25..97c3fc0 100644
--- a/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/GenerateInspectionPlatformVersionTask.kt
+++ b/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/GenerateInspectionPlatformVersionTask.kt
@@ -17,6 +17,7 @@
package androidx.inspection.gradle
import com.android.build.api.variant.Variant
+import java.io.File
import org.gradle.api.DefaultTask
import org.gradle.api.GradleException
import org.gradle.api.Project
@@ -36,7 +37,6 @@
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.TaskProvider
import org.gradle.work.DisableCachingByDefault
-import java.io.File
/**
* Generates a file into META-INF/ folder that has version of androidx.inspection used
diff --git a/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/GenerateProguardDetectionFileTask.kt b/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/GenerateProguardDetectionFileTask.kt
index 9801f3c..aa6d722 100644
--- a/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/GenerateProguardDetectionFileTask.kt
+++ b/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/GenerateProguardDetectionFileTask.kt
@@ -16,6 +16,7 @@
package androidx.inspection.gradle
+import java.io.File
import org.gradle.api.DefaultTask
import org.gradle.api.GradleException
import org.gradle.api.Project
@@ -25,7 +26,6 @@
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.TaskAction
import org.gradle.work.DisableCachingByDefault
-import java.io.File
/**
* Task purposely empty, unused class that would be removed by proguard. See javadoc below for more
* information.
diff --git a/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/InspectionPlugin.kt b/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/InspectionPlugin.kt
index 8a3832e..48c5da5 100644
--- a/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/InspectionPlugin.kt
+++ b/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/InspectionPlugin.kt
@@ -22,19 +22,19 @@
import com.google.protobuf.gradle.GenerateProtoTask
import com.google.protobuf.gradle.ProtobufExtension
import com.google.protobuf.gradle.ProtobufPlugin
+import java.io.File
+import org.gradle.api.GradleException
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration
+import org.gradle.api.artifacts.MinimalExternalModuleDependency
+import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.api.artifacts.type.ArtifactTypeDefinition
import org.gradle.api.attributes.Attribute
import org.gradle.api.tasks.StopExecutionException
import org.gradle.kotlin.dsl.apply
import org.gradle.kotlin.dsl.create
import org.gradle.kotlin.dsl.dependencies
-import java.io.File
-import org.gradle.api.GradleException
-import org.gradle.api.artifacts.MinimalExternalModuleDependency
-import org.gradle.api.artifacts.VersionCatalogsExtension
/**
* A plugin which, when present, ensures that intermediate inspector
diff --git a/inspection/inspection-gradle-plugin/src/test/kotlin/androidx/inspection/gradle/InspectionPluginTest.kt b/inspection/inspection-gradle-plugin/src/test/kotlin/androidx/inspection/gradle/InspectionPluginTest.kt
index 0ed2418..00b6f06 100644
--- a/inspection/inspection-gradle-plugin/src/test/kotlin/androidx/inspection/gradle/InspectionPluginTest.kt
+++ b/inspection/inspection-gradle-plugin/src/test/kotlin/androidx/inspection/gradle/InspectionPluginTest.kt
@@ -17,6 +17,11 @@
package androidx.inspection.gradle
import androidx.testutils.gradle.ProjectSetupRule
+import java.io.BufferedReader
+import java.io.File
+import java.io.InputStreamReader
+import kotlin.test.assertEquals
+import kotlin.test.assertTrue
import org.gradle.testkit.runner.GradleRunner
import org.gradle.testkit.runner.TaskOutcome
import org.junit.Before
@@ -25,11 +30,6 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import java.io.BufferedReader
-import java.io.File
-import java.io.InputStreamReader
-import kotlin.test.assertEquals
-import kotlin.test.assertTrue
@RunWith(JUnit4::class)
class InspectionPluginTest {
diff --git a/inspection/inspection-testing/build.gradle b/inspection/inspection-testing/build.gradle
index 7f51b57..f7b000e 100644
--- a/inspection/inspection-testing/build.gradle
+++ b/inspection/inspection-testing/build.gradle
@@ -37,7 +37,7 @@
}
androidx {
- name = "AndroidX Inspection Testing"
+ name = "Inspection Testing"
type = LibraryType.INTERNAL_TEST_LIBRARY
publish = Publish.NONE
inceptionYear = "2019"
diff --git a/inspection/inspection-testing/src/androidTest/java/androidx/inspection/testing/echo/EchoInspector.kt b/inspection/inspection-testing/src/androidTest/java/androidx/inspection/testing/echo/EchoInspector.kt
index 0af1c8d..a1d4bb3 100644
--- a/inspection/inspection-testing/src/androidTest/java/androidx/inspection/testing/echo/EchoInspector.kt
+++ b/inspection/inspection-testing/src/androidTest/java/androidx/inspection/testing/echo/EchoInspector.kt
@@ -20,12 +20,12 @@
import androidx.inspection.Inspector
import androidx.inspection.InspectorEnvironment
import androidx.inspection.InspectorFactory
+import java.util.concurrent.Executor
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.cancel
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
-import java.util.concurrent.Executor
/**
* An inspector for test purposes, it echoes on commands and sends events once
diff --git a/inspection/inspection-testing/src/main/java/androidx/inspection/testing/InspectorTester.kt b/inspection/inspection-testing/src/main/java/androidx/inspection/testing/InspectorTester.kt
index 0ee526c..ee96110 100644
--- a/inspection/inspection-testing/src/main/java/androidx/inspection/testing/InspectorTester.kt
+++ b/inspection/inspection-testing/src/main/java/androidx/inspection/testing/InspectorTester.kt
@@ -23,6 +23,11 @@
import androidx.inspection.InspectorEnvironment
import androidx.inspection.InspectorExecutors
import androidx.inspection.InspectorFactory
+import java.util.ServiceLoader
+import java.util.concurrent.CancellationException
+import java.util.concurrent.Executor
+import kotlin.coroutines.coroutineContext
+import kotlin.coroutines.resume
import kotlinx.coroutines.CancellableContinuation
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
@@ -35,11 +40,6 @@
import kotlinx.coroutines.launch
import kotlinx.coroutines.suspendCancellableCoroutine
import kotlinx.coroutines.withContext
-import java.util.ServiceLoader
-import java.util.concurrent.CancellationException
-import java.util.concurrent.Executor
-import kotlin.coroutines.coroutineContext
-import kotlin.coroutines.resume
// TODO: should be non suspend function with CoroutineScope receiver, that would automatically
// dispose inspector;
diff --git a/inspection/inspection-testing/src/main/java/androidx/inspection/testing/TestInspectorExecutors.kt b/inspection/inspection-testing/src/main/java/androidx/inspection/testing/TestInspectorExecutors.kt
index 96adc63..645cea9 100644
--- a/inspection/inspection-testing/src/main/java/androidx/inspection/testing/TestInspectorExecutors.kt
+++ b/inspection/inspection-testing/src/main/java/androidx/inspection/testing/TestInspectorExecutors.kt
@@ -19,10 +19,10 @@
import android.os.Handler
import android.os.HandlerThread
import androidx.inspection.InspectorExecutors
-import kotlinx.coroutines.Job
import java.util.concurrent.Executor
import java.util.concurrent.Executors
import java.util.concurrent.RejectedExecutionException
+import kotlinx.coroutines.Job
/**
* Test Inspector Executors.
diff --git a/inspection/inspection/build.gradle b/inspection/inspection/build.gradle
index 5c35b71..a142722 100644
--- a/inspection/inspection/build.gradle
+++ b/inspection/inspection/build.gradle
@@ -34,7 +34,7 @@
}
androidx {
- name = "AndroidX Inspection"
+ name = "Inspection"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2019"
description = "Experimental AndroidX Inspection Project"
diff --git a/inspection/inspection/src/androidTest/java/androidx/inspection/rules/JvmtiRule.kt b/inspection/inspection/src/androidTest/java/androidx/inspection/rules/JvmtiRule.kt
index cccfd9a..3a93a310 100644
--- a/inspection/inspection/src/androidTest/java/androidx/inspection/rules/JvmtiRule.kt
+++ b/inspection/inspection/src/androidTest/java/androidx/inspection/rules/JvmtiRule.kt
@@ -18,8 +18,8 @@
import android.os.Debug
import androidx.annotation.RequiresApi
-import org.junit.rules.ExternalResource
import java.io.IOException
+import org.junit.rules.ExternalResource
@RequiresApi(28)
class JvmtiRule : ExternalResource() {
diff --git a/interpolator/interpolator/build.gradle b/interpolator/interpolator/build.gradle
index 524e14e..00cd919 100644
--- a/interpolator/interpolator/build.gradle
+++ b/interpolator/interpolator/build.gradle
@@ -10,7 +10,7 @@
}
androidx {
- name = "Android Support Library Interpolators"
+ name = "Interpolators"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later."
diff --git a/javascriptengine/javascriptengine/api/current.txt b/javascriptengine/javascriptengine/api/current.txt
index acbbf81..27d3a38 100644
--- a/javascriptengine/javascriptengine/api/current.txt
+++ b/javascriptengine/javascriptengine/api/current.txt
@@ -6,8 +6,8 @@
}
public final class EvaluationResultSizeLimitExceededException extends androidx.javascriptengine.JavaScriptException {
- ctor public EvaluationResultSizeLimitExceededException(String);
ctor public EvaluationResultSizeLimitExceededException();
+ ctor public EvaluationResultSizeLimitExceededException(String);
}
public final class IsolateStartupParameters {
@@ -45,18 +45,18 @@
}
public class JavaScriptException extends java.lang.Exception {
- ctor public JavaScriptException(String);
ctor public JavaScriptException();
+ ctor public JavaScriptException(String);
}
public final class JavaScriptIsolate implements java.lang.AutoCloseable {
method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_CONSOLE_MESSAGING, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public void clearConsoleCallback();
method public void close();
- method public com.google.common.util.concurrent.ListenableFuture<java.lang.String!> evaluateJavaScriptAsync(String);
method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_EVALUATE_WITHOUT_TRANSACTION_LIMIT, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public com.google.common.util.concurrent.ListenableFuture<java.lang.String!> evaluateJavaScriptAsync(byte[]);
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.String!> evaluateJavaScriptAsync(String);
method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_PROVIDE_CONSUME_ARRAY_BUFFER, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public boolean provideNamedData(String, byte[]);
- method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_CONSOLE_MESSAGING, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public void setConsoleCallback(java.util.concurrent.Executor, androidx.javascriptengine.JavaScriptConsoleCallback);
method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_CONSOLE_MESSAGING, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public void setConsoleCallback(androidx.javascriptengine.JavaScriptConsoleCallback);
+ method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_CONSOLE_MESSAGING, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public void setConsoleCallback(java.util.concurrent.Executor, androidx.javascriptengine.JavaScriptConsoleCallback);
}
public final class JavaScriptSandbox implements java.lang.AutoCloseable {
@@ -76,8 +76,8 @@
}
public final class MemoryLimitExceededException extends androidx.javascriptengine.JavaScriptException {
- ctor public MemoryLimitExceededException(String);
ctor public MemoryLimitExceededException();
+ ctor public MemoryLimitExceededException(String);
}
public final class SandboxDeadException extends androidx.javascriptengine.JavaScriptException {
diff --git a/javascriptengine/javascriptengine/api/public_plus_experimental_current.txt b/javascriptengine/javascriptengine/api/public_plus_experimental_current.txt
index acbbf81..27d3a38 100644
--- a/javascriptengine/javascriptengine/api/public_plus_experimental_current.txt
+++ b/javascriptengine/javascriptengine/api/public_plus_experimental_current.txt
@@ -6,8 +6,8 @@
}
public final class EvaluationResultSizeLimitExceededException extends androidx.javascriptengine.JavaScriptException {
- ctor public EvaluationResultSizeLimitExceededException(String);
ctor public EvaluationResultSizeLimitExceededException();
+ ctor public EvaluationResultSizeLimitExceededException(String);
}
public final class IsolateStartupParameters {
@@ -45,18 +45,18 @@
}
public class JavaScriptException extends java.lang.Exception {
- ctor public JavaScriptException(String);
ctor public JavaScriptException();
+ ctor public JavaScriptException(String);
}
public final class JavaScriptIsolate implements java.lang.AutoCloseable {
method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_CONSOLE_MESSAGING, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public void clearConsoleCallback();
method public void close();
- method public com.google.common.util.concurrent.ListenableFuture<java.lang.String!> evaluateJavaScriptAsync(String);
method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_EVALUATE_WITHOUT_TRANSACTION_LIMIT, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public com.google.common.util.concurrent.ListenableFuture<java.lang.String!> evaluateJavaScriptAsync(byte[]);
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.String!> evaluateJavaScriptAsync(String);
method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_PROVIDE_CONSUME_ARRAY_BUFFER, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public boolean provideNamedData(String, byte[]);
- method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_CONSOLE_MESSAGING, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public void setConsoleCallback(java.util.concurrent.Executor, androidx.javascriptengine.JavaScriptConsoleCallback);
method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_CONSOLE_MESSAGING, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public void setConsoleCallback(androidx.javascriptengine.JavaScriptConsoleCallback);
+ method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_CONSOLE_MESSAGING, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public void setConsoleCallback(java.util.concurrent.Executor, androidx.javascriptengine.JavaScriptConsoleCallback);
}
public final class JavaScriptSandbox implements java.lang.AutoCloseable {
@@ -76,8 +76,8 @@
}
public final class MemoryLimitExceededException extends androidx.javascriptengine.JavaScriptException {
- ctor public MemoryLimitExceededException(String);
ctor public MemoryLimitExceededException();
+ ctor public MemoryLimitExceededException(String);
}
public final class SandboxDeadException extends androidx.javascriptengine.JavaScriptException {
diff --git a/javascriptengine/javascriptengine/api/restricted_current.txt b/javascriptengine/javascriptengine/api/restricted_current.txt
index acbbf81..27d3a38 100644
--- a/javascriptengine/javascriptengine/api/restricted_current.txt
+++ b/javascriptengine/javascriptengine/api/restricted_current.txt
@@ -6,8 +6,8 @@
}
public final class EvaluationResultSizeLimitExceededException extends androidx.javascriptengine.JavaScriptException {
- ctor public EvaluationResultSizeLimitExceededException(String);
ctor public EvaluationResultSizeLimitExceededException();
+ ctor public EvaluationResultSizeLimitExceededException(String);
}
public final class IsolateStartupParameters {
@@ -45,18 +45,18 @@
}
public class JavaScriptException extends java.lang.Exception {
- ctor public JavaScriptException(String);
ctor public JavaScriptException();
+ ctor public JavaScriptException(String);
}
public final class JavaScriptIsolate implements java.lang.AutoCloseable {
method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_CONSOLE_MESSAGING, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public void clearConsoleCallback();
method public void close();
- method public com.google.common.util.concurrent.ListenableFuture<java.lang.String!> evaluateJavaScriptAsync(String);
method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_EVALUATE_WITHOUT_TRANSACTION_LIMIT, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public com.google.common.util.concurrent.ListenableFuture<java.lang.String!> evaluateJavaScriptAsync(byte[]);
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.String!> evaluateJavaScriptAsync(String);
method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_PROVIDE_CONSUME_ARRAY_BUFFER, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public boolean provideNamedData(String, byte[]);
- method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_CONSOLE_MESSAGING, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public void setConsoleCallback(java.util.concurrent.Executor, androidx.javascriptengine.JavaScriptConsoleCallback);
method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_CONSOLE_MESSAGING, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public void setConsoleCallback(androidx.javascriptengine.JavaScriptConsoleCallback);
+ method @RequiresFeature(name=androidx.javascriptengine.JavaScriptSandbox.JS_FEATURE_CONSOLE_MESSAGING, enforcement="androidx.javascriptengine.JavaScriptSandbox#isFeatureSupported") public void setConsoleCallback(java.util.concurrent.Executor, androidx.javascriptengine.JavaScriptConsoleCallback);
}
public final class JavaScriptSandbox implements java.lang.AutoCloseable {
@@ -76,8 +76,8 @@
}
public final class MemoryLimitExceededException extends androidx.javascriptengine.JavaScriptException {
- ctor public MemoryLimitExceededException(String);
ctor public MemoryLimitExceededException();
+ ctor public MemoryLimitExceededException(String);
}
public final class SandboxDeadException extends androidx.javascriptengine.JavaScriptException {
diff --git a/javascriptengine/javascriptengine/lint-baseline.xml b/javascriptengine/javascriptengine/lint-baseline.xml
index 4202c21..c449e3c 100644
--- a/javascriptengine/javascriptengine/lint-baseline.xml
+++ b/javascriptengine/javascriptengine/lint-baseline.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.1.0-alpha07" type="baseline" client="gradle" dependencies="false" name="AGP (8.0.0-beta03)" variant="all" version="8.1.0-alpha07">
+<issues format="6" by="lint 8.1.0-beta01" type="baseline" client="gradle" dependencies="false" name="AGP (8.1.0-beta01)" variant="all" version="8.1.0-beta01">
<issue
id="BanHideAnnotation"
@@ -13,73 +13,10 @@
<issue
id="BanThreadSleep"
message="Uses Thread.sleep()"
- errorLine1=" Thread.sleep(1000);"
- errorLine2=" ~~~~~">
- <location
- file="src/androidTest/java/androidx/javascriptengine/WebViewJavaScriptSandboxTest.java"/>
- </issue>
-
- <issue
- id="BanThreadSleep"
- message="Uses Thread.sleep()"
errorLine1=" Thread.sleep(1000);"
errorLine2=" ~~~~~">
<location
file="src/androidTest/java/androidx/javascriptengine/WebViewJavaScriptSandboxTest.java"/>
</issue>
- <issue
- id="PrivateConstructorForUtilityClass"
- message="Utility class is missing private constructor"
- errorLine1="public class Utils {"
- errorLine2=" ~~~~~">
- <location
- file="src/main/java/androidx/javascriptengine/common/Utils.java"/>
- </issue>
-
- <issue
- id="RequireUnstableAidlAnnotation"
- message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
- errorLine1="interface IJsSandboxConsoleCallback {"
- errorLine2="^">
- <location
- file="src/main/aidl/org/chromium/android_webview/js_sandbox/common/IJsSandboxConsoleCallback.aidl"/>
- </issue>
-
- <issue
- id="RequireUnstableAidlAnnotation"
- message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
- errorLine1="interface IJsSandboxIsolate {"
- errorLine2="^">
- <location
- file="src/main/aidl/org/chromium/android_webview/js_sandbox/common/IJsSandboxIsolate.aidl"/>
- </issue>
-
- <issue
- id="RequireUnstableAidlAnnotation"
- message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
- errorLine1="oneway interface IJsSandboxIsolateCallback {"
- errorLine2="^">
- <location
- file="src/main/aidl/org/chromium/android_webview/js_sandbox/common/IJsSandboxIsolateCallback.aidl"/>
- </issue>
-
- <issue
- id="RequireUnstableAidlAnnotation"
- message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
- errorLine1="interface IJsSandboxIsolateSyncCallback {"
- errorLine2="^">
- <location
- file="src/main/aidl/org/chromium/android_webview/js_sandbox/common/IJsSandboxIsolateSyncCallback.aidl"/>
- </issue>
-
- <issue
- id="RequireUnstableAidlAnnotation"
- message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
- errorLine1="interface IJsSandboxService {"
- errorLine2="^">
- <location
- file="src/main/aidl/org/chromium/android_webview/js_sandbox/common/IJsSandboxService.aidl"/>
- </issue>
-
</issues>
diff --git a/javascriptengine/javascriptengine/src/androidTest/java/androidx/javascriptengine/WebViewJavaScriptSandboxTest.java b/javascriptengine/javascriptengine/src/androidTest/java/androidx/javascriptengine/WebViewJavaScriptSandboxTest.java
index 1619734..112cbb3 100644
--- a/javascriptengine/javascriptengine/src/androidTest/java/androidx/javascriptengine/WebViewJavaScriptSandboxTest.java
+++ b/javascriptengine/javascriptengine/src/androidTest/java/androidx/javascriptengine/WebViewJavaScriptSandboxTest.java
@@ -28,6 +28,8 @@
import androidx.test.filters.LargeTest;
import androidx.test.filters.MediumTest;
+// Used for avoiding Java 11+ API java.lang.String.repeat
+import com.google.common.base.Strings;
import com.google.common.util.concurrent.ListenableFuture;
import org.junit.Assert;
@@ -53,7 +55,7 @@
private static final long REASONABLE_HEAP_SIZE = 100 * 1024 * 1024;
@Before
- public void setUp() throws Throwable {
+ public void setUp() {
Assume.assumeTrue(JavaScriptSandbox.isSupported());
}
@@ -250,7 +252,7 @@
Assume.assumeTrue(
jsSandbox.isFeatureSupported(JavaScriptSandbox.JS_FEATURE_ISOLATE_TERMINATION));
- Vector<ListenableFuture<String>> resultFutures = new Vector<ListenableFuture<String>>();
+ Vector<ListenableFuture<String>> resultFutures = new Vector<>();
try (JavaScriptIsolate jsIsolate = jsSandbox.createIsolate()) {
for (int i = 0; i < num_of_evaluations; i++) {
ListenableFuture<String> resultFuture = jsIsolate.evaluateJavaScriptAsync(code);
@@ -379,7 +381,7 @@
jsSandbox.isFeatureSupported(JavaScriptSandbox.JS_FEATURE_PROMISE_RETURN));
ListenableFuture<String> resultFuture1 = jsIsolate.evaluateJavaScriptAsync(code1);
- ListenableFuture<String> resultFuture2 = jsIsolate.evaluateJavaScriptAsync(code2);
+ jsIsolate.evaluateJavaScriptAsync(code2);
String result = resultFuture1.get(5, TimeUnit.SECONDS);
Assert.assertEquals(expected, result);
@@ -422,7 +424,6 @@
jsIsolate.provideNamedData("id-3", bytes);
jsIsolate.provideNamedData("id-4", bytes);
jsIsolate.provideNamedData("id-5", bytes);
- Thread.sleep(1000);
ListenableFuture<String> resultFuture1 = jsIsolate.evaluateJavaScriptAsync(code);
String result = resultFuture1.get(5, TimeUnit.SECONDS);
@@ -434,8 +435,6 @@
@MediumTest
@Ignore("b/268212217")
public void testPromiseEvaluationThrow() throws Throwable {
- final String provideString = "Hello World";
- final byte[] bytes = provideString.getBytes(StandardCharsets.US_ASCII);
final String code = ""
+ "android.consumeNamedDataAsArrayBuffer(\"id-1\").catch((error) => {"
+ " throw new WebAssembly.LinkError('RandomLinkError');"
@@ -500,8 +499,7 @@
// thrown instead.
jsIsolate.close();
try {
- ListenableFuture<String> postCloseResultFuture =
- jsIsolate.evaluateJavaScriptAsync(code);
+ jsIsolate.evaluateJavaScriptAsync(code);
Assert.fail("Should have thrown.");
} catch (IllegalStateException e) {
// Expected
@@ -516,11 +514,11 @@
final String contains = "already bound";
ListenableFuture<JavaScriptSandbox> jsSandboxFuture1 =
JavaScriptSandbox.createConnectedInstanceAsync(context);
- try (JavaScriptSandbox jsSandbox1 = jsSandboxFuture1.get(5, TimeUnit.SECONDS)) {
+ try (JavaScriptSandbox ignored1 = jsSandboxFuture1.get(5, TimeUnit.SECONDS)) {
ListenableFuture<JavaScriptSandbox> jsSandboxFuture2 =
JavaScriptSandbox.createConnectedInstanceAsync(context);
try {
- try (JavaScriptSandbox jsSandbox2 = jsSandboxFuture2.get(5, TimeUnit.SECONDS)) {
+ try (JavaScriptSandbox ignored2 = jsSandboxFuture2.get(5, TimeUnit.SECONDS)) {
Assert.fail("Should have thrown.");
}
} catch (ExecutionException e) {
@@ -826,7 +824,7 @@
// Check reject
try {
- String badPromiseResult = badPromiseFuture.get(5, TimeUnit.SECONDS);
+ badPromiseFuture.get(5, TimeUnit.SECONDS);
Assert.fail("Should have thrown");
} catch (ExecutionException e) {
if (!(e.getCause() instanceof EvaluationFailedException)) {
@@ -842,7 +840,7 @@
@LargeTest
@Ignore("b/268212217")
public void testLargeScriptJsEvaluation() throws Throwable {
- String longString = "a".repeat(2000000);
+ String longString = Strings.repeat("a", 2000000);
final String code = ""
+ "let " + longString + " = 0;"
+ "\"PASS\"";
@@ -867,7 +865,7 @@
@LargeTest
@Ignore("b/268212217")
public void testLargeScriptByteArrayJsEvaluation() throws Throwable {
- final String longString = "a".repeat(2000000);
+ final String longString = Strings.repeat("a", 2000000);
final String codeString = ""
+ "let " + longString + " = 0;"
+ "\"PASS\"";
@@ -893,9 +891,8 @@
@LargeTest
@Ignore("b/268212217")
public void testLargeReturn() throws Throwable {
- final String longString = "a".repeat(2000000);
final String code = "'a'.repeat(2000000);";
- final String expected = longString;
+ final String expected = Strings.repeat("a", 2000000);
Context context = ApplicationProvider.getApplicationContext();
ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
@@ -916,7 +913,7 @@
@LargeTest
@Ignore("b/268212217")
public void testLargeError() throws Throwable {
- final String longString = "a".repeat(2000000);
+ final String longString = Strings.repeat("a", 2000000);
final String code = "throw \"" + longString + "\");";
Context context = ApplicationProvider.getApplicationContext();
@@ -931,8 +928,7 @@
resultFuture.get(5, TimeUnit.SECONDS);
Assert.fail("Should have thrown.");
} catch (ExecutionException e) {
- Assert.assertTrue(e.getCause().getClass().equals(
- EvaluationFailedException.class));
+ Assert.assertEquals(e.getCause().getClass(), EvaluationFailedException.class);
Assert.assertTrue(e.getCause().getMessage().contains(longString));
}
}
@@ -971,7 +967,7 @@
// Running code that returns `maxSize` number of bytes should not throw.
final String maxSizeCode = ""
+ "'a'.repeat(" + maxSize + ");";
- final String maxSizeExpected = "a".repeat(maxSize);
+ final String maxSizeExpected = Strings.repeat("a", maxSize);
ListenableFuture<String> maxSizeResultFuture =
jsIsolate.evaluateJavaScriptAsync(maxSizeCode);
String maxSizeResult = maxSizeResultFuture.get(5, TimeUnit.SECONDS);
@@ -980,7 +976,7 @@
// Running code that returns less than `maxSize` number of bytes should not throw.
final String lessThanMaxSizeCode = ""
+ "'a'.repeat(" + (maxSize - 1) + ");";
- final String lessThanMaxSizeExpected = "a".repeat(maxSize - 1);
+ final String lessThanMaxSizeExpected = Strings.repeat("a", maxSize - 1);
ListenableFuture<String> lessThanMaxSizeResultFuture =
jsIsolate.evaluateJavaScriptAsync(lessThanMaxSizeCode);
String lessThanMaxSizeResult = lessThanMaxSizeResultFuture.get(5,
@@ -1012,7 +1008,7 @@
public void onConsoleMessage(
@NonNull JavaScriptConsoleCallback.ConsoleMessage message) {
synchronized (mLock) {
- mMessages.append(message.toString()).append("\n");
+ mMessages.append(message).append("\n");
}
latch.countDown();
}
diff --git a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/EvaluationResultSizeLimitExceededException.java b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/EvaluationResultSizeLimitExceededException.java
index df56049..e0f04ef 100644
--- a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/EvaluationResultSizeLimitExceededException.java
+++ b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/EvaluationResultSizeLimitExceededException.java
@@ -20,7 +20,7 @@
/**
* Indicates that a JavaScriptIsolate's evaluation failed due to it returning a oversized result.
- *
+ * <p>
* This exception is thrown when exceeding the size limit configured for the isolate via
* {@link IsolateStartupParameters}, or the default limit.
* <p>
diff --git a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateStartupParameters.java b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateStartupParameters.java
index 75655f4..a1f5013 100644
--- a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateStartupParameters.java
+++ b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateStartupParameters.java
@@ -24,7 +24,7 @@
*/
public final class IsolateStartupParameters {
private long mMaxHeapSizeBytes;
- private int mMaxEvalutationReturnSizeBytes = DEFAULT_MAX_EVALUATION_RETURN_SIZE_BYTES;
+ private int mMaxEvaluationReturnSizeBytes = DEFAULT_MAX_EVALUATION_RETURN_SIZE_BYTES;
public static final long DEFAULT_ISOLATE_HEAP_SIZE = 0;
/**
* Default maximum size in bytes for evaluation returns/errors.
@@ -36,7 +36,7 @@
/**
* Sets the max heap size used by the {@link JavaScriptIsolate}.
- *
+ * <p>
* A heap size of {@link IsolateStartupParameters#DEFAULT_ISOLATE_HEAP_SIZE} indicates no
* limit.
* <p>
@@ -64,10 +64,10 @@
/**
* Sets the max size for evaluation return values and errors in the {@link JavaScriptIsolate}.
- *
+ * <p>
* The default value is
* {@link IsolateStartupParameters#DEFAULT_MAX_EVALUATION_RETURN_SIZE_BYTES}.
- *
+ * <p>
* If an evaluation exceeds this limit, {@link EvaluationResultSizeLimitExceededException}
* is thrown. Errors will be truncated to adhere to this limit.
*
@@ -80,12 +80,12 @@
if (size < 0) {
throw new IllegalArgumentException("maxEvaluationReturnSizeBytes must be >= 0");
}
- mMaxEvalutationReturnSizeBytes = size;
+ mMaxEvaluationReturnSizeBytes = size;
}
/**
* Gets the max heap size used by the {@link JavaScriptIsolate}.
- *
+ * <p>
* If not set using {@link IsolateStartupParameters#setMaxHeapSizeBytes(long)}, the default
* value is {@link IsolateStartupParameters#DEFAULT_ISOLATE_HEAP_SIZE} which indicates no
* heap size limit.
@@ -98,13 +98,13 @@
/**
* Gets the max size for evaluation return values and errors in the {@link JavaScriptIsolate}.
- *
+ * <p>
* If not set using {@link IsolateStartupParameters#setMaxEvaluationReturnSizeBytes(int)}, the
* default value is {@link IsolateStartupParameters#DEFAULT_MAX_EVALUATION_RETURN_SIZE_BYTES}.
*
* @return max size in bytes
*/
public @IntRange(from = 0) int getMaxEvaluationReturnSizeBytes() {
- return mMaxEvalutationReturnSizeBytes;
+ return mMaxEvaluationReturnSizeBytes;
}
}
diff --git a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateTerminatedException.java b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateTerminatedException.java
index 1438941..b7547ecb 100644
--- a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateTerminatedException.java
+++ b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateTerminatedException.java
@@ -19,7 +19,7 @@
/**
* Exception thrown when evaluation is terminated due to the {@link JavaScriptIsolate} being closed
* or crashing.
- *
+ * <p>
* Calling {@link JavaScriptIsolate#close()} will cause this exception to be thrown for all
* previously requested but pending evaluations.
* <p>
diff --git a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptConsoleCallback.java b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptConsoleCallback.java
index b7acd25..0faad5f 100644
--- a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptConsoleCallback.java
+++ b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptConsoleCallback.java
@@ -114,7 +114,7 @@
default:
return "?";
}
- };
+ }
/**
* Return the log level.
@@ -165,17 +165,8 @@
@NonNull
@Override
public String toString() {
- return new StringBuilder()
- .append(getLevelInitial())
- .append(" ")
- .append(mSource)
- .append(":")
- .append(mLine)
- .append(":")
- .append(mColumn)
- .append(": ")
- .append(mMessage)
- .toString();
+ return getLevelInitial() + " " + mSource + ":" + mLine + ":" + mColumn + ": "
+ + mMessage;
}
}
@@ -193,4 +184,4 @@
* The default implementation does nothing.
*/
default void onConsoleClear() {}
-};
+}
diff --git a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptIsolate.java b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptIsolate.java
index a4432f0..f03a32d 100644
--- a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptIsolate.java
+++ b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptIsolate.java
@@ -71,13 +71,13 @@
*/
@Nullable
private IJsSandboxIsolate mJsIsolateStub;
- private CloseGuardHelper mGuard = CloseGuardHelper.create();
+ private final CloseGuardHelper mGuard = CloseGuardHelper.create();
final JavaScriptSandbox mJsSandbox;
@Nullable
@GuardedBy("mSetLock")
private HashSet<CallbackToFutureAdapter.Completer<String>> mPendingCompleterSet =
- new HashSet<CallbackToFutureAdapter.Completer<String>>();
+ new HashSet<>();
/**
* If mSandboxClosed is true, new evaluations will throw this exception asynchronously.
* <p>
@@ -85,13 +85,13 @@
*/
@Nullable
private Exception mExceptionForNewEvaluations;
- private AtomicBoolean mSandboxClosed = new AtomicBoolean(false);
- IsolateStartupParameters mStartupParameters;
+ private final AtomicBoolean mSandboxClosed = new AtomicBoolean(false);
+ final IsolateStartupParameters mStartupParameters;
private class IJsSandboxIsolateSyncCallbackStubWrapper extends
IJsSandboxIsolateSyncCallback.Stub {
@NonNull
- private CallbackToFutureAdapter.Completer<String> mCompleter;
+ private final CallbackToFutureAdapter.Completer<String> mCompleter;
IJsSandboxIsolateSyncCallbackStubWrapper(
@NonNull CallbackToFutureAdapter.Completer<String> completer) {
@@ -152,7 +152,7 @@
private class IJsSandboxIsolateCallbackStubWrapper extends IJsSandboxIsolateCallback.Stub {
@NonNull
- private CallbackToFutureAdapter.Completer<String> mCompleter;
+ private final CallbackToFutureAdapter.Completer<String> mCompleter;
IJsSandboxIsolateCallbackStubWrapper(
@NonNull CallbackToFutureAdapter.Completer<String> completer) {
@@ -223,7 +223,7 @@
public void consoleClear(int contextGroupId) {
final long identity = Binder.clearCallingIdentity();
try {
- mExecutor.execute(() -> mCallback.onConsoleClear());
+ mExecutor.execute(mCallback::onConsoleClear);
} catch (RejectedExecutionException e) {
Log.e(TAG, "Console clear dropped", e);
} finally {
@@ -256,8 +256,8 @@
* <li><strong>If the JS expression returns another data type</strong>, then Java Future
* resolves to empty Java String.</li>
* </ul>
- * The environment uses a single JS global object for all the calls to {@link
- * #evaluateJavaScriptAsync(String)} and {@link #provideNamedData(String, byte[])} methods.
+ * The environment uses a single JS global object for all the calls to
+ * evaluateJavaScriptAsync(String) and {@link #provideNamedData(String, byte[])} methods.
* These calls are queued up and are run one at a time in sequence, using the single JS
* environment for the isolate. The global variables set by one evaluation are visible for
* later evaluations. This is similar to adding multiple {@code <script>} tags in HTML. The
@@ -273,12 +273,14 @@
* transaction limit but are bound by
* {@link IsolateStartupParameters#setMaxEvaluationReturnSizeBytes(int)} with a default size
* of {@link IsolateStartupParameters#DEFAULT_MAX_EVALUATION_RETURN_SIZE_BYTES}.
- *
- * @param code JavaScript code that is evaluated, it should return a JavaScript String or a
- * Promise of a String in case {@link JavaScriptSandbox#JS_FEATURE_PROMISE_RETURN}
- * is supported
+ * <p>
+ * Do not use this method to transfer raw binary data. Scripts or results containing unpaired
+ * surrogate code units are not supported.
+ * @param code JavaScript code to evaluate. The script should return a JavaScript String or,
+ * alternatively, a Promise that will resolve to a String if
+ * {@link JavaScriptSandbox#JS_FEATURE_PROMISE_RETURN} is supported.
* @return Future that evaluates to the result String of the evaluation or exceptions (see
- * {@link JavaScriptException} and subclasses) if there is an error
+ * {@link JavaScriptException} and subclasses) if there is an error.
*/
@SuppressWarnings("NullAway")
@NonNull
@@ -300,6 +302,7 @@
IJsSandboxIsolateCallbackStubWrapper callbackStub;
synchronized (mSetLock) {
if (mPendingCompleterSet == null) {
+ assert mExceptionForNewEvaluations != null;
completer.setException(mExceptionForNewEvaluations);
return futureDebugMessage;
}
@@ -330,10 +333,10 @@
* This overload is provided for clients to pass in a UTF-8 encoded {@code byte[]} directly
* instead of having to convert it into a {@code String} to use
* {@link #evaluateJavaScriptAsync(String)}.
- *
- * @param code UTF-8 encoded JavaScript code that is evaluated, it should return a JavaScript
- * String or a Promise of a String in case
- * {@link JavaScriptSandbox#JS_FEATURE_PROMISE_RETURN} is supported
+ * @param code UTF-8 encoded JavaScript code to evaluate. The script should return a
+ * JavaScript String or, alternatively, a Promise that will resolve to a String if
+ * {@link JavaScriptSandbox#JS_FEATURE_PROMISE_RETURN} is supported. The byte
+ * array must not be modified until the evaluation has completed.
* @return Future that evaluates to the result String of the evaluation or exceptions (see
* {@link JavaScriptException} and subclasses) if there is an error
*/
@@ -352,6 +355,7 @@
IJsSandboxIsolateSyncCallbackStubWrapper callbackStub;
synchronized (mSetLock) {
if (mPendingCompleterSet == null) {
+ assert mExceptionForNewEvaluations != null;
completer.setException(mExceptionForNewEvaluations);
return futureDebugMessage;
}
@@ -359,19 +363,18 @@
}
callbackStub = new IJsSandboxIsolateSyncCallbackStubWrapper(completer);
try {
- AssetFileDescriptor codeAfd = Utils.writeBytesIntoPipeAsync(code,
- mJsSandbox.mThreadPoolTaskExecutor);
- try {
+ // We pass the codeAfd to the separate sandbox process but we still need to
+ // close it on our end to avoid file descriptor leaks.
+ try (AssetFileDescriptor codeAfd = Utils.writeBytesIntoPipeAsync(code,
+ mJsSandbox.mThreadPoolTaskExecutor)) {
mJsIsolateStub.evaluateJavascriptWithFd(codeAfd, callbackStub);
- } finally {
- // We pass the codeAfd to the separate sandbox process but we still need to
- // close it on our end to avoid file descriptor leaks.
- codeAfd.close();
}
} catch (RemoteException | IOException e) {
completer.setException(new RuntimeException(e));
synchronized (mSetLock) {
- mPendingCompleterSet.remove(completer);
+ if (mPendingCompleterSet != null) {
+ mPendingCompleterSet.remove(completer);
+ }
}
}
// Debug string.
@@ -443,7 +446,7 @@
* </pre>
* <p>
* The environment uses a single JS global object for all the calls to {@link
- * #evaluateJavaScriptAsync(String)} and {@link #provideNamedData(String, byte[])} methods.
+ * #evaluateJavaScriptAsync(String)} and provideNamedData(String, byte[]) methods.
* <p>
* This method should only be called if
* {@link JavaScriptSandbox#isFeatureSupported(String)}
@@ -466,14 +469,11 @@
throw new IllegalStateException("Calling provideNamedData() after closing the Isolate");
}
try {
- AssetFileDescriptor codeAfd = Utils.writeBytesIntoPipeAsync(inputBytes,
- mJsSandbox.mThreadPoolTaskExecutor);
- try {
+ // We pass the codeAfd to the separate sandbox process but we still need to close
+ // it on our end to avoid file descriptor leaks.
+ try (AssetFileDescriptor codeAfd = Utils.writeBytesIntoPipeAsync(inputBytes,
+ mJsSandbox.mThreadPoolTaskExecutor)) {
return mJsIsolateStub.provideNamedData(name, codeAfd);
- } finally {
- // We pass the codeAfd to the separate sandbox process but we still need to close
- // it on our end to avoid file descriptor leaks.
- codeAfd.close();
}
} catch (RemoteException e) {
Log.e(TAG, "RemoteException was thrown during provideNamedData()", e);
@@ -548,9 +548,7 @@
@SuppressWarnings("GenericException") // super.finalize() throws Throwable
protected void finalize() throws Throwable {
try {
- if (mGuard != null) {
- mGuard.warnIfOpen();
- }
+ mGuard.warnIfOpen();
if (mJsIsolateStub != null) {
close();
}
@@ -603,9 +601,8 @@
/**
* Set a JavaScriptConsoleCallback to process console messages from the isolate.
* <p>
- * This is the same as calling {@link #setConsoleCallback(Executor, JavaScriptConsoleCallback}
- * using the main executor ({@link Context.getMainExecutor()}) of the context used to create the
- * {@link JavaScriptSandbox} object.
+ * This is the same as calling {@link #setConsoleCallback(Executor, JavaScriptConsoleCallback)}
+ * using the main executor of the context used to create the {@link JavaScriptSandbox} object.
* @param callback Callback implementing console logging behaviour.
*/
@RequiresFeature(name = JavaScriptSandbox.JS_FEATURE_CONSOLE_MESSAGING,
diff --git a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptSandbox.java b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptSandbox.java
index f7541ce..adc15f3 100644
--- a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptSandbox.java
+++ b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptSandbox.java
@@ -81,13 +81,12 @@
// different processes as needed. This might require that we have a static
// variable in here that tracks the existing services we are connected to and
// connect to a different one when creating a new object.
- private static final String TAG = "JavaScriptSandbox";
private static final String JS_SANDBOX_SERVICE_NAME =
"org.chromium.android_webview.js_sandbox.service.JsSandboxService0";
- static AtomicBoolean sIsReadyToConnect = new AtomicBoolean(true);
+ static final AtomicBoolean sIsReadyToConnect = new AtomicBoolean(true);
private final Object mLock = new Object();
- private CloseGuardHelper mGuard = CloseGuardHelper.create();
+ private final CloseGuardHelper mGuard = CloseGuardHelper.create();
@Nullable
@GuardedBy("mLock")
@@ -95,9 +94,8 @@
private final ConnectionSetup mConnection;
- @Nullable
@GuardedBy("mLock")
- private HashSet<JavaScriptIsolate> mActiveIsolateSet = new HashSet<JavaScriptIsolate>();
+ private final HashSet<JavaScriptIsolate> mActiveIsolateSet = new HashSet<>();
final ExecutorService mThreadPoolTaskExecutor =
Executors.newCachedThreadPool(new ThreadFactory() {
@@ -209,7 +207,7 @@
private CallbackToFutureAdapter.Completer<JavaScriptSandbox> mCompleter;
@Nullable
private JavaScriptSandbox mJsSandbox;
- Context mContext;
+ final Context mContext;
@Override
@SuppressWarnings("NullAway")
@@ -288,10 +286,12 @@
public static ListenableFuture<JavaScriptSandbox> createConnectedInstanceAsync(
@NonNull Context context) {
Objects.requireNonNull(context);
- if (!isSupported()) {
+ PackageInfo systemWebViewPackage = WebView.getCurrentWebViewPackage();
+ // Technically, there could be a few race conditions before/after isSupport() where the
+ // availability changes, which may result in a bind failure.
+ if (systemWebViewPackage == null || !isSupported()) {
throw new SandboxUnsupportedException("The system does not support JavaScriptSandbox");
}
- PackageInfo systemWebViewPackage = WebView.getCurrentWebViewPackage();
ComponentName compName =
new ComponentName(systemWebViewPackage.packageName, JS_SANDBOX_SERVICE_NAME);
int flag = Context.BIND_AUTO_CREATE | Context.BIND_EXTERNAL_SERVICE;
@@ -357,9 +357,7 @@
Executor mainExecutor;
mainExecutor = ContextCompat.getMainExecutor(context);
completer.addCancellationListener(
- () -> {
- context.unbindService(connectionSetup);
- }, mainExecutor);
+ () -> context.unbindService(connectionSetup), mainExecutor);
} else {
context.unbindService(connectionSetup);
sIsReadyToConnect.set(true);
@@ -439,13 +437,14 @@
@GuardedBy("mLock")
@SuppressWarnings("NullAway")
private void populateClientFeatureSet() {
+ assert mJsSandboxService != null;
List<String> features;
try {
features = mJsSandboxService.getSupportedFeatures();
} catch (RemoteException e) {
throw new RuntimeException(e);
}
- mClientSideFeatureSet = new HashSet<String>();
+ mClientSideFeatureSet = new HashSet<>();
if (features.contains(IJsSandboxService.ISOLATE_TERMINATION)) {
mClientSideFeatureSet.add(JS_FEATURE_ISOLATE_TERMINATION);
}
@@ -504,9 +503,7 @@
void removeFromIsolateSet(@NonNull JavaScriptIsolate isolate) {
synchronized (mLock) {
- if (mActiveIsolateSet != null) {
- mActiveIsolateSet.remove(isolate);
- }
+ mActiveIsolateSet.remove(isolate);
}
}
@@ -548,16 +545,14 @@
for (JavaScriptIsolate ele : mActiveIsolateSet) {
ele.notifySandboxClosed();
}
- mActiveIsolateSet = null;
+ mActiveIsolateSet.clear();
}
@Override
@SuppressWarnings("GenericException") // super.finalize() throws Throwable
protected void finalize() throws Throwable {
try {
- if (mGuard != null) {
- mGuard.warnIfOpen();
- }
+ mGuard.warnIfOpen();
synchronized (mLock) {
if (mJsSandboxService != null) {
close();
diff --git a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/MemoryLimitExceededException.java b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/MemoryLimitExceededException.java
index a0eee81..f4330cc 100644
--- a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/MemoryLimitExceededException.java
+++ b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/MemoryLimitExceededException.java
@@ -27,7 +27,7 @@
* its configured heap limit.
* <p>
* The isolate may not continue to be used after this exception has been thrown, and other pending
- * evalutions for the isolate will fail. The isolate may continue to hold onto resources (even if
+ * evaluations for the isolate will fail. The isolate may continue to hold onto resources (even if
* explicitly closed) until the sandbox has been shutdown. Therefore, it is recommended that the
* sandbox be restarted at the earliest opportunity in order to reclaim these resources.
* <p>
diff --git a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/SandboxUnsupportedException.java b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/SandboxUnsupportedException.java
index 7d40525..1bb459a 100644
--- a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/SandboxUnsupportedException.java
+++ b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/SandboxUnsupportedException.java
@@ -20,7 +20,8 @@
/**
* Exception thrown when attempting to create a {@link JavaScriptSandbox} via
- * {@link JavaScriptSandbox#createConnectedInstanceAsync(Context)} when doing so is not supported.
+ * {@link JavaScriptSandbox#createConnectedInstanceAsync(android.content.Context)} when doing so is
+ * not supported.
* <p>
* This can occur when the WebView package is too old to provide a sandbox implementation.
*/
diff --git a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/common/Utils.java b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/common/Utils.java
index 4d59cf6..59c3d03 100644
--- a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/common/Utils.java
+++ b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/common/Utils.java
@@ -32,13 +32,16 @@
import java.util.concurrent.ExecutorService;
/**
- * Utility methods for use in both service and client side of JavaScriptEngine
+ * Utility methods for use in both service and client side of JavaScriptEngine.
*/
public class Utils {
private static final String TAG = "JavaScriptEngineUtils";
+ private Utils() {
+ throw new AssertionError();
+ }
/**
- * Utility method to write a byte array into a stream
+ * Utility method to write a byte array into a stream.
*/
public static void writeByteArrayToStream(@NonNull byte[] inputBytes,
@NonNull OutputStream outputStream) {
@@ -53,7 +56,7 @@
}
/**
- * Close ignoring exception
+ * Close, ignoring exception.
*/
public static void closeQuietly(@Nullable Closeable closeable) {
if (closeable == null) return;
@@ -76,14 +79,12 @@
OutputStream outputStream =
new ParcelFileDescriptor.AutoCloseOutputStream(writeSide);
executorService.execute(
- () -> {
- Utils.writeByteArrayToStream(inputBytes, outputStream);
- });
+ () -> Utils.writeByteArrayToStream(inputBytes, outputStream));
return new AssetFileDescriptor(readSide, 0, inputBytes.length);
}
/**
- * Checks if the given AssetFileDescriptor passes certain conditions
+ * Checks if the given AssetFileDescriptor passes certain conditions.
*/
public static void checkAssetFileDescriptor(@NonNull AssetFileDescriptor afd,
int maxLength) {
@@ -97,13 +98,13 @@
}
if (afd.getLength() > maxLength) {
throw new IllegalArgumentException(
- "AssetFileDescriptor.getLength() should be <= " + Integer.toString(maxLength));
+ "AssetFileDescriptor.getLength() should be <= " + maxLength);
}
}
/**
- * Read a given number of bytes from a given stream into a byte array
- *
+ * Read a given number of bytes from a given stream into a byte array.
+ * <p>
* This allows us to use
* <a href=https://developer.android.com/reference/java/io/InputStream#readNBytes(byte[],%20int,%20int)">
* this </a>
@@ -136,7 +137,7 @@
/**
* Returns the index of right-most UTF-8 starting byte.
- *
+ * <p>
* The input must be valid (or truncated) UTF-8 encoded bytes.
* Returns -1 if there is no starting byte.
*/
diff --git a/leanback/leanback-grid/api/current.txt b/leanback/leanback-grid/api/current.txt
index 082f685d..36986e2 100644
--- a/leanback/leanback-grid/api/current.txt
+++ b/leanback/leanback-grid/api/current.txt
@@ -65,8 +65,8 @@
method public final void setSaveChildrenPolicy(int);
method public void setScrollEnabled(boolean);
method public void setSelectedPosition(int);
- method public void setSelectedPosition(int, int);
method public void setSelectedPosition(int, androidx.leanback.widget.ViewHolderTask?);
+ method public void setSelectedPosition(int, int);
method public void setSelectedPositionSmooth(int);
method public void setSelectedPositionSmooth(int, androidx.leanback.widget.ViewHolderTask?);
method public final void setSmoothScrollByBehavior(androidx.leanback.widget.BaseGridView.SmoothScrollByBehavior?);
diff --git a/leanback/leanback-grid/api/public_plus_experimental_current.txt b/leanback/leanback-grid/api/public_plus_experimental_current.txt
index 082f685d..36986e2 100644
--- a/leanback/leanback-grid/api/public_plus_experimental_current.txt
+++ b/leanback/leanback-grid/api/public_plus_experimental_current.txt
@@ -65,8 +65,8 @@
method public final void setSaveChildrenPolicy(int);
method public void setScrollEnabled(boolean);
method public void setSelectedPosition(int);
- method public void setSelectedPosition(int, int);
method public void setSelectedPosition(int, androidx.leanback.widget.ViewHolderTask?);
+ method public void setSelectedPosition(int, int);
method public void setSelectedPositionSmooth(int);
method public void setSelectedPositionSmooth(int, androidx.leanback.widget.ViewHolderTask?);
method public final void setSmoothScrollByBehavior(androidx.leanback.widget.BaseGridView.SmoothScrollByBehavior?);
diff --git a/leanback/leanback-grid/api/restricted_current.txt b/leanback/leanback-grid/api/restricted_current.txt
index fcd052a..a60ad07 100644
--- a/leanback/leanback-grid/api/restricted_current.txt
+++ b/leanback/leanback-grid/api/restricted_current.txt
@@ -70,8 +70,8 @@
method public final void setSaveChildrenPolicy(int);
method public void setScrollEnabled(boolean);
method public void setSelectedPosition(int);
- method public void setSelectedPosition(int, int);
method public void setSelectedPosition(int, androidx.leanback.widget.ViewHolderTask?);
+ method public void setSelectedPosition(int, int);
method public void setSelectedPositionSmooth(int);
method public void setSelectedPositionSmooth(int, androidx.leanback.widget.ViewHolderTask?);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSelectedPositionSmoothWithSub(int, int);
diff --git a/leanback/leanback-grid/build.gradle b/leanback/leanback-grid/build.gradle
index 36a1965..b6171c8 100644
--- a/leanback/leanback-grid/build.gradle
+++ b/leanback/leanback-grid/build.gradle
@@ -52,7 +52,7 @@
}
androidx {
- name = "AndroidX Leanback Grid"
+ name = "Leanback Grid"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.LEANBACK_GRID
inceptionYear = "2021"
diff --git a/leanback/leanback-paging/api/current.txt b/leanback/leanback-paging/api/current.txt
index 97a8cb98..9d1f3f0 100644
--- a/leanback/leanback-paging/api/current.txt
+++ b/leanback/leanback-paging/api/current.txt
@@ -2,15 +2,15 @@
package androidx.leanback.paging {
public final class PagingDataAdapter<T> extends androidx.leanback.widget.ObjectAdapter {
- ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
- ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
- ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
- ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
- ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
- ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
- ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+ ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+ ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
+ ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+ ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+ ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
+ ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+ ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
method public void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
method public T? get(int position);
method public kotlinx.coroutines.flow.Flow<androidx.paging.CombinedLoadStates> getLoadStateFlow();
@@ -20,8 +20,8 @@
method public void retry();
method public int size();
method public androidx.paging.ItemSnapshotList<T> snapshot();
- method public suspend Object? submitData(androidx.paging.PagingData<T> pagingData, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public void submitData(androidx.lifecycle.Lifecycle lifecycle, androidx.paging.PagingData<T> pagingData);
+ method public suspend Object? submitData(androidx.paging.PagingData<T> pagingData, kotlin.coroutines.Continuation<? super kotlin.Unit>);
property public final kotlinx.coroutines.flow.Flow<androidx.paging.CombinedLoadStates> loadStateFlow;
}
diff --git a/leanback/leanback-paging/api/public_plus_experimental_current.txt b/leanback/leanback-paging/api/public_plus_experimental_current.txt
index 97a8cb98..9d1f3f0 100644
--- a/leanback/leanback-paging/api/public_plus_experimental_current.txt
+++ b/leanback/leanback-paging/api/public_plus_experimental_current.txt
@@ -2,15 +2,15 @@
package androidx.leanback.paging {
public final class PagingDataAdapter<T> extends androidx.leanback.widget.ObjectAdapter {
- ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
- ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
- ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
- ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
- ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
- ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
- ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+ ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+ ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
+ ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+ ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+ ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
+ ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+ ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
method public void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
method public T? get(int position);
method public kotlinx.coroutines.flow.Flow<androidx.paging.CombinedLoadStates> getLoadStateFlow();
@@ -20,8 +20,8 @@
method public void retry();
method public int size();
method public androidx.paging.ItemSnapshotList<T> snapshot();
- method public suspend Object? submitData(androidx.paging.PagingData<T> pagingData, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public void submitData(androidx.lifecycle.Lifecycle lifecycle, androidx.paging.PagingData<T> pagingData);
+ method public suspend Object? submitData(androidx.paging.PagingData<T> pagingData, kotlin.coroutines.Continuation<? super kotlin.Unit>);
property public final kotlinx.coroutines.flow.Flow<androidx.paging.CombinedLoadStates> loadStateFlow;
}
diff --git a/leanback/leanback-paging/api/restricted_current.txt b/leanback/leanback-paging/api/restricted_current.txt
index 97a8cb98..9d1f3f0 100644
--- a/leanback/leanback-paging/api/restricted_current.txt
+++ b/leanback/leanback-paging/api/restricted_current.txt
@@ -2,15 +2,15 @@
package androidx.leanback.paging {
public final class PagingDataAdapter<T> extends androidx.leanback.widget.ObjectAdapter {
- ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
- ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
- ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
- ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
- ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
- ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
- ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+ ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+ ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
+ ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+ ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+ ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
+ ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+ ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
method public void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
method public T? get(int position);
method public kotlinx.coroutines.flow.Flow<androidx.paging.CombinedLoadStates> getLoadStateFlow();
@@ -20,8 +20,8 @@
method public void retry();
method public int size();
method public androidx.paging.ItemSnapshotList<T> snapshot();
- method public suspend Object? submitData(androidx.paging.PagingData<T> pagingData, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public void submitData(androidx.lifecycle.Lifecycle lifecycle, androidx.paging.PagingData<T> pagingData);
+ method public suspend Object? submitData(androidx.paging.PagingData<T> pagingData, kotlin.coroutines.Continuation<? super kotlin.Unit>);
property public final kotlinx.coroutines.flow.Flow<androidx.paging.CombinedLoadStates> loadStateFlow;
}
diff --git a/leanback/leanback-paging/build.gradle b/leanback/leanback-paging/build.gradle
index 6c51eec..0b19679 100644
--- a/leanback/leanback-paging/build.gradle
+++ b/leanback/leanback-paging/build.gradle
@@ -52,7 +52,7 @@
}
androidx {
- name = "AndroidX Leanback Paging"
+ name = "Leanback Paging"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.LEANBACK_PAGING
inceptionYear = "2020"
diff --git a/leanback/leanback-paging/src/androidTest/java/androidx/leanback/paging/PagingDataAdapterTest.kt b/leanback/leanback-paging/src/androidTest/java/androidx/leanback/paging/PagingDataAdapterTest.kt
index 9b2d05e..2cda1ef 100644
--- a/leanback/leanback-paging/src/androidTest/java/androidx/leanback/paging/PagingDataAdapterTest.kt
+++ b/leanback/leanback-paging/src/androidTest/java/androidx/leanback/paging/PagingDataAdapterTest.kt
@@ -28,6 +28,8 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import androidx.testutils.MainDispatcherRule
+import kotlin.coroutines.ContinuationInterceptor
+import kotlin.test.assertEquals
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -40,8 +42,6 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.coroutines.ContinuationInterceptor
-import kotlin.test.assertEquals
@OptIn(ExperimentalCoroutinesApi::class)
@MediumTest
diff --git a/leanback/leanback-preference/build.gradle b/leanback/leanback-preference/build.gradle
index d64a337..8af0e9d 100644
--- a/leanback/leanback-preference/build.gradle
+++ b/leanback/leanback-preference/build.gradle
@@ -28,7 +28,7 @@
}
androidx {
- name = "AndroidX Leanback Preference"
+ name = "Leanback Preference"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.LEANBACK_PREFERENCE
inceptionYear = "2015"
diff --git a/leanback/leanback-tab/build.gradle b/leanback/leanback-tab/build.gradle
index 1c0b1cb..b38819a 100644
--- a/leanback/leanback-tab/build.gradle
+++ b/leanback/leanback-tab/build.gradle
@@ -37,7 +37,7 @@
}
androidx {
- name = "AndroidX Leanback Tab"
+ name = "Leanback Tab"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.LEANBACK_TAB
inceptionYear = "2020"
diff --git a/leanback/leanback/api/current.txt b/leanback/leanback/api/current.txt
index df5b2b4..91aec39 100644
--- a/leanback/leanback/api/current.txt
+++ b/leanback/leanback/api/current.txt
@@ -187,8 +187,8 @@
method @Deprecated public void setAdapter(androidx.leanback.widget.ObjectAdapter!);
method @Deprecated public void setOnItemViewClickedListener(androidx.leanback.widget.OnItemViewClickedListener!);
method @Deprecated public void setOnItemViewSelectedListener(androidx.leanback.widget.OnItemViewSelectedListener!);
- method @Deprecated public void setSelectedPosition(int, boolean, androidx.leanback.widget.Presenter.ViewHolderTask!);
method @Deprecated public void setSelectedPosition(int, boolean);
+ method @Deprecated public void setSelectedPosition(int, boolean, androidx.leanback.widget.Presenter.ViewHolderTask!);
}
@Deprecated public static interface BrowseFragment.MainFragmentRowsAdapterProvider {
@@ -287,8 +287,8 @@
method public void setAdapter(androidx.leanback.widget.ObjectAdapter!);
method public void setOnItemViewClickedListener(androidx.leanback.widget.OnItemViewClickedListener!);
method public void setOnItemViewSelectedListener(androidx.leanback.widget.OnItemViewSelectedListener!);
- method public void setSelectedPosition(int, boolean, androidx.leanback.widget.Presenter.ViewHolderTask!);
method public void setSelectedPosition(int, boolean);
+ method public void setSelectedPosition(int, boolean, androidx.leanback.widget.Presenter.ViewHolderTask!);
}
public static interface BrowseSupportFragment.MainFragmentRowsAdapterProvider {
@@ -817,9 +817,9 @@
method @Deprecated public void setOnItemViewClickedListener(androidx.leanback.widget.BaseOnItemViewClickedListener!);
method @Deprecated public void setOnItemViewSelectedListener(androidx.leanback.widget.BaseOnItemViewSelectedListener!);
method @Deprecated public final void setPresenterSelector(androidx.leanback.widget.PresenterSelector!);
- method @Deprecated public void setSelectedPosition(int, boolean, androidx.leanback.widget.Presenter.ViewHolderTask!);
method @Deprecated public void setSelectedPosition(int);
method @Deprecated public void setSelectedPosition(int, boolean);
+ method @Deprecated public void setSelectedPosition(int, boolean, androidx.leanback.widget.Presenter.ViewHolderTask!);
}
@Deprecated public static class RowsFragment.MainFragmentAdapter extends androidx.leanback.app.BrowseFragment.MainFragmentAdapter<androidx.leanback.app.RowsFragment> {
@@ -856,9 +856,9 @@
method public void setOnItemViewClickedListener(androidx.leanback.widget.BaseOnItemViewClickedListener!);
method public void setOnItemViewSelectedListener(androidx.leanback.widget.BaseOnItemViewSelectedListener!);
method public final void setPresenterSelector(androidx.leanback.widget.PresenterSelector!);
- method public void setSelectedPosition(int, boolean, androidx.leanback.widget.Presenter.ViewHolderTask!);
method public void setSelectedPosition(int);
method public void setSelectedPosition(int, boolean);
+ method public void setSelectedPosition(int, boolean, androidx.leanback.widget.Presenter.ViewHolderTask!);
}
public static class RowsSupportFragment.MainFragmentAdapter extends androidx.leanback.app.BrowseSupportFragment.MainFragmentAdapter<androidx.leanback.app.RowsSupportFragment> {
@@ -873,8 +873,8 @@
ctor @Deprecated public SearchFragment();
method @Deprecated public static android.os.Bundle! createArgs(android.os.Bundle!, String!);
method @Deprecated public static android.os.Bundle! createArgs(android.os.Bundle!, String!, String!);
- method @Deprecated public void displayCompletions(java.util.List<java.lang.String!>!);
method @Deprecated public void displayCompletions(android.view.inputmethod.CompletionInfo![]!);
+ method @Deprecated public void displayCompletions(java.util.List<java.lang.String!>!);
method @Deprecated public android.graphics.drawable.Drawable! getBadgeDrawable();
method @Deprecated public android.content.Intent! getRecognizerIntent();
method @Deprecated public androidx.leanback.app.RowsFragment! getRowsFragment();
@@ -893,8 +893,8 @@
method @Deprecated public void setOnItemViewSelectedListener(androidx.leanback.widget.OnItemViewSelectedListener!);
method @Deprecated public void setSearchAffordanceColors(androidx.leanback.widget.SearchOrbView.Colors!);
method @Deprecated public void setSearchAffordanceColorsInListening(androidx.leanback.widget.SearchOrbView.Colors!);
- method @Deprecated public void setSearchQuery(String!, boolean);
method @Deprecated public void setSearchQuery(android.content.Intent!, boolean);
+ method @Deprecated public void setSearchQuery(String!, boolean);
method @Deprecated public void setSearchResultProvider(androidx.leanback.app.SearchFragment.SearchResultProvider!);
method @Deprecated public void setSpeechRecognitionCallback(androidx.leanback.widget.SpeechRecognitionCallback!);
method @Deprecated public void setTitle(String!);
@@ -911,8 +911,8 @@
ctor public SearchSupportFragment();
method public static android.os.Bundle! createArgs(android.os.Bundle!, String!);
method public static android.os.Bundle! createArgs(android.os.Bundle!, String!, String!);
- method public void displayCompletions(java.util.List<java.lang.String!>!);
method public void displayCompletions(android.view.inputmethod.CompletionInfo![]!);
+ method public void displayCompletions(java.util.List<java.lang.String!>!);
method public android.graphics.drawable.Drawable! getBadgeDrawable();
method public android.content.Intent! getRecognizerIntent();
method public androidx.leanback.app.RowsSupportFragment! getRowsSupportFragment();
@@ -923,8 +923,8 @@
method public void setOnItemViewSelectedListener(androidx.leanback.widget.OnItemViewSelectedListener!);
method public void setSearchAffordanceColors(androidx.leanback.widget.SearchOrbView.Colors!);
method public void setSearchAffordanceColorsInListening(androidx.leanback.widget.SearchOrbView.Colors!);
- method public void setSearchQuery(String!, boolean);
method public void setSearchQuery(android.content.Intent!, boolean);
+ method public void setSearchQuery(String!, boolean);
method public void setSearchResultProvider(androidx.leanback.app.SearchSupportFragment.SearchResultProvider!);
method @Deprecated public void setSpeechRecognitionCallback(androidx.leanback.widget.SpeechRecognitionCallback!);
method public void setTitle(String!);
@@ -1138,8 +1138,8 @@
}
public class PlaybackBannerControlGlue<T extends androidx.leanback.media.PlayerAdapter> extends androidx.leanback.media.PlaybackBaseControlGlue<T> {
- ctor public PlaybackBannerControlGlue(android.content.Context, int[], T!);
ctor public PlaybackBannerControlGlue(android.content.Context, int[], int[], T!);
+ ctor public PlaybackBannerControlGlue(android.content.Context, int[], T!);
method public int[] getFastForwardSpeeds();
method public int[] getRewindSpeeds();
method public void onActionClicked(androidx.leanback.widget.Action);
@@ -1233,8 +1233,8 @@
method public boolean onKey(android.view.View!, int, android.view.KeyEvent!);
method protected void onMetadataChanged();
method protected void onStateChanged();
- method public void play(int);
method public final void play();
+ method public void play(int);
method public void setControlsRow(androidx.leanback.widget.PlaybackControlsRow!);
method @Deprecated public void setControlsRowPresenter(androidx.leanback.widget.PlaybackControlsRowPresenter!);
method public void setFadingEnabled(boolean);
@@ -1448,8 +1448,8 @@
}
public abstract class AbstractMediaListHeaderPresenter extends androidx.leanback.widget.RowPresenter {
- ctor public AbstractMediaListHeaderPresenter(android.content.Context!, int);
ctor public AbstractMediaListHeaderPresenter();
+ ctor public AbstractMediaListHeaderPresenter(android.content.Context!, int);
method protected androidx.leanback.widget.RowPresenter.ViewHolder! createRowViewHolder(android.view.ViewGroup!);
method protected abstract void onBindMediaListHeaderViewHolder(androidx.leanback.widget.AbstractMediaListHeaderPresenter.ViewHolder!, Object!);
method public void setBackgroundColor(int);
@@ -1480,11 +1480,11 @@
}
public class ArrayObjectAdapter extends androidx.leanback.widget.ObjectAdapter {
- ctor public ArrayObjectAdapter(androidx.leanback.widget.PresenterSelector);
- ctor public ArrayObjectAdapter(androidx.leanback.widget.Presenter);
ctor public ArrayObjectAdapter();
- method public void add(Object);
+ ctor public ArrayObjectAdapter(androidx.leanback.widget.Presenter);
+ ctor public ArrayObjectAdapter(androidx.leanback.widget.PresenterSelector);
method public void add(int, Object);
+ method public void add(Object);
method public void addAll(int, java.util.Collection<?>);
method public void clear();
method public Object? get(int);
@@ -1525,9 +1525,9 @@
public static class BaseCardView.LayoutParams extends android.widget.FrameLayout.LayoutParams {
ctor public BaseCardView.LayoutParams(android.content.Context!, android.util.AttributeSet!);
- ctor public BaseCardView.LayoutParams(int, int);
ctor public BaseCardView.LayoutParams(android.view.ViewGroup.LayoutParams!);
ctor public BaseCardView.LayoutParams(androidx.leanback.widget.BaseCardView.LayoutParams!);
+ ctor public BaseCardView.LayoutParams(int, int);
field public static final int VIEW_TYPE_EXTRA = 2; // 0x2
field public static final int VIEW_TYPE_INFO = 1; // 0x1
field public static final int VIEW_TYPE_MAIN = 0; // 0x0
@@ -1577,9 +1577,9 @@
}
public class CursorObjectAdapter extends androidx.leanback.widget.ObjectAdapter {
- ctor public CursorObjectAdapter(androidx.leanback.widget.PresenterSelector!);
- ctor public CursorObjectAdapter(androidx.leanback.widget.Presenter!);
ctor public CursorObjectAdapter();
+ ctor public CursorObjectAdapter(androidx.leanback.widget.Presenter!);
+ ctor public CursorObjectAdapter(androidx.leanback.widget.PresenterSelector!);
method public void changeCursor(android.database.Cursor!);
method public void close();
method public Object? get(int);
@@ -1649,8 +1649,8 @@
method @Deprecated public final boolean isUsingDefaultSelectEffect();
method @Deprecated public void setBackgroundColor(@ColorInt int);
method @Deprecated public void setOnActionClickedListener(androidx.leanback.widget.OnActionClickedListener!);
- method @Deprecated public final void setSharedElementEnterTransition(android.app.Activity!, String!, long);
method @Deprecated public final void setSharedElementEnterTransition(android.app.Activity!, String!);
+ method @Deprecated public final void setSharedElementEnterTransition(android.app.Activity!, String!, long);
method @Deprecated public void setStyleLarge(boolean);
}
@@ -1695,10 +1695,10 @@
public class FocusHighlightHelper {
ctor @Deprecated public FocusHighlightHelper();
method public static void setupBrowseItemFocusHighlight(androidx.leanback.widget.ItemBridgeAdapter!, int, boolean);
- method @Deprecated public static void setupHeaderItemFocusHighlight(androidx.leanback.widget.VerticalGridView!);
- method @Deprecated public static void setupHeaderItemFocusHighlight(androidx.leanback.widget.VerticalGridView!, boolean);
method public static void setupHeaderItemFocusHighlight(androidx.leanback.widget.ItemBridgeAdapter!);
method public static void setupHeaderItemFocusHighlight(androidx.leanback.widget.ItemBridgeAdapter!, boolean);
+ method @Deprecated public static void setupHeaderItemFocusHighlight(androidx.leanback.widget.VerticalGridView!);
+ method @Deprecated public static void setupHeaderItemFocusHighlight(androidx.leanback.widget.VerticalGridView!, boolean);
}
public interface FragmentAnimationProvider {
@@ -1854,16 +1854,16 @@
method public B! checkSetId(int);
method public B! checked(boolean);
method public B! clickAction(long);
- method public B! description(CharSequence?);
method public B! description(@StringRes int);
+ method public B! description(CharSequence?);
method public B! descriptionEditInputType(int);
method public B! descriptionEditable(boolean);
method public B! descriptionInputType(int);
- method public B! editDescription(CharSequence?);
method public B! editDescription(@StringRes int);
+ method public B! editDescription(CharSequence?);
method public B! editInputType(int);
- method public B! editTitle(CharSequence?);
method public B! editTitle(@StringRes int);
+ method public B! editTitle(CharSequence?);
method public B! editable(boolean);
method public B! enabled(boolean);
method public B! focusable(boolean);
@@ -1879,8 +1879,8 @@
method public B! intent(android.content.Intent?);
method public B! multilineDescription(boolean);
method public B! subActions(java.util.List<androidx.leanback.widget.GuidedAction!>?);
- method public B! title(CharSequence?);
method public B! title(@StringRes int);
+ method public B! title(CharSequence?);
}
public interface GuidedActionAutofillSupport {
@@ -2000,8 +2000,8 @@
}
public class HeaderItem {
- ctor public HeaderItem(long, String!);
ctor public HeaderItem(String!);
+ ctor public HeaderItem(long, String!);
method public CharSequence! getContentDescription();
method public CharSequence! getDescription();
method public final long getId();
@@ -2017,10 +2017,10 @@
}
public class ImageCardView extends androidx.leanback.widget.BaseCardView {
- ctor @Deprecated public ImageCardView(android.content.Context!, int);
- ctor public ImageCardView(android.content.Context, android.util.AttributeSet?, int);
ctor public ImageCardView(android.content.Context);
ctor public ImageCardView(android.content.Context, android.util.AttributeSet?);
+ ctor public ImageCardView(android.content.Context, android.util.AttributeSet?, int);
+ ctor @Deprecated public ImageCardView(android.content.Context!, int);
method public android.graphics.drawable.Drawable? getBadgeImage();
method public CharSequence? getContentText();
method public android.graphics.drawable.Drawable? getInfoAreaBackground();
@@ -2053,9 +2053,9 @@
}
public class ItemBridgeAdapter extends androidx.recyclerview.widget.RecyclerView.Adapter implements androidx.leanback.widget.FacetProviderAdapter {
- ctor public ItemBridgeAdapter(androidx.leanback.widget.ObjectAdapter!, androidx.leanback.widget.PresenterSelector!);
- ctor public ItemBridgeAdapter(androidx.leanback.widget.ObjectAdapter!);
ctor public ItemBridgeAdapter();
+ ctor public ItemBridgeAdapter(androidx.leanback.widget.ObjectAdapter!);
+ ctor public ItemBridgeAdapter(androidx.leanback.widget.ObjectAdapter!, androidx.leanback.widget.PresenterSelector!);
method public void clear();
method public androidx.leanback.widget.FacetProvider! getFacetProvider(int);
method public int getItemCount();
@@ -2115,8 +2115,8 @@
public class ListRow extends androidx.leanback.widget.Row {
ctor public ListRow(androidx.leanback.widget.HeaderItem!, androidx.leanback.widget.ObjectAdapter!);
- ctor public ListRow(long, androidx.leanback.widget.HeaderItem!, androidx.leanback.widget.ObjectAdapter!);
ctor public ListRow(androidx.leanback.widget.ObjectAdapter!);
+ ctor public ListRow(long, androidx.leanback.widget.HeaderItem!, androidx.leanback.widget.ObjectAdapter!);
method public final androidx.leanback.widget.ObjectAdapter! getAdapter();
method public CharSequence! getContentDescription();
method public void setContentDescription(CharSequence!);
@@ -2206,9 +2206,9 @@
}
public abstract class ObjectAdapter {
- ctor public ObjectAdapter(androidx.leanback.widget.PresenterSelector);
- ctor public ObjectAdapter(androidx.leanback.widget.Presenter);
ctor public ObjectAdapter();
+ ctor public ObjectAdapter(androidx.leanback.widget.Presenter);
+ ctor public ObjectAdapter(androidx.leanback.widget.PresenterSelector);
method public abstract Object? get(int);
method public long getId(int);
method public final androidx.leanback.widget.Presenter? getPresenter(Object);
@@ -2335,10 +2335,10 @@
}
public class PlaybackControlsRow extends androidx.leanback.widget.Row {
- ctor public PlaybackControlsRow(Object!);
ctor public PlaybackControlsRow();
- method public androidx.leanback.widget.Action! getActionForKeyCode(int);
+ ctor public PlaybackControlsRow(Object!);
method public androidx.leanback.widget.Action! getActionForKeyCode(androidx.leanback.widget.ObjectAdapter!, int);
+ method public androidx.leanback.widget.Action! getActionForKeyCode(int);
method public long getBufferedPosition();
method @Deprecated public int getBufferedProgress();
method @Deprecated public long getBufferedProgressLong();
@@ -2479,8 +2479,8 @@
}
public class PlaybackControlsRowPresenter extends androidx.leanback.widget.PlaybackRowPresenter {
- ctor public PlaybackControlsRowPresenter(androidx.leanback.widget.Presenter?);
ctor public PlaybackControlsRowPresenter();
+ ctor public PlaybackControlsRowPresenter(androidx.leanback.widget.Presenter?);
method public boolean areSecondaryActionsHidden();
method protected androidx.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
method @ColorInt public int getBackgroundColor();
@@ -2621,9 +2621,9 @@
}
public class Row {
- ctor public Row(long, androidx.leanback.widget.HeaderItem!);
- ctor public Row(androidx.leanback.widget.HeaderItem!);
ctor public Row();
+ ctor public Row(androidx.leanback.widget.HeaderItem!);
+ ctor public Row(long, androidx.leanback.widget.HeaderItem!);
method public final androidx.leanback.widget.HeaderItem! getHeaderItem();
method public final long getId();
method public boolean isRenderedAsRowView();
@@ -2718,8 +2718,8 @@
ctor public SearchBar(android.content.Context!);
ctor public SearchBar(android.content.Context!, android.util.AttributeSet!);
ctor public SearchBar(android.content.Context!, android.util.AttributeSet!, int);
- method public void displayCompletions(java.util.List<java.lang.String!>!);
method public void displayCompletions(android.view.inputmethod.CompletionInfo![]!);
+ method public void displayCompletions(java.util.List<java.lang.String!>!);
method public android.graphics.drawable.Drawable! getBadgeDrawable();
method public CharSequence! getHint();
method public String! getTitle();
@@ -2791,8 +2791,8 @@
public class SectionRow extends androidx.leanback.widget.Row {
ctor public SectionRow(androidx.leanback.widget.HeaderItem!);
- ctor public SectionRow(long, String!);
ctor public SectionRow(String!);
+ ctor public SectionRow(long, String!);
method public final boolean isRenderedAsRowView();
}
@@ -2866,14 +2866,14 @@
}
public class SparseArrayObjectAdapter extends androidx.leanback.widget.ObjectAdapter {
- ctor public SparseArrayObjectAdapter(androidx.leanback.widget.PresenterSelector!);
- ctor public SparseArrayObjectAdapter(androidx.leanback.widget.Presenter!);
ctor public SparseArrayObjectAdapter();
- method public void clear(int);
+ ctor public SparseArrayObjectAdapter(androidx.leanback.widget.Presenter!);
+ ctor public SparseArrayObjectAdapter(androidx.leanback.widget.PresenterSelector!);
method public void clear();
+ method public void clear(int);
method public Object? get(int);
- method public int indexOf(Object!);
method public int indexOf(int);
+ method public int indexOf(Object!);
method public Object! lookup(int);
method public void notifyArrayItemRangeChanged(int, int);
method public void set(int, Object!);
@@ -2987,8 +2987,8 @@
method public long getMaxDate();
method public long getMinDate();
method public final void onColumnValueChanged(int, int);
- method public void setDate(long);
method public void setDate(int, int, int, boolean);
+ method public void setDate(long);
method public void setDatePickerFormat(String!);
method public void setMaxDate(long);
method public void setMinDate(long);
diff --git a/leanback/leanback/api/public_plus_experimental_current.txt b/leanback/leanback/api/public_plus_experimental_current.txt
index df5b2b4..91aec39 100644
--- a/leanback/leanback/api/public_plus_experimental_current.txt
+++ b/leanback/leanback/api/public_plus_experimental_current.txt
@@ -187,8 +187,8 @@
method @Deprecated public void setAdapter(androidx.leanback.widget.ObjectAdapter!);
method @Deprecated public void setOnItemViewClickedListener(androidx.leanback.widget.OnItemViewClickedListener!);
method @Deprecated public void setOnItemViewSelectedListener(androidx.leanback.widget.OnItemViewSelectedListener!);
- method @Deprecated public void setSelectedPosition(int, boolean, androidx.leanback.widget.Presenter.ViewHolderTask!);
method @Deprecated public void setSelectedPosition(int, boolean);
+ method @Deprecated public void setSelectedPosition(int, boolean, androidx.leanback.widget.Presenter.ViewHolderTask!);
}
@Deprecated public static interface BrowseFragment.MainFragmentRowsAdapterProvider {
@@ -287,8 +287,8 @@
method public void setAdapter(androidx.leanback.widget.ObjectAdapter!);
method public void setOnItemViewClickedListener(androidx.leanback.widget.OnItemViewClickedListener!);
method public void setOnItemViewSelectedListener(androidx.leanback.widget.OnItemViewSelectedListener!);
- method public void setSelectedPosition(int, boolean, androidx.leanback.widget.Presenter.ViewHolderTask!);
method public void setSelectedPosition(int, boolean);
+ method public void setSelectedPosition(int, boolean, androidx.leanback.widget.Presenter.ViewHolderTask!);
}
public static interface BrowseSupportFragment.MainFragmentRowsAdapterProvider {
@@ -817,9 +817,9 @@
method @Deprecated public void setOnItemViewClickedListener(androidx.leanback.widget.BaseOnItemViewClickedListener!);
method @Deprecated public void setOnItemViewSelectedListener(androidx.leanback.widget.BaseOnItemViewSelectedListener!);
method @Deprecated public final void setPresenterSelector(androidx.leanback.widget.PresenterSelector!);
- method @Deprecated public void setSelectedPosition(int, boolean, androidx.leanback.widget.Presenter.ViewHolderTask!);
method @Deprecated public void setSelectedPosition(int);
method @Deprecated public void setSelectedPosition(int, boolean);
+ method @Deprecated public void setSelectedPosition(int, boolean, androidx.leanback.widget.Presenter.ViewHolderTask!);
}
@Deprecated public static class RowsFragment.MainFragmentAdapter extends androidx.leanback.app.BrowseFragment.MainFragmentAdapter<androidx.leanback.app.RowsFragment> {
@@ -856,9 +856,9 @@
method public void setOnItemViewClickedListener(androidx.leanback.widget.BaseOnItemViewClickedListener!);
method public void setOnItemViewSelectedListener(androidx.leanback.widget.BaseOnItemViewSelectedListener!);
method public final void setPresenterSelector(androidx.leanback.widget.PresenterSelector!);
- method public void setSelectedPosition(int, boolean, androidx.leanback.widget.Presenter.ViewHolderTask!);
method public void setSelectedPosition(int);
method public void setSelectedPosition(int, boolean);
+ method public void setSelectedPosition(int, boolean, androidx.leanback.widget.Presenter.ViewHolderTask!);
}
public static class RowsSupportFragment.MainFragmentAdapter extends androidx.leanback.app.BrowseSupportFragment.MainFragmentAdapter<androidx.leanback.app.RowsSupportFragment> {
@@ -873,8 +873,8 @@
ctor @Deprecated public SearchFragment();
method @Deprecated public static android.os.Bundle! createArgs(android.os.Bundle!, String!);
method @Deprecated public static android.os.Bundle! createArgs(android.os.Bundle!, String!, String!);
- method @Deprecated public void displayCompletions(java.util.List<java.lang.String!>!);
method @Deprecated public void displayCompletions(android.view.inputmethod.CompletionInfo![]!);
+ method @Deprecated public void displayCompletions(java.util.List<java.lang.String!>!);
method @Deprecated public android.graphics.drawable.Drawable! getBadgeDrawable();
method @Deprecated public android.content.Intent! getRecognizerIntent();
method @Deprecated public androidx.leanback.app.RowsFragment! getRowsFragment();
@@ -893,8 +893,8 @@
method @Deprecated public void setOnItemViewSelectedListener(androidx.leanback.widget.OnItemViewSelectedListener!);
method @Deprecated public void setSearchAffordanceColors(androidx.leanback.widget.SearchOrbView.Colors!);
method @Deprecated public void setSearchAffordanceColorsInListening(androidx.leanback.widget.SearchOrbView.Colors!);
- method @Deprecated public void setSearchQuery(String!, boolean);
method @Deprecated public void setSearchQuery(android.content.Intent!, boolean);
+ method @Deprecated public void setSearchQuery(String!, boolean);
method @Deprecated public void setSearchResultProvider(androidx.leanback.app.SearchFragment.SearchResultProvider!);
method @Deprecated public void setSpeechRecognitionCallback(androidx.leanback.widget.SpeechRecognitionCallback!);
method @Deprecated public void setTitle(String!);
@@ -911,8 +911,8 @@
ctor public SearchSupportFragment();
method public static android.os.Bundle! createArgs(android.os.Bundle!, String!);
method public static android.os.Bundle! createArgs(android.os.Bundle!, String!, String!);
- method public void displayCompletions(java.util.List<java.lang.String!>!);
method public void displayCompletions(android.view.inputmethod.CompletionInfo![]!);
+ method public void displayCompletions(java.util.List<java.lang.String!>!);
method public android.graphics.drawable.Drawable! getBadgeDrawable();
method public android.content.Intent! getRecognizerIntent();
method public androidx.leanback.app.RowsSupportFragment! getRowsSupportFragment();
@@ -923,8 +923,8 @@
method public void setOnItemViewSelectedListener(androidx.leanback.widget.OnItemViewSelectedListener!);
method public void setSearchAffordanceColors(androidx.leanback.widget.SearchOrbView.Colors!);
method public void setSearchAffordanceColorsInListening(androidx.leanback.widget.SearchOrbView.Colors!);
- method public void setSearchQuery(String!, boolean);
method public void setSearchQuery(android.content.Intent!, boolean);
+ method public void setSearchQuery(String!, boolean);
method public void setSearchResultProvider(androidx.leanback.app.SearchSupportFragment.SearchResultProvider!);
method @Deprecated public void setSpeechRecognitionCallback(androidx.leanback.widget.SpeechRecognitionCallback!);
method public void setTitle(String!);
@@ -1138,8 +1138,8 @@
}
public class PlaybackBannerControlGlue<T extends androidx.leanback.media.PlayerAdapter> extends androidx.leanback.media.PlaybackBaseControlGlue<T> {
- ctor public PlaybackBannerControlGlue(android.content.Context, int[], T!);
ctor public PlaybackBannerControlGlue(android.content.Context, int[], int[], T!);
+ ctor public PlaybackBannerControlGlue(android.content.Context, int[], T!);
method public int[] getFastForwardSpeeds();
method public int[] getRewindSpeeds();
method public void onActionClicked(androidx.leanback.widget.Action);
@@ -1233,8 +1233,8 @@
method public boolean onKey(android.view.View!, int, android.view.KeyEvent!);
method protected void onMetadataChanged();
method protected void onStateChanged();
- method public void play(int);
method public final void play();
+ method public void play(int);
method public void setControlsRow(androidx.leanback.widget.PlaybackControlsRow!);
method @Deprecated public void setControlsRowPresenter(androidx.leanback.widget.PlaybackControlsRowPresenter!);
method public void setFadingEnabled(boolean);
@@ -1448,8 +1448,8 @@
}
public abstract class AbstractMediaListHeaderPresenter extends androidx.leanback.widget.RowPresenter {
- ctor public AbstractMediaListHeaderPresenter(android.content.Context!, int);
ctor public AbstractMediaListHeaderPresenter();
+ ctor public AbstractMediaListHeaderPresenter(android.content.Context!, int);
method protected androidx.leanback.widget.RowPresenter.ViewHolder! createRowViewHolder(android.view.ViewGroup!);
method protected abstract void onBindMediaListHeaderViewHolder(androidx.leanback.widget.AbstractMediaListHeaderPresenter.ViewHolder!, Object!);
method public void setBackgroundColor(int);
@@ -1480,11 +1480,11 @@
}
public class ArrayObjectAdapter extends androidx.leanback.widget.ObjectAdapter {
- ctor public ArrayObjectAdapter(androidx.leanback.widget.PresenterSelector);
- ctor public ArrayObjectAdapter(androidx.leanback.widget.Presenter);
ctor public ArrayObjectAdapter();
- method public void add(Object);
+ ctor public ArrayObjectAdapter(androidx.leanback.widget.Presenter);
+ ctor public ArrayObjectAdapter(androidx.leanback.widget.PresenterSelector);
method public void add(int, Object);
+ method public void add(Object);
method public void addAll(int, java.util.Collection<?>);
method public void clear();
method public Object? get(int);
@@ -1525,9 +1525,9 @@
public static class BaseCardView.LayoutParams extends android.widget.FrameLayout.LayoutParams {
ctor public BaseCardView.LayoutParams(android.content.Context!, android.util.AttributeSet!);
- ctor public BaseCardView.LayoutParams(int, int);
ctor public BaseCardView.LayoutParams(android.view.ViewGroup.LayoutParams!);
ctor public BaseCardView.LayoutParams(androidx.leanback.widget.BaseCardView.LayoutParams!);
+ ctor public BaseCardView.LayoutParams(int, int);
field public static final int VIEW_TYPE_EXTRA = 2; // 0x2
field public static final int VIEW_TYPE_INFO = 1; // 0x1
field public static final int VIEW_TYPE_MAIN = 0; // 0x0
@@ -1577,9 +1577,9 @@
}
public class CursorObjectAdapter extends androidx.leanback.widget.ObjectAdapter {
- ctor public CursorObjectAdapter(androidx.leanback.widget.PresenterSelector!);
- ctor public CursorObjectAdapter(androidx.leanback.widget.Presenter!);
ctor public CursorObjectAdapter();
+ ctor public CursorObjectAdapter(androidx.leanback.widget.Presenter!);
+ ctor public CursorObjectAdapter(androidx.leanback.widget.PresenterSelector!);
method public void changeCursor(android.database.Cursor!);
method public void close();
method public Object? get(int);
@@ -1649,8 +1649,8 @@
method @Deprecated public final boolean isUsingDefaultSelectEffect();
method @Deprecated public void setBackgroundColor(@ColorInt int);
method @Deprecated public void setOnActionClickedListener(androidx.leanback.widget.OnActionClickedListener!);
- method @Deprecated public final void setSharedElementEnterTransition(android.app.Activity!, String!, long);
method @Deprecated public final void setSharedElementEnterTransition(android.app.Activity!, String!);
+ method @Deprecated public final void setSharedElementEnterTransition(android.app.Activity!, String!, long);
method @Deprecated public void setStyleLarge(boolean);
}
@@ -1695,10 +1695,10 @@
public class FocusHighlightHelper {
ctor @Deprecated public FocusHighlightHelper();
method public static void setupBrowseItemFocusHighlight(androidx.leanback.widget.ItemBridgeAdapter!, int, boolean);
- method @Deprecated public static void setupHeaderItemFocusHighlight(androidx.leanback.widget.VerticalGridView!);
- method @Deprecated public static void setupHeaderItemFocusHighlight(androidx.leanback.widget.VerticalGridView!, boolean);
method public static void setupHeaderItemFocusHighlight(androidx.leanback.widget.ItemBridgeAdapter!);
method public static void setupHeaderItemFocusHighlight(androidx.leanback.widget.ItemBridgeAdapter!, boolean);
+ method @Deprecated public static void setupHeaderItemFocusHighlight(androidx.leanback.widget.VerticalGridView!);
+ method @Deprecated public static void setupHeaderItemFocusHighlight(androidx.leanback.widget.VerticalGridView!, boolean);
}
public interface FragmentAnimationProvider {
@@ -1854,16 +1854,16 @@
method public B! checkSetId(int);
method public B! checked(boolean);
method public B! clickAction(long);
- method public B! description(CharSequence?);
method public B! description(@StringRes int);
+ method public B! description(CharSequence?);
method public B! descriptionEditInputType(int);
method public B! descriptionEditable(boolean);
method public B! descriptionInputType(int);
- method public B! editDescription(CharSequence?);
method public B! editDescription(@StringRes int);
+ method public B! editDescription(CharSequence?);
method public B! editInputType(int);
- method public B! editTitle(CharSequence?);
method public B! editTitle(@StringRes int);
+ method public B! editTitle(CharSequence?);
method public B! editable(boolean);
method public B! enabled(boolean);
method public B! focusable(boolean);
@@ -1879,8 +1879,8 @@
method public B! intent(android.content.Intent?);
method public B! multilineDescription(boolean);
method public B! subActions(java.util.List<androidx.leanback.widget.GuidedAction!>?);
- method public B! title(CharSequence?);
method public B! title(@StringRes int);
+ method public B! title(CharSequence?);
}
public interface GuidedActionAutofillSupport {
@@ -2000,8 +2000,8 @@
}
public class HeaderItem {
- ctor public HeaderItem(long, String!);
ctor public HeaderItem(String!);
+ ctor public HeaderItem(long, String!);
method public CharSequence! getContentDescription();
method public CharSequence! getDescription();
method public final long getId();
@@ -2017,10 +2017,10 @@
}
public class ImageCardView extends androidx.leanback.widget.BaseCardView {
- ctor @Deprecated public ImageCardView(android.content.Context!, int);
- ctor public ImageCardView(android.content.Context, android.util.AttributeSet?, int);
ctor public ImageCardView(android.content.Context);
ctor public ImageCardView(android.content.Context, android.util.AttributeSet?);
+ ctor public ImageCardView(android.content.Context, android.util.AttributeSet?, int);
+ ctor @Deprecated public ImageCardView(android.content.Context!, int);
method public android.graphics.drawable.Drawable? getBadgeImage();
method public CharSequence? getContentText();
method public android.graphics.drawable.Drawable? getInfoAreaBackground();
@@ -2053,9 +2053,9 @@
}
public class ItemBridgeAdapter extends androidx.recyclerview.widget.RecyclerView.Adapter implements androidx.leanback.widget.FacetProviderAdapter {
- ctor public ItemBridgeAdapter(androidx.leanback.widget.ObjectAdapter!, androidx.leanback.widget.PresenterSelector!);
- ctor public ItemBridgeAdapter(androidx.leanback.widget.ObjectAdapter!);
ctor public ItemBridgeAdapter();
+ ctor public ItemBridgeAdapter(androidx.leanback.widget.ObjectAdapter!);
+ ctor public ItemBridgeAdapter(androidx.leanback.widget.ObjectAdapter!, androidx.leanback.widget.PresenterSelector!);
method public void clear();
method public androidx.leanback.widget.FacetProvider! getFacetProvider(int);
method public int getItemCount();
@@ -2115,8 +2115,8 @@
public class ListRow extends androidx.leanback.widget.Row {
ctor public ListRow(androidx.leanback.widget.HeaderItem!, androidx.leanback.widget.ObjectAdapter!);
- ctor public ListRow(long, androidx.leanback.widget.HeaderItem!, androidx.leanback.widget.ObjectAdapter!);
ctor public ListRow(androidx.leanback.widget.ObjectAdapter!);
+ ctor public ListRow(long, androidx.leanback.widget.HeaderItem!, androidx.leanback.widget.ObjectAdapter!);
method public final androidx.leanback.widget.ObjectAdapter! getAdapter();
method public CharSequence! getContentDescription();
method public void setContentDescription(CharSequence!);
@@ -2206,9 +2206,9 @@
}
public abstract class ObjectAdapter {
- ctor public ObjectAdapter(androidx.leanback.widget.PresenterSelector);
- ctor public ObjectAdapter(androidx.leanback.widget.Presenter);
ctor public ObjectAdapter();
+ ctor public ObjectAdapter(androidx.leanback.widget.Presenter);
+ ctor public ObjectAdapter(androidx.leanback.widget.PresenterSelector);
method public abstract Object? get(int);
method public long getId(int);
method public final androidx.leanback.widget.Presenter? getPresenter(Object);
@@ -2335,10 +2335,10 @@
}
public class PlaybackControlsRow extends androidx.leanback.widget.Row {
- ctor public PlaybackControlsRow(Object!);
ctor public PlaybackControlsRow();
- method public androidx.leanback.widget.Action! getActionForKeyCode(int);
+ ctor public PlaybackControlsRow(Object!);
method public androidx.leanback.widget.Action! getActionForKeyCode(androidx.leanback.widget.ObjectAdapter!, int);
+ method public androidx.leanback.widget.Action! getActionForKeyCode(int);
method public long getBufferedPosition();
method @Deprecated public int getBufferedProgress();
method @Deprecated public long getBufferedProgressLong();
@@ -2479,8 +2479,8 @@
}
public class PlaybackControlsRowPresenter extends androidx.leanback.widget.PlaybackRowPresenter {
- ctor public PlaybackControlsRowPresenter(androidx.leanback.widget.Presenter?);
ctor public PlaybackControlsRowPresenter();
+ ctor public PlaybackControlsRowPresenter(androidx.leanback.widget.Presenter?);
method public boolean areSecondaryActionsHidden();
method protected androidx.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
method @ColorInt public int getBackgroundColor();
@@ -2621,9 +2621,9 @@
}
public class Row {
- ctor public Row(long, androidx.leanback.widget.HeaderItem!);
- ctor public Row(androidx.leanback.widget.HeaderItem!);
ctor public Row();
+ ctor public Row(androidx.leanback.widget.HeaderItem!);
+ ctor public Row(long, androidx.leanback.widget.HeaderItem!);
method public final androidx.leanback.widget.HeaderItem! getHeaderItem();
method public final long getId();
method public boolean isRenderedAsRowView();
@@ -2718,8 +2718,8 @@
ctor public SearchBar(android.content.Context!);
ctor public SearchBar(android.content.Context!, android.util.AttributeSet!);
ctor public SearchBar(android.content.Context!, android.util.AttributeSet!, int);
- method public void displayCompletions(java.util.List<java.lang.String!>!);
method public void displayCompletions(android.view.inputmethod.CompletionInfo![]!);
+ method public void displayCompletions(java.util.List<java.lang.String!>!);
method public android.graphics.drawable.Drawable! getBadgeDrawable();
method public CharSequence! getHint();
method public String! getTitle();
@@ -2791,8 +2791,8 @@
public class SectionRow extends androidx.leanback.widget.Row {
ctor public SectionRow(androidx.leanback.widget.HeaderItem!);
- ctor public SectionRow(long, String!);
ctor public SectionRow(String!);
+ ctor public SectionRow(long, String!);
method public final boolean isRenderedAsRowView();
}
@@ -2866,14 +2866,14 @@
}
public class SparseArrayObjectAdapter extends androidx.leanback.widget.ObjectAdapter {
- ctor public SparseArrayObjectAdapter(androidx.leanback.widget.PresenterSelector!);
- ctor public SparseArrayObjectAdapter(androidx.leanback.widget.Presenter!);
ctor public SparseArrayObjectAdapter();
- method public void clear(int);
+ ctor public SparseArrayObjectAdapter(androidx.leanback.widget.Presenter!);
+ ctor public SparseArrayObjectAdapter(androidx.leanback.widget.PresenterSelector!);
method public void clear();
+ method public void clear(int);
method public Object? get(int);
- method public int indexOf(Object!);
method public int indexOf(int);
+ method public int indexOf(Object!);
method public Object! lookup(int);
method public void notifyArrayItemRangeChanged(int, int);
method public void set(int, Object!);
@@ -2987,8 +2987,8 @@
method public long getMaxDate();
method public long getMinDate();
method public final void onColumnValueChanged(int, int);
- method public void setDate(long);
method public void setDate(int, int, int, boolean);
+ method public void setDate(long);
method public void setDatePickerFormat(String!);
method public void setMaxDate(long);
method public void setMinDate(long);
diff --git a/leanback/leanback/api/restricted_current.txt b/leanback/leanback/api/restricted_current.txt
index b3aaee8..317fbfd 100644
--- a/leanback/leanback/api/restricted_current.txt
+++ b/leanback/leanback/api/restricted_current.txt
@@ -209,8 +209,8 @@
method @Deprecated public void setAdapter(androidx.leanback.widget.ObjectAdapter!);
method @Deprecated public void setOnItemViewClickedListener(androidx.leanback.widget.OnItemViewClickedListener!);
method @Deprecated public void setOnItemViewSelectedListener(androidx.leanback.widget.OnItemViewSelectedListener!);
- method @Deprecated public void setSelectedPosition(int, boolean, androidx.leanback.widget.Presenter.ViewHolderTask!);
method @Deprecated public void setSelectedPosition(int, boolean);
+ method @Deprecated public void setSelectedPosition(int, boolean, androidx.leanback.widget.Presenter.ViewHolderTask!);
}
@Deprecated public static interface BrowseFragment.MainFragmentRowsAdapterProvider {
@@ -309,8 +309,8 @@
method public void setAdapter(androidx.leanback.widget.ObjectAdapter!);
method public void setOnItemViewClickedListener(androidx.leanback.widget.OnItemViewClickedListener!);
method public void setOnItemViewSelectedListener(androidx.leanback.widget.OnItemViewSelectedListener!);
- method public void setSelectedPosition(int, boolean, androidx.leanback.widget.Presenter.ViewHolderTask!);
method public void setSelectedPosition(int, boolean);
+ method public void setSelectedPosition(int, boolean, androidx.leanback.widget.Presenter.ViewHolderTask!);
}
public static interface BrowseSupportFragment.MainFragmentRowsAdapterProvider {
@@ -858,9 +858,9 @@
method @Deprecated public void setOnItemViewClickedListener(androidx.leanback.widget.BaseOnItemViewClickedListener!);
method @Deprecated public void setOnItemViewSelectedListener(androidx.leanback.widget.BaseOnItemViewSelectedListener!);
method @Deprecated public final void setPresenterSelector(androidx.leanback.widget.PresenterSelector!);
- method @Deprecated public void setSelectedPosition(int, boolean, androidx.leanback.widget.Presenter.ViewHolderTask!);
method @Deprecated public void setSelectedPosition(int);
method @Deprecated public void setSelectedPosition(int, boolean);
+ method @Deprecated public void setSelectedPosition(int, boolean, androidx.leanback.widget.Presenter.ViewHolderTask!);
}
@Deprecated public static class RowsFragment.MainFragmentAdapter extends androidx.leanback.app.BrowseFragment.MainFragmentAdapter<androidx.leanback.app.RowsFragment> {
@@ -897,9 +897,9 @@
method public void setOnItemViewClickedListener(androidx.leanback.widget.BaseOnItemViewClickedListener!);
method public void setOnItemViewSelectedListener(androidx.leanback.widget.BaseOnItemViewSelectedListener!);
method public final void setPresenterSelector(androidx.leanback.widget.PresenterSelector!);
- method public void setSelectedPosition(int, boolean, androidx.leanback.widget.Presenter.ViewHolderTask!);
method public void setSelectedPosition(int);
method public void setSelectedPosition(int, boolean);
+ method public void setSelectedPosition(int, boolean, androidx.leanback.widget.Presenter.ViewHolderTask!);
}
public static class RowsSupportFragment.MainFragmentAdapter extends androidx.leanback.app.BrowseSupportFragment.MainFragmentAdapter<androidx.leanback.app.RowsSupportFragment> {
@@ -914,8 +914,8 @@
ctor @Deprecated public SearchFragment();
method @Deprecated public static android.os.Bundle! createArgs(android.os.Bundle!, String!);
method @Deprecated public static android.os.Bundle! createArgs(android.os.Bundle!, String!, String!);
- method @Deprecated public void displayCompletions(java.util.List<java.lang.String!>!);
method @Deprecated public void displayCompletions(android.view.inputmethod.CompletionInfo![]!);
+ method @Deprecated public void displayCompletions(java.util.List<java.lang.String!>!);
method @Deprecated public android.graphics.drawable.Drawable! getBadgeDrawable();
method @Deprecated public android.content.Intent! getRecognizerIntent();
method @Deprecated public androidx.leanback.app.RowsFragment! getRowsFragment();
@@ -934,8 +934,8 @@
method @Deprecated public void setOnItemViewSelectedListener(androidx.leanback.widget.OnItemViewSelectedListener!);
method @Deprecated public void setSearchAffordanceColors(androidx.leanback.widget.SearchOrbView.Colors!);
method @Deprecated public void setSearchAffordanceColorsInListening(androidx.leanback.widget.SearchOrbView.Colors!);
- method @Deprecated public void setSearchQuery(String!, boolean);
method @Deprecated public void setSearchQuery(android.content.Intent!, boolean);
+ method @Deprecated public void setSearchQuery(String!, boolean);
method @Deprecated public void setSearchResultProvider(androidx.leanback.app.SearchFragment.SearchResultProvider!);
method @Deprecated public void setSpeechRecognitionCallback(androidx.leanback.widget.SpeechRecognitionCallback!);
method @Deprecated public void setTitle(String!);
@@ -952,8 +952,8 @@
ctor public SearchSupportFragment();
method public static android.os.Bundle! createArgs(android.os.Bundle!, String!);
method public static android.os.Bundle! createArgs(android.os.Bundle!, String!, String!);
- method public void displayCompletions(java.util.List<java.lang.String!>!);
method public void displayCompletions(android.view.inputmethod.CompletionInfo![]!);
+ method public void displayCompletions(java.util.List<java.lang.String!>!);
method public android.graphics.drawable.Drawable! getBadgeDrawable();
method public android.content.Intent! getRecognizerIntent();
method public androidx.leanback.app.RowsSupportFragment! getRowsSupportFragment();
@@ -964,8 +964,8 @@
method public void setOnItemViewSelectedListener(androidx.leanback.widget.OnItemViewSelectedListener!);
method public void setSearchAffordanceColors(androidx.leanback.widget.SearchOrbView.Colors!);
method public void setSearchAffordanceColorsInListening(androidx.leanback.widget.SearchOrbView.Colors!);
- method public void setSearchQuery(String!, boolean);
method public void setSearchQuery(android.content.Intent!, boolean);
+ method public void setSearchQuery(String!, boolean);
method public void setSearchResultProvider(androidx.leanback.app.SearchSupportFragment.SearchResultProvider!);
method @Deprecated public void setSpeechRecognitionCallback(androidx.leanback.widget.SpeechRecognitionCallback!);
method public void setTitle(String!);
@@ -1212,8 +1212,8 @@
}
public class PlaybackBannerControlGlue<T extends androidx.leanback.media.PlayerAdapter> extends androidx.leanback.media.PlaybackBaseControlGlue<T> {
- ctor public PlaybackBannerControlGlue(android.content.Context, int[], T!);
ctor public PlaybackBannerControlGlue(android.content.Context, int[], int[], T!);
+ ctor public PlaybackBannerControlGlue(android.content.Context, int[], T!);
method public int[] getFastForwardSpeeds();
method public int[] getRewindSpeeds();
method public void onActionClicked(androidx.leanback.widget.Action);
@@ -1310,8 +1310,8 @@
method public boolean onKey(android.view.View!, int, android.view.KeyEvent!);
method protected void onMetadataChanged();
method protected void onStateChanged();
- method public void play(int);
method public final void play();
+ method public void play(int);
method public void setControlsRow(androidx.leanback.widget.PlaybackControlsRow!);
method @Deprecated public void setControlsRowPresenter(androidx.leanback.widget.PlaybackControlsRowPresenter!);
method public void setFadingEnabled(boolean);
@@ -1471,8 +1471,8 @@
@RequiresApi(21) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class FadeAndShortSlide extends android.transition.Visibility {
ctor public FadeAndShortSlide();
- ctor public FadeAndShortSlide(int);
ctor public FadeAndShortSlide(android.content.Context!, android.util.AttributeSet!);
+ ctor public FadeAndShortSlide(int);
method public float getDistance();
method public void setDistance(float);
method public void setSlideEdge(int);
@@ -1490,8 +1490,8 @@
@RequiresApi(21) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class SlideNoPropagation extends android.transition.Slide {
ctor public SlideNoPropagation();
- ctor public SlideNoPropagation(int);
ctor public SlideNoPropagation(android.content.Context!, android.util.AttributeSet!);
+ ctor public SlideNoPropagation(int);
}
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class TransitionListener {
@@ -1511,9 +1511,9 @@
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class StateMachine {
ctor public StateMachine();
method public void addState(androidx.leanback.util.StateMachine.State);
- method public void addTransition(androidx.leanback.util.StateMachine.State, androidx.leanback.util.StateMachine.State, androidx.leanback.util.StateMachine.Event);
- method public void addTransition(androidx.leanback.util.StateMachine.State, androidx.leanback.util.StateMachine.State, androidx.leanback.util.StateMachine.Condition);
method public void addTransition(androidx.leanback.util.StateMachine.State, androidx.leanback.util.StateMachine.State);
+ method public void addTransition(androidx.leanback.util.StateMachine.State, androidx.leanback.util.StateMachine.State, androidx.leanback.util.StateMachine.Condition);
+ method public void addTransition(androidx.leanback.util.StateMachine.State, androidx.leanback.util.StateMachine.State, androidx.leanback.util.StateMachine.Event);
method public void fireEvent(androidx.leanback.util.StateMachine.Event);
method public void reset();
method public void start();
@@ -1599,8 +1599,8 @@
}
public abstract class AbstractMediaListHeaderPresenter extends androidx.leanback.widget.RowPresenter {
- ctor public AbstractMediaListHeaderPresenter(android.content.Context!, int);
ctor public AbstractMediaListHeaderPresenter();
+ ctor public AbstractMediaListHeaderPresenter(android.content.Context!, int);
method protected androidx.leanback.widget.RowPresenter.ViewHolder! createRowViewHolder(android.view.ViewGroup!);
method protected abstract void onBindMediaListHeaderViewHolder(androidx.leanback.widget.AbstractMediaListHeaderPresenter.ViewHolder!, Object!);
method public void setBackgroundColor(int);
@@ -1631,11 +1631,11 @@
}
public class ArrayObjectAdapter extends androidx.leanback.widget.ObjectAdapter {
- ctor public ArrayObjectAdapter(androidx.leanback.widget.PresenterSelector);
- ctor public ArrayObjectAdapter(androidx.leanback.widget.Presenter);
ctor public ArrayObjectAdapter();
- method public void add(Object);
+ ctor public ArrayObjectAdapter(androidx.leanback.widget.Presenter);
+ ctor public ArrayObjectAdapter(androidx.leanback.widget.PresenterSelector);
method public void add(int, Object);
+ method public void add(Object);
method public void addAll(int, java.util.Collection<?>);
method public void clear();
method public Object? get(int);
@@ -1680,9 +1680,9 @@
public static class BaseCardView.LayoutParams extends android.widget.FrameLayout.LayoutParams {
ctor public BaseCardView.LayoutParams(android.content.Context!, android.util.AttributeSet!);
- ctor public BaseCardView.LayoutParams(int, int);
ctor public BaseCardView.LayoutParams(android.view.ViewGroup.LayoutParams!);
ctor public BaseCardView.LayoutParams(androidx.leanback.widget.BaseCardView.LayoutParams!);
+ ctor public BaseCardView.LayoutParams(int, int);
field public static final int VIEW_TYPE_EXTRA = 2; // 0x2
field public static final int VIEW_TYPE_INFO = 1; // 0x1
field public static final int VIEW_TYPE_MAIN = 0; // 0x0
@@ -1738,9 +1738,9 @@
}
public class CursorObjectAdapter extends androidx.leanback.widget.ObjectAdapter {
- ctor public CursorObjectAdapter(androidx.leanback.widget.PresenterSelector!);
- ctor public CursorObjectAdapter(androidx.leanback.widget.Presenter!);
ctor public CursorObjectAdapter();
+ ctor public CursorObjectAdapter(androidx.leanback.widget.Presenter!);
+ ctor public CursorObjectAdapter(androidx.leanback.widget.PresenterSelector!);
method public void changeCursor(android.database.Cursor!);
method public void close();
method public Object? get(int);
@@ -1810,8 +1810,8 @@
method @Deprecated public final boolean isUsingDefaultSelectEffect();
method @Deprecated public void setBackgroundColor(@ColorInt int);
method @Deprecated public void setOnActionClickedListener(androidx.leanback.widget.OnActionClickedListener!);
- method @Deprecated public final void setSharedElementEnterTransition(android.app.Activity!, String!, long);
method @Deprecated public final void setSharedElementEnterTransition(android.app.Activity!, String!);
+ method @Deprecated public final void setSharedElementEnterTransition(android.app.Activity!, String!, long);
method @Deprecated public void setStyleLarge(boolean);
}
@@ -1857,10 +1857,10 @@
public class FocusHighlightHelper {
ctor @Deprecated public FocusHighlightHelper();
method public static void setupBrowseItemFocusHighlight(androidx.leanback.widget.ItemBridgeAdapter!, int, boolean);
- method @Deprecated public static void setupHeaderItemFocusHighlight(androidx.leanback.widget.VerticalGridView!);
- method @Deprecated public static void setupHeaderItemFocusHighlight(androidx.leanback.widget.VerticalGridView!, boolean);
method public static void setupHeaderItemFocusHighlight(androidx.leanback.widget.ItemBridgeAdapter!);
method public static void setupHeaderItemFocusHighlight(androidx.leanback.widget.ItemBridgeAdapter!, boolean);
+ method @Deprecated public static void setupHeaderItemFocusHighlight(androidx.leanback.widget.VerticalGridView!);
+ method @Deprecated public static void setupHeaderItemFocusHighlight(androidx.leanback.widget.VerticalGridView!, boolean);
}
public interface FragmentAnimationProvider {
@@ -2016,16 +2016,16 @@
method public B! checkSetId(int);
method public B! checked(boolean);
method public B! clickAction(long);
- method public B! description(CharSequence?);
method public B! description(@StringRes int);
+ method public B! description(CharSequence?);
method public B! descriptionEditInputType(int);
method public B! descriptionEditable(boolean);
method public B! descriptionInputType(int);
- method public B! editDescription(CharSequence?);
method public B! editDescription(@StringRes int);
+ method public B! editDescription(CharSequence?);
method public B! editInputType(int);
- method public B! editTitle(CharSequence?);
method public B! editTitle(@StringRes int);
+ method public B! editTitle(CharSequence?);
method public B! editable(boolean);
method public B! enabled(boolean);
method public B! focusable(boolean);
@@ -2041,8 +2041,8 @@
method public B! intent(android.content.Intent?);
method public B! multilineDescription(boolean);
method public B! subActions(java.util.List<androidx.leanback.widget.GuidedAction!>?);
- method public B! title(CharSequence?);
method public B! title(@StringRes int);
+ method public B! title(CharSequence?);
}
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class GuidedActionAdapter extends androidx.recyclerview.widget.RecyclerView.Adapter {
@@ -2208,8 +2208,8 @@
}
public class HeaderItem {
- ctor public HeaderItem(long, String!);
ctor public HeaderItem(String!);
+ ctor public HeaderItem(long, String!);
method public CharSequence! getContentDescription();
method public CharSequence! getDescription();
method public final long getId();
@@ -2225,10 +2225,10 @@
}
public class ImageCardView extends androidx.leanback.widget.BaseCardView {
- ctor @Deprecated public ImageCardView(android.content.Context!, int);
- ctor public ImageCardView(android.content.Context, android.util.AttributeSet?, int);
ctor public ImageCardView(android.content.Context);
ctor public ImageCardView(android.content.Context, android.util.AttributeSet?);
+ ctor public ImageCardView(android.content.Context, android.util.AttributeSet?, int);
+ ctor @Deprecated public ImageCardView(android.content.Context!, int);
method public android.graphics.drawable.Drawable? getBadgeImage();
method public CharSequence? getContentText();
method public android.graphics.drawable.Drawable? getInfoAreaBackground();
@@ -2266,9 +2266,9 @@
}
public class ItemBridgeAdapter extends androidx.recyclerview.widget.RecyclerView.Adapter implements androidx.leanback.widget.FacetProviderAdapter {
- ctor public ItemBridgeAdapter(androidx.leanback.widget.ObjectAdapter!, androidx.leanback.widget.PresenterSelector!);
- ctor public ItemBridgeAdapter(androidx.leanback.widget.ObjectAdapter!);
ctor public ItemBridgeAdapter();
+ ctor public ItemBridgeAdapter(androidx.leanback.widget.ObjectAdapter!);
+ ctor public ItemBridgeAdapter(androidx.leanback.widget.ObjectAdapter!, androidx.leanback.widget.PresenterSelector!);
method public void clear();
method public androidx.leanback.widget.FacetProvider! getFacetProvider(int);
method public int getItemCount();
@@ -2328,8 +2328,8 @@
public class ListRow extends androidx.leanback.widget.Row {
ctor public ListRow(androidx.leanback.widget.HeaderItem!, androidx.leanback.widget.ObjectAdapter!);
- ctor public ListRow(long, androidx.leanback.widget.HeaderItem!, androidx.leanback.widget.ObjectAdapter!);
ctor public ListRow(androidx.leanback.widget.ObjectAdapter!);
+ ctor public ListRow(long, androidx.leanback.widget.HeaderItem!, androidx.leanback.widget.ObjectAdapter!);
method public final androidx.leanback.widget.ObjectAdapter! getAdapter();
method public CharSequence! getContentDescription();
method public void setContentDescription(CharSequence!);
@@ -2431,9 +2431,9 @@
}
public abstract class ObjectAdapter {
- ctor public ObjectAdapter(androidx.leanback.widget.PresenterSelector);
- ctor public ObjectAdapter(androidx.leanback.widget.Presenter);
ctor public ObjectAdapter();
+ ctor public ObjectAdapter(androidx.leanback.widget.Presenter);
+ ctor public ObjectAdapter(androidx.leanback.widget.PresenterSelector);
method public abstract Object? get(int);
method public long getId(int);
method public final androidx.leanback.widget.Presenter? getPresenter(Object);
@@ -2583,10 +2583,10 @@
}
public class PlaybackControlsRow extends androidx.leanback.widget.Row {
- ctor public PlaybackControlsRow(Object!);
ctor public PlaybackControlsRow();
- method public androidx.leanback.widget.Action! getActionForKeyCode(int);
+ ctor public PlaybackControlsRow(Object!);
method public androidx.leanback.widget.Action! getActionForKeyCode(androidx.leanback.widget.ObjectAdapter!, int);
+ method public androidx.leanback.widget.Action! getActionForKeyCode(int);
method public long getBufferedPosition();
method @Deprecated public int getBufferedProgress();
method @Deprecated public long getBufferedProgressLong();
@@ -2727,8 +2727,8 @@
}
public class PlaybackControlsRowPresenter extends androidx.leanback.widget.PlaybackRowPresenter {
- ctor public PlaybackControlsRowPresenter(androidx.leanback.widget.Presenter?);
ctor public PlaybackControlsRowPresenter();
+ ctor public PlaybackControlsRowPresenter(androidx.leanback.widget.Presenter?);
method public boolean areSecondaryActionsHidden();
method protected androidx.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
method @ColorInt public int getBackgroundColor();
@@ -2878,9 +2878,9 @@
}
public class Row {
- ctor public Row(long, androidx.leanback.widget.HeaderItem!);
- ctor public Row(androidx.leanback.widget.HeaderItem!);
ctor public Row();
+ ctor public Row(androidx.leanback.widget.HeaderItem!);
+ ctor public Row(long, androidx.leanback.widget.HeaderItem!);
method public final androidx.leanback.widget.HeaderItem! getHeaderItem();
method public final long getId();
method public boolean isRenderedAsRowView();
@@ -2987,8 +2987,8 @@
ctor public SearchBar(android.content.Context!);
ctor public SearchBar(android.content.Context!, android.util.AttributeSet!);
ctor public SearchBar(android.content.Context!, android.util.AttributeSet!, int);
- method public void displayCompletions(java.util.List<java.lang.String!>!);
method public void displayCompletions(android.view.inputmethod.CompletionInfo![]!);
+ method public void displayCompletions(java.util.List<java.lang.String!>!);
method public android.graphics.drawable.Drawable! getBadgeDrawable();
method public CharSequence! getHint();
method public String! getTitle();
@@ -3060,8 +3060,8 @@
public class SectionRow extends androidx.leanback.widget.Row {
ctor public SectionRow(androidx.leanback.widget.HeaderItem!);
- ctor public SectionRow(long, String!);
ctor public SectionRow(String!);
+ ctor public SectionRow(long, String!);
method public final boolean isRenderedAsRowView();
}
@@ -3158,14 +3158,14 @@
}
public class SparseArrayObjectAdapter extends androidx.leanback.widget.ObjectAdapter {
- ctor public SparseArrayObjectAdapter(androidx.leanback.widget.PresenterSelector!);
- ctor public SparseArrayObjectAdapter(androidx.leanback.widget.Presenter!);
ctor public SparseArrayObjectAdapter();
- method public void clear(int);
+ ctor public SparseArrayObjectAdapter(androidx.leanback.widget.Presenter!);
+ ctor public SparseArrayObjectAdapter(androidx.leanback.widget.PresenterSelector!);
method public void clear();
+ method public void clear(int);
method public Object? get(int);
- method public int indexOf(Object!);
method public int indexOf(int);
+ method public int indexOf(Object!);
method public Object! lookup(int);
method public void notifyArrayItemRangeChanged(int, int);
method public void set(int, Object!);
@@ -3297,8 +3297,8 @@
method public long getMaxDate();
method public long getMinDate();
method public final void onColumnValueChanged(int, int);
- method public void setDate(long);
method public void setDate(int, int, int, boolean);
+ method public void setDate(long);
method public void setDatePickerFormat(String!);
method public void setMaxDate(long);
method public void setMinDate(long);
diff --git a/leanback/leanback/build.gradle b/leanback/leanback/build.gradle
index 1a3152a..d22458a 100644
--- a/leanback/leanback/build.gradle
+++ b/leanback/leanback/build.gradle
@@ -55,7 +55,7 @@
}
androidx {
- name = "Android Support Leanback v17"
+ name = "Leanback"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.LEANBACK
inceptionYear = "2014"
diff --git a/leanback/leanback/src/main/res/values-or/strings.xml b/leanback/leanback/src/main/res/values-or/strings.xml
index d5269f5..a7f2365 100644
--- a/leanback/leanback/src/main/res/values-or/strings.xml
+++ b/leanback/leanback/src/main/res/values-or/strings.xml
@@ -26,7 +26,7 @@
<string name="lb_control_display_fast_forward_multiplier" msgid="4657191930956702614">"%1$dX"</string>
<string name="lb_control_display_rewind_multiplier" msgid="4597148235912710942">"%1$dX"</string>
<string name="lb_playback_controls_play" msgid="7088090604803481121">"ଚଲାନ୍ତୁ"</string>
- <string name="lb_playback_controls_pause" msgid="917331776961802657">"ପଜ୍ କରନ୍ତୁ"</string>
+ <string name="lb_playback_controls_pause" msgid="917331776961802657">"ବିରତ କରନ୍ତୁ"</string>
<string name="lb_playback_controls_fast_forward" msgid="740570111678243493">"ଫାଷ୍ଟ ଫର୍ୱାର୍ଡ"</string>
<string name="lb_playback_controls_fast_forward_multiplier" msgid="5734614175721471329">"%1$dX ବେଗରେ ଫାଷ୍ଟ ଫରୱାର୍ଡ"</string>
<string name="lb_playback_controls_rewind" msgid="2866333981131020771">"ରିୱାଇଣ୍ଡ"</string>
diff --git a/libraryversions.toml b/libraryversions.toml
index 413f3f3..223c6d0 100644
--- a/libraryversions.toml
+++ b/libraryversions.toml
@@ -1,5 +1,5 @@
[versions]
-ACTIVITY = "1.8.0-alpha02"
+ACTIVITY = "1.8.0-alpha05"
ANNOTATION = "1.7.0-alpha03"
ANNOTATION_EXPERIMENTAL = "1.4.0-alpha01"
APPACTIONS_BUILTINTYPES = "1.0.0-alpha01"
@@ -19,7 +19,7 @@
CARDVIEW = "1.1.0-alpha01"
CAR_APP = "1.4.0-alpha01"
COLLECTION = "1.3.0-alpha05"
-COMPOSE = "1.5.0-alpha04"
+COMPOSE = "1.5.0-alpha05"
COMPOSE_COMPILER = "1.4.7"
COMPOSE_MATERIAL3 = "1.2.0-alpha02"
COMPOSE_MATERIAL3_ADAPTIVE = "1.0.0-alpha01"
@@ -29,7 +29,7 @@
CONSTRAINTLAYOUT_CORE = "1.1.0-alpha10"
CONTENTPAGER = "1.1.0-alpha01"
COORDINATORLAYOUT = "1.3.0-alpha01"
-CORE = "1.11.0-alpha04"
+CORE = "1.11.0-alpha05"
CORE_ANIMATION = "1.0.0-beta02"
CORE_ANIMATION_TESTING = "1.0.0-beta01"
CORE_APPDIGEST = "1.0.0-alpha01"
@@ -37,7 +37,7 @@
CORE_I18N = "1.0.0-alpha01"
CORE_LOCATION_ALTITUDE = "1.0.0-alpha01"
CORE_PERFORMANCE = "1.0.0-alpha03"
-CORE_REMOTEVIEWS = "1.0.0-beta04"
+CORE_REMOTEVIEWS = "1.0.0-beta05"
CORE_ROLE = "1.2.0-alpha01"
CORE_SPLASHSCREEN = "1.1.0-alpha01"
CORE_UWB = "1.0.0-alpha06"
@@ -52,12 +52,12 @@
DYNAMICANIMATION = "1.1.0-alpha04"
DYNAMICANIMATION_KTX = "1.0.0-alpha04"
EMOJI = "1.2.0-alpha03"
-EMOJI2 = "1.4.0-beta03"
+EMOJI2 = "1.4.0-beta04"
ENTERPRISE = "1.1.0-rc01"
EXIFINTERFACE = "1.4.0-alpha01"
FRAGMENT = "1.7.0-alpha01"
FUTURES = "1.2.0-alpha01"
-GLANCE = "1.0.0-beta01"
+GLANCE = "1.0.0-beta02"
GLANCE_PREVIEW = "1.0.0-alpha06"
GLANCE_TEMPLATE = "1.0.0-alpha06"
GLANCE_WEAR_TILES = "1.0.0-alpha06"
@@ -89,15 +89,15 @@
MEDIAROUTER = "1.5.0-alpha01"
METRICS = "1.0.0-alpha05"
NAVIGATION = "2.7.0-alpha01"
-PAGING = "3.2.0-alpha05"
-PAGING_COMPOSE = "1.0.0-alpha19"
+PAGING = "3.2.0-alpha06"
+PAGING_COMPOSE = "1.0.0-alpha20"
PALETTE = "1.1.0-alpha01"
PERCENTLAYOUT = "1.1.0-alpha01"
PREFERENCE = "1.3.0-alpha01"
PRINT = "1.1.0-beta01"
-PRIVACYSANDBOX_ADS = "1.0.0-beta04"
+PRIVACYSANDBOX_ADS = "1.0.0-beta05"
PRIVACYSANDBOX_PLUGINS = "1.0.0-alpha02"
-PRIVACYSANDBOX_SDKRUNTIME = "1.0.0-alpha04"
+PRIVACYSANDBOX_SDKRUNTIME = "1.0.0-alpha05"
PRIVACYSANDBOX_TOOLS = "1.0.0-alpha04"
PRIVACYSANDBOX_UI = "1.0.0-alpha03"
PROFILEINSTALLER = "1.4.0-alpha01"
@@ -140,15 +140,15 @@
VIEWPAGER = "1.1.0-alpha02"
VIEWPAGER2 = "1.2.0-alpha01"
WEAR = "1.3.0-alpha06"
-WEAR_COMPOSE = "1.2.0-alpha10"
-WEAR_COMPOSE_MATERIAL3 = "1.0.0-alpha04"
+WEAR_COMPOSE = "1.2.0-alpha11"
+WEAR_COMPOSE_MATERIAL3 = "1.0.0-alpha05"
WEAR_INPUT = "1.2.0-alpha03"
WEAR_INPUT_TESTING = "1.2.0-alpha03"
WEAR_ONGOING = "1.1.0-alpha01"
WEAR_PHONE_INTERACTIONS = "1.1.0-alpha04"
-WEAR_PROTOLAYOUT = "1.0.0-alpha09"
+WEAR_PROTOLAYOUT = "1.0.0-alpha10"
WEAR_REMOTE_INTERACTIONS = "1.1.0-alpha01"
-WEAR_TILES = "1.2.0-alpha05"
+WEAR_TILES = "1.2.0-alpha06"
WEAR_WATCHFACE = "1.2.0-alpha09"
WEBKIT = "1.8.0-alpha01"
WINDOW = "1.2.0-alpha01"
diff --git a/lifecycle/integration-tests/incrementality/src/test/kotlin/androidx/lifecycle/IncrementalAnnotationProcessingTest.kt b/lifecycle/integration-tests/incrementality/src/test/kotlin/androidx/lifecycle/IncrementalAnnotationProcessingTest.kt
index d23d266..b7f7648 100644
--- a/lifecycle/integration-tests/incrementality/src/test/kotlin/androidx/lifecycle/IncrementalAnnotationProcessingTest.kt
+++ b/lifecycle/integration-tests/incrementality/src/test/kotlin/androidx/lifecycle/IncrementalAnnotationProcessingTest.kt
@@ -18,15 +18,15 @@
import androidx.testutils.gradle.ProjectSetupRule
import com.google.common.truth.Truth.assertThat
+import java.io.File
+import java.nio.file.Files
+import java.nio.file.Path
import org.gradle.testkit.runner.GradleRunner
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import java.io.File
-import java.nio.file.Files
-import java.nio.file.Path
@RunWith(JUnit4::class)
class IncrementalAnnotationProcessingTest {
diff --git a/lifecycle/integration-tests/kotlintestapp/src/test-common/java/androidx.lifecycle/LifecycleCoroutineScopeTestBase.kt b/lifecycle/integration-tests/kotlintestapp/src/test-common/java/androidx.lifecycle/LifecycleCoroutineScopeTestBase.kt
index 5b4d60d..61bece9 100644
--- a/lifecycle/integration-tests/kotlintestapp/src/test-common/java/androidx.lifecycle/LifecycleCoroutineScopeTestBase.kt
+++ b/lifecycle/integration-tests/kotlintestapp/src/test-common/java/androidx.lifecycle/LifecycleCoroutineScopeTestBase.kt
@@ -18,6 +18,7 @@
import androidx.lifecycle.testing.TestLifecycleOwner
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.CancellationException
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.async
@@ -25,10 +26,9 @@
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.sync.Mutex
+import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.withContext
import org.junit.Test
-import java.util.concurrent.CancellationException
-import kotlinx.coroutines.test.UnconfinedTestDispatcher
@OptIn(ExperimentalCoroutinesApi::class)
abstract class LifecycleCoroutineScopeTestBase {
diff --git a/lifecycle/integration-tests/kotlintestapp/src/test/java/androidx/lifecycle/LifecycleCoroutineScopeTest.kt b/lifecycle/integration-tests/kotlintestapp/src/test/java/androidx/lifecycle/LifecycleCoroutineScopeTest.kt
index a2af184..19d71e3 100644
--- a/lifecycle/integration-tests/kotlintestapp/src/test/java/androidx/lifecycle/LifecycleCoroutineScopeTest.kt
+++ b/lifecycle/integration-tests/kotlintestapp/src/test/java/androidx/lifecycle/LifecycleCoroutineScopeTest.kt
@@ -18,6 +18,8 @@
package androidx.lifecycle
+import java.util.concurrent.Executors
+import java.util.concurrent.TimeUnit
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.asCoroutineDispatcher
import kotlinx.coroutines.test.resetMain
@@ -26,8 +28,6 @@
import org.junit.Before
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import java.util.concurrent.Executors
-import java.util.concurrent.TimeUnit
/**
* To ensure consistent behavior, we run these tests both on androidTest and test
diff --git a/lifecycle/lifecycle-common-java8/build.gradle b/lifecycle/lifecycle-common-java8/build.gradle
index cbab42e..88e4bc1 100644
--- a/lifecycle/lifecycle-common-java8/build.gradle
+++ b/lifecycle/lifecycle-common-java8/build.gradle
@@ -30,7 +30,7 @@
}
androidx {
- name = "Android Lifecycle-Common for Java 8 Language"
+ name = "Lifecycle-Common for Java 8"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2017"
description = "Android Lifecycle-Common for Java 8 Language"
diff --git a/lifecycle/lifecycle-common/api/current.txt b/lifecycle/lifecycle-common/api/current.txt
index c68d98d..db43346 100644
--- a/lifecycle/lifecycle-common/api/current.txt
+++ b/lifecycle/lifecycle-common/api/current.txt
@@ -89,12 +89,12 @@
}
public final class PausingDispatcherKt {
- method @Deprecated public static suspend <T> Object? whenCreated(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
method @Deprecated public static suspend <T> Object? whenCreated(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
- method @Deprecated public static suspend <T> Object? whenResumed(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
+ method @Deprecated public static suspend <T> Object? whenCreated(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
method @Deprecated public static suspend <T> Object? whenResumed(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
- method @Deprecated public static suspend <T> Object? whenStarted(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
+ method @Deprecated public static suspend <T> Object? whenResumed(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
method @Deprecated public static suspend <T> Object? whenStarted(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
+ method @Deprecated public static suspend <T> Object? whenStarted(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
method @Deprecated public static suspend <T> Object? whenStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State minState, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
}
diff --git a/lifecycle/lifecycle-common/api/public_plus_experimental_current.txt b/lifecycle/lifecycle-common/api/public_plus_experimental_current.txt
index c68d98d..db43346 100644
--- a/lifecycle/lifecycle-common/api/public_plus_experimental_current.txt
+++ b/lifecycle/lifecycle-common/api/public_plus_experimental_current.txt
@@ -89,12 +89,12 @@
}
public final class PausingDispatcherKt {
- method @Deprecated public static suspend <T> Object? whenCreated(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
method @Deprecated public static suspend <T> Object? whenCreated(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
- method @Deprecated public static suspend <T> Object? whenResumed(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
+ method @Deprecated public static suspend <T> Object? whenCreated(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
method @Deprecated public static suspend <T> Object? whenResumed(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
- method @Deprecated public static suspend <T> Object? whenStarted(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
+ method @Deprecated public static suspend <T> Object? whenResumed(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
method @Deprecated public static suspend <T> Object? whenStarted(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
+ method @Deprecated public static suspend <T> Object? whenStarted(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
method @Deprecated public static suspend <T> Object? whenStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State minState, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
}
diff --git a/lifecycle/lifecycle-common/api/restricted_current.txt b/lifecycle/lifecycle-common/api/restricted_current.txt
index 634b76f..0f03c8d 100644
--- a/lifecycle/lifecycle-common/api/restricted_current.txt
+++ b/lifecycle/lifecycle-common/api/restricted_current.txt
@@ -106,12 +106,12 @@
}
public final class PausingDispatcherKt {
- method @Deprecated public static suspend <T> Object? whenCreated(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
method @Deprecated public static suspend <T> Object? whenCreated(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
- method @Deprecated public static suspend <T> Object? whenResumed(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
+ method @Deprecated public static suspend <T> Object? whenCreated(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
method @Deprecated public static suspend <T> Object? whenResumed(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
- method @Deprecated public static suspend <T> Object? whenStarted(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
+ method @Deprecated public static suspend <T> Object? whenResumed(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
method @Deprecated public static suspend <T> Object? whenStarted(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
+ method @Deprecated public static suspend <T> Object? whenStarted(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
method @Deprecated public static suspend <T> Object? whenStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State minState, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
}
diff --git a/lifecycle/lifecycle-common/build.gradle b/lifecycle/lifecycle-common/build.gradle
index fcd8ba4..1aeacc3 100644
--- a/lifecycle/lifecycle-common/build.gradle
+++ b/lifecycle/lifecycle-common/build.gradle
@@ -37,7 +37,7 @@
}
androidx {
- name = "Android Lifecycle-Common"
+ name = "Lifecycle-Common"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2017"
description = "Android Lifecycle-Common"
diff --git a/lifecycle/lifecycle-common/src/main/java/androidx/lifecycle/DispatchQueue.kt b/lifecycle/lifecycle-common/src/main/java/androidx/lifecycle/DispatchQueue.kt
index 1f51438..13f6bd8 100644
--- a/lifecycle/lifecycle-common/src/main/java/androidx/lifecycle/DispatchQueue.kt
+++ b/lifecycle/lifecycle-common/src/main/java/androidx/lifecycle/DispatchQueue.kt
@@ -18,10 +18,10 @@
import androidx.annotation.AnyThread
import androidx.annotation.MainThread
-import kotlinx.coroutines.Dispatchers
import java.util.ArrayDeque
import java.util.Queue
import kotlin.coroutines.CoroutineContext
+import kotlinx.coroutines.Dispatchers
/**
* Helper class for [PausingDispatcher] that tracks runnables which are enqueued to the dispatcher
diff --git a/lifecycle/lifecycle-common/src/main/java/androidx/lifecycle/Lifecycle.kt b/lifecycle/lifecycle-common/src/main/java/androidx/lifecycle/Lifecycle.kt
index ac586d8..f69c624 100644
--- a/lifecycle/lifecycle-common/src/main/java/androidx/lifecycle/Lifecycle.kt
+++ b/lifecycle/lifecycle-common/src/main/java/androidx/lifecycle/Lifecycle.kt
@@ -25,7 +25,6 @@
import kotlinx.coroutines.Job
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.cancel
-import kotlinx.coroutines.launch
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
@@ -33,6 +32,7 @@
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.flow.flowOn
+import kotlinx.coroutines.launch
/**
* Defines an object that has an Android Lifecycle. [Fragment][androidx.fragment.app.Fragment]
diff --git a/lifecycle/lifecycle-common/src/main/java/androidx/lifecycle/PausingDispatcher.kt b/lifecycle/lifecycle-common/src/main/java/androidx/lifecycle/PausingDispatcher.kt
index 70dc54d..7b388ed 100644
--- a/lifecycle/lifecycle-common/src/main/java/androidx/lifecycle/PausingDispatcher.kt
+++ b/lifecycle/lifecycle-common/src/main/java/androidx/lifecycle/PausingDispatcher.kt
@@ -16,13 +16,13 @@
package androidx.lifecycle
+import kotlin.coroutines.CoroutineContext
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.Runnable
import kotlinx.coroutines.withContext
-import kotlin.coroutines.CoroutineContext
/**
* Runs the given block when the [LifecycleOwner]'s [Lifecycle] is at least in
diff --git a/lifecycle/lifecycle-compiler/build.gradle b/lifecycle/lifecycle-compiler/build.gradle
index 60945b2..b5ac1f6 100644
--- a/lifecycle/lifecycle-compiler/build.gradle
+++ b/lifecycle/lifecycle-compiler/build.gradle
@@ -53,7 +53,7 @@
}
androidx {
- name = "Android Lifecycles Compiler"
+ name = "Lifecycles Compiler"
type = LibraryType.ANNOTATION_PROCESSOR
inceptionYear = "2017"
description = "Android Lifecycles annotation processor"
diff --git a/lifecycle/lifecycle-compiler/src/test/kotlin/androidx/lifecycle/ValidCasesTest.kt b/lifecycle/lifecycle-compiler/src/test/kotlin/androidx/lifecycle/ValidCasesTest.kt
index 4c36341..1889a41 100644
--- a/lifecycle/lifecycle-compiler/src/test/kotlin/androidx/lifecycle/ValidCasesTest.kt
+++ b/lifecycle/lifecycle-compiler/src/test/kotlin/androidx/lifecycle/ValidCasesTest.kt
@@ -20,11 +20,11 @@
import androidx.lifecycle.utils.processClass
import com.google.testing.compile.CompileTester
import com.google.testing.compile.JavaSourcesSubject
+import java.io.File
+import javax.tools.StandardLocation
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import java.io.File
-import javax.tools.StandardLocation
@RunWith(JUnit4::class)
class ValidCasesTest {
diff --git a/lifecycle/lifecycle-extensions/api/current.txt b/lifecycle/lifecycle-extensions/api/current.txt
index 88798d8..b99201f 100644
--- a/lifecycle/lifecycle-extensions/api/current.txt
+++ b/lifecycle/lifecycle-extensions/api/current.txt
@@ -4,8 +4,8 @@
@Deprecated public class ViewModelProviders {
ctor @Deprecated public ViewModelProviders();
method @Deprecated @MainThread public static androidx.lifecycle.ViewModelProvider of(androidx.fragment.app.Fragment);
- method @Deprecated @MainThread public static androidx.lifecycle.ViewModelProvider of(androidx.fragment.app.FragmentActivity);
method @Deprecated @MainThread public static androidx.lifecycle.ViewModelProvider of(androidx.fragment.app.Fragment, androidx.lifecycle.ViewModelProvider.Factory?);
+ method @Deprecated @MainThread public static androidx.lifecycle.ViewModelProvider of(androidx.fragment.app.FragmentActivity);
method @Deprecated @MainThread public static androidx.lifecycle.ViewModelProvider of(androidx.fragment.app.FragmentActivity, androidx.lifecycle.ViewModelProvider.Factory?);
}
@@ -14,8 +14,8 @@
}
@Deprecated public class ViewModelStores {
- method @Deprecated @MainThread public static androidx.lifecycle.ViewModelStore of(androidx.fragment.app.FragmentActivity);
method @Deprecated @MainThread public static androidx.lifecycle.ViewModelStore of(androidx.fragment.app.Fragment);
+ method @Deprecated @MainThread public static androidx.lifecycle.ViewModelStore of(androidx.fragment.app.FragmentActivity);
}
}
diff --git a/lifecycle/lifecycle-extensions/api/public_plus_experimental_current.txt b/lifecycle/lifecycle-extensions/api/public_plus_experimental_current.txt
index 88798d8..b99201f 100644
--- a/lifecycle/lifecycle-extensions/api/public_plus_experimental_current.txt
+++ b/lifecycle/lifecycle-extensions/api/public_plus_experimental_current.txt
@@ -4,8 +4,8 @@
@Deprecated public class ViewModelProviders {
ctor @Deprecated public ViewModelProviders();
method @Deprecated @MainThread public static androidx.lifecycle.ViewModelProvider of(androidx.fragment.app.Fragment);
- method @Deprecated @MainThread public static androidx.lifecycle.ViewModelProvider of(androidx.fragment.app.FragmentActivity);
method @Deprecated @MainThread public static androidx.lifecycle.ViewModelProvider of(androidx.fragment.app.Fragment, androidx.lifecycle.ViewModelProvider.Factory?);
+ method @Deprecated @MainThread public static androidx.lifecycle.ViewModelProvider of(androidx.fragment.app.FragmentActivity);
method @Deprecated @MainThread public static androidx.lifecycle.ViewModelProvider of(androidx.fragment.app.FragmentActivity, androidx.lifecycle.ViewModelProvider.Factory?);
}
@@ -14,8 +14,8 @@
}
@Deprecated public class ViewModelStores {
- method @Deprecated @MainThread public static androidx.lifecycle.ViewModelStore of(androidx.fragment.app.FragmentActivity);
method @Deprecated @MainThread public static androidx.lifecycle.ViewModelStore of(androidx.fragment.app.Fragment);
+ method @Deprecated @MainThread public static androidx.lifecycle.ViewModelStore of(androidx.fragment.app.FragmentActivity);
}
}
diff --git a/lifecycle/lifecycle-extensions/api/restricted_current.txt b/lifecycle/lifecycle-extensions/api/restricted_current.txt
index 88798d8..b99201f 100644
--- a/lifecycle/lifecycle-extensions/api/restricted_current.txt
+++ b/lifecycle/lifecycle-extensions/api/restricted_current.txt
@@ -4,8 +4,8 @@
@Deprecated public class ViewModelProviders {
ctor @Deprecated public ViewModelProviders();
method @Deprecated @MainThread public static androidx.lifecycle.ViewModelProvider of(androidx.fragment.app.Fragment);
- method @Deprecated @MainThread public static androidx.lifecycle.ViewModelProvider of(androidx.fragment.app.FragmentActivity);
method @Deprecated @MainThread public static androidx.lifecycle.ViewModelProvider of(androidx.fragment.app.Fragment, androidx.lifecycle.ViewModelProvider.Factory?);
+ method @Deprecated @MainThread public static androidx.lifecycle.ViewModelProvider of(androidx.fragment.app.FragmentActivity);
method @Deprecated @MainThread public static androidx.lifecycle.ViewModelProvider of(androidx.fragment.app.FragmentActivity, androidx.lifecycle.ViewModelProvider.Factory?);
}
@@ -14,8 +14,8 @@
}
@Deprecated public class ViewModelStores {
- method @Deprecated @MainThread public static androidx.lifecycle.ViewModelStore of(androidx.fragment.app.FragmentActivity);
method @Deprecated @MainThread public static androidx.lifecycle.ViewModelStore of(androidx.fragment.app.Fragment);
+ method @Deprecated @MainThread public static androidx.lifecycle.ViewModelStore of(androidx.fragment.app.FragmentActivity);
}
}
diff --git a/lifecycle/lifecycle-extensions/build.gradle b/lifecycle/lifecycle-extensions/build.gradle
index b729d31..b8c4e04 100644
--- a/lifecycle/lifecycle-extensions/build.gradle
+++ b/lifecycle/lifecycle-extensions/build.gradle
@@ -51,7 +51,7 @@
}
androidx {
- name = "Android Lifecycle Extensions"
+ name = "Lifecycle Extensions"
publish = Publish.NONE
runApiTasks = new RunApiTasks.Yes("Need to track API surface before moving to publish")
inceptionYear = "2017"
diff --git a/lifecycle/lifecycle-livedata-core-ktx-lint/build.gradle b/lifecycle/lifecycle-livedata-core-ktx-lint/build.gradle
index 6bb81f4..59c894a 100644
--- a/lifecycle/lifecycle-livedata-core-ktx-lint/build.gradle
+++ b/lifecycle/lifecycle-livedata-core-ktx-lint/build.gradle
@@ -34,7 +34,7 @@
}
androidx {
- name = "Android LiveData Kotlin Lint Checks"
+ name = "LiveData Kotlin Lint Checks"
type = LibraryType.LINT
inceptionYear = "2019"
description = "Lint Checks for LiveData Kotlin Extensions"
diff --git a/lifecycle/lifecycle-livedata-core/api/current.txt b/lifecycle/lifecycle-livedata-core/api/current.txt
index eed1a51..4f36e61 100644
--- a/lifecycle/lifecycle-livedata-core/api/current.txt
+++ b/lifecycle/lifecycle-livedata-core/api/current.txt
@@ -2,8 +2,8 @@
package androidx.lifecycle {
public abstract class LiveData<T> {
- ctor public LiveData(T!);
ctor public LiveData();
+ ctor public LiveData(T!);
method public T? getValue();
method public boolean hasActiveObservers();
method public boolean hasObservers();
@@ -19,8 +19,8 @@
}
public class MutableLiveData<T> extends androidx.lifecycle.LiveData<T> {
- ctor public MutableLiveData(T!);
ctor public MutableLiveData();
+ ctor public MutableLiveData(T!);
method public void postValue(T!);
method public void setValue(T!);
}
diff --git a/lifecycle/lifecycle-livedata-core/api/public_plus_experimental_current.txt b/lifecycle/lifecycle-livedata-core/api/public_plus_experimental_current.txt
index eed1a51..4f36e61 100644
--- a/lifecycle/lifecycle-livedata-core/api/public_plus_experimental_current.txt
+++ b/lifecycle/lifecycle-livedata-core/api/public_plus_experimental_current.txt
@@ -2,8 +2,8 @@
package androidx.lifecycle {
public abstract class LiveData<T> {
- ctor public LiveData(T!);
ctor public LiveData();
+ ctor public LiveData(T!);
method public T? getValue();
method public boolean hasActiveObservers();
method public boolean hasObservers();
@@ -19,8 +19,8 @@
}
public class MutableLiveData<T> extends androidx.lifecycle.LiveData<T> {
- ctor public MutableLiveData(T!);
ctor public MutableLiveData();
+ ctor public MutableLiveData(T!);
method public void postValue(T!);
method public void setValue(T!);
}
diff --git a/lifecycle/lifecycle-livedata-core/api/restricted_current.txt b/lifecycle/lifecycle-livedata-core/api/restricted_current.txt
index eed1a51..4f36e61 100644
--- a/lifecycle/lifecycle-livedata-core/api/restricted_current.txt
+++ b/lifecycle/lifecycle-livedata-core/api/restricted_current.txt
@@ -2,8 +2,8 @@
package androidx.lifecycle {
public abstract class LiveData<T> {
- ctor public LiveData(T!);
ctor public LiveData();
+ ctor public LiveData(T!);
method public T? getValue();
method public boolean hasActiveObservers();
method public boolean hasObservers();
@@ -19,8 +19,8 @@
}
public class MutableLiveData<T> extends androidx.lifecycle.LiveData<T> {
- ctor public MutableLiveData(T!);
ctor public MutableLiveData();
+ ctor public MutableLiveData(T!);
method public void postValue(T!);
method public void setValue(T!);
}
diff --git a/lifecycle/lifecycle-livedata-core/build.gradle b/lifecycle/lifecycle-livedata-core/build.gradle
index 1947720d..58101b7 100644
--- a/lifecycle/lifecycle-livedata-core/build.gradle
+++ b/lifecycle/lifecycle-livedata-core/build.gradle
@@ -37,7 +37,7 @@
}
androidx {
- name = "Android Lifecycle LiveData Core"
+ name = "Lifecycle LiveData Core"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2017"
description = "Android Lifecycle LiveData Core"
diff --git a/lifecycle/lifecycle-livedata-ktx/api/current.txt b/lifecycle/lifecycle-livedata-ktx/api/current.txt
index 57284ff..d871976 100644
--- a/lifecycle/lifecycle-livedata-ktx/api/current.txt
+++ b/lifecycle/lifecycle-livedata-ktx/api/current.txt
@@ -2,16 +2,16 @@
package androidx.lifecycle {
public final class CoroutineLiveDataKt {
- method public static <T> androidx.lifecycle.LiveData<T> liveData(optional kotlin.coroutines.CoroutineContext context, optional long timeoutInMs, kotlin.jvm.functions.Function2<? super androidx.lifecycle.LiveDataScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
method @RequiresApi(android.os.Build.VERSION_CODES.O) public static <T> androidx.lifecycle.LiveData<T> liveData(optional kotlin.coroutines.CoroutineContext context, java.time.Duration timeout, kotlin.jvm.functions.Function2<? super androidx.lifecycle.LiveDataScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method public static <T> androidx.lifecycle.LiveData<T> liveData(optional kotlin.coroutines.CoroutineContext context, optional long timeoutInMs, kotlin.jvm.functions.Function2<? super androidx.lifecycle.LiveDataScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
}
public final class FlowLiveDataConversions {
method public static <T> kotlinx.coroutines.flow.Flow<T> asFlow(androidx.lifecycle.LiveData<T>);
- method public static <T> androidx.lifecycle.LiveData<T> asLiveData(kotlinx.coroutines.flow.Flow<? extends T>, optional kotlin.coroutines.CoroutineContext context, optional long timeoutInMs);
- method public static <T> androidx.lifecycle.LiveData<T> asLiveData(kotlinx.coroutines.flow.Flow<? extends T>, optional kotlin.coroutines.CoroutineContext context);
method public static <T> androidx.lifecycle.LiveData<T> asLiveData(kotlinx.coroutines.flow.Flow<? extends T>);
+ method public static <T> androidx.lifecycle.LiveData<T> asLiveData(kotlinx.coroutines.flow.Flow<? extends T>, optional kotlin.coroutines.CoroutineContext context);
method @RequiresApi(android.os.Build.VERSION_CODES.O) public static <T> androidx.lifecycle.LiveData<T> asLiveData(kotlinx.coroutines.flow.Flow<? extends T>, optional kotlin.coroutines.CoroutineContext context, java.time.Duration timeout);
+ method public static <T> androidx.lifecycle.LiveData<T> asLiveData(kotlinx.coroutines.flow.Flow<? extends T>, optional kotlin.coroutines.CoroutineContext context, optional long timeoutInMs);
}
public interface LiveDataScope<T> {
diff --git a/lifecycle/lifecycle-livedata-ktx/api/public_plus_experimental_current.txt b/lifecycle/lifecycle-livedata-ktx/api/public_plus_experimental_current.txt
index 57284ff..d871976 100644
--- a/lifecycle/lifecycle-livedata-ktx/api/public_plus_experimental_current.txt
+++ b/lifecycle/lifecycle-livedata-ktx/api/public_plus_experimental_current.txt
@@ -2,16 +2,16 @@
package androidx.lifecycle {
public final class CoroutineLiveDataKt {
- method public static <T> androidx.lifecycle.LiveData<T> liveData(optional kotlin.coroutines.CoroutineContext context, optional long timeoutInMs, kotlin.jvm.functions.Function2<? super androidx.lifecycle.LiveDataScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
method @RequiresApi(android.os.Build.VERSION_CODES.O) public static <T> androidx.lifecycle.LiveData<T> liveData(optional kotlin.coroutines.CoroutineContext context, java.time.Duration timeout, kotlin.jvm.functions.Function2<? super androidx.lifecycle.LiveDataScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method public static <T> androidx.lifecycle.LiveData<T> liveData(optional kotlin.coroutines.CoroutineContext context, optional long timeoutInMs, kotlin.jvm.functions.Function2<? super androidx.lifecycle.LiveDataScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
}
public final class FlowLiveDataConversions {
method public static <T> kotlinx.coroutines.flow.Flow<T> asFlow(androidx.lifecycle.LiveData<T>);
- method public static <T> androidx.lifecycle.LiveData<T> asLiveData(kotlinx.coroutines.flow.Flow<? extends T>, optional kotlin.coroutines.CoroutineContext context, optional long timeoutInMs);
- method public static <T> androidx.lifecycle.LiveData<T> asLiveData(kotlinx.coroutines.flow.Flow<? extends T>, optional kotlin.coroutines.CoroutineContext context);
method public static <T> androidx.lifecycle.LiveData<T> asLiveData(kotlinx.coroutines.flow.Flow<? extends T>);
+ method public static <T> androidx.lifecycle.LiveData<T> asLiveData(kotlinx.coroutines.flow.Flow<? extends T>, optional kotlin.coroutines.CoroutineContext context);
method @RequiresApi(android.os.Build.VERSION_CODES.O) public static <T> androidx.lifecycle.LiveData<T> asLiveData(kotlinx.coroutines.flow.Flow<? extends T>, optional kotlin.coroutines.CoroutineContext context, java.time.Duration timeout);
+ method public static <T> androidx.lifecycle.LiveData<T> asLiveData(kotlinx.coroutines.flow.Flow<? extends T>, optional kotlin.coroutines.CoroutineContext context, optional long timeoutInMs);
}
public interface LiveDataScope<T> {
diff --git a/lifecycle/lifecycle-livedata-ktx/api/restricted_current.txt b/lifecycle/lifecycle-livedata-ktx/api/restricted_current.txt
index 57284ff..d871976 100644
--- a/lifecycle/lifecycle-livedata-ktx/api/restricted_current.txt
+++ b/lifecycle/lifecycle-livedata-ktx/api/restricted_current.txt
@@ -2,16 +2,16 @@
package androidx.lifecycle {
public final class CoroutineLiveDataKt {
- method public static <T> androidx.lifecycle.LiveData<T> liveData(optional kotlin.coroutines.CoroutineContext context, optional long timeoutInMs, kotlin.jvm.functions.Function2<? super androidx.lifecycle.LiveDataScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
method @RequiresApi(android.os.Build.VERSION_CODES.O) public static <T> androidx.lifecycle.LiveData<T> liveData(optional kotlin.coroutines.CoroutineContext context, java.time.Duration timeout, kotlin.jvm.functions.Function2<? super androidx.lifecycle.LiveDataScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+ method public static <T> androidx.lifecycle.LiveData<T> liveData(optional kotlin.coroutines.CoroutineContext context, optional long timeoutInMs, kotlin.jvm.functions.Function2<? super androidx.lifecycle.LiveDataScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
}
public final class FlowLiveDataConversions {
method public static <T> kotlinx.coroutines.flow.Flow<T> asFlow(androidx.lifecycle.LiveData<T>);
- method public static <T> androidx.lifecycle.LiveData<T> asLiveData(kotlinx.coroutines.flow.Flow<? extends T>, optional kotlin.coroutines.CoroutineContext context, optional long timeoutInMs);
- method public static <T> androidx.lifecycle.LiveData<T> asLiveData(kotlinx.coroutines.flow.Flow<? extends T>, optional kotlin.coroutines.CoroutineContext context);
method public static <T> androidx.lifecycle.LiveData<T> asLiveData(kotlinx.coroutines.flow.Flow<? extends T>);
+ method public static <T> androidx.lifecycle.LiveData<T> asLiveData(kotlinx.coroutines.flow.Flow<? extends T>, optional kotlin.coroutines.CoroutineContext context);
method @RequiresApi(android.os.Build.VERSION_CODES.O) public static <T> androidx.lifecycle.LiveData<T> asLiveData(kotlinx.coroutines.flow.Flow<? extends T>, optional kotlin.coroutines.CoroutineContext context, java.time.Duration timeout);
+ method public static <T> androidx.lifecycle.LiveData<T> asLiveData(kotlinx.coroutines.flow.Flow<? extends T>, optional kotlin.coroutines.CoroutineContext context, optional long timeoutInMs);
}
public interface LiveDataScope<T> {
diff --git a/lifecycle/lifecycle-livedata/api/current.txt b/lifecycle/lifecycle-livedata/api/current.txt
index 9b1bf6c..da5dac9 100644
--- a/lifecycle/lifecycle-livedata/api/current.txt
+++ b/lifecycle/lifecycle-livedata/api/current.txt
@@ -10,10 +10,10 @@
public final class Transformations {
method @CheckResult @MainThread public static <X> androidx.lifecycle.LiveData<X> distinctUntilChanged(androidx.lifecycle.LiveData<X>);
- method @CheckResult @MainThread public static <X, Y> androidx.lifecycle.LiveData<Y> map(androidx.lifecycle.LiveData<X>, kotlin.jvm.functions.Function1<X,Y> transform);
method @Deprecated @CheckResult @MainThread public static <X, Y> androidx.lifecycle.LiveData<Y> map(androidx.lifecycle.LiveData<X>, androidx.arch.core.util.Function<X,Y> mapFunction);
- method @CheckResult @MainThread public static <X, Y> androidx.lifecycle.LiveData<Y> switchMap(androidx.lifecycle.LiveData<X>, kotlin.jvm.functions.Function1<X,androidx.lifecycle.LiveData<Y>> transform);
+ method @CheckResult @MainThread public static <X, Y> androidx.lifecycle.LiveData<Y> map(androidx.lifecycle.LiveData<X>, kotlin.jvm.functions.Function1<X,Y> transform);
method @Deprecated @CheckResult @MainThread public static <X, Y> androidx.lifecycle.LiveData<Y> switchMap(androidx.lifecycle.LiveData<X>, androidx.arch.core.util.Function<X,androidx.lifecycle.LiveData<Y>> switchMapFunction);
+ method @CheckResult @MainThread public static <X, Y> androidx.lifecycle.LiveData<Y> switchMap(androidx.lifecycle.LiveData<X>, kotlin.jvm.functions.Function1<X,androidx.lifecycle.LiveData<Y>> transform);
}
}
diff --git a/lifecycle/lifecycle-livedata/api/public_plus_experimental_current.txt b/lifecycle/lifecycle-livedata/api/public_plus_experimental_current.txt
index 9b1bf6c..da5dac9 100644
--- a/lifecycle/lifecycle-livedata/api/public_plus_experimental_current.txt
+++ b/lifecycle/lifecycle-livedata/api/public_plus_experimental_current.txt
@@ -10,10 +10,10 @@
public final class Transformations {
method @CheckResult @MainThread public static <X> androidx.lifecycle.LiveData<X> distinctUntilChanged(androidx.lifecycle.LiveData<X>);
- method @CheckResult @MainThread public static <X, Y> androidx.lifecycle.LiveData<Y> map(androidx.lifecycle.LiveData<X>, kotlin.jvm.functions.Function1<X,Y> transform);
method @Deprecated @CheckResult @MainThread public static <X, Y> androidx.lifecycle.LiveData<Y> map(androidx.lifecycle.LiveData<X>, androidx.arch.core.util.Function<X,Y> mapFunction);
- method @CheckResult @MainThread public static <X, Y> androidx.lifecycle.LiveData<Y> switchMap(androidx.lifecycle.LiveData<X>, kotlin.jvm.functions.Function1<X,androidx.lifecycle.LiveData<Y>> transform);
+ method @CheckResult @MainThread public static <X, Y> androidx.lifecycle.LiveData<Y> map(androidx.lifecycle.LiveData<X>, kotlin.jvm.functions.Function1<X,Y> transform);
method @Deprecated @CheckResult @MainThread public static <X, Y> androidx.lifecycle.LiveData<Y> switchMap(androidx.lifecycle.LiveData<X>, androidx.arch.core.util.Function<X,androidx.lifecycle.LiveData<Y>> switchMapFunction);
+ method @CheckResult @MainThread public static <X, Y> androidx.lifecycle.LiveData<Y> switchMap(androidx.lifecycle.LiveData<X>, kotlin.jvm.functions.Function1<X,androidx.lifecycle.LiveData<Y>> transform);
}
}
diff --git a/lifecycle/lifecycle-livedata/api/restricted_current.txt b/lifecycle/lifecycle-livedata/api/restricted_current.txt
index 6ffd1d9..ea55d7e 100644
--- a/lifecycle/lifecycle-livedata/api/restricted_current.txt
+++ b/lifecycle/lifecycle-livedata/api/restricted_current.txt
@@ -2,8 +2,8 @@
package androidx.lifecycle {
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract class ComputableLiveData<T> {
- ctor public ComputableLiveData(optional java.util.concurrent.Executor executor);
ctor public ComputableLiveData();
+ ctor public ComputableLiveData(optional java.util.concurrent.Executor executor);
method @WorkerThread protected abstract T compute();
method public androidx.lifecycle.LiveData<T> getLiveData();
method public void invalidate();
@@ -19,10 +19,10 @@
public final class Transformations {
method @CheckResult @MainThread public static <X> androidx.lifecycle.LiveData<X> distinctUntilChanged(androidx.lifecycle.LiveData<X>);
- method @CheckResult @MainThread public static <X, Y> androidx.lifecycle.LiveData<Y> map(androidx.lifecycle.LiveData<X>, kotlin.jvm.functions.Function1<X,Y> transform);
method @Deprecated @CheckResult @MainThread public static <X, Y> androidx.lifecycle.LiveData<Y> map(androidx.lifecycle.LiveData<X>, androidx.arch.core.util.Function<X,Y> mapFunction);
- method @CheckResult @MainThread public static <X, Y> androidx.lifecycle.LiveData<Y> switchMap(androidx.lifecycle.LiveData<X>, kotlin.jvm.functions.Function1<X,androidx.lifecycle.LiveData<Y>> transform);
+ method @CheckResult @MainThread public static <X, Y> androidx.lifecycle.LiveData<Y> map(androidx.lifecycle.LiveData<X>, kotlin.jvm.functions.Function1<X,Y> transform);
method @Deprecated @CheckResult @MainThread public static <X, Y> androidx.lifecycle.LiveData<Y> switchMap(androidx.lifecycle.LiveData<X>, androidx.arch.core.util.Function<X,androidx.lifecycle.LiveData<Y>> switchMapFunction);
+ method @CheckResult @MainThread public static <X, Y> androidx.lifecycle.LiveData<Y> switchMap(androidx.lifecycle.LiveData<X>, kotlin.jvm.functions.Function1<X,androidx.lifecycle.LiveData<Y>> transform);
}
}
diff --git a/lifecycle/lifecycle-livedata/build.gradle b/lifecycle/lifecycle-livedata/build.gradle
index 824c7f0..898e7b1 100644
--- a/lifecycle/lifecycle-livedata/build.gradle
+++ b/lifecycle/lifecycle-livedata/build.gradle
@@ -37,7 +37,7 @@
}
androidx {
- name = "Android Lifecycle LiveData"
+ name = "Lifecycle LiveData"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2017"
description = "Android Lifecycle LiveData"
diff --git a/lifecycle/lifecycle-process/build.gradle b/lifecycle/lifecycle-process/build.gradle
index 09a4076..2c59ba1f5 100644
--- a/lifecycle/lifecycle-process/build.gradle
+++ b/lifecycle/lifecycle-process/build.gradle
@@ -41,7 +41,7 @@
}
androidx {
- name = "Android Lifecycle Process"
+ name = "Lifecycle Process"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "Android Lifecycle Process"
diff --git a/lifecycle/lifecycle-reactivestreams-ktx/build.gradle b/lifecycle/lifecycle-reactivestreams-ktx/build.gradle
index 79856f6..2fef830 100644
--- a/lifecycle/lifecycle-reactivestreams-ktx/build.gradle
+++ b/lifecycle/lifecycle-reactivestreams-ktx/build.gradle
@@ -37,7 +37,7 @@
}
androidx {
- name = "Android Lifecycle ReactiveStreams KTX"
+ name = "Lifecycle ReactiveStreams KTX"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "Kotlin extensions for Lifecycle ReactiveStreams"
diff --git a/lifecycle/lifecycle-reactivestreams/build.gradle b/lifecycle/lifecycle-reactivestreams/build.gradle
index e47bb63..e73e520b 100644
--- a/lifecycle/lifecycle-reactivestreams/build.gradle
+++ b/lifecycle/lifecycle-reactivestreams/build.gradle
@@ -43,7 +43,7 @@
}
androidx {
- name = "Android Lifecycle Reactivestreams"
+ name = "Lifecycle Reactivestreams"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2017"
description = "Android Lifecycle Reactivestreams"
diff --git a/lifecycle/lifecycle-runtime-compose/api/current.txt b/lifecycle/lifecycle-runtime-compose/api/current.txt
index 41aee87c..e61a916 100644
--- a/lifecycle/lifecycle-runtime-compose/api/current.txt
+++ b/lifecycle/lifecycle-runtime-compose/api/current.txt
@@ -2,10 +2,10 @@
package androidx.lifecycle.compose {
public final class FlowExtKt {
- method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsStateWithLifecycle(kotlinx.coroutines.flow.StateFlow<? extends T>, optional androidx.lifecycle.LifecycleOwner lifecycleOwner, optional androidx.lifecycle.Lifecycle.State minActiveState, optional kotlin.coroutines.CoroutineContext context);
- method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsStateWithLifecycle(kotlinx.coroutines.flow.StateFlow<? extends T>, androidx.lifecycle.Lifecycle lifecycle, optional androidx.lifecycle.Lifecycle.State minActiveState, optional kotlin.coroutines.CoroutineContext context);
- method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsStateWithLifecycle(kotlinx.coroutines.flow.Flow<? extends T>, T initialValue, optional androidx.lifecycle.LifecycleOwner lifecycleOwner, optional androidx.lifecycle.Lifecycle.State minActiveState, optional kotlin.coroutines.CoroutineContext context);
method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsStateWithLifecycle(kotlinx.coroutines.flow.Flow<? extends T>, T initialValue, androidx.lifecycle.Lifecycle lifecycle, optional androidx.lifecycle.Lifecycle.State minActiveState, optional kotlin.coroutines.CoroutineContext context);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsStateWithLifecycle(kotlinx.coroutines.flow.Flow<? extends T>, T initialValue, optional androidx.lifecycle.LifecycleOwner lifecycleOwner, optional androidx.lifecycle.Lifecycle.State minActiveState, optional kotlin.coroutines.CoroutineContext context);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsStateWithLifecycle(kotlinx.coroutines.flow.StateFlow<? extends T>, androidx.lifecycle.Lifecycle lifecycle, optional androidx.lifecycle.Lifecycle.State minActiveState, optional kotlin.coroutines.CoroutineContext context);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsStateWithLifecycle(kotlinx.coroutines.flow.StateFlow<? extends T>, optional androidx.lifecycle.LifecycleOwner lifecycleOwner, optional androidx.lifecycle.Lifecycle.State minActiveState, optional kotlin.coroutines.CoroutineContext context);
}
public final class LifecycleEffectKt {
diff --git a/lifecycle/lifecycle-runtime-compose/api/public_plus_experimental_current.txt b/lifecycle/lifecycle-runtime-compose/api/public_plus_experimental_current.txt
index 41aee87c..e61a916 100644
--- a/lifecycle/lifecycle-runtime-compose/api/public_plus_experimental_current.txt
+++ b/lifecycle/lifecycle-runtime-compose/api/public_plus_experimental_current.txt
@@ -2,10 +2,10 @@
package androidx.lifecycle.compose {
public final class FlowExtKt {
- method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsStateWithLifecycle(kotlinx.coroutines.flow.StateFlow<? extends T>, optional androidx.lifecycle.LifecycleOwner lifecycleOwner, optional androidx.lifecycle.Lifecycle.State minActiveState, optional kotlin.coroutines.CoroutineContext context);
- method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsStateWithLifecycle(kotlinx.coroutines.flow.StateFlow<? extends T>, androidx.lifecycle.Lifecycle lifecycle, optional androidx.lifecycle.Lifecycle.State minActiveState, optional kotlin.coroutines.CoroutineContext context);
- method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsStateWithLifecycle(kotlinx.coroutines.flow.Flow<? extends T>, T initialValue, optional androidx.lifecycle.LifecycleOwner lifecycleOwner, optional androidx.lifecycle.Lifecycle.State minActiveState, optional kotlin.coroutines.CoroutineContext context);
method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsStateWithLifecycle(kotlinx.coroutines.flow.Flow<? extends T>, T initialValue, androidx.lifecycle.Lifecycle lifecycle, optional androidx.lifecycle.Lifecycle.State minActiveState, optional kotlin.coroutines.CoroutineContext context);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsStateWithLifecycle(kotlinx.coroutines.flow.Flow<? extends T>, T initialValue, optional androidx.lifecycle.LifecycleOwner lifecycleOwner, optional androidx.lifecycle.Lifecycle.State minActiveState, optional kotlin.coroutines.CoroutineContext context);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsStateWithLifecycle(kotlinx.coroutines.flow.StateFlow<? extends T>, androidx.lifecycle.Lifecycle lifecycle, optional androidx.lifecycle.Lifecycle.State minActiveState, optional kotlin.coroutines.CoroutineContext context);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsStateWithLifecycle(kotlinx.coroutines.flow.StateFlow<? extends T>, optional androidx.lifecycle.LifecycleOwner lifecycleOwner, optional androidx.lifecycle.Lifecycle.State minActiveState, optional kotlin.coroutines.CoroutineContext context);
}
public final class LifecycleEffectKt {
diff --git a/lifecycle/lifecycle-runtime-compose/api/restricted_current.txt b/lifecycle/lifecycle-runtime-compose/api/restricted_current.txt
index 41aee87c..e61a916 100644
--- a/lifecycle/lifecycle-runtime-compose/api/restricted_current.txt
+++ b/lifecycle/lifecycle-runtime-compose/api/restricted_current.txt
@@ -2,10 +2,10 @@
package androidx.lifecycle.compose {
public final class FlowExtKt {
- method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsStateWithLifecycle(kotlinx.coroutines.flow.StateFlow<? extends T>, optional androidx.lifecycle.LifecycleOwner lifecycleOwner, optional androidx.lifecycle.Lifecycle.State minActiveState, optional kotlin.coroutines.CoroutineContext context);
- method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsStateWithLifecycle(kotlinx.coroutines.flow.StateFlow<? extends T>, androidx.lifecycle.Lifecycle lifecycle, optional androidx.lifecycle.Lifecycle.State minActiveState, optional kotlin.coroutines.CoroutineContext context);
- method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsStateWithLifecycle(kotlinx.coroutines.flow.Flow<? extends T>, T initialValue, optional androidx.lifecycle.LifecycleOwner lifecycleOwner, optional androidx.lifecycle.Lifecycle.State minActiveState, optional kotlin.coroutines.CoroutineContext context);
method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsStateWithLifecycle(kotlinx.coroutines.flow.Flow<? extends T>, T initialValue, androidx.lifecycle.Lifecycle lifecycle, optional androidx.lifecycle.Lifecycle.State minActiveState, optional kotlin.coroutines.CoroutineContext context);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsStateWithLifecycle(kotlinx.coroutines.flow.Flow<? extends T>, T initialValue, optional androidx.lifecycle.LifecycleOwner lifecycleOwner, optional androidx.lifecycle.Lifecycle.State minActiveState, optional kotlin.coroutines.CoroutineContext context);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsStateWithLifecycle(kotlinx.coroutines.flow.StateFlow<? extends T>, androidx.lifecycle.Lifecycle lifecycle, optional androidx.lifecycle.Lifecycle.State minActiveState, optional kotlin.coroutines.CoroutineContext context);
+ method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> collectAsStateWithLifecycle(kotlinx.coroutines.flow.StateFlow<? extends T>, optional androidx.lifecycle.LifecycleOwner lifecycleOwner, optional androidx.lifecycle.Lifecycle.State minActiveState, optional kotlin.coroutines.CoroutineContext context);
}
public final class LifecycleEffectKt {
diff --git a/lifecycle/lifecycle-runtime-compose/samples/build.gradle b/lifecycle/lifecycle-runtime-compose/samples/build.gradle
index b1f8730..334768e 100644
--- a/lifecycle/lifecycle-runtime-compose/samples/build.gradle
+++ b/lifecycle/lifecycle-runtime-compose/samples/build.gradle
@@ -33,7 +33,7 @@
}
androidx {
- name = "AndroidX Lifecycle Runtime Compose Integration Samples"
+ name = "Lifecycle Runtime Compose Integration Samples"
type = LibraryType.SAMPLES
inceptionYear = "2021"
description = "Samples for Compose integration with Lifecycle Runtime"
diff --git a/lifecycle/lifecycle-runtime-compose/src/main/java/androidx/lifecycle/compose/FlowExt.kt b/lifecycle/lifecycle-runtime-compose/src/main/java/androidx/lifecycle/compose/FlowExt.kt
index 7ee6398..f1b633c 100644
--- a/lifecycle/lifecycle-runtime-compose/src/main/java/androidx/lifecycle/compose/FlowExt.kt
+++ b/lifecycle/lifecycle-runtime-compose/src/main/java/androidx/lifecycle/compose/FlowExt.kt
@@ -23,11 +23,11 @@
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.repeatOnLifecycle
+import kotlin.coroutines.CoroutineContext
+import kotlin.coroutines.EmptyCoroutineContext
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.withContext
-import kotlin.coroutines.CoroutineContext
-import kotlin.coroutines.EmptyCoroutineContext
/**
* Collects values from this [StateFlow] and represents its latest value via [State] in a
diff --git a/lifecycle/lifecycle-runtime-ktx-lint/build.gradle b/lifecycle/lifecycle-runtime-ktx-lint/build.gradle
index 3761f26..e10aea4 100644
--- a/lifecycle/lifecycle-runtime-ktx-lint/build.gradle
+++ b/lifecycle/lifecycle-runtime-ktx-lint/build.gradle
@@ -35,7 +35,7 @@
}
androidx {
- name = "Android Lifecycles Lint Checks"
+ name = "Lifecycles Lint Checks"
type = LibraryType.LINT
inceptionYear = "2019"
description = "Android Lifecycles Lint Checks"
diff --git a/lifecycle/lifecycle-runtime-ktx-lint/src/main/java/androidx/lifecycle/lint/LifecycleWhenChecks.kt b/lifecycle/lifecycle-runtime-ktx-lint/src/main/java/androidx/lifecycle/lint/LifecycleWhenChecks.kt
index f863f3c..dce48e7 100644
--- a/lifecycle/lifecycle-runtime-ktx-lint/src/main/java/androidx/lifecycle/lint/LifecycleWhenChecks.kt
+++ b/lifecycle/lifecycle-runtime-ktx-lint/src/main/java/androidx/lifecycle/lint/LifecycleWhenChecks.kt
@@ -33,6 +33,7 @@
import com.intellij.psi.PsiMethod
import com.intellij.psi.PsiWildcardType
import com.intellij.psi.util.PsiTypesUtil
+import java.util.ArrayDeque
import org.jetbrains.kotlin.asJava.elements.KtLightModifierList
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.uast.UCallExpression
@@ -49,7 +50,6 @@
import org.jetbrains.uast.tryResolve
import org.jetbrains.uast.visitor.AbstractUastVisitor
import org.jetbrains.uast.visitor.UastVisitor
-import java.util.ArrayDeque
// both old and new ones
private val CONTINUATION_NAMES = setOf(
diff --git a/lifecycle/lifecycle-runtime-ktx/build.gradle b/lifecycle/lifecycle-runtime-ktx/build.gradle
index e394b0b..554d287 100644
--- a/lifecycle/lifecycle-runtime-ktx/build.gradle
+++ b/lifecycle/lifecycle-runtime-ktx/build.gradle
@@ -44,7 +44,7 @@
}
androidx {
- name = "Android Lifecycle Kotlin Extensions"
+ name = "Lifecycle Kotlin Extensions"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2019"
description = "Kotlin extensions for 'lifecycle' artifact"
diff --git a/lifecycle/lifecycle-runtime-ktx/src/androidTest/java/androidx/lifecycle/PausingDispatcherTest.kt b/lifecycle/lifecycle-runtime-ktx/src/androidTest/java/androidx/lifecycle/PausingDispatcherTest.kt
index 4d2f2d6..4cadb0a 100644
--- a/lifecycle/lifecycle-runtime-ktx/src/androidTest/java/androidx/lifecycle/PausingDispatcherTest.kt
+++ b/lifecycle/lifecycle-runtime-ktx/src/androidTest/java/androidx/lifecycle/PausingDispatcherTest.kt
@@ -20,10 +20,15 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.Executors
+import java.util.concurrent.TimeUnit
+import kotlin.coroutines.CoroutineContext
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineExceptionHandler
import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Delay
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.InternalCoroutinesApi
@@ -46,11 +51,6 @@
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.Executors
-import java.util.concurrent.TimeUnit
-import kotlin.coroutines.CoroutineContext
-import kotlinx.coroutines.Delay
@Suppress("DEPRECATION")
@InternalCoroutinesApi
diff --git a/lifecycle/lifecycle-runtime-ktx/src/main/java/androidx/lifecycle/RepeatOnLifecycle.kt b/lifecycle/lifecycle-runtime-ktx/src/main/java/androidx/lifecycle/RepeatOnLifecycle.kt
index 45b0f53..a3b6d45b 100644
--- a/lifecycle/lifecycle-runtime-ktx/src/main/java/androidx/lifecycle/RepeatOnLifecycle.kt
+++ b/lifecycle/lifecycle-runtime-ktx/src/main/java/androidx/lifecycle/RepeatOnLifecycle.kt
@@ -16,6 +16,7 @@
package androidx.lifecycle
+import kotlin.coroutines.resume
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
@@ -25,7 +26,6 @@
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import kotlinx.coroutines.withContext
-import kotlin.coroutines.resume
/**
* Runs the given [block] in a new coroutine when `this` [Lifecycle] is at least at [state] and
diff --git a/lifecycle/lifecycle-runtime-ktx/src/main/java/androidx/lifecycle/WithLifecycleState.kt b/lifecycle/lifecycle-runtime-ktx/src/main/java/androidx/lifecycle/WithLifecycleState.kt
index 9f3dd21..e8f63d7 100644
--- a/lifecycle/lifecycle-runtime-ktx/src/main/java/androidx/lifecycle/WithLifecycleState.kt
+++ b/lifecycle/lifecycle-runtime-ktx/src/main/java/androidx/lifecycle/WithLifecycleState.kt
@@ -16,13 +16,13 @@
package androidx.lifecycle
+import kotlin.coroutines.EmptyCoroutineContext
+import kotlin.coroutines.coroutineContext
+import kotlin.coroutines.resumeWithException
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.suspendCancellableCoroutine
-import kotlin.coroutines.EmptyCoroutineContext
-import kotlin.coroutines.coroutineContext
-import kotlin.coroutines.resumeWithException
/**
* A [CancellationException] that indicates that the [Lifecycle] associated with an operation
diff --git a/lifecycle/lifecycle-runtime-testing/api/current.txt b/lifecycle/lifecycle-runtime-testing/api/current.txt
index 47a819e..c37e888 100644
--- a/lifecycle/lifecycle-runtime-testing/api/current.txt
+++ b/lifecycle/lifecycle-runtime-testing/api/current.txt
@@ -2,9 +2,9 @@
package androidx.lifecycle.testing {
public final class TestLifecycleOwner implements androidx.lifecycle.LifecycleOwner {
- ctor public TestLifecycleOwner(optional androidx.lifecycle.Lifecycle.State initialState, optional kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
- ctor public TestLifecycleOwner(optional androidx.lifecycle.Lifecycle.State initialState);
ctor public TestLifecycleOwner();
+ ctor public TestLifecycleOwner(optional androidx.lifecycle.Lifecycle.State initialState);
+ ctor public TestLifecycleOwner(optional androidx.lifecycle.Lifecycle.State initialState, optional kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
method public androidx.lifecycle.Lifecycle.State getCurrentState();
method public androidx.lifecycle.LifecycleRegistry getLifecycle();
method public int getObserverCount();
diff --git a/lifecycle/lifecycle-runtime-testing/api/public_plus_experimental_current.txt b/lifecycle/lifecycle-runtime-testing/api/public_plus_experimental_current.txt
index 47a819e..c37e888 100644
--- a/lifecycle/lifecycle-runtime-testing/api/public_plus_experimental_current.txt
+++ b/lifecycle/lifecycle-runtime-testing/api/public_plus_experimental_current.txt
@@ -2,9 +2,9 @@
package androidx.lifecycle.testing {
public final class TestLifecycleOwner implements androidx.lifecycle.LifecycleOwner {
- ctor public TestLifecycleOwner(optional androidx.lifecycle.Lifecycle.State initialState, optional kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
- ctor public TestLifecycleOwner(optional androidx.lifecycle.Lifecycle.State initialState);
ctor public TestLifecycleOwner();
+ ctor public TestLifecycleOwner(optional androidx.lifecycle.Lifecycle.State initialState);
+ ctor public TestLifecycleOwner(optional androidx.lifecycle.Lifecycle.State initialState, optional kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
method public androidx.lifecycle.Lifecycle.State getCurrentState();
method public androidx.lifecycle.LifecycleRegistry getLifecycle();
method public int getObserverCount();
diff --git a/lifecycle/lifecycle-runtime-testing/api/restricted_current.txt b/lifecycle/lifecycle-runtime-testing/api/restricted_current.txt
index 47a819e..c37e888 100644
--- a/lifecycle/lifecycle-runtime-testing/api/restricted_current.txt
+++ b/lifecycle/lifecycle-runtime-testing/api/restricted_current.txt
@@ -2,9 +2,9 @@
package androidx.lifecycle.testing {
public final class TestLifecycleOwner implements androidx.lifecycle.LifecycleOwner {
- ctor public TestLifecycleOwner(optional androidx.lifecycle.Lifecycle.State initialState, optional kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
- ctor public TestLifecycleOwner(optional androidx.lifecycle.Lifecycle.State initialState);
ctor public TestLifecycleOwner();
+ ctor public TestLifecycleOwner(optional androidx.lifecycle.Lifecycle.State initialState);
+ ctor public TestLifecycleOwner(optional androidx.lifecycle.Lifecycle.State initialState, optional kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
method public androidx.lifecycle.Lifecycle.State getCurrentState();
method public androidx.lifecycle.LifecycleRegistry getLifecycle();
method public int getObserverCount();
diff --git a/lifecycle/lifecycle-runtime-testing/build.gradle b/lifecycle/lifecycle-runtime-testing/build.gradle
index 4e59db92..3c7aca3 100644
--- a/lifecycle/lifecycle-runtime-testing/build.gradle
+++ b/lifecycle/lifecycle-runtime-testing/build.gradle
@@ -39,7 +39,7 @@
}
androidx {
- name = "Android Lifecycle Runtime Testing"
+ name = "Lifecycle Runtime Testing"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2019"
description = "Testing utilities for 'lifecycle' artifact"
diff --git a/lifecycle/lifecycle-runtime/build.gradle b/lifecycle/lifecycle-runtime/build.gradle
index 5199df9..3e06c78 100644
--- a/lifecycle/lifecycle-runtime/build.gradle
+++ b/lifecycle/lifecycle-runtime/build.gradle
@@ -33,7 +33,7 @@
}
androidx {
- name "Android Lifecycle Runtime"
+ name = "Lifecycle Runtime"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear "2017"
description "Android Lifecycle Runtime"
diff --git a/lifecycle/lifecycle-service/build.gradle b/lifecycle/lifecycle-service/build.gradle
index 690553f..7ab4fc2 100644
--- a/lifecycle/lifecycle-service/build.gradle
+++ b/lifecycle/lifecycle-service/build.gradle
@@ -34,7 +34,7 @@
}
androidx {
- name = "Android Lifecycle Service"
+ name = "Lifecycle Service"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "Android Lifecycle Service"
diff --git a/lifecycle/lifecycle-viewmodel-compose/api/current.txt b/lifecycle/lifecycle-viewmodel-compose/api/current.txt
index 33d89fc..2723628 100644
--- a/lifecycle/lifecycle-viewmodel-compose/api/current.txt
+++ b/lifecycle/lifecycle-viewmodel-compose/api/current.txt
@@ -9,11 +9,11 @@
}
public final class ViewModelKt {
- method @androidx.compose.runtime.Composable public static <VM extends androidx.lifecycle.ViewModel> VM viewModel(Class<VM> modelClass, optional androidx.lifecycle.ViewModelStoreOwner viewModelStoreOwner, optional String? key, optional androidx.lifecycle.ViewModelProvider.Factory? factory, optional androidx.lifecycle.viewmodel.CreationExtras extras);
method @Deprecated @androidx.compose.runtime.Composable public static inline <reified VM extends androidx.lifecycle.ViewModel> VM viewModel(optional androidx.lifecycle.ViewModelStoreOwner viewModelStoreOwner, optional String? key, optional androidx.lifecycle.ViewModelProvider.Factory? factory);
method @androidx.compose.runtime.Composable public static inline <reified VM extends androidx.lifecycle.ViewModel> VM viewModel(optional androidx.lifecycle.ViewModelStoreOwner viewModelStoreOwner, optional String? key, optional androidx.lifecycle.ViewModelProvider.Factory? factory, optional androidx.lifecycle.viewmodel.CreationExtras extras);
- method @Deprecated @androidx.compose.runtime.Composable public static <VM extends androidx.lifecycle.ViewModel> VM viewModel(Class<VM> modelClass, optional androidx.lifecycle.ViewModelStoreOwner viewModelStoreOwner, optional String? key, optional androidx.lifecycle.ViewModelProvider.Factory? factory);
method @androidx.compose.runtime.Composable public static inline <reified VM extends androidx.lifecycle.ViewModel> VM viewModel(optional androidx.lifecycle.ViewModelStoreOwner viewModelStoreOwner, optional String? key, kotlin.jvm.functions.Function1<? super androidx.lifecycle.viewmodel.CreationExtras,? extends VM> initializer);
+ method @Deprecated @androidx.compose.runtime.Composable public static <VM extends androidx.lifecycle.ViewModel> VM viewModel(Class<VM> modelClass, optional androidx.lifecycle.ViewModelStoreOwner viewModelStoreOwner, optional String? key, optional androidx.lifecycle.ViewModelProvider.Factory? factory);
+ method @androidx.compose.runtime.Composable public static <VM extends androidx.lifecycle.ViewModel> VM viewModel(Class<VM> modelClass, optional androidx.lifecycle.ViewModelStoreOwner viewModelStoreOwner, optional String? key, optional androidx.lifecycle.ViewModelProvider.Factory? factory, optional androidx.lifecycle.viewmodel.CreationExtras extras);
}
}
diff --git a/lifecycle/lifecycle-viewmodel-compose/api/public_plus_experimental_current.txt b/lifecycle/lifecycle-viewmodel-compose/api/public_plus_experimental_current.txt
index 188b922..482294a 100644
--- a/lifecycle/lifecycle-viewmodel-compose/api/public_plus_experimental_current.txt
+++ b/lifecycle/lifecycle-viewmodel-compose/api/public_plus_experimental_current.txt
@@ -12,18 +12,18 @@
}
public final class SavedStateHandleSaverKt {
- method @androidx.lifecycle.viewmodel.compose.SavedStateHandleSaveableApi public static <T> T saveable(androidx.lifecycle.SavedStateHandle, String key, optional androidx.compose.runtime.saveable.Saver<T,?> saver, kotlin.jvm.functions.Function0<? extends T> init);
- method @androidx.lifecycle.viewmodel.compose.SavedStateHandleSaveableApi public static <T> androidx.compose.runtime.MutableState<T> saveable(androidx.lifecycle.SavedStateHandle, String key, androidx.compose.runtime.saveable.Saver<T,?> stateSaver, kotlin.jvm.functions.Function0<? extends androidx.compose.runtime.MutableState<T>> init);
method @androidx.lifecycle.viewmodel.compose.SavedStateHandleSaveableApi public static <T> kotlin.properties.PropertyDelegateProvider<java.lang.Object,kotlin.properties.ReadOnlyProperty<java.lang.Object,T>> saveable(androidx.lifecycle.SavedStateHandle, optional androidx.compose.runtime.saveable.Saver<T,?> saver, kotlin.jvm.functions.Function0<? extends T> init);
+ method @androidx.lifecycle.viewmodel.compose.SavedStateHandleSaveableApi public static <T> androidx.compose.runtime.MutableState<T> saveable(androidx.lifecycle.SavedStateHandle, String key, androidx.compose.runtime.saveable.Saver<T,?> stateSaver, kotlin.jvm.functions.Function0<? extends androidx.compose.runtime.MutableState<T>> init);
+ method @androidx.lifecycle.viewmodel.compose.SavedStateHandleSaveableApi public static <T> T saveable(androidx.lifecycle.SavedStateHandle, String key, optional androidx.compose.runtime.saveable.Saver<T,?> saver, kotlin.jvm.functions.Function0<? extends T> init);
method @androidx.lifecycle.viewmodel.compose.SavedStateHandleSaveableApi public static <T, M extends androidx.compose.runtime.MutableState<T>> kotlin.properties.PropertyDelegateProvider<java.lang.Object,kotlin.properties.ReadWriteProperty<java.lang.Object,T>> saveableMutableState(androidx.lifecycle.SavedStateHandle, optional androidx.compose.runtime.saveable.Saver<T,?> stateSaver, kotlin.jvm.functions.Function0<? extends M> init);
}
public final class ViewModelKt {
- method @androidx.compose.runtime.Composable public static <VM extends androidx.lifecycle.ViewModel> VM viewModel(Class<VM> modelClass, optional androidx.lifecycle.ViewModelStoreOwner viewModelStoreOwner, optional String? key, optional androidx.lifecycle.ViewModelProvider.Factory? factory, optional androidx.lifecycle.viewmodel.CreationExtras extras);
method @Deprecated @androidx.compose.runtime.Composable public static inline <reified VM extends androidx.lifecycle.ViewModel> VM viewModel(optional androidx.lifecycle.ViewModelStoreOwner viewModelStoreOwner, optional String? key, optional androidx.lifecycle.ViewModelProvider.Factory? factory);
method @androidx.compose.runtime.Composable public static inline <reified VM extends androidx.lifecycle.ViewModel> VM viewModel(optional androidx.lifecycle.ViewModelStoreOwner viewModelStoreOwner, optional String? key, optional androidx.lifecycle.ViewModelProvider.Factory? factory, optional androidx.lifecycle.viewmodel.CreationExtras extras);
- method @Deprecated @androidx.compose.runtime.Composable public static <VM extends androidx.lifecycle.ViewModel> VM viewModel(Class<VM> modelClass, optional androidx.lifecycle.ViewModelStoreOwner viewModelStoreOwner, optional String? key, optional androidx.lifecycle.ViewModelProvider.Factory? factory);
method @androidx.compose.runtime.Composable public static inline <reified VM extends androidx.lifecycle.ViewModel> VM viewModel(optional androidx.lifecycle.ViewModelStoreOwner viewModelStoreOwner, optional String? key, kotlin.jvm.functions.Function1<? super androidx.lifecycle.viewmodel.CreationExtras,? extends VM> initializer);
+ method @Deprecated @androidx.compose.runtime.Composable public static <VM extends androidx.lifecycle.ViewModel> VM viewModel(Class<VM> modelClass, optional androidx.lifecycle.ViewModelStoreOwner viewModelStoreOwner, optional String? key, optional androidx.lifecycle.ViewModelProvider.Factory? factory);
+ method @androidx.compose.runtime.Composable public static <VM extends androidx.lifecycle.ViewModel> VM viewModel(Class<VM> modelClass, optional androidx.lifecycle.ViewModelStoreOwner viewModelStoreOwner, optional String? key, optional androidx.lifecycle.ViewModelProvider.Factory? factory, optional androidx.lifecycle.viewmodel.CreationExtras extras);
}
}
diff --git a/lifecycle/lifecycle-viewmodel-compose/api/restricted_current.txt b/lifecycle/lifecycle-viewmodel-compose/api/restricted_current.txt
index 33d89fc..2723628 100644
--- a/lifecycle/lifecycle-viewmodel-compose/api/restricted_current.txt
+++ b/lifecycle/lifecycle-viewmodel-compose/api/restricted_current.txt
@@ -9,11 +9,11 @@
}
public final class ViewModelKt {
- method @androidx.compose.runtime.Composable public static <VM extends androidx.lifecycle.ViewModel> VM viewModel(Class<VM> modelClass, optional androidx.lifecycle.ViewModelStoreOwner viewModelStoreOwner, optional String? key, optional androidx.lifecycle.ViewModelProvider.Factory? factory, optional androidx.lifecycle.viewmodel.CreationExtras extras);
method @Deprecated @androidx.compose.runtime.Composable public static inline <reified VM extends androidx.lifecycle.ViewModel> VM viewModel(optional androidx.lifecycle.ViewModelStoreOwner viewModelStoreOwner, optional String? key, optional androidx.lifecycle.ViewModelProvider.Factory? factory);
method @androidx.compose.runtime.Composable public static inline <reified VM extends androidx.lifecycle.ViewModel> VM viewModel(optional androidx.lifecycle.ViewModelStoreOwner viewModelStoreOwner, optional String? key, optional androidx.lifecycle.ViewModelProvider.Factory? factory, optional androidx.lifecycle.viewmodel.CreationExtras extras);
- method @Deprecated @androidx.compose.runtime.Composable public static <VM extends androidx.lifecycle.ViewModel> VM viewModel(Class<VM> modelClass, optional androidx.lifecycle.ViewModelStoreOwner viewModelStoreOwner, optional String? key, optional androidx.lifecycle.ViewModelProvider.Factory? factory);
method @androidx.compose.runtime.Composable public static inline <reified VM extends androidx.lifecycle.ViewModel> VM viewModel(optional androidx.lifecycle.ViewModelStoreOwner viewModelStoreOwner, optional String? key, kotlin.jvm.functions.Function1<? super androidx.lifecycle.viewmodel.CreationExtras,? extends VM> initializer);
+ method @Deprecated @androidx.compose.runtime.Composable public static <VM extends androidx.lifecycle.ViewModel> VM viewModel(Class<VM> modelClass, optional androidx.lifecycle.ViewModelStoreOwner viewModelStoreOwner, optional String? key, optional androidx.lifecycle.ViewModelProvider.Factory? factory);
+ method @androidx.compose.runtime.Composable public static <VM extends androidx.lifecycle.ViewModel> VM viewModel(Class<VM> modelClass, optional androidx.lifecycle.ViewModelStoreOwner viewModelStoreOwner, optional String? key, optional androidx.lifecycle.ViewModelProvider.Factory? factory, optional androidx.lifecycle.viewmodel.CreationExtras extras);
}
}
diff --git a/lifecycle/lifecycle-viewmodel-compose/samples/build.gradle b/lifecycle/lifecycle-viewmodel-compose/samples/build.gradle
index 195fb57..f812410 100644
--- a/lifecycle/lifecycle-viewmodel-compose/samples/build.gradle
+++ b/lifecycle/lifecycle-viewmodel-compose/samples/build.gradle
@@ -33,7 +33,7 @@
}
androidx {
- name = "AndroidX Lifecycle ViewModel Compose Integration Samples"
+ name = "Lifecycle ViewModel Compose Integration Samples"
type = LibraryType.SAMPLES
inceptionYear = "2021"
description = "Samples for Compose integration with Lifecycle ViewModel"
diff --git a/lifecycle/lifecycle-viewmodel-compose/samples/src/main/java/androidx/lifecycle/viewmodel/compose/samples/LifecycleViewModelSamples.kt b/lifecycle/lifecycle-viewmodel-compose/samples/src/main/java/androidx/lifecycle/viewmodel/compose/samples/LifecycleViewModelSamples.kt
index 750d2ff..126cd46 100644
--- a/lifecycle/lifecycle-viewmodel-compose/samples/src/main/java/androidx/lifecycle/viewmodel/compose/samples/LifecycleViewModelSamples.kt
+++ b/lifecycle/lifecycle-viewmodel-compose/samples/src/main/java/androidx/lifecycle/viewmodel/compose/samples/LifecycleViewModelSamples.kt
@@ -18,13 +18,13 @@
import androidx.annotation.Sampled
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateListOf
import androidx.compose.runtime.mutableStateMapOf
import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.setValue
import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.listSaver
+import androidx.compose.runtime.setValue
import androidx.compose.runtime.toMutableStateList
import androidx.compose.runtime.toMutableStateMap
import androidx.core.os.bundleOf
diff --git a/lifecycle/lifecycle-viewmodel-compose/src/androidTest/java/androidx/lifecycle/viewmodel/compose/ViewModelInAppCompatActivityTest.kt b/lifecycle/lifecycle-viewmodel-compose/src/androidTest/java/androidx/lifecycle/viewmodel/compose/ViewModelInAppCompatActivityTest.kt
index 7681326..e5ee149 100644
--- a/lifecycle/lifecycle-viewmodel-compose/src/androidTest/java/androidx/lifecycle/viewmodel/compose/ViewModelInAppCompatActivityTest.kt
+++ b/lifecycle/lifecycle-viewmodel-compose/src/androidTest/java/androidx/lifecycle/viewmodel/compose/ViewModelInAppCompatActivityTest.kt
@@ -23,14 +23,14 @@
import androidx.lifecycle.LifecycleOwner
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/lifecycle/lifecycle-viewmodel-compose/src/androidTest/java/androidx/lifecycle/viewmodel/compose/ViewModelInComponentActivityTest.kt b/lifecycle/lifecycle-viewmodel-compose/src/androidTest/java/androidx/lifecycle/viewmodel/compose/ViewModelInComponentActivityTest.kt
index 594a2e2..50f06f9 100644
--- a/lifecycle/lifecycle-viewmodel-compose/src/androidTest/java/androidx/lifecycle/viewmodel/compose/ViewModelInComponentActivityTest.kt
+++ b/lifecycle/lifecycle-viewmodel-compose/src/androidTest/java/androidx/lifecycle/viewmodel/compose/ViewModelInComponentActivityTest.kt
@@ -24,14 +24,14 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.FlakyTest
import androidx.test.filters.MediumTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/lifecycle/lifecycle-viewmodel-compose/src/androidTest/java/androidx/lifecycle/viewmodel/compose/ViewModelInFragmentTest.kt b/lifecycle/lifecycle-viewmodel-compose/src/androidTest/java/androidx/lifecycle/viewmodel/compose/ViewModelInFragmentTest.kt
index a6ba005..cb4e6a5 100644
--- a/lifecycle/lifecycle-viewmodel-compose/src/androidTest/java/androidx/lifecycle/viewmodel/compose/ViewModelInFragmentTest.kt
+++ b/lifecycle/lifecycle-viewmodel-compose/src/androidTest/java/androidx/lifecycle/viewmodel/compose/ViewModelInFragmentTest.kt
@@ -25,14 +25,14 @@
import androidx.fragment.app.FragmentContainerView
import androidx.lifecycle.ViewModel
import androidx.test.filters.MediumTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@MediumTest
@RunWith(Parameterized::class)
diff --git a/lifecycle/lifecycle-viewmodel-compose/src/main/java/androidx/lifecycle/viewmodel/compose/SavedStateHandleSaver.kt b/lifecycle/lifecycle-viewmodel-compose/src/main/java/androidx/lifecycle/viewmodel/compose/SavedStateHandleSaver.kt
index 8c70d69..9620449 100644
--- a/lifecycle/lifecycle-viewmodel-compose/src/main/java/androidx/lifecycle/viewmodel/compose/SavedStateHandleSaver.kt
+++ b/lifecycle/lifecycle-viewmodel-compose/src/main/java/androidx/lifecycle/viewmodel/compose/SavedStateHandleSaver.kt
@@ -21,9 +21,9 @@
import androidx.compose.runtime.SnapshotMutationPolicy
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.saveable.autoSaver
import androidx.compose.runtime.saveable.Saver
import androidx.compose.runtime.saveable.SaverScope
+import androidx.compose.runtime.saveable.autoSaver
import androidx.compose.runtime.setValue
import androidx.compose.runtime.snapshots.SnapshotMutableState
import androidx.core.os.bundleOf
diff --git a/lifecycle/lifecycle-viewmodel-ktx/build.gradle b/lifecycle/lifecycle-viewmodel-ktx/build.gradle
index efaa638..dfb7838 100644
--- a/lifecycle/lifecycle-viewmodel-ktx/build.gradle
+++ b/lifecycle/lifecycle-viewmodel-ktx/build.gradle
@@ -35,7 +35,7 @@
}
androidx {
- name = "Android Lifecycle ViewModel Kotlin Extensions"
+ name = "Lifecycle ViewModel Kotlin Extensions"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "Kotlin extensions for 'viewmodel' artifact"
diff --git a/lifecycle/lifecycle-viewmodel-ktx/src/main/java/androidx/lifecycle/ViewModel.kt b/lifecycle/lifecycle-viewmodel-ktx/src/main/java/androidx/lifecycle/ViewModel.kt
index 2078226..ffc77f9 100644
--- a/lifecycle/lifecycle-viewmodel-ktx/src/main/java/androidx/lifecycle/ViewModel.kt
+++ b/lifecycle/lifecycle-viewmodel-ktx/src/main/java/androidx/lifecycle/ViewModel.kt
@@ -16,12 +16,12 @@
package androidx.lifecycle
+import java.io.Closeable
+import kotlin.coroutines.CoroutineContext
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.cancel
-import java.io.Closeable
-import kotlin.coroutines.CoroutineContext
private const val JOB_KEY = "androidx.lifecycle.ViewModelCoroutineScope.JOB_KEY"
diff --git a/lifecycle/lifecycle-viewmodel-savedstate/api/current.txt b/lifecycle/lifecycle-viewmodel-savedstate/api/current.txt
index 18f47c7..826cc1d 100644
--- a/lifecycle/lifecycle-viewmodel-savedstate/api/current.txt
+++ b/lifecycle/lifecycle-viewmodel-savedstate/api/current.txt
@@ -8,8 +8,8 @@
}
public final class SavedStateHandle {
- ctor public SavedStateHandle(java.util.Map<java.lang.String,?> initialState);
ctor public SavedStateHandle();
+ ctor public SavedStateHandle(java.util.Map<java.lang.String,?> initialState);
method @MainThread public void clearSavedStateProvider(String key);
method @MainThread public operator boolean contains(String key);
method @MainThread public operator <T> T? get(String key);
diff --git a/lifecycle/lifecycle-viewmodel-savedstate/api/public_plus_experimental_current.txt b/lifecycle/lifecycle-viewmodel-savedstate/api/public_plus_experimental_current.txt
index 18f47c7..826cc1d 100644
--- a/lifecycle/lifecycle-viewmodel-savedstate/api/public_plus_experimental_current.txt
+++ b/lifecycle/lifecycle-viewmodel-savedstate/api/public_plus_experimental_current.txt
@@ -8,8 +8,8 @@
}
public final class SavedStateHandle {
- ctor public SavedStateHandle(java.util.Map<java.lang.String,?> initialState);
ctor public SavedStateHandle();
+ ctor public SavedStateHandle(java.util.Map<java.lang.String,?> initialState);
method @MainThread public void clearSavedStateProvider(String key);
method @MainThread public operator boolean contains(String key);
method @MainThread public operator <T> T? get(String key);
diff --git a/lifecycle/lifecycle-viewmodel-savedstate/api/restricted_current.txt b/lifecycle/lifecycle-viewmodel-savedstate/api/restricted_current.txt
index 18f47c7..826cc1d 100644
--- a/lifecycle/lifecycle-viewmodel-savedstate/api/restricted_current.txt
+++ b/lifecycle/lifecycle-viewmodel-savedstate/api/restricted_current.txt
@@ -8,8 +8,8 @@
}
public final class SavedStateHandle {
- ctor public SavedStateHandle(java.util.Map<java.lang.String,?> initialState);
ctor public SavedStateHandle();
+ ctor public SavedStateHandle(java.util.Map<java.lang.String,?> initialState);
method @MainThread public void clearSavedStateProvider(String key);
method @MainThread public operator boolean contains(String key);
method @MainThread public operator <T> T? get(String key);
diff --git a/lifecycle/lifecycle-viewmodel-savedstate/build.gradle b/lifecycle/lifecycle-viewmodel-savedstate/build.gradle
index ec45470..c2144f0 100644
--- a/lifecycle/lifecycle-viewmodel-savedstate/build.gradle
+++ b/lifecycle/lifecycle-viewmodel-savedstate/build.gradle
@@ -51,7 +51,7 @@
}
androidx {
- name = "Android Lifecycle ViewModel with SavedState"
+ name = "Lifecycle ViewModel with SavedState"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "Android Lifecycle ViewModel"
diff --git a/lifecycle/lifecycle-viewmodel/api/current.txt b/lifecycle/lifecycle-viewmodel/api/current.txt
index f6e96bc..b271d9c 100644
--- a/lifecycle/lifecycle-viewmodel/api/current.txt
+++ b/lifecycle/lifecycle-viewmodel/api/current.txt
@@ -21,16 +21,16 @@
}
public final class ViewModelLazy<VM extends androidx.lifecycle.ViewModel> implements kotlin.Lazy<VM> {
- ctor public ViewModelLazy(kotlin.reflect.KClass<VM> viewModelClass, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStore> storeProducer, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory> factoryProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras> extrasProducer);
ctor public ViewModelLazy(kotlin.reflect.KClass<VM> viewModelClass, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStore> storeProducer, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory> factoryProducer);
+ ctor public ViewModelLazy(kotlin.reflect.KClass<VM> viewModelClass, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStore> storeProducer, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory> factoryProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras> extrasProducer);
method public VM getValue();
method public boolean isInitialized();
property public VM value;
}
public class ViewModelProvider {
- ctor public ViewModelProvider(androidx.lifecycle.ViewModelStore store, androidx.lifecycle.ViewModelProvider.Factory factory, optional androidx.lifecycle.viewmodel.CreationExtras defaultCreationExtras);
ctor public ViewModelProvider(androidx.lifecycle.ViewModelStore store, androidx.lifecycle.ViewModelProvider.Factory factory);
+ ctor public ViewModelProvider(androidx.lifecycle.ViewModelStore store, androidx.lifecycle.ViewModelProvider.Factory factory, optional androidx.lifecycle.viewmodel.CreationExtras defaultCreationExtras);
ctor public ViewModelProvider(androidx.lifecycle.ViewModelStoreOwner owner);
ctor public ViewModelProvider(androidx.lifecycle.ViewModelStoreOwner owner, androidx.lifecycle.ViewModelProvider.Factory factory);
method @MainThread public operator <T extends androidx.lifecycle.ViewModel> T get(Class<T> modelClass);
diff --git a/lifecycle/lifecycle-viewmodel/api/public_plus_experimental_current.txt b/lifecycle/lifecycle-viewmodel/api/public_plus_experimental_current.txt
index f6e96bc..b271d9c 100644
--- a/lifecycle/lifecycle-viewmodel/api/public_plus_experimental_current.txt
+++ b/lifecycle/lifecycle-viewmodel/api/public_plus_experimental_current.txt
@@ -21,16 +21,16 @@
}
public final class ViewModelLazy<VM extends androidx.lifecycle.ViewModel> implements kotlin.Lazy<VM> {
- ctor public ViewModelLazy(kotlin.reflect.KClass<VM> viewModelClass, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStore> storeProducer, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory> factoryProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras> extrasProducer);
ctor public ViewModelLazy(kotlin.reflect.KClass<VM> viewModelClass, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStore> storeProducer, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory> factoryProducer);
+ ctor public ViewModelLazy(kotlin.reflect.KClass<VM> viewModelClass, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStore> storeProducer, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory> factoryProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras> extrasProducer);
method public VM getValue();
method public boolean isInitialized();
property public VM value;
}
public class ViewModelProvider {
- ctor public ViewModelProvider(androidx.lifecycle.ViewModelStore store, androidx.lifecycle.ViewModelProvider.Factory factory, optional androidx.lifecycle.viewmodel.CreationExtras defaultCreationExtras);
ctor public ViewModelProvider(androidx.lifecycle.ViewModelStore store, androidx.lifecycle.ViewModelProvider.Factory factory);
+ ctor public ViewModelProvider(androidx.lifecycle.ViewModelStore store, androidx.lifecycle.ViewModelProvider.Factory factory, optional androidx.lifecycle.viewmodel.CreationExtras defaultCreationExtras);
ctor public ViewModelProvider(androidx.lifecycle.ViewModelStoreOwner owner);
ctor public ViewModelProvider(androidx.lifecycle.ViewModelStoreOwner owner, androidx.lifecycle.ViewModelProvider.Factory factory);
method @MainThread public operator <T extends androidx.lifecycle.ViewModel> T get(Class<T> modelClass);
diff --git a/lifecycle/lifecycle-viewmodel/api/restricted_current.txt b/lifecycle/lifecycle-viewmodel/api/restricted_current.txt
index f6e96bc..b271d9c 100644
--- a/lifecycle/lifecycle-viewmodel/api/restricted_current.txt
+++ b/lifecycle/lifecycle-viewmodel/api/restricted_current.txt
@@ -21,16 +21,16 @@
}
public final class ViewModelLazy<VM extends androidx.lifecycle.ViewModel> implements kotlin.Lazy<VM> {
- ctor public ViewModelLazy(kotlin.reflect.KClass<VM> viewModelClass, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStore> storeProducer, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory> factoryProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras> extrasProducer);
ctor public ViewModelLazy(kotlin.reflect.KClass<VM> viewModelClass, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStore> storeProducer, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory> factoryProducer);
+ ctor public ViewModelLazy(kotlin.reflect.KClass<VM> viewModelClass, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStore> storeProducer, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory> factoryProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras> extrasProducer);
method public VM getValue();
method public boolean isInitialized();
property public VM value;
}
public class ViewModelProvider {
- ctor public ViewModelProvider(androidx.lifecycle.ViewModelStore store, androidx.lifecycle.ViewModelProvider.Factory factory, optional androidx.lifecycle.viewmodel.CreationExtras defaultCreationExtras);
ctor public ViewModelProvider(androidx.lifecycle.ViewModelStore store, androidx.lifecycle.ViewModelProvider.Factory factory);
+ ctor public ViewModelProvider(androidx.lifecycle.ViewModelStore store, androidx.lifecycle.ViewModelProvider.Factory factory, optional androidx.lifecycle.viewmodel.CreationExtras defaultCreationExtras);
ctor public ViewModelProvider(androidx.lifecycle.ViewModelStoreOwner owner);
ctor public ViewModelProvider(androidx.lifecycle.ViewModelStoreOwner owner, androidx.lifecycle.ViewModelProvider.Factory factory);
method @MainThread public operator <T extends androidx.lifecycle.ViewModel> T get(Class<T> modelClass);
diff --git a/lifecycle/lifecycle-viewmodel/build.gradle b/lifecycle/lifecycle-viewmodel/build.gradle
index 125c988..4c2db52 100644
--- a/lifecycle/lifecycle-viewmodel/build.gradle
+++ b/lifecycle/lifecycle-viewmodel/build.gradle
@@ -48,7 +48,7 @@
}
androidx {
- name = "Android Lifecycle ViewModel"
+ name = "Lifecycle ViewModel"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2017"
description = "Android Lifecycle ViewModel"
diff --git a/lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/ViewModelProvider.kt b/lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/ViewModelProvider.kt
index ba62b11..7beaf03 100644
--- a/lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/ViewModelProvider.kt
+++ b/lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/ViewModelProvider.kt
@@ -22,9 +22,9 @@
import androidx.annotation.RestrictTo
import androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory.Companion.DEFAULT_KEY
import androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory.Companion.defaultFactory
-import androidx.lifecycle.viewmodel.CreationExtras.Key
import androidx.lifecycle.ViewModelProvider.NewInstanceFactory.Companion.VIEW_MODEL_KEY
import androidx.lifecycle.viewmodel.CreationExtras
+import androidx.lifecycle.viewmodel.CreationExtras.Key
import androidx.lifecycle.viewmodel.InitializerViewModelFactory
import androidx.lifecycle.viewmodel.MutableCreationExtras
import androidx.lifecycle.viewmodel.ViewModelInitializer
diff --git a/lint-checks/src/main/java/androidx/build/lint/AndroidXIssueRegistry.kt b/lint-checks/src/main/java/androidx/build/lint/AndroidXIssueRegistry.kt
index f05b834..9df77d7 100644
--- a/lint-checks/src/main/java/androidx/build/lint/AndroidXIssueRegistry.kt
+++ b/lint-checks/src/main/java/androidx/build/lint/AndroidXIssueRegistry.kt
@@ -71,10 +71,12 @@
IgnoreClassLevelDetector.ISSUE,
ExperimentalPropertyAnnotationDetector.ISSUE,
BanRestrictToTestsScope.ISSUE,
- UnstableAidlAnnotationDetector.ISSUE,
+ // AIDL check is temporarily disabled due to race conditions (b/280346978).
+ // UnstableAidlAnnotationDetector.ISSUE,
// MissingJvmDefaultWithCompatibilityDetector is intentionally left out of the
// registry, see comments on the class for more details.
BanVisibleForTestingParams.ISSUE,
+ PrereleaseSdkCoreDependencyDetector.ISSUE
)
}
}
diff --git a/lint-checks/src/main/java/androidx/build/lint/BanKeepAnnotation.kt b/lint-checks/src/main/java/androidx/build/lint/BanKeepAnnotation.kt
index 8bcfd3a..6c5d65d 100644
--- a/lint-checks/src/main/java/androidx/build/lint/BanKeepAnnotation.kt
+++ b/lint-checks/src/main/java/androidx/build/lint/BanKeepAnnotation.kt
@@ -19,7 +19,6 @@
package androidx.build.lint
import com.android.tools.lint.client.api.UElementHandler
-
import com.android.tools.lint.detector.api.Category
import com.android.tools.lint.detector.api.Detector
import com.android.tools.lint.detector.api.Implementation
diff --git a/lint-checks/src/main/java/androidx/build/lint/BanParcelableUsage.kt b/lint-checks/src/main/java/androidx/build/lint/BanParcelableUsage.kt
index ff4de6a..b2253c69 100644
--- a/lint-checks/src/main/java/androidx/build/lint/BanParcelableUsage.kt
+++ b/lint-checks/src/main/java/androidx/build/lint/BanParcelableUsage.kt
@@ -27,9 +27,9 @@
import com.android.tools.lint.detector.api.Scope
import com.android.tools.lint.detector.api.Severity
import com.intellij.psi.PsiModifier
+import java.util.Collections
import org.jetbrains.uast.UAnonymousClass
import org.jetbrains.uast.UClass
-import java.util.Collections
const val PARCELABLE_INTERFACE_CANONICAL_NAME = "android.os.Parcelable"
diff --git a/lint-checks/src/main/java/androidx/build/lint/MetadataTagInsideApplicationTagDetector.kt b/lint-checks/src/main/java/androidx/build/lint/MetadataTagInsideApplicationTagDetector.kt
index 3a13a9f..9bef39f 100644
--- a/lint-checks/src/main/java/androidx/build/lint/MetadataTagInsideApplicationTagDetector.kt
+++ b/lint-checks/src/main/java/androidx/build/lint/MetadataTagInsideApplicationTagDetector.kt
@@ -27,7 +27,6 @@
import com.android.tools.lint.detector.api.Severity
import com.android.tools.lint.detector.api.XmlContext
import com.android.xml.AndroidManifest.NODE_APPLICATION
-
import org.w3c.dom.Element
class MetadataTagInsideApplicationTagDetector : Detector(), Detector.XmlScanner {
diff --git a/lint-checks/src/main/java/androidx/build/lint/PrereleaseSdkCoreDependencyDetector.kt b/lint-checks/src/main/java/androidx/build/lint/PrereleaseSdkCoreDependencyDetector.kt
new file mode 100644
index 0000000..fc50974
--- /dev/null
+++ b/lint-checks/src/main/java/androidx/build/lint/PrereleaseSdkCoreDependencyDetector.kt
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.build.lint
+
+import com.android.tools.lint.client.api.UElementHandler
+import com.android.tools.lint.detector.api.Category
+import com.android.tools.lint.detector.api.Detector
+import com.android.tools.lint.detector.api.Implementation
+import com.android.tools.lint.detector.api.Incident
+import com.android.tools.lint.detector.api.Issue
+import com.android.tools.lint.detector.api.JavaContext
+import com.android.tools.lint.detector.api.Scope
+import com.android.tools.lint.detector.api.Severity
+import com.android.tools.lint.model.LintModelAndroidLibrary
+import com.android.tools.lint.model.LintModelLibrary
+import org.jetbrains.uast.UCallExpression
+
+class PrereleaseSdkCoreDependencyDetector : Detector(), Detector.UastScanner {
+
+ override fun getApplicableUastTypes() = listOf(UCallExpression::class.java)
+
+ override fun createUastHandler(context: JavaContext): UElementHandler {
+ return CallChecker(context)
+ }
+
+ private inner class CallChecker(val context: JavaContext) : UElementHandler() {
+ override fun visitCallExpression(node: UCallExpression) {
+ // Check that this is a prerelease SDK check
+ val method = node.resolve() ?: return
+ val containingClass = method.containingClass ?: return
+ if (containingClass.qualifiedName != BUILD_COMPAT) return
+
+ if (method.annotations.none { it.hasQualifiedName(PRERELEASE_SDK_CHECK) }) return
+
+ // Check if the project is using a versioned dependency on core
+ val dependencies = context.project.buildVariant.mainArtifact.dependencies.getAll()
+ if (dependencies.any { it.isInvalidCoreDependency() }) {
+ val incident = Incident(context)
+ .issue(ISSUE)
+ .location(context.getLocation(node))
+ .message(
+ "Prelease SDK check ${method.name} cannot be called as this project has " +
+ "a versioned dependency on androidx.core:core"
+ )
+ .scope(node)
+ context.report(incident)
+ }
+ }
+
+ /**
+ * Checks whether this library is a dependency on a specific version of androidx.core:core
+ */
+ private fun LintModelLibrary.isInvalidCoreDependency(): Boolean {
+ val library = this as? LintModelAndroidLibrary ?: return false
+ val coordinates = library.resolvedCoordinates
+ return coordinates.artifactId == "core" &&
+ coordinates.groupId == "androidx.core" &&
+ coordinates.version != "unspecified"
+ }
+ }
+
+ companion object {
+ val ISSUE = Issue.create(
+ "PrereleaseSdkCoreDependency",
+ "Prerelease SDK checks can only be used by projects with a TOT dependency on " +
+ "androidx.core:core",
+ """
+ The implementation of a prerelease SDK check will change when the SDK is finalized,
+ so projects using these checks must have a tip-of-tree dependency on core to ensure
+ the check stays up-to-date.
+
+ This error means that the `androidx.core:core` dependency in this project's
+ `build.gradle` file should be replaced with `implementation(project(":core:core"))`
+
+ See go/androidx-api-guidelines#compat-sdk for more information.
+ """,
+ Category.CORRECTNESS, 5, Severity.ERROR,
+ Implementation(
+ PrereleaseSdkCoreDependencyDetector::class.java,
+ Scope.JAVA_FILE_SCOPE
+ )
+ )
+
+ private const val BUILD_COMPAT = "androidx.core.os.BuildCompat"
+ private const val PRERELEASE_SDK_CHECK = "$BUILD_COMPAT.PrereleaseSdkCheck"
+ }
+}
diff --git a/lint-checks/src/main/java/androidx/build/lint/TargetApiAnnotationUsageDetector.kt b/lint-checks/src/main/java/androidx/build/lint/TargetApiAnnotationUsageDetector.kt
index e96d19d9..048054d 100644
--- a/lint-checks/src/main/java/androidx/build/lint/TargetApiAnnotationUsageDetector.kt
+++ b/lint-checks/src/main/java/androidx/build/lint/TargetApiAnnotationUsageDetector.kt
@@ -19,7 +19,6 @@
package androidx.build.lint
import com.android.tools.lint.client.api.UElementHandler
-
import com.android.tools.lint.detector.api.Category
import com.android.tools.lint.detector.api.Detector
import com.android.tools.lint.detector.api.Implementation
diff --git a/lint-checks/src/main/java/androidx/build/lint/TestSizeAnnotationEnforcer.kt b/lint-checks/src/main/java/androidx/build/lint/TestSizeAnnotationEnforcer.kt
index a6b34e6..0777c76 100644
--- a/lint-checks/src/main/java/androidx/build/lint/TestSizeAnnotationEnforcer.kt
+++ b/lint-checks/src/main/java/androidx/build/lint/TestSizeAnnotationEnforcer.kt
@@ -28,11 +28,11 @@
import com.android.tools.lint.detector.api.Scope
import com.android.tools.lint.detector.api.Severity
import com.android.tools.lint.detector.api.SourceCodeScanner
+import java.util.Collections
+import java.util.EnumSet
import org.jetbrains.uast.UClass
import org.jetbrains.uast.UClassLiteralExpression
import org.jetbrains.uast.UElement
-import java.util.Collections
-import java.util.EnumSet
/**
* Lint check to enforce that every device side test (tests in the androidTest dir) has correct
diff --git a/lint-checks/src/test/java/androidx/build/lint/ClassVerificationFailureDetectorTest.kt b/lint-checks/src/test/java/androidx/build/lint/ClassVerificationFailureDetectorTest.kt
index 706cd32..781c1fd5 100644
--- a/lint-checks/src/test/java/androidx/build/lint/ClassVerificationFailureDetectorTest.kt
+++ b/lint-checks/src/test/java/androidx/build/lint/ClassVerificationFailureDetectorTest.kt
@@ -19,8 +19,8 @@
package androidx.build.lint
import androidx.build.lint.Stubs.Companion.DoNotInline
-import androidx.build.lint.Stubs.Companion.RequiresApi
import androidx.build.lint.Stubs.Companion.IntRange
+import androidx.build.lint.Stubs.Companion.RequiresApi
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
diff --git a/lint-checks/src/test/java/androidx/build/lint/PrereleaseSdkCoreDependencyDetectorTest.kt b/lint-checks/src/test/java/androidx/build/lint/PrereleaseSdkCoreDependencyDetectorTest.kt
new file mode 100644
index 0000000..b6d3422
--- /dev/null
+++ b/lint-checks/src/test/java/androidx/build/lint/PrereleaseSdkCoreDependencyDetectorTest.kt
@@ -0,0 +1,147 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.build.lint
+
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@RunWith(JUnit4::class)
+class PrereleaseSdkCoreDependencyDetectorTest : AbstractLintDetectorTest(
+ useDetector = PrereleaseSdkCoreDependencyDetector(),
+ useIssues = listOf(PrereleaseSdkCoreDependencyDetector.ISSUE),
+ stubs = arrayOf(
+ Stubs.BuildCompat,
+ Stubs.ChecksSdkIntAtLeast,
+ Stubs.JetpackRequiresOptIn,
+ Stubs.RestrictTo
+ )
+) {
+ @Test
+ fun `Versioned dependency with isAtLeastU is flagged`() {
+ val input = arrayOf(
+ kotlin(
+ """
+ package androidx.test
+
+ import androidx.core.os.BuildCompat
+
+ fun callIsAtLeastU() {
+ return BuildCompat.isAtLeastU()
+ }
+ """.trimIndent()
+ ),
+ gradle("""
+ dependencies {
+ implementation("androidx.core:core:1.9.0")
+ }
+ """.trimIndent()),
+ )
+
+ /* ktlint-disable max-line-length */
+ val expected = """
+ src/main/kotlin/androidx/test/test.kt:6: Error: Prelease SDK check isAtLeastU cannot be called as this project has a versioned dependency on androidx.core:core [PrereleaseSdkCoreDependency]
+ return BuildCompat.isAtLeastU()
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+ 1 errors, 0 warnings
+ """.trimIndent()
+ /* ktlint-enable max-line-length */
+
+ check(*input).expect(expected)
+ }
+
+ @Test
+ fun `Tip-of-tree dependency with isAtLeastU is not flagged`() {
+ val input = arrayOf(
+ kotlin(
+ """
+ package androidx.test
+
+ import androidx.core.os.BuildCompat
+
+ fun callIsAtLeastU() {
+ return BuildCompat.isAtLeastU()
+ }
+ """.trimIndent()
+ ),
+ gradle("""
+ dependencies {
+ implementation(project(":core:core"))
+ }
+ """.trimIndent()),
+ )
+
+ check(*input).expectClean()
+ }
+
+ @Test
+ fun `Versioned dependency with isAtLeastSv2 is flagged`() {
+ val input = arrayOf(
+ kotlin(
+ """
+ package androidx.test
+
+ import androidx.core.os.BuildCompat
+
+ fun callIsAtLeastSv2() {
+ return BuildCompat.isAtLeastSv2()
+ }
+ """.trimIndent()
+ ),
+ gradle("""
+ dependencies {
+ implementation("androidx.core:core:1.9.0")
+ }
+ """.trimIndent()),
+ )
+
+ /* ktlint-disable max-line-length */
+ val expected = """
+ src/main/kotlin/androidx/test/test.kt:6: Error: Prelease SDK check isAtLeastSv2 cannot be called as this project has a versioned dependency on androidx.core:core [PrereleaseSdkCoreDependency]
+ return BuildCompat.isAtLeastSv2()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ 1 errors, 0 warnings
+ """.trimIndent()
+ /* ktlint-enable max-line-length */
+
+ check(*input).expect(expected)
+ }
+
+ @Test
+ fun `Versioned dependency with non-annotated isAtLeastN is not flagged`() {
+ val input = arrayOf(
+ kotlin(
+ """
+ package androidx.test
+
+ import androidx.core.os.BuildCompat
+
+ fun callIsAtLeastN() {
+ return BuildCompat.isAtLeastN()
+ }
+ """.trimIndent()
+ ),
+ gradle("""
+ dependencies {
+ implementation("androidx.core:core:1.9.0")
+ }
+ """.trimIndent()),
+ )
+
+ check(*input).expectClean()
+ }
+}
diff --git a/lint-checks/src/test/java/androidx/build/lint/Stubs.kt b/lint-checks/src/test/java/androidx/build/lint/Stubs.kt
index c4aad8a..108e776 100644
--- a/lint-checks/src/test/java/androidx/build/lint/Stubs.kt
+++ b/lint-checks/src/test/java/androidx/build/lint/Stubs.kt
@@ -386,6 +386,59 @@
}
""".trimIndent()
)
+
+ /**
+ * Contains only a few of the isAtLeastX implementations from BuildCompat for testing
+ */
+ val BuildCompat: TestFile = LintDetectorTest.java("""
+package androidx.core.os;
+
+import android.os.Build;
+import android.os.Build.VERSION;
+
+import androidx.annotation.ChecksSdkIntAtLeast;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresOptIn;
+import androidx.annotation.RestrictTo;
+
+import java.util.Locale;
+
+public class BuildCompat {
+ private BuildCompat() {}
+
+ @RestrictTo(RestrictTo.Scope.TESTS)
+ protected static boolean isAtLeastPreReleaseCodename(@NonNull String codename, @NonNull String buildCodename) {
+ if ("REL".equals(buildCodename)) {
+ return false;
+ }
+ final String buildCodenameUpper = buildCodename.toUpperCase(Locale.ROOT);
+ final String codenameUpper = codename.toUpperCase(Locale.ROOT);
+ return buildCodenameUpper.compareTo(codenameUpper) >= 0;
+ }
+
+ @ChecksSdkIntAtLeast(api = Build.VERSION_CODES.N)
+ @Deprecated
+ public static boolean isAtLeastN() {
+ return VERSION.SDK_INT >= 24;
+ }
+
+ @PrereleaseSdkCheck
+ @ChecksSdkIntAtLeast(api = 32, codename = "Sv2")
+ @Deprecated
+ public static boolean isAtLeastSv2() {
+ return VERSION.SDK_INT >= 32 || (VERSION.SDK_INT >= 31 && isAtLeastPreReleaseCodename("Sv2", VERSION.CODENAME));
+ }
+
+ @PrereleaseSdkCheck
+ @ChecksSdkIntAtLeast(codename = "UpsideDownCake")
+ public static boolean isAtLeastU() {
+ return VERSION.SDK_INT >= 33 && isAtLeastPreReleaseCodename("UpsideDownCake", VERSION.CODENAME);
+ }
+
+ @RequiresOptIn
+ public @interface PrereleaseSdkCheck { }
+}
+ """.trimIndent())
/* ktlint-enable max-line-length */
}
}
diff --git a/loader/loader-ktx/src/androidTest/java/androidx/loader/app/LoaderManagerTest.kt b/loader/loader-ktx/src/androidTest/java/androidx/loader/app/LoaderManagerTest.kt
index 809d8b8..e83c552 100644
--- a/loader/loader-ktx/src/androidTest/java/androidx/loader/app/LoaderManagerTest.kt
+++ b/loader/loader-ktx/src/androidTest/java/androidx/loader/app/LoaderManagerTest.kt
@@ -24,12 +24,12 @@
import androidx.test.filters.LargeTest
import androidx.test.platform.app.InstrumentationRegistry
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mockito.mock
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@RunWith(AndroidJUnit4::class)
@LargeTest
diff --git a/loader/loader/build.gradle b/loader/loader/build.gradle
index e9ff426..5b46db6 100644
--- a/loader/loader/build.gradle
+++ b/loader/loader/build.gradle
@@ -23,7 +23,7 @@
}
androidx {
- name = "Android Support Library loader"
+ name = "loader"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2011"
description = "The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren\'t a part of the framework APIs. Compatible on devices running API 14 or later."
diff --git a/media/media/api/current.txt b/media/media/api/current.txt
index 3e65d18..88dc4db3 100644
--- a/media/media/api/current.txt
+++ b/media/media/api/current.txt
@@ -13,8 +13,8 @@
method public boolean isConnected();
method public void search(String, android.os.Bundle!, android.support.v4.media.MediaBrowserCompat.SearchCallback);
method public void sendCustomAction(String, android.os.Bundle!, android.support.v4.media.MediaBrowserCompat.CustomActionCallback?);
- method public void subscribe(String, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
method public void subscribe(String, android.os.Bundle, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
+ method public void subscribe(String, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
method public void unsubscribe(String);
method public void unsubscribe(String, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
field public static final String CUSTOM_ACTION_DOWNLOAD = "android.support.v4.media.action.DOWNLOAD";
@@ -215,8 +215,8 @@
method public boolean dispatchMediaButtonEvent(android.view.KeyEvent!);
method public android.os.Bundle! getExtras();
method public long getFlags();
- method public static android.support.v4.media.session.MediaControllerCompat! getMediaController(android.app.Activity);
method public Object! getMediaController();
+ method public static android.support.v4.media.session.MediaControllerCompat! getMediaController(android.app.Activity);
method public android.support.v4.media.MediaMetadataCompat! getMetadata();
method public String! getPackageName();
method public android.support.v4.media.session.MediaControllerCompat.PlaybackInfo! getPlaybackInfo();
@@ -403,8 +403,8 @@
}
public class ParcelableVolumeInfo implements android.os.Parcelable {
- ctor public ParcelableVolumeInfo(int, int, int, int, int);
ctor public ParcelableVolumeInfo(android.os.Parcel!);
+ ctor public ParcelableVolumeInfo(int, int, int, int, int);
method public int describeContents();
method public void writeToParcel(android.os.Parcel!, int);
field public static final android.os.Parcelable.Creator<android.support.v4.media.session.ParcelableVolumeInfo!>! CREATOR;
@@ -495,14 +495,14 @@
public static final class PlaybackStateCompat.Builder {
ctor public PlaybackStateCompat.Builder();
ctor public PlaybackStateCompat.Builder(android.support.v4.media.session.PlaybackStateCompat!);
- method public android.support.v4.media.session.PlaybackStateCompat.Builder! addCustomAction(String!, String!, int);
method public android.support.v4.media.session.PlaybackStateCompat.Builder! addCustomAction(android.support.v4.media.session.PlaybackStateCompat.CustomAction!);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder! addCustomAction(String!, String!, int);
method public android.support.v4.media.session.PlaybackStateCompat! build();
method public android.support.v4.media.session.PlaybackStateCompat.Builder! setActions(long);
method public android.support.v4.media.session.PlaybackStateCompat.Builder! setActiveQueueItemId(long);
method public android.support.v4.media.session.PlaybackStateCompat.Builder! setBufferedPosition(long);
- method @Deprecated public android.support.v4.media.session.PlaybackStateCompat.Builder! setErrorMessage(CharSequence!);
method public android.support.v4.media.session.PlaybackStateCompat.Builder! setErrorMessage(int, CharSequence!);
+ method @Deprecated public android.support.v4.media.session.PlaybackStateCompat.Builder! setErrorMessage(CharSequence!);
method public android.support.v4.media.session.PlaybackStateCompat.Builder! setExtras(android.os.Bundle!);
method public android.support.v4.media.session.PlaybackStateCompat.Builder! setState(int, long, float);
method public android.support.v4.media.session.PlaybackStateCompat.Builder! setState(int, long, float, long);
@@ -582,8 +582,8 @@
}
public static final class AudioFocusRequestCompat.Builder {
- ctor public AudioFocusRequestCompat.Builder(int);
ctor public AudioFocusRequestCompat.Builder(androidx.media.AudioFocusRequestCompat);
+ ctor public AudioFocusRequestCompat.Builder(int);
method public androidx.media.AudioFocusRequestCompat! build();
method public androidx.media.AudioFocusRequestCompat.Builder setAudioAttributes(androidx.media.AudioAttributesCompat);
method public androidx.media.AudioFocusRequestCompat.Builder setFocusGain(int);
@@ -700,8 +700,8 @@
public class MediaButtonReceiver extends android.content.BroadcastReceiver {
ctor public MediaButtonReceiver();
- method public static android.app.PendingIntent! buildMediaButtonPendingIntent(android.content.Context!, long);
method public static android.app.PendingIntent! buildMediaButtonPendingIntent(android.content.Context!, android.content.ComponentName!, long);
+ method public static android.app.PendingIntent! buildMediaButtonPendingIntent(android.content.Context!, long);
method public static android.view.KeyEvent! handleIntent(android.support.v4.media.session.MediaSessionCompat!, android.content.Intent!);
method @RequiresApi(31) protected void onForegroundServiceStartNotAllowedException(android.content.Intent, android.app.ForegroundServiceStartNotAllowedException);
method public void onReceive(android.content.Context!, android.content.Intent!);
diff --git a/media/media/api/public_plus_experimental_current.txt b/media/media/api/public_plus_experimental_current.txt
index 3e65d18..88dc4db3 100644
--- a/media/media/api/public_plus_experimental_current.txt
+++ b/media/media/api/public_plus_experimental_current.txt
@@ -13,8 +13,8 @@
method public boolean isConnected();
method public void search(String, android.os.Bundle!, android.support.v4.media.MediaBrowserCompat.SearchCallback);
method public void sendCustomAction(String, android.os.Bundle!, android.support.v4.media.MediaBrowserCompat.CustomActionCallback?);
- method public void subscribe(String, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
method public void subscribe(String, android.os.Bundle, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
+ method public void subscribe(String, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
method public void unsubscribe(String);
method public void unsubscribe(String, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
field public static final String CUSTOM_ACTION_DOWNLOAD = "android.support.v4.media.action.DOWNLOAD";
@@ -215,8 +215,8 @@
method public boolean dispatchMediaButtonEvent(android.view.KeyEvent!);
method public android.os.Bundle! getExtras();
method public long getFlags();
- method public static android.support.v4.media.session.MediaControllerCompat! getMediaController(android.app.Activity);
method public Object! getMediaController();
+ method public static android.support.v4.media.session.MediaControllerCompat! getMediaController(android.app.Activity);
method public android.support.v4.media.MediaMetadataCompat! getMetadata();
method public String! getPackageName();
method public android.support.v4.media.session.MediaControllerCompat.PlaybackInfo! getPlaybackInfo();
@@ -403,8 +403,8 @@
}
public class ParcelableVolumeInfo implements android.os.Parcelable {
- ctor public ParcelableVolumeInfo(int, int, int, int, int);
ctor public ParcelableVolumeInfo(android.os.Parcel!);
+ ctor public ParcelableVolumeInfo(int, int, int, int, int);
method public int describeContents();
method public void writeToParcel(android.os.Parcel!, int);
field public static final android.os.Parcelable.Creator<android.support.v4.media.session.ParcelableVolumeInfo!>! CREATOR;
@@ -495,14 +495,14 @@
public static final class PlaybackStateCompat.Builder {
ctor public PlaybackStateCompat.Builder();
ctor public PlaybackStateCompat.Builder(android.support.v4.media.session.PlaybackStateCompat!);
- method public android.support.v4.media.session.PlaybackStateCompat.Builder! addCustomAction(String!, String!, int);
method public android.support.v4.media.session.PlaybackStateCompat.Builder! addCustomAction(android.support.v4.media.session.PlaybackStateCompat.CustomAction!);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder! addCustomAction(String!, String!, int);
method public android.support.v4.media.session.PlaybackStateCompat! build();
method public android.support.v4.media.session.PlaybackStateCompat.Builder! setActions(long);
method public android.support.v4.media.session.PlaybackStateCompat.Builder! setActiveQueueItemId(long);
method public android.support.v4.media.session.PlaybackStateCompat.Builder! setBufferedPosition(long);
- method @Deprecated public android.support.v4.media.session.PlaybackStateCompat.Builder! setErrorMessage(CharSequence!);
method public android.support.v4.media.session.PlaybackStateCompat.Builder! setErrorMessage(int, CharSequence!);
+ method @Deprecated public android.support.v4.media.session.PlaybackStateCompat.Builder! setErrorMessage(CharSequence!);
method public android.support.v4.media.session.PlaybackStateCompat.Builder! setExtras(android.os.Bundle!);
method public android.support.v4.media.session.PlaybackStateCompat.Builder! setState(int, long, float);
method public android.support.v4.media.session.PlaybackStateCompat.Builder! setState(int, long, float, long);
@@ -582,8 +582,8 @@
}
public static final class AudioFocusRequestCompat.Builder {
- ctor public AudioFocusRequestCompat.Builder(int);
ctor public AudioFocusRequestCompat.Builder(androidx.media.AudioFocusRequestCompat);
+ ctor public AudioFocusRequestCompat.Builder(int);
method public androidx.media.AudioFocusRequestCompat! build();
method public androidx.media.AudioFocusRequestCompat.Builder setAudioAttributes(androidx.media.AudioAttributesCompat);
method public androidx.media.AudioFocusRequestCompat.Builder setFocusGain(int);
@@ -700,8 +700,8 @@
public class MediaButtonReceiver extends android.content.BroadcastReceiver {
ctor public MediaButtonReceiver();
- method public static android.app.PendingIntent! buildMediaButtonPendingIntent(android.content.Context!, long);
method public static android.app.PendingIntent! buildMediaButtonPendingIntent(android.content.Context!, android.content.ComponentName!, long);
+ method public static android.app.PendingIntent! buildMediaButtonPendingIntent(android.content.Context!, long);
method public static android.view.KeyEvent! handleIntent(android.support.v4.media.session.MediaSessionCompat!, android.content.Intent!);
method @RequiresApi(31) protected void onForegroundServiceStartNotAllowedException(android.content.Intent, android.app.ForegroundServiceStartNotAllowedException);
method public void onReceive(android.content.Context!, android.content.Intent!);
diff --git a/media/media/api/restricted_current.txt b/media/media/api/restricted_current.txt
index 35c24b8..a40b59b 100644
--- a/media/media/api/restricted_current.txt
+++ b/media/media/api/restricted_current.txt
@@ -14,8 +14,8 @@
method public boolean isConnected();
method public void search(String, android.os.Bundle!, android.support.v4.media.MediaBrowserCompat.SearchCallback);
method public void sendCustomAction(String, android.os.Bundle!, android.support.v4.media.MediaBrowserCompat.CustomActionCallback?);
- method public void subscribe(String, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
method public void subscribe(String, android.os.Bundle, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
+ method public void subscribe(String, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
method public void unsubscribe(String);
method public void unsubscribe(String, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
field public static final String CUSTOM_ACTION_DOWNLOAD = "android.support.v4.media.action.DOWNLOAD";
@@ -219,8 +219,8 @@
method public boolean dispatchMediaButtonEvent(android.view.KeyEvent!);
method public android.os.Bundle! getExtras();
method public long getFlags();
- method public static android.support.v4.media.session.MediaControllerCompat! getMediaController(android.app.Activity);
method public Object! getMediaController();
+ method public static android.support.v4.media.session.MediaControllerCompat! getMediaController(android.app.Activity);
method public android.support.v4.media.MediaMetadataCompat! getMetadata();
method public String! getPackageName();
method public android.support.v4.media.session.MediaControllerCompat.PlaybackInfo! getPlaybackInfo();
@@ -419,8 +419,8 @@
}
public class ParcelableVolumeInfo implements android.os.Parcelable {
- ctor public ParcelableVolumeInfo(int, int, int, int, int);
ctor public ParcelableVolumeInfo(android.os.Parcel!);
+ ctor public ParcelableVolumeInfo(int, int, int, int, int);
method public int describeContents();
method public void writeToParcel(android.os.Parcel!, int);
field public static final android.os.Parcelable.Creator<android.support.v4.media.session.ParcelableVolumeInfo!>! CREATOR;
@@ -515,14 +515,14 @@
public static final class PlaybackStateCompat.Builder {
ctor public PlaybackStateCompat.Builder();
ctor public PlaybackStateCompat.Builder(android.support.v4.media.session.PlaybackStateCompat!);
- method public android.support.v4.media.session.PlaybackStateCompat.Builder! addCustomAction(String!, String!, int);
method public android.support.v4.media.session.PlaybackStateCompat.Builder! addCustomAction(android.support.v4.media.session.PlaybackStateCompat.CustomAction!);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder! addCustomAction(String!, String!, int);
method public android.support.v4.media.session.PlaybackStateCompat! build();
method public android.support.v4.media.session.PlaybackStateCompat.Builder! setActions(@android.support.v4.media.session.PlaybackStateCompat.Actions long);
method public android.support.v4.media.session.PlaybackStateCompat.Builder! setActiveQueueItemId(long);
method public android.support.v4.media.session.PlaybackStateCompat.Builder! setBufferedPosition(long);
- method @Deprecated public android.support.v4.media.session.PlaybackStateCompat.Builder! setErrorMessage(CharSequence!);
method public android.support.v4.media.session.PlaybackStateCompat.Builder! setErrorMessage(int, CharSequence!);
+ method @Deprecated public android.support.v4.media.session.PlaybackStateCompat.Builder! setErrorMessage(CharSequence!);
method public android.support.v4.media.session.PlaybackStateCompat.Builder! setExtras(android.os.Bundle!);
method public android.support.v4.media.session.PlaybackStateCompat.Builder! setState(@android.support.v4.media.session.PlaybackStateCompat.State int, long, float);
method public android.support.v4.media.session.PlaybackStateCompat.Builder! setState(@android.support.v4.media.session.PlaybackStateCompat.State int, long, float, long);
@@ -611,8 +611,8 @@
}
public static final class AudioFocusRequestCompat.Builder {
- ctor public AudioFocusRequestCompat.Builder(int);
ctor public AudioFocusRequestCompat.Builder(androidx.media.AudioFocusRequestCompat);
+ ctor public AudioFocusRequestCompat.Builder(int);
method public androidx.media.AudioFocusRequestCompat! build();
method public androidx.media.AudioFocusRequestCompat.Builder setAudioAttributes(androidx.media.AudioAttributesCompat);
method public androidx.media.AudioFocusRequestCompat.Builder setFocusGain(int);
@@ -640,9 +640,9 @@
method public final android.os.Bundle! getBrowserRootHints();
method public final androidx.media.MediaSessionManager.RemoteUserInfo getCurrentBrowserInfo();
method public android.support.v4.media.session.MediaSessionCompat.Token? getSessionToken();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void notifyChildrenChanged(androidx.media.MediaSessionManager.RemoteUserInfo, String, android.os.Bundle);
method public void notifyChildrenChanged(String);
method public void notifyChildrenChanged(String, android.os.Bundle);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void notifyChildrenChanged(androidx.media.MediaSessionManager.RemoteUserInfo, String, android.os.Bundle);
method public android.os.IBinder! onBind(android.content.Intent!);
method public void onCustomAction(String, android.os.Bundle!, androidx.media.MediaBrowserServiceCompat.Result<android.os.Bundle!>);
method public abstract androidx.media.MediaBrowserServiceCompat.BrowserRoot? onGetRoot(String, int, android.os.Bundle?);
@@ -738,8 +738,8 @@
public class MediaButtonReceiver extends android.content.BroadcastReceiver {
ctor public MediaButtonReceiver();
- method public static android.app.PendingIntent! buildMediaButtonPendingIntent(android.content.Context!, long);
method public static android.app.PendingIntent! buildMediaButtonPendingIntent(android.content.Context!, android.content.ComponentName!, long);
+ method public static android.app.PendingIntent! buildMediaButtonPendingIntent(android.content.Context!, long);
method public static android.view.KeyEvent! handleIntent(android.support.v4.media.session.MediaSessionCompat!, android.content.Intent!);
method @RequiresApi(31) protected void onForegroundServiceStartNotAllowedException(android.content.Intent, android.app.ForegroundServiceStartNotAllowedException);
method public void onReceive(android.content.Context!, android.content.Intent!);
diff --git a/media/media/build.gradle b/media/media/build.gradle
index 91a6177..783d543 100644
--- a/media/media/build.gradle
+++ b/media/media/build.gradle
@@ -51,7 +51,7 @@
}
androidx {
- name = "Android Support Library media compat"
+ name = "Media"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.MEDIA
inceptionYear = "2011"
diff --git a/media2/media2-common/build.gradle b/media2/media2-common/build.gradle
index 8c0570f..46c5577 100644
--- a/media2/media2-common/build.gradle
+++ b/media2/media2-common/build.gradle
@@ -62,7 +62,7 @@
}
androidx {
- name = "AndroidX media2 common library"
+ name = "Media2 Common"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "Media2 Common"
diff --git a/media2/media2-exoplayer/build.gradle b/media2/media2-exoplayer/build.gradle
index 291a8bc..c7873df 100644
--- a/media2/media2-exoplayer/build.gradle
+++ b/media2/media2-exoplayer/build.gradle
@@ -35,7 +35,7 @@
}
androidx {
- name = "Media2 repackaged ExoPlayer dependency"
+ name = "Media2 ExoPlayer"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "Repackaged ExoPlayer for 'media2' artifact"
diff --git a/media2/media2-player/build.gradle b/media2/media2-player/build.gradle
index c11da0f..ca8a752 100644
--- a/media2/media2-player/build.gradle
+++ b/media2/media2-player/build.gradle
@@ -49,7 +49,7 @@
}
androidx {
- name = "AndroidX media2 player library"
+ name = "Media2 Player"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "Media2 Player"
diff --git a/media2/media2-session/build.gradle b/media2/media2-session/build.gradle
index 8830b4f..66b502d 100644
--- a/media2/media2-session/build.gradle
+++ b/media2/media2-session/build.gradle
@@ -56,7 +56,7 @@
}
androidx {
- name = "AndroidX media2 session library"
+ name = "Media2 Session"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "Media2 Session"
diff --git a/media2/media2-widget/build.gradle b/media2/media2-widget/build.gradle
index d4452b3..ceee35f 100644
--- a/media2/media2-widget/build.gradle
+++ b/media2/media2-widget/build.gradle
@@ -56,7 +56,7 @@
}
androidx {
- name = "AndroidX media2 widget library"
+ name = "Media2 Widget"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "AndroidX Media2 Widget"
diff --git a/mediarouter/mediarouter-testing/build.gradle b/mediarouter/mediarouter-testing/build.gradle
index 5d2fbf6..0e39af2 100644
--- a/mediarouter/mediarouter-testing/build.gradle
+++ b/mediarouter/mediarouter-testing/build.gradle
@@ -27,7 +27,7 @@
}
androidx {
- name = "AndroidX MediaRouter Testing"
+ name = "MediaRouter Testing"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2021"
description = "Test utilities for AndroidX MediaRouter"
diff --git a/mediarouter/mediarouter/api/current.txt b/mediarouter/mediarouter/api/current.txt
index 8446474..fbe13f9 100644
--- a/mediarouter/mediarouter/api/current.txt
+++ b/mediarouter/mediarouter/api/current.txt
@@ -156,8 +156,8 @@
}
public static final class MediaItemStatus.Builder {
- ctor public MediaItemStatus.Builder(int);
ctor public MediaItemStatus.Builder(androidx.mediarouter.media.MediaItemStatus);
+ ctor public MediaItemStatus.Builder(int);
method public androidx.mediarouter.media.MediaItemStatus build();
method public androidx.mediarouter.media.MediaItemStatus.Builder setContentDuration(long);
method public androidx.mediarouter.media.MediaItemStatus.Builder setContentPosition(long);
@@ -192,8 +192,8 @@
}
public static final class MediaRouteDescriptor.Builder {
- ctor public MediaRouteDescriptor.Builder(String, String);
ctor public MediaRouteDescriptor.Builder(androidx.mediarouter.media.MediaRouteDescriptor);
+ ctor public MediaRouteDescriptor.Builder(String, String);
method public androidx.mediarouter.media.MediaRouteDescriptor.Builder addControlFilter(android.content.IntentFilter);
method public androidx.mediarouter.media.MediaRouteDescriptor.Builder addControlFilters(java.util.Collection<android.content.IntentFilter!>);
method public androidx.mediarouter.media.MediaRouteDescriptor build();
@@ -251,8 +251,8 @@
ctor public MediaRouteProvider.DynamicGroupRouteController();
method public String? getGroupableSelectionTitle();
method public String? getTransferableSectionTitle();
- method @Deprecated public final void notifyDynamicRoutesChanged(java.util.Collection<androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor!>);
method public final void notifyDynamicRoutesChanged(androidx.mediarouter.media.MediaRouteDescriptor, java.util.Collection<androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor!>);
+ method @Deprecated public final void notifyDynamicRoutesChanged(java.util.Collection<androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor!>);
method public abstract void onAddMemberRoute(String);
method public abstract void onRemoveMemberRoute(String);
method public abstract void onUpdateMemberRoutes(java.util.List<java.lang.String!>?);
@@ -488,8 +488,8 @@
}
public static final class MediaSessionStatus.Builder {
- ctor public MediaSessionStatus.Builder(int);
ctor public MediaSessionStatus.Builder(androidx.mediarouter.media.MediaSessionStatus);
+ ctor public MediaSessionStatus.Builder(int);
method public androidx.mediarouter.media.MediaSessionStatus build();
method public androidx.mediarouter.media.MediaSessionStatus.Builder setExtras(android.os.Bundle?);
method public androidx.mediarouter.media.MediaSessionStatus.Builder setQueuePaused(boolean);
diff --git a/mediarouter/mediarouter/api/public_plus_experimental_current.txt b/mediarouter/mediarouter/api/public_plus_experimental_current.txt
index 8446474..fbe13f9 100644
--- a/mediarouter/mediarouter/api/public_plus_experimental_current.txt
+++ b/mediarouter/mediarouter/api/public_plus_experimental_current.txt
@@ -156,8 +156,8 @@
}
public static final class MediaItemStatus.Builder {
- ctor public MediaItemStatus.Builder(int);
ctor public MediaItemStatus.Builder(androidx.mediarouter.media.MediaItemStatus);
+ ctor public MediaItemStatus.Builder(int);
method public androidx.mediarouter.media.MediaItemStatus build();
method public androidx.mediarouter.media.MediaItemStatus.Builder setContentDuration(long);
method public androidx.mediarouter.media.MediaItemStatus.Builder setContentPosition(long);
@@ -192,8 +192,8 @@
}
public static final class MediaRouteDescriptor.Builder {
- ctor public MediaRouteDescriptor.Builder(String, String);
ctor public MediaRouteDescriptor.Builder(androidx.mediarouter.media.MediaRouteDescriptor);
+ ctor public MediaRouteDescriptor.Builder(String, String);
method public androidx.mediarouter.media.MediaRouteDescriptor.Builder addControlFilter(android.content.IntentFilter);
method public androidx.mediarouter.media.MediaRouteDescriptor.Builder addControlFilters(java.util.Collection<android.content.IntentFilter!>);
method public androidx.mediarouter.media.MediaRouteDescriptor build();
@@ -251,8 +251,8 @@
ctor public MediaRouteProvider.DynamicGroupRouteController();
method public String? getGroupableSelectionTitle();
method public String? getTransferableSectionTitle();
- method @Deprecated public final void notifyDynamicRoutesChanged(java.util.Collection<androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor!>);
method public final void notifyDynamicRoutesChanged(androidx.mediarouter.media.MediaRouteDescriptor, java.util.Collection<androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor!>);
+ method @Deprecated public final void notifyDynamicRoutesChanged(java.util.Collection<androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor!>);
method public abstract void onAddMemberRoute(String);
method public abstract void onRemoveMemberRoute(String);
method public abstract void onUpdateMemberRoutes(java.util.List<java.lang.String!>?);
@@ -488,8 +488,8 @@
}
public static final class MediaSessionStatus.Builder {
- ctor public MediaSessionStatus.Builder(int);
ctor public MediaSessionStatus.Builder(androidx.mediarouter.media.MediaSessionStatus);
+ ctor public MediaSessionStatus.Builder(int);
method public androidx.mediarouter.media.MediaSessionStatus build();
method public androidx.mediarouter.media.MediaSessionStatus.Builder setExtras(android.os.Bundle?);
method public androidx.mediarouter.media.MediaSessionStatus.Builder setQueuePaused(boolean);
diff --git a/mediarouter/mediarouter/api/restricted_current.txt b/mediarouter/mediarouter/api/restricted_current.txt
index 8446474..fbe13f9 100644
--- a/mediarouter/mediarouter/api/restricted_current.txt
+++ b/mediarouter/mediarouter/api/restricted_current.txt
@@ -156,8 +156,8 @@
}
public static final class MediaItemStatus.Builder {
- ctor public MediaItemStatus.Builder(int);
ctor public MediaItemStatus.Builder(androidx.mediarouter.media.MediaItemStatus);
+ ctor public MediaItemStatus.Builder(int);
method public androidx.mediarouter.media.MediaItemStatus build();
method public androidx.mediarouter.media.MediaItemStatus.Builder setContentDuration(long);
method public androidx.mediarouter.media.MediaItemStatus.Builder setContentPosition(long);
@@ -192,8 +192,8 @@
}
public static final class MediaRouteDescriptor.Builder {
- ctor public MediaRouteDescriptor.Builder(String, String);
ctor public MediaRouteDescriptor.Builder(androidx.mediarouter.media.MediaRouteDescriptor);
+ ctor public MediaRouteDescriptor.Builder(String, String);
method public androidx.mediarouter.media.MediaRouteDescriptor.Builder addControlFilter(android.content.IntentFilter);
method public androidx.mediarouter.media.MediaRouteDescriptor.Builder addControlFilters(java.util.Collection<android.content.IntentFilter!>);
method public androidx.mediarouter.media.MediaRouteDescriptor build();
@@ -251,8 +251,8 @@
ctor public MediaRouteProvider.DynamicGroupRouteController();
method public String? getGroupableSelectionTitle();
method public String? getTransferableSectionTitle();
- method @Deprecated public final void notifyDynamicRoutesChanged(java.util.Collection<androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor!>);
method public final void notifyDynamicRoutesChanged(androidx.mediarouter.media.MediaRouteDescriptor, java.util.Collection<androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor!>);
+ method @Deprecated public final void notifyDynamicRoutesChanged(java.util.Collection<androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor!>);
method public abstract void onAddMemberRoute(String);
method public abstract void onRemoveMemberRoute(String);
method public abstract void onUpdateMemberRoutes(java.util.List<java.lang.String!>?);
@@ -488,8 +488,8 @@
}
public static final class MediaSessionStatus.Builder {
- ctor public MediaSessionStatus.Builder(int);
ctor public MediaSessionStatus.Builder(androidx.mediarouter.media.MediaSessionStatus);
+ ctor public MediaSessionStatus.Builder(int);
method public androidx.mediarouter.media.MediaSessionStatus build();
method public androidx.mediarouter.media.MediaSessionStatus.Builder setExtras(android.os.Bundle?);
method public androidx.mediarouter.media.MediaSessionStatus.Builder setQueuePaused(boolean);
diff --git a/mediarouter/mediarouter/build.gradle b/mediarouter/mediarouter/build.gradle
index 2cb2454..46de044 100644
--- a/mediarouter/mediarouter/build.gradle
+++ b/mediarouter/mediarouter/build.gradle
@@ -57,7 +57,7 @@
}
androidx {
- name = "Android MediaRouter Support Library"
+ name = "MediaRouter"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2013"
description = "Android MediaRouter Support Library"
diff --git a/mediarouter/mediarouter/src/main/res/values-af/strings.xml b/mediarouter/mediarouter/src/main/res/values-af/strings.xml
index adcb678..d92200d 100644
--- a/mediarouter/mediarouter/src/main/res/values-af/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-af/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Voeg \'n toestel by"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Speel op \'n groep"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Geen inligting beskikbaar nie"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-am/strings.xml b/mediarouter/mediarouter/src/main/res/values-am/strings.xml
index a0ca4d46..b68b906 100644
--- a/mediarouter/mediarouter/src/main/res/values-am/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-am/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"መሣሪያ ያክሉ"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"በቡድን ላይ ያጫውቱ"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"ምንም መረጃ አይገኝም"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-ar/strings.xml b/mediarouter/mediarouter/src/main/res/values-ar/strings.xml
index 49d12dc..360dd7b 100644
--- a/mediarouter/mediarouter/src/main/res/values-ar/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-ar/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"إضافة جهاز"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"تشغيل على مجموعة من الأجهزة"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"لا تتوفر أي معلومات"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-as/strings.xml b/mediarouter/mediarouter/src/main/res/values-as/strings.xml
index 37a0be4..ed65579 100644
--- a/mediarouter/mediarouter/src/main/res/values-as/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-as/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"কোনো এটা ডিভাইচ যোগ কৰক"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"কোনো এটা গোটত প্লে’ কৰক"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"কোনো তথ্য নাই"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-az/strings.xml b/mediarouter/mediarouter/src/main/res/values-az/strings.xml
index 62cadf4..f178a7ee 100644
--- a/mediarouter/mediarouter/src/main/res/values-az/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-az/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Cihaz əlavə edin"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Qrupda oxudun"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Əlçatan məlumat yoxdur"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-b+sr+Latn/strings.xml b/mediarouter/mediarouter/src/main/res/values-b+sr+Latn/strings.xml
index 18bcd14..482284d 100644
--- a/mediarouter/mediarouter/src/main/res/values-b+sr+Latn/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-b+sr+Latn/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Dodajte uređaj"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Puštajte u grupi"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Nema dostupnih informacija"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-be/strings.xml b/mediarouter/mediarouter/src/main/res/values-be/strings.xml
index 1801a8c..9edfde2 100644
--- a/mediarouter/mediarouter/src/main/res/values-be/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-be/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Дадаць прыладу"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Прайграць на групе прылад"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Інфармацыя адсутнічае"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-bg/strings.xml b/mediarouter/mediarouter/src/main/res/values-bg/strings.xml
index 1afa5c6..497a794 100644
--- a/mediarouter/mediarouter/src/main/res/values-bg/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-bg/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Добавяне на устройство"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Възпроизвеждане в група"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Няма налична информация"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-bn/strings.xml b/mediarouter/mediarouter/src/main/res/values-bn/strings.xml
index 3f4883fe..7966f96 100644
--- a/mediarouter/mediarouter/src/main/res/values-bn/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-bn/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"একটি ডিভাইস যোগ করুন"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"গ্রুপে প্লে করুন"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"কোনও তথ্য নেই"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-bs/strings.xml b/mediarouter/mediarouter/src/main/res/values-bs/strings.xml
index 458cce8..3182fd5 100644
--- a/mediarouter/mediarouter/src/main/res/values-bs/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-bs/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Dodajte uređaj"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Reproduciranje u grupi"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Nema dostupnih informacija"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-ca/strings.xml b/mediarouter/mediarouter/src/main/res/values-ca/strings.xml
index 5b56248..d0641a2 100644
--- a/mediarouter/mediarouter/src/main/res/values-ca/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-ca/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Afegeix un dispositiu"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Reprodueix en un grup"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"No hi ha informació disponible"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-cs/strings.xml b/mediarouter/mediarouter/src/main/res/values-cs/strings.xml
index c8bb66e..1385da1 100644
--- a/mediarouter/mediarouter/src/main/res/values-cs/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-cs/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Přidání zařízení"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Přehrávání ve skupině"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Nejsou k dispozici žádné informace"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-da/strings.xml b/mediarouter/mediarouter/src/main/res/values-da/strings.xml
index a11ce83..b385462 100644
--- a/mediarouter/mediarouter/src/main/res/values-da/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-da/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Tilføj en enhed"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Afspil på en gruppe"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Der er ingen tilgængelige oplysninger"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-de/strings.xml b/mediarouter/mediarouter/src/main/res/values-de/strings.xml
index 16e64fd..65cdfe6 100644
--- a/mediarouter/mediarouter/src/main/res/values-de/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-de/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Gerät hinzufügen"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Auf einem Gruppengerät abspielen"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Keine Informationen verfügbar"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-el/strings.xml b/mediarouter/mediarouter/src/main/res/values-el/strings.xml
index b44c8351..6d2abc3 100644
--- a/mediarouter/mediarouter/src/main/res/values-el/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-el/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Προσθήκη συσκευής"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Αναπαραγωγή σε κάποια ομάδα"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Δεν υπάρχουν διαθέσιμες πληροφορίες"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-en-rAU/strings.xml b/mediarouter/mediarouter/src/main/res/values-en-rAU/strings.xml
index 9de7198..0af3fbc 100644
--- a/mediarouter/mediarouter/src/main/res/values-en-rAU/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-en-rAU/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Add a device"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Play on a group"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"No info available"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-en-rCA/strings.xml b/mediarouter/mediarouter/src/main/res/values-en-rCA/strings.xml
index 9de7198..68cb38b 100644
--- a/mediarouter/mediarouter/src/main/res/values-en-rCA/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-en-rCA/strings.xml
@@ -41,4 +41,8 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Add a device"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Play on a group"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"No info available"</string>
+ <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"No devices available"</string>
+ <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Unable to find devices, make sure your device and the Cast device are on the same Wi-Fi network and try again."</string>
+ <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Make sure your device and the Cast device are on the same Wi-Fi network."</string>
+ <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Done"</string>
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-en-rGB/strings.xml b/mediarouter/mediarouter/src/main/res/values-en-rGB/strings.xml
index 9de7198..0af3fbc 100644
--- a/mediarouter/mediarouter/src/main/res/values-en-rGB/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-en-rGB/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Add a device"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Play on a group"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"No info available"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-en-rIN/strings.xml b/mediarouter/mediarouter/src/main/res/values-en-rIN/strings.xml
index 9de7198..0af3fbc 100644
--- a/mediarouter/mediarouter/src/main/res/values-en-rIN/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-en-rIN/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Add a device"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Play on a group"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"No info available"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-en-rXC/strings.xml b/mediarouter/mediarouter/src/main/res/values-en-rXC/strings.xml
index 974ce7b..4d254b2 100644
--- a/mediarouter/mediarouter/src/main/res/values-en-rXC/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-en-rXC/strings.xml
@@ -41,4 +41,8 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Add a device"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Play on a group"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"No info available"</string>
+ <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"No devices available"</string>
+ <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Unable to find devices, make sure your device and the Cast device are on the same Wi-Fi network and try again."</string>
+ <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Make sure your device and the Cast device are on the same Wi-Fi network."</string>
+ <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Done"</string>
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-es-rUS/strings.xml b/mediarouter/mediarouter/src/main/res/values-es-rUS/strings.xml
index d55c633..1aad2e0 100644
--- a/mediarouter/mediarouter/src/main/res/values-es-rUS/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-es-rUS/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Agregar un dispositivo"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Reproducir en un grupo"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Sin información disponible"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-es/strings.xml b/mediarouter/mediarouter/src/main/res/values-es/strings.xml
index 4986046..1352bcd 100644
--- a/mediarouter/mediarouter/src/main/res/values-es/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-es/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Añadir un dispositivo"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Reproducir en un grupo"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"No hay información disponible"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-et/strings.xml b/mediarouter/mediarouter/src/main/res/values-et/strings.xml
index fe2d2c8..e616867 100644
--- a/mediarouter/mediarouter/src/main/res/values-et/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-et/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Seadme lisamine"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Grupis esitamine"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Teave puudub"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-eu/strings.xml b/mediarouter/mediarouter/src/main/res/values-eu/strings.xml
index d58c241..5a8f9ee 100644
--- a/mediarouter/mediarouter/src/main/res/values-eu/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-eu/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Gehitu gailu bat"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Erreproduzitu talde batean"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Ez dago informaziorik"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-fa/strings.xml b/mediarouter/mediarouter/src/main/res/values-fa/strings.xml
index cfeb662..a89fa74 100644
--- a/mediarouter/mediarouter/src/main/res/values-fa/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-fa/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"افزودن دستگاه"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"بازی در گروه"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"اطلاعاتی در دسترس نیست"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-fi/strings.xml b/mediarouter/mediarouter/src/main/res/values-fi/strings.xml
index 168a5b3..16ecc20 100644
--- a/mediarouter/mediarouter/src/main/res/values-fi/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-fi/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Lisää laite"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Toista ryhmässä"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Ei tietoja saatavilla"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-fr-rCA/strings.xml b/mediarouter/mediarouter/src/main/res/values-fr-rCA/strings.xml
index 28c763a9..738aae0 100644
--- a/mediarouter/mediarouter/src/main/res/values-fr-rCA/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-fr-rCA/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Ajouter un appareil"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Faire jouer sur un groupe d\'appareils"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Aucune donnée trouvée"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-fr/strings.xml b/mediarouter/mediarouter/src/main/res/values-fr/strings.xml
index cb9d9a0..6646d65 100644
--- a/mediarouter/mediarouter/src/main/res/values-fr/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-fr/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Ajouter un appareil"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Lire sur un groupe d\'appareils"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Aucune information disponible"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-gl/strings.xml b/mediarouter/mediarouter/src/main/res/values-gl/strings.xml
index e91bed7..6117f73 100644
--- a/mediarouter/mediarouter/src/main/res/values-gl/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-gl/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Engadir un dispositivo"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Reproducir nun grupo"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Non hai información dispoñible"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-gu/strings.xml b/mediarouter/mediarouter/src/main/res/values-gu/strings.xml
index 0067904..5d12ade 100644
--- a/mediarouter/mediarouter/src/main/res/values-gu/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-gu/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"ડિવાઇસ ઉમેરો"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"જૂથમાં રમો"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"કોઈ માહિતી ઉપલબ્ધ નથી"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-hi/strings.xml b/mediarouter/mediarouter/src/main/res/values-hi/strings.xml
index b179584..edd8c71 100644
--- a/mediarouter/mediarouter/src/main/res/values-hi/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-hi/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"कोई डिवाइस जोड़ें"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"समूह में खेलें"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"कोई जानकारी मौजूद नहीं है"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-hr/strings.xml b/mediarouter/mediarouter/src/main/res/values-hr/strings.xml
index 1f63f98..a5d9a4a 100644
--- a/mediarouter/mediarouter/src/main/res/values-hr/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-hr/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Dodavanje uređaja"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Reprodukcija u grupi"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Informacije nisu dostupne"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-hu/strings.xml b/mediarouter/mediarouter/src/main/res/values-hu/strings.xml
index 3b525c0..e71a892 100644
--- a/mediarouter/mediarouter/src/main/res/values-hu/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-hu/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Eszköz hozzáadása"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Lejátszás eszközcsoportban"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Nincs információ"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-hy/strings.xml b/mediarouter/mediarouter/src/main/res/values-hy/strings.xml
index 1800c00..609fc37 100644
--- a/mediarouter/mediarouter/src/main/res/values-hy/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-hy/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Ավելացրեք սարք"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Նվագարկեք սարքերի խմբում"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Հասանելի տեղեկություններ չկան"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-in/strings.xml b/mediarouter/mediarouter/src/main/res/values-in/strings.xml
index 3aa6597..7c89622 100644
--- a/mediarouter/mediarouter/src/main/res/values-in/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-in/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Tambahkan perangkat"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Putar di grup"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Info tidak tersedia"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-is/strings.xml b/mediarouter/mediarouter/src/main/res/values-is/strings.xml
index 64217f3..8e7c465 100644
--- a/mediarouter/mediarouter/src/main/res/values-is/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-is/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Bæta tæki við"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Spila í hóp"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Engar upplýsingar í boði"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-it/strings.xml b/mediarouter/mediarouter/src/main/res/values-it/strings.xml
index b86336a..61fab4b 100644
--- a/mediarouter/mediarouter/src/main/res/values-it/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-it/strings.xml
@@ -33,7 +33,7 @@
<string name="mr_controller_expand_group" msgid="4521419834052044261">"Espandi"</string>
<string name="mr_controller_collapse_group" msgid="2585048604188129749">"Comprimi"</string>
<string name="mr_controller_album_art" msgid="3330502667672708728">"Copertina dell\'album"</string>
- <string name="mr_controller_volume_slider" msgid="2955862765169128170">"Dispositivo di scorrimento del volume"</string>
+ <string name="mr_controller_volume_slider" msgid="2955862765169128170">"Cursore del volume"</string>
<string name="mr_controller_no_media_selected" msgid="5495452265246139458">"Nessun contenuto multimediale selezionato"</string>
<string name="mr_controller_no_info_available" msgid="855271725131981086">"Nessuna informazione disponibile"</string>
<string name="mr_controller_casting_screen" msgid="9171231064758955152">"Trasmissione dello schermo attiva"</string>
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Aggiungi un dispositivo"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Riproduci su un gruppo"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Nessuna informazione disponibile"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-iw/strings.xml b/mediarouter/mediarouter/src/main/res/values-iw/strings.xml
index eda57a80..57e4a8b 100644
--- a/mediarouter/mediarouter/src/main/res/values-iw/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-iw/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"הוספת מכשיר"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"הפעלה בקבוצה"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"אין מידע זמין"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-ja/strings.xml b/mediarouter/mediarouter/src/main/res/values-ja/strings.xml
index 61a726c..2b81561 100644
--- a/mediarouter/mediarouter/src/main/res/values-ja/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-ja/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"デバイスの追加"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"グループで再生"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"情報がありません"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-ka/strings.xml b/mediarouter/mediarouter/src/main/res/values-ka/strings.xml
index 315aa64e..27f748c 100644
--- a/mediarouter/mediarouter/src/main/res/values-ka/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-ka/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"მოწყობილობის დამატება"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"ჯგუფში დაკვრა"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"ინფორმაცია მიუწვდომელია"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-kk/strings.xml b/mediarouter/mediarouter/src/main/res/values-kk/strings.xml
index 7a7907a..8cc0255 100644
--- a/mediarouter/mediarouter/src/main/res/values-kk/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-kk/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Құрылғы енгізу"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Топта ойнату"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Ешқандай ақпарат жоқ"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-km/strings.xml b/mediarouter/mediarouter/src/main/res/values-km/strings.xml
index 8b9d27f..5c7cc84 100644
--- a/mediarouter/mediarouter/src/main/res/values-km/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-km/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"បញ្ចូលឧបករណ៍"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"លេងនៅលើក្រុម"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"មិនមានព័ត៌មានទេ"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-kn/strings.xml b/mediarouter/mediarouter/src/main/res/values-kn/strings.xml
index b6933ee..152904b 100644
--- a/mediarouter/mediarouter/src/main/res/values-kn/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-kn/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"ಸಾಧನವನ್ನು ಸೇರಿಸಿ"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"ಗುಂಪಿನಲ್ಲಿ ಪ್ಲೇ ಮಾಡಿ"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"ಯಾವುದೇ ಮಾಹಿತಿ ಲಭ್ಯವಿಲ್ಲ"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-ko/strings.xml b/mediarouter/mediarouter/src/main/res/values-ko/strings.xml
index f5fe7b9..a3a9163 100644
--- a/mediarouter/mediarouter/src/main/res/values-ko/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-ko/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"기기 추가"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"그룹에서 재생"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"사용할 수 있는 정보 없음"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-ky/strings.xml b/mediarouter/mediarouter/src/main/res/values-ky/strings.xml
index 33e6806..e51e3d0 100644
--- a/mediarouter/mediarouter/src/main/res/values-ky/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-ky/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="mr_system_route_name" msgid="7449553026175453403">"Тутум"</string>
+ <string name="mr_system_route_name" msgid="7449553026175453403">"Система"</string>
<string name="mr_user_route_category_name" msgid="4088331695424166162">"Түзмөктөр"</string>
<string name="mr_button_content_description" msgid="2939063992730535343">"Тышкы экранга чыгаруу"</string>
<string name="mr_cast_button_disconnected" msgid="8071109333469380363">"Тышкы экранга чыгаруу. Ажыратылды"</string>
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Түзмөк кошуу"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Топто ойнотуу"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Эч маалымат жок"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-lo/strings.xml b/mediarouter/mediarouter/src/main/res/values-lo/strings.xml
index 889ff75..9fad7af 100644
--- a/mediarouter/mediarouter/src/main/res/values-lo/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-lo/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"ເພີ່ມອຸປະກອນ"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"ຫຼິ້ນຢູ່ກຸ່ມ"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"ບໍ່ມີຂໍ້ມູນ"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-lt/strings.xml b/mediarouter/mediarouter/src/main/res/values-lt/strings.xml
index 91f6e5b..aca94fe 100644
--- a/mediarouter/mediarouter/src/main/res/values-lt/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-lt/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Įrenginio pridėjimas"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Leidimas grupėje"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Nėra jokios informacijos"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-lv/strings.xml b/mediarouter/mediarouter/src/main/res/values-lv/strings.xml
index 468cdeb..c3bbe2c 100644
--- a/mediarouter/mediarouter/src/main/res/values-lv/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-lv/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Pievienot ierīci"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Atskaņošana grupā"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Nav informācijas"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-mk/strings.xml b/mediarouter/mediarouter/src/main/res/values-mk/strings.xml
index 73e2bb9..aa622b2 100644
--- a/mediarouter/mediarouter/src/main/res/values-mk/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-mk/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Додајте уред"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Пуштете на група"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Нема достапни информации"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-ml/strings.xml b/mediarouter/mediarouter/src/main/res/values-ml/strings.xml
index 9721e13..225af4b 100644
--- a/mediarouter/mediarouter/src/main/res/values-ml/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-ml/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"ഒരു ഉപകരണം ചേർക്കുക"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"ഒരു ഗ്രൂപ്പിൽ പ്ലേ ചെയ്യുക"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"വിവരങ്ങളൊന്നും ലഭ്യമല്ല"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-mn/strings.xml b/mediarouter/mediarouter/src/main/res/values-mn/strings.xml
index 4d15aa8..17670e2 100644
--- a/mediarouter/mediarouter/src/main/res/values-mn/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-mn/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Төхөөрөмж нэмэх"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Бүлэгт тоглуулах"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Мэдээлэл алга"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-mr/strings.xml b/mediarouter/mediarouter/src/main/res/values-mr/strings.xml
index 895b020..69cae09 100644
--- a/mediarouter/mediarouter/src/main/res/values-mr/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-mr/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"डिव्हाइस जोडा"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"गटावर प्ले करा"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"कोणतीही माहिती उपलब्ध नाही"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-ms/strings.xml b/mediarouter/mediarouter/src/main/res/values-ms/strings.xml
index bdbe265..a6a76ee 100644
--- a/mediarouter/mediarouter/src/main/res/values-ms/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-ms/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Tambah peranti"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Mainkan pada kumpulan"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Maklumat tidak tersedia"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-my/strings.xml b/mediarouter/mediarouter/src/main/res/values-my/strings.xml
index 43a59ac..1f00f1a 100644
--- a/mediarouter/mediarouter/src/main/res/values-my/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-my/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"စက်ပစ္စည်း ထည့်ခြင်း"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"အုပ်စုလိုက် ဖွင့်ခြင်း"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"အချက်အလက် မရရှိနိုင်ပါ"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-nb/strings.xml b/mediarouter/mediarouter/src/main/res/values-nb/strings.xml
index 311a537..43be34f 100644
--- a/mediarouter/mediarouter/src/main/res/values-nb/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-nb/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Legg til en enhet"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Spill i en gruppe"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Ingen informasjon er tilgjengelig"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-ne/strings.xml b/mediarouter/mediarouter/src/main/res/values-ne/strings.xml
index 8f025d1..aef78a2 100644
--- a/mediarouter/mediarouter/src/main/res/values-ne/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-ne/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"डिभाइस थप्नुहोस्"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"कुनै समूहमा प्ले गर्नुहोस्"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"कुनै पनि जानकारी उपलब्ध छैन"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-nl/strings.xml b/mediarouter/mediarouter/src/main/res/values-nl/strings.xml
index 4a3ad87..41e6dec 100644
--- a/mediarouter/mediarouter/src/main/res/values-nl/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-nl/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Een apparaat toevoegen"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Afspelen in een groep"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Geen informatie beschikbaar"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-or/strings.xml b/mediarouter/mediarouter/src/main/res/values-or/strings.xml
index f02c6fc..dcef71d 100644
--- a/mediarouter/mediarouter/src/main/res/values-or/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-or/strings.xml
@@ -28,7 +28,7 @@
<string name="mr_controller_stop_casting" msgid="804210341192624074">"କାଷ୍ଟ କରିବା ବନ୍ଦ କରନ୍ତୁ"</string>
<string name="mr_controller_close_description" msgid="5684434439232634509">"ବନ୍ଦ କରନ୍ତୁ"</string>
<string name="mr_controller_play" msgid="1253345086594430054">"ଚଲାନ୍ତୁ"</string>
- <string name="mr_controller_pause" msgid="747801650871398383">"ପଜ୍ କରନ୍ତୁ"</string>
+ <string name="mr_controller_pause" msgid="747801650871398383">"ବିରତ କରନ୍ତୁ"</string>
<string name="mr_controller_stop" msgid="5497722768305745508">"ରୋକନ୍ତୁ"</string>
<string name="mr_controller_expand_group" msgid="4521419834052044261">"ବିସ୍ତାର କରନ୍ତୁ"</string>
<string name="mr_controller_collapse_group" msgid="2585048604188129749">"ସଂକୁଚିତ କରନ୍ତୁ"</string>
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"ଏକ ଡିଭାଇସ୍ ଯୋଗ କରନ୍ତୁ"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"ଏକ ଗ୍ରୁପ୍ରେ ପ୍ଲେ କରନ୍ତୁ"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"କୌଣସି ସୂଚନା ଉପଲବ୍ଧ ନାହିଁ"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-pa/strings.xml b/mediarouter/mediarouter/src/main/res/values-pa/strings.xml
index e0c2c29..8396b1f 100644
--- a/mediarouter/mediarouter/src/main/res/values-pa/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-pa/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"ਕੋਈ ਡੀਵਾਈਸ ਸ਼ਾਮਲ ਕਰੋ"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"ਕਿਸੇ ਗਰੁੱਪ ਵਿੱਚ ਖੇਡੋ"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"ਕੋਈ ਜਾਣਕਾਰੀ ਉਪਲਬਧ ਨਹੀਂ"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-pl/strings.xml b/mediarouter/mediarouter/src/main/res/values-pl/strings.xml
index 1f552eb..fd06cce 100644
--- a/mediarouter/mediarouter/src/main/res/values-pl/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-pl/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Dodaj urządzenie"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Odtwórz w grupie"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Brak informacji"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-pt-rBR/strings.xml b/mediarouter/mediarouter/src/main/res/values-pt-rBR/strings.xml
index 20c5ae5..1c15e96 100644
--- a/mediarouter/mediarouter/src/main/res/values-pt-rBR/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-pt-rBR/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Adicionar um dispositivo"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Reproduzir em um grupo"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Nenhuma informação disponível"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-pt-rPT/strings.xml b/mediarouter/mediarouter/src/main/res/values-pt-rPT/strings.xml
index f9c5870..c4a9b98 100644
--- a/mediarouter/mediarouter/src/main/res/values-pt-rPT/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-pt-rPT/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Adicionar um dispositivo"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Reproduzir num grupo"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Nenhuma informação disponível"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-pt/strings.xml b/mediarouter/mediarouter/src/main/res/values-pt/strings.xml
index 20c5ae5..1c15e96 100644
--- a/mediarouter/mediarouter/src/main/res/values-pt/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-pt/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Adicionar um dispositivo"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Reproduzir em um grupo"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Nenhuma informação disponível"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-ro/strings.xml b/mediarouter/mediarouter/src/main/res/values-ro/strings.xml
index c8e5f3c..bf4841e 100644
--- a/mediarouter/mediarouter/src/main/res/values-ro/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-ro/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Adaugă un dispozitiv"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Redă într-un grup"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Nu sunt informații disponibile"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-ru/strings.xml b/mediarouter/mediarouter/src/main/res/values-ru/strings.xml
index beca097..99c5462 100644
--- a/mediarouter/mediarouter/src/main/res/values-ru/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-ru/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Добавление устройства"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Воспроизведение в группе"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Данных нет"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-si/strings.xml b/mediarouter/mediarouter/src/main/res/values-si/strings.xml
index e2e473a..d9054f7 100644
--- a/mediarouter/mediarouter/src/main/res/values-si/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-si/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"උපාංගයක් එක් කරන්න"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"සමූහයක ධාවනය කරන්න"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"ලබා ගත හැකි තොරතුරු නොමැත"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-sk/strings.xml b/mediarouter/mediarouter/src/main/res/values-sk/strings.xml
index 449e9a9..0283410 100644
--- a/mediarouter/mediarouter/src/main/res/values-sk/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-sk/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Pridanie zariadenia"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Prehrávanie v skupine"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Nie sú k dispozícii žiadne informácie"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-sl/strings.xml b/mediarouter/mediarouter/src/main/res/values-sl/strings.xml
index 33a4f9e..5889dfb 100644
--- a/mediarouter/mediarouter/src/main/res/values-sl/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-sl/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Dodajanje naprave"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Predvajanje v skupini"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Ni podatkov"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-sq/strings.xml b/mediarouter/mediarouter/src/main/res/values-sq/strings.xml
index 3fa9667..8b7c925 100644
--- a/mediarouter/mediarouter/src/main/res/values-sq/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-sq/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Shto një pajisje"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Luaj në një grup"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Nuk jepet asnjë informacion"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-sr/strings.xml b/mediarouter/mediarouter/src/main/res/values-sr/strings.xml
index 6bd1e34..ad33c85 100644
--- a/mediarouter/mediarouter/src/main/res/values-sr/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-sr/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Додајте уређај"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Пуштајте у групи"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Нема доступних информација"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-sv/strings.xml b/mediarouter/mediarouter/src/main/res/values-sv/strings.xml
index de428a1..f1716ad 100644
--- a/mediarouter/mediarouter/src/main/res/values-sv/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-sv/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Lägga till en enhet"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Spela upp på en grupp enheter"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Det finns ingen tillgänglig information"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-sw/strings.xml b/mediarouter/mediarouter/src/main/res/values-sw/strings.xml
index db3915f..6c73e06 100644
--- a/mediarouter/mediarouter/src/main/res/values-sw/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-sw/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Ongeza kifaa"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Cheza kwenye kikundi"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Hakuna maelezo yaliyopatikana"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-ta/strings.xml b/mediarouter/mediarouter/src/main/res/values-ta/strings.xml
index 5f0dcc3..61fdf59 100644
--- a/mediarouter/mediarouter/src/main/res/values-ta/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-ta/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"சாதனத்தைச் சேர்த்தல்"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"குழுவில் இயக்கு"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"தகவல் எதுவுமில்லை"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-te/strings.xml b/mediarouter/mediarouter/src/main/res/values-te/strings.xml
index 81f0b97..e3a416b 100644
--- a/mediarouter/mediarouter/src/main/res/values-te/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-te/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"పరికరాన్ని జోడించండి"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"గ్రూప్లో ప్లే చేయండి"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"సమాచారం అందుబాటులో లేదు"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-th/strings.xml b/mediarouter/mediarouter/src/main/res/values-th/strings.xml
index 36971c5..6128c15 100644
--- a/mediarouter/mediarouter/src/main/res/values-th/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-th/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"เพิ่มอุปกรณ์"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"เล่นในกลุ่ม"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"ไม่มีข้อมูล"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-tl/strings.xml b/mediarouter/mediarouter/src/main/res/values-tl/strings.xml
index bbc61d1..09d27ab 100644
--- a/mediarouter/mediarouter/src/main/res/values-tl/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-tl/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Magdagdag ng device"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"I-play sa isang pangkat"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Walang available na impormasyon"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-tr/strings.xml b/mediarouter/mediarouter/src/main/res/values-tr/strings.xml
index 5d4b340..a2848f8 100644
--- a/mediarouter/mediarouter/src/main/res/values-tr/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-tr/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Cihaz ekleyin"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Bir grupta oynatın"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Bilgi yok"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-uk/strings.xml b/mediarouter/mediarouter/src/main/res/values-uk/strings.xml
index cd76c28..c52083d 100644
--- a/mediarouter/mediarouter/src/main/res/values-uk/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-uk/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Додати пристрій"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Увімкнути на групі пристроїв"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Немає інформації"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-ur/strings.xml b/mediarouter/mediarouter/src/main/res/values-ur/strings.xml
index 322a94a..4491aec 100644
--- a/mediarouter/mediarouter/src/main/res/values-ur/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-ur/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"کوئی آلہ شامل کریں"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"گروپ پر چلائیں"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"کوئی معلومات دستیاب نہیں"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-uz/strings.xml b/mediarouter/mediarouter/src/main/res/values-uz/strings.xml
index a2b411e..6bd6c65 100644
--- a/mediarouter/mediarouter/src/main/res/values-uz/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-uz/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Qurilma qo‘shish"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Guruhda ijro qilish"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Hech narsa topilmadi"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-vi/strings.xml b/mediarouter/mediarouter/src/main/res/values-vi/strings.xml
index 28b6e62..01c6a1c 100644
--- a/mediarouter/mediarouter/src/main/res/values-vi/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-vi/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Thêm thiết bị"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Phát trên nhóm"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Không có thông tin nào"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-zh-rCN/strings.xml b/mediarouter/mediarouter/src/main/res/values-zh-rCN/strings.xml
index bae9baf..912d9ea 100644
--- a/mediarouter/mediarouter/src/main/res/values-zh-rCN/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-zh-rCN/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"添加设备"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"在一组设备上播放"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"没有任何相关信息"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-zh-rHK/strings.xml b/mediarouter/mediarouter/src/main/res/values-zh-rHK/strings.xml
index c641c28..90d792c 100644
--- a/mediarouter/mediarouter/src/main/res/values-zh-rHK/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-zh-rHK/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"新增裝置"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"在群組裝置中播放"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"沒有資料可以提供"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-zh-rTW/strings.xml b/mediarouter/mediarouter/src/main/res/values-zh-rTW/strings.xml
index c7588a4..36e2645 100644
--- a/mediarouter/mediarouter/src/main/res/values-zh-rTW/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-zh-rTW/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"新增裝置"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"在群組上播放"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"沒有可用的資訊"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-zu/strings.xml b/mediarouter/mediarouter/src/main/res/values-zu/strings.xml
index 5335450..c8774f2 100644
--- a/mediarouter/mediarouter/src/main/res/values-zu/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-zu/strings.xml
@@ -41,4 +41,12 @@
<string name="mr_dialog_groupable_header" msgid="4307018456678388936">"Engeza idivayisi"</string>
<string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Dlala eqenjini"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Alukho ulwazi olutholakalayo"</string>
+ <!-- no translation found for mr_chooser_zero_routes_found_title (5213435473397442608) -->
+ <skip />
+ <!-- no translation found for mr_chooser_zero_routes_description (5123320430013505927) -->
+ <skip />
+ <!-- no translation found for mr_chooser_wifi_warning_description (337903053432238985) -->
+ <skip />
+ <!-- no translation found for mr_chooser_done_button_label (7897288652928484627) -->
+ <skip />
</resources>
diff --git a/metrics/integration-tests/janktest/src/main/java/androidx/metrics/performance/janktest/JankAggregatorActivity.kt b/metrics/integration-tests/janktest/src/main/java/androidx/metrics/performance/janktest/JankAggregatorActivity.kt
index e293c37..d280f43 100644
--- a/metrics/integration-tests/janktest/src/main/java/androidx/metrics/performance/janktest/JankAggregatorActivity.kt
+++ b/metrics/integration-tests/janktest/src/main/java/androidx/metrics/performance/janktest/JankAggregatorActivity.kt
@@ -20,8 +20,8 @@
import android.view.Menu
import android.view.MenuItem
import androidx.appcompat.app.AppCompatActivity
-import androidx.metrics.performance.PerformanceMetricsState
import androidx.metrics.performance.FrameData
+import androidx.metrics.performance.PerformanceMetricsState
import androidx.metrics.performance.janktest.databinding.ActivityMainBinding
import androidx.navigation.findNavController
import androidx.navigation.ui.AppBarConfiguration
diff --git a/metrics/integration-tests/janktest/src/main/java/androidx/metrics/performance/janktest/JankLoggingActivity.kt b/metrics/integration-tests/janktest/src/main/java/androidx/metrics/performance/janktest/JankLoggingActivity.kt
index e3c0087..08826f4 100644
--- a/metrics/integration-tests/janktest/src/main/java/androidx/metrics/performance/janktest/JankLoggingActivity.kt
+++ b/metrics/integration-tests/janktest/src/main/java/androidx/metrics/performance/janktest/JankLoggingActivity.kt
@@ -20,9 +20,9 @@
import android.view.Menu
import android.view.MenuItem
import androidx.appcompat.app.AppCompatActivity
-import androidx.metrics.performance.PerformanceMetricsState
import androidx.metrics.performance.FrameData
import androidx.metrics.performance.JankStats
+import androidx.metrics.performance.PerformanceMetricsState
import androidx.metrics.performance.janktest.databinding.ActivityMainBinding
import androidx.navigation.findNavController
import androidx.navigation.ui.AppBarConfiguration
diff --git a/metrics/metrics-performance/build.gradle b/metrics/metrics-performance/build.gradle
index 94fcacb..8c474b0 100644
--- a/metrics/metrics-performance/build.gradle
+++ b/metrics/metrics-performance/build.gradle
@@ -59,7 +59,7 @@
androidx {
- name = "AndroidX Metrics"
+ name = "Metrics"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2021"
description = "Library for tracking and reporting various runtime metrics for applications"
diff --git a/metrics/metrics-performance/src/androidTest/java/androidx/metrics/performance/test/JankStatsTest.kt b/metrics/metrics-performance/src/androidTest/java/androidx/metrics/performance/test/JankStatsTest.kt
index 5bb3c0d..8f79640 100644
--- a/metrics/metrics-performance/src/androidTest/java/androidx/metrics/performance/test/JankStatsTest.kt
+++ b/metrics/metrics-performance/src/androidTest/java/androidx/metrics/performance/test/JankStatsTest.kt
@@ -18,6 +18,7 @@
import android.os.Build
import android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1
import android.os.Build.VERSION_CODES.JELLY_BEAN
+import android.util.Log
import android.view.Choreographer
import androidx.annotation.RequiresApi
import androidx.metrics.performance.FrameData
@@ -35,8 +36,8 @@
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
import kotlin.math.max
-import org.hamcrest.Matchers
import org.hamcrest.MatcherAssert.assertThat
+import org.hamcrest.Matchers
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertNotEquals
@@ -295,6 +296,8 @@
frameInit.initFramePipeline()
+ resetFrameStateData()
+
val state0 = StateInfo("Testing State 0", "sampleStateA")
val state1 = StateInfo("Testing State 1", "sampleStateB")
val state2 = StateInfo("Testing State 2", "sampleStateC")
@@ -332,6 +335,7 @@
}
// reset and clear states
+ resetFrameStateData()
latchedListener.reset()
metricsState.removeState(state0.key)
metricsState.removeState(state1.key)
@@ -339,7 +343,7 @@
runDelayTest(frameDelay, 1, latchedListener)
item0 = latchedListener.jankData[0]
assertEquals(
- "States should be empty after being cleared",
+ "States should be empty after being cleared, but got ${item0.states}",
0,
item0.states.size
)
@@ -350,15 +354,16 @@
metricsState.putState(state4.first, state4.second)
runDelayTest(frameDelay, 1, latchedListener)
item0 = latchedListener.jankData[0]
- assertEquals(2, item0.states.size)
+ assertEquals("states: ${item0.states}", 2, item0.states.size)
latchedListener.reset()
// Test removal of state3 and replacement of state4
+ resetFrameStateData()
metricsState.removeState(state3.first)
metricsState.putState(state4.first, "sampleStateF")
runDelayTest(frameDelay, 1, latchedListener)
item0 = latchedListener.jankData[0]
- assertEquals(1, item0.states.size)
+ assertEquals("states: ${item0.states}", 1, item0.states.size)
assertEquals(state4.first, item0.states[0].key)
assertEquals("sampleStateF", item0.states[0].value)
latchedListener.reset()
@@ -496,6 +501,7 @@
mapOf("stateNameA" to "1"),
)
+ resetFrameStateData()
runDelayTest(frameDelay = 0, numFrames = perFrameStateData.size,
latchedListener, perFrameStateData)
@@ -514,7 +520,8 @@
*/
var expectedIndex = 0
var resultIndex = 0
- while (expectedIndex < expectedResults.size) {
+ while (expectedIndex < expectedResults.size &&
+ resultIndex < latchedListener.jankData.size) {
val testResultStates = latchedListener.jankData[resultIndex].states
// Test against this and next expected result, in case system skipped a frame
var matched = checkFrameStates(expectedResults[expectedIndex], testResultStates)
@@ -522,7 +529,8 @@
expectedIndex++
matched = checkFrameStates(expectedResults[expectedIndex], testResultStates)
}
- assertTrue("States do not match at frame $expectedIndex", matched)
+ assertTrue("Expected states do not match $testResultStates at frame " +
+ "$expectedIndex", matched)
expectedIndex++
resultIndex++
}
@@ -541,6 +549,38 @@
return true
}
+ /**
+ * We need to ensure that state data only gets set when the system is ready to send frameData
+ * for future frames. It is possible for some of the initial frames to have start times that
+ * pre-date the current time, which is when we might be setting/removing state.
+ *
+ * To ensure that the right thing happens, call this function prior to setting any frame state.
+ * It will run frames through the system until the frameData start timeis after the
+ * current time when this function is called.
+ */
+ private fun resetFrameStateData() {
+ val currentNanos = System.nanoTime()
+ // failsafe - limit the iterations, don't want to loop forever
+ var numAttempts = 0
+ try {
+ while (numAttempts < 100) {
+ runDelayTest(0, 1, latchedListener)
+ if (latchedListener.jankData.size > 0) {
+ if (latchedListener.jankData[0].frameStartNanos > currentNanos) {
+ return
+ }
+ }
+ Log.d("JankStatsTest", "resetFrameStateData attempt $numAttempts:" +
+ "frame start < currentTime: " +
+ "${latchedListener.jankData[0].frameStartNanos}, $currentNanos")
+ latchedListener.reset()
+ numAttempts++
+ }
+ } finally {
+ latchedListener.reset()
+ }
+ }
+
private fun runDelayTest(
frameDelay: Int,
numFrames: Int,
diff --git a/navigation/CHANGELOG.md b/navigation/CHANGELOG.md
index e80842d..35936ff 100644
--- a/navigation/CHANGELOG.md
+++ b/navigation/CHANGELOG.md
@@ -16,6 +16,18 @@
## Unreleased
+### New Features
+
+- NavHost and NavController now supports navigating in compose with Animations.
+
+### Bug Fixes
+
+- Fixed an issue with Navigation in Fragments where navigating
+with popUpTo and popping a fragment off the back stack without
+recreating its view would cause system back to stop working.
+
+## Version 2.6.0-rc01
+
### Bug Fixes
- Updated the error message and exception type when navigating on a NavController with no
diff --git a/navigation/navigation-common-ktx/build.gradle b/navigation/navigation-common-ktx/build.gradle
index 03904c3..b2f94223 100644
--- a/navigation/navigation-common-ktx/build.gradle
+++ b/navigation/navigation-common-ktx/build.gradle
@@ -32,7 +32,7 @@
}
androidx {
- name = "Android Navigation Common Kotlin Extensions"
+ name = "Navigation Common Kotlin Extensions"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "Android Navigation-Common-Ktx"
diff --git a/navigation/navigation-common/api/current.txt b/navigation/navigation-common/api/current.txt
index e6d0229..51a77a6 100644
--- a/navigation/navigation-common/api/current.txt
+++ b/navigation/navigation-common/api/current.txt
@@ -44,9 +44,9 @@
}
public final class NavAction {
- ctor public NavAction(@IdRes int destinationId, optional androidx.navigation.NavOptions? navOptions, optional android.os.Bundle? defaultArguments);
- ctor public NavAction(@IdRes int destinationId, optional androidx.navigation.NavOptions? navOptions);
ctor public NavAction(@IdRes int destinationId);
+ ctor public NavAction(@IdRes int destinationId, optional androidx.navigation.NavOptions? navOptions);
+ ctor public NavAction(@IdRes int destinationId, optional androidx.navigation.NavOptions? navOptions, optional android.os.Bundle? defaultArguments);
method public android.os.Bundle? getDefaultArguments();
method public int getDestinationId();
method public androidx.navigation.NavOptions? getNavOptions();
@@ -196,11 +196,11 @@
}
public class NavDestination {
- ctor public NavDestination(String navigatorName);
ctor public NavDestination(androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
+ ctor public NavDestination(String navigatorName);
method public final void addArgument(String argumentName, androidx.navigation.NavArgument argument);
- method public final void addDeepLink(String uriPattern);
method public final void addDeepLink(androidx.navigation.NavDeepLink navDeepLink);
+ method public final void addDeepLink(String uriPattern);
method public final String? fillInLabel(android.content.Context context, android.os.Bundle? bundle);
method public final androidx.navigation.NavAction? getAction(@IdRes int id);
method public final java.util.Map<java.lang.String,androidx.navigation.NavArgument> getArguments();
@@ -214,8 +214,8 @@
method public boolean hasDeepLink(androidx.navigation.NavDeepLinkRequest deepLinkRequest);
method @CallSuper public void onInflate(android.content.Context context, android.util.AttributeSet attrs);
method protected static final <C> Class<? extends C> parseClassFromName(android.content.Context context, String name, Class<? extends C> expectedClassType);
- method public final void putAction(@IdRes int actionId, @IdRes int destId);
method public final void putAction(@IdRes int actionId, androidx.navigation.NavAction action);
+ method public final void putAction(@IdRes int actionId, @IdRes int destId);
method public final void removeAction(@IdRes int actionId);
method public final void removeArgument(String argumentName);
method public final void setId(@IdRes int);
@@ -273,8 +273,8 @@
ctor public NavGraph(androidx.navigation.Navigator<? extends androidx.navigation.NavGraph> navGraphNavigator);
method public final void addAll(androidx.navigation.NavGraph other);
method public final void addDestination(androidx.navigation.NavDestination node);
- method public final void addDestinations(java.util.Collection<? extends androidx.navigation.NavDestination> nodes);
method public final void addDestinations(androidx.navigation.NavDestination... nodes);
+ method public final void addDestinations(java.util.Collection<? extends androidx.navigation.NavDestination> nodes);
method public final void clear();
method public final androidx.navigation.NavDestination? findNode(@IdRes int resId);
method public final androidx.navigation.NavDestination? findNode(String? route);
@@ -307,10 +307,10 @@
}
public final class NavGraphBuilderKt {
- method @Deprecated public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, optional @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
- method public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
method @Deprecated public static inline void navigation(androidx.navigation.NavGraphBuilder, @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
method public static inline void navigation(androidx.navigation.NavGraphBuilder, String startDestination, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
+ method @Deprecated public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, optional @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
+ method public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
}
public final class NavGraphKt {
@@ -358,10 +358,10 @@
method public androidx.navigation.NavOptions.Builder setLaunchSingleTop(boolean singleTop);
method public androidx.navigation.NavOptions.Builder setPopEnterAnim(@AnimRes @AnimatorRes int popEnterAnim);
method public androidx.navigation.NavOptions.Builder setPopExitAnim(@AnimRes @AnimatorRes int popExitAnim);
- method public androidx.navigation.NavOptions.Builder setPopUpTo(@IdRes int destinationId, boolean inclusive, optional boolean saveState);
method public androidx.navigation.NavOptions.Builder setPopUpTo(@IdRes int destinationId, boolean inclusive);
- method public androidx.navigation.NavOptions.Builder setPopUpTo(String? route, boolean inclusive, optional boolean saveState);
+ method public androidx.navigation.NavOptions.Builder setPopUpTo(@IdRes int destinationId, boolean inclusive, optional boolean saveState);
method public androidx.navigation.NavOptions.Builder setPopUpTo(String? route, boolean inclusive);
+ method public androidx.navigation.NavOptions.Builder setPopUpTo(String? route, boolean inclusive, optional boolean saveState);
method public androidx.navigation.NavOptions.Builder setRestoreState(boolean restoreState);
}
@@ -464,14 +464,14 @@
method public abstract D createDestination();
method protected final androidx.navigation.NavigatorState getState();
method public final boolean isAttached();
- method public void navigate(java.util.List<androidx.navigation.NavBackStackEntry> entries, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
method public androidx.navigation.NavDestination? navigate(D destination, android.os.Bundle? args, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
+ method public void navigate(java.util.List<androidx.navigation.NavBackStackEntry> entries, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
method @CallSuper public void onAttach(androidx.navigation.NavigatorState state);
method public void onLaunchSingleTop(androidx.navigation.NavBackStackEntry backStackEntry);
method public void onRestoreState(android.os.Bundle savedState);
method public android.os.Bundle? onSaveState();
- method public void popBackStack(androidx.navigation.NavBackStackEntry popUpTo, boolean savedState);
method public boolean popBackStack();
+ method public void popBackStack(androidx.navigation.NavBackStackEntry popUpTo, boolean savedState);
property public final boolean isAttached;
property protected final androidx.navigation.NavigatorState state;
}
diff --git a/navigation/navigation-common/api/public_plus_experimental_current.txt b/navigation/navigation-common/api/public_plus_experimental_current.txt
index e6d0229..51a77a6 100644
--- a/navigation/navigation-common/api/public_plus_experimental_current.txt
+++ b/navigation/navigation-common/api/public_plus_experimental_current.txt
@@ -44,9 +44,9 @@
}
public final class NavAction {
- ctor public NavAction(@IdRes int destinationId, optional androidx.navigation.NavOptions? navOptions, optional android.os.Bundle? defaultArguments);
- ctor public NavAction(@IdRes int destinationId, optional androidx.navigation.NavOptions? navOptions);
ctor public NavAction(@IdRes int destinationId);
+ ctor public NavAction(@IdRes int destinationId, optional androidx.navigation.NavOptions? navOptions);
+ ctor public NavAction(@IdRes int destinationId, optional androidx.navigation.NavOptions? navOptions, optional android.os.Bundle? defaultArguments);
method public android.os.Bundle? getDefaultArguments();
method public int getDestinationId();
method public androidx.navigation.NavOptions? getNavOptions();
@@ -196,11 +196,11 @@
}
public class NavDestination {
- ctor public NavDestination(String navigatorName);
ctor public NavDestination(androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
+ ctor public NavDestination(String navigatorName);
method public final void addArgument(String argumentName, androidx.navigation.NavArgument argument);
- method public final void addDeepLink(String uriPattern);
method public final void addDeepLink(androidx.navigation.NavDeepLink navDeepLink);
+ method public final void addDeepLink(String uriPattern);
method public final String? fillInLabel(android.content.Context context, android.os.Bundle? bundle);
method public final androidx.navigation.NavAction? getAction(@IdRes int id);
method public final java.util.Map<java.lang.String,androidx.navigation.NavArgument> getArguments();
@@ -214,8 +214,8 @@
method public boolean hasDeepLink(androidx.navigation.NavDeepLinkRequest deepLinkRequest);
method @CallSuper public void onInflate(android.content.Context context, android.util.AttributeSet attrs);
method protected static final <C> Class<? extends C> parseClassFromName(android.content.Context context, String name, Class<? extends C> expectedClassType);
- method public final void putAction(@IdRes int actionId, @IdRes int destId);
method public final void putAction(@IdRes int actionId, androidx.navigation.NavAction action);
+ method public final void putAction(@IdRes int actionId, @IdRes int destId);
method public final void removeAction(@IdRes int actionId);
method public final void removeArgument(String argumentName);
method public final void setId(@IdRes int);
@@ -273,8 +273,8 @@
ctor public NavGraph(androidx.navigation.Navigator<? extends androidx.navigation.NavGraph> navGraphNavigator);
method public final void addAll(androidx.navigation.NavGraph other);
method public final void addDestination(androidx.navigation.NavDestination node);
- method public final void addDestinations(java.util.Collection<? extends androidx.navigation.NavDestination> nodes);
method public final void addDestinations(androidx.navigation.NavDestination... nodes);
+ method public final void addDestinations(java.util.Collection<? extends androidx.navigation.NavDestination> nodes);
method public final void clear();
method public final androidx.navigation.NavDestination? findNode(@IdRes int resId);
method public final androidx.navigation.NavDestination? findNode(String? route);
@@ -307,10 +307,10 @@
}
public final class NavGraphBuilderKt {
- method @Deprecated public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, optional @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
- method public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
method @Deprecated public static inline void navigation(androidx.navigation.NavGraphBuilder, @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
method public static inline void navigation(androidx.navigation.NavGraphBuilder, String startDestination, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
+ method @Deprecated public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, optional @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
+ method public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
}
public final class NavGraphKt {
@@ -358,10 +358,10 @@
method public androidx.navigation.NavOptions.Builder setLaunchSingleTop(boolean singleTop);
method public androidx.navigation.NavOptions.Builder setPopEnterAnim(@AnimRes @AnimatorRes int popEnterAnim);
method public androidx.navigation.NavOptions.Builder setPopExitAnim(@AnimRes @AnimatorRes int popExitAnim);
- method public androidx.navigation.NavOptions.Builder setPopUpTo(@IdRes int destinationId, boolean inclusive, optional boolean saveState);
method public androidx.navigation.NavOptions.Builder setPopUpTo(@IdRes int destinationId, boolean inclusive);
- method public androidx.navigation.NavOptions.Builder setPopUpTo(String? route, boolean inclusive, optional boolean saveState);
+ method public androidx.navigation.NavOptions.Builder setPopUpTo(@IdRes int destinationId, boolean inclusive, optional boolean saveState);
method public androidx.navigation.NavOptions.Builder setPopUpTo(String? route, boolean inclusive);
+ method public androidx.navigation.NavOptions.Builder setPopUpTo(String? route, boolean inclusive, optional boolean saveState);
method public androidx.navigation.NavOptions.Builder setRestoreState(boolean restoreState);
}
@@ -464,14 +464,14 @@
method public abstract D createDestination();
method protected final androidx.navigation.NavigatorState getState();
method public final boolean isAttached();
- method public void navigate(java.util.List<androidx.navigation.NavBackStackEntry> entries, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
method public androidx.navigation.NavDestination? navigate(D destination, android.os.Bundle? args, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
+ method public void navigate(java.util.List<androidx.navigation.NavBackStackEntry> entries, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
method @CallSuper public void onAttach(androidx.navigation.NavigatorState state);
method public void onLaunchSingleTop(androidx.navigation.NavBackStackEntry backStackEntry);
method public void onRestoreState(android.os.Bundle savedState);
method public android.os.Bundle? onSaveState();
- method public void popBackStack(androidx.navigation.NavBackStackEntry popUpTo, boolean savedState);
method public boolean popBackStack();
+ method public void popBackStack(androidx.navigation.NavBackStackEntry popUpTo, boolean savedState);
property public final boolean isAttached;
property protected final androidx.navigation.NavigatorState state;
}
diff --git a/navigation/navigation-common/api/restricted_current.txt b/navigation/navigation-common/api/restricted_current.txt
index e6d0229..51a77a6 100644
--- a/navigation/navigation-common/api/restricted_current.txt
+++ b/navigation/navigation-common/api/restricted_current.txt
@@ -44,9 +44,9 @@
}
public final class NavAction {
- ctor public NavAction(@IdRes int destinationId, optional androidx.navigation.NavOptions? navOptions, optional android.os.Bundle? defaultArguments);
- ctor public NavAction(@IdRes int destinationId, optional androidx.navigation.NavOptions? navOptions);
ctor public NavAction(@IdRes int destinationId);
+ ctor public NavAction(@IdRes int destinationId, optional androidx.navigation.NavOptions? navOptions);
+ ctor public NavAction(@IdRes int destinationId, optional androidx.navigation.NavOptions? navOptions, optional android.os.Bundle? defaultArguments);
method public android.os.Bundle? getDefaultArguments();
method public int getDestinationId();
method public androidx.navigation.NavOptions? getNavOptions();
@@ -196,11 +196,11 @@
}
public class NavDestination {
- ctor public NavDestination(String navigatorName);
ctor public NavDestination(androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
+ ctor public NavDestination(String navigatorName);
method public final void addArgument(String argumentName, androidx.navigation.NavArgument argument);
- method public final void addDeepLink(String uriPattern);
method public final void addDeepLink(androidx.navigation.NavDeepLink navDeepLink);
+ method public final void addDeepLink(String uriPattern);
method public final String? fillInLabel(android.content.Context context, android.os.Bundle? bundle);
method public final androidx.navigation.NavAction? getAction(@IdRes int id);
method public final java.util.Map<java.lang.String,androidx.navigation.NavArgument> getArguments();
@@ -214,8 +214,8 @@
method public boolean hasDeepLink(androidx.navigation.NavDeepLinkRequest deepLinkRequest);
method @CallSuper public void onInflate(android.content.Context context, android.util.AttributeSet attrs);
method protected static final <C> Class<? extends C> parseClassFromName(android.content.Context context, String name, Class<? extends C> expectedClassType);
- method public final void putAction(@IdRes int actionId, @IdRes int destId);
method public final void putAction(@IdRes int actionId, androidx.navigation.NavAction action);
+ method public final void putAction(@IdRes int actionId, @IdRes int destId);
method public final void removeAction(@IdRes int actionId);
method public final void removeArgument(String argumentName);
method public final void setId(@IdRes int);
@@ -273,8 +273,8 @@
ctor public NavGraph(androidx.navigation.Navigator<? extends androidx.navigation.NavGraph> navGraphNavigator);
method public final void addAll(androidx.navigation.NavGraph other);
method public final void addDestination(androidx.navigation.NavDestination node);
- method public final void addDestinations(java.util.Collection<? extends androidx.navigation.NavDestination> nodes);
method public final void addDestinations(androidx.navigation.NavDestination... nodes);
+ method public final void addDestinations(java.util.Collection<? extends androidx.navigation.NavDestination> nodes);
method public final void clear();
method public final androidx.navigation.NavDestination? findNode(@IdRes int resId);
method public final androidx.navigation.NavDestination? findNode(String? route);
@@ -307,10 +307,10 @@
}
public final class NavGraphBuilderKt {
- method @Deprecated public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, optional @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
- method public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
method @Deprecated public static inline void navigation(androidx.navigation.NavGraphBuilder, @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
method public static inline void navigation(androidx.navigation.NavGraphBuilder, String startDestination, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
+ method @Deprecated public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, optional @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
+ method public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
}
public final class NavGraphKt {
@@ -358,10 +358,10 @@
method public androidx.navigation.NavOptions.Builder setLaunchSingleTop(boolean singleTop);
method public androidx.navigation.NavOptions.Builder setPopEnterAnim(@AnimRes @AnimatorRes int popEnterAnim);
method public androidx.navigation.NavOptions.Builder setPopExitAnim(@AnimRes @AnimatorRes int popExitAnim);
- method public androidx.navigation.NavOptions.Builder setPopUpTo(@IdRes int destinationId, boolean inclusive, optional boolean saveState);
method public androidx.navigation.NavOptions.Builder setPopUpTo(@IdRes int destinationId, boolean inclusive);
- method public androidx.navigation.NavOptions.Builder setPopUpTo(String? route, boolean inclusive, optional boolean saveState);
+ method public androidx.navigation.NavOptions.Builder setPopUpTo(@IdRes int destinationId, boolean inclusive, optional boolean saveState);
method public androidx.navigation.NavOptions.Builder setPopUpTo(String? route, boolean inclusive);
+ method public androidx.navigation.NavOptions.Builder setPopUpTo(String? route, boolean inclusive, optional boolean saveState);
method public androidx.navigation.NavOptions.Builder setRestoreState(boolean restoreState);
}
@@ -464,14 +464,14 @@
method public abstract D createDestination();
method protected final androidx.navigation.NavigatorState getState();
method public final boolean isAttached();
- method public void navigate(java.util.List<androidx.navigation.NavBackStackEntry> entries, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
method public androidx.navigation.NavDestination? navigate(D destination, android.os.Bundle? args, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
+ method public void navigate(java.util.List<androidx.navigation.NavBackStackEntry> entries, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
method @CallSuper public void onAttach(androidx.navigation.NavigatorState state);
method public void onLaunchSingleTop(androidx.navigation.NavBackStackEntry backStackEntry);
method public void onRestoreState(android.os.Bundle savedState);
method public android.os.Bundle? onSaveState();
- method public void popBackStack(androidx.navigation.NavBackStackEntry popUpTo, boolean savedState);
method public boolean popBackStack();
+ method public void popBackStack(androidx.navigation.NavBackStackEntry popUpTo, boolean savedState);
property public final boolean isAttached;
property protected final androidx.navigation.NavigatorState state;
}
diff --git a/navigation/navigation-common/build.gradle b/navigation/navigation-common/build.gradle
index 954e0da..91a97ad3 100644
--- a/navigation/navigation-common/build.gradle
+++ b/navigation/navigation-common/build.gradle
@@ -67,7 +67,7 @@
}
androidx {
- name = "Android Navigation Common"
+ name = "Navigation Common"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2017"
description = "Android Navigation-Common"
diff --git a/navigation/navigation-common/src/androidTest/java/androidx/navigation/NavDeepLinkTest.kt b/navigation/navigation-common/src/androidTest/java/androidx/navigation/NavDeepLinkTest.kt
index a4da5ed..c893818 100644
--- a/navigation/navigation-common/src/androidTest/java/androidx/navigation/NavDeepLinkTest.kt
+++ b/navigation/navigation-common/src/androidTest/java/androidx/navigation/NavDeepLinkTest.kt
@@ -24,9 +24,9 @@
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
+import java.io.UnsupportedEncodingException
import kotlin.test.assertFailsWith
import org.junit.Test
-import java.io.UnsupportedEncodingException
@SmallTest
class NavDeepLinkTest {
diff --git a/navigation/navigation-common/src/androidTest/java/androidx/navigation/NavTypeTest.kt b/navigation/navigation-common/src/androidTest/java/androidx/navigation/NavTypeTest.kt
index 91be8b2..457e530 100644
--- a/navigation/navigation-common/src/androidTest/java/androidx/navigation/NavTypeTest.kt
+++ b/navigation/navigation-common/src/androidTest/java/androidx/navigation/NavTypeTest.kt
@@ -23,8 +23,8 @@
import androidx.navigation.common.test.R
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
-import org.junit.Test
import java.io.Serializable
+import org.junit.Test
@SmallTest
class NavTypeTest {
diff --git a/navigation/navigation-common/src/main/java/androidx/navigation/NavigatorState.kt b/navigation/navigation-common/src/main/java/androidx/navigation/NavigatorState.kt
index 5577ac2..9cbe30e 100644
--- a/navigation/navigation-common/src/main/java/androidx/navigation/NavigatorState.kt
+++ b/navigation/navigation-common/src/main/java/androidx/navigation/NavigatorState.kt
@@ -20,11 +20,11 @@
import androidx.annotation.CallSuper
import androidx.annotation.RestrictTo
import androidx.lifecycle.Lifecycle
+import java.util.concurrent.locks.ReentrantLock
+import kotlin.concurrent.withLock
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
-import java.util.concurrent.locks.ReentrantLock
-import kotlin.concurrent.withLock
/**
* The NavigatorState encapsulates the state shared between the [Navigator] and the
diff --git a/navigation/navigation-common/src/test/java/androidx/navigation/NavDestinationTest.kt b/navigation/navigation-common/src/test/java/androidx/navigation/NavDestinationTest.kt
index 97ceb0f..c422999 100644
--- a/navigation/navigation-common/src/test/java/androidx/navigation/NavDestinationTest.kt
+++ b/navigation/navigation-common/src/test/java/androidx/navigation/NavDestinationTest.kt
@@ -24,8 +24,8 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import org.mockito.Mockito.`when`
import org.mockito.Mockito.mock
+import org.mockito.Mockito.`when`
@RunWith(JUnit4::class)
class NavDestinationTest {
diff --git a/navigation/navigation-compose-lint/src/main/java/androidx/navigation/compose/lint/ComposableDestinationInComposeScopeDetector.kt b/navigation/navigation-compose-lint/src/main/java/androidx/navigation/compose/lint/ComposableDestinationInComposeScopeDetector.kt
index 5bba39e..0978c5b 100644
--- a/navigation/navigation-compose-lint/src/main/java/androidx/navigation/compose/lint/ComposableDestinationInComposeScopeDetector.kt
+++ b/navigation/navigation-compose-lint/src/main/java/androidx/navigation/compose/lint/ComposableDestinationInComposeScopeDetector.kt
@@ -31,8 +31,8 @@
import com.android.tools.lint.detector.api.Severity
import com.android.tools.lint.detector.api.SourceCodeScanner
import com.intellij.psi.PsiMethod
-import org.jetbrains.uast.UCallExpression
import java.util.EnumSet
+import org.jetbrains.uast.UCallExpression
/**
* [Detector] that checks `composable` calls to make sure that they are not called inside a
diff --git a/navigation/navigation-compose/api/current.txt b/navigation/navigation-compose/api/current.txt
index 73c5c5d..0f5f67e 100644
--- a/navigation/navigation-compose/api/current.txt
+++ b/navigation/navigation-compose/api/current.txt
@@ -10,7 +10,8 @@
}
@androidx.navigation.NavDestination.ClassType(Composable::class) public static final class ComposeNavigator.Destination extends androidx.navigation.NavDestination {
- ctor public ComposeNavigator.Destination(androidx.navigation.compose.ComposeNavigator navigator, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
+ ctor @Deprecated public ComposeNavigator.Destination(androidx.navigation.compose.ComposeNavigator navigator, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
+ ctor public ComposeNavigator.Destination(androidx.navigation.compose.ComposeNavigator navigator, kotlin.jvm.functions.Function2<? super androidx.compose.animation.AnimatedContentScope,androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
}
public final class DialogHostKt {
@@ -31,9 +32,11 @@
}
public final class NavGraphBuilderKt {
- method public static void composable(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
+ method @Deprecated public static void composable(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<? extends androidx.navigation.NamedNavArgument> arguments, optional java.util.List<? extends androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,? extends kotlin.Unit> content);
+ method public static void composable(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, optional kotlin.jvm.functions.Function1<androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,androidx.compose.animation.EnterTransition>? enterTransition, optional kotlin.jvm.functions.Function1<androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,androidx.compose.animation.ExitTransition>? exitTransition, optional kotlin.jvm.functions.Function1<androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,androidx.compose.animation.EnterTransition>? popEnterTransition, optional kotlin.jvm.functions.Function1<androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,androidx.compose.animation.ExitTransition>? popExitTransition, kotlin.jvm.functions.Function2<? super androidx.compose.animation.AnimatedContentScope,? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
method public static void dialog(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, optional androidx.compose.ui.window.DialogProperties dialogProperties, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
- method public static void navigation(androidx.navigation.NavGraphBuilder, String startDestination, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
+ method @Deprecated public static void navigation(androidx.navigation.NavGraphBuilder, String startDestination, String route, optional java.util.List<? extends androidx.navigation.NamedNavArgument> arguments, optional java.util.List<? extends androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,? extends kotlin.Unit> builder);
+ method public static void navigation(androidx.navigation.NavGraphBuilder, String startDestination, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition>? enterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition>? exitTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition>? popEnterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition>? popExitTransition, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
}
public final class NavHostControllerKt {
@@ -42,8 +45,10 @@
}
public final class NavHostKt {
- method @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, String startDestination, optional androidx.compose.ui.Modifier modifier, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
- method @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, androidx.navigation.NavGraph graph, optional androidx.compose.ui.Modifier modifier);
+ method @Deprecated @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, androidx.navigation.NavGraph graph, optional androidx.compose.ui.Modifier modifier);
+ method @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, androidx.navigation.NavGraph graph, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment contentAlignment, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition> enterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition> exitTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition> popEnterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition> popExitTransition);
+ method @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, String startDestination, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment contentAlignment, optional String? route, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition> enterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition> exitTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition> popEnterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition> popExitTransition, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
+ method @Deprecated @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, String startDestination, optional androidx.compose.ui.Modifier modifier, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,? extends kotlin.Unit> builder);
}
}
diff --git a/navigation/navigation-compose/api/public_plus_experimental_current.txt b/navigation/navigation-compose/api/public_plus_experimental_current.txt
index 73c5c5d..0f5f67e 100644
--- a/navigation/navigation-compose/api/public_plus_experimental_current.txt
+++ b/navigation/navigation-compose/api/public_plus_experimental_current.txt
@@ -10,7 +10,8 @@
}
@androidx.navigation.NavDestination.ClassType(Composable::class) public static final class ComposeNavigator.Destination extends androidx.navigation.NavDestination {
- ctor public ComposeNavigator.Destination(androidx.navigation.compose.ComposeNavigator navigator, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
+ ctor @Deprecated public ComposeNavigator.Destination(androidx.navigation.compose.ComposeNavigator navigator, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
+ ctor public ComposeNavigator.Destination(androidx.navigation.compose.ComposeNavigator navigator, kotlin.jvm.functions.Function2<? super androidx.compose.animation.AnimatedContentScope,androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
}
public final class DialogHostKt {
@@ -31,9 +32,11 @@
}
public final class NavGraphBuilderKt {
- method public static void composable(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
+ method @Deprecated public static void composable(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<? extends androidx.navigation.NamedNavArgument> arguments, optional java.util.List<? extends androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,? extends kotlin.Unit> content);
+ method public static void composable(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, optional kotlin.jvm.functions.Function1<androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,androidx.compose.animation.EnterTransition>? enterTransition, optional kotlin.jvm.functions.Function1<androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,androidx.compose.animation.ExitTransition>? exitTransition, optional kotlin.jvm.functions.Function1<androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,androidx.compose.animation.EnterTransition>? popEnterTransition, optional kotlin.jvm.functions.Function1<androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,androidx.compose.animation.ExitTransition>? popExitTransition, kotlin.jvm.functions.Function2<? super androidx.compose.animation.AnimatedContentScope,? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
method public static void dialog(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, optional androidx.compose.ui.window.DialogProperties dialogProperties, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
- method public static void navigation(androidx.navigation.NavGraphBuilder, String startDestination, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
+ method @Deprecated public static void navigation(androidx.navigation.NavGraphBuilder, String startDestination, String route, optional java.util.List<? extends androidx.navigation.NamedNavArgument> arguments, optional java.util.List<? extends androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,? extends kotlin.Unit> builder);
+ method public static void navigation(androidx.navigation.NavGraphBuilder, String startDestination, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition>? enterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition>? exitTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition>? popEnterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition>? popExitTransition, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
}
public final class NavHostControllerKt {
@@ -42,8 +45,10 @@
}
public final class NavHostKt {
- method @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, String startDestination, optional androidx.compose.ui.Modifier modifier, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
- method @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, androidx.navigation.NavGraph graph, optional androidx.compose.ui.Modifier modifier);
+ method @Deprecated @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, androidx.navigation.NavGraph graph, optional androidx.compose.ui.Modifier modifier);
+ method @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, androidx.navigation.NavGraph graph, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment contentAlignment, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition> enterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition> exitTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition> popEnterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition> popExitTransition);
+ method @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, String startDestination, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment contentAlignment, optional String? route, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition> enterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition> exitTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition> popEnterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition> popExitTransition, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
+ method @Deprecated @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, String startDestination, optional androidx.compose.ui.Modifier modifier, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,? extends kotlin.Unit> builder);
}
}
diff --git a/navigation/navigation-compose/api/restricted_current.txt b/navigation/navigation-compose/api/restricted_current.txt
index 73c5c5d..0f5f67e 100644
--- a/navigation/navigation-compose/api/restricted_current.txt
+++ b/navigation/navigation-compose/api/restricted_current.txt
@@ -10,7 +10,8 @@
}
@androidx.navigation.NavDestination.ClassType(Composable::class) public static final class ComposeNavigator.Destination extends androidx.navigation.NavDestination {
- ctor public ComposeNavigator.Destination(androidx.navigation.compose.ComposeNavigator navigator, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
+ ctor @Deprecated public ComposeNavigator.Destination(androidx.navigation.compose.ComposeNavigator navigator, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
+ ctor public ComposeNavigator.Destination(androidx.navigation.compose.ComposeNavigator navigator, kotlin.jvm.functions.Function2<? super androidx.compose.animation.AnimatedContentScope,androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
}
public final class DialogHostKt {
@@ -31,9 +32,11 @@
}
public final class NavGraphBuilderKt {
- method public static void composable(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
+ method @Deprecated public static void composable(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<? extends androidx.navigation.NamedNavArgument> arguments, optional java.util.List<? extends androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,? extends kotlin.Unit> content);
+ method public static void composable(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, optional kotlin.jvm.functions.Function1<androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,androidx.compose.animation.EnterTransition>? enterTransition, optional kotlin.jvm.functions.Function1<androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,androidx.compose.animation.ExitTransition>? exitTransition, optional kotlin.jvm.functions.Function1<androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,androidx.compose.animation.EnterTransition>? popEnterTransition, optional kotlin.jvm.functions.Function1<androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,androidx.compose.animation.ExitTransition>? popExitTransition, kotlin.jvm.functions.Function2<? super androidx.compose.animation.AnimatedContentScope,? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
method public static void dialog(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, optional androidx.compose.ui.window.DialogProperties dialogProperties, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
- method public static void navigation(androidx.navigation.NavGraphBuilder, String startDestination, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
+ method @Deprecated public static void navigation(androidx.navigation.NavGraphBuilder, String startDestination, String route, optional java.util.List<? extends androidx.navigation.NamedNavArgument> arguments, optional java.util.List<? extends androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,? extends kotlin.Unit> builder);
+ method public static void navigation(androidx.navigation.NavGraphBuilder, String startDestination, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition>? enterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition>? exitTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition>? popEnterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition>? popExitTransition, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
}
public final class NavHostControllerKt {
@@ -42,8 +45,10 @@
}
public final class NavHostKt {
- method @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, String startDestination, optional androidx.compose.ui.Modifier modifier, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
- method @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, androidx.navigation.NavGraph graph, optional androidx.compose.ui.Modifier modifier);
+ method @Deprecated @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, androidx.navigation.NavGraph graph, optional androidx.compose.ui.Modifier modifier);
+ method @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, androidx.navigation.NavGraph graph, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment contentAlignment, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition> enterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition> exitTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition> popEnterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition> popExitTransition);
+ method @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, String startDestination, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.Alignment contentAlignment, optional String? route, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition> enterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition> exitTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.EnterTransition> popEnterTransition, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.AnimatedContentTransitionScope<androidx.navigation.NavBackStackEntry>,? extends androidx.compose.animation.ExitTransition> popExitTransition, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
+ method @Deprecated @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, String startDestination, optional androidx.compose.ui.Modifier modifier, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,? extends kotlin.Unit> builder);
}
}
diff --git a/navigation/navigation-compose/build.gradle b/navigation/navigation-compose/build.gradle
index 09a4d08..1b0b02e 100644
--- a/navigation/navigation-compose/build.gradle
+++ b/navigation/navigation-compose/build.gradle
@@ -27,12 +27,12 @@
dependencies {
implementation(libs.kotlinStdlib)
- implementation("androidx.compose.foundation:foundation-layout:1.0.1")
+ implementation(projectOrArtifact(":compose:foundation:foundation-layout"))
api("androidx.activity:activity-compose:1.7.0")
- api("androidx.compose.animation:animation:1.0.1")
- api("androidx.compose.runtime:runtime:1.0.1")
- api("androidx.compose.runtime:runtime-saveable:1.0.1")
- api("androidx.compose.ui:ui:1.0.1")
+ api(projectOrArtifact(":compose:animation:animation"))
+ api(projectOrArtifact(":compose:runtime:runtime"))
+ api(projectOrArtifact(":compose:runtime:runtime-saveable"))
+ api(projectOrArtifact(":compose:ui:ui"))
api("androidx.lifecycle:lifecycle-viewmodel-compose:2.6.1")
api(projectOrArtifact(":navigation:navigation-runtime-ktx"))
diff --git a/navigation/navigation-compose/integration-tests/navigation-demos/src/main/java/androidx/navigation/compose/demos/BasicNavDemo.kt b/navigation/navigation-compose/integration-tests/navigation-demos/src/main/java/androidx/navigation/compose/demos/BasicNavDemo.kt
index aef7393..105717b 100644
--- a/navigation/navigation-compose/integration-tests/navigation-demos/src/main/java/androidx/navigation/compose/demos/BasicNavDemo.kt
+++ b/navigation/navigation-compose/integration-tests/navigation-demos/src/main/java/androidx/navigation/compose/demos/BasicNavDemo.kt
@@ -16,8 +16,8 @@
package androidx.navigation.compose.demos
-import androidx.navigation.compose.samples.BasicNav
import androidx.compose.runtime.Composable
+import androidx.navigation.compose.samples.BasicNav
@Composable
fun BasicNavDemo() {
diff --git a/navigation/navigation-compose/samples/build.gradle b/navigation/navigation-compose/samples/build.gradle
index b71e29c..b229762 100644
--- a/navigation/navigation-compose/samples/build.gradle
+++ b/navigation/navigation-compose/samples/build.gradle
@@ -39,7 +39,7 @@
}
androidx {
- name = "AndroidX Compose UI Navigation Integration Samples"
+ name = "Compose UI Navigation Integration Samples"
type = LibraryType.SAMPLES
inceptionYear = "2020"
description = "Samples for Compose integration with Navigation"
diff --git a/navigation/navigation-compose/src/androidTest/java/androidx/navigation/compose/NavGraphBuilderTest.kt b/navigation/navigation-compose/src/androidTest/java/androidx/navigation/compose/NavGraphBuilderTest.kt
index 3634fee..619b7db 100644
--- a/navigation/navigation-compose/src/androidTest/java/androidx/navigation/compose/NavGraphBuilderTest.kt
+++ b/navigation/navigation-compose/src/androidTest/java/androidx/navigation/compose/NavGraphBuilderTest.kt
@@ -20,8 +20,8 @@
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.core.net.toUri
-import androidx.navigation.contains
import androidx.navigation.NavDeepLinkRequest
+import androidx.navigation.contains
import androidx.navigation.navArgument
import androidx.navigation.navDeepLink
import androidx.navigation.navigation
diff --git a/navigation/navigation-compose/src/androidTest/java/androidx/navigation/compose/NavHostControllerTest.kt b/navigation/navigation-compose/src/androidTest/java/androidx/navigation/compose/NavHostControllerTest.kt
index f51b862..e1418cf 100644
--- a/navigation/navigation-compose/src/androidTest/java/androidx/navigation/compose/NavHostControllerTest.kt
+++ b/navigation/navigation-compose/src/androidTest/java/androidx/navigation/compose/NavHostControllerTest.kt
@@ -16,6 +16,7 @@
package androidx.navigation.compose
+import androidx.compose.foundation.text.BasicText
import androidx.compose.runtime.State
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
@@ -23,6 +24,7 @@
import androidx.navigation.NavBackStackEntry
import androidx.navigation.NavController
import androidx.navigation.NavHostController
+import androidx.navigation.NoOpNavigator
import androidx.navigation.createGraph
import androidx.navigation.get
import androidx.test.ext.junit.runners.AndroidJUnit4
@@ -42,6 +44,65 @@
val composeTestRule = createComposeRule()
@Test
+ fun testRememberNavController() {
+ lateinit var navController: NavHostController
+
+ composeTestRule.setContent {
+ navController = rememberNavController()
+ // get state to trigger recompose on navigate
+ navController.currentBackStackEntryAsState().value
+ NavHost(navController, startDestination = "first") {
+ composable("first") { BasicText("first") }
+ composable("second") { BasicText("second") }
+ }
+ }
+
+ val navigator = composeTestRule.runOnIdle {
+ navController.navigatorProvider[ComposeNavigator::class]
+ }
+
+ // trigger recompose
+ composeTestRule.runOnIdle {
+ navController.navigate("second")
+ }
+
+ composeTestRule.runOnIdle {
+ assertThat(navController.navigatorProvider[ComposeNavigator::class])
+ .isEqualTo(navigator)
+ }
+ }
+
+ @Test
+ fun testRememberNavControllerAddsCustomNavigator() {
+ lateinit var navController: NavHostController
+
+ composeTestRule.setContent {
+ val customNavigator = remember { NoOpNavigator() }
+ navController = rememberNavController(customNavigator)
+ // get state to trigger recompose on navigate
+ navController.currentBackStackEntryAsState().value
+ NavHost(navController, startDestination = "first") {
+ composable("first") { BasicText("first") }
+ composable("second") { BasicText("second") }
+ }
+ }
+
+ val navigator = composeTestRule.runOnIdle {
+ navController.navigatorProvider[NoOpNavigator::class]
+ }
+
+ // trigger recompose
+ composeTestRule.runOnIdle {
+ navController.navigate("second")
+ }
+
+ composeTestRule.runOnIdle {
+ assertThat(navController.navigatorProvider[NoOpNavigator::class])
+ .isEqualTo(navigator)
+ }
+ }
+
+ @Test
fun testCurrentBackStackEntrySetGraph() {
var currentBackStackEntry: State<NavBackStackEntry?> = mutableStateOf(null)
composeTestRule.setContent {
diff --git a/navigation/navigation-compose/src/androidTest/java/androidx/navigation/compose/NavHostTest.kt b/navigation/navigation-compose/src/androidTest/java/androidx/navigation/compose/NavHostTest.kt
index f9f8d4a..57ffee0 100644
--- a/navigation/navigation-compose/src/androidTest/java/androidx/navigation/compose/NavHostTest.kt
+++ b/navigation/navigation-compose/src/androidTest/java/androidx/navigation/compose/NavHostTest.kt
@@ -827,7 +827,7 @@
}
@Test
- fun testNavHostCrossFade() {
+ fun testNavHostAnimations() {
lateinit var navController: NavHostController
composeTestRule.mainClock.autoAdvance = false
@@ -860,7 +860,7 @@
assertThat(navController.currentBackStackEntry?.lifecycle?.currentState)
.isEqualTo(Lifecycle.State.STARTED)
- // advance half way between the crossfade
+ // advance half way between animations
composeTestRule.mainClock.advanceTimeBy(DefaultDurationMillis.toLong() / 2)
assertThat(firstEntry?.lifecycle?.currentState)
@@ -900,7 +900,7 @@
assertThat(secondEntry?.lifecycle?.currentState)
.isEqualTo(Lifecycle.State.CREATED)
- // advance half way between the crossfade
+ // advance half way between animations
composeTestRule.mainClock.advanceTimeBy(DefaultDurationMillis.toLong() / 2)
assertThat(navController.currentBackStackEntry?.lifecycle?.currentState)
@@ -922,7 +922,7 @@
}
@Test
- fun testNavHostCrossFadeDeeplink() {
+ fun testNavHostDeeplink() {
lateinit var navController: NavHostController
composeTestRule.mainClock.autoAdvance = false
@@ -961,7 +961,7 @@
}
@Test
- fun testStateSavedByCrossFade() {
+ fun testStateSaved() {
lateinit var navController: NavHostController
lateinit var text: MutableState<String>
@@ -1109,6 +1109,25 @@
}
@Test
+ fun testNestedNavHostNullLambda() {
+ lateinit var navController: NavHostController
+
+ composeTestRule.setContent {
+ navController = rememberNavController()
+ NavHost(navController, startDestination = first) {
+ composable(first) { BasicText(first) }
+ navigation(second, "subGraph", enterTransition = { null }) {
+ composable(second) { BasicText(second) }
+ }
+ }
+ }
+
+ composeTestRule.runOnIdle {
+ navController.navigate(second)
+ }
+ }
+
+ @Test
fun testNestedNavHostOnBackPressed() {
var innerLifecycleOwner = TestLifecycleOwner(Lifecycle.State.RESUMED)
val onBackPressedDispatcher = OnBackPressedDispatcher()
diff --git a/navigation/navigation-compose/src/main/java/androidx/navigation/compose/ComposeNavigator.kt b/navigation/navigation-compose/src/main/java/androidx/navigation/compose/ComposeNavigator.kt
index 34f9dcf..9603330 100644
--- a/navigation/navigation-compose/src/main/java/androidx/navigation/compose/ComposeNavigator.kt
+++ b/navigation/navigation-compose/src/main/java/androidx/navigation/compose/ComposeNavigator.kt
@@ -16,7 +16,9 @@
package androidx.navigation.compose
+import androidx.compose.animation.AnimatedContentScope
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableStateOf
import androidx.navigation.NavBackStackEntry
import androidx.navigation.NavDestination
import androidx.navigation.NavOptions
@@ -41,6 +43,8 @@
*/
public val backStack get() = state.backStack
+ internal val isPop = mutableStateOf(false)
+
override fun navigate(
entries: List<NavBackStackEntry>,
navOptions: NavOptions?,
@@ -49,6 +53,7 @@
entries.forEach { entry ->
state.pushWithTransition(entry)
}
+ isPop.value = false
}
override fun createDestination(): Destination {
@@ -57,6 +62,7 @@
override fun popBackStack(popUpTo: NavBackStackEntry, savedState: Boolean) {
state.popWithTransition(popUpTo, savedState)
+ isPop.value = true
}
/**
@@ -79,8 +85,19 @@
@NavDestination.ClassType(Composable::class)
public class Destination(
navigator: ComposeNavigator,
- internal val content: @Composable (NavBackStackEntry) -> Unit
- ) : NavDestination(navigator)
+ internal val content:
+ @Composable AnimatedContentScope.(@JvmSuppressWildcards NavBackStackEntry) -> Unit
+ ) : NavDestination(navigator) {
+
+ @Deprecated(
+ message = "Deprecated in favor of Destination that supports AnimatedContent",
+ level = DeprecationLevel.HIDDEN,
+ )
+ constructor(
+ navigator: ComposeNavigator,
+ content: @Composable (NavBackStackEntry) -> @JvmSuppressWildcards Unit
+ ) : this(navigator, content = { entry -> content(entry) })
+ }
internal companion object {
internal const val NAME = "composable"
diff --git a/navigation/navigation-compose/src/main/java/androidx/navigation/compose/NavGraphBuilder.kt b/navigation/navigation-compose/src/main/java/androidx/navigation/compose/NavGraphBuilder.kt
index 4674b26..52e53bf 100644
--- a/navigation/navigation-compose/src/main/java/androidx/navigation/compose/NavGraphBuilder.kt
+++ b/navigation/navigation-compose/src/main/java/androidx/navigation/compose/NavGraphBuilder.kt
@@ -16,11 +16,16 @@
package androidx.navigation.compose
+import androidx.compose.animation.AnimatedContentScope
+import androidx.compose.animation.AnimatedContentTransitionScope
+import androidx.compose.animation.EnterTransition
+import androidx.compose.animation.ExitTransition
import androidx.compose.runtime.Composable
import androidx.compose.ui.window.DialogProperties
import androidx.navigation.NamedNavArgument
import androidx.navigation.NavBackStackEntry
import androidx.navigation.NavDeepLink
+import androidx.navigation.NavGraph
import androidx.navigation.NavGraphBuilder
import androidx.navigation.get
@@ -32,6 +37,10 @@
* @param deepLinks list of deep links to associate with the destinations
* @param content composable for the destination
*/
+@Deprecated(
+ message = "Deprecated in favor of composable builder that supports AnimatedContent",
+ level = DeprecationLevel.HIDDEN
+)
public fun NavGraphBuilder.composable(
route: String,
arguments: List<NamedNavArgument> = emptyList(),
@@ -39,7 +48,10 @@
content: @Composable (NavBackStackEntry) -> Unit
) {
addDestination(
- ComposeNavigator.Destination(provider[ComposeNavigator::class], content).apply {
+ ComposeNavigator.Destination(provider[ComposeNavigator::class]) {
+ entry ->
+ content(entry)
+ }.apply {
this.route = route
arguments.forEach { (argumentName, argument) ->
addArgument(argumentName, argument)
@@ -52,6 +64,54 @@
}
/**
+ * Add the [Composable] to the [NavGraphBuilder]
+ *
+ * @param route route for the destination
+ * @param arguments list of arguments to associate with destination
+ * @param deepLinks list of deep links to associate with the destinations
+ * @param enterTransition callback to determine the destination's enter transition
+ * @param exitTransition callback to determine the destination's exit transition
+ * @param popEnterTransition callback to determine the destination's popEnter transition
+ * @param popExitTransition callback to determine the destination's popExit transition
+ * @param content composable for the destination
+ */
+public fun NavGraphBuilder.composable(
+ route: String,
+ arguments: List<NamedNavArgument> = emptyList(),
+ deepLinks: List<NavDeepLink> = emptyList(),
+ enterTransition: (@JvmSuppressWildcards
+ AnimatedContentTransitionScope<NavBackStackEntry>.() -> EnterTransition?)? = null,
+ exitTransition: (@JvmSuppressWildcards
+ AnimatedContentTransitionScope<NavBackStackEntry>.() -> ExitTransition?)? = null,
+ popEnterTransition: (@JvmSuppressWildcards
+ AnimatedContentTransitionScope<NavBackStackEntry>.() -> EnterTransition?)? =
+ enterTransition,
+ popExitTransition: (@JvmSuppressWildcards
+ AnimatedContentTransitionScope<NavBackStackEntry>.() -> ExitTransition?)? =
+ exitTransition,
+ content: @Composable AnimatedContentScope.(NavBackStackEntry) -> Unit
+) {
+ addDestination(
+ ComposeNavigator.Destination(
+ provider[ComposeNavigator::class],
+ content
+ ).apply {
+ this.route = route
+ arguments.forEach { (argumentName, argument) ->
+ addArgument(argumentName, argument)
+ }
+ deepLinks.forEach { deepLink ->
+ addDeepLink(deepLink)
+ }
+ enterTransition?.let { enterTransitions[route] = enterTransition }
+ exitTransition?.let { exitTransitions[route] = exitTransition }
+ popEnterTransition?.let { popEnterTransitions[route] = popEnterTransition }
+ popExitTransition?.let { popExitTransitions[route] = popExitTransition }
+ }
+ )
+}
+
+/**
* Construct a nested [NavGraph]
*
* @sample androidx.navigation.compose.samples.NestedNavInGraphWithArgs
@@ -62,6 +122,10 @@
* @param deepLinks list of deep links to associate with the destinations
* @param builder the builder used to construct the graph
*/
+@Deprecated(
+ message = "Deprecated in favor of navigation builder that supports AnimatedContent",
+ level = DeprecationLevel.HIDDEN
+)
public fun NavGraphBuilder.navigation(
startDestination: String,
route: String,
@@ -82,6 +146,55 @@
}
/**
+ * Construct a nested [NavGraph]
+ *
+ * @param startDestination the starting destination's route for this NavGraph
+ * @param route the destination's unique route
+ * @param arguments list of arguments to associate with destination
+ * @param deepLinks list of deep links to associate with the destinations
+ * @param enterTransition callback to define enter transitions for destination in this NavGraph
+ * @param exitTransition callback to define exit transitions for destination in this NavGraph
+ * @param popEnterTransition callback to define pop enter transitions for destination in this
+ * NavGraph
+ * @param popExitTransition callback to define pop exit transitions for destination in this NavGraph
+ * @param builder the builder used to construct the graph
+ *
+ * @return the newly constructed nested NavGraph
+ */
+public fun NavGraphBuilder.navigation(
+ startDestination: String,
+ route: String,
+ arguments: List<NamedNavArgument> = emptyList(),
+ deepLinks: List<NavDeepLink> = emptyList(),
+ enterTransition: (AnimatedContentTransitionScope<NavBackStackEntry>.() -> EnterTransition?)? =
+ null,
+ exitTransition: (AnimatedContentTransitionScope<NavBackStackEntry>.() -> ExitTransition?)? =
+ null,
+ popEnterTransition: (
+ AnimatedContentTransitionScope<NavBackStackEntry>.() -> EnterTransition?
+ )? = enterTransition,
+ popExitTransition: (
+ AnimatedContentTransitionScope<NavBackStackEntry>.() -> ExitTransition?
+ )? = exitTransition,
+ builder: NavGraphBuilder.() -> Unit
+) {
+ addDestination(
+ NavGraphBuilder(provider, startDestination, route).apply(builder).build().apply {
+ arguments.forEach { (argumentName, argument) ->
+ addArgument(argumentName, argument)
+ }
+ deepLinks.forEach { deepLink ->
+ addDeepLink(deepLink)
+ }
+ enterTransition?.let { enterTransitions[route] = enterTransition }
+ exitTransition?.let { exitTransitions[route] = exitTransition }
+ popEnterTransition?.let { popEnterTransitions[route] = popEnterTransition }
+ popExitTransition?.let { popExitTransitions[route] = popExitTransition }
+ }
+ )
+}
+
+/**
* Add the [Composable] to the [NavGraphBuilder] that will be hosted within a
* [androidx.compose.ui.window.Dialog]. This is suitable only when this dialog represents
* a separate screen in your app that needs its own lifecycle and saved state, independent
diff --git a/navigation/navigation-compose/src/main/java/androidx/navigation/compose/NavHost.kt b/navigation/navigation-compose/src/main/java/androidx/navigation/compose/NavHost.kt
index bcd0f6a..210dd46 100644
--- a/navigation/navigation-compose/src/main/java/androidx/navigation/compose/NavHost.kt
+++ b/navigation/navigation-compose/src/main/java/androidx/navigation/compose/NavHost.kt
@@ -16,22 +16,32 @@
package androidx.navigation.compose
+import android.annotation.SuppressLint
import androidx.activity.compose.LocalOnBackPressedDispatcherOwner
-import androidx.compose.animation.Crossfade
+import androidx.compose.animation.AnimatedContent
+import androidx.compose.animation.AnimatedContentTransitionScope
+import androidx.compose.animation.ContentTransform
+import androidx.compose.animation.EnterTransition
+import androidx.compose.animation.ExitTransition
+import androidx.compose.animation.core.tween
+import androidx.compose.animation.core.updateTransition
+import androidx.compose.animation.fadeIn
+import androidx.compose.animation.fadeOut
+import androidx.compose.animation.togetherWith
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveableStateHolder
-import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalInspectionMode
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.lifecycle.viewmodel.compose.LocalViewModelStoreOwner
import androidx.navigation.NavBackStackEntry
import androidx.navigation.NavDestination
+import androidx.navigation.NavDestination.Companion.hierarchy
import androidx.navigation.NavGraph
import androidx.navigation.NavGraphBuilder
import androidx.navigation.NavHostController
@@ -57,6 +67,10 @@
* @param route the route for the graph
* @param builder the builder used to construct the graph
*/
+@Deprecated(
+ message = "Deprecated in favor of NavHost that supports AnimatedContent",
+ level = DeprecationLevel.HIDDEN
+)
@Composable
public fun NavHost(
navController: NavHostController,
@@ -80,6 +94,57 @@
* Once this is called, any Composable within the given [NavGraphBuilder] can be navigated to from
* the provided [navController].
*
+ * The builder passed into this method is [remember]ed. This means that for this NavHost, the
+ * contents of the builder cannot be changed.
+ *
+ * @param navController the navController for this host
+ * @param startDestination the route for the start destination
+ * @param modifier The modifier to be applied to the layout.
+ * @param contentAlignment The [Alignment] of the [AnimatedContent]
+ * @param route the route for the graph
+ * @param enterTransition callback to define enter transitions for destination in this host
+ * @param exitTransition callback to define exit transitions for destination in this host
+ * @param popEnterTransition callback to define popEnter transitions for destination in this host
+ * @param popExitTransition callback to define popExit transitions for destination in this host
+ * @param builder the builder used to construct the graph
+ */
+@Composable
+public fun NavHost(
+ navController: NavHostController,
+ startDestination: String,
+ modifier: Modifier = Modifier,
+ contentAlignment: Alignment = Alignment.Center,
+ route: String? = null,
+ enterTransition: (AnimatedContentTransitionScope<NavBackStackEntry>.() -> EnterTransition) =
+ { fadeIn(animationSpec = tween(700)) },
+ exitTransition: (AnimatedContentTransitionScope<NavBackStackEntry>.() -> ExitTransition) =
+ { fadeOut(animationSpec = tween(700)) },
+ popEnterTransition: (AnimatedContentTransitionScope<NavBackStackEntry>.() -> EnterTransition) =
+ enterTransition,
+ popExitTransition: (AnimatedContentTransitionScope<NavBackStackEntry>.() -> ExitTransition) =
+ exitTransition,
+ builder: NavGraphBuilder.() -> Unit
+) {
+ NavHost(
+ navController,
+ remember(route, startDestination, builder) {
+ navController.createGraph(startDestination, route, builder)
+ },
+ modifier,
+ contentAlignment,
+ enterTransition,
+ exitTransition,
+ popEnterTransition,
+ popExitTransition
+ )
+}
+
+/**
+ * Provides in place in the Compose hierarchy for self contained navigation to occur.
+ *
+ * Once this is called, any Composable within the given [NavGraphBuilder] can be navigated to from
+ * the provided [navController].
+ *
* The graph passed into this method is [remember]ed. This means that for this NavHost, the graph
* cannot be changed.
*
@@ -87,12 +152,49 @@
* @param graph the graph for this host
* @param modifier The modifier to be applied to the layout.
*/
+@Deprecated(
+ message = "Deprecated in favor of NavHost that supports AnimatedContent",
+ level = DeprecationLevel.HIDDEN
+)
@Composable
public fun NavHost(
navController: NavHostController,
graph: NavGraph,
modifier: Modifier = Modifier
+) = NavHost(navController, graph, modifier)
+
+/**
+ * Provides in place in the Compose hierarchy for self contained navigation to occur.
+ *
+ * Once this is called, any Composable within the given [NavGraphBuilder] can be navigated to from
+ * the provided [navController].
+ *
+ * @param navController the navController for this host
+ * @param graph the graph for this host
+ * @param modifier The modifier to be applied to the layout.
+ * @param contentAlignment The [Alignment] of the [AnimatedContent]
+ * @param enterTransition callback to define enter transitions for destination in this host
+ * @param exitTransition callback to define exit transitions for destination in this host
+ * @param popEnterTransition callback to define popEnter transitions for destination in this host
+ * @param popExitTransition callback to define popExit transitions for destination in this host
+ */
+@SuppressLint("StateFlowValueCalledInComposition")
+@Composable
+public fun NavHost(
+ navController: NavHostController,
+ graph: NavGraph,
+ modifier: Modifier = Modifier,
+ contentAlignment: Alignment = Alignment.Center,
+ enterTransition: (AnimatedContentTransitionScope<NavBackStackEntry>.() -> EnterTransition) =
+ { fadeIn(animationSpec = tween(700)) },
+ exitTransition: (AnimatedContentTransitionScope<NavBackStackEntry>.() -> ExitTransition) =
+ { fadeOut(animationSpec = tween(700)) },
+ popEnterTransition: (AnimatedContentTransitionScope<NavBackStackEntry>.() -> EnterTransition) =
+ enterTransition,
+ popExitTransition: (AnimatedContentTransitionScope<NavBackStackEntry>.() -> ExitTransition) =
+ exitTransition,
) {
+
val lifecycleOwner = LocalLifecycleOwner.current
val viewModelStoreOwner = checkNotNull(LocalViewModelStoreOwner.current) {
"NavHost requires a ViewModelStoreOwner to be provided via LocalViewModelStoreOwner"
@@ -127,8 +229,8 @@
) as? ComposeNavigator ?: return
val visibleEntries by remember(navController.visibleEntries) {
navController.visibleEntries.map {
- it.filter {
- entry -> entry.destination.navigatorName == ComposeNavigator.NAME
+ it.filter { entry ->
+ entry.destination.navigatorName == ComposeNavigator.NAME
}
}
}.collectAsState(emptyList())
@@ -139,38 +241,75 @@
visibleEntries.lastOrNull()
}
- var initialCrossfade by remember { mutableStateOf(true) }
if (backStackEntry != null) {
- // while in the scope of the composable, we provide the navBackStackEntry as the
- // ViewModelStoreOwner and LifecycleOwner
- Crossfade(backStackEntry.id, modifier) {
- val lastEntry = if (LocalInspectionMode.current) {
+ val finalEnter: AnimatedContentTransitionScope<NavBackStackEntry>.() -> EnterTransition = {
+ val targetDestination = targetState.destination as ComposeNavigator.Destination
+
+ if (composeNavigator.isPop.value) {
+ targetDestination.hierarchy.firstNotNullOfOrNull { destination ->
+ popEnterTransitions[destination.route]?.invoke(this)
+ } ?: popEnterTransition.invoke(this)
+ } else {
+ targetDestination.hierarchy.firstNotNullOfOrNull { destination ->
+ enterTransitions[destination.route]?.invoke(this)
+ } ?: enterTransition.invoke(this)
+ }
+ }
+
+ val finalExit: AnimatedContentTransitionScope<NavBackStackEntry>.() -> ExitTransition = {
+ val initialDestination = initialState.destination as ComposeNavigator.Destination
+
+ if (composeNavigator.isPop.value) {
+ initialDestination.hierarchy.firstNotNullOfOrNull { destination ->
+ popExitTransitions[destination.route]?.invoke(this)
+ } ?: popExitTransition.invoke(this)
+ } else {
+ initialDestination.hierarchy.firstNotNullOfOrNull { destination ->
+ exitTransitions[destination.route]?.invoke(this)
+ } ?: exitTransition.invoke(this)
+ }
+ }
+
+ val transition = updateTransition(backStackEntry, label = "entry")
+ transition.AnimatedContent(
+ modifier,
+ transitionSpec = {
+ val zIndex = composeNavigator.backStack.value.size.toFloat()
+ // If the initialState of the AnimatedContent is not in visibleEntries, we are in
+ // a case where visible has cleared the old state for some reason, so instead of
+ // attempting to animate away from the initialState, we skip the animation.
+ if (initialState in visibleEntries) {
+ ContentTransform(finalEnter(this), finalExit(this), zIndex)
+ } else {
+ EnterTransition.None togetherWith ExitTransition.None
+ }
+ },
+ contentAlignment,
+ contentKey = { it.id }
+ ) {
+ // In some specific cases, such as clearing your back stack by changing your
+ // start destination, AnimatedContent can contain an entry that is no longer
+ // part of visible entries since it was cleared from the back stack and is not
+ // animating. In these cases the currentEntry will be null, and in those cases,
+ // AnimatedContent will just skip attempting to transition the old entry.
+ // See https://issuetracker.google.com/238686802
+ val currentEntry = if (LocalInspectionMode.current) {
// show startDestination if inspecting (preview)
composeNavigator.backStack.value
} else {
visibleEntries
- }.lastOrNull { entry ->
- it == entry.id
- }
- // We are disposing on a Unit as we only want to dispose when the CrossFade completes
- DisposableEffect(Unit) {
- if (initialCrossfade) {
- // There's no animation for the initial crossfade,
- // so we can instantly mark the transition as complete
- visibleEntries.forEach { entry ->
- composeNavigator.onTransitionComplete(entry)
- }
- initialCrossfade = false
- }
- onDispose {
- visibleEntries.forEach { entry ->
- composeNavigator.onTransitionComplete(entry)
- }
- }
- }
+ }.lastOrNull { entry -> it == entry }
- lastEntry?.LocalOwnersProvider(saveableStateHolder) {
- (lastEntry.destination as ComposeNavigator.Destination).content(lastEntry)
+ // while in the scope of the composable, we provide the navBackStackEntry as the
+ // ViewModelStoreOwner and LifecycleOwner
+ currentEntry?.LocalOwnersProvider(saveableStateHolder) {
+ (currentEntry.destination as ComposeNavigator.Destination)
+ .content(this, currentEntry)
+ }
+ }
+ if (transition.currentState == transition.targetState) {
+ visibleEntries.forEach { entry ->
+ composeNavigator.onTransitionComplete(entry)
}
}
}
@@ -182,3 +321,19 @@
// Show any dialog destinations
DialogHost(dialogNavigator)
}
+
+internal val enterTransitions =
+ mutableMapOf<String?,
+ (AnimatedContentTransitionScope<NavBackStackEntry>.() -> EnterTransition?)?>()
+
+internal val exitTransitions =
+ mutableMapOf<String?,
+ (AnimatedContentTransitionScope<NavBackStackEntry>.() -> ExitTransition?)?>()
+
+internal val popEnterTransitions =
+ mutableMapOf<String?,
+ (AnimatedContentTransitionScope<NavBackStackEntry>.() -> EnterTransition?)?>()
+
+internal val popExitTransitions =
+ mutableMapOf<String?,
+ (AnimatedContentTransitionScope<NavBackStackEntry>.() -> ExitTransition?)?>()
\ No newline at end of file
diff --git a/navigation/navigation-dynamic-features-fragment/api/current.txt b/navigation/navigation-dynamic-features-fragment/api/current.txt
index fe32d9b..cb9e340 100644
--- a/navigation/navigation-dynamic-features-fragment/api/current.txt
+++ b/navigation/navigation-dynamic-features-fragment/api/current.txt
@@ -7,8 +7,8 @@
}
public static final class DynamicFragmentNavigator.Destination extends androidx.navigation.fragment.FragmentNavigator.Destination {
- ctor public DynamicFragmentNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
ctor public DynamicFragmentNavigator.Destination(androidx.navigation.Navigator<? extends androidx.navigation.fragment.FragmentNavigator.Destination> fragmentNavigator);
+ ctor public DynamicFragmentNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
method public String? getModuleName();
method public void setModuleName(String?);
property public final String? moduleName;
@@ -24,25 +24,25 @@
}
public final class DynamicFragmentNavigatorDestinationBuilderKt {
- method @Deprecated public static inline void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, String fragmentClassName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
- method public static inline void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, String fragmentClassName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id);
+ method @Deprecated public static inline void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, String fragmentClassName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route);
+ method public static inline void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, String fragmentClassName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
}
public class DynamicNavHostFragment extends androidx.navigation.fragment.NavHostFragment {
ctor public DynamicNavHostFragment();
- method public static final androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
method public static final androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment create(@NavigationRes int graphResId);
+ method public static final androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
method protected com.google.android.play.core.splitinstall.SplitInstallManager createSplitInstallManager();
field public static final androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment.Companion Companion;
}
public static final class DynamicNavHostFragment.Companion {
- method public androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
method public androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment create(@NavigationRes int graphResId);
+ method public androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
}
}
diff --git a/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_current.txt b/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_current.txt
index fe32d9b..cb9e340 100644
--- a/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_current.txt
+++ b/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_current.txt
@@ -7,8 +7,8 @@
}
public static final class DynamicFragmentNavigator.Destination extends androidx.navigation.fragment.FragmentNavigator.Destination {
- ctor public DynamicFragmentNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
ctor public DynamicFragmentNavigator.Destination(androidx.navigation.Navigator<? extends androidx.navigation.fragment.FragmentNavigator.Destination> fragmentNavigator);
+ ctor public DynamicFragmentNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
method public String? getModuleName();
method public void setModuleName(String?);
property public final String? moduleName;
@@ -24,25 +24,25 @@
}
public final class DynamicFragmentNavigatorDestinationBuilderKt {
- method @Deprecated public static inline void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, String fragmentClassName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
- method public static inline void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, String fragmentClassName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id);
+ method @Deprecated public static inline void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, String fragmentClassName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route);
+ method public static inline void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, String fragmentClassName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
}
public class DynamicNavHostFragment extends androidx.navigation.fragment.NavHostFragment {
ctor public DynamicNavHostFragment();
- method public static final androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
method public static final androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment create(@NavigationRes int graphResId);
+ method public static final androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
method protected com.google.android.play.core.splitinstall.SplitInstallManager createSplitInstallManager();
field public static final androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment.Companion Companion;
}
public static final class DynamicNavHostFragment.Companion {
- method public androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
method public androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment create(@NavigationRes int graphResId);
+ method public androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
}
}
diff --git a/navigation/navigation-dynamic-features-fragment/api/restricted_current.txt b/navigation/navigation-dynamic-features-fragment/api/restricted_current.txt
index fe32d9b..cb9e340 100644
--- a/navigation/navigation-dynamic-features-fragment/api/restricted_current.txt
+++ b/navigation/navigation-dynamic-features-fragment/api/restricted_current.txt
@@ -7,8 +7,8 @@
}
public static final class DynamicFragmentNavigator.Destination extends androidx.navigation.fragment.FragmentNavigator.Destination {
- ctor public DynamicFragmentNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
ctor public DynamicFragmentNavigator.Destination(androidx.navigation.Navigator<? extends androidx.navigation.fragment.FragmentNavigator.Destination> fragmentNavigator);
+ ctor public DynamicFragmentNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
method public String? getModuleName();
method public void setModuleName(String?);
property public final String? moduleName;
@@ -24,25 +24,25 @@
}
public final class DynamicFragmentNavigatorDestinationBuilderKt {
- method @Deprecated public static inline void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, String fragmentClassName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
- method public static inline void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, String fragmentClassName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id);
+ method @Deprecated public static inline void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, String fragmentClassName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route);
+ method public static inline void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, String fragmentClassName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
}
public class DynamicNavHostFragment extends androidx.navigation.fragment.NavHostFragment {
ctor public DynamicNavHostFragment();
- method public static final androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
method public static final androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment create(@NavigationRes int graphResId);
+ method public static final androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
method protected com.google.android.play.core.splitinstall.SplitInstallManager createSplitInstallManager();
field public static final androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment.Companion Companion;
}
public static final class DynamicNavHostFragment.Companion {
- method public androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
method public androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment create(@NavigationRes int graphResId);
+ method public androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
}
}
diff --git a/navigation/navigation-dynamic-features-fragment/build.gradle b/navigation/navigation-dynamic-features-fragment/build.gradle
index 80119e7..931ddb1 100644
--- a/navigation/navigation-dynamic-features-fragment/build.gradle
+++ b/navigation/navigation-dynamic-features-fragment/build.gradle
@@ -64,7 +64,7 @@
}
androidx {
- name = "Android Dynamic Feature Navigation Fragment"
+ name = "Dynamic Feature Navigation Fragment"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2019"
description = "Android Dynamic Feature Navigation Fragment"
diff --git a/navigation/navigation-dynamic-features-fragment/src/androidTest/java/androidx/navigation/dynamicfeatures/fragment/ui/DefaultProgressFragmentTest.kt b/navigation/navigation-dynamic-features-fragment/src/androidTest/java/androidx/navigation/dynamicfeatures/fragment/ui/DefaultProgressFragmentTest.kt
index 99c67e7..b05a6cc 100644
--- a/navigation/navigation-dynamic-features-fragment/src/androidTest/java/androidx/navigation/dynamicfeatures/fragment/ui/DefaultProgressFragmentTest.kt
+++ b/navigation/navigation-dynamic-features-fragment/src/androidTest/java/androidx/navigation/dynamicfeatures/fragment/ui/DefaultProgressFragmentTest.kt
@@ -16,13 +16,13 @@
package androidx.navigation.dynamicfeatures.fragment.ui
-import androidx.navigation.dynamicfeatures.fragment.R as mainR
-import androidx.navigation.dynamicfeatures.fragment.test.R as testR
import android.widget.TextView
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment
import androidx.navigation.dynamicfeatures.fragment.NavigationActivity
+import androidx.navigation.dynamicfeatures.fragment.R as mainR
+import androidx.navigation.dynamicfeatures.fragment.test.R as testR
import androidx.navigation.fragment.findNavController
import androidx.test.core.app.ActivityScenario
import androidx.test.ext.junit.runners.AndroidJUnit4
diff --git a/navigation/navigation-dynamic-features-runtime/api/current.txt b/navigation/navigation-dynamic-features-runtime/api/current.txt
index e4c37db..ff4252b 100644
--- a/navigation/navigation-dynamic-features-runtime/api/current.txt
+++ b/navigation/navigation-dynamic-features-runtime/api/current.txt
@@ -7,8 +7,8 @@
}
public static final class DynamicActivityNavigator.Destination extends androidx.navigation.ActivityNavigator.Destination {
- ctor public DynamicActivityNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
ctor public DynamicActivityNavigator.Destination(androidx.navigation.Navigator<? extends androidx.navigation.ActivityNavigator.Destination> activityNavigator);
+ ctor public DynamicActivityNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
method public String? getModuleName();
method public void setModuleName(String?);
property public final String? moduleName;
@@ -44,9 +44,9 @@
}
public final class DynamicExtras implements androidx.navigation.Navigator.Extras {
- ctor public DynamicExtras(optional androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor, optional androidx.navigation.Navigator.Extras? destinationExtras);
- ctor public DynamicExtras(optional androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor);
ctor public DynamicExtras();
+ ctor public DynamicExtras(optional androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor);
+ ctor public DynamicExtras(optional androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor, optional androidx.navigation.Navigator.Extras? destinationExtras);
method public androidx.navigation.Navigator.Extras? getDestinationExtras();
method public androidx.navigation.dynamicfeatures.DynamicInstallMonitor? getInstallMonitor();
property public final androidx.navigation.Navigator.Extras? destinationExtras;
@@ -134,10 +134,10 @@
}
public final class DynamicNavGraphBuilderKt {
- method @Deprecated public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, optional @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
method @Deprecated public static inline void navigation(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
- method public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
method public static inline void navigation(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String startDestination, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
+ method @Deprecated public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, optional @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
+ method public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
}
public final class NavControllerKt {
diff --git a/navigation/navigation-dynamic-features-runtime/api/public_plus_experimental_current.txt b/navigation/navigation-dynamic-features-runtime/api/public_plus_experimental_current.txt
index e4c37db..ff4252b 100644
--- a/navigation/navigation-dynamic-features-runtime/api/public_plus_experimental_current.txt
+++ b/navigation/navigation-dynamic-features-runtime/api/public_plus_experimental_current.txt
@@ -7,8 +7,8 @@
}
public static final class DynamicActivityNavigator.Destination extends androidx.navigation.ActivityNavigator.Destination {
- ctor public DynamicActivityNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
ctor public DynamicActivityNavigator.Destination(androidx.navigation.Navigator<? extends androidx.navigation.ActivityNavigator.Destination> activityNavigator);
+ ctor public DynamicActivityNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
method public String? getModuleName();
method public void setModuleName(String?);
property public final String? moduleName;
@@ -44,9 +44,9 @@
}
public final class DynamicExtras implements androidx.navigation.Navigator.Extras {
- ctor public DynamicExtras(optional androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor, optional androidx.navigation.Navigator.Extras? destinationExtras);
- ctor public DynamicExtras(optional androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor);
ctor public DynamicExtras();
+ ctor public DynamicExtras(optional androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor);
+ ctor public DynamicExtras(optional androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor, optional androidx.navigation.Navigator.Extras? destinationExtras);
method public androidx.navigation.Navigator.Extras? getDestinationExtras();
method public androidx.navigation.dynamicfeatures.DynamicInstallMonitor? getInstallMonitor();
property public final androidx.navigation.Navigator.Extras? destinationExtras;
@@ -134,10 +134,10 @@
}
public final class DynamicNavGraphBuilderKt {
- method @Deprecated public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, optional @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
method @Deprecated public static inline void navigation(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
- method public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
method public static inline void navigation(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String startDestination, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
+ method @Deprecated public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, optional @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
+ method public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
}
public final class NavControllerKt {
diff --git a/navigation/navigation-dynamic-features-runtime/api/restricted_current.txt b/navigation/navigation-dynamic-features-runtime/api/restricted_current.txt
index e4c37db..ff4252b 100644
--- a/navigation/navigation-dynamic-features-runtime/api/restricted_current.txt
+++ b/navigation/navigation-dynamic-features-runtime/api/restricted_current.txt
@@ -7,8 +7,8 @@
}
public static final class DynamicActivityNavigator.Destination extends androidx.navigation.ActivityNavigator.Destination {
- ctor public DynamicActivityNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
ctor public DynamicActivityNavigator.Destination(androidx.navigation.Navigator<? extends androidx.navigation.ActivityNavigator.Destination> activityNavigator);
+ ctor public DynamicActivityNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
method public String? getModuleName();
method public void setModuleName(String?);
property public final String? moduleName;
@@ -44,9 +44,9 @@
}
public final class DynamicExtras implements androidx.navigation.Navigator.Extras {
- ctor public DynamicExtras(optional androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor, optional androidx.navigation.Navigator.Extras? destinationExtras);
- ctor public DynamicExtras(optional androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor);
ctor public DynamicExtras();
+ ctor public DynamicExtras(optional androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor);
+ ctor public DynamicExtras(optional androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor, optional androidx.navigation.Navigator.Extras? destinationExtras);
method public androidx.navigation.Navigator.Extras? getDestinationExtras();
method public androidx.navigation.dynamicfeatures.DynamicInstallMonitor? getInstallMonitor();
property public final androidx.navigation.Navigator.Extras? destinationExtras;
@@ -134,10 +134,10 @@
}
public final class DynamicNavGraphBuilderKt {
- method @Deprecated public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, optional @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
method @Deprecated public static inline void navigation(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
- method public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
method public static inline void navigation(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String startDestination, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
+ method @Deprecated public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, optional @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
+ method public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
}
public final class NavControllerKt {
diff --git a/navigation/navigation-dynamic-features-runtime/build.gradle b/navigation/navigation-dynamic-features-runtime/build.gradle
index e722e52..497c5ea 100644
--- a/navigation/navigation-dynamic-features-runtime/build.gradle
+++ b/navigation/navigation-dynamic-features-runtime/build.gradle
@@ -60,7 +60,7 @@
}
androidx {
- name = "Android Dynamic Feature Navigation Runtime"
+ name = "Dynamic Feature Navigation Runtime"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2019"
description = "Android Dynamic Feature Navigation Runtime"
diff --git a/navigation/navigation-fragment-ktx/build.gradle b/navigation/navigation-fragment-ktx/build.gradle
index 2cb0659..bd96b86 100644
--- a/navigation/navigation-fragment-ktx/build.gradle
+++ b/navigation/navigation-fragment-ktx/build.gradle
@@ -30,7 +30,7 @@
}
androidx {
- name = "Android Navigation Fragment Kotlin Extensions"
+ name = "Navigation Fragment Kotlin Extensions"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "Android Navigation-Fragment-Ktx"
diff --git a/navigation/navigation-fragment/api/current.txt b/navigation/navigation-fragment/api/current.txt
index 97bdfe6..4a19205 100644
--- a/navigation/navigation-fragment/api/current.txt
+++ b/navigation/navigation-fragment/api/current.txt
@@ -2,10 +2,10 @@
package androidx.navigation {
public final class NavGraphViewModelLazyKt {
- method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
- method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> navGraphViewModels(androidx.fragment.app.Fragment, String navGraphRoute, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+ method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> navGraphViewModels(androidx.fragment.app.Fragment, String navGraphRoute, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+ method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> navGraphViewModels(androidx.fragment.app.Fragment, String navGraphRoute, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
}
}
@@ -104,8 +104,8 @@
public class NavHostFragment extends androidx.fragment.app.Fragment implements androidx.navigation.NavHost {
ctor public NavHostFragment();
- method public static final androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
method public static final androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId);
+ method public static final androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
method @Deprecated protected androidx.navigation.Navigator<? extends androidx.navigation.fragment.FragmentNavigator.Destination> createFragmentNavigator();
method public static final androidx.navigation.NavController findNavController(androidx.fragment.app.Fragment fragment);
method public final androidx.navigation.NavController getNavController();
@@ -116,8 +116,8 @@
}
public static final class NavHostFragment.Companion {
- method public androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
method public androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId);
+ method public androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
method public androidx.navigation.NavController findNavController(androidx.fragment.app.Fragment fragment);
}
diff --git a/navigation/navigation-fragment/api/public_plus_experimental_current.txt b/navigation/navigation-fragment/api/public_plus_experimental_current.txt
index 97bdfe6..4a19205 100644
--- a/navigation/navigation-fragment/api/public_plus_experimental_current.txt
+++ b/navigation/navigation-fragment/api/public_plus_experimental_current.txt
@@ -2,10 +2,10 @@
package androidx.navigation {
public final class NavGraphViewModelLazyKt {
- method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
- method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> navGraphViewModels(androidx.fragment.app.Fragment, String navGraphRoute, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+ method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> navGraphViewModels(androidx.fragment.app.Fragment, String navGraphRoute, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+ method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> navGraphViewModels(androidx.fragment.app.Fragment, String navGraphRoute, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
}
}
@@ -104,8 +104,8 @@
public class NavHostFragment extends androidx.fragment.app.Fragment implements androidx.navigation.NavHost {
ctor public NavHostFragment();
- method public static final androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
method public static final androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId);
+ method public static final androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
method @Deprecated protected androidx.navigation.Navigator<? extends androidx.navigation.fragment.FragmentNavigator.Destination> createFragmentNavigator();
method public static final androidx.navigation.NavController findNavController(androidx.fragment.app.Fragment fragment);
method public final androidx.navigation.NavController getNavController();
@@ -116,8 +116,8 @@
}
public static final class NavHostFragment.Companion {
- method public androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
method public androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId);
+ method public androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
method public androidx.navigation.NavController findNavController(androidx.fragment.app.Fragment fragment);
}
diff --git a/navigation/navigation-fragment/api/restricted_current.txt b/navigation/navigation-fragment/api/restricted_current.txt
index 97bdfe6..4a19205 100644
--- a/navigation/navigation-fragment/api/restricted_current.txt
+++ b/navigation/navigation-fragment/api/restricted_current.txt
@@ -2,10 +2,10 @@
package androidx.navigation {
public final class NavGraphViewModelLazyKt {
- method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
- method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> navGraphViewModels(androidx.fragment.app.Fragment, String navGraphRoute, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+ method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> navGraphViewModels(androidx.fragment.app.Fragment, String navGraphRoute, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+ method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM> navGraphViewModels(androidx.fragment.app.Fragment, String navGraphRoute, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
}
}
@@ -104,8 +104,8 @@
public class NavHostFragment extends androidx.fragment.app.Fragment implements androidx.navigation.NavHost {
ctor public NavHostFragment();
- method public static final androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
method public static final androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId);
+ method public static final androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
method @Deprecated protected androidx.navigation.Navigator<? extends androidx.navigation.fragment.FragmentNavigator.Destination> createFragmentNavigator();
method public static final androidx.navigation.NavController findNavController(androidx.fragment.app.Fragment fragment);
method public final androidx.navigation.NavController getNavController();
@@ -116,8 +116,8 @@
}
public static final class NavHostFragment.Companion {
- method public androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
method public androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId);
+ method public androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
method public androidx.navigation.NavController findNavController(androidx.fragment.app.Fragment fragment);
}
diff --git a/navigation/navigation-fragment/build.gradle b/navigation/navigation-fragment/build.gradle
index f8284f5..7d08548 100644
--- a/navigation/navigation-fragment/build.gradle
+++ b/navigation/navigation-fragment/build.gradle
@@ -23,12 +23,12 @@
}
dependencies {
- api(projectOrArtifact(":fragment:fragment-ktx"))
+ api("androidx.fragment:fragment-ktx:1.6.0-rc01")
api(project(":navigation:navigation-runtime"))
api("androidx.slidingpanelayout:slidingpanelayout:1.2.0")
api(libs.kotlinStdlib)
androidTestImplementation(project(":navigation:navigation-testing"))
- androidTestImplementation(projectOrArtifact(":fragment:fragment-testing"))
+ androidTestImplementation("androidx.fragment:fragment-testing:1.6.0-rc01")
androidTestImplementation(libs.testExtJunit)
androidTestImplementation(libs.testCore)
androidTestImplementation(libs.testRunner)
@@ -43,7 +43,7 @@
}
androidx {
- name = "Android Navigation Fragment"
+ name = "Navigation Fragment"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2017"
description = "Android Navigation-Fragment"
diff --git a/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/DialogFragmentNavigatorTest.kt b/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/DialogFragmentNavigatorTest.kt
index 22cded3..b434bcf 100644
--- a/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/DialogFragmentNavigatorTest.kt
+++ b/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/DialogFragmentNavigatorTest.kt
@@ -35,11 +35,11 @@
import androidx.test.filters.LargeTest
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
+import kotlin.reflect.KClass
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.reflect.KClass
@LargeTest
@RunWith(AndroidJUnit4::class)
diff --git a/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/ImmediateNavigationTest.kt b/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/ImmediateNavigationTest.kt
index 8d3b01b10..fdad624 100644
--- a/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/ImmediateNavigationTest.kt
+++ b/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/ImmediateNavigationTest.kt
@@ -27,11 +27,11 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import androidx.testutils.withActivity
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/MultiNavHostFragmentTest.kt b/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/MultiNavHostFragmentTest.kt
index 1a72855..eb54237 100644
--- a/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/MultiNavHostFragmentTest.kt
+++ b/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/MultiNavHostFragmentTest.kt
@@ -26,10 +26,10 @@
import androidx.testutils.withActivity
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
-import org.junit.Test
-import org.junit.runner.RunWith
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
+import org.junit.Test
+import org.junit.runner.RunWith
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/NavControllerWithFragmentTest.kt b/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/NavControllerWithFragmentTest.kt
index 15a2734..d000958 100644
--- a/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/NavControllerWithFragmentTest.kt
+++ b/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/NavControllerWithFragmentTest.kt
@@ -300,6 +300,60 @@
assertThat(navController.currentBackStackEntry?.destination?.route).isEqualTo("first")
}
+ @LargeTest
+ @Test
+ fun testSystemBackPressAfterPopUpToStartDestinationOffBackStack() = withNavigationActivity {
+ navController.graph = navController.createGraph("first") {
+ fragment<EmptyFragment>("first")
+ fragment<EmptyFragment>("second")
+ fragment<EmptyFragment>("third")
+ }
+ navController.navigate("second")
+ val fm = supportFragmentManager.findFragmentById(R.id.nav_host)?.childFragmentManager
+ fm?.executePendingTransactions()
+
+ navController.navigate("third", navOptions {
+ popUpTo("first") { inclusive = true }
+ })
+ fm?.executePendingTransactions()
+
+ navController.navigate("first")
+ fm?.executePendingTransactions()
+
+ onBackPressedDispatcher.onBackPressed()
+
+ assertThat(navController.currentBackStackEntry?.destination?.route).isEqualTo("third")
+ }
+
+ @LargeTest
+ @Test
+ fun testSystemBackPressAfterPopUpToOffBackStack() = withNavigationActivity {
+ navController.graph = navController.createGraph("first") {
+ fragment<EmptyFragment>("first")
+ fragment<EmptyFragment>("second")
+ fragment<EmptyFragment>("third")
+ fragment<EmptyFragment>("fourth")
+ }
+ navController.navigate("second")
+ val fm = supportFragmentManager.findFragmentById(R.id.nav_host)?.childFragmentManager
+ fm?.executePendingTransactions()
+
+ navController.navigate("third")
+ fm?.executePendingTransactions()
+
+ navController.navigate("fourth", navOptions {
+ popUpTo("second") { inclusive = true }
+ })
+ fm?.executePendingTransactions()
+
+ navController.navigate("second")
+ fm?.executePendingTransactions()
+
+ onBackPressedDispatcher.onBackPressed()
+
+ assertThat(navController.currentBackStackEntry?.destination?.route).isEqualTo("fourth")
+ }
+
private fun withNavigationActivity(
block: NavigationActivity.() -> Unit
) {
diff --git a/navigation/navigation-fragment/src/main/java/androidx/navigation/fragment/FragmentNavigator.kt b/navigation/navigation-fragment/src/main/java/androidx/navigation/fragment/FragmentNavigator.kt
index f92e322..8bb7b8c 100644
--- a/navigation/navigation-fragment/src/main/java/androidx/navigation/fragment/FragmentNavigator.kt
+++ b/navigation/navigation-fragment/src/main/java/androidx/navigation/fragment/FragmentNavigator.kt
@@ -67,7 +67,10 @@
/**
* List of entries that were popped by direct calls to popBackStack (i.e. from NavController)
*/
- private val entriesToPop = mutableSetOf<String>()
+ internal val entriesToPop: Set<String>
+ get() = (state.transitionsInProgress.value - state.backStack.value.toSet())
+ .map { it.id }
+ .toSet()
/**
* Get the back stack from the [state].
@@ -81,7 +84,6 @@
entry.id == fragment.tag
}
if (entry != null) {
- entriesToPop.remove(entry.id)
if (!state.backStack.value.contains(entry)) {
state.markTransitionComplete(entry)
}
@@ -99,7 +101,6 @@
// Once the lifecycle reaches DESTROYED, if the entry is not in the back stack, we can
// mark the transition complete
if (event == Lifecycle.Event.ON_DESTROY) {
- entriesToPop.remove(entry.id)
if (!state.backStack.value.contains(entry)) {
state.markTransitionComplete(entry)
}
@@ -150,16 +151,10 @@
// we need to make sure we still return the entries to their proper final state.
attachClearViewModel(fragment, entry, state)
if (pop) {
- // The entry has already been removed from the back stack so just remove it
- // from the list
- if (!state.backStack.value.contains(entry)) {
- // remove it so we don't falsely identify a direct call to popBackStack
- entriesToPop.remove(entry.id)
- }
// This is the case of system back where we will need to make the call to
// popBackStack. Otherwise, popBackStack was called directly and this should
// end up being a no-op.
- else if (entriesToPop.isEmpty() && fragment.isRemoving) {
+ if (entriesToPop.isEmpty() && fragment.isRemoving) {
state.popWithTransition(entry, false)
}
}
@@ -249,10 +244,6 @@
FragmentManager.POP_BACK_STACK_INCLUSIVE
)
}
- // Add all of the entries that are going to be popped to our set of entries to pop
- poppedList.forEach {
- entriesToPop.add(it.id)
- }
state.popWithTransition(popUpTo, savedState)
}
diff --git a/navigation/navigation-runtime-ktx/build.gradle b/navigation/navigation-runtime-ktx/build.gradle
index 1b497c7..4663086 100644
--- a/navigation/navigation-runtime-ktx/build.gradle
+++ b/navigation/navigation-runtime-ktx/build.gradle
@@ -30,7 +30,7 @@
}
androidx {
- name = "Android Navigation Runtime Kotlin Extensions"
+ name = "Navigation Runtime Kotlin Extensions"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "Android Navigation-Runtime-Ktx"
diff --git a/navigation/navigation-runtime-truth/build.gradle b/navigation/navigation-runtime-truth/build.gradle
index dfc5054..4ff4554f 100644
--- a/navigation/navigation-runtime-truth/build.gradle
+++ b/navigation/navigation-runtime-truth/build.gradle
@@ -38,7 +38,7 @@
}
androidx {
- name = "Android Navigation Runtime Truth"
+ name = "Navigation Runtime Truth"
publish = Publish.NONE
inceptionYear = "2019"
description = "Android Navigation-Runtime-Truth"
diff --git a/navigation/navigation-runtime-truth/src/androidTest/java/androidx/navigation/truth/NavControllerSubjectTest.kt b/navigation/navigation-runtime-truth/src/androidTest/java/androidx/navigation/truth/NavControllerSubjectTest.kt
index 15499c8..10caf31 100644
--- a/navigation/navigation-runtime-truth/src/androidTest/java/androidx/navigation/truth/NavControllerSubjectTest.kt
+++ b/navigation/navigation-runtime-truth/src/androidTest/java/androidx/navigation/truth/NavControllerSubjectTest.kt
@@ -18,8 +18,8 @@
import androidx.navigation.NavController
import androidx.navigation.plusAssign
-import androidx.navigation.truth.test.R
import androidx.navigation.truth.NavControllerSubject.Companion.assertThat
+import androidx.navigation.truth.test.R
import androidx.test.annotation.UiThreadTest
import androidx.test.core.app.ApplicationProvider
import androidx.test.filters.SmallTest
diff --git a/navigation/navigation-runtime/api/current.txt b/navigation/navigation-runtime/api/current.txt
index 39d9a7f..824892c 100644
--- a/navigation/navigation-runtime/api/current.txt
+++ b/navigation/navigation-runtime/api/current.txt
@@ -91,8 +91,8 @@
public class NavController {
ctor public NavController(android.content.Context context);
method public void addOnDestinationChangedListener(androidx.navigation.NavController.OnDestinationChangedListener listener);
- method @MainThread public final boolean clearBackStack(String route);
method @MainThread public final boolean clearBackStack(@IdRes int destinationId);
+ method @MainThread public final boolean clearBackStack(String route);
method public androidx.navigation.NavDeepLinkBuilder createDeepLink();
method public androidx.navigation.NavBackStackEntry getBackStackEntry(@IdRes int destinationId);
method public final androidx.navigation.NavBackStackEntry getBackStackEntry(String route);
@@ -106,10 +106,6 @@
method public androidx.lifecycle.ViewModelStoreOwner getViewModelStoreOwner(@IdRes int navGraphId);
method public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> getVisibleEntries();
method @MainThread public boolean handleDeepLink(android.content.Intent? intent);
- method @MainThread public void navigate(@IdRes int resId);
- method @MainThread public void navigate(@IdRes int resId, android.os.Bundle? args);
- method @MainThread public void navigate(@IdRes int resId, android.os.Bundle? args, androidx.navigation.NavOptions? navOptions);
- method @MainThread public void navigate(@IdRes int resId, android.os.Bundle? args, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
method @MainThread public void navigate(android.net.Uri deepLink);
method @MainThread public void navigate(android.net.Uri deepLink, androidx.navigation.NavOptions? navOptions);
method @MainThread public void navigate(android.net.Uri deepLink, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
@@ -117,25 +113,29 @@
method @MainThread public void navigate(androidx.navigation.NavDeepLinkRequest request, androidx.navigation.NavOptions? navOptions);
method @MainThread public void navigate(androidx.navigation.NavDeepLinkRequest request, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
method @MainThread public void navigate(androidx.navigation.NavDirections directions);
- method @MainThread public void navigate(androidx.navigation.NavDirections directions, androidx.navigation.NavOptions? navOptions);
method @MainThread public void navigate(androidx.navigation.NavDirections directions, androidx.navigation.Navigator.Extras navigatorExtras);
- method @MainThread public final void navigate(String route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavOptionsBuilder,kotlin.Unit> builder);
- method @MainThread public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions, optional androidx.navigation.Navigator.Extras? navigatorExtras);
- method @MainThread public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions);
+ method @MainThread public void navigate(androidx.navigation.NavDirections directions, androidx.navigation.NavOptions? navOptions);
+ method @MainThread public void navigate(@IdRes int resId);
+ method @MainThread public void navigate(@IdRes int resId, android.os.Bundle? args);
+ method @MainThread public void navigate(@IdRes int resId, android.os.Bundle? args, androidx.navigation.NavOptions? navOptions);
+ method @MainThread public void navigate(@IdRes int resId, android.os.Bundle? args, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
method @MainThread public final void navigate(String route);
+ method @MainThread public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions);
+ method @MainThread public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions, optional androidx.navigation.Navigator.Extras? navigatorExtras);
+ method @MainThread public final void navigate(String route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavOptionsBuilder,kotlin.Unit> builder);
method @MainThread public boolean navigateUp();
method @MainThread public boolean popBackStack();
method @MainThread public boolean popBackStack(@IdRes int destinationId, boolean inclusive);
method @MainThread public boolean popBackStack(@IdRes int destinationId, boolean inclusive, boolean saveState);
- method @MainThread public final boolean popBackStack(String route, boolean inclusive, optional boolean saveState);
method @MainThread public final boolean popBackStack(String route, boolean inclusive);
+ method @MainThread public final boolean popBackStack(String route, boolean inclusive, optional boolean saveState);
method public void removeOnDestinationChangedListener(androidx.navigation.NavController.OnDestinationChangedListener listener);
method @CallSuper public void restoreState(android.os.Bundle? navState);
method @CallSuper public android.os.Bundle? saveState();
method @CallSuper @MainThread public void setGraph(androidx.navigation.NavGraph);
+ method @CallSuper @MainThread public void setGraph(androidx.navigation.NavGraph graph, android.os.Bundle? startDestinationArgs);
method @CallSuper @MainThread public void setGraph(@NavigationRes int graphResId);
method @CallSuper @MainThread public void setGraph(@NavigationRes int graphResId, android.os.Bundle? startDestinationArgs);
- method @CallSuper @MainThread public void setGraph(androidx.navigation.NavGraph graph, android.os.Bundle? startDestinationArgs);
property public androidx.navigation.NavBackStackEntry? currentBackStackEntry;
property public final kotlinx.coroutines.flow.Flow<androidx.navigation.NavBackStackEntry> currentBackStackEntryFlow;
property public androidx.navigation.NavDestination? currentDestination;
@@ -162,21 +162,21 @@
public final class NavDeepLinkBuilder {
ctor public NavDeepLinkBuilder(android.content.Context context);
- method public androidx.navigation.NavDeepLinkBuilder addDestination(@IdRes int destId, optional android.os.Bundle? args);
method public androidx.navigation.NavDeepLinkBuilder addDestination(@IdRes int destId);
- method public androidx.navigation.NavDeepLinkBuilder addDestination(String route, optional android.os.Bundle? args);
+ method public androidx.navigation.NavDeepLinkBuilder addDestination(@IdRes int destId, optional android.os.Bundle? args);
method public androidx.navigation.NavDeepLinkBuilder addDestination(String route);
+ method public androidx.navigation.NavDeepLinkBuilder addDestination(String route, optional android.os.Bundle? args);
method public android.app.PendingIntent createPendingIntent();
method public androidx.core.app.TaskStackBuilder createTaskStackBuilder();
method public androidx.navigation.NavDeepLinkBuilder setArguments(android.os.Bundle? args);
- method public androidx.navigation.NavDeepLinkBuilder setComponentName(Class<? extends android.app.Activity> activityClass);
method public androidx.navigation.NavDeepLinkBuilder setComponentName(android.content.ComponentName componentName);
- method public androidx.navigation.NavDeepLinkBuilder setDestination(@IdRes int destId, optional android.os.Bundle? args);
+ method public androidx.navigation.NavDeepLinkBuilder setComponentName(Class<? extends android.app.Activity> activityClass);
method public androidx.navigation.NavDeepLinkBuilder setDestination(@IdRes int destId);
- method public androidx.navigation.NavDeepLinkBuilder setDestination(String destRoute, optional android.os.Bundle? args);
+ method public androidx.navigation.NavDeepLinkBuilder setDestination(@IdRes int destId, optional android.os.Bundle? args);
method public androidx.navigation.NavDeepLinkBuilder setDestination(String destRoute);
- method public androidx.navigation.NavDeepLinkBuilder setGraph(@NavigationRes int navGraphId);
+ method public androidx.navigation.NavDeepLinkBuilder setDestination(String destRoute, optional android.os.Bundle? args);
method public androidx.navigation.NavDeepLinkBuilder setGraph(androidx.navigation.NavGraph navGraph);
+ method public androidx.navigation.NavDeepLinkBuilder setGraph(@NavigationRes int navGraphId);
}
public interface NavHost {
@@ -207,9 +207,9 @@
}
public final class Navigation {
- method public static android.view.View.OnClickListener createNavigateOnClickListener(@IdRes int resId, optional android.os.Bundle? args);
- method public static android.view.View.OnClickListener createNavigateOnClickListener(@IdRes int resId);
method public static android.view.View.OnClickListener createNavigateOnClickListener(androidx.navigation.NavDirections directions);
+ method public static android.view.View.OnClickListener createNavigateOnClickListener(@IdRes int resId);
+ method public static android.view.View.OnClickListener createNavigateOnClickListener(@IdRes int resId, optional android.os.Bundle? args);
method public static androidx.navigation.NavController findNavController(android.app.Activity activity, @IdRes int viewId);
method public static androidx.navigation.NavController findNavController(android.view.View view);
method public static void setViewNavController(android.view.View view, androidx.navigation.NavController? controller);
diff --git a/navigation/navigation-runtime/api/public_plus_experimental_current.txt b/navigation/navigation-runtime/api/public_plus_experimental_current.txt
index 6faf37c..2ec837e 100644
--- a/navigation/navigation-runtime/api/public_plus_experimental_current.txt
+++ b/navigation/navigation-runtime/api/public_plus_experimental_current.txt
@@ -91,8 +91,8 @@
public class NavController {
ctor public NavController(android.content.Context context);
method public void addOnDestinationChangedListener(androidx.navigation.NavController.OnDestinationChangedListener listener);
- method @MainThread public final boolean clearBackStack(String route);
method @MainThread public final boolean clearBackStack(@IdRes int destinationId);
+ method @MainThread public final boolean clearBackStack(String route);
method public androidx.navigation.NavDeepLinkBuilder createDeepLink();
method @androidx.navigation.NavDeepLinkSaveStateControl public static final void enableDeepLinkSaveState(boolean saveState);
method public androidx.navigation.NavBackStackEntry getBackStackEntry(@IdRes int destinationId);
@@ -107,10 +107,6 @@
method public androidx.lifecycle.ViewModelStoreOwner getViewModelStoreOwner(@IdRes int navGraphId);
method public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> getVisibleEntries();
method @MainThread public boolean handleDeepLink(android.content.Intent? intent);
- method @MainThread public void navigate(@IdRes int resId);
- method @MainThread public void navigate(@IdRes int resId, android.os.Bundle? args);
- method @MainThread public void navigate(@IdRes int resId, android.os.Bundle? args, androidx.navigation.NavOptions? navOptions);
- method @MainThread public void navigate(@IdRes int resId, android.os.Bundle? args, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
method @MainThread public void navigate(android.net.Uri deepLink);
method @MainThread public void navigate(android.net.Uri deepLink, androidx.navigation.NavOptions? navOptions);
method @MainThread public void navigate(android.net.Uri deepLink, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
@@ -118,25 +114,29 @@
method @MainThread public void navigate(androidx.navigation.NavDeepLinkRequest request, androidx.navigation.NavOptions? navOptions);
method @MainThread public void navigate(androidx.navigation.NavDeepLinkRequest request, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
method @MainThread public void navigate(androidx.navigation.NavDirections directions);
- method @MainThread public void navigate(androidx.navigation.NavDirections directions, androidx.navigation.NavOptions? navOptions);
method @MainThread public void navigate(androidx.navigation.NavDirections directions, androidx.navigation.Navigator.Extras navigatorExtras);
- method @MainThread public final void navigate(String route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavOptionsBuilder,kotlin.Unit> builder);
- method @MainThread public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions, optional androidx.navigation.Navigator.Extras? navigatorExtras);
- method @MainThread public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions);
+ method @MainThread public void navigate(androidx.navigation.NavDirections directions, androidx.navigation.NavOptions? navOptions);
+ method @MainThread public void navigate(@IdRes int resId);
+ method @MainThread public void navigate(@IdRes int resId, android.os.Bundle? args);
+ method @MainThread public void navigate(@IdRes int resId, android.os.Bundle? args, androidx.navigation.NavOptions? navOptions);
+ method @MainThread public void navigate(@IdRes int resId, android.os.Bundle? args, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
method @MainThread public final void navigate(String route);
+ method @MainThread public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions);
+ method @MainThread public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions, optional androidx.navigation.Navigator.Extras? navigatorExtras);
+ method @MainThread public final void navigate(String route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavOptionsBuilder,kotlin.Unit> builder);
method @MainThread public boolean navigateUp();
method @MainThread public boolean popBackStack();
method @MainThread public boolean popBackStack(@IdRes int destinationId, boolean inclusive);
method @MainThread public boolean popBackStack(@IdRes int destinationId, boolean inclusive, boolean saveState);
- method @MainThread public final boolean popBackStack(String route, boolean inclusive, optional boolean saveState);
method @MainThread public final boolean popBackStack(String route, boolean inclusive);
+ method @MainThread public final boolean popBackStack(String route, boolean inclusive, optional boolean saveState);
method public void removeOnDestinationChangedListener(androidx.navigation.NavController.OnDestinationChangedListener listener);
method @CallSuper public void restoreState(android.os.Bundle? navState);
method @CallSuper public android.os.Bundle? saveState();
method @CallSuper @MainThread public void setGraph(androidx.navigation.NavGraph);
+ method @CallSuper @MainThread public void setGraph(androidx.navigation.NavGraph graph, android.os.Bundle? startDestinationArgs);
method @CallSuper @MainThread public void setGraph(@NavigationRes int graphResId);
method @CallSuper @MainThread public void setGraph(@NavigationRes int graphResId, android.os.Bundle? startDestinationArgs);
- method @CallSuper @MainThread public void setGraph(androidx.navigation.NavGraph graph, android.os.Bundle? startDestinationArgs);
property public androidx.navigation.NavBackStackEntry? currentBackStackEntry;
property public final kotlinx.coroutines.flow.Flow<androidx.navigation.NavBackStackEntry> currentBackStackEntryFlow;
property public androidx.navigation.NavDestination? currentDestination;
@@ -164,21 +164,21 @@
public final class NavDeepLinkBuilder {
ctor public NavDeepLinkBuilder(android.content.Context context);
- method public androidx.navigation.NavDeepLinkBuilder addDestination(@IdRes int destId, optional android.os.Bundle? args);
method public androidx.navigation.NavDeepLinkBuilder addDestination(@IdRes int destId);
- method public androidx.navigation.NavDeepLinkBuilder addDestination(String route, optional android.os.Bundle? args);
+ method public androidx.navigation.NavDeepLinkBuilder addDestination(@IdRes int destId, optional android.os.Bundle? args);
method public androidx.navigation.NavDeepLinkBuilder addDestination(String route);
+ method public androidx.navigation.NavDeepLinkBuilder addDestination(String route, optional android.os.Bundle? args);
method public android.app.PendingIntent createPendingIntent();
method public androidx.core.app.TaskStackBuilder createTaskStackBuilder();
method public androidx.navigation.NavDeepLinkBuilder setArguments(android.os.Bundle? args);
- method public androidx.navigation.NavDeepLinkBuilder setComponentName(Class<? extends android.app.Activity> activityClass);
method public androidx.navigation.NavDeepLinkBuilder setComponentName(android.content.ComponentName componentName);
- method public androidx.navigation.NavDeepLinkBuilder setDestination(@IdRes int destId, optional android.os.Bundle? args);
+ method public androidx.navigation.NavDeepLinkBuilder setComponentName(Class<? extends android.app.Activity> activityClass);
method public androidx.navigation.NavDeepLinkBuilder setDestination(@IdRes int destId);
- method public androidx.navigation.NavDeepLinkBuilder setDestination(String destRoute, optional android.os.Bundle? args);
+ method public androidx.navigation.NavDeepLinkBuilder setDestination(@IdRes int destId, optional android.os.Bundle? args);
method public androidx.navigation.NavDeepLinkBuilder setDestination(String destRoute);
- method public androidx.navigation.NavDeepLinkBuilder setGraph(@NavigationRes int navGraphId);
+ method public androidx.navigation.NavDeepLinkBuilder setDestination(String destRoute, optional android.os.Bundle? args);
method public androidx.navigation.NavDeepLinkBuilder setGraph(androidx.navigation.NavGraph navGraph);
+ method public androidx.navigation.NavDeepLinkBuilder setGraph(@NavigationRes int navGraphId);
}
@kotlin.RequiresOptIn(level=kotlin.RequiresOptIn.Level.WARNING) @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.FUNCTION) public @interface NavDeepLinkSaveStateControl {
@@ -212,9 +212,9 @@
}
public final class Navigation {
- method public static android.view.View.OnClickListener createNavigateOnClickListener(@IdRes int resId, optional android.os.Bundle? args);
- method public static android.view.View.OnClickListener createNavigateOnClickListener(@IdRes int resId);
method public static android.view.View.OnClickListener createNavigateOnClickListener(androidx.navigation.NavDirections directions);
+ method public static android.view.View.OnClickListener createNavigateOnClickListener(@IdRes int resId);
+ method public static android.view.View.OnClickListener createNavigateOnClickListener(@IdRes int resId, optional android.os.Bundle? args);
method public static androidx.navigation.NavController findNavController(android.app.Activity activity, @IdRes int viewId);
method public static androidx.navigation.NavController findNavController(android.view.View view);
method public static void setViewNavController(android.view.View view, androidx.navigation.NavController? controller);
diff --git a/navigation/navigation-runtime/api/restricted_current.txt b/navigation/navigation-runtime/api/restricted_current.txt
index 39d9a7f..824892c 100644
--- a/navigation/navigation-runtime/api/restricted_current.txt
+++ b/navigation/navigation-runtime/api/restricted_current.txt
@@ -91,8 +91,8 @@
public class NavController {
ctor public NavController(android.content.Context context);
method public void addOnDestinationChangedListener(androidx.navigation.NavController.OnDestinationChangedListener listener);
- method @MainThread public final boolean clearBackStack(String route);
method @MainThread public final boolean clearBackStack(@IdRes int destinationId);
+ method @MainThread public final boolean clearBackStack(String route);
method public androidx.navigation.NavDeepLinkBuilder createDeepLink();
method public androidx.navigation.NavBackStackEntry getBackStackEntry(@IdRes int destinationId);
method public final androidx.navigation.NavBackStackEntry getBackStackEntry(String route);
@@ -106,10 +106,6 @@
method public androidx.lifecycle.ViewModelStoreOwner getViewModelStoreOwner(@IdRes int navGraphId);
method public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> getVisibleEntries();
method @MainThread public boolean handleDeepLink(android.content.Intent? intent);
- method @MainThread public void navigate(@IdRes int resId);
- method @MainThread public void navigate(@IdRes int resId, android.os.Bundle? args);
- method @MainThread public void navigate(@IdRes int resId, android.os.Bundle? args, androidx.navigation.NavOptions? navOptions);
- method @MainThread public void navigate(@IdRes int resId, android.os.Bundle? args, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
method @MainThread public void navigate(android.net.Uri deepLink);
method @MainThread public void navigate(android.net.Uri deepLink, androidx.navigation.NavOptions? navOptions);
method @MainThread public void navigate(android.net.Uri deepLink, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
@@ -117,25 +113,29 @@
method @MainThread public void navigate(androidx.navigation.NavDeepLinkRequest request, androidx.navigation.NavOptions? navOptions);
method @MainThread public void navigate(androidx.navigation.NavDeepLinkRequest request, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
method @MainThread public void navigate(androidx.navigation.NavDirections directions);
- method @MainThread public void navigate(androidx.navigation.NavDirections directions, androidx.navigation.NavOptions? navOptions);
method @MainThread public void navigate(androidx.navigation.NavDirections directions, androidx.navigation.Navigator.Extras navigatorExtras);
- method @MainThread public final void navigate(String route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavOptionsBuilder,kotlin.Unit> builder);
- method @MainThread public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions, optional androidx.navigation.Navigator.Extras? navigatorExtras);
- method @MainThread public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions);
+ method @MainThread public void navigate(androidx.navigation.NavDirections directions, androidx.navigation.NavOptions? navOptions);
+ method @MainThread public void navigate(@IdRes int resId);
+ method @MainThread public void navigate(@IdRes int resId, android.os.Bundle? args);
+ method @MainThread public void navigate(@IdRes int resId, android.os.Bundle? args, androidx.navigation.NavOptions? navOptions);
+ method @MainThread public void navigate(@IdRes int resId, android.os.Bundle? args, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
method @MainThread public final void navigate(String route);
+ method @MainThread public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions);
+ method @MainThread public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions, optional androidx.navigation.Navigator.Extras? navigatorExtras);
+ method @MainThread public final void navigate(String route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavOptionsBuilder,kotlin.Unit> builder);
method @MainThread public boolean navigateUp();
method @MainThread public boolean popBackStack();
method @MainThread public boolean popBackStack(@IdRes int destinationId, boolean inclusive);
method @MainThread public boolean popBackStack(@IdRes int destinationId, boolean inclusive, boolean saveState);
- method @MainThread public final boolean popBackStack(String route, boolean inclusive, optional boolean saveState);
method @MainThread public final boolean popBackStack(String route, boolean inclusive);
+ method @MainThread public final boolean popBackStack(String route, boolean inclusive, optional boolean saveState);
method public void removeOnDestinationChangedListener(androidx.navigation.NavController.OnDestinationChangedListener listener);
method @CallSuper public void restoreState(android.os.Bundle? navState);
method @CallSuper public android.os.Bundle? saveState();
method @CallSuper @MainThread public void setGraph(androidx.navigation.NavGraph);
+ method @CallSuper @MainThread public void setGraph(androidx.navigation.NavGraph graph, android.os.Bundle? startDestinationArgs);
method @CallSuper @MainThread public void setGraph(@NavigationRes int graphResId);
method @CallSuper @MainThread public void setGraph(@NavigationRes int graphResId, android.os.Bundle? startDestinationArgs);
- method @CallSuper @MainThread public void setGraph(androidx.navigation.NavGraph graph, android.os.Bundle? startDestinationArgs);
property public androidx.navigation.NavBackStackEntry? currentBackStackEntry;
property public final kotlinx.coroutines.flow.Flow<androidx.navigation.NavBackStackEntry> currentBackStackEntryFlow;
property public androidx.navigation.NavDestination? currentDestination;
@@ -162,21 +162,21 @@
public final class NavDeepLinkBuilder {
ctor public NavDeepLinkBuilder(android.content.Context context);
- method public androidx.navigation.NavDeepLinkBuilder addDestination(@IdRes int destId, optional android.os.Bundle? args);
method public androidx.navigation.NavDeepLinkBuilder addDestination(@IdRes int destId);
- method public androidx.navigation.NavDeepLinkBuilder addDestination(String route, optional android.os.Bundle? args);
+ method public androidx.navigation.NavDeepLinkBuilder addDestination(@IdRes int destId, optional android.os.Bundle? args);
method public androidx.navigation.NavDeepLinkBuilder addDestination(String route);
+ method public androidx.navigation.NavDeepLinkBuilder addDestination(String route, optional android.os.Bundle? args);
method public android.app.PendingIntent createPendingIntent();
method public androidx.core.app.TaskStackBuilder createTaskStackBuilder();
method public androidx.navigation.NavDeepLinkBuilder setArguments(android.os.Bundle? args);
- method public androidx.navigation.NavDeepLinkBuilder setComponentName(Class<? extends android.app.Activity> activityClass);
method public androidx.navigation.NavDeepLinkBuilder setComponentName(android.content.ComponentName componentName);
- method public androidx.navigation.NavDeepLinkBuilder setDestination(@IdRes int destId, optional android.os.Bundle? args);
+ method public androidx.navigation.NavDeepLinkBuilder setComponentName(Class<? extends android.app.Activity> activityClass);
method public androidx.navigation.NavDeepLinkBuilder setDestination(@IdRes int destId);
- method public androidx.navigation.NavDeepLinkBuilder setDestination(String destRoute, optional android.os.Bundle? args);
+ method public androidx.navigation.NavDeepLinkBuilder setDestination(@IdRes int destId, optional android.os.Bundle? args);
method public androidx.navigation.NavDeepLinkBuilder setDestination(String destRoute);
- method public androidx.navigation.NavDeepLinkBuilder setGraph(@NavigationRes int navGraphId);
+ method public androidx.navigation.NavDeepLinkBuilder setDestination(String destRoute, optional android.os.Bundle? args);
method public androidx.navigation.NavDeepLinkBuilder setGraph(androidx.navigation.NavGraph navGraph);
+ method public androidx.navigation.NavDeepLinkBuilder setGraph(@NavigationRes int navGraphId);
}
public interface NavHost {
@@ -207,9 +207,9 @@
}
public final class Navigation {
- method public static android.view.View.OnClickListener createNavigateOnClickListener(@IdRes int resId, optional android.os.Bundle? args);
- method public static android.view.View.OnClickListener createNavigateOnClickListener(@IdRes int resId);
method public static android.view.View.OnClickListener createNavigateOnClickListener(androidx.navigation.NavDirections directions);
+ method public static android.view.View.OnClickListener createNavigateOnClickListener(@IdRes int resId);
+ method public static android.view.View.OnClickListener createNavigateOnClickListener(@IdRes int resId, optional android.os.Bundle? args);
method public static androidx.navigation.NavController findNavController(android.app.Activity activity, @IdRes int viewId);
method public static androidx.navigation.NavController findNavController(android.view.View view);
method public static void setViewNavController(android.view.View view, androidx.navigation.NavController? controller);
diff --git a/navigation/navigation-runtime/build.gradle b/navigation/navigation-runtime/build.gradle
index c7ebc80..ff856e6 100644
--- a/navigation/navigation-runtime/build.gradle
+++ b/navigation/navigation-runtime/build.gradle
@@ -60,7 +60,7 @@
}
androidx {
- name = "Android Navigation Runtime"
+ name = "Navigation Runtime"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2017"
description = "Android Navigation-Runtime"
diff --git a/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavControllerTest.kt b/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavControllerTest.kt
index 8b35f7b..3b662ee 100644
--- a/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavControllerTest.kt
+++ b/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavControllerTest.kt
@@ -54,8 +54,8 @@
import androidx.test.filters.MediumTest
import androidx.test.filters.SdkSuppress
import androidx.testutils.TestNavigator
-import androidx.testutils.withActivity
import androidx.testutils.test
+import androidx.testutils.withActivity
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
import kotlin.test.assertFailsWith
diff --git a/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavControllerViewModelTest.kt b/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavControllerViewModelTest.kt
index d786d7a..2ff68ee9 100644
--- a/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavControllerViewModelTest.kt
+++ b/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavControllerViewModelTest.kt
@@ -20,9 +20,9 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
+import java.util.UUID
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.UUID
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavDeepLinkBuilderTest.kt b/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavDeepLinkBuilderTest.kt
index 7d97f4e..18a7e32 100644
--- a/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavDeepLinkBuilderTest.kt
+++ b/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavDeepLinkBuilderTest.kt
@@ -16,16 +16,16 @@
package androidx.navigation
-import androidx.navigation.test.R
import android.content.Context
import android.os.Bundle
+import androidx.core.os.bundleOf
+import androidx.navigation.test.R
import androidx.test.annotation.UiThreadTest
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.testutils.TestNavigator
import androidx.testutils.test
-import androidx.core.os.bundleOf
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
import org.junit.Test
diff --git a/navigation/navigation-runtime/src/main/java/androidx/navigation/NavController.kt b/navigation/navigation-runtime/src/main/java/androidx/navigation/NavController.kt
index fc7b988e..4176c33 100644
--- a/navigation/navigation-runtime/src/main/java/androidx/navigation/NavController.kt
+++ b/navigation/navigation-runtime/src/main/java/androidx/navigation/NavController.kt
@@ -42,6 +42,8 @@
import androidx.navigation.NavDestination.Companion.createRoute
import androidx.navigation.NavDestination.Companion.hierarchy
import androidx.navigation.NavGraph.Companion.findStartDestination
+import java.util.concurrent.CopyOnWriteArrayList
+import java.util.concurrent.atomic.AtomicInteger
import kotlinx.coroutines.channels.BufferOverflow
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableSharedFlow
@@ -49,8 +51,6 @@
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asSharedFlow
import kotlinx.coroutines.flow.asStateFlow
-import java.util.concurrent.CopyOnWriteArrayList
-import java.util.concurrent.atomic.AtomicInteger
/**
* NavController manages app navigation within a [NavHost].
diff --git a/navigation/navigation-runtime/src/main/java/androidx/navigation/NavDeepLinkBuilder.kt b/navigation/navigation-runtime/src/main/java/androidx/navigation/NavDeepLinkBuilder.kt
index 4c8f16b..2b624ea 100644
--- a/navigation/navigation-runtime/src/main/java/androidx/navigation/NavDeepLinkBuilder.kt
+++ b/navigation/navigation-runtime/src/main/java/androidx/navigation/NavDeepLinkBuilder.kt
@@ -16,10 +16,10 @@
package androidx.navigation
import android.app.Activity
-import android.content.Intent
-import android.content.ComponentName
import android.app.PendingIntent
+import android.content.ComponentName
import android.content.Context
+import android.content.Intent
import android.os.Bundle
import androidx.annotation.IdRes
import androidx.annotation.NavigationRes
diff --git a/navigation/navigation-runtime/src/main/java/androidx/navigation/NavInflater.kt b/navigation/navigation-runtime/src/main/java/androidx/navigation/NavInflater.kt
index 4754d62..7722bba 100644
--- a/navigation/navigation-runtime/src/main/java/androidx/navigation/NavInflater.kt
+++ b/navigation/navigation-runtime/src/main/java/androidx/navigation/NavInflater.kt
@@ -29,9 +29,9 @@
import androidx.core.content.res.use
import androidx.core.content.withStyledAttributes
import androidx.navigation.common.R
+import java.io.IOException
import org.xmlpull.v1.XmlPullParser
import org.xmlpull.v1.XmlPullParserException
-import java.io.IOException
/**
* Class which translates a navigation XML file into a [NavGraph]
diff --git a/navigation/navigation-safe-args-generator/build.gradle b/navigation/navigation-safe-args-generator/build.gradle
index 4b4c91f..988bc00 100644
--- a/navigation/navigation-safe-args-generator/build.gradle
+++ b/navigation/navigation-safe-args-generator/build.gradle
@@ -60,7 +60,7 @@
androidx {
- name = "Android Navigation TypeSafe Arguments Generator"
+ name = "Navigation TypeSafe Arguments Generator"
type = LibraryType.OTHER_CODE_PROCESSOR
inceptionYear = "2017"
description = "Android Navigation TypeSafe Arguments Generator"
diff --git a/navigation/navigation-safe-args-generator/src/main/kotlin/androidx/navigation/safe/args/generator/XmlPositionParser.kt b/navigation/navigation-safe-args-generator/src/main/kotlin/androidx/navigation/safe/args/generator/XmlPositionParser.kt
index 305c54f..d0e29bc 100644
--- a/navigation/navigation-safe-args-generator/src/main/kotlin/androidx/navigation/safe/args/generator/XmlPositionParser.kt
+++ b/navigation/navigation-safe-args-generator/src/main/kotlin/androidx/navigation/safe/args/generator/XmlPositionParser.kt
@@ -16,9 +16,9 @@
package androidx.navigation.safe.args.generator
+import java.io.Reader
import org.xmlpull.v1.XmlPullParser
import org.xmlpull.v1.XmlPullParserFactory
-import java.io.Reader
internal class XmlPositionParser(private val name: String, reader: Reader, val logger: NavLogger) {
private var startLine = 0
diff --git a/navigation/navigation-safe-args-generator/src/main/kotlin/androidx/navigation/safe/args/generator/java/JavaTypes.kt b/navigation/navigation-safe-args-generator/src/main/kotlin/androidx/navigation/safe/args/generator/java/JavaTypes.kt
index fb886bb..0ec5e48 100644
--- a/navigation/navigation-safe-args-generator/src/main/kotlin/androidx/navigation/safe/args/generator/java/JavaTypes.kt
+++ b/navigation/navigation-safe-args-generator/src/main/kotlin/androidx/navigation/safe/args/generator/java/JavaTypes.kt
@@ -35,13 +35,13 @@
import androidx.navigation.safe.args.generator.ObjectType
import androidx.navigation.safe.args.generator.ReferenceArrayType
import androidx.navigation.safe.args.generator.ReferenceType
+import androidx.navigation.safe.args.generator.ReferenceValue
import androidx.navigation.safe.args.generator.StringArrayType
import androidx.navigation.safe.args.generator.StringType
-import androidx.navigation.safe.args.generator.models.Argument
-import androidx.navigation.safe.args.generator.ReferenceValue
import androidx.navigation.safe.args.generator.StringValue
import androidx.navigation.safe.args.generator.WritableValue
import androidx.navigation.safe.args.generator.ext.toClassNameParts
+import androidx.navigation.safe.args.generator.models.Argument
import androidx.navigation.safe.args.generator.models.ResReference
import com.squareup.javapoet.ArrayTypeName
import com.squareup.javapoet.ClassName
diff --git a/navigation/navigation-safe-args-generator/src/main/kotlin/androidx/navigation/safe/args/generator/kotlin/KotlinTypes.kt b/navigation/navigation-safe-args-generator/src/main/kotlin/androidx/navigation/safe/args/generator/kotlin/KotlinTypes.kt
index 5a42e74..4a3a9dd 100644
--- a/navigation/navigation-safe-args-generator/src/main/kotlin/androidx/navigation/safe/args/generator/kotlin/KotlinTypes.kt
+++ b/navigation/navigation-safe-args-generator/src/main/kotlin/androidx/navigation/safe/args/generator/kotlin/KotlinTypes.kt
@@ -52,8 +52,8 @@
import com.squareup.kotlinpoet.INT
import com.squareup.kotlinpoet.LONG
import com.squareup.kotlinpoet.ParameterizedTypeName
-import com.squareup.kotlinpoet.TypeName
import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy
+import com.squareup.kotlinpoet.TypeName
import com.squareup.kotlinpoet.asTypeName
import java.lang.UnsupportedOperationException
diff --git a/navigation/navigation-safe-args-generator/src/test/kotlin/androidx/navigation/safe/args/generator/JavaNavWriterTest.kt b/navigation/navigation-safe-args-generator/src/test/kotlin/androidx/navigation/safe/args/generator/JavaNavWriterTest.kt
index bcd9829..9723d49 100644
--- a/navigation/navigation-safe-args-generator/src/test/kotlin/androidx/navigation/safe/args/generator/JavaNavWriterTest.kt
+++ b/navigation/navigation-safe-args-generator/src/test/kotlin/androidx/navigation/safe/args/generator/JavaNavWriterTest.kt
@@ -29,13 +29,13 @@
import com.squareup.javapoet.ClassName
import com.squareup.javapoet.JavaFile
import com.squareup.javapoet.TypeSpec
+import javax.tools.JavaFileObject
import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.CoreMatchers.not
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import javax.tools.JavaFileObject
@RunWith(JUnit4::class)
class JavaNavWriterTest {
diff --git a/navigation/navigation-safe-args-generator/src/test/kotlin/androidx/navigation/safe/args/generator/NavArgumentResolverTest.kt b/navigation/navigation-safe-args-generator/src/test/kotlin/androidx/navigation/safe/args/generator/NavArgumentResolverTest.kt
index 915faaf..29c9fbf 100644
--- a/navigation/navigation-safe-args-generator/src/test/kotlin/androidx/navigation/safe/args/generator/NavArgumentResolverTest.kt
+++ b/navigation/navigation-safe-args-generator/src/test/kotlin/androidx/navigation/safe/args/generator/NavArgumentResolverTest.kt
@@ -16,19 +16,19 @@
package androidx.navigation.safe.args.generator
+import androidx.navigation.safe.args.generator.ext.capitalize
import androidx.navigation.safe.args.generator.models.Action
import androidx.navigation.safe.args.generator.models.Argument
import androidx.navigation.safe.args.generator.models.Destination
import androidx.navigation.safe.args.generator.models.ResReference
-import androidx.navigation.safe.args.generator.ext.capitalize
import com.squareup.javapoet.ClassName
+import java.util.Locale
import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Assert.fail
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import java.util.Locale
@RunWith(JUnit4::class)
class NavArgumentResolverTest {
diff --git a/navigation/navigation-safe-args-generator/src/test/kotlin/androidx/navigation/safe/args/generator/NavGeneratorTest.kt b/navigation/navigation-safe-args-generator/src/test/kotlin/androidx/navigation/safe/args/generator/NavGeneratorTest.kt
index 7f29cd0..cb2cb9f 100644
--- a/navigation/navigation-safe-args-generator/src/test/kotlin/androidx/navigation/safe/args/generator/NavGeneratorTest.kt
+++ b/navigation/navigation-safe-args-generator/src/test/kotlin/androidx/navigation/safe/args/generator/NavGeneratorTest.kt
@@ -20,6 +20,8 @@
import androidx.navigation.safe.args.generator.kotlin.KotlinCodeFile
import com.google.common.truth.Truth
import com.google.testing.compile.JavaSourcesSubject
+import java.io.File
+import java.lang.IllegalStateException
import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Rule
@@ -27,8 +29,6 @@
import org.junit.rules.TemporaryFolder
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import java.io.File
-import java.lang.IllegalStateException
@RunWith(Parameterized::class)
class NavGeneratorTest(private val generateKotlin: Boolean) {
diff --git a/navigation/navigation-safe-args-gradle-plugin/build.gradle b/navigation/navigation-safe-args-gradle-plugin/build.gradle
index 1d740b2..08697dc 100644
--- a/navigation/navigation-safe-args-gradle-plugin/build.gradle
+++ b/navigation/navigation-safe-args-gradle-plugin/build.gradle
@@ -50,7 +50,7 @@
}
androidx {
- name = "Android Navigation TypeSafe Arguments Gradle Plugin"
+ name = "Navigation TypeSafe Arguments Gradle Plugin"
type = LibraryType.GRADLE_PLUGIN
inceptionYear = "2017"
description = "Android Navigation TypeSafe Arguments Gradle Plugin"
diff --git a/navigation/navigation-safe-args-gradle-plugin/src/main/kotlin/androidx/navigation/safeargs/gradle/ArgumentsGenerationTask.kt b/navigation/navigation-safe-args-gradle-plugin/src/main/kotlin/androidx/navigation/safeargs/gradle/ArgumentsGenerationTask.kt
index 279f78a..b08f9fd 100644
--- a/navigation/navigation-safe-args-gradle-plugin/src/main/kotlin/androidx/navigation/safeargs/gradle/ArgumentsGenerationTask.kt
+++ b/navigation/navigation-safe-args-gradle-plugin/src/main/kotlin/androidx/navigation/safeargs/gradle/ArgumentsGenerationTask.kt
@@ -20,6 +20,8 @@
import androidx.navigation.safe.args.generator.SafeArgsGenerator
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
+import java.io.File
+import javax.inject.Inject
import org.gradle.api.DefaultTask
import org.gradle.api.GradleException
import org.gradle.api.file.ConfigurableFileCollection
@@ -36,8 +38,6 @@
import org.gradle.work.ChangeType
import org.gradle.work.Incremental
import org.gradle.work.InputChanges
-import java.io.File
-import javax.inject.Inject
private const val MAPPING_FILE = "file_mappings.json"
diff --git a/navigation/navigation-safe-args-gradle-plugin/src/main/kotlin/androidx/navigation/safeargs/gradle/SafeArgsPlugin.kt b/navigation/navigation-safe-args-gradle-plugin/src/main/kotlin/androidx/navigation/safeargs/gradle/SafeArgsPlugin.kt
index a50222b..47edf23 100644
--- a/navigation/navigation-safe-args-gradle-plugin/src/main/kotlin/androidx/navigation/safeargs/gradle/SafeArgsPlugin.kt
+++ b/navigation/navigation-safe-args-gradle-plugin/src/main/kotlin/androidx/navigation/safeargs/gradle/SafeArgsPlugin.kt
@@ -23,6 +23,9 @@
import com.android.build.gradle.AppExtension
import com.android.build.gradle.BaseExtension
import com.android.build.gradle.LibraryExtension
+import java.io.File
+import java.util.Locale
+import javax.inject.Inject
import org.gradle.api.GradleException
import org.gradle.api.Plugin
import org.gradle.api.Project
@@ -30,9 +33,6 @@
import org.gradle.api.provider.Provider
import org.gradle.api.provider.ProviderFactory
import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension
-import java.io.File
-import java.util.Locale
-import javax.inject.Inject
private const val PLUGIN_DIRNAME = "navigation-args"
internal const val GENERATED_PATH = "generated/source/$PLUGIN_DIRNAME"
diff --git a/navigation/navigation-safe-args-gradle-plugin/src/test/kotlin/androidx/navigation/safeargs/gradle/BasePluginTest.kt b/navigation/navigation-safe-args-gradle-plugin/src/test/kotlin/androidx/navigation/safeargs/gradle/BasePluginTest.kt
index c3e20c9..5f0e351 100644
--- a/navigation/navigation-safe-args-gradle-plugin/src/test/kotlin/androidx/navigation/safeargs/gradle/BasePluginTest.kt
+++ b/navigation/navigation-safe-args-gradle-plugin/src/test/kotlin/androidx/navigation/safeargs/gradle/BasePluginTest.kt
@@ -17,13 +17,13 @@
package androidx.navigation.safeargs.gradle
import androidx.testutils.gradle.ProjectSetupRule
+import java.io.File
import org.gradle.testkit.runner.BuildResult
import org.gradle.testkit.runner.GradleRunner
import org.gradle.testkit.runner.TaskOutcome
import org.hamcrest.CoreMatchers
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Rule
-import java.io.File
internal const val MAIN_DIR = "androidx/navigation/testapp"
diff --git a/navigation/navigation-testing/api/current.txt b/navigation/navigation-testing/api/current.txt
index 89f60a4..90caa3a 100644
--- a/navigation/navigation-testing/api/current.txt
+++ b/navigation/navigation-testing/api/current.txt
@@ -4,17 +4,17 @@
public final class TestNavHostController extends androidx.navigation.NavHostController {
ctor public TestNavHostController(android.content.Context context);
method public java.util.List<androidx.navigation.NavBackStackEntry> getBackStack();
- method public void setCurrentDestination(@IdRes int destId, optional android.os.Bundle args);
method public void setCurrentDestination(@IdRes int destId);
- method public void setCurrentDestination(String destRoute, optional android.os.Bundle args);
+ method public void setCurrentDestination(@IdRes int destId, optional android.os.Bundle args);
method public void setCurrentDestination(String destRoute);
+ method public void setCurrentDestination(String destRoute, optional android.os.Bundle args);
property public final java.util.List<androidx.navigation.NavBackStackEntry> backStack;
}
public final class TestNavigatorState extends androidx.navigation.NavigatorState {
- ctor public TestNavigatorState(optional android.content.Context? context, optional kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
- ctor public TestNavigatorState(optional android.content.Context? context);
ctor public TestNavigatorState();
+ ctor public TestNavigatorState(optional android.content.Context? context);
+ ctor public TestNavigatorState(optional android.content.Context? context, optional kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
method public androidx.navigation.NavBackStackEntry createBackStackEntry(androidx.navigation.NavDestination destination, android.os.Bundle? arguments);
method public androidx.navigation.NavBackStackEntry restoreBackStackEntry(androidx.navigation.NavBackStackEntry previouslySavedEntry);
}
diff --git a/navigation/navigation-testing/api/public_plus_experimental_current.txt b/navigation/navigation-testing/api/public_plus_experimental_current.txt
index 89f60a4..90caa3a 100644
--- a/navigation/navigation-testing/api/public_plus_experimental_current.txt
+++ b/navigation/navigation-testing/api/public_plus_experimental_current.txt
@@ -4,17 +4,17 @@
public final class TestNavHostController extends androidx.navigation.NavHostController {
ctor public TestNavHostController(android.content.Context context);
method public java.util.List<androidx.navigation.NavBackStackEntry> getBackStack();
- method public void setCurrentDestination(@IdRes int destId, optional android.os.Bundle args);
method public void setCurrentDestination(@IdRes int destId);
- method public void setCurrentDestination(String destRoute, optional android.os.Bundle args);
+ method public void setCurrentDestination(@IdRes int destId, optional android.os.Bundle args);
method public void setCurrentDestination(String destRoute);
+ method public void setCurrentDestination(String destRoute, optional android.os.Bundle args);
property public final java.util.List<androidx.navigation.NavBackStackEntry> backStack;
}
public final class TestNavigatorState extends androidx.navigation.NavigatorState {
- ctor public TestNavigatorState(optional android.content.Context? context, optional kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
- ctor public TestNavigatorState(optional android.content.Context? context);
ctor public TestNavigatorState();
+ ctor public TestNavigatorState(optional android.content.Context? context);
+ ctor public TestNavigatorState(optional android.content.Context? context, optional kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
method public androidx.navigation.NavBackStackEntry createBackStackEntry(androidx.navigation.NavDestination destination, android.os.Bundle? arguments);
method public androidx.navigation.NavBackStackEntry restoreBackStackEntry(androidx.navigation.NavBackStackEntry previouslySavedEntry);
}
diff --git a/navigation/navigation-testing/api/restricted_current.txt b/navigation/navigation-testing/api/restricted_current.txt
index 89f60a4..90caa3a 100644
--- a/navigation/navigation-testing/api/restricted_current.txt
+++ b/navigation/navigation-testing/api/restricted_current.txt
@@ -4,17 +4,17 @@
public final class TestNavHostController extends androidx.navigation.NavHostController {
ctor public TestNavHostController(android.content.Context context);
method public java.util.List<androidx.navigation.NavBackStackEntry> getBackStack();
- method public void setCurrentDestination(@IdRes int destId, optional android.os.Bundle args);
method public void setCurrentDestination(@IdRes int destId);
- method public void setCurrentDestination(String destRoute, optional android.os.Bundle args);
+ method public void setCurrentDestination(@IdRes int destId, optional android.os.Bundle args);
method public void setCurrentDestination(String destRoute);
+ method public void setCurrentDestination(String destRoute, optional android.os.Bundle args);
property public final java.util.List<androidx.navigation.NavBackStackEntry> backStack;
}
public final class TestNavigatorState extends androidx.navigation.NavigatorState {
- ctor public TestNavigatorState(optional android.content.Context? context, optional kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
- ctor public TestNavigatorState(optional android.content.Context? context);
ctor public TestNavigatorState();
+ ctor public TestNavigatorState(optional android.content.Context? context);
+ ctor public TestNavigatorState(optional android.content.Context? context, optional kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
method public androidx.navigation.NavBackStackEntry createBackStackEntry(androidx.navigation.NavDestination destination, android.os.Bundle? arguments);
method public androidx.navigation.NavBackStackEntry restoreBackStackEntry(androidx.navigation.NavBackStackEntry previouslySavedEntry);
}
diff --git a/navigation/navigation-testing/build.gradle b/navigation/navigation-testing/build.gradle
index d30a3fc..4008f8e 100644
--- a/navigation/navigation-testing/build.gradle
+++ b/navigation/navigation-testing/build.gradle
@@ -38,7 +38,7 @@
}
androidx {
- name = "Android Navigation Testing"
+ name = "Navigation Testing"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2017"
description = "Android Navigation-Testing"
diff --git a/navigation/navigation-testing/src/androidTest/java/androidx/navigation/testing/TestNavHostControllerTest.kt b/navigation/navigation-testing/src/androidTest/java/androidx/navigation/testing/TestNavHostControllerTest.kt
index 76aa369..3d9ca21 100644
--- a/navigation/navigation-testing/src/androidTest/java/androidx/navigation/testing/TestNavHostControllerTest.kt
+++ b/navigation/navigation-testing/src/androidTest/java/androidx/navigation/testing/TestNavHostControllerTest.kt
@@ -17,7 +17,6 @@
package androidx.navigation.testing
import android.os.Bundle
-import androidx.test.annotation.UiThreadTest
import androidx.navigation.ActivityNavigator
import androidx.navigation.NavOptions
import androidx.navigation.Navigator
@@ -25,6 +24,7 @@
import androidx.navigation.createGraph
import androidx.navigation.plusAssign
import androidx.navigation.testing.test.R
+import androidx.test.annotation.UiThreadTest
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.ext.truth.os.BundleSubject.assertThat
diff --git a/navigation/navigation-ui-ktx/build.gradle b/navigation/navigation-ui-ktx/build.gradle
index 3cbe68b..23f6129 100644
--- a/navigation/navigation-ui-ktx/build.gradle
+++ b/navigation/navigation-ui-ktx/build.gradle
@@ -30,7 +30,7 @@
}
androidx {
- name = "Android Navigation UI Kotlin Extensions"
+ name = "Navigation UI Kotlin Extensions"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "Android Navigation-UI-Ktx"
diff --git a/navigation/navigation-ui/api/current.txt b/navigation/navigation-ui/api/current.txt
index 27e99a9..a463f82 100644
--- a/navigation/navigation-ui/api/current.txt
+++ b/navigation/navigation-ui/api/current.txt
@@ -19,8 +19,8 @@
}
public static final class AppBarConfiguration.Builder {
- ctor public AppBarConfiguration.Builder(androidx.navigation.NavGraph navGraph);
ctor public AppBarConfiguration.Builder(android.view.Menu topLevelMenu);
+ ctor public AppBarConfiguration.Builder(androidx.navigation.NavGraph navGraph);
ctor public AppBarConfiguration.Builder(int... topLevelDestinationIds);
ctor public AppBarConfiguration.Builder(java.util.Set<java.lang.Integer> topLevelDestinationIds);
method public androidx.navigation.ui.AppBarConfiguration build();
@@ -34,8 +34,8 @@
}
public final class AppBarConfigurationKt {
- method public static inline androidx.navigation.ui.AppBarConfiguration AppBarConfiguration(androidx.navigation.NavGraph navGraph, optional androidx.customview.widget.Openable? drawerLayout, optional kotlin.jvm.functions.Function0<java.lang.Boolean> fallbackOnNavigateUpListener);
method public static inline androidx.navigation.ui.AppBarConfiguration AppBarConfiguration(android.view.Menu topLevelMenu, optional androidx.customview.widget.Openable? drawerLayout, optional kotlin.jvm.functions.Function0<java.lang.Boolean> fallbackOnNavigateUpListener);
+ method public static inline androidx.navigation.ui.AppBarConfiguration AppBarConfiguration(androidx.navigation.NavGraph navGraph, optional androidx.customview.widget.Openable? drawerLayout, optional kotlin.jvm.functions.Function0<java.lang.Boolean> fallbackOnNavigateUpListener);
method public static inline androidx.navigation.ui.AppBarConfiguration AppBarConfiguration(java.util.Set<java.lang.Integer> topLevelDestinationIds, optional androidx.customview.widget.Openable? drawerLayout, optional kotlin.jvm.functions.Function0<java.lang.Boolean> fallbackOnNavigateUpListener);
}
@@ -61,17 +61,17 @@
method public static boolean navigateUp(androidx.navigation.NavController navController, androidx.customview.widget.Openable? openableLayout);
method public static boolean navigateUp(androidx.navigation.NavController navController, androidx.navigation.ui.AppBarConfiguration configuration);
method public static boolean onNavDestinationSelected(android.view.MenuItem item, androidx.navigation.NavController navController);
+ method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity activity, androidx.navigation.NavController navController);
method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity activity, androidx.navigation.NavController navController, androidx.customview.widget.Openable? openableLayout);
method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity activity, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
- method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity activity, androidx.navigation.NavController navController);
+ method public static void setupWithNavController(androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController);
method public static void setupWithNavController(androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, androidx.customview.widget.Openable? openableLayout);
method public static void setupWithNavController(androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
- method public static void setupWithNavController(androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController);
+ method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout collapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController);
method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout collapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, androidx.customview.widget.Openable? openableLayout);
method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout collapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
- method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout collapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController);
- method public static void setupWithNavController(com.google.android.material.navigation.NavigationView navigationView, androidx.navigation.NavController navController);
method public static void setupWithNavController(com.google.android.material.navigation.NavigationBarView navigationBarView, androidx.navigation.NavController navController);
+ method public static void setupWithNavController(com.google.android.material.navigation.NavigationView navigationView, androidx.navigation.NavController navController);
field public static final androidx.navigation.ui.NavigationUI INSTANCE;
}
diff --git a/navigation/navigation-ui/api/public_plus_experimental_current.txt b/navigation/navigation-ui/api/public_plus_experimental_current.txt
index 7cb97e2..5094c7e 100644
--- a/navigation/navigation-ui/api/public_plus_experimental_current.txt
+++ b/navigation/navigation-ui/api/public_plus_experimental_current.txt
@@ -19,8 +19,8 @@
}
public static final class AppBarConfiguration.Builder {
- ctor public AppBarConfiguration.Builder(androidx.navigation.NavGraph navGraph);
ctor public AppBarConfiguration.Builder(android.view.Menu topLevelMenu);
+ ctor public AppBarConfiguration.Builder(androidx.navigation.NavGraph navGraph);
ctor public AppBarConfiguration.Builder(int... topLevelDestinationIds);
ctor public AppBarConfiguration.Builder(java.util.Set<java.lang.Integer> topLevelDestinationIds);
method public androidx.navigation.ui.AppBarConfiguration build();
@@ -34,8 +34,8 @@
}
public final class AppBarConfigurationKt {
- method public static inline androidx.navigation.ui.AppBarConfiguration AppBarConfiguration(androidx.navigation.NavGraph navGraph, optional androidx.customview.widget.Openable? drawerLayout, optional kotlin.jvm.functions.Function0<java.lang.Boolean> fallbackOnNavigateUpListener);
method public static inline androidx.navigation.ui.AppBarConfiguration AppBarConfiguration(android.view.Menu topLevelMenu, optional androidx.customview.widget.Openable? drawerLayout, optional kotlin.jvm.functions.Function0<java.lang.Boolean> fallbackOnNavigateUpListener);
+ method public static inline androidx.navigation.ui.AppBarConfiguration AppBarConfiguration(androidx.navigation.NavGraph navGraph, optional androidx.customview.widget.Openable? drawerLayout, optional kotlin.jvm.functions.Function0<java.lang.Boolean> fallbackOnNavigateUpListener);
method public static inline androidx.navigation.ui.AppBarConfiguration AppBarConfiguration(java.util.Set<java.lang.Integer> topLevelDestinationIds, optional androidx.customview.widget.Openable? drawerLayout, optional kotlin.jvm.functions.Function0<java.lang.Boolean> fallbackOnNavigateUpListener);
}
@@ -62,19 +62,19 @@
method public static boolean navigateUp(androidx.navigation.NavController navController, androidx.navigation.ui.AppBarConfiguration configuration);
method public static boolean onNavDestinationSelected(android.view.MenuItem item, androidx.navigation.NavController navController);
method @androidx.navigation.ui.NavigationUiSaveStateControl public static boolean onNavDestinationSelected(android.view.MenuItem item, androidx.navigation.NavController navController, boolean saveState);
+ method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity activity, androidx.navigation.NavController navController);
method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity activity, androidx.navigation.NavController navController, androidx.customview.widget.Openable? openableLayout);
method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity activity, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
- method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity activity, androidx.navigation.NavController navController);
+ method public static void setupWithNavController(androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController);
method public static void setupWithNavController(androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, androidx.customview.widget.Openable? openableLayout);
method public static void setupWithNavController(androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
- method public static void setupWithNavController(androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController);
+ method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout collapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController);
method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout collapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, androidx.customview.widget.Openable? openableLayout);
method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout collapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
- method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout collapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController);
- method public static void setupWithNavController(com.google.android.material.navigation.NavigationView navigationView, androidx.navigation.NavController navController);
- method @androidx.navigation.ui.NavigationUiSaveStateControl public static void setupWithNavController(com.google.android.material.navigation.NavigationView navigationView, androidx.navigation.NavController navController, boolean saveState);
method public static void setupWithNavController(com.google.android.material.navigation.NavigationBarView navigationBarView, androidx.navigation.NavController navController);
method @androidx.navigation.ui.NavigationUiSaveStateControl public static void setupWithNavController(com.google.android.material.navigation.NavigationBarView navigationBarView, androidx.navigation.NavController navController, boolean saveState);
+ method public static void setupWithNavController(com.google.android.material.navigation.NavigationView navigationView, androidx.navigation.NavController navController);
+ method @androidx.navigation.ui.NavigationUiSaveStateControl public static void setupWithNavController(com.google.android.material.navigation.NavigationView navigationView, androidx.navigation.NavController navController, boolean saveState);
field public static final androidx.navigation.ui.NavigationUI INSTANCE;
}
diff --git a/navigation/navigation-ui/api/restricted_current.txt b/navigation/navigation-ui/api/restricted_current.txt
index 27e99a9..a463f82 100644
--- a/navigation/navigation-ui/api/restricted_current.txt
+++ b/navigation/navigation-ui/api/restricted_current.txt
@@ -19,8 +19,8 @@
}
public static final class AppBarConfiguration.Builder {
- ctor public AppBarConfiguration.Builder(androidx.navigation.NavGraph navGraph);
ctor public AppBarConfiguration.Builder(android.view.Menu topLevelMenu);
+ ctor public AppBarConfiguration.Builder(androidx.navigation.NavGraph navGraph);
ctor public AppBarConfiguration.Builder(int... topLevelDestinationIds);
ctor public AppBarConfiguration.Builder(java.util.Set<java.lang.Integer> topLevelDestinationIds);
method public androidx.navigation.ui.AppBarConfiguration build();
@@ -34,8 +34,8 @@
}
public final class AppBarConfigurationKt {
- method public static inline androidx.navigation.ui.AppBarConfiguration AppBarConfiguration(androidx.navigation.NavGraph navGraph, optional androidx.customview.widget.Openable? drawerLayout, optional kotlin.jvm.functions.Function0<java.lang.Boolean> fallbackOnNavigateUpListener);
method public static inline androidx.navigation.ui.AppBarConfiguration AppBarConfiguration(android.view.Menu topLevelMenu, optional androidx.customview.widget.Openable? drawerLayout, optional kotlin.jvm.functions.Function0<java.lang.Boolean> fallbackOnNavigateUpListener);
+ method public static inline androidx.navigation.ui.AppBarConfiguration AppBarConfiguration(androidx.navigation.NavGraph navGraph, optional androidx.customview.widget.Openable? drawerLayout, optional kotlin.jvm.functions.Function0<java.lang.Boolean> fallbackOnNavigateUpListener);
method public static inline androidx.navigation.ui.AppBarConfiguration AppBarConfiguration(java.util.Set<java.lang.Integer> topLevelDestinationIds, optional androidx.customview.widget.Openable? drawerLayout, optional kotlin.jvm.functions.Function0<java.lang.Boolean> fallbackOnNavigateUpListener);
}
@@ -61,17 +61,17 @@
method public static boolean navigateUp(androidx.navigation.NavController navController, androidx.customview.widget.Openable? openableLayout);
method public static boolean navigateUp(androidx.navigation.NavController navController, androidx.navigation.ui.AppBarConfiguration configuration);
method public static boolean onNavDestinationSelected(android.view.MenuItem item, androidx.navigation.NavController navController);
+ method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity activity, androidx.navigation.NavController navController);
method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity activity, androidx.navigation.NavController navController, androidx.customview.widget.Openable? openableLayout);
method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity activity, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
- method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity activity, androidx.navigation.NavController navController);
+ method public static void setupWithNavController(androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController);
method public static void setupWithNavController(androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, androidx.customview.widget.Openable? openableLayout);
method public static void setupWithNavController(androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
- method public static void setupWithNavController(androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController);
+ method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout collapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController);
method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout collapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, androidx.customview.widget.Openable? openableLayout);
method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout collapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
- method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout collapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController);
- method public static void setupWithNavController(com.google.android.material.navigation.NavigationView navigationView, androidx.navigation.NavController navController);
method public static void setupWithNavController(com.google.android.material.navigation.NavigationBarView navigationBarView, androidx.navigation.NavController navController);
+ method public static void setupWithNavController(com.google.android.material.navigation.NavigationView navigationView, androidx.navigation.NavController navController);
field public static final androidx.navigation.ui.NavigationUI INSTANCE;
}
diff --git a/navigation/navigation-ui/build.gradle b/navigation/navigation-ui/build.gradle
index 5dd6cca..4877297 100644
--- a/navigation/navigation-ui/build.gradle
+++ b/navigation/navigation-ui/build.gradle
@@ -55,7 +55,7 @@
}
androidx {
- name = "Android Navigation UI"
+ name = "Navigation UI"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "Android Navigation-UI"
diff --git a/paging/integration-tests/testapp/src/androidTest/kotlin/androidx/paging/integration/testapp/v3/OnPagesUpdatedTest.kt b/paging/integration-tests/testapp/src/androidTest/kotlin/androidx/paging/integration/testapp/v3/OnPagesUpdatedTest.kt
index fe5a24b..e816c7c 100644
--- a/paging/integration-tests/testapp/src/androidTest/kotlin/androidx/paging/integration/testapp/v3/OnPagesUpdatedTest.kt
+++ b/paging/integration-tests/testapp/src/androidTest/kotlin/androidx/paging/integration/testapp/v3/OnPagesUpdatedTest.kt
@@ -22,6 +22,8 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import com.google.common.truth.Truth.assertThat
+import kotlin.coroutines.EmptyCoroutineContext
+import kotlin.test.assertTrue
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -40,8 +42,6 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.coroutines.EmptyCoroutineContext
-import kotlin.test.assertTrue
@LargeTest
@RunWith(AndroidJUnit4::class)
@@ -105,7 +105,7 @@
try {
while (true) {
processNextPageUpdateCh.trySend(Unit)
- onPagesUpdatedEventsCh.receiveWithTimeoutMillis(10_000)
+ onPagesUpdatedEventsCh.receiveWithTimeoutMillis(1000)
pageUpdates++
}
} catch (e: TimeoutCancellationException) {
diff --git a/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/custom/ItemDataSource.kt b/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/custom/ItemDataSource.kt
index a107d6e..cbefb66 100644
--- a/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/custom/ItemDataSource.kt
+++ b/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/custom/ItemDataSource.kt
@@ -20,8 +20,8 @@
import androidx.annotation.ColorInt
import androidx.paging.PagingSource
import androidx.paging.PagingState
-import kotlinx.coroutines.delay
import java.util.concurrent.atomic.AtomicBoolean
+import kotlinx.coroutines.delay
val dataSourceError = AtomicBoolean(false)
diff --git a/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/v3/ItemPagingSource.kt b/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/v3/ItemPagingSource.kt
index e7f4e4a..fd4b1bf 100644
--- a/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/v3/ItemPagingSource.kt
+++ b/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/v3/ItemPagingSource.kt
@@ -20,8 +20,8 @@
import androidx.annotation.ColorInt
import androidx.paging.PagingSource
import androidx.paging.PagingState
-import kotlinx.coroutines.delay
import java.util.concurrent.atomic.AtomicBoolean
+import kotlinx.coroutines.delay
val dataSourceError = AtomicBoolean(false)
diff --git a/paging/paging-common-ktx/build.gradle b/paging/paging-common-ktx/build.gradle
index bab41ca..f5a7a7e 100644
--- a/paging/paging-common-ktx/build.gradle
+++ b/paging/paging-common-ktx/build.gradle
@@ -26,7 +26,7 @@
}
androidx {
- name = "Android Paging-Common Kotlin Extensions"
+ name = "Paging-Common Kotlin Extensions"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "Kotlin extensions for 'paging-common' artifact"
diff --git a/paging/paging-common/api/current.txt b/paging/paging-common/api/current.txt
index 2070710..ffc28e1 100644
--- a/paging/paging-common/api/current.txt
+++ b/paging/paging-common/api/current.txt
@@ -33,8 +33,8 @@
public abstract static class DataSource.Factory<Key, Value> {
ctor public DataSource.Factory();
- method public final kotlin.jvm.functions.Function0<androidx.paging.PagingSource<Key,Value>> asPagingSourceFactory(optional kotlinx.coroutines.CoroutineDispatcher fetchDispatcher);
method public final kotlin.jvm.functions.Function0<androidx.paging.PagingSource<Key,Value>> asPagingSourceFactory();
+ method public final kotlin.jvm.functions.Function0<androidx.paging.PagingSource<Key,Value>> asPagingSourceFactory(optional kotlinx.coroutines.CoroutineDispatcher fetchDispatcher);
method public abstract androidx.paging.DataSource<Key,Value> create();
method public <ToValue> androidx.paging.DataSource.Factory<Key,ToValue> map(androidx.arch.core.util.Function<Value,ToValue> function);
method @kotlin.jvm.JvmSynthetic public <ToValue> androidx.paging.DataSource.Factory<Key,ToValue> map(kotlin.jvm.functions.Function1<? super Value,? extends ToValue> function);
@@ -181,8 +181,8 @@
}
@Deprecated public abstract class PagedList<T> extends java.util.AbstractList<T> {
- method @Deprecated public final void addWeakCallback(java.util.List<? extends T>? previousSnapshot, androidx.paging.PagedList.Callback callback);
method @Deprecated public final void addWeakCallback(androidx.paging.PagedList.Callback callback);
+ method @Deprecated public final void addWeakCallback(java.util.List<? extends T>? previousSnapshot, androidx.paging.PagedList.Callback callback);
method @Deprecated public final void addWeakLoadStateListener(kotlin.jvm.functions.Function2<? super androidx.paging.LoadType,? super androidx.paging.LoadState,kotlin.Unit> listener);
method @Deprecated public abstract void detach();
method @Deprecated public T? get(int index);
@@ -273,12 +273,12 @@
}
public final class PagingConfig {
- ctor public PagingConfig(int pageSize, optional @IntRange(from=0L) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1L) int initialLoadSize, optional @IntRange(from=2L) int maxSize, optional int jumpThreshold);
- ctor public PagingConfig(int pageSize, optional @IntRange(from=0L) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1L) int initialLoadSize, optional @IntRange(from=2L) int maxSize);
- ctor public PagingConfig(int pageSize, optional @IntRange(from=0L) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1L) int initialLoadSize);
- ctor public PagingConfig(int pageSize, optional @IntRange(from=0L) int prefetchDistance, optional boolean enablePlaceholders);
- ctor public PagingConfig(int pageSize, optional @IntRange(from=0L) int prefetchDistance);
ctor public PagingConfig(int pageSize);
+ ctor public PagingConfig(int pageSize, optional @IntRange(from=0L) int prefetchDistance);
+ ctor public PagingConfig(int pageSize, optional @IntRange(from=0L) int prefetchDistance, optional boolean enablePlaceholders);
+ ctor public PagingConfig(int pageSize, optional @IntRange(from=0L) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1L) int initialLoadSize);
+ ctor public PagingConfig(int pageSize, optional @IntRange(from=0L) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1L) int initialLoadSize, optional @IntRange(from=2L) int maxSize);
+ ctor public PagingConfig(int pageSize, optional @IntRange(from=0L) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1L) int initialLoadSize, optional @IntRange(from=2L) int maxSize, optional int jumpThreshold);
field public static final androidx.paging.PagingConfig.Companion Companion;
field public static final int MAX_SIZE_UNBOUNDED = 2147483647; // 0x7fffffff
field public final boolean enablePlaceholders;
@@ -294,21 +294,21 @@
public final class PagingData<T> {
method public static <T> androidx.paging.PagingData<T> empty();
- method public static <T> androidx.paging.PagingData<T> empty(androidx.paging.LoadStates sourceLoadStates, optional androidx.paging.LoadStates? mediatorLoadStates);
method public static <T> androidx.paging.PagingData<T> empty(androidx.paging.LoadStates sourceLoadStates);
+ method public static <T> androidx.paging.PagingData<T> empty(androidx.paging.LoadStates sourceLoadStates, optional androidx.paging.LoadStates? mediatorLoadStates);
method public static <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data);
- method public static <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data, androidx.paging.LoadStates sourceLoadStates, optional androidx.paging.LoadStates? mediatorLoadStates);
method public static <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data, androidx.paging.LoadStates sourceLoadStates);
+ method public static <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data, androidx.paging.LoadStates sourceLoadStates, optional androidx.paging.LoadStates? mediatorLoadStates);
field public static final androidx.paging.PagingData.Companion Companion;
}
public static final class PagingData.Companion {
method public <T> androidx.paging.PagingData<T> empty();
- method public <T> androidx.paging.PagingData<T> empty(androidx.paging.LoadStates sourceLoadStates, optional androidx.paging.LoadStates? mediatorLoadStates);
method public <T> androidx.paging.PagingData<T> empty(androidx.paging.LoadStates sourceLoadStates);
+ method public <T> androidx.paging.PagingData<T> empty(androidx.paging.LoadStates sourceLoadStates, optional androidx.paging.LoadStates? mediatorLoadStates);
method public <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data);
- method public <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data, androidx.paging.LoadStates sourceLoadStates, optional androidx.paging.LoadStates? mediatorLoadStates);
method public <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data, androidx.paging.LoadStates sourceLoadStates);
+ method public <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data, androidx.paging.LoadStates sourceLoadStates, optional androidx.paging.LoadStates? mediatorLoadStates);
}
public final class PagingDataTransforms {
@@ -321,8 +321,8 @@
method @CheckResult public static <T> androidx.paging.PagingData<T> insertHeaderItem(androidx.paging.PagingData<T>, optional androidx.paging.TerminalSeparatorType terminalSeparatorType, T item);
method @CheckResult public static <T> androidx.paging.PagingData<T> insertHeaderItem(androidx.paging.PagingData<T>, T item);
method @CheckResult public static <R, T extends R> androidx.paging.PagingData<R> insertSeparators(androidx.paging.PagingData<T>, optional androidx.paging.TerminalSeparatorType terminalSeparatorType, java.util.concurrent.Executor executor, kotlin.jvm.functions.Function2<? super T,? super T,? extends R> generator);
- method @CheckResult public static <R, T extends R> androidx.paging.PagingData<R> insertSeparators(androidx.paging.PagingData<T>, java.util.concurrent.Executor executor, kotlin.jvm.functions.Function2<? super T,? super T,? extends R> generator);
method @CheckResult @kotlin.jvm.JvmSynthetic public static <T extends R, R> androidx.paging.PagingData<R> insertSeparators(androidx.paging.PagingData<T>, optional androidx.paging.TerminalSeparatorType terminalSeparatorType, kotlin.jvm.functions.Function3<? super T,? super T,? super kotlin.coroutines.Continuation<? super R>,?> generator);
+ method @CheckResult public static <R, T extends R> androidx.paging.PagingData<R> insertSeparators(androidx.paging.PagingData<T>, java.util.concurrent.Executor executor, kotlin.jvm.functions.Function2<? super T,? super T,? extends R> generator);
method @CheckResult public static <T, R> androidx.paging.PagingData<R> map(androidx.paging.PagingData<T>, java.util.concurrent.Executor executor, kotlin.jvm.functions.Function1<? super T,? extends R> transform);
method @CheckResult @kotlin.jvm.JvmSynthetic public static <T extends java.lang.Object, R> androidx.paging.PagingData<R> map(androidx.paging.PagingData<T>, kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super R>,?> transform);
}
@@ -385,8 +385,8 @@
}
public static final class PagingSource.LoadResult.Page<Key, Value> extends androidx.paging.PagingSource.LoadResult<Key,Value> implements java.lang.Iterable<Value> kotlin.jvm.internal.markers.KMappedMarker {
- ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey, optional @IntRange(from=androidx.paging.PagingSource.LoadResult.Page.COUNT_UNDEFINED.toLong()) int itemsBefore, optional @IntRange(from=androidx.paging.PagingSource.LoadResult.Page.COUNT_UNDEFINED.toLong()) int itemsAfter);
ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey);
+ ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey, optional @IntRange(from=androidx.paging.PagingSource.LoadResult.Page.COUNT_UNDEFINED.toLong()) int itemsBefore, optional @IntRange(from=androidx.paging.PagingSource.LoadResult.Page.COUNT_UNDEFINED.toLong()) int itemsAfter);
method public java.util.List<Value> component1();
method public Key? component2();
method public Key? component3();
@@ -444,8 +444,8 @@
@Deprecated public abstract static class PositionalDataSource.LoadInitialCallback<T> {
ctor @Deprecated public PositionalDataSource.LoadInitialCallback();
- method @Deprecated public abstract void onResult(java.util.List<? extends T> data, int position, int totalCount);
method @Deprecated public abstract void onResult(java.util.List<? extends T> data, int position);
+ method @Deprecated public abstract void onResult(java.util.List<? extends T> data, int position, int totalCount);
}
@Deprecated public static class PositionalDataSource.LoadInitialParams {
diff --git a/paging/paging-common/api/public_plus_experimental_current.txt b/paging/paging-common/api/public_plus_experimental_current.txt
index a5d3d01..a9a0517 100644
--- a/paging/paging-common/api/public_plus_experimental_current.txt
+++ b/paging/paging-common/api/public_plus_experimental_current.txt
@@ -33,8 +33,8 @@
public abstract static class DataSource.Factory<Key, Value> {
ctor public DataSource.Factory();
- method public final kotlin.jvm.functions.Function0<androidx.paging.PagingSource<Key,Value>> asPagingSourceFactory(optional kotlinx.coroutines.CoroutineDispatcher fetchDispatcher);
method public final kotlin.jvm.functions.Function0<androidx.paging.PagingSource<Key,Value>> asPagingSourceFactory();
+ method public final kotlin.jvm.functions.Function0<androidx.paging.PagingSource<Key,Value>> asPagingSourceFactory(optional kotlinx.coroutines.CoroutineDispatcher fetchDispatcher);
method public abstract androidx.paging.DataSource<Key,Value> create();
method public <ToValue> androidx.paging.DataSource.Factory<Key,ToValue> map(androidx.arch.core.util.Function<Value,ToValue> function);
method @kotlin.jvm.JvmSynthetic public <ToValue> androidx.paging.DataSource.Factory<Key,ToValue> map(kotlin.jvm.functions.Function1<? super Value,? extends ToValue> function);
@@ -184,8 +184,8 @@
}
@Deprecated public abstract class PagedList<T> extends java.util.AbstractList<T> {
- method @Deprecated public final void addWeakCallback(java.util.List<? extends T>? previousSnapshot, androidx.paging.PagedList.Callback callback);
method @Deprecated public final void addWeakCallback(androidx.paging.PagedList.Callback callback);
+ method @Deprecated public final void addWeakCallback(java.util.List<? extends T>? previousSnapshot, androidx.paging.PagedList.Callback callback);
method @Deprecated public final void addWeakLoadStateListener(kotlin.jvm.functions.Function2<? super androidx.paging.LoadType,? super androidx.paging.LoadState,kotlin.Unit> listener);
method @Deprecated public abstract void detach();
method @Deprecated public T? get(int index);
@@ -277,12 +277,12 @@
}
public final class PagingConfig {
- ctor public PagingConfig(int pageSize, optional @IntRange(from=0L) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1L) int initialLoadSize, optional @IntRange(from=2L) int maxSize, optional int jumpThreshold);
- ctor public PagingConfig(int pageSize, optional @IntRange(from=0L) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1L) int initialLoadSize, optional @IntRange(from=2L) int maxSize);
- ctor public PagingConfig(int pageSize, optional @IntRange(from=0L) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1L) int initialLoadSize);
- ctor public PagingConfig(int pageSize, optional @IntRange(from=0L) int prefetchDistance, optional boolean enablePlaceholders);
- ctor public PagingConfig(int pageSize, optional @IntRange(from=0L) int prefetchDistance);
ctor public PagingConfig(int pageSize);
+ ctor public PagingConfig(int pageSize, optional @IntRange(from=0L) int prefetchDistance);
+ ctor public PagingConfig(int pageSize, optional @IntRange(from=0L) int prefetchDistance, optional boolean enablePlaceholders);
+ ctor public PagingConfig(int pageSize, optional @IntRange(from=0L) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1L) int initialLoadSize);
+ ctor public PagingConfig(int pageSize, optional @IntRange(from=0L) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1L) int initialLoadSize, optional @IntRange(from=2L) int maxSize);
+ ctor public PagingConfig(int pageSize, optional @IntRange(from=0L) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1L) int initialLoadSize, optional @IntRange(from=2L) int maxSize, optional int jumpThreshold);
field public static final androidx.paging.PagingConfig.Companion Companion;
field public static final int MAX_SIZE_UNBOUNDED = 2147483647; // 0x7fffffff
field public final boolean enablePlaceholders;
@@ -298,21 +298,21 @@
public final class PagingData<T> {
method public static <T> androidx.paging.PagingData<T> empty();
- method public static <T> androidx.paging.PagingData<T> empty(androidx.paging.LoadStates sourceLoadStates, optional androidx.paging.LoadStates? mediatorLoadStates);
method public static <T> androidx.paging.PagingData<T> empty(androidx.paging.LoadStates sourceLoadStates);
+ method public static <T> androidx.paging.PagingData<T> empty(androidx.paging.LoadStates sourceLoadStates, optional androidx.paging.LoadStates? mediatorLoadStates);
method public static <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data);
- method public static <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data, androidx.paging.LoadStates sourceLoadStates, optional androidx.paging.LoadStates? mediatorLoadStates);
method public static <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data, androidx.paging.LoadStates sourceLoadStates);
+ method public static <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data, androidx.paging.LoadStates sourceLoadStates, optional androidx.paging.LoadStates? mediatorLoadStates);
field public static final androidx.paging.PagingData.Companion Companion;
}
public static final class PagingData.Companion {
method public <T> androidx.paging.PagingData<T> empty();
- method public <T> androidx.paging.PagingData<T> empty(androidx.paging.LoadStates sourceLoadStates, optional androidx.paging.LoadStates? mediatorLoadStates);
method public <T> androidx.paging.PagingData<T> empty(androidx.paging.LoadStates sourceLoadStates);
+ method public <T> androidx.paging.PagingData<T> empty(androidx.paging.LoadStates sourceLoadStates, optional androidx.paging.LoadStates? mediatorLoadStates);
method public <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data);
- method public <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data, androidx.paging.LoadStates sourceLoadStates, optional androidx.paging.LoadStates? mediatorLoadStates);
method public <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data, androidx.paging.LoadStates sourceLoadStates);
+ method public <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data, androidx.paging.LoadStates sourceLoadStates, optional androidx.paging.LoadStates? mediatorLoadStates);
}
public final class PagingDataTransforms {
@@ -325,8 +325,8 @@
method @CheckResult public static <T> androidx.paging.PagingData<T> insertHeaderItem(androidx.paging.PagingData<T>, optional androidx.paging.TerminalSeparatorType terminalSeparatorType, T item);
method @CheckResult public static <T> androidx.paging.PagingData<T> insertHeaderItem(androidx.paging.PagingData<T>, T item);
method @CheckResult public static <R, T extends R> androidx.paging.PagingData<R> insertSeparators(androidx.paging.PagingData<T>, optional androidx.paging.TerminalSeparatorType terminalSeparatorType, java.util.concurrent.Executor executor, kotlin.jvm.functions.Function2<? super T,? super T,? extends R> generator);
- method @CheckResult public static <R, T extends R> androidx.paging.PagingData<R> insertSeparators(androidx.paging.PagingData<T>, java.util.concurrent.Executor executor, kotlin.jvm.functions.Function2<? super T,? super T,? extends R> generator);
method @CheckResult @kotlin.jvm.JvmSynthetic public static <T extends R, R> androidx.paging.PagingData<R> insertSeparators(androidx.paging.PagingData<T>, optional androidx.paging.TerminalSeparatorType terminalSeparatorType, kotlin.jvm.functions.Function3<? super T,? super T,? super kotlin.coroutines.Continuation<? super R>,?> generator);
+ method @CheckResult public static <R, T extends R> androidx.paging.PagingData<R> insertSeparators(androidx.paging.PagingData<T>, java.util.concurrent.Executor executor, kotlin.jvm.functions.Function2<? super T,? super T,? extends R> generator);
method @CheckResult public static <T, R> androidx.paging.PagingData<R> map(androidx.paging.PagingData<T>, java.util.concurrent.Executor executor, kotlin.jvm.functions.Function1<? super T,? extends R> transform);
method @CheckResult @kotlin.jvm.JvmSynthetic public static <T extends java.lang.Object, R> androidx.paging.PagingData<R> map(androidx.paging.PagingData<T>, kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super R>,?> transform);
}
@@ -389,8 +389,8 @@
}
public static final class PagingSource.LoadResult.Page<Key, Value> extends androidx.paging.PagingSource.LoadResult<Key,Value> implements java.lang.Iterable<Value> kotlin.jvm.internal.markers.KMappedMarker {
- ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey, optional @IntRange(from=androidx.paging.PagingSource.LoadResult.Page.COUNT_UNDEFINED.toLong()) int itemsBefore, optional @IntRange(from=androidx.paging.PagingSource.LoadResult.Page.COUNT_UNDEFINED.toLong()) int itemsAfter);
ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey);
+ ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey, optional @IntRange(from=androidx.paging.PagingSource.LoadResult.Page.COUNT_UNDEFINED.toLong()) int itemsBefore, optional @IntRange(from=androidx.paging.PagingSource.LoadResult.Page.COUNT_UNDEFINED.toLong()) int itemsAfter);
method public java.util.List<Value> component1();
method public Key? component2();
method public Key? component3();
@@ -448,8 +448,8 @@
@Deprecated public abstract static class PositionalDataSource.LoadInitialCallback<T> {
ctor @Deprecated public PositionalDataSource.LoadInitialCallback();
- method @Deprecated public abstract void onResult(java.util.List<? extends T> data, int position, int totalCount);
method @Deprecated public abstract void onResult(java.util.List<? extends T> data, int position);
+ method @Deprecated public abstract void onResult(java.util.List<? extends T> data, int position, int totalCount);
}
@Deprecated public static class PositionalDataSource.LoadInitialParams {
diff --git a/paging/paging-common/api/restricted_current.txt b/paging/paging-common/api/restricted_current.txt
index 2070710..ffc28e1 100644
--- a/paging/paging-common/api/restricted_current.txt
+++ b/paging/paging-common/api/restricted_current.txt
@@ -33,8 +33,8 @@
public abstract static class DataSource.Factory<Key, Value> {
ctor public DataSource.Factory();
- method public final kotlin.jvm.functions.Function0<androidx.paging.PagingSource<Key,Value>> asPagingSourceFactory(optional kotlinx.coroutines.CoroutineDispatcher fetchDispatcher);
method public final kotlin.jvm.functions.Function0<androidx.paging.PagingSource<Key,Value>> asPagingSourceFactory();
+ method public final kotlin.jvm.functions.Function0<androidx.paging.PagingSource<Key,Value>> asPagingSourceFactory(optional kotlinx.coroutines.CoroutineDispatcher fetchDispatcher);
method public abstract androidx.paging.DataSource<Key,Value> create();
method public <ToValue> androidx.paging.DataSource.Factory<Key,ToValue> map(androidx.arch.core.util.Function<Value,ToValue> function);
method @kotlin.jvm.JvmSynthetic public <ToValue> androidx.paging.DataSource.Factory<Key,ToValue> map(kotlin.jvm.functions.Function1<? super Value,? extends ToValue> function);
@@ -181,8 +181,8 @@
}
@Deprecated public abstract class PagedList<T> extends java.util.AbstractList<T> {
- method @Deprecated public final void addWeakCallback(java.util.List<? extends T>? previousSnapshot, androidx.paging.PagedList.Callback callback);
method @Deprecated public final void addWeakCallback(androidx.paging.PagedList.Callback callback);
+ method @Deprecated public final void addWeakCallback(java.util.List<? extends T>? previousSnapshot, androidx.paging.PagedList.Callback callback);
method @Deprecated public final void addWeakLoadStateListener(kotlin.jvm.functions.Function2<? super androidx.paging.LoadType,? super androidx.paging.LoadState,kotlin.Unit> listener);
method @Deprecated public abstract void detach();
method @Deprecated public T? get(int index);
@@ -273,12 +273,12 @@
}
public final class PagingConfig {
- ctor public PagingConfig(int pageSize, optional @IntRange(from=0L) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1L) int initialLoadSize, optional @IntRange(from=2L) int maxSize, optional int jumpThreshold);
- ctor public PagingConfig(int pageSize, optional @IntRange(from=0L) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1L) int initialLoadSize, optional @IntRange(from=2L) int maxSize);
- ctor public PagingConfig(int pageSize, optional @IntRange(from=0L) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1L) int initialLoadSize);
- ctor public PagingConfig(int pageSize, optional @IntRange(from=0L) int prefetchDistance, optional boolean enablePlaceholders);
- ctor public PagingConfig(int pageSize, optional @IntRange(from=0L) int prefetchDistance);
ctor public PagingConfig(int pageSize);
+ ctor public PagingConfig(int pageSize, optional @IntRange(from=0L) int prefetchDistance);
+ ctor public PagingConfig(int pageSize, optional @IntRange(from=0L) int prefetchDistance, optional boolean enablePlaceholders);
+ ctor public PagingConfig(int pageSize, optional @IntRange(from=0L) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1L) int initialLoadSize);
+ ctor public PagingConfig(int pageSize, optional @IntRange(from=0L) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1L) int initialLoadSize, optional @IntRange(from=2L) int maxSize);
+ ctor public PagingConfig(int pageSize, optional @IntRange(from=0L) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1L) int initialLoadSize, optional @IntRange(from=2L) int maxSize, optional int jumpThreshold);
field public static final androidx.paging.PagingConfig.Companion Companion;
field public static final int MAX_SIZE_UNBOUNDED = 2147483647; // 0x7fffffff
field public final boolean enablePlaceholders;
@@ -294,21 +294,21 @@
public final class PagingData<T> {
method public static <T> androidx.paging.PagingData<T> empty();
- method public static <T> androidx.paging.PagingData<T> empty(androidx.paging.LoadStates sourceLoadStates, optional androidx.paging.LoadStates? mediatorLoadStates);
method public static <T> androidx.paging.PagingData<T> empty(androidx.paging.LoadStates sourceLoadStates);
+ method public static <T> androidx.paging.PagingData<T> empty(androidx.paging.LoadStates sourceLoadStates, optional androidx.paging.LoadStates? mediatorLoadStates);
method public static <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data);
- method public static <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data, androidx.paging.LoadStates sourceLoadStates, optional androidx.paging.LoadStates? mediatorLoadStates);
method public static <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data, androidx.paging.LoadStates sourceLoadStates);
+ method public static <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data, androidx.paging.LoadStates sourceLoadStates, optional androidx.paging.LoadStates? mediatorLoadStates);
field public static final androidx.paging.PagingData.Companion Companion;
}
public static final class PagingData.Companion {
method public <T> androidx.paging.PagingData<T> empty();
- method public <T> androidx.paging.PagingData<T> empty(androidx.paging.LoadStates sourceLoadStates, optional androidx.paging.LoadStates? mediatorLoadStates);
method public <T> androidx.paging.PagingData<T> empty(androidx.paging.LoadStates sourceLoadStates);
+ method public <T> androidx.paging.PagingData<T> empty(androidx.paging.LoadStates sourceLoadStates, optional androidx.paging.LoadStates? mediatorLoadStates);
method public <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data);
- method public <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data, androidx.paging.LoadStates sourceLoadStates, optional androidx.paging.LoadStates? mediatorLoadStates);
method public <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data, androidx.paging.LoadStates sourceLoadStates);
+ method public <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data, androidx.paging.LoadStates sourceLoadStates, optional androidx.paging.LoadStates? mediatorLoadStates);
}
public final class PagingDataTransforms {
@@ -321,8 +321,8 @@
method @CheckResult public static <T> androidx.paging.PagingData<T> insertHeaderItem(androidx.paging.PagingData<T>, optional androidx.paging.TerminalSeparatorType terminalSeparatorType, T item);
method @CheckResult public static <T> androidx.paging.PagingData<T> insertHeaderItem(androidx.paging.PagingData<T>, T item);
method @CheckResult public static <R, T extends R> androidx.paging.PagingData<R> insertSeparators(androidx.paging.PagingData<T>, optional androidx.paging.TerminalSeparatorType terminalSeparatorType, java.util.concurrent.Executor executor, kotlin.jvm.functions.Function2<? super T,? super T,? extends R> generator);
- method @CheckResult public static <R, T extends R> androidx.paging.PagingData<R> insertSeparators(androidx.paging.PagingData<T>, java.util.concurrent.Executor executor, kotlin.jvm.functions.Function2<? super T,? super T,? extends R> generator);
method @CheckResult @kotlin.jvm.JvmSynthetic public static <T extends R, R> androidx.paging.PagingData<R> insertSeparators(androidx.paging.PagingData<T>, optional androidx.paging.TerminalSeparatorType terminalSeparatorType, kotlin.jvm.functions.Function3<? super T,? super T,? super kotlin.coroutines.Continuation<? super R>,?> generator);
+ method @CheckResult public static <R, T extends R> androidx.paging.PagingData<R> insertSeparators(androidx.paging.PagingData<T>, java.util.concurrent.Executor executor, kotlin.jvm.functions.Function2<? super T,? super T,? extends R> generator);
method @CheckResult public static <T, R> androidx.paging.PagingData<R> map(androidx.paging.PagingData<T>, java.util.concurrent.Executor executor, kotlin.jvm.functions.Function1<? super T,? extends R> transform);
method @CheckResult @kotlin.jvm.JvmSynthetic public static <T extends java.lang.Object, R> androidx.paging.PagingData<R> map(androidx.paging.PagingData<T>, kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super R>,?> transform);
}
@@ -385,8 +385,8 @@
}
public static final class PagingSource.LoadResult.Page<Key, Value> extends androidx.paging.PagingSource.LoadResult<Key,Value> implements java.lang.Iterable<Value> kotlin.jvm.internal.markers.KMappedMarker {
- ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey, optional @IntRange(from=androidx.paging.PagingSource.LoadResult.Page.COUNT_UNDEFINED.toLong()) int itemsBefore, optional @IntRange(from=androidx.paging.PagingSource.LoadResult.Page.COUNT_UNDEFINED.toLong()) int itemsAfter);
ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey);
+ ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey, optional @IntRange(from=androidx.paging.PagingSource.LoadResult.Page.COUNT_UNDEFINED.toLong()) int itemsBefore, optional @IntRange(from=androidx.paging.PagingSource.LoadResult.Page.COUNT_UNDEFINED.toLong()) int itemsAfter);
method public java.util.List<Value> component1();
method public Key? component2();
method public Key? component3();
@@ -444,8 +444,8 @@
@Deprecated public abstract static class PositionalDataSource.LoadInitialCallback<T> {
ctor @Deprecated public PositionalDataSource.LoadInitialCallback();
- method @Deprecated public abstract void onResult(java.util.List<? extends T> data, int position, int totalCount);
method @Deprecated public abstract void onResult(java.util.List<? extends T> data, int position);
+ method @Deprecated public abstract void onResult(java.util.List<? extends T> data, int position, int totalCount);
}
@Deprecated public static class PositionalDataSource.LoadInitialParams {
diff --git a/paging/paging-common/build.gradle b/paging/paging-common/build.gradle
index 00ad658..bbc62bf 100644
--- a/paging/paging-common/build.gradle
+++ b/paging/paging-common/build.gradle
@@ -51,7 +51,7 @@
}
androidx {
- name = "Android Paging-Common"
+ name = "Paging-Common"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2017"
description = "Android Paging-Common"
diff --git a/paging/paging-common/src/main/kotlin/androidx/paging/FlowExt.kt b/paging/paging-common/src/main/kotlin/androidx/paging/FlowExt.kt
index 9cd5e14..d6b55b8 100644
--- a/paging/paging-common/src/main/kotlin/androidx/paging/FlowExt.kt
+++ b/paging/paging-common/src/main/kotlin/androidx/paging/FlowExt.kt
@@ -22,6 +22,7 @@
import androidx.paging.CombineSource.INITIAL
import androidx.paging.CombineSource.OTHER
import androidx.paging.CombineSource.RECEIVER
+import java.util.concurrent.atomic.AtomicInteger
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.Job
import kotlinx.coroutines.channels.SendChannel
@@ -35,7 +36,6 @@
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import kotlinx.coroutines.yield
-import java.util.concurrent.atomic.AtomicInteger
/**
* This File includes custom flow operators that we implement to avoid using experimental APIs
diff --git a/paging/paging-common/src/main/kotlin/androidx/paging/HintHandler.kt b/paging/paging-common/src/main/kotlin/androidx/paging/HintHandler.kt
index cefabc2..8c81e2e 100644
--- a/paging/paging-common/src/main/kotlin/androidx/paging/HintHandler.kt
+++ b/paging/paging-common/src/main/kotlin/androidx/paging/HintHandler.kt
@@ -21,11 +21,11 @@
import androidx.annotation.RestrictTo
import androidx.paging.LoadType.APPEND
import androidx.paging.LoadType.PREPEND
+import java.util.concurrent.locks.ReentrantLock
+import kotlin.concurrent.withLock
import kotlinx.coroutines.channels.BufferOverflow
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableSharedFlow
-import java.util.concurrent.locks.ReentrantLock
-import kotlin.concurrent.withLock
/**
* Helper class to handle UI hints.
diff --git a/paging/paging-common/src/main/kotlin/androidx/paging/ItemKeyedDataSource.kt b/paging/paging-common/src/main/kotlin/androidx/paging/ItemKeyedDataSource.kt
index 68a85be..8aeb85a 100644
--- a/paging/paging-common/src/main/kotlin/androidx/paging/ItemKeyedDataSource.kt
+++ b/paging/paging-common/src/main/kotlin/androidx/paging/ItemKeyedDataSource.kt
@@ -19,9 +19,9 @@
import androidx.annotation.VisibleForTesting
import androidx.arch.core.util.Function
import androidx.paging.DataSource.KeyType.ITEM_KEYED
+import kotlin.coroutines.resume
import kotlinx.coroutines.CancellableContinuation
import kotlinx.coroutines.suspendCancellableCoroutine
-import kotlin.coroutines.resume
/**
* Incremental data loader for paging keyed content, where loaded content uses previously loaded
diff --git a/paging/paging-common/src/main/kotlin/androidx/paging/LegacyPageFetcher.kt b/paging/paging-common/src/main/kotlin/androidx/paging/LegacyPageFetcher.kt
index 868af5e..d923015 100644
--- a/paging/paging-common/src/main/kotlin/androidx/paging/LegacyPageFetcher.kt
+++ b/paging/paging-common/src/main/kotlin/androidx/paging/LegacyPageFetcher.kt
@@ -19,10 +19,10 @@
import androidx.paging.LoadState.Loading
import androidx.paging.LoadState.NotLoading
import androidx.paging.PagingSource.LoadParams
+import java.util.concurrent.atomic.AtomicBoolean
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
-import java.util.concurrent.atomic.AtomicBoolean
internal class LegacyPageFetcher<K : Any, V : Any>(
private val pagedListScope: CoroutineScope,
diff --git a/paging/paging-common/src/main/kotlin/androidx/paging/MutableCombinedLoadStateCollection.kt b/paging/paging-common/src/main/kotlin/androidx/paging/MutableCombinedLoadStateCollection.kt
index 964433b..0b12735 100644
--- a/paging/paging-common/src/main/kotlin/androidx/paging/MutableCombinedLoadStateCollection.kt
+++ b/paging/paging-common/src/main/kotlin/androidx/paging/MutableCombinedLoadStateCollection.kt
@@ -19,8 +19,8 @@
import androidx.paging.LoadState.Error
import androidx.paging.LoadState.Loading
import androidx.paging.LoadState.NotLoading
-import kotlinx.coroutines.flow.MutableStateFlow
import java.util.concurrent.CopyOnWriteArrayList
+import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.update
diff --git a/paging/paging-common/src/main/kotlin/androidx/paging/PageFetcherSnapshotState.kt b/paging/paging-common/src/main/kotlin/androidx/paging/PageFetcherSnapshotState.kt
index 209142b..e72df74 100644
--- a/paging/paging-common/src/main/kotlin/androidx/paging/PageFetcherSnapshotState.kt
+++ b/paging/paging-common/src/main/kotlin/androidx/paging/PageFetcherSnapshotState.kt
@@ -17,8 +17,8 @@
package androidx.paging
import androidx.annotation.CheckResult
-import androidx.paging.LoadState.NotLoading
import androidx.paging.LoadState.Loading
+import androidx.paging.LoadState.NotLoading
import androidx.paging.LoadType.APPEND
import androidx.paging.LoadType.PREPEND
import androidx.paging.LoadType.REFRESH
diff --git a/paging/paging-common/src/main/kotlin/androidx/paging/PageKeyedDataSource.kt b/paging/paging-common/src/main/kotlin/androidx/paging/PageKeyedDataSource.kt
index e3d0fd8..5c98360 100644
--- a/paging/paging-common/src/main/kotlin/androidx/paging/PageKeyedDataSource.kt
+++ b/paging/paging-common/src/main/kotlin/androidx/paging/PageKeyedDataSource.kt
@@ -18,9 +18,9 @@
import androidx.arch.core.util.Function
import androidx.paging.DataSource.KeyType.PAGE_KEYED
+import kotlin.coroutines.resume
import kotlinx.coroutines.CancellableContinuation
import kotlinx.coroutines.suspendCancellableCoroutine
-import kotlin.coroutines.resume
/**
* Incremental data loader for page-keyed content, where requests return keys for next/previous
diff --git a/paging/paging-common/src/main/kotlin/androidx/paging/PagedList.kt b/paging/paging-common/src/main/kotlin/androidx/paging/PagedList.kt
index ac60b3d..23f7ebe 100644
--- a/paging/paging-common/src/main/kotlin/androidx/paging/PagedList.kt
+++ b/paging/paging-common/src/main/kotlin/androidx/paging/PagedList.kt
@@ -19,6 +19,9 @@
import androidx.annotation.IntRange
import androidx.annotation.MainThread
import androidx.annotation.RestrictTo
+import java.lang.ref.WeakReference
+import java.util.AbstractList
+import java.util.concurrent.Executor
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.DelicateCoroutinesApi
@@ -27,9 +30,6 @@
import kotlinx.coroutines.asCoroutineDispatcher
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
-import java.lang.ref.WeakReference
-import java.util.AbstractList
-import java.util.concurrent.Executor
/**
* Lazy loading list that pages in immutable content from a [PagingSource].
diff --git a/paging/paging-common/src/main/kotlin/androidx/paging/PagingDataTransforms.kt b/paging/paging-common/src/main/kotlin/androidx/paging/PagingDataTransforms.kt
index 9fcf71a..0a31f4e 100644
--- a/paging/paging-common/src/main/kotlin/androidx/paging/PagingDataTransforms.kt
+++ b/paging/paging-common/src/main/kotlin/androidx/paging/PagingDataTransforms.kt
@@ -20,10 +20,10 @@
import androidx.annotation.CheckResult
import androidx.paging.TerminalSeparatorType.FULLY_COMPLETE
+import java.util.concurrent.Executor
import kotlinx.coroutines.asCoroutineDispatcher
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.withContext
-import java.util.concurrent.Executor
private inline fun <T : Any, R : Any> PagingData<T>.transform(
crossinline transform: suspend (PageEvent<T>) -> PageEvent<R>
diff --git a/paging/paging-common/src/main/kotlin/androidx/paging/PositionalDataSource.kt b/paging/paging-common/src/main/kotlin/androidx/paging/PositionalDataSource.kt
index 1b84ad3..134a223 100644
--- a/paging/paging-common/src/main/kotlin/androidx/paging/PositionalDataSource.kt
+++ b/paging/paging-common/src/main/kotlin/androidx/paging/PositionalDataSource.kt
@@ -22,8 +22,8 @@
import androidx.arch.core.util.Function
import androidx.paging.DataSource.KeyType.POSITIONAL
import androidx.paging.PagingSource.LoadResult.Page.Companion.COUNT_UNDEFINED
-import kotlinx.coroutines.suspendCancellableCoroutine
import kotlin.coroutines.resume
+import kotlinx.coroutines.suspendCancellableCoroutine
/**
* Position-based data loader for a fixed-size, countable data set, supporting fixed-size loads at
diff --git a/paging/paging-common/src/main/kotlin/androidx/paging/RemoteMediatorAccessor.kt b/paging/paging-common/src/main/kotlin/androidx/paging/RemoteMediatorAccessor.kt
index 358f194..17b923c 100644
--- a/paging/paging-common/src/main/kotlin/androidx/paging/RemoteMediatorAccessor.kt
+++ b/paging/paging-common/src/main/kotlin/androidx/paging/RemoteMediatorAccessor.kt
@@ -20,12 +20,12 @@
import androidx.paging.AccessorState.BlockState.REQUIRES_REFRESH
import androidx.paging.AccessorState.BlockState.UNBLOCKED
import androidx.paging.RemoteMediator.MediatorResult
+import java.util.concurrent.locks.ReentrantLock
+import kotlin.concurrent.withLock
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch
-import java.util.concurrent.locks.ReentrantLock
-import kotlin.concurrent.withLock
/**
* Interface provided to the snapshot to trigger load events.
diff --git a/paging/paging-common/src/main/kotlin/androidx/paging/SimpleChannelFlow.kt b/paging/paging-common/src/main/kotlin/androidx/paging/SimpleChannelFlow.kt
index 75ab293..1c8ae24 100644
--- a/paging/paging-common/src/main/kotlin/androidx/paging/SimpleChannelFlow.kt
+++ b/paging/paging-common/src/main/kotlin/androidx/paging/SimpleChannelFlow.kt
@@ -19,6 +19,7 @@
package androidx.paging
import androidx.annotation.RestrictTo
+import kotlin.coroutines.resume
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.channels.Channel
@@ -30,7 +31,6 @@
import kotlinx.coroutines.flow.internal.FusibleFlow
import kotlinx.coroutines.launch
import kotlinx.coroutines.suspendCancellableCoroutine
-import kotlin.coroutines.resume
/**
* This is a simplified channelFlow implementation as a temporary measure until channel flow
diff --git a/paging/paging-common/src/main/kotlin/androidx/paging/multicast/StoreRealActor.kt b/paging/paging-common/src/main/kotlin/androidx/paging/multicast/StoreRealActor.kt
index 74c7fc1..60c962a 100644
--- a/paging/paging-common/src/main/kotlin/androidx/paging/multicast/StoreRealActor.kt
+++ b/paging/paging-common/src/main/kotlin/androidx/paging/multicast/StoreRealActor.kt
@@ -15,6 +15,7 @@
*/
package androidx.paging.multicast
+import java.util.concurrent.atomic.AtomicBoolean
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.channels.Channel
@@ -22,7 +23,6 @@
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onCompletion
import kotlinx.coroutines.flow.onEach
-import java.util.concurrent.atomic.AtomicBoolean
/**
* Simple actor implementation abstracting away Coroutine.actor since it is deprecated.
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/CachedPageEventFlowLeakTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/CachedPageEventFlowLeakTest.kt
index 1948415..cffc528 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/CachedPageEventFlowLeakTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/CachedPageEventFlowLeakTest.kt
@@ -16,6 +16,9 @@
package androidx.paging
+import kotlin.coroutines.EmptyCoroutineContext
+import kotlin.test.Ignore
+import kotlin.test.Test
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.cancel
@@ -25,11 +28,8 @@
import kotlinx.coroutines.flow.takeWhile
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
-import org.junit.Ignore
-import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import kotlin.coroutines.EmptyCoroutineContext
/**
* reproduces b/203594733
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/CachedPageEventFlowTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/CachedPageEventFlowTest.kt
index 77e0ce1..1f3cda9 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/CachedPageEventFlowTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/CachedPageEventFlowTest.kt
@@ -17,6 +17,7 @@
package androidx.paging
import com.google.common.truth.Truth.assertThat
+import kotlin.test.Test
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.Job
@@ -32,7 +33,6 @@
import kotlinx.coroutines.test.advanceUntilIdle
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
-import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/CachingTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/CachingTest.kt
index 5eb154c..977255e 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/CachingTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/CachingTest.kt
@@ -19,6 +19,8 @@
import androidx.paging.ActiveFlowTracker.FlowType.PAGED_DATA_FLOW
import androidx.paging.ActiveFlowTracker.FlowType.PAGE_EVENT_FLOW
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.atomic.AtomicInteger
+import kotlin.test.Test
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -36,15 +38,13 @@
import kotlinx.coroutines.flow.toList
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
-import kotlinx.coroutines.yield
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
-import java.util.concurrent.atomic.AtomicInteger
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
+import kotlinx.coroutines.yield
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
@OptIn(ExperimentalCoroutinesApi::class)
@RunWith(JUnit4::class)
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/ConflatedEventBusTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/ConflatedEventBusTest.kt
index c5bde13..174df10 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/ConflatedEventBusTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/ConflatedEventBusTest.kt
@@ -17,12 +17,12 @@
package androidx.paging
import com.google.common.truth.Truth.assertThat
+import kotlin.test.Test
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.launch
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runCurrent
-import org.junit.Test
@OptIn(ExperimentalCoroutinesApi::class)
class ConflatedEventBusTest {
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/ContiguousPagedListTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/ContiguousPagedListTest.kt
index 1a4637b..79c02d1 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/ContiguousPagedListTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/ContiguousPagedListTest.kt
@@ -29,18 +29,18 @@
import androidx.paging.PagedList.Config
import androidx.paging.PagingSource.LoadResult.Page
import androidx.testutils.TestDispatcher
+import kotlin.test.Test
+import kotlin.test.assertEquals
+import kotlin.test.assertFailsWith
+import kotlin.test.assertSame
+import kotlin.test.assertTrue
+import kotlinx.coroutines.runBlocking
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
import org.mockito.kotlin.mock
import org.mockito.kotlin.reset
import org.mockito.kotlin.verify
import org.mockito.kotlin.verifyNoMoreInteractions
-import kotlinx.coroutines.runBlocking
-import org.junit.Assert.assertEquals
-import org.junit.Assert.assertSame
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.Parameterized
-import kotlin.test.assertFailsWith
-import kotlin.test.assertTrue
@RunWith(Parameterized::class)
class ContiguousPagedListTest(private val placeholdersEnabled: Boolean) {
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/DataSourceTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/DataSourceTest.kt
index bd2a9fb..b5635bb 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/DataSourceTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/DataSourceTest.kt
@@ -17,7 +17,7 @@
package androidx.paging
import com.google.common.truth.Truth.assertThat
-import org.junit.Test
+import kotlin.test.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/FailDispatcher.kt b/paging/paging-common/src/test/kotlin/androidx/paging/FailDispatcher.kt
index 9e41203..0642f31 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/FailDispatcher.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/FailDispatcher.kt
@@ -16,10 +16,10 @@
package androidx.paging
+import kotlin.coroutines.CoroutineContext
+import kotlin.test.fail
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.Runnable
-import org.junit.Assert.fail
-import kotlin.coroutines.CoroutineContext
class FailDispatcher(
val string: String = "Executor expected to be unused"
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/FlattenedPageEventStorageTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/FlattenedPageEventStorageTest.kt
index 35cf04d..44bd3bb 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/FlattenedPageEventStorageTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/FlattenedPageEventStorageTest.kt
@@ -25,7 +25,7 @@
import androidx.paging.PageEvent.Drop
import androidx.paging.PageEvent.StaticList
import com.google.common.truth.Truth.assertThat
-import org.junit.Test
+import kotlin.test.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/FlowExtTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/FlowExtTest.kt
index 5073e746..b298a75 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/FlowExtTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/FlowExtTest.kt
@@ -20,6 +20,8 @@
import androidx.paging.CombineSource.OTHER
import androidx.paging.CombineSource.RECEIVER
import com.google.common.truth.Truth.assertThat
+import kotlin.random.Random
+import kotlin.test.Test
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.channels.Channel.Factory.BUFFERED
@@ -38,8 +40,6 @@
import kotlinx.coroutines.test.advanceUntilIdle
import kotlinx.coroutines.test.runTest
import kotlinx.coroutines.yield
-import org.junit.Test
-import kotlin.random.Random
@OptIn(ExperimentalCoroutinesApi::class)
class FlowExtTest {
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/HeaderFooterTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/HeaderFooterTest.kt
index 4af5089..44e227c 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/HeaderFooterTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/HeaderFooterTest.kt
@@ -18,15 +18,15 @@
import androidx.paging.LoadState.NotLoading
import com.google.common.truth.Truth.assertThat
+import kotlin.test.Test
+import kotlin.test.assertEquals
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.single
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.runTest
-import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import kotlin.test.assertEquals
/**
* Prepend and append are both Done, so that headers will appear
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/HintHandlerTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/HintHandlerTest.kt
index 6ab268b..16bc08f 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/HintHandlerTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/HintHandlerTest.kt
@@ -20,6 +20,7 @@
import androidx.paging.LoadType.PREPEND
import androidx.paging.LoadType.REFRESH
import com.google.common.truth.Truth.assertThat
+import kotlin.test.Test
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.Job
@@ -30,7 +31,6 @@
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
-import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/InvalidatingPagingSourceFactoryTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/InvalidatingPagingSourceFactoryTest.kt
index a3b431a..28b9cb4 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/InvalidatingPagingSourceFactoryTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/InvalidatingPagingSourceFactoryTest.kt
@@ -16,7 +16,7 @@
package androidx.paging
-import org.junit.Test
+import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertTrue
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/ItemKeyedDataSourceTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/ItemKeyedDataSourceTest.kt
index dc2c9fb..786c4c6 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/ItemKeyedDataSourceTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/ItemKeyedDataSourceTest.kt
@@ -17,21 +17,21 @@
package androidx.paging
import androidx.paging.PagingSource.LoadResult.Page.Companion.COUNT_UNDEFINED
-import org.mockito.kotlin.capture
-import org.mockito.kotlin.mock
+import kotlin.random.Random
+import kotlin.test.Test
+import kotlin.test.assertEquals
+import kotlin.test.assertFailsWith
+import kotlin.test.assertTrue
+import kotlin.test.fail
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.runBlocking
-import org.junit.Assert.assertEquals
-import org.junit.Assert.assertTrue
-import org.junit.Assert.fail
-import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
import org.mockito.ArgumentCaptor
import org.mockito.Mockito.verify
import org.mockito.Mockito.verifyNoMoreInteractions
-import kotlin.random.Random
-import kotlin.test.assertFailsWith
+import org.mockito.kotlin.capture
+import org.mockito.kotlin.mock
@Suppress("DEPRECATION")
@RunWith(JUnit4::class)
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/ItemSnapshotListTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/ItemSnapshotListTest.kt
index 7b6d6f9..4688ad0 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/ItemSnapshotListTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/ItemSnapshotListTest.kt
@@ -16,7 +16,7 @@
package androidx.paging
-import org.junit.Test
+import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertFailsWith
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/LegacyPageFetcherTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/LegacyPageFetcherTest.kt
index 78598f9..536e5d4 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/LegacyPageFetcherTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/LegacyPageFetcherTest.kt
@@ -28,14 +28,14 @@
import androidx.paging.PagingSource.LoadResult
import androidx.paging.PagingSource.LoadResult.Page
import com.google.common.truth.Truth.assertThat
+import kotlin.test.Test
+import kotlin.test.assertEquals
+import kotlin.test.assertTrue
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.StandardTestDispatcher
-import org.junit.Assert.assertEquals
-import org.junit.Assert.assertTrue
-import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/LegacyPagingSourceTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/LegacyPagingSourceTest.kt
index 1ffe862..6123476 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/LegacyPagingSourceTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/LegacyPagingSourceTest.kt
@@ -18,8 +18,15 @@
import androidx.paging.PagingSource.LoadResult.Page
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.Executors
import kotlin.coroutines.EmptyCoroutineContext
+import kotlin.test.Test
+import kotlin.test.assertEquals
+import kotlin.test.assertFalse
+import kotlin.test.assertTrue
+import kotlin.test.fail
import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.asCoroutineDispatcher
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.filter
@@ -27,15 +34,8 @@
import kotlinx.coroutines.flow.take
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.StandardTestDispatcher
-import org.junit.Assert
-import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import java.util.concurrent.Executors
-import kotlin.test.assertEquals
-import kotlin.test.assertFalse
-import kotlin.test.assertTrue
-import kotlinx.coroutines.ExperimentalCoroutinesApi
@OptIn(ExperimentalCoroutinesApi::class)
@RunWith(JUnit4::class)
@@ -93,21 +93,21 @@
params: LoadInitialParams<Int>,
callback: LoadInitialCallback<String>
) {
- Assert.fail("loadInitial not expected")
+ fail("loadInitial not expected")
}
override fun loadAfter(
params: LoadParams<Int>,
callback: LoadCallback<String>
) {
- Assert.fail("loadAfter not expected")
+ fail("loadAfter not expected")
}
override fun loadBefore(
params: LoadParams<Int>,
callback: LoadCallback<String>
) {
- Assert.fail("loadBefore not expected")
+ fail("loadBefore not expected")
}
override fun getKey(item: String) = item.hashCode()
@@ -141,21 +141,21 @@
params: LoadInitialParams<Int>,
callback: LoadInitialCallback<Int, String>
) {
- Assert.fail("loadInitial not expected")
+ fail("loadInitial not expected")
}
override fun loadBefore(
params: LoadParams<Int>,
callback: LoadCallback<Int, String>
) {
- Assert.fail("loadBefore not expected")
+ fail("loadBefore not expected")
}
override fun loadAfter(
params: LoadParams<Int>,
callback: LoadCallback<Int, String>
) {
- Assert.fail("loadAfter not expected")
+ fail("loadAfter not expected")
}
}
val pagingSource = LegacyPagingSource(
@@ -391,14 +391,14 @@
callback: LoadInitialCallback<String>
) {
if (!expectInitialLoad) {
- Assert.fail("loadInitial not expected")
+ fail("loadInitial not expected")
} else {
callback.onResult(listOf(), 0)
}
}
override fun loadRange(params: LoadRangeParams, callback: LoadRangeCallback<String>) {
- Assert.fail("loadRange not expected")
+ fail("loadRange not expected")
}
}
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/PageEventTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/PageEventTest.kt
index 20a1116..414824a 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/PageEventTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/PageEventTest.kt
@@ -20,17 +20,17 @@
import androidx.paging.LoadType.REFRESH
import androidx.paging.PageEvent.Drop
import kotlin.coroutines.EmptyCoroutineContext
-import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.test.UnconfinedTestDispatcher
-import kotlinx.coroutines.test.runTest
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
-import org.junit.runners.Parameterized
+import kotlin.test.BeforeTest
+import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertFailsWith
import kotlin.test.assertSame
-import org.junit.Before
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.test.UnconfinedTestDispatcher
+import kotlinx.coroutines.test.runTest
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import org.junit.runners.Parameterized
internal fun <T : Any> adjacentInsertEvent(
isPrepend: Boolean,
@@ -293,7 +293,7 @@
private val differ = TestPagingDataDiffer<String>(EmptyCoroutineContext)
private lateinit var pagingData: PagingData<String>
- @Before
+ @BeforeTest
fun init() {
pagingData = if (data.isNotEmpty()) {
PagingData.from(data)
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/PageFetcherSnapshotStateTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/PageFetcherSnapshotStateTest.kt
index 5006894..ffd9a01 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/PageFetcherSnapshotStateTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/PageFetcherSnapshotStateTest.kt
@@ -24,13 +24,13 @@
import androidx.paging.PagingSource.LoadResult.Page
import androidx.paging.PagingSource.LoadResult.Page.Companion.COUNT_UNDEFINED
import com.google.common.truth.Truth.assertThat
+import kotlin.test.Test
+import kotlin.test.assertEquals
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runTest
-import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import kotlin.test.assertEquals
@OptIn(ExperimentalCoroutinesApi::class)
@RunWith(JUnit4::class)
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/PageFetcherSnapshotTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/PageFetcherSnapshotTest.kt
index 62ffbb6..f02de71 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/PageFetcherSnapshotTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/PageFetcherSnapshotTest.kt
@@ -29,6 +29,7 @@
import androidx.paging.RemoteMediatorMock.LoadEvent
import androidx.paging.TestPagingSource.Companion.LOAD_ERROR
import com.google.common.truth.Truth.assertThat
+import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertFailsWith
import kotlin.test.assertFalse
@@ -66,7 +67,6 @@
import kotlinx.coroutines.test.runTest
import kotlinx.coroutines.withContext
import kotlinx.coroutines.yield
-import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/PageFetcherTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/PageFetcherTest.kt
index 1a3a4c4..d6670d7 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/PageFetcherTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/PageFetcherTest.kt
@@ -1,19 +1,19 @@
-// /*
-// * Copyright 2019 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
-// *
-// * http://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.
-// */
-//
+/*
+ * Copyright 2019 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
+ *
+ * http://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.
+ */
+
package androidx.paging
import androidx.paging.LoadState.Loading
@@ -26,6 +26,7 @@
import androidx.paging.RemoteMediator.InitializeAction.LAUNCH_INITIAL_REFRESH
import androidx.paging.RemoteMediator.InitializeAction.SKIP_INITIAL_REFRESH
import com.google.common.truth.Truth.assertThat
+import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertFailsWith
import kotlin.test.assertNotEquals
@@ -51,7 +52,6 @@
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
import kotlinx.coroutines.withContext
-import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/PageKeyedDataSourceTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/PageKeyedDataSourceTest.kt
index 6f89ef0..9c044ef 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/PageKeyedDataSourceTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/PageKeyedDataSourceTest.kt
@@ -16,23 +16,23 @@
package androidx.paging
+import kotlin.coroutines.EmptyCoroutineContext
+import kotlin.test.Test
+import kotlin.test.assertEquals
+import kotlin.test.assertFailsWith
+import kotlin.test.assertFalse
+import kotlin.test.assertTrue
+import kotlin.test.fail
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.test.StandardTestDispatcher
import kotlinx.coroutines.test.UnconfinedTestDispatcher
-import org.junit.Assert.assertEquals
-import org.junit.Assert.assertFalse
-import org.junit.Assert.assertTrue
-import org.junit.Assert.fail
-import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
import org.mockito.Mockito.mock
import org.mockito.Mockito.verify
import org.mockito.Mockito.verifyNoMoreInteractions
-import kotlin.coroutines.EmptyCoroutineContext
-import kotlin.test.assertFailsWith
-import kotlinx.coroutines.test.StandardTestDispatcher
@OptIn(ExperimentalCoroutinesApi::class)
@RunWith(JUnit4::class)
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/PagePresenterTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/PagePresenterTest.kt
index e979bcc..13d0b94 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/PagePresenterTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/PagePresenterTest.kt
@@ -22,12 +22,12 @@
import androidx.paging.PagePresenter.ProcessPageEventCallback
import androidx.paging.PagingSource.LoadResult.Page.Companion.COUNT_UNDEFINED
import com.google.common.truth.Truth.assertThat
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
+import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertFailsWith
import kotlin.test.fail
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
@Suppress("TestFunctionName")
internal fun <T : Any> PagePresenter(
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/PagedListConfigBuilderTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/PagedListConfigBuilderTest.kt
index ad107b9..c830172 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/PagedListConfigBuilderTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/PagedListConfigBuilderTest.kt
@@ -16,8 +16,8 @@
package androidx.paging
-import org.junit.Assert
-import org.junit.Test
+import kotlin.test.Test
+import kotlin.test.assertEquals
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
@@ -29,12 +29,12 @@
val config = PagedList.Config.Builder()
.setPageSize(10)
.build()
- Assert.assertEquals(10, config.pageSize)
- Assert.assertEquals(30, config.initialLoadSizeHint)
- Assert.assertEquals(true, config.enablePlaceholders)
- Assert.assertEquals(10, config.prefetchDistance)
+ assertEquals(10, config.pageSize)
+ assertEquals(30, config.initialLoadSizeHint)
+ assertEquals(true, config.enablePlaceholders)
+ assertEquals(10, config.prefetchDistance)
@Suppress("DEPRECATION")
- Assert.assertEquals(PagedList.Config.MAX_SIZE_UNBOUNDED, config.maxSize)
+ assertEquals(PagedList.Config.MAX_SIZE_UNBOUNDED, config.maxSize)
}
@Test(expected = IllegalArgumentException::class)
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/PagedListConfigTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/PagedListConfigTest.kt
index 6746965..c34f7bf 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/PagedListConfigTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/PagedListConfigTest.kt
@@ -16,8 +16,8 @@
package androidx.paging
-import org.junit.Assert.assertEquals
-import org.junit.Test
+import kotlin.test.Test
+import kotlin.test.assertEquals
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/PagedListTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/PagedListTest.kt
index 3d7479b..b053726 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/PagedListTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/PagedListTest.kt
@@ -21,19 +21,19 @@
import androidx.testutils.TestDispatcher
import androidx.testutils.TestExecutor
import com.google.common.truth.Truth.assertThat
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.runBlocking
-import org.junit.Assert.assertEquals
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
import java.util.concurrent.Executor
import kotlin.concurrent.thread
import kotlin.coroutines.EmptyCoroutineContext
+import kotlin.test.Test
+import kotlin.test.assertEquals
import kotlin.test.assertFailsWith
import kotlin.test.assertTrue
import kotlin.test.fail
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.runBlocking
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
@RunWith(JUnit4::class)
class PagedListTest {
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/PagedStorageTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/PagedStorageTest.kt
index 88d8315..5bc9b07 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/PagedStorageTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/PagedStorageTest.kt
@@ -17,17 +17,17 @@
package androidx.paging
import androidx.paging.PagingSource.LoadResult.Page
-import org.junit.Assert.assertArrayEquals
-import org.junit.Assert.assertEquals
-import org.junit.Assert.assertFalse
-import org.junit.Assert.assertTrue
-import org.junit.Test
+import kotlin.test.Test
+import kotlin.test.assertContentEquals
+import kotlin.test.assertEquals
+import kotlin.test.assertFalse
+import kotlin.test.assertNotNull
+import kotlin.test.assertTrue
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
import org.mockito.Mockito.mock
import org.mockito.Mockito.verify
import org.mockito.Mockito.verifyNoMoreInteractions
-import kotlin.test.assertNotNull
@RunWith(JUnit4::class)
class PagedStorageTest {
@@ -41,7 +41,7 @@
fun construct() {
val storage = PagedStorage(2, pageOf("a", "b"), 2)
- assertArrayEquals(arrayOf(null, null, "a", "b", null, null), storage.toArray())
+ assertContentEquals(arrayOf(null, null, "a", "b", null, null), storage.toArray())
assertEquals(6, storage.size)
}
@@ -52,7 +52,7 @@
val storage = PagedStorage(2, pageOf("a", "b"), 2)
storage.appendPage(pageOf("c", "d"), callback)
- assertArrayEquals(arrayOf(null, null, "a", "b", "c", "d"), storage.toArray())
+ assertContentEquals(arrayOf(null, null, "a", "b", "c", "d"), storage.toArray())
verify(callback).onPageAppended(4, 2, 0)
verifyNoMoreInteractions(callback)
}
@@ -64,7 +64,7 @@
val storage = PagedStorage(2, pageOf("a", "b"), 0)
storage.appendPage(pageOf("c", "d"), callback)
- assertArrayEquals(arrayOf(null, null, "a", "b", "c", "d"), storage.toArray())
+ assertContentEquals(arrayOf(null, null, "a", "b", "c", "d"), storage.toArray())
verify(callback).onPageAppended(4, 0, 2)
verifyNoMoreInteractions(callback)
}
@@ -78,14 +78,14 @@
// change 2 nulls into c, d
storage.appendPage(pageOf("c", "d"), callback)
- assertArrayEquals(arrayOf(null, null, "a", "b", "c", "d"), storage.toArray())
+ assertContentEquals(arrayOf(null, null, "a", "b", "c", "d"), storage.toArray())
verify(callback).onPageAppended(4, 2, 0)
verifyNoMoreInteractions(callback)
// append e, f
storage.appendPage(pageOf("e", "f"), callback)
- assertArrayEquals(arrayOf(null, null, "a", "b", "c", "d", "e", "f"), storage.toArray())
+ assertContentEquals(arrayOf(null, null, "a", "b", "c", "d", "e", "f"), storage.toArray())
verify(callback).onPageAppended(6, 0, 2)
verifyNoMoreInteractions(callback)
}
@@ -97,7 +97,7 @@
val storage = PagedStorage(2, pageOf("c", "d"), 2)
storage.prependPage(pageOf("a", "b"), callback)
- assertArrayEquals(arrayOf("a", "b", "c", "d", null, null), storage.toArray())
+ assertContentEquals(arrayOf("a", "b", "c", "d", null, null), storage.toArray())
verify(callback).onPagePrepended(0, 2, 0)
verifyNoMoreInteractions(callback)
}
@@ -109,7 +109,7 @@
val storage = PagedStorage(0, pageOf("c", "d"), 2)
storage.prependPage(pageOf("a", "b"), callback)
- assertArrayEquals(arrayOf("a", "b", "c", "d", null, null), storage.toArray())
+ assertContentEquals(arrayOf("a", "b", "c", "d", null, null), storage.toArray())
verify(callback).onPagePrepended(0, 0, 2)
verifyNoMoreInteractions(callback)
}
@@ -123,14 +123,14 @@
// change 2 nulls into c, d
storage.prependPage(pageOf("c", "d"), callback)
- assertArrayEquals(arrayOf("c", "d", "e", "f", null, null), storage.toArray())
+ assertContentEquals(arrayOf("c", "d", "e", "f", null, null), storage.toArray())
verify(callback).onPagePrepended(0, 2, 0)
verifyNoMoreInteractions(callback)
// prepend a, b
storage.prependPage(pageOf("a", "b"), callback)
- assertArrayEquals(arrayOf("a", "b", "c", "d", "e", "f", null, null), storage.toArray())
+ assertContentEquals(arrayOf("a", "b", "c", "d", "e", "f", null, null), storage.toArray())
verify(callback).onPagePrepended(0, 0, 2)
verifyNoMoreInteractions(callback)
}
@@ -141,7 +141,7 @@
val storage = PagedStorage(1, pageOf("a"), 6)
storage.appendPage(pageOf("b", "c"), callback)
storage.appendPage(pageOf("d", "e", "f"), callback)
- assertArrayEquals(arrayOf(null, "a", "b", "c", "d", "e", "f", null), storage.toArray())
+ assertContentEquals(arrayOf(null, "a", "b", "c", "d", "e", "f", null), storage.toArray())
}
@Test
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/PagingConfigTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/PagingConfigTest.kt
index fa70f64..e8eb9179 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/PagingConfigTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/PagingConfigTest.kt
@@ -17,11 +17,11 @@
package androidx.paging
import androidx.paging.PagingConfig.Companion.MAX_SIZE_UNBOUNDED
-import org.junit.Assert.assertEquals
-import org.junit.Test
+import kotlin.test.Test
+import kotlin.test.assertEquals
+import kotlin.test.assertFailsWith
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import kotlin.test.assertFailsWith
@RunWith(JUnit4::class)
class PagingConfigTest {
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/PagingDataDifferTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/PagingDataDifferTest.kt
index 893b89c..1ee318c 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/PagingDataDifferTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/PagingDataDifferTest.kt
@@ -24,6 +24,7 @@
import androidx.testutils.MainDispatcherRule
import com.google.common.truth.Truth.assertThat
import kotlin.coroutines.ContinuationInterceptor
+import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertFailsWith
import kotlin.test.assertFalse
@@ -56,7 +57,6 @@
import kotlinx.coroutines.test.runTest
import kotlinx.coroutines.withContext
import org.junit.Rule
-import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/PagingSourceTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/PagingSourceTest.kt
index bf9b097..7effb00 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/PagingSourceTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/PagingSourceTest.kt
@@ -20,14 +20,14 @@
import androidx.paging.PagingSource.LoadResult
import androidx.paging.PagingSource.LoadResult.Page.Companion.COUNT_UNDEFINED
import com.google.common.truth.Truth.assertThat
+import kotlin.random.Random
+import kotlin.test.Test
+import kotlin.test.assertEquals
+import kotlin.test.assertFailsWith
+import kotlin.test.assertTrue
import kotlinx.coroutines.runBlocking
-import org.junit.Assert.assertEquals
-import org.junit.Assert.assertTrue
-import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import kotlin.random.Random
-import kotlin.test.assertFailsWith
@RunWith(JUnit4::class)
class PagingSourceTest {
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/PagingStateTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/PagingStateTest.kt
index 23a69fc..c2a4bff 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/PagingStateTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/PagingStateTest.kt
@@ -17,12 +17,12 @@
package androidx.paging
import androidx.paging.PagingSource.LoadResult.Page
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
+import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertFalse
import kotlin.test.assertTrue
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
@RunWith(JUnit4::class)
class PagingStateTest {
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/PositionalDataSourceTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/PositionalDataSourceTest.kt
index 3c428c1..036e255 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/PositionalDataSourceTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/PositionalDataSourceTest.kt
@@ -16,21 +16,21 @@
package androidx.paging
+import java.util.concurrent.Executor
+import kotlin.test.Test
+import kotlin.test.assertEquals
+import kotlin.test.assertTrue
+import kotlin.test.fail
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.runTest
-import org.junit.Assert.assertEquals
-import org.junit.Assert.assertTrue
-import org.junit.Assert.fail
-import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
import org.mockito.Mockito.mock
import org.mockito.Mockito.verify
import org.mockito.Mockito.verifyNoMoreInteractions
-import java.util.concurrent.Executor
@Suppress("DEPRECATION")
@RunWith(JUnit4::class)
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/RemoteMediatorAccessorTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/RemoteMediatorAccessorTest.kt
index c59ebc0..5e27e87 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/RemoteMediatorAccessorTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/RemoteMediatorAccessorTest.kt
@@ -25,22 +25,22 @@
import androidx.paging.RemoteMediatorMock.LoadEvent
import androidx.paging.TestPagingSource.Companion.LOAD_ERROR
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.atomic.AtomicBoolean
+import kotlin.test.Test
+import kotlin.test.assertEquals
+import kotlin.test.fail
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.test.StandardTestDispatcher
import kotlinx.coroutines.test.TestScope
-import kotlinx.coroutines.test.runTest
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.advanceTimeBy
import kotlinx.coroutines.test.advanceUntilIdle
import kotlinx.coroutines.test.runCurrent
-import org.junit.Test
+import kotlinx.coroutines.test.runTest
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import java.util.concurrent.atomic.AtomicBoolean
-import kotlin.test.assertEquals
-import kotlin.test.fail
@OptIn(ExperimentalCoroutinesApi::class, ExperimentalPagingApi::class)
@RunWith(JUnit4::class)
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/SeparatorsTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/SeparatorsTest.kt
index 88e807e..bff6c35 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/SeparatorsTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/SeparatorsTest.kt
@@ -16,22 +16,22 @@
package androidx.paging
-import androidx.paging.LoadState.NotLoading
import androidx.paging.LoadState.Loading
+import androidx.paging.LoadState.NotLoading
import androidx.paging.LoadType.APPEND
import androidx.paging.LoadType.PREPEND
import androidx.paging.PageEvent.Drop
import androidx.paging.TerminalSeparatorType.FULLY_COMPLETE
import androidx.paging.TerminalSeparatorType.SOURCE_COMPLETE
import com.google.common.truth.Truth.assertThat
+import kotlin.test.Test
+import kotlin.test.assertEquals
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.toList
import kotlinx.coroutines.test.runTest
-import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import kotlin.test.assertEquals
private fun <T : Any> List<PageEvent<T>>.getItems() = mapNotNull { event ->
when (event) {
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/SeparatorsWithRemoteMediatorTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/SeparatorsWithRemoteMediatorTest.kt
index ec78e09..15c3097 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/SeparatorsWithRemoteMediatorTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/SeparatorsWithRemoteMediatorTest.kt
@@ -21,14 +21,14 @@
import androidx.paging.TerminalSeparatorType.FULLY_COMPLETE
import androidx.paging.TerminalSeparatorType.SOURCE_COMPLETE
import com.google.common.truth.Truth.assertThat
+import kotlin.test.Test
+import kotlin.test.assertFailsWith
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.toList
import kotlinx.coroutines.test.runTest
-import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import kotlin.test.assertFailsWith
@OptIn(ExperimentalCoroutinesApi::class)
@RunWith(JUnit4::class)
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/SimpleChannelFlowTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/SimpleChannelFlowTest.kt
index 237e540..4971df3 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/SimpleChannelFlowTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/SimpleChannelFlowTest.kt
@@ -17,9 +17,12 @@
package androidx.paging
import com.google.common.truth.Truth.assertThat
+import kotlin.test.Test
+import kotlin.test.fail
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.CoroutineStart
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.awaitCancellation
import kotlinx.coroutines.channels.ProducerScope
@@ -35,15 +38,12 @@
import kotlinx.coroutines.flow.takeWhile
import kotlinx.coroutines.flow.toList
import kotlinx.coroutines.launch
-import kotlinx.coroutines.CoroutineStart
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.advanceTimeBy
import kotlinx.coroutines.test.runTest
-import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import kotlin.test.fail
@RunWith(Parameterized::class)
@OptIn(ExperimentalCoroutinesApi::class)
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/SimpleTransformLatestTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/SimpleTransformLatestTest.kt
index 7cc311e..624b8c4 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/SimpleTransformLatestTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/SimpleTransformLatestTest.kt
@@ -17,6 +17,7 @@
package androidx.paging
import com.google.common.truth.Truth.assertThat
+import kotlin.test.Test
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.awaitCancellation
import kotlinx.coroutines.delay
@@ -28,7 +29,6 @@
import kotlinx.coroutines.flow.transformLatest
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runTest
-import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/SingleRunnerTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/SingleRunnerTest.kt
index 9e80ac8..1e29a83c 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/SingleRunnerTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/SingleRunnerTest.kt
@@ -17,6 +17,13 @@
package androidx.paging
import com.google.common.truth.Truth.assertThat
+import java.util.Collections
+import java.util.concurrent.CountDownLatch
+import kotlin.test.Test
+import kotlin.test.assertEquals
+import kotlin.test.assertFalse
+import kotlin.test.assertTrue
+import kotlin.time.Duration.Companion.seconds
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.Dispatchers
@@ -32,15 +39,8 @@
import kotlinx.coroutines.test.runTest
import kotlinx.coroutines.withContext
import kotlinx.coroutines.withTimeout
-import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import java.util.Collections
-import java.util.concurrent.CountDownLatch
-import kotlin.test.assertEquals
-import kotlin.test.assertFalse
-import kotlin.test.assertTrue
-import kotlin.time.Duration.Companion.seconds
@OptIn(ExperimentalCoroutinesApi::class)
@RunWith(JUnit4::class)
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/WrappedItemKeyedDataSourceTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/WrappedItemKeyedDataSourceTest.kt
index f642d6c..e794949 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/WrappedItemKeyedDataSourceTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/WrappedItemKeyedDataSourceTest.kt
@@ -16,10 +16,10 @@
package androidx.paging
-import org.junit.Test
+import kotlin.test.Test
+import kotlin.test.assertTrue
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import kotlin.test.assertTrue
@RunWith(JUnit4::class)
class WrappedItemKeyedDataSourceTest {
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/WrappedPageKeyedDataSourceTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/WrappedPageKeyedDataSourceTest.kt
index cf4ef24..4202070 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/WrappedPageKeyedDataSourceTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/WrappedPageKeyedDataSourceTest.kt
@@ -16,10 +16,10 @@
package androidx.paging
-import org.junit.Test
+import kotlin.test.Test
+import kotlin.test.assertTrue
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import kotlin.test.assertTrue
@RunWith(JUnit4::class)
class WrappedPageKeyedDataSourceTest {
diff --git a/paging/paging-common/src/test/kotlin/androidx/paging/WrappedPositionalDataSourceTest.kt b/paging/paging-common/src/test/kotlin/androidx/paging/WrappedPositionalDataSourceTest.kt
index b56fe139..d3a54237 100644
--- a/paging/paging-common/src/test/kotlin/androidx/paging/WrappedPositionalDataSourceTest.kt
+++ b/paging/paging-common/src/test/kotlin/androidx/paging/WrappedPositionalDataSourceTest.kt
@@ -16,10 +16,10 @@
package androidx.paging
-import org.junit.Test
+import kotlin.test.Test
+import kotlin.test.assertTrue
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import kotlin.test.assertTrue
@RunWith(JUnit4::class)
class WrappedPositionalDataSourceTest {
diff --git a/paging/paging-compose/build.gradle b/paging/paging-compose/build.gradle
index d31e914..8affe5a 100644
--- a/paging/paging-compose/build.gradle
+++ b/paging/paging-compose/build.gradle
@@ -43,7 +43,7 @@
}
androidx {
- name = "Android Paging-Compose"
+ name = "Paging-Compose"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.PAGING_COMPOSE
inceptionYear = "2020"
diff --git a/paging/paging-compose/integration-tests/paging-demos/src/main/java/androidx/paging/compose/demos/room/PagingRoomSample.kt b/paging/paging-compose/integration-tests/paging-demos/src/main/java/androidx/paging/compose/demos/room/PagingRoomSample.kt
index cdcd575..868b4b3 100644
--- a/paging/paging-compose/integration-tests/paging-demos/src/main/java/androidx/paging/compose/demos/room/PagingRoomSample.kt
+++ b/paging/paging-compose/integration-tests/paging-demos/src/main/java/androidx/paging/compose/demos/room/PagingRoomSample.kt
@@ -35,9 +35,9 @@
import androidx.paging.PagingConfig
import androidx.paging.compose.collectAsLazyPagingItems
import androidx.paging.compose.itemKey
+import kotlin.random.Random
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
-import kotlin.random.Random
@Composable
fun PagingRoomDemo() {
diff --git a/paging/paging-compose/samples/build.gradle b/paging/paging-compose/samples/build.gradle
index 6fd15b4..753063b 100644
--- a/paging/paging-compose/samples/build.gradle
+++ b/paging/paging-compose/samples/build.gradle
@@ -34,7 +34,7 @@
}
androidx {
- name = "AndroidX Paging Compose Samples"
+ name = "Paging Compose Samples"
type = LibraryType.SAMPLES
mavenVersion = LibraryVersions.PAGING_COMPOSE
inceptionYear = "2020"
diff --git a/paging/paging-compose/src/androidTest/java/androidx/paging/compose/LazyPagingItemsTest.kt b/paging/paging-compose/src/androidTest/java/androidx/paging/compose/LazyPagingItemsTest.kt
index f3ae0ae..f112c3f 100644
--- a/paging/paging-compose/src/androidTest/java/androidx/paging/compose/LazyPagingItemsTest.kt
+++ b/paging/paging-compose/src/androidTest/java/androidx/paging/compose/LazyPagingItemsTest.kt
@@ -51,9 +51,9 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.isActive
import kotlinx.coroutines.runBlocking
-import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.StandardTestDispatcher
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.UnconfinedTestDispatcher
diff --git a/paging/paging-compose/src/main/java/androidx/paging/compose/LazyFoundationExtensions.kt b/paging/paging-compose/src/main/java/androidx/paging/compose/LazyFoundationExtensions.kt
index 5b28b9f..bb24cb0 100644
--- a/paging/paging-compose/src/main/java/androidx/paging/compose/LazyFoundationExtensions.kt
+++ b/paging/paging-compose/src/main/java/androidx/paging/compose/LazyFoundationExtensions.kt
@@ -16,8 +16,8 @@
package androidx.paging.compose
-import androidx.paging.PagingConfig
import androidx.compose.foundation.lazy.grid.LazyGridScope
+import androidx.paging.PagingConfig
/**
* Returns a factory of stable and unique keys representing the item.
diff --git a/paging/paging-guava/build.gradle b/paging/paging-guava/build.gradle
index 041702f..f0151c2 100644
--- a/paging/paging-guava/build.gradle
+++ b/paging/paging-guava/build.gradle
@@ -39,7 +39,7 @@
}
androidx {
- name = "Android Paging Guava"
+ name = "Paging Guava"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2019"
description = "Android Paging Guava"
diff --git a/paging/paging-guava/src/main/java/androidx/paging/ListenableFuturePagingData.kt b/paging/paging-guava/src/main/java/androidx/paging/ListenableFuturePagingData.kt
index 9a0d0bd..4ce7253 100644
--- a/paging/paging-guava/src/main/java/androidx/paging/ListenableFuturePagingData.kt
+++ b/paging/paging-guava/src/main/java/androidx/paging/ListenableFuturePagingData.kt
@@ -20,10 +20,10 @@
import androidx.annotation.CheckResult
import com.google.common.util.concurrent.AsyncFunction
+import java.util.concurrent.Executor
import kotlinx.coroutines.asCoroutineDispatcher
import kotlinx.coroutines.guava.await
import kotlinx.coroutines.withContext
-import java.util.concurrent.Executor
/**
* Returns a [PagingData] containing the result of applying the given [transform] to each
diff --git a/paging/paging-guava/src/test/java/androidx/paging/ListenableFuturePagingSourceTest.kt b/paging/paging-guava/src/test/java/androidx/paging/ListenableFuturePagingSourceTest.kt
index 747310e..ae8a63a 100644
--- a/paging/paging-guava/src/test/java/androidx/paging/ListenableFuturePagingSourceTest.kt
+++ b/paging/paging-guava/src/test/java/androidx/paging/ListenableFuturePagingSourceTest.kt
@@ -20,12 +20,12 @@
import androidx.paging.PagingSource.LoadResult.Page
import com.google.common.util.concurrent.ListenableFuture
import com.google.common.util.concurrent.SettableFuture
+import kotlin.test.assertEquals
+import kotlin.test.assertFailsWith
import kotlinx.coroutines.runBlocking
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import kotlin.test.assertEquals
-import kotlin.test.assertFailsWith
@RunWith(JUnit4::class)
class ListenableFuturePagingSourceTest {
diff --git a/paging/paging-guava/src/test/java/androidx/paging/ListenableFutureRemoteMediatorTest.kt b/paging/paging-guava/src/test/java/androidx/paging/ListenableFutureRemoteMediatorTest.kt
index e062eb5..2bf2473 100644
--- a/paging/paging-guava/src/test/java/androidx/paging/ListenableFutureRemoteMediatorTest.kt
+++ b/paging/paging-guava/src/test/java/androidx/paging/ListenableFutureRemoteMediatorTest.kt
@@ -20,13 +20,13 @@
import androidx.paging.RemoteMediator.InitializeAction.SKIP_INITIAL_REFRESH
import com.google.common.util.concurrent.Futures
import com.google.common.util.concurrent.ListenableFuture
+import kotlin.test.assertEquals
+import kotlin.test.fail
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runTest
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import kotlin.test.assertEquals
-import kotlin.test.fail
@OptIn(ExperimentalCoroutinesApi::class, ExperimentalPagingApi::class)
@RunWith(JUnit4::class)
diff --git a/paging/paging-runtime-ktx/build.gradle b/paging/paging-runtime-ktx/build.gradle
index 3f2e05d..f674b7e 100644
--- a/paging/paging-runtime-ktx/build.gradle
+++ b/paging/paging-runtime-ktx/build.gradle
@@ -29,7 +29,7 @@
}
androidx {
- name = "Android Paging-Runtime Kotlin Extensions"
+ name = "Paging-Runtime Kotlin Extensions"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "Kotlin extensions for 'paging-runtime' artifact"
diff --git a/paging/paging-runtime/api/current.txt b/paging/paging-runtime/api/current.txt
index f52790f..ab368d2 100644
--- a/paging/paging-runtime/api/current.txt
+++ b/paging/paging-runtime/api/current.txt
@@ -2,8 +2,8 @@
package androidx.paging {
@Deprecated public class AsyncPagedListDiffer<T> {
- ctor @Deprecated public AsyncPagedListDiffer(androidx.recyclerview.widget.RecyclerView.Adapter<?> adapter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
ctor @Deprecated public AsyncPagedListDiffer(androidx.recyclerview.widget.ListUpdateCallback listUpdateCallback, androidx.recyclerview.widget.AsyncDifferConfig<T> config);
+ ctor @Deprecated public AsyncPagedListDiffer(androidx.recyclerview.widget.RecyclerView.Adapter<?> adapter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
method @Deprecated public void addLoadStateListener(kotlin.jvm.functions.Function2<? super androidx.paging.LoadType,? super androidx.paging.LoadState,kotlin.Unit> listener);
method @Deprecated public void addPagedListListener(androidx.paging.AsyncPagedListDiffer.PagedListListener<T> listener);
method @Deprecated public final void addPagedListListener(kotlin.jvm.functions.Function2<? super androidx.paging.PagedList<T>,? super androidx.paging.PagedList<T>,kotlin.Unit> callback);
@@ -24,9 +24,9 @@
}
public final class AsyncPagingDataDiffer<T> {
- ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlin.coroutines.CoroutineContext mainDispatcher, optional kotlin.coroutines.CoroutineContext workerDispatcher);
- ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlin.coroutines.CoroutineContext mainDispatcher);
ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback);
+ ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlin.coroutines.CoroutineContext mainDispatcher);
+ ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlin.coroutines.CoroutineContext mainDispatcher, optional kotlin.coroutines.CoroutineContext workerDispatcher);
ctor @Deprecated public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
ctor @Deprecated public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
method public void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
@@ -41,8 +41,8 @@
method public void removeOnPagesUpdatedListener(kotlin.jvm.functions.Function0<kotlin.Unit> listener);
method public void retry();
method public androidx.paging.ItemSnapshotList<T> snapshot();
- method public suspend Object? submitData(androidx.paging.PagingData<T> pagingData, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public void submitData(androidx.lifecycle.Lifecycle lifecycle, androidx.paging.PagingData<T> pagingData);
+ method public suspend Object? submitData(androidx.paging.PagingData<T> pagingData, kotlin.coroutines.Continuation<? super kotlin.Unit>);
property public final int itemCount;
property public final kotlinx.coroutines.flow.Flow<androidx.paging.CombinedLoadStates> loadStateFlow;
property public final kotlinx.coroutines.flow.Flow<kotlin.Unit> onPagesUpdatedFlow;
@@ -74,17 +74,17 @@
method public final int getItemViewType(int position);
method public final androidx.paging.LoadState getLoadState();
method public int getStateViewType(androidx.paging.LoadState loadState);
- method public final void onBindViewHolder(VH holder, int position);
method public abstract void onBindViewHolder(VH holder, androidx.paging.LoadState loadState);
- method public final VH onCreateViewHolder(android.view.ViewGroup parent, int viewType);
+ method public final void onBindViewHolder(VH holder, int position);
method public abstract VH onCreateViewHolder(android.view.ViewGroup parent, androidx.paging.LoadState loadState);
+ method public final VH onCreateViewHolder(android.view.ViewGroup parent, int viewType);
method public final void setLoadState(androidx.paging.LoadState);
property public final androidx.paging.LoadState loadState;
}
@Deprecated public abstract class PagedListAdapter<T, VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> extends androidx.recyclerview.widget.RecyclerView.Adapter<VH> {
- ctor @Deprecated protected PagedListAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
ctor @Deprecated protected PagedListAdapter(androidx.recyclerview.widget.AsyncDifferConfig<T> config);
+ ctor @Deprecated protected PagedListAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
method @Deprecated public void addLoadStateListener(kotlin.jvm.functions.Function2<? super androidx.paging.LoadType,? super androidx.paging.LoadState,kotlin.Unit> listener);
method @Deprecated public androidx.paging.PagedList<T>? getCurrentList();
method @Deprecated protected T? getItem(int position);
@@ -101,9 +101,9 @@
}
public abstract class PagingDataAdapter<T, VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> extends androidx.recyclerview.widget.RecyclerView.Adapter<VH> {
- ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlin.coroutines.CoroutineContext mainDispatcher, optional kotlin.coroutines.CoroutineContext workerDispatcher);
- ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlin.coroutines.CoroutineContext mainDispatcher);
ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
+ ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlin.coroutines.CoroutineContext mainDispatcher);
+ ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlin.coroutines.CoroutineContext mainDispatcher, optional kotlin.coroutines.CoroutineContext workerDispatcher);
ctor @Deprecated public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
ctor @Deprecated public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
method public final void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
@@ -120,8 +120,8 @@
method public final void retry();
method public final void setHasStableIds(boolean hasStableIds);
method public final androidx.paging.ItemSnapshotList<T> snapshot();
- method public final suspend Object? submitData(androidx.paging.PagingData<T> pagingData, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public final void submitData(androidx.lifecycle.Lifecycle lifecycle, androidx.paging.PagingData<T> pagingData);
+ method public final suspend Object? submitData(androidx.paging.PagingData<T> pagingData, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public final androidx.recyclerview.widget.ConcatAdapter withLoadStateFooter(androidx.paging.LoadStateAdapter<?> footer);
method public final androidx.recyclerview.widget.ConcatAdapter withLoadStateHeader(androidx.paging.LoadStateAdapter<?> header);
method public final androidx.recyclerview.widget.ConcatAdapter withLoadStateHeaderAndFooter(androidx.paging.LoadStateAdapter<?> header, androidx.paging.LoadStateAdapter<?> footer);
diff --git a/paging/paging-runtime/api/public_plus_experimental_current.txt b/paging/paging-runtime/api/public_plus_experimental_current.txt
index f52790f..ab368d2 100644
--- a/paging/paging-runtime/api/public_plus_experimental_current.txt
+++ b/paging/paging-runtime/api/public_plus_experimental_current.txt
@@ -2,8 +2,8 @@
package androidx.paging {
@Deprecated public class AsyncPagedListDiffer<T> {
- ctor @Deprecated public AsyncPagedListDiffer(androidx.recyclerview.widget.RecyclerView.Adapter<?> adapter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
ctor @Deprecated public AsyncPagedListDiffer(androidx.recyclerview.widget.ListUpdateCallback listUpdateCallback, androidx.recyclerview.widget.AsyncDifferConfig<T> config);
+ ctor @Deprecated public AsyncPagedListDiffer(androidx.recyclerview.widget.RecyclerView.Adapter<?> adapter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
method @Deprecated public void addLoadStateListener(kotlin.jvm.functions.Function2<? super androidx.paging.LoadType,? super androidx.paging.LoadState,kotlin.Unit> listener);
method @Deprecated public void addPagedListListener(androidx.paging.AsyncPagedListDiffer.PagedListListener<T> listener);
method @Deprecated public final void addPagedListListener(kotlin.jvm.functions.Function2<? super androidx.paging.PagedList<T>,? super androidx.paging.PagedList<T>,kotlin.Unit> callback);
@@ -24,9 +24,9 @@
}
public final class AsyncPagingDataDiffer<T> {
- ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlin.coroutines.CoroutineContext mainDispatcher, optional kotlin.coroutines.CoroutineContext workerDispatcher);
- ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlin.coroutines.CoroutineContext mainDispatcher);
ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback);
+ ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlin.coroutines.CoroutineContext mainDispatcher);
+ ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlin.coroutines.CoroutineContext mainDispatcher, optional kotlin.coroutines.CoroutineContext workerDispatcher);
ctor @Deprecated public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
ctor @Deprecated public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
method public void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
@@ -41,8 +41,8 @@
method public void removeOnPagesUpdatedListener(kotlin.jvm.functions.Function0<kotlin.Unit> listener);
method public void retry();
method public androidx.paging.ItemSnapshotList<T> snapshot();
- method public suspend Object? submitData(androidx.paging.PagingData<T> pagingData, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public void submitData(androidx.lifecycle.Lifecycle lifecycle, androidx.paging.PagingData<T> pagingData);
+ method public suspend Object? submitData(androidx.paging.PagingData<T> pagingData, kotlin.coroutines.Continuation<? super kotlin.Unit>);
property public final int itemCount;
property public final kotlinx.coroutines.flow.Flow<androidx.paging.CombinedLoadStates> loadStateFlow;
property public final kotlinx.coroutines.flow.Flow<kotlin.Unit> onPagesUpdatedFlow;
@@ -74,17 +74,17 @@
method public final int getItemViewType(int position);
method public final androidx.paging.LoadState getLoadState();
method public int getStateViewType(androidx.paging.LoadState loadState);
- method public final void onBindViewHolder(VH holder, int position);
method public abstract void onBindViewHolder(VH holder, androidx.paging.LoadState loadState);
- method public final VH onCreateViewHolder(android.view.ViewGroup parent, int viewType);
+ method public final void onBindViewHolder(VH holder, int position);
method public abstract VH onCreateViewHolder(android.view.ViewGroup parent, androidx.paging.LoadState loadState);
+ method public final VH onCreateViewHolder(android.view.ViewGroup parent, int viewType);
method public final void setLoadState(androidx.paging.LoadState);
property public final androidx.paging.LoadState loadState;
}
@Deprecated public abstract class PagedListAdapter<T, VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> extends androidx.recyclerview.widget.RecyclerView.Adapter<VH> {
- ctor @Deprecated protected PagedListAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
ctor @Deprecated protected PagedListAdapter(androidx.recyclerview.widget.AsyncDifferConfig<T> config);
+ ctor @Deprecated protected PagedListAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
method @Deprecated public void addLoadStateListener(kotlin.jvm.functions.Function2<? super androidx.paging.LoadType,? super androidx.paging.LoadState,kotlin.Unit> listener);
method @Deprecated public androidx.paging.PagedList<T>? getCurrentList();
method @Deprecated protected T? getItem(int position);
@@ -101,9 +101,9 @@
}
public abstract class PagingDataAdapter<T, VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> extends androidx.recyclerview.widget.RecyclerView.Adapter<VH> {
- ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlin.coroutines.CoroutineContext mainDispatcher, optional kotlin.coroutines.CoroutineContext workerDispatcher);
- ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlin.coroutines.CoroutineContext mainDispatcher);
ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
+ ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlin.coroutines.CoroutineContext mainDispatcher);
+ ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlin.coroutines.CoroutineContext mainDispatcher, optional kotlin.coroutines.CoroutineContext workerDispatcher);
ctor @Deprecated public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
ctor @Deprecated public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
method public final void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
@@ -120,8 +120,8 @@
method public final void retry();
method public final void setHasStableIds(boolean hasStableIds);
method public final androidx.paging.ItemSnapshotList<T> snapshot();
- method public final suspend Object? submitData(androidx.paging.PagingData<T> pagingData, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public final void submitData(androidx.lifecycle.Lifecycle lifecycle, androidx.paging.PagingData<T> pagingData);
+ method public final suspend Object? submitData(androidx.paging.PagingData<T> pagingData, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public final androidx.recyclerview.widget.ConcatAdapter withLoadStateFooter(androidx.paging.LoadStateAdapter<?> footer);
method public final androidx.recyclerview.widget.ConcatAdapter withLoadStateHeader(androidx.paging.LoadStateAdapter<?> header);
method public final androidx.recyclerview.widget.ConcatAdapter withLoadStateHeaderAndFooter(androidx.paging.LoadStateAdapter<?> header, androidx.paging.LoadStateAdapter<?> footer);
diff --git a/paging/paging-runtime/api/restricted_current.txt b/paging/paging-runtime/api/restricted_current.txt
index f52790f..ab368d2 100644
--- a/paging/paging-runtime/api/restricted_current.txt
+++ b/paging/paging-runtime/api/restricted_current.txt
@@ -2,8 +2,8 @@
package androidx.paging {
@Deprecated public class AsyncPagedListDiffer<T> {
- ctor @Deprecated public AsyncPagedListDiffer(androidx.recyclerview.widget.RecyclerView.Adapter<?> adapter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
ctor @Deprecated public AsyncPagedListDiffer(androidx.recyclerview.widget.ListUpdateCallback listUpdateCallback, androidx.recyclerview.widget.AsyncDifferConfig<T> config);
+ ctor @Deprecated public AsyncPagedListDiffer(androidx.recyclerview.widget.RecyclerView.Adapter<?> adapter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
method @Deprecated public void addLoadStateListener(kotlin.jvm.functions.Function2<? super androidx.paging.LoadType,? super androidx.paging.LoadState,kotlin.Unit> listener);
method @Deprecated public void addPagedListListener(androidx.paging.AsyncPagedListDiffer.PagedListListener<T> listener);
method @Deprecated public final void addPagedListListener(kotlin.jvm.functions.Function2<? super androidx.paging.PagedList<T>,? super androidx.paging.PagedList<T>,kotlin.Unit> callback);
@@ -24,9 +24,9 @@
}
public final class AsyncPagingDataDiffer<T> {
- ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlin.coroutines.CoroutineContext mainDispatcher, optional kotlin.coroutines.CoroutineContext workerDispatcher);
- ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlin.coroutines.CoroutineContext mainDispatcher);
ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback);
+ ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlin.coroutines.CoroutineContext mainDispatcher);
+ ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlin.coroutines.CoroutineContext mainDispatcher, optional kotlin.coroutines.CoroutineContext workerDispatcher);
ctor @Deprecated public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
ctor @Deprecated public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
method public void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
@@ -41,8 +41,8 @@
method public void removeOnPagesUpdatedListener(kotlin.jvm.functions.Function0<kotlin.Unit> listener);
method public void retry();
method public androidx.paging.ItemSnapshotList<T> snapshot();
- method public suspend Object? submitData(androidx.paging.PagingData<T> pagingData, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public void submitData(androidx.lifecycle.Lifecycle lifecycle, androidx.paging.PagingData<T> pagingData);
+ method public suspend Object? submitData(androidx.paging.PagingData<T> pagingData, kotlin.coroutines.Continuation<? super kotlin.Unit>);
property public final int itemCount;
property public final kotlinx.coroutines.flow.Flow<androidx.paging.CombinedLoadStates> loadStateFlow;
property public final kotlinx.coroutines.flow.Flow<kotlin.Unit> onPagesUpdatedFlow;
@@ -74,17 +74,17 @@
method public final int getItemViewType(int position);
method public final androidx.paging.LoadState getLoadState();
method public int getStateViewType(androidx.paging.LoadState loadState);
- method public final void onBindViewHolder(VH holder, int position);
method public abstract void onBindViewHolder(VH holder, androidx.paging.LoadState loadState);
- method public final VH onCreateViewHolder(android.view.ViewGroup parent, int viewType);
+ method public final void onBindViewHolder(VH holder, int position);
method public abstract VH onCreateViewHolder(android.view.ViewGroup parent, androidx.paging.LoadState loadState);
+ method public final VH onCreateViewHolder(android.view.ViewGroup parent, int viewType);
method public final void setLoadState(androidx.paging.LoadState);
property public final androidx.paging.LoadState loadState;
}
@Deprecated public abstract class PagedListAdapter<T, VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> extends androidx.recyclerview.widget.RecyclerView.Adapter<VH> {
- ctor @Deprecated protected PagedListAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
ctor @Deprecated protected PagedListAdapter(androidx.recyclerview.widget.AsyncDifferConfig<T> config);
+ ctor @Deprecated protected PagedListAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
method @Deprecated public void addLoadStateListener(kotlin.jvm.functions.Function2<? super androidx.paging.LoadType,? super androidx.paging.LoadState,kotlin.Unit> listener);
method @Deprecated public androidx.paging.PagedList<T>? getCurrentList();
method @Deprecated protected T? getItem(int position);
@@ -101,9 +101,9 @@
}
public abstract class PagingDataAdapter<T, VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> extends androidx.recyclerview.widget.RecyclerView.Adapter<VH> {
- ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlin.coroutines.CoroutineContext mainDispatcher, optional kotlin.coroutines.CoroutineContext workerDispatcher);
- ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlin.coroutines.CoroutineContext mainDispatcher);
ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
+ ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlin.coroutines.CoroutineContext mainDispatcher);
+ ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlin.coroutines.CoroutineContext mainDispatcher, optional kotlin.coroutines.CoroutineContext workerDispatcher);
ctor @Deprecated public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
ctor @Deprecated public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
method public final void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
@@ -120,8 +120,8 @@
method public final void retry();
method public final void setHasStableIds(boolean hasStableIds);
method public final androidx.paging.ItemSnapshotList<T> snapshot();
- method public final suspend Object? submitData(androidx.paging.PagingData<T> pagingData, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public final void submitData(androidx.lifecycle.Lifecycle lifecycle, androidx.paging.PagingData<T> pagingData);
+ method public final suspend Object? submitData(androidx.paging.PagingData<T> pagingData, kotlin.coroutines.Continuation<? super kotlin.Unit>);
method public final androidx.recyclerview.widget.ConcatAdapter withLoadStateFooter(androidx.paging.LoadStateAdapter<?> footer);
method public final androidx.recyclerview.widget.ConcatAdapter withLoadStateHeader(androidx.paging.LoadStateAdapter<?> header);
method public final androidx.recyclerview.widget.ConcatAdapter withLoadStateHeaderAndFooter(androidx.paging.LoadStateAdapter<?> header, androidx.paging.LoadStateAdapter<?> footer);
diff --git a/paging/paging-runtime/build.gradle b/paging/paging-runtime/build.gradle
index 47fdac8..de64d71 100644
--- a/paging/paging-runtime/build.gradle
+++ b/paging/paging-runtime/build.gradle
@@ -61,7 +61,7 @@
}
androidx {
- name = "Android Paging-Runtime"
+ name = "Paging-Runtime"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2017"
description = "Android Paging-Runtime"
diff --git a/paging/paging-runtime/src/androidTest/java/androidx/paging/AsyncPagedListDifferTest.kt b/paging/paging-runtime/src/androidTest/java/androidx/paging/AsyncPagedListDifferTest.kt
index 65537a6..23de20f 100644
--- a/paging/paging-runtime/src/androidTest/java/androidx/paging/AsyncPagedListDifferTest.kt
+++ b/paging/paging-runtime/src/androidTest/java/androidx/paging/AsyncPagedListDifferTest.kt
@@ -31,6 +31,9 @@
import androidx.test.filters.SmallTest
import androidx.testutils.TestExecutor
import com.google.common.truth.Truth.assertThat
+import kotlin.coroutines.EmptyCoroutineContext
+import kotlin.test.assertFalse
+import kotlin.test.assertTrue
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.asCoroutineDispatcher
import org.junit.Assert.assertEquals
@@ -39,9 +42,6 @@
import org.junit.Assert.fail
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.coroutines.EmptyCoroutineContext
-import kotlin.test.assertFalse
-import kotlin.test.assertTrue
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/paging/paging-runtime/src/androidTest/java/androidx/paging/LivePagedListTest.kt b/paging/paging-runtime/src/androidTest/java/androidx/paging/LivePagedListTest.kt
index 5affe1c..7d0442c 100644
--- a/paging/paging-runtime/src/androidTest/java/androidx/paging/LivePagedListTest.kt
+++ b/paging/paging-runtime/src/androidTest/java/androidx/paging/LivePagedListTest.kt
@@ -28,6 +28,8 @@
import androidx.test.filters.SmallTest
import androidx.testutils.TestDispatcher
import com.google.common.truth.Truth.assertThat
+import kotlin.test.assertEquals
+import kotlin.test.assertTrue
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.Dispatchers
@@ -35,14 +37,12 @@
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.asCoroutineDispatcher
import kotlinx.coroutines.test.TestCoroutineScope
+import kotlinx.coroutines.test.advanceUntilIdle
import kotlinx.coroutines.test.runBlockingTest
import org.junit.Assert.assertNotNull
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.test.assertEquals
-import kotlin.test.assertTrue
-import kotlinx.coroutines.test.advanceUntilIdle
@RunWith(AndroidJUnit4::class)
@SmallTest
diff --git a/paging/paging-runtime/src/androidTest/java/androidx/paging/LoadFullListTest.kt b/paging/paging-runtime/src/androidTest/java/androidx/paging/LoadFullListTest.kt
index 9c9c120..5bce270 100644
--- a/paging/paging-runtime/src/androidTest/java/androidx/paging/LoadFullListTest.kt
+++ b/paging/paging-runtime/src/androidTest/java/androidx/paging/LoadFullListTest.kt
@@ -20,6 +20,7 @@
import androidx.test.filters.MediumTest
import androidx.testutils.MainDispatcherRule
import com.google.common.truth.Truth.assertThat
+import kotlin.coroutines.ContinuationInterceptor
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -33,7 +34,6 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import kotlin.coroutines.ContinuationInterceptor
@OptIn(ExperimentalCoroutinesApi::class)
@MediumTest
diff --git a/paging/paging-runtime/src/androidTest/java/androidx/paging/NullPaddedListDiffWithRecyclerViewTest.kt b/paging/paging-runtime/src/androidTest/java/androidx/paging/NullPaddedListDiffWithRecyclerViewTest.kt
index a1093bf..edfa92a 100644
--- a/paging/paging-runtime/src/androidTest/java/androidx/paging/NullPaddedListDiffWithRecyclerViewTest.kt
+++ b/paging/paging-runtime/src/androidTest/java/androidx/paging/NullPaddedListDiffWithRecyclerViewTest.kt
@@ -30,10 +30,10 @@
import androidx.test.filters.LargeTest
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
+import kotlin.random.Random
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.random.Random
/**
* For some tests, this test uses a real recyclerview with a real adapter to serve as an
diff --git a/paging/paging-runtime/src/androidTest/java/androidx/paging/StateRestorationTest.kt b/paging/paging-runtime/src/androidTest/java/androidx/paging/StateRestorationTest.kt
index 338644c..f608c44 100644
--- a/paging/paging-runtime/src/androidTest/java/androidx/paging/StateRestorationTest.kt
+++ b/paging/paging-runtime/src/androidTest/java/androidx/paging/StateRestorationTest.kt
@@ -35,6 +35,9 @@
import androidx.test.filters.SdkSuppress
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
+import kotlin.coroutines.ContinuationInterceptor
+import kotlin.coroutines.CoroutineContext
+import kotlin.time.ExperimentalTime
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.InternalCoroutinesApi
import kotlinx.coroutines.Job
@@ -45,17 +48,14 @@
import kotlinx.coroutines.internal.ThreadSafeHeap
import kotlinx.coroutines.launch
import kotlinx.coroutines.test.TestCoroutineDispatcher
+import kotlinx.coroutines.test.TestCoroutineScheduler
import kotlinx.coroutines.test.TestCoroutineScope
import kotlinx.coroutines.test.runBlockingTest
import kotlinx.coroutines.withContext
import org.junit.Before
+import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.coroutines.ContinuationInterceptor
-import kotlin.coroutines.CoroutineContext
-import kotlin.time.ExperimentalTime
-import kotlinx.coroutines.test.TestCoroutineScheduler
-import org.junit.Ignore
/**
* We are only capable of restoring state if one the two is valid:
diff --git a/paging/paging-runtime/src/main/java/androidx/paging/AsyncPagedListDiffer.kt b/paging/paging-runtime/src/main/java/androidx/paging/AsyncPagedListDiffer.kt
index 031e056..5ed8435 100644
--- a/paging/paging-runtime/src/main/java/androidx/paging/AsyncPagedListDiffer.kt
+++ b/paging/paging-runtime/src/main/java/androidx/paging/AsyncPagedListDiffer.kt
@@ -19,9 +19,9 @@
import androidx.annotation.VisibleForTesting
import androidx.arch.core.executor.ArchTaskExecutor
import androidx.lifecycle.LiveData
-import androidx.paging.LoadType.REFRESH
-import androidx.paging.LoadType.PREPEND
import androidx.paging.LoadType.APPEND
+import androidx.paging.LoadType.PREPEND
+import androidx.paging.LoadType.REFRESH
import androidx.recyclerview.widget.AdapterListUpdateCallback
import androidx.recyclerview.widget.AsyncDifferConfig
import androidx.recyclerview.widget.DiffUtil
diff --git a/paging/paging-runtime/src/main/java/androidx/paging/LivePagedList.kt b/paging/paging-runtime/src/main/java/androidx/paging/LivePagedList.kt
index ea2f8d1f..f4826a1 100644
--- a/paging/paging-runtime/src/main/java/androidx/paging/LivePagedList.kt
+++ b/paging/paging-runtime/src/main/java/androidx/paging/LivePagedList.kt
@@ -21,6 +21,7 @@
import androidx.paging.LoadState.Error
import androidx.paging.LoadState.Loading
import androidx.paging.LoadType.REFRESH
+import java.util.concurrent.Executor
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.DelicateCoroutinesApi
@@ -29,7 +30,6 @@
import kotlinx.coroutines.asCoroutineDispatcher
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
-import java.util.concurrent.Executor
@Suppress("DEPRECATION")
internal class LivePagedList<Key : Any, Value : Any>(
diff --git a/paging/paging-runtime/src/main/java/androidx/paging/LivePagedListBuilder.kt b/paging/paging-runtime/src/main/java/androidx/paging/LivePagedListBuilder.kt
index c770466..34a64c7 100644
--- a/paging/paging-runtime/src/main/java/androidx/paging/LivePagedListBuilder.kt
+++ b/paging/paging-runtime/src/main/java/androidx/paging/LivePagedListBuilder.kt
@@ -18,11 +18,11 @@
import androidx.arch.core.executor.ArchTaskExecutor
import androidx.lifecycle.LiveData
+import java.util.concurrent.Executor
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.asCoroutineDispatcher
-import java.util.concurrent.Executor
/**
* Builder for `LiveData<PagedList>` for Java users, given a [androidx.paging.DataSource.Factory]
diff --git a/paging/paging-runtime/src/main/java/androidx/paging/PagedListAdapter.kt b/paging/paging-runtime/src/main/java/androidx/paging/PagedListAdapter.kt
index ba7fec9..b0dbec5 100644
--- a/paging/paging-runtime/src/main/java/androidx/paging/PagedListAdapter.kt
+++ b/paging/paging-runtime/src/main/java/androidx/paging/PagedListAdapter.kt
@@ -18,8 +18,8 @@
import androidx.recyclerview.widget.AdapterListUpdateCallback
import androidx.recyclerview.widget.AsyncDifferConfig
-import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ConcatAdapter
+import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
/**
diff --git a/paging/paging-rxjava2-ktx/build.gradle b/paging/paging-rxjava2-ktx/build.gradle
index a355219..b53bd80 100644
--- a/paging/paging-rxjava2-ktx/build.gradle
+++ b/paging/paging-rxjava2-ktx/build.gradle
@@ -36,7 +36,7 @@
}
androidx {
- name = "Android Paging RxJava2 Kotlin Extensions"
+ name = "Paging RxJava2 Kotlin Extensions"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "Kotlin extensions for 'paging-rxjava2' artifact"
diff --git a/paging/paging-rxjava2/api/current.txt b/paging/paging-rxjava2/api/current.txt
index 9a9398b..af9fd55 100644
--- a/paging/paging-rxjava2/api/current.txt
+++ b/paging/paging-rxjava2/api/current.txt
@@ -2,10 +2,10 @@
package androidx.paging {
@Deprecated public final class RxPagedListBuilder<Key, Value> {
- ctor @Deprecated public RxPagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, androidx.paging.PagedList.Config config);
- ctor @Deprecated public RxPagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, int pageSize);
ctor @Deprecated public RxPagedListBuilder(androidx.paging.DataSource.Factory<Key,Value> dataSourceFactory, androidx.paging.PagedList.Config config);
ctor @Deprecated public RxPagedListBuilder(androidx.paging.DataSource.Factory<Key,Value> dataSourceFactory, int pageSize);
+ ctor @Deprecated public RxPagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, androidx.paging.PagedList.Config config);
+ ctor @Deprecated public RxPagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, int pageSize);
method @Deprecated public io.reactivex.Flowable<androidx.paging.PagedList<Value>> buildFlowable(io.reactivex.BackpressureStrategy backpressureStrategy);
method @Deprecated public io.reactivex.Observable<androidx.paging.PagedList<Value>> buildObservable();
method @Deprecated public androidx.paging.RxPagedListBuilder<Key,Value> setBoundaryCallback(androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback);
diff --git a/paging/paging-rxjava2/api/public_plus_experimental_current.txt b/paging/paging-rxjava2/api/public_plus_experimental_current.txt
index acadd7c..fb51a13 100644
--- a/paging/paging-rxjava2/api/public_plus_experimental_current.txt
+++ b/paging/paging-rxjava2/api/public_plus_experimental_current.txt
@@ -2,10 +2,10 @@
package androidx.paging {
@Deprecated public final class RxPagedListBuilder<Key, Value> {
- ctor @Deprecated public RxPagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, androidx.paging.PagedList.Config config);
- ctor @Deprecated public RxPagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, int pageSize);
ctor @Deprecated public RxPagedListBuilder(androidx.paging.DataSource.Factory<Key,Value> dataSourceFactory, androidx.paging.PagedList.Config config);
ctor @Deprecated public RxPagedListBuilder(androidx.paging.DataSource.Factory<Key,Value> dataSourceFactory, int pageSize);
+ ctor @Deprecated public RxPagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, androidx.paging.PagedList.Config config);
+ ctor @Deprecated public RxPagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, int pageSize);
method @Deprecated public io.reactivex.Flowable<androidx.paging.PagedList<Value>> buildFlowable(io.reactivex.BackpressureStrategy backpressureStrategy);
method @Deprecated public io.reactivex.Observable<androidx.paging.PagedList<Value>> buildObservable();
method @Deprecated public androidx.paging.RxPagedListBuilder<Key,Value> setBoundaryCallback(androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback);
@@ -30,8 +30,8 @@
package androidx.paging.rxjava2 {
public final class PagingRx {
- method @kotlinx.coroutines.ExperimentalCoroutinesApi public static <T> io.reactivex.Observable<androidx.paging.PagingData<T>> cachedIn(io.reactivex.Observable<androidx.paging.PagingData<T>>, kotlinx.coroutines.CoroutineScope scope);
method @kotlinx.coroutines.ExperimentalCoroutinesApi public static <T> io.reactivex.Flowable<androidx.paging.PagingData<T>> cachedIn(io.reactivex.Flowable<androidx.paging.PagingData<T>>, kotlinx.coroutines.CoroutineScope scope);
+ method @kotlinx.coroutines.ExperimentalCoroutinesApi public static <T> io.reactivex.Observable<androidx.paging.PagingData<T>> cachedIn(io.reactivex.Observable<androidx.paging.PagingData<T>>, kotlinx.coroutines.CoroutineScope scope);
method @CheckResult public static <T> androidx.paging.PagingData<T> filter(androidx.paging.PagingData<T>, kotlin.jvm.functions.Function1<? super T,? extends io.reactivex.Single<java.lang.Boolean>> predicate);
method @CheckResult public static <T, R> androidx.paging.PagingData<R> flatMap(androidx.paging.PagingData<T>, kotlin.jvm.functions.Function1<? super T,? extends io.reactivex.Single<java.lang.Iterable<R>>> transform);
method public static <Key, Value> io.reactivex.Flowable<androidx.paging.PagingData<Value>> getFlowable(androidx.paging.Pager<Key,Value>);
diff --git a/paging/paging-rxjava2/api/restricted_current.txt b/paging/paging-rxjava2/api/restricted_current.txt
index 9a9398b..af9fd55 100644
--- a/paging/paging-rxjava2/api/restricted_current.txt
+++ b/paging/paging-rxjava2/api/restricted_current.txt
@@ -2,10 +2,10 @@
package androidx.paging {
@Deprecated public final class RxPagedListBuilder<Key, Value> {
- ctor @Deprecated public RxPagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, androidx.paging.PagedList.Config config);
- ctor @Deprecated public RxPagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, int pageSize);
ctor @Deprecated public RxPagedListBuilder(androidx.paging.DataSource.Factory<Key,Value> dataSourceFactory, androidx.paging.PagedList.Config config);
ctor @Deprecated public RxPagedListBuilder(androidx.paging.DataSource.Factory<Key,Value> dataSourceFactory, int pageSize);
+ ctor @Deprecated public RxPagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, androidx.paging.PagedList.Config config);
+ ctor @Deprecated public RxPagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, int pageSize);
method @Deprecated public io.reactivex.Flowable<androidx.paging.PagedList<Value>> buildFlowable(io.reactivex.BackpressureStrategy backpressureStrategy);
method @Deprecated public io.reactivex.Observable<androidx.paging.PagedList<Value>> buildObservable();
method @Deprecated public androidx.paging.RxPagedListBuilder<Key,Value> setBoundaryCallback(androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback);
diff --git a/paging/paging-rxjava2/build.gradle b/paging/paging-rxjava2/build.gradle
index c830a91..5f779d0 100644
--- a/paging/paging-rxjava2/build.gradle
+++ b/paging/paging-rxjava2/build.gradle
@@ -47,7 +47,7 @@
}
androidx {
- name = "Android Paging-RXJava2"
+ name = "Paging-RXJava2"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "Android Paging-RXJava2"
diff --git a/paging/paging-rxjava2/src/test/java/androidx/paging/RxPagedListBuilderTest.kt b/paging/paging-rxjava2/src/test/java/androidx/paging/RxPagedListBuilderTest.kt
index 3d3c5c2..0c02a18 100644
--- a/paging/paging-rxjava2/src/test/java/androidx/paging/RxPagedListBuilderTest.kt
+++ b/paging/paging-rxjava2/src/test/java/androidx/paging/RxPagedListBuilderTest.kt
@@ -22,20 +22,20 @@
import androidx.paging.LoadType.REFRESH
import androidx.testutils.DirectDispatcher
import androidx.testutils.TestDispatcher
+import com.google.common.truth.Truth.assertThat
import io.reactivex.Observable
import io.reactivex.observers.TestObserver
import io.reactivex.schedulers.Schedulers
import io.reactivex.schedulers.TestScheduler
+import kotlin.test.assertTrue
+import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.DelicateCoroutinesApi
+import kotlinx.coroutines.asExecutor
+import kotlinx.coroutines.withContext
import org.junit.Assert.assertEquals
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import kotlin.test.assertTrue
-import com.google.common.truth.Truth.assertThat
-import kotlinx.coroutines.CoroutineDispatcher
-import kotlinx.coroutines.asExecutor
-import kotlinx.coroutines.withContext
@Suppress("DEPRECATION")
@RunWith(JUnit4::class)
@@ -329,10 +329,10 @@
// execute first load, represents load attempt on first paging source
//
- // using poll().run() instead of executeAll(), because executeAll() + immediate schedulers
+ // using removeFirst().run() instead of executeAll(), because executeAll() + immediate schedulers
// result in first load + subsequent loads executing immediately and we won't be able to
// assert the pagedLists/loads incrementally
- loadDispatcher.queue.poll()?.run()
+ loadDispatcher.queue.removeFirst().run()
// the load failed so there should still be only one PagedList, but the first
// pagingSource should invalidated, and the second pagingSource is created
@@ -354,7 +354,7 @@
)
// execute the load attempt on second pagingSource which succeeds
- loadDispatcher.queue.poll()?.run()
+ loadDispatcher.queue.removeFirst().run()
// ensure second pagedList created with the correct data loaded
observer.assertValueCount(2)
diff --git a/paging/paging-rxjava2/src/test/java/androidx/paging/RxPagingSourceTest.kt b/paging/paging-rxjava2/src/test/java/androidx/paging/RxPagingSourceTest.kt
index d64a55f..ca231a9 100644
--- a/paging/paging-rxjava2/src/test/java/androidx/paging/RxPagingSourceTest.kt
+++ b/paging/paging-rxjava2/src/test/java/androidx/paging/RxPagingSourceTest.kt
@@ -19,12 +19,12 @@
import androidx.paging.PagingSource.LoadResult.Page
import androidx.paging.rxjava2.RxPagingSource
import io.reactivex.Single
+import kotlin.test.assertEquals
+import kotlin.test.assertFailsWith
import kotlinx.coroutines.runBlocking
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import kotlin.test.assertEquals
-import kotlin.test.assertFailsWith
@RunWith(JUnit4::class)
class RxPagingSourceTest {
diff --git a/paging/paging-rxjava2/src/test/java/androidx/paging/RxRemoteMediatorTest.kt b/paging/paging-rxjava2/src/test/java/androidx/paging/RxRemoteMediatorTest.kt
index 7ef9953..4816060 100644
--- a/paging/paging-rxjava2/src/test/java/androidx/paging/RxRemoteMediatorTest.kt
+++ b/paging/paging-rxjava2/src/test/java/androidx/paging/RxRemoteMediatorTest.kt
@@ -20,13 +20,13 @@
import androidx.paging.RemoteMediator.InitializeAction.SKIP_INITIAL_REFRESH
import androidx.paging.rxjava2.RxRemoteMediator
import io.reactivex.Single
+import kotlin.test.assertEquals
+import kotlin.test.fail
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runTest
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import kotlin.test.assertEquals
-import kotlin.test.fail
@OptIn(ExperimentalCoroutinesApi::class, ExperimentalPagingApi::class)
@RunWith(JUnit4::class)
diff --git a/paging/paging-rxjava3/api/current.txt b/paging/paging-rxjava3/api/current.txt
index b77cbbe..4250689 100644
--- a/paging/paging-rxjava3/api/current.txt
+++ b/paging/paging-rxjava3/api/current.txt
@@ -11,10 +11,10 @@
}
@Deprecated public final class RxPagedListBuilder<Key, Value> {
- ctor @Deprecated public RxPagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, androidx.paging.PagedList.Config config);
- ctor @Deprecated public RxPagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, int pageSize);
ctor @Deprecated public RxPagedListBuilder(androidx.paging.DataSource.Factory<Key,Value> dataSourceFactory, androidx.paging.PagedList.Config config);
ctor @Deprecated public RxPagedListBuilder(androidx.paging.DataSource.Factory<Key,Value> dataSourceFactory, int pageSize);
+ ctor @Deprecated public RxPagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, androidx.paging.PagedList.Config config);
+ ctor @Deprecated public RxPagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, int pageSize);
method @Deprecated public io.reactivex.rxjava3.core.Flowable<androidx.paging.PagedList<Value>> buildFlowable(io.reactivex.rxjava3.core.BackpressureStrategy backpressureStrategy);
method @Deprecated public io.reactivex.rxjava3.core.Observable<androidx.paging.PagedList<Value>> buildObservable();
method @Deprecated public androidx.paging.rxjava3.RxPagedListBuilder<Key,Value> setBoundaryCallback(androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback);
diff --git a/paging/paging-rxjava3/api/public_plus_experimental_current.txt b/paging/paging-rxjava3/api/public_plus_experimental_current.txt
index 68770f0..e75fc6d 100644
--- a/paging/paging-rxjava3/api/public_plus_experimental_current.txt
+++ b/paging/paging-rxjava3/api/public_plus_experimental_current.txt
@@ -2,8 +2,8 @@
package androidx.paging.rxjava3 {
public final class PagingRx {
- method @kotlinx.coroutines.ExperimentalCoroutinesApi public static <T> io.reactivex.rxjava3.core.Observable<androidx.paging.PagingData<T>> cachedIn(io.reactivex.rxjava3.core.Observable<androidx.paging.PagingData<T>>, kotlinx.coroutines.CoroutineScope scope);
method @kotlinx.coroutines.ExperimentalCoroutinesApi public static <T> io.reactivex.rxjava3.core.Flowable<androidx.paging.PagingData<T>> cachedIn(io.reactivex.rxjava3.core.Flowable<androidx.paging.PagingData<T>>, kotlinx.coroutines.CoroutineScope scope);
+ method @kotlinx.coroutines.ExperimentalCoroutinesApi public static <T> io.reactivex.rxjava3.core.Observable<androidx.paging.PagingData<T>> cachedIn(io.reactivex.rxjava3.core.Observable<androidx.paging.PagingData<T>>, kotlinx.coroutines.CoroutineScope scope);
method @CheckResult public static <T> androidx.paging.PagingData<T> filter(androidx.paging.PagingData<T>, kotlin.jvm.functions.Function1<? super T,? extends io.reactivex.rxjava3.core.Single<java.lang.Boolean>> predicate);
method @CheckResult public static <T, R> androidx.paging.PagingData<R> flatMap(androidx.paging.PagingData<T>, kotlin.jvm.functions.Function1<? super T,? extends io.reactivex.rxjava3.core.Single<java.lang.Iterable<R>>> transform);
method public static <Key, Value> io.reactivex.rxjava3.core.Flowable<androidx.paging.PagingData<Value>> getFlowable(androidx.paging.Pager<Key,Value>);
@@ -13,10 +13,10 @@
}
@Deprecated public final class RxPagedListBuilder<Key, Value> {
- ctor @Deprecated public RxPagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, androidx.paging.PagedList.Config config);
- ctor @Deprecated public RxPagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, int pageSize);
ctor @Deprecated public RxPagedListBuilder(androidx.paging.DataSource.Factory<Key,Value> dataSourceFactory, androidx.paging.PagedList.Config config);
ctor @Deprecated public RxPagedListBuilder(androidx.paging.DataSource.Factory<Key,Value> dataSourceFactory, int pageSize);
+ ctor @Deprecated public RxPagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, androidx.paging.PagedList.Config config);
+ ctor @Deprecated public RxPagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, int pageSize);
method @Deprecated public io.reactivex.rxjava3.core.Flowable<androidx.paging.PagedList<Value>> buildFlowable(io.reactivex.rxjava3.core.BackpressureStrategy backpressureStrategy);
method @Deprecated public io.reactivex.rxjava3.core.Observable<androidx.paging.PagedList<Value>> buildObservable();
method @Deprecated public androidx.paging.rxjava3.RxPagedListBuilder<Key,Value> setBoundaryCallback(androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback);
diff --git a/paging/paging-rxjava3/api/restricted_current.txt b/paging/paging-rxjava3/api/restricted_current.txt
index b77cbbe..4250689 100644
--- a/paging/paging-rxjava3/api/restricted_current.txt
+++ b/paging/paging-rxjava3/api/restricted_current.txt
@@ -11,10 +11,10 @@
}
@Deprecated public final class RxPagedListBuilder<Key, Value> {
- ctor @Deprecated public RxPagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, androidx.paging.PagedList.Config config);
- ctor @Deprecated public RxPagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, int pageSize);
ctor @Deprecated public RxPagedListBuilder(androidx.paging.DataSource.Factory<Key,Value> dataSourceFactory, androidx.paging.PagedList.Config config);
ctor @Deprecated public RxPagedListBuilder(androidx.paging.DataSource.Factory<Key,Value> dataSourceFactory, int pageSize);
+ ctor @Deprecated public RxPagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, androidx.paging.PagedList.Config config);
+ ctor @Deprecated public RxPagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, int pageSize);
method @Deprecated public io.reactivex.rxjava3.core.Flowable<androidx.paging.PagedList<Value>> buildFlowable(io.reactivex.rxjava3.core.BackpressureStrategy backpressureStrategy);
method @Deprecated public io.reactivex.rxjava3.core.Observable<androidx.paging.PagedList<Value>> buildObservable();
method @Deprecated public androidx.paging.rxjava3.RxPagedListBuilder<Key,Value> setBoundaryCallback(androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback);
diff --git a/paging/paging-rxjava3/build.gradle b/paging/paging-rxjava3/build.gradle
index dc27213..05d795c 100644
--- a/paging/paging-rxjava3/build.gradle
+++ b/paging/paging-rxjava3/build.gradle
@@ -45,7 +45,7 @@
}
androidx {
- name = "Android Paging-RxJava3"
+ name = "Paging-RxJava3"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2020"
description = "Android Paging-RxJava3"
diff --git a/paging/paging-rxjava3/src/test/java/androidx/paging/RxPagedListBuilderTest.kt b/paging/paging-rxjava3/src/test/java/androidx/paging/RxPagedListBuilderTest.kt
index 0a3317b..3bd051e 100644
--- a/paging/paging-rxjava3/src/test/java/androidx/paging/RxPagedListBuilderTest.kt
+++ b/paging/paging-rxjava3/src/test/java/androidx/paging/RxPagedListBuilderTest.kt
@@ -25,20 +25,20 @@
import androidx.paging.rxjava3.RxPagedListBuilder
import androidx.testutils.DirectDispatcher
import androidx.testutils.TestDispatcher
+import com.google.common.truth.Truth.assertThat
import io.reactivex.rxjava3.core.Observable
import io.reactivex.rxjava3.observers.TestObserver
import io.reactivex.rxjava3.schedulers.Schedulers
import io.reactivex.rxjava3.schedulers.TestScheduler
+import kotlin.test.assertTrue
+import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.DelicateCoroutinesApi
+import kotlinx.coroutines.asExecutor
+import kotlinx.coroutines.withContext
import org.junit.Assert.assertEquals
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import kotlin.test.assertTrue
-import com.google.common.truth.Truth.assertThat
-import kotlinx.coroutines.CoroutineDispatcher
-import kotlinx.coroutines.asExecutor
-import kotlinx.coroutines.withContext
@RunWith(JUnit4::class)
class RxPagedListBuilderTest {
@@ -331,10 +331,10 @@
// execute first load, represents load attempt on first paging source
//
- // using poll().run() instead of executeAll(), because executeAll() + immediate schedulers
+ // using removeFirst().run() instead of executeAll(), because executeAll() + immediate schedulers
// result in first load + subsequent loads executing immediately and we won't be able to
// assert the pagedLists/loads incrementally
- loadDispatcher.queue.poll()?.run()
+ loadDispatcher.queue.removeFirst().run()
// the load failed so there should still be only one PagedList, but the first
// pagingSource should invalidated, and the second pagingSource is created
@@ -356,7 +356,7 @@
)
// execute the load attempt on second pagingSource which succeeds
- loadDispatcher.queue.poll()?.run()
+ loadDispatcher.queue.removeFirst().run()
// ensure second pagedList created with the correct data loaded
observer.assertValueCount(2)
diff --git a/paging/paging-rxjava3/src/test/java/androidx/paging/RxPagingSourceTest.kt b/paging/paging-rxjava3/src/test/java/androidx/paging/RxPagingSourceTest.kt
index 15bc792..9d40b9d 100644
--- a/paging/paging-rxjava3/src/test/java/androidx/paging/RxPagingSourceTest.kt
+++ b/paging/paging-rxjava3/src/test/java/androidx/paging/RxPagingSourceTest.kt
@@ -19,12 +19,12 @@
import androidx.paging.PagingSource.LoadResult.Page
import androidx.paging.rxjava3.RxPagingSource
import io.reactivex.rxjava3.core.Single
+import kotlin.test.assertEquals
+import kotlin.test.assertFailsWith
import kotlinx.coroutines.runBlocking
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import kotlin.test.assertEquals
-import kotlin.test.assertFailsWith
@RunWith(JUnit4::class)
class RxPagingSourceTest {
diff --git a/paging/paging-rxjava3/src/test/java/androidx/paging/RxRemoteMediatorTest.kt b/paging/paging-rxjava3/src/test/java/androidx/paging/RxRemoteMediatorTest.kt
index 9cd7890..1861c8f 100644
--- a/paging/paging-rxjava3/src/test/java/androidx/paging/RxRemoteMediatorTest.kt
+++ b/paging/paging-rxjava3/src/test/java/androidx/paging/RxRemoteMediatorTest.kt
@@ -20,13 +20,13 @@
import androidx.paging.RemoteMediator.InitializeAction.SKIP_INITIAL_REFRESH
import androidx.paging.rxjava3.RxRemoteMediator
import io.reactivex.rxjava3.core.Single
+import kotlin.test.assertEquals
+import kotlin.test.fail
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runTest
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import kotlin.test.assertEquals
-import kotlin.test.fail
@OptIn(ExperimentalCoroutinesApi::class, ExperimentalPagingApi::class)
@RunWith(JUnit4::class)
diff --git a/paging/paging-testing/api/current.txt b/paging/paging-testing/api/current.txt
index 91eeba55..586efd3 100644
--- a/paging/paging-testing/api/current.txt
+++ b/paging/paging-testing/api/current.txt
@@ -14,7 +14,7 @@
}
public final class PagerFlowSnapshotKt {
- method public static suspend <Value> Object? asSnapshot(kotlinx.coroutines.flow.Flow<androidx.paging.PagingData<Value>>, kotlinx.coroutines.CoroutineScope coroutineScope, optional androidx.paging.testing.LoadErrorHandler onError, optional kotlin.jvm.functions.Function2<? super androidx.paging.testing.SnapshotLoader<Value>,? super kotlin.coroutines.Continuation<kotlin.Unit>,?> loadOperations, optional kotlin.coroutines.Continuation<java.util.List<Value>>);
+ method public static suspend <Value> Object? asSnapshot(kotlinx.coroutines.flow.Flow<androidx.paging.PagingData<Value>>, optional androidx.paging.testing.LoadErrorHandler onError, optional kotlin.jvm.functions.Function2<? super androidx.paging.testing.SnapshotLoader<Value>,? super kotlin.coroutines.Continuation<kotlin.Unit>,?> loadOperations, optional kotlin.coroutines.Continuation<java.util.List<Value>>);
}
public final class SnapshotLoader<Value> {
@@ -26,12 +26,12 @@
}
public final class StaticListPagingSourceFactoryKt {
- method public static <Value> androidx.paging.PagingSourceFactory<java.lang.Integer,Value> asPagingSourceFactory(kotlinx.coroutines.flow.Flow<java.util.List<Value>>, kotlinx.coroutines.CoroutineScope coroutineScope);
method public static <Value> androidx.paging.PagingSourceFactory<java.lang.Integer,Value> asPagingSourceFactory(java.util.List<? extends Value>);
+ method public static <Value> androidx.paging.PagingSourceFactory<java.lang.Integer,Value> asPagingSourceFactory(kotlinx.coroutines.flow.Flow<java.util.List<Value>>, kotlinx.coroutines.CoroutineScope coroutineScope);
}
public final class TestPager<Key, Value> {
- ctor public TestPager(androidx.paging.PagingSource<Key,Value> pagingSource, androidx.paging.PagingConfig config);
+ ctor public TestPager(androidx.paging.PagingConfig config, androidx.paging.PagingSource<Key,Value> pagingSource);
method public suspend Object? append(kotlin.coroutines.Continuation<androidx.paging.PagingSource.LoadResult<Key,Value>>);
method public suspend Object? getLastLoadedPage(kotlin.coroutines.Continuation<androidx.paging.PagingSource.LoadResult.Page<Key,Value>>);
method public suspend Object? getPages(kotlin.coroutines.Continuation<java.util.List<androidx.paging.PagingSource.LoadResult.Page<Key,Value>>>);
diff --git a/paging/paging-testing/api/public_plus_experimental_current.txt b/paging/paging-testing/api/public_plus_experimental_current.txt
index 91eeba55..586efd3 100644
--- a/paging/paging-testing/api/public_plus_experimental_current.txt
+++ b/paging/paging-testing/api/public_plus_experimental_current.txt
@@ -14,7 +14,7 @@
}
public final class PagerFlowSnapshotKt {
- method public static suspend <Value> Object? asSnapshot(kotlinx.coroutines.flow.Flow<androidx.paging.PagingData<Value>>, kotlinx.coroutines.CoroutineScope coroutineScope, optional androidx.paging.testing.LoadErrorHandler onError, optional kotlin.jvm.functions.Function2<? super androidx.paging.testing.SnapshotLoader<Value>,? super kotlin.coroutines.Continuation<kotlin.Unit>,?> loadOperations, optional kotlin.coroutines.Continuation<java.util.List<Value>>);
+ method public static suspend <Value> Object? asSnapshot(kotlinx.coroutines.flow.Flow<androidx.paging.PagingData<Value>>, optional androidx.paging.testing.LoadErrorHandler onError, optional kotlin.jvm.functions.Function2<? super androidx.paging.testing.SnapshotLoader<Value>,? super kotlin.coroutines.Continuation<kotlin.Unit>,?> loadOperations, optional kotlin.coroutines.Continuation<java.util.List<Value>>);
}
public final class SnapshotLoader<Value> {
@@ -26,12 +26,12 @@
}
public final class StaticListPagingSourceFactoryKt {
- method public static <Value> androidx.paging.PagingSourceFactory<java.lang.Integer,Value> asPagingSourceFactory(kotlinx.coroutines.flow.Flow<java.util.List<Value>>, kotlinx.coroutines.CoroutineScope coroutineScope);
method public static <Value> androidx.paging.PagingSourceFactory<java.lang.Integer,Value> asPagingSourceFactory(java.util.List<? extends Value>);
+ method public static <Value> androidx.paging.PagingSourceFactory<java.lang.Integer,Value> asPagingSourceFactory(kotlinx.coroutines.flow.Flow<java.util.List<Value>>, kotlinx.coroutines.CoroutineScope coroutineScope);
}
public final class TestPager<Key, Value> {
- ctor public TestPager(androidx.paging.PagingSource<Key,Value> pagingSource, androidx.paging.PagingConfig config);
+ ctor public TestPager(androidx.paging.PagingConfig config, androidx.paging.PagingSource<Key,Value> pagingSource);
method public suspend Object? append(kotlin.coroutines.Continuation<androidx.paging.PagingSource.LoadResult<Key,Value>>);
method public suspend Object? getLastLoadedPage(kotlin.coroutines.Continuation<androidx.paging.PagingSource.LoadResult.Page<Key,Value>>);
method public suspend Object? getPages(kotlin.coroutines.Continuation<java.util.List<androidx.paging.PagingSource.LoadResult.Page<Key,Value>>>);
diff --git a/paging/paging-testing/api/restricted_current.txt b/paging/paging-testing/api/restricted_current.txt
index 91eeba55..586efd3 100644
--- a/paging/paging-testing/api/restricted_current.txt
+++ b/paging/paging-testing/api/restricted_current.txt
@@ -14,7 +14,7 @@
}
public final class PagerFlowSnapshotKt {
- method public static suspend <Value> Object? asSnapshot(kotlinx.coroutines.flow.Flow<androidx.paging.PagingData<Value>>, kotlinx.coroutines.CoroutineScope coroutineScope, optional androidx.paging.testing.LoadErrorHandler onError, optional kotlin.jvm.functions.Function2<? super androidx.paging.testing.SnapshotLoader<Value>,? super kotlin.coroutines.Continuation<kotlin.Unit>,?> loadOperations, optional kotlin.coroutines.Continuation<java.util.List<Value>>);
+ method public static suspend <Value> Object? asSnapshot(kotlinx.coroutines.flow.Flow<androidx.paging.PagingData<Value>>, optional androidx.paging.testing.LoadErrorHandler onError, optional kotlin.jvm.functions.Function2<? super androidx.paging.testing.SnapshotLoader<Value>,? super kotlin.coroutines.Continuation<kotlin.Unit>,?> loadOperations, optional kotlin.coroutines.Continuation<java.util.List<Value>>);
}
public final class SnapshotLoader<Value> {
@@ -26,12 +26,12 @@
}
public final class StaticListPagingSourceFactoryKt {
- method public static <Value> androidx.paging.PagingSourceFactory<java.lang.Integer,Value> asPagingSourceFactory(kotlinx.coroutines.flow.Flow<java.util.List<Value>>, kotlinx.coroutines.CoroutineScope coroutineScope);
method public static <Value> androidx.paging.PagingSourceFactory<java.lang.Integer,Value> asPagingSourceFactory(java.util.List<? extends Value>);
+ method public static <Value> androidx.paging.PagingSourceFactory<java.lang.Integer,Value> asPagingSourceFactory(kotlinx.coroutines.flow.Flow<java.util.List<Value>>, kotlinx.coroutines.CoroutineScope coroutineScope);
}
public final class TestPager<Key, Value> {
- ctor public TestPager(androidx.paging.PagingSource<Key,Value> pagingSource, androidx.paging.PagingConfig config);
+ ctor public TestPager(androidx.paging.PagingConfig config, androidx.paging.PagingSource<Key,Value> pagingSource);
method public suspend Object? append(kotlin.coroutines.Continuation<androidx.paging.PagingSource.LoadResult<Key,Value>>);
method public suspend Object? getLastLoadedPage(kotlin.coroutines.Continuation<androidx.paging.PagingSource.LoadResult.Page<Key,Value>>);
method public suspend Object? getPages(kotlin.coroutines.Continuation<java.util.List<androidx.paging.PagingSource.LoadResult.Page<Key,Value>>>);
diff --git a/paging/paging-testing/build.gradle b/paging/paging-testing/build.gradle
index 18e00f6..9557e62 100644
--- a/paging/paging-testing/build.gradle
+++ b/paging/paging-testing/build.gradle
@@ -36,7 +36,7 @@
}
androidx {
- name = "androidx.paging:paging-testing"
+ name = "Paging Testing Extensions"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2022"
description = "Test artifact for Paging implementation"
diff --git a/paging/paging-testing/src/main/java/androidx/paging/testing/LoadErrorHandler.kt b/paging/paging-testing/src/main/java/androidx/paging/testing/LoadErrorHandler.kt
index 4651e95..2e8df82 100644
--- a/paging/paging-testing/src/main/java/androidx/paging/testing/LoadErrorHandler.kt
+++ b/paging/paging-testing/src/main/java/androidx/paging/testing/LoadErrorHandler.kt
@@ -17,10 +17,10 @@
package androidx.paging.testing
import androidx.paging.CombinedLoadStates
+import androidx.paging.LoadState
import androidx.paging.PagingDataDiffer
import androidx.paging.PagingSource
import androidx.paging.PagingSource.LoadResult
-import androidx.paging.LoadState
/**
* An interface to implement the error recovery strategy when [PagingSource]
diff --git a/paging/paging-testing/src/main/java/androidx/paging/testing/PagerFlowSnapshot.kt b/paging/paging-testing/src/main/java/androidx/paging/testing/PagerFlowSnapshot.kt
index 64c8ece..3098cf1 100644
--- a/paging/paging-testing/src/main/java/androidx/paging/testing/PagerFlowSnapshot.kt
+++ b/paging/paging-testing/src/main/java/androidx/paging/testing/PagerFlowSnapshot.kt
@@ -25,14 +25,14 @@
import androidx.paging.Pager
import androidx.paging.PagingData
import androidx.paging.PagingDataDiffer
-import androidx.paging.testing.ErrorRecovery.THROW
import androidx.paging.testing.ErrorRecovery.RETRY
import androidx.paging.testing.ErrorRecovery.RETURN_CURRENT_SNAPSHOT
+import androidx.paging.testing.ErrorRecovery.THROW
import androidx.paging.testing.LoaderCallback.CallbackType.ON_CHANGED
import androidx.paging.testing.LoaderCallback.CallbackType.ON_INSERTED
import androidx.paging.testing.LoaderCallback.CallbackType.ON_REMOVED
-import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.cancelAndJoin
+import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.debounce
@@ -40,25 +40,20 @@
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.launch
-import kotlinx.coroutines.withContext
/**
* Runs the [SnapshotLoader] load operations that are passed in and returns a List of data
* that would be presented to the UI after all load operations are complete.
*
- * @param coroutineScope The [CoroutineScope] to collect from this Flow<PagingData> and contains
- * the [CoroutineScope.coroutineContext] to load data from.
- *
* @param onError The error recovery strategy when PagingSource returns LoadResult.Error. A lambda
* that returns an [ErrorRecovery] value. The default strategy is [ErrorRecovery.THROW].
*
* @param loadOperations The block containing [SnapshotLoader] load operations.
*/
public suspend fun <Value : Any> Flow<PagingData<Value>>.asSnapshot(
- coroutineScope: CoroutineScope,
onError: LoadErrorHandler = LoadErrorHandler { THROW },
loadOperations: suspend SnapshotLoader<Value>.() -> @JvmSuppressWildcards Unit = { }
-): @JvmSuppressWildcards List<Value> {
+): @JvmSuppressWildcards List<Value> = coroutineScope {
lateinit var loader: SnapshotLoader<Value>
@@ -83,8 +78,8 @@
}
}
- // PagingDataDiffer automatically switches to Dispatchers.Main to call presentNewList
- val differ = object : PagingDataDiffer<Value>(callback) {
+ // PagingDataDiffer will collect from coroutineContext instead of main dispatcher
+ val differ = object : PagingDataDiffer<Value>(callback, coroutineContext) {
override suspend fun presentNewList(
previousList: NullPaddedList<Value>,
newList: NullPaddedList<Value>,
@@ -118,7 +113,7 @@
*
* The collection job is cancelled automatically after [loadOperations] completes.
*/
- val collectPagingData = coroutineScope.launch {
+ val collectPagingData = launch {
[email protected] {
incrementGeneration(loader)
differ.collectFrom(it)
@@ -131,24 +126,20 @@
* Awaits for initial refresh to complete before invoking [loadOperations]. Automatically
* cancels the collection on this [Pager.flow] after [loadOperations] completes and Paging
* is idle.
- *
- * Returns a List of loaded data.
*/
- return withContext(coroutineScope.coroutineContext) {
- try {
- differ.awaitNotLoading(onError)
- loader.loadOperations()
- differ.awaitNotLoading(onError)
- } catch (stub: ReturnSnapshotStub) {
- // we just want to stub and return snapshot early
- } catch (throwable: Throwable) {
- throw throwable
- } finally {
- collectPagingData.cancelAndJoin()
- }
-
- differ.snapshot().items
+ try {
+ differ.awaitNotLoading(onError)
+ loader.loadOperations()
+ differ.awaitNotLoading(onError)
+ } catch (stub: ReturnSnapshotStub) {
+ // we just want to stub and return snapshot early
+ } catch (throwable: Throwable) {
+ throw throwable
+ } finally {
+ collectPagingData.cancelAndJoin()
}
+
+ differ.snapshot().items
}
/**
diff --git a/paging/paging-testing/src/main/java/androidx/paging/testing/StaticListPagingSource.kt b/paging/paging-testing/src/main/java/androidx/paging/testing/StaticListPagingSource.kt
index 5e28a95..89bca0e 100644
--- a/paging/paging-testing/src/main/java/androidx/paging/testing/StaticListPagingSource.kt
+++ b/paging/paging-testing/src/main/java/androidx/paging/testing/StaticListPagingSource.kt
@@ -17,11 +17,11 @@
package androidx.paging.testing
import androidx.paging.Pager
+import androidx.paging.PagingSource
import androidx.paging.PagingSource.LoadParams
import androidx.paging.PagingSource.LoadParams.Append
import androidx.paging.PagingSource.LoadParams.Prepend
import androidx.paging.PagingSource.LoadParams.Refresh
-import androidx.paging.PagingSource
import androidx.paging.PagingState
/**
diff --git a/paging/paging-testing/src/main/java/androidx/paging/testing/StaticListPagingSourceFactory.kt b/paging/paging-testing/src/main/java/androidx/paging/testing/StaticListPagingSourceFactory.kt
index 2a719a6..6744b5e 100644
--- a/paging/paging-testing/src/main/java/androidx/paging/testing/StaticListPagingSourceFactory.kt
+++ b/paging/paging-testing/src/main/java/androidx/paging/testing/StaticListPagingSourceFactory.kt
@@ -18,8 +18,8 @@
import androidx.paging.InvalidatingPagingSourceFactory
import androidx.paging.LoadType.REFRESH
-import androidx.paging.PagingSource
import androidx.paging.Pager
+import androidx.paging.PagingSource
import androidx.paging.PagingSourceFactory
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.Flow
diff --git a/paging/paging-testing/src/main/java/androidx/paging/testing/TestPager.kt b/paging/paging-testing/src/main/java/androidx/paging/testing/TestPager.kt
index 85e3efb..bcd13ec 100644
--- a/paging/paging-testing/src/main/java/androidx/paging/testing/TestPager.kt
+++ b/paging/paging-testing/src/main/java/androidx/paging/testing/TestPager.kt
@@ -20,11 +20,11 @@
import androidx.paging.LoadType.APPEND
import androidx.paging.LoadType.PREPEND
import androidx.paging.LoadType.REFRESH
+import androidx.paging.Pager
import androidx.paging.PagingConfig
import androidx.paging.PagingSource
import androidx.paging.PagingSource.LoadParams
import androidx.paging.PagingSource.LoadResult
-import androidx.paging.Pager
import androidx.paging.PagingSource.LoadResult.Page.Companion.COUNT_UNDEFINED
import androidx.paging.PagingState
import java.util.concurrent.atomic.AtomicBoolean
@@ -41,12 +41,12 @@
* multi-generational Paging behavior, you must create a new [TestPager] by supplying a
* new instance of [PagingSource].
*
- * @param pagingSource the [PagingSource] to load data from.
* @param config the [PagingConfig] to configure this TestPager's loading behavior.
+ * @param pagingSource the [PagingSource] to load data from.
*/
public class TestPager<Key : Any, Value : Any>(
- private val pagingSource: PagingSource<Key, Value>,
private val config: PagingConfig,
+ private val pagingSource: PagingSource<Key, Value>,
) {
private val hasRefreshed = AtomicBoolean(false)
diff --git a/paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt b/paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
index ca7351a..fd23a2b 100644
--- a/paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
+++ b/paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
@@ -26,7 +26,6 @@
import androidx.paging.insertSeparators
import com.google.common.truth.Truth.assertThat
import kotlin.test.assertFailsWith
-import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableSharedFlow
@@ -37,8 +36,6 @@
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.runTest
-import kotlinx.coroutines.test.setMain
-import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
@@ -68,17 +65,12 @@
loadDelay
)
- @Before
- fun init() {
- Dispatchers.setMain(UnconfinedTestDispatcher())
- }
-
@Test
fun initialRefresh() {
val dataFlow = flowOf(List(30) { it })
val pager = createPager(dataFlow)
testScope.runTest {
- val snapshot = pager.asSnapshot(this)
+ val snapshot = pager.asSnapshot()
// first page + prefetched page
assertThat(snapshot).containsExactlyElementsIn(
listOf(0, 1, 2, 3, 4, 5, 6, 7)
@@ -91,7 +83,7 @@
val data = List(30) { it }
val pager = createPager(data)
testScope.runTest {
- val snapshot = pager.asSnapshot(this)
+ val snapshot = pager.asSnapshot()
// first page + prefetched page
assertThat(snapshot).containsExactlyElementsIn(
listOf(0, 1, 2, 3, 4, 5, 6, 7)
@@ -104,7 +96,7 @@
val dataFlow = flowOf(List(30) { it })
val pager = createPager(dataFlow)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {}
+ val snapshot = pager.asSnapshot {}
// first page + prefetched page
assertThat(snapshot).containsExactlyElementsIn(
listOf(0, 1, 2, 3, 4, 5, 6, 7)
@@ -121,7 +113,7 @@
}
}
testScope.runTest {
- val snapshot = pager.asSnapshot(this)
+ val snapshot = pager.asSnapshot()
// loads 8[initial 5 + prefetch 3] items total, including separators
assertThat(snapshot).containsExactlyElementsIn(
listOf(0, "sep", 1, "sep", 2, "sep", 3, "sep", 4)
@@ -134,7 +126,7 @@
val dataFlow = flowOf(List(30) { it })
val pager = createPagerNoPrefetch(dataFlow)
testScope.runTest {
- val snapshot = pager.asSnapshot(this)
+ val snapshot = pager.asSnapshot()
assertThat(snapshot).containsExactlyElementsIn(
listOf(0, 1, 2, 3, 4)
@@ -147,7 +139,7 @@
val dataFlow = flowOf(List(30) { it })
val pager = createPager(dataFlow, 10)
testScope.runTest {
- val snapshot = pager.asSnapshot(this)
+ val snapshot = pager.asSnapshot()
assertThat(snapshot).containsExactlyElementsIn(
listOf(7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17)
@@ -160,7 +152,7 @@
val dataFlow = flowOf(List(30) { it })
val pager = createPagerNoPrefetch(dataFlow, 10)
testScope.runTest {
- val snapshot = pager.asSnapshot(this)
+ val snapshot = pager.asSnapshot()
assertThat(snapshot).containsExactlyElementsIn(
listOf(10, 11, 12, 13, 14)
@@ -173,7 +165,7 @@
val dataFlow = emptyFlow<List<Int>>()
val pager = createPager(dataFlow)
testScope.runTest {
- val snapshot = pager.asSnapshot(this)
+ val snapshot = pager.asSnapshot()
assertThat(snapshot).containsExactlyElementsIn(
emptyList<Int>()
@@ -186,7 +178,7 @@
val data = emptyList<Int>()
val pager = createPager(data)
testScope.runTest {
- val snapshot = pager.asSnapshot(this)
+ val snapshot = pager.asSnapshot()
assertThat(snapshot).containsExactlyElementsIn(
emptyList<Int>()
@@ -199,7 +191,7 @@
val dataFlow = emptyFlow<List<Int>>()
val pager = createPager(dataFlow)
testScope.runTest {
- val snapshot = pager.asSnapshot(this)
+ val snapshot = pager.asSnapshot()
assertThat(snapshot).containsExactlyElementsIn(
emptyList<Int>()
@@ -212,7 +204,7 @@
val dataFlow = flowOf(List(30) { it })
val pager = createPagerNoPrefetch(dataFlow).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
refresh()
}
assertThat(snapshot).containsExactlyElementsIn(
@@ -226,7 +218,7 @@
val data = List(30) { it }
val pager = createPager(data)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
refresh()
}
assertThat(snapshot).containsExactlyElementsIn(
@@ -245,7 +237,7 @@
pagingSourceFactory = { factory().also { sources.add(it) } },
).flow
testScope.runTest {
- pager.asSnapshot(this) {
+ pager.asSnapshot {
refresh()
}
assertThat(sources.first().invalid).isTrue()
@@ -257,7 +249,7 @@
val dataFlow = emptyFlow<List<Int>>()
val pager = createPagerNoPrefetch(dataFlow)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
refresh()
}
assertThat(snapshot).containsExactlyElementsIn(
@@ -271,7 +263,7 @@
val dataFlow = flowOf(List(30) { it })
val pager = createPager(dataFlow)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
appendScrollWhile { item: Int ->
item < 14
}
@@ -291,7 +283,7 @@
val dataFlow = flowOf(List(30) { it })
val pager = createPagerWithDrops(dataFlow)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
appendScrollWhile { item ->
item < 14
}
@@ -312,7 +304,7 @@
}
}
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
appendScrollWhile { item ->
item !is Int || item < 14
}
@@ -335,7 +327,7 @@
val dataFlow = flowOf(List(50) { it })
val pager = createPagerNoPrefetch(dataFlow)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
appendScrollWhile { item: Int ->
item < 14
}
@@ -353,7 +345,7 @@
val dataFlow = flowOf(List(50) { it })
val pager = createPagerNoPlaceholders(dataFlow)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
appendScrollWhile { item: Int ->
item != 14
}
@@ -373,7 +365,7 @@
val dataFlow = flowOf(List(30) { it })
val pager = createPager(dataFlow, 20)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
prependScrollWhile { item: Int ->
item > 14
}
@@ -393,7 +385,7 @@
val dataFlow = flowOf(List(30) { it })
val pager = createPagerWithDrops(dataFlow, 20)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
prependScrollWhile { item: Int ->
item > 14
}
@@ -414,7 +406,7 @@
}
}
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
prependScrollWhile { item ->
item !is Int || item > 14
}
@@ -437,7 +429,7 @@
val dataFlow = flowOf(List(30) { it })
val pager = createPagerNoPrefetch(dataFlow, 20)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
prependScrollWhile { item: Int ->
item > 14
}
@@ -455,7 +447,7 @@
val dataFlow = flowOf(List(50) { it })
val pager = createPagerNoPlaceholders(dataFlow, 30)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
prependScrollWhile { item: Int ->
item != 22
}
@@ -477,7 +469,7 @@
val dataFlow = flowOf(List(30) { it })
val pager = createPager(dataFlow, 10)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
appendScrollWhile { item: Int ->
item < 18
}
@@ -497,7 +489,7 @@
val dataFlow = flowOf(List(30) { it })
val pager = createPagerNoPlaceholders(dataFlow, 10)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
appendScrollWhile { item: Int ->
item != 19
}
@@ -517,7 +509,7 @@
val dataFlow = flowOf(List(30) { it })
val pager = createPagerNoPrefetch(dataFlow, 10)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
appendScrollWhile { item: Int ->
item < 18
}
@@ -535,7 +527,7 @@
val dataFlow = flowOf(List(30) { it })
val pager = createPager(dataFlow)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
prependScrollWhile { item: Int ->
item > -3
}
@@ -553,13 +545,13 @@
val dataFlow = flowOf(List(30) { it })
val pager = createPager(dataFlow).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot1 = pager.asSnapshot(this) {
+ val snapshot1 = pager.asSnapshot {
appendScrollWhile { item: Int ->
item < 7
}
}
- val snapshot2 = pager.asSnapshot(this) {
+ val snapshot2 = pager.asSnapshot {
appendScrollWhile { item: Int ->
item < 22
}
@@ -582,7 +574,7 @@
val dataFlow = flowOf(List(30) { it })
val pager = createPagerNoPrefetch(dataFlow, 20).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot1 = pager.asSnapshot(this) {
+ val snapshot1 = pager.asSnapshot {
prependScrollWhile { item: Int ->
item > 17
}
@@ -590,7 +582,7 @@
assertThat(snapshot1).containsExactlyElementsIn(
listOf(17, 18, 19, 20, 21, 22, 23, 24)
)
- val snapshot2 = pager.asSnapshot(this) {
+ val snapshot2 = pager.asSnapshot {
prependScrollWhile { item: Int ->
item > 11
}
@@ -606,7 +598,7 @@
val dataFlow = flowOf(List(10) { it })
val pager = createPager(dataFlow)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
appendScrollWhile { item: Int ->
// condition scrolls till end of data since we only have 10 items
item < 18
@@ -625,7 +617,7 @@
val dataFlow = flowOf(List(20) { it })
val pager = createPager(dataFlow, 10)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
prependScrollWhile { item: Int ->
// condition scrolls till index = 0
item > -3
@@ -646,7 +638,7 @@
val dataFlow = flowOf(List(30) { it })
val pager = createPager(dataFlow).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
refresh() // triggers second gen
appendScrollWhile { item: Int ->
item < 10
@@ -663,7 +655,7 @@
val dataFlow = flowOf(List(30) { it })
val pager = createPager(dataFlow, 20).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
// this prependScrollWhile does not cause paging to load more items
// but it helps this test register a non-null anchorPosition so the upcoming
// refresh doesn't start at index 0
@@ -690,7 +682,7 @@
val dataFlow = flowOf(List(30) { it })
val pager = createPager(dataFlow).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
appendScrollWhile { item: Int ->
item < 10
}
@@ -710,7 +702,7 @@
val dataFlow = flowOf(List(30) { it })
val pager = createPager(dataFlow, 15).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
prependScrollWhile { item: Int ->
item > 8
}
@@ -740,21 +732,21 @@
}
val pager = createPagerNoPrefetch(dataFlow).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot1 = pager.asSnapshot(this)
+ val snapshot1 = pager.asSnapshot()
assertThat(snapshot1).containsExactlyElementsIn(
emptyList<Int>()
)
delay(500)
- val snapshot2 = pager.asSnapshot(this)
+ val snapshot2 = pager.asSnapshot()
assertThat(snapshot2).containsExactlyElementsIn(
listOf(0, 1, 2, 3, 4)
)
delay(500)
- val snapshot3 = pager.asSnapshot(this)
+ val snapshot3 = pager.asSnapshot()
assertThat(snapshot3).containsExactlyElementsIn(
listOf(30, 31, 32, 33, 34)
)
@@ -766,19 +758,19 @@
val dataFlow = MutableSharedFlow<List<Int>>()
val pager = createPagerNoPrefetch(dataFlow).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot1 = pager.asSnapshot(this)
+ val snapshot1 = pager.asSnapshot()
assertThat(snapshot1).containsExactlyElementsIn(
emptyList<Int>()
)
- val snapshot2 = pager.asSnapshot(this) {
+ val snapshot2 = pager.asSnapshot {
dataFlow.emit(List(30) { it })
}
assertThat(snapshot2).containsExactlyElementsIn(
listOf(0, 1, 2, 3, 4)
)
- val snapshot3 = pager.asSnapshot(this) {
+ val snapshot3 = pager.asSnapshot {
dataFlow.emit(List(30) { it + 30 })
}
assertThat(snapshot3).containsExactlyElementsIn(
@@ -793,19 +785,19 @@
val pager = createPagerNoPrefetch(dataFlow).cachedIn(testScope.backgroundScope)
testScope.runTest {
dataFlow.emit(emptyList())
- val snapshot1 = pager.asSnapshot(this)
+ val snapshot1 = pager.asSnapshot()
assertThat(snapshot1).containsExactlyElementsIn(
emptyList<Int>()
)
dataFlow.emit(List(30) { it })
- val snapshot2 = pager.asSnapshot(this)
+ val snapshot2 = pager.asSnapshot()
assertThat(snapshot2).containsExactlyElementsIn(
listOf(0, 1, 2, 3, 4)
)
dataFlow.emit(List(30) { it + 30 })
- val snapshot3 = pager.asSnapshot(this)
+ val snapshot3 = pager.asSnapshot()
assertThat(snapshot3).containsExactlyElementsIn(
listOf(30, 31, 32, 33, 34)
)
@@ -825,7 +817,7 @@
}
val pager = createPagerNoPrefetch(dataFlow).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot1 = pager.asSnapshot(this) {
+ val snapshot1 = pager.asSnapshot {
// we scroll to register a non-null anchorPos
appendScrollWhile { item: Int ->
item < 5
@@ -836,7 +828,7 @@
)
delay(1000)
- val snapshot2 = pager.asSnapshot(this)
+ val snapshot2 = pager.asSnapshot()
// anchorPos = 5, refreshKey = 3
assertThat(snapshot2).containsExactlyElementsIn(
listOf(3, 4, 5, 6, 7)
@@ -857,13 +849,13 @@
}
val pager = createPagerNoPrefetch(dataFlow, 10).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot1 = pager.asSnapshot(this)
+ val snapshot1 = pager.asSnapshot()
assertThat(snapshot1).containsExactlyElementsIn(
listOf(10, 11, 12, 13, 14)
)
delay(500)
- val snapshot2 = pager.asSnapshot(this)
+ val snapshot2 = pager.asSnapshot()
assertThat(snapshot2).containsExactlyElementsIn(
listOf(0, 1, 2, 3, 4)
)
@@ -883,7 +875,7 @@
}
val pager = createPagerNoPrefetch(dataFlow, 10).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot1 = pager.asSnapshot(this) {
+ val snapshot1 = pager.asSnapshot {
// we scroll to register a non-null anchorPos
appendScrollWhile { item: Int ->
item < 15
@@ -894,7 +886,7 @@
)
delay(1000)
- val snapshot2 = pager.asSnapshot(this)
+ val snapshot2 = pager.asSnapshot()
// anchorPos = 15, refreshKey = 13
assertThat(snapshot2).containsExactlyElementsIn(
listOf(13, 14, 15, 16, 17)
@@ -907,7 +899,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPager(dataFlow, 50)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
scrollTo(42)
}
// initial load [50-54]
@@ -927,7 +919,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPagerWithDrops(dataFlow, 50)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
scrollTo(42)
}
// dropped [47-57]
@@ -946,7 +938,7 @@
}
}
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
scrollTo(42)
}
// initial load [50-54]
@@ -967,7 +959,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPager(dataFlow, 50)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
scrollTo(42)
scrollTo(38)
}
@@ -989,7 +981,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPager(dataFlow, 50)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
scrollTo(42)
}
// initial load [50-54]
@@ -1002,7 +994,7 @@
)
)
- val snapshot2 = pager.asSnapshot(this) {
+ val snapshot2 = pager.asSnapshot {
scrollTo(38)
}
// prefetched [35-37]
@@ -1020,7 +1012,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPager(dataFlow, 5).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
scrollTo(-5)
}
// ensure index is capped when no more data to load
@@ -1038,7 +1030,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPager(dataFlow, 50).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
scrollTo(47)
}
// ensure that SnapshotLoader waited for last prefetch before returning
@@ -1056,7 +1048,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPagerNoPrefetch(dataFlow, 50)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
scrollTo(42)
}
// initial load [50-54]
@@ -1072,7 +1064,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPagerNoPlaceholders(dataFlow, 50).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
// Without placeholders, first loaded page always starts at index[0]
scrollTo(0)
}
@@ -1090,7 +1082,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPagerNoPlaceholders(dataFlow, 50).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
scrollTo(-5)
}
// ensure it honors negative indices starting with index[0] = item[47]
@@ -1111,7 +1103,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPagerNoPlaceholders(dataFlow, 5).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
scrollTo(-5)
}
// ensure index is capped when no more data to load
@@ -1129,7 +1121,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPagerNoPlaceholders(dataFlow, 50).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
// Without placeholders, first loaded page always starts at index[0]
scrollTo(-1)
// Without placeholders, first loaded page always starts at index[0]
@@ -1155,7 +1147,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPagerNoPlaceholders(dataFlow, 50).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
// Without placeholders, first loaded page always starts at index[0]
scrollTo(-1)
}
@@ -1167,7 +1159,7 @@
listOf(41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57)
)
- val snapshot2 = pager.asSnapshot(this) {
+ val snapshot2 = pager.asSnapshot {
// Without placeholders, first loaded page always starts at index[0]
scrollTo(-5)
}
@@ -1197,7 +1189,7 @@
pagingSourceFactory = createFactory(dataFlow),
).flow.cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
// Without placeholders, first loaded page always starts at index[0]
scrollTo(0)
}
@@ -1215,7 +1207,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPager(dataFlow)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
scrollTo(12)
}
// initial load [0-4]
@@ -1233,7 +1225,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPagerWithDrops(dataFlow)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
scrollTo(12)
}
// dropped [0-7]
@@ -1252,7 +1244,7 @@
}
}
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
scrollTo(12)
}
// initial load [0-4]
@@ -1270,7 +1262,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPager(dataFlow)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
scrollTo(12)
scrollTo(18)
}
@@ -1290,7 +1282,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPager(dataFlow)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
scrollTo(12)
}
// initial load [0-4]
@@ -1301,7 +1293,7 @@
listOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)
)
- val snapshot2 = pager.asSnapshot(this) {
+ val snapshot2 = pager.asSnapshot {
scrollTo(18)
}
// appended [17-19]
@@ -1319,7 +1311,7 @@
val dataFlow = flowOf(List(15) { it })
val pager = createPager(dataFlow).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
// index out of bounds
scrollTo(50)
}
@@ -1337,7 +1329,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPager(dataFlow).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
// after initial Load and prefetch, max loaded index is 7
scrollTo(7)
}
@@ -1356,7 +1348,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPagerNoPrefetch(dataFlow)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
scrollTo(10)
}
// initial load [0-4]
@@ -1372,7 +1364,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPagerNoPlaceholders(dataFlow).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
// scroll to max loaded index
scrollTo(7)
}
@@ -1390,7 +1382,7 @@
val dataFlow = flowOf(List(20) { it })
val pager = createPagerNoPlaceholders(dataFlow).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
// 12 is larger than differ.size = 8 after initial refresh
scrollTo(12)
}
@@ -1410,7 +1402,7 @@
val dataFlow = flowOf(List(20) { it })
val pager = createPagerNoPlaceholders(dataFlow).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
scrollTo(50)
}
// ensure index is still capped to max index available
@@ -1428,7 +1420,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPagerNoPlaceholders(dataFlow).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
scrollTo(12)
scrollTo(17)
}
@@ -1449,7 +1441,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPagerNoPlaceholders(dataFlow).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
scrollTo(12)
}
// initial load [0-4]
@@ -1460,7 +1452,7 @@
listOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)
)
- val snapshot2 = pager.asSnapshot(this) {
+ val snapshot2 = pager.asSnapshot {
scrollTo(17)
}
// initial load [0-4]
@@ -1485,7 +1477,7 @@
}
}
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
scrollTo(8)
}
// initial load [0-4]
@@ -1496,7 +1488,7 @@
listOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)
)
- val snapshotWithSeparator = pagerWithSeparator.asSnapshot(this) {
+ val snapshotWithSeparator = pagerWithSeparator.asSnapshot {
scrollTo(8)
}
// initial load [0-4]
@@ -1514,7 +1506,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPager(dataFlow, 50)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
flingTo(42)
}
// initial load [50-54]
@@ -1534,7 +1526,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPagerWithDrops(dataFlow, 50)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
flingTo(42)
}
// dropped [47-57]
@@ -1553,7 +1545,7 @@
}
}
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
flingTo(42)
}
// initial load [50-54]
@@ -1574,7 +1566,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPager(dataFlow, 50)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
flingTo(42)
flingTo(38)
}
@@ -1596,7 +1588,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPager(dataFlow, 50)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
flingTo(42)
}
// initial load [50-54]
@@ -1609,7 +1601,7 @@
)
)
- val snapshot2 = pager.asSnapshot(this) {
+ val snapshot2 = pager.asSnapshot {
flingTo(38)
}
// prefetched [35-37]
@@ -1626,7 +1618,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPagerWithJump(dataFlow, 50)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
flingTo(30)
// jump triggered when flingTo registered lastAccessedIndex[30], refreshKey[28]
}
@@ -1643,7 +1635,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPagerWithJump(dataFlow, 50)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
scrollTo(43)
flingTo(30)
// jump triggered when flingTo registered lastAccessedIndex[30], refreshKey[28]
@@ -1661,7 +1653,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPagerWithJump(dataFlow, 50)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
flingTo(30)
// jump triggered when flingTo registered lastAccessedIndex[30], refreshKey[28]
flingTo(22)
@@ -1681,7 +1673,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPager(dataFlow, 10)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
flingTo(-3)
}
// initial load [10-14]
@@ -1698,7 +1690,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPager(dataFlow, 50)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
// page boundary
flingTo(44)
}
@@ -1718,7 +1710,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPagerNoPlaceholders(dataFlow, 50).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
// Without placeholders, first loaded page always starts at index[0]
flingTo(0)
}
@@ -1736,7 +1728,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPagerNoPlaceholders(dataFlow, 50)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
flingTo(-8)
}
// ensure we honor negative indices if there is data to load
@@ -1758,7 +1750,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPagerNoPlaceholders(dataFlow, 5).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
flingTo(-20)
}
// ensure index is capped when no more data to load
@@ -1776,7 +1768,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPagerNoPlaceholders(dataFlow, 50).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
// Without placeholders, first loaded page always starts at index[0]
flingTo(-1)
// Without placeholders, first loaded page always starts at index[0]
@@ -1802,7 +1794,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPagerNoPlaceholders(dataFlow, 50).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
// Without placeholders, first loaded page always starts at index[0]
flingTo(-1)
}
@@ -1814,7 +1806,7 @@
listOf(41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57)
)
- val snapshot2 = pager.asSnapshot(this) {
+ val snapshot2 = pager.asSnapshot {
// Without placeholders, first loaded page always starts at index[0]
flingTo(-5)
}
@@ -1844,7 +1836,7 @@
pagingSourceFactory = createFactory(dataFlow),
)
testScope.runTest {
- val snapshot = pager.flow.asSnapshot(this) {
+ val snapshot = pager.flow.asSnapshot {
// after refresh, lastAccessedIndex == index[2] == item(9)
flingTo(-1)
}
@@ -1863,7 +1855,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPager(dataFlow)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
flingTo(12)
}
// initial load [0-4]
@@ -1881,7 +1873,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPagerWithDrops(dataFlow)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
flingTo(12)
}
// dropped [0-7]
@@ -1900,7 +1892,7 @@
}
}
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
flingTo(12)
}
// initial load [0-4]
@@ -1918,7 +1910,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPager(dataFlow)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
flingTo(12)
flingTo(18)
}
@@ -1938,7 +1930,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPager(dataFlow)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
flingTo(12)
}
// initial load [0-4]
@@ -1949,7 +1941,7 @@
listOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)
)
- val snapshot2 = pager.asSnapshot(this) {
+ val snapshot2 = pager.asSnapshot {
flingTo(18)
}
// appended [17-19]
@@ -1967,7 +1959,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPagerWithJump(dataFlow)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
flingTo(30)
// jump triggered when flingTo registered lastAccessedIndex[30], refreshKey[28]
}
@@ -1984,7 +1976,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPagerWithJump(dataFlow)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
scrollTo(30)
flingTo(43)
// jump triggered when flingTo registered lastAccessedIndex[43], refreshKey[41]
@@ -2002,7 +1994,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPagerWithJump(dataFlow)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
flingTo(30)
// jump triggered when flingTo registered lastAccessedIndex[30], refreshKey[28]
flingTo(38)
@@ -2022,7 +2014,7 @@
val dataFlow = flowOf(List(15) { it })
val pager = createPager(dataFlow).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
// index out of bounds
flingTo(50)
}
@@ -2040,7 +2032,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPager(dataFlow).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
// after initial Load and prefetch, max loaded index is 7
flingTo(7)
}
@@ -2059,7 +2051,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPagerNoPlaceholders(dataFlow).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
// scroll to max loaded index
flingTo(7)
}
@@ -2077,7 +2069,7 @@
val dataFlow = flowOf(List(20) { it })
val pager = createPagerNoPlaceholders(dataFlow).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
// 12 is larger than differ.size = 8 after initial refresh
flingTo(12)
}
@@ -2097,7 +2089,7 @@
val dataFlow = flowOf(List(20) { it })
val pager = createPagerNoPlaceholders(dataFlow).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
flingTo(50)
}
// ensure index is still capped to max index available
@@ -2115,7 +2107,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPagerNoPlaceholders(dataFlow).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
flingTo(12)
flingTo(17)
}
@@ -2136,7 +2128,7 @@
val dataFlow = flowOf(List(100) { it })
val pager = createPagerNoPlaceholders(dataFlow).cachedIn(testScope.backgroundScope)
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
flingTo(12)
}
// initial load [0-4]
@@ -2147,7 +2139,7 @@
listOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)
)
- val snapshot2 = pager.asSnapshot(this) {
+ val snapshot2 = pager.asSnapshot {
flingTo(17)
}
// initial load [0-4]
@@ -2176,7 +2168,7 @@
pagingSourceFactory = createFactory(dataFlow),
)
testScope.runTest {
- val snapshot = pager.flow.asSnapshot(this) {
+ val snapshot = pager.flow.asSnapshot {
// after refresh, lastAccessedIndex == index[2] == item(9)
flingTo(2)
}
@@ -2208,7 +2200,7 @@
}
}
testScope.runTest {
- val snapshot = pager.asSnapshot(this) {
+ val snapshot = pager.asSnapshot {
flingTo(51)
}
// initial load [50]
@@ -2218,7 +2210,7 @@
listOf(49, 50, 51, 52)
)
- val snapshotWithSeparator = pagerWithSeparator.asSnapshot(this) {
+ val snapshotWithSeparator = pagerWithSeparator.asSnapshot {
flingTo(51)
}
// initial load [50]
@@ -2243,10 +2235,7 @@
).flow
testScope.runTest {
val error = assertFailsWith(IllegalArgumentException::class) {
- pager.asSnapshot(
- coroutineScope = this,
- onError = { ErrorRecovery.THROW }
- ) {
+ pager.asSnapshot(onError = { ErrorRecovery.THROW }) {
val source = pagingSources.first()
source.errorOnNextLoad = true
scrollTo(12)
@@ -2268,10 +2257,7 @@
},
).flow
testScope.runTest {
- val snapshot = pager.asSnapshot(
- coroutineScope = this,
- onError = { ErrorRecovery.RETRY }
- ) {
+ val snapshot = pager.asSnapshot(onError = { ErrorRecovery.RETRY }) {
val source = pagingSources.first()
// should have two loads to far - refresh and append(prefetch)
assertThat(source.loads.size).isEqualTo(2)
@@ -2312,7 +2298,6 @@
var retryCount = 0
testScope.runTest {
val snapshot = pager.asSnapshot(
- coroutineScope = this,
onError = {
// retry twice
if (retryCount < 2) {
@@ -2352,10 +2337,7 @@
},
).flow
testScope.runTest {
- val snapshot = pager.asSnapshot(
- coroutineScope = this,
- onError = { ErrorRecovery.RETURN_CURRENT_SNAPSHOT }
- ) {
+ val snapshot = pager.asSnapshot(onError = { ErrorRecovery.RETURN_CURRENT_SNAPSHOT }) {
val source = pagingSources.first()
source.errorOnNextLoad = true
scrollTo(12)
diff --git a/paging/paging-testing/src/test/kotlin/androidx/paging/testing/StaticListPagingSourceFactoryTest.kt b/paging/paging-testing/src/test/kotlin/androidx/paging/testing/StaticListPagingSourceFactoryTest.kt
index c293ed0..c327ff5 100644
--- a/paging/paging-testing/src/test/kotlin/androidx/paging/testing/StaticListPagingSourceFactoryTest.kt
+++ b/paging/paging-testing/src/test/kotlin/androidx/paging/testing/StaticListPagingSourceFactoryTest.kt
@@ -50,7 +50,7 @@
val factory: PagingSourceFactory<Int, Int> =
flowOf<List<Int>>().asPagingSourceFactory(testScope)
val pagingSource = factory()
- val pager = TestPager(pagingSource, CONFIG)
+ val pager = TestPager(CONFIG, pagingSource)
runTest {
val result = pager.refresh() as Page
@@ -67,7 +67,7 @@
val factory: PagingSourceFactory<Int, Int> =
flow.asPagingSourceFactory(testScope)
val pagingSource = factory()
- val pager = TestPager(pagingSource, CONFIG)
+ val pager = TestPager(CONFIG, pagingSource)
runTest {
val result = pager.refresh() as Page
@@ -92,7 +92,7 @@
// first gen
val pagingSource1 = factory()
- val pager1 = TestPager(pagingSource1, CONFIG)
+ val pager1 = TestPager(CONFIG, pagingSource1)
val result1 = pager1.refresh() as Page
assertThat(result1.data).containsExactlyElementsIn(
listOf(0, 1, 2, 3, 4)
@@ -105,7 +105,7 @@
// second gen
val pagingSource2 = factory()
- val pager2 = TestPager(pagingSource2, CONFIG)
+ val pager2 = TestPager(CONFIG, pagingSource2)
val result2 = pager2.refresh() as Page
assertThat(result2.data).containsExactlyElementsIn(
listOf(30, 31, 32, 33, 34)
@@ -125,7 +125,7 @@
advanceUntilIdle()
val pagingSource = factory()
- val pager = TestPager(pagingSource, CONFIG)
+ val pager = TestPager(CONFIG, pagingSource)
val result = pager.refresh() as Page
assertThat(result.data).containsExactlyElementsIn(
listOf(0, 1, 2, 3, 4)
@@ -158,7 +158,7 @@
// factory 1 first gen
val pagingSource = factory1()
- val pager = TestPager(pagingSource, CONFIG)
+ val pager = TestPager(CONFIG, pagingSource)
val result = pager.refresh() as Page
assertThat(result.data).containsExactlyElementsIn(
listOf(0, 1, 2, 3, 4)
@@ -166,7 +166,7 @@
// factory 2 first gen
val pagingSource2 = factory2()
- val pager2 = TestPager(pagingSource2, CONFIG)
+ val pager2 = TestPager(CONFIG, pagingSource2)
val result2 = pager2.refresh() as Page
assertThat(result2.data).containsExactlyElementsIn(
listOf(0, 1, 2, 3, 4)
@@ -182,7 +182,7 @@
// factory 1 second gen
val pagingSource3 = factory1()
- val pager3 = TestPager(pagingSource3, CONFIG)
+ val pager3 = TestPager(CONFIG, pagingSource3)
val result3 = pager3.refresh() as Page
assertThat(result3.data).containsExactlyElementsIn(
listOf(30, 31, 32, 33, 34)
@@ -190,7 +190,7 @@
// factory 2 second gen
val pagingSource4 = factory2()
- val pager4 = TestPager(pagingSource4, CONFIG)
+ val pager4 = TestPager(CONFIG, pagingSource4)
val result4 = pager4.refresh() as Page
assertThat(result4.data).containsExactlyElementsIn(
listOf(30, 31, 32, 33, 34)
@@ -203,14 +203,14 @@
val factory = data.asPagingSourceFactory()
val pagingSource1 = factory()
- val pager1 = TestPager(pagingSource1, CONFIG)
+ val pager1 = TestPager(CONFIG, pagingSource1)
val refresh1 = pager1.refresh() as Page
assertThat(refresh1.data).containsExactlyElementsIn(
listOf(0, 1, 2, 3, 4)
)
val pagingSource2 = factory()
- val pager2 = TestPager(pagingSource2, CONFIG)
+ val pager2 = TestPager(CONFIG, pagingSource2)
val refresh2 = pager2.refresh() as Page
assertThat(refresh2.data).containsExactlyElementsIn(
listOf(0, 1, 2, 3, 4)
@@ -223,12 +223,12 @@
val factory = data.asPagingSourceFactory()
val pagingSource1 = factory()
- val pager1 = TestPager(pagingSource1, CONFIG)
+ val pager1 = TestPager(CONFIG, pagingSource1)
val refresh1 = pager1.refresh() as Page
assertThat(refresh1.data).isEmpty()
val pagingSource2 = factory()
- val pager2 = TestPager(pagingSource2, CONFIG)
+ val pager2 = TestPager(CONFIG, pagingSource2)
val refresh2 = pager2.refresh() as Page
assertThat(refresh2.data).isEmpty()
}
@@ -238,7 +238,7 @@
val data = List(20) { it }
val factory = data.asPagingSourceFactory()
val pagingSource1 = factory()
- val pager1 = TestPager(pagingSource1, CONFIG)
+ val pager1 = TestPager(CONFIG, pagingSource1)
pager1.refresh() as Page
pager1.append()
@@ -257,7 +257,7 @@
val data = List(20) { it }
val factory = data.asPagingSourceFactory()
val pagingSource1 = factory()
- val pager1 = TestPager(pagingSource1, CONFIG)
+ val pager1 = TestPager(CONFIG, pagingSource1)
pager1.refresh(initialKey = 10) as Page
pager1.prepend()
diff --git a/paging/paging-testing/src/test/kotlin/androidx/paging/testing/StaticListPagingSourceTest.kt b/paging/paging-testing/src/test/kotlin/androidx/paging/testing/StaticListPagingSourceTest.kt
index 0ab9d08..e93e9d9 100644
--- a/paging/paging-testing/src/test/kotlin/androidx/paging/testing/StaticListPagingSourceTest.kt
+++ b/paging/paging-testing/src/test/kotlin/androidx/paging/testing/StaticListPagingSourceTest.kt
@@ -271,7 +271,7 @@
@OptIn(kotlinx.coroutines.ExperimentalCoroutinesApi::class)
private fun runPagingSourceTest(
source: PagingSource<Int, Int> = StaticListPagingSource(DATA),
- pager: TestPager<Int, Int> = TestPager(source, CONFIG),
+ pager: TestPager<Int, Int> = TestPager(CONFIG, source),
block: suspend (pagingSource: PagingSource<Int, Int>, pager: TestPager<Int, Int>) -> Unit
) {
runTest {
diff --git a/paging/paging-testing/src/test/kotlin/androidx/paging/testing/TestPagerTest.kt b/paging/paging-testing/src/test/kotlin/androidx/paging/testing/TestPagerTest.kt
index 72b5b48..6caaea9 100644
--- a/paging/paging-testing/src/test/kotlin/androidx/paging/testing/TestPagerTest.kt
+++ b/paging/paging-testing/src/test/kotlin/androidx/paging/testing/TestPagerTest.kt
@@ -39,7 +39,7 @@
@Test
fun refresh_nullKey() {
val source = TestPagingSource()
- val pager = TestPager(source, CONFIG)
+ val pager = TestPager(CONFIG, source)
runTest {
val result = pager.refresh(null) as LoadResult.Page
@@ -51,7 +51,7 @@
@Test
fun refresh_withInitialKey() {
val source = TestPagingSource()
- val pager = TestPager(source, CONFIG)
+ val pager = TestPager(CONFIG, source)
runTest {
val result = pager.refresh(50) as LoadResult.Page
@@ -63,7 +63,7 @@
@Test
fun refresh_returnError() {
val source = TestPagingSource()
- val pager = TestPager(source, CONFIG)
+ val pager = TestPager(CONFIG, source)
runTest {
source.errorNextLoad = true
@@ -78,7 +78,7 @@
@Test
fun refresh_returnInvalid() {
val source = TestPagingSource()
- val pager = TestPager(source, CONFIG)
+ val pager = TestPager(CONFIG, source)
runTest {
source.nextLoadResult = LoadResult.Invalid()
@@ -93,7 +93,7 @@
@Test
fun refresh_invalidPagingSource() {
val source = TestPagingSource()
- val pager = TestPager(source, CONFIG)
+ val pager = TestPager(CONFIG, source)
runTest {
source.invalidate()
@@ -108,7 +108,7 @@
@Test
fun refresh_getLastLoadedPage() {
val source = TestPagingSource()
- val pager = TestPager(source, CONFIG)
+ val pager = TestPager(CONFIG, source)
runTest {
val page: LoadResult.Page<Int, Int>? = pager.run {
@@ -123,7 +123,7 @@
@Test
fun getLastLoadedPage_afterInvalidPagingSource() {
val source = TestPagingSource()
- val pager = TestPager(source, CONFIG)
+ val pager = TestPager(CONFIG, source)
runTest {
val page = pager.run {
@@ -141,7 +141,7 @@
@Test
fun refresh_getPages() {
val source = TestPagingSource()
- val pager = TestPager(source, CONFIG)
+ val pager = TestPager(CONFIG, source)
runTest {
val pages = pager.run {
@@ -160,7 +160,7 @@
@Test
fun getPages_multiplePages() = runTest {
val source = TestPagingSource()
- val pager = TestPager(source, CONFIG)
+ val pager = TestPager(CONFIG, source)
pager.run {
refresh(20)
@@ -179,7 +179,7 @@
@Test
fun getPages_fromEmptyList() = runTest {
val source = TestPagingSource()
- val pager = TestPager(source, CONFIG)
+ val pager = TestPager(CONFIG, source)
val pages = pager.getPages()
assertThat(pages).isEmpty()
}
@@ -187,7 +187,7 @@
@Test
fun getPages_afterInvalidPagingSource() {
val source = TestPagingSource()
- val pager = TestPager(source, CONFIG)
+ val pager = TestPager(CONFIG, source)
runTest {
val pages = pager.run {
@@ -209,7 +209,7 @@
@Test
fun getPages_multiThread() = runTest {
val source = TestPagingSource()
- val pager = TestPager(source, CONFIG)
+ val pager = TestPager(CONFIG, source)
var pages: List<LoadResult.Page<Int, Int>>? = null
val job = launch {
@@ -250,7 +250,7 @@
@Test
fun multipleRefresh_onSinglePager_throws() {
val source = TestPagingSource()
- val pager = TestPager(source, CONFIG)
+ val pager = TestPager(CONFIG, source)
runTest {
pager.run {
@@ -269,7 +269,7 @@
@Test
fun multipleRefresh_onMultiplePagers() = runTest {
val source1 = TestPagingSource()
- val pager1 = TestPager(source1, CONFIG)
+ val pager1 = TestPager(CONFIG, source1)
// first gen
val result1 = pager1.run {
@@ -280,7 +280,7 @@
// second gen
val source2 = TestPagingSource()
- val pager2 = TestPager(source2, CONFIG)
+ val pager2 = TestPager(CONFIG, source2)
val result2 = pager2.run {
refresh()
@@ -292,7 +292,7 @@
@Test
fun simpleAppend() = runTest {
val source = TestPagingSource()
- val pager = TestPager(source, CONFIG)
+ val pager = TestPager(CONFIG, source)
val result = pager.run {
refresh(null)
@@ -311,7 +311,7 @@
@Test
fun simplePrepend() = runTest {
val source = TestPagingSource()
- val pager = TestPager(source, CONFIG)
+ val pager = TestPager(CONFIG, source)
val result = pager.run {
refresh(30)
@@ -333,7 +333,7 @@
@Test
fun append_beforeRefresh_throws() = runTest {
val source = TestPagingSource()
- val pager = TestPager(source, CONFIG)
+ val pager = TestPager(CONFIG, source)
assertFailsWith<IllegalStateException> {
pager.append()
}
@@ -342,7 +342,7 @@
@Test
fun prepend_beforeRefresh_throws() = runTest {
val source = TestPagingSource()
- val pager = TestPager(source, CONFIG)
+ val pager = TestPager(CONFIG, source)
assertFailsWith<IllegalStateException> {
pager.prepend()
}
@@ -351,7 +351,7 @@
@Test
fun append_invalidPagingSource() = runTest {
val source = TestPagingSource()
- val pager = TestPager(source, CONFIG)
+ val pager = TestPager(CONFIG, source)
val result = pager.run {
refresh()
@@ -367,7 +367,7 @@
@Test
fun prepend_invalidPagingSource() = runTest {
val source = TestPagingSource()
- val pager = TestPager(source, CONFIG)
+ val pager = TestPager(CONFIG, source)
val result = pager.run {
refresh(initialKey = 20)
@@ -383,7 +383,7 @@
@Test
fun consecutive_append() = runTest {
val source = TestPagingSource()
- val pager = TestPager(source, CONFIG)
+ val pager = TestPager(CONFIG, source)
pager.run {
refresh(20)
@@ -403,7 +403,7 @@
@Test
fun consecutive_prepend() = runTest {
val source = TestPagingSource()
- val pager = TestPager(source, CONFIG)
+ val pager = TestPager(CONFIG, source)
pager.run {
refresh(20)
@@ -427,7 +427,7 @@
@Test
fun append_then_prepend() = runTest {
val source = TestPagingSource()
- val pager = TestPager(source, CONFIG)
+ val pager = TestPager(CONFIG, source)
pager.run {
refresh(20)
@@ -450,7 +450,7 @@
@Test
fun prepend_then_append() = runTest {
val source = TestPagingSource()
- val pager = TestPager(source, CONFIG)
+ val pager = TestPager(CONFIG, source)
pager.run {
refresh(20)
@@ -473,7 +473,7 @@
@Test
fun multiThread_loads() = runTest {
val source = TestPagingSource()
- val pager = TestPager(source, CONFIG)
+ val pager = TestPager(CONFIG, source)
// load operations upon completion add an int to the list.
// after all loads complete, we assert the order that the ints were added.
val loadOrder = mutableListOf<Int>()
@@ -511,7 +511,7 @@
@Test
fun multiThread_operations() = runTest {
val source = TestPagingSource()
- val pager = TestPager(source, CONFIG)
+ val pager = TestPager(CONFIG, source)
// operations upon completion add an int to the list.
// after all operations complete, we assert the order that the ints were added.
val loadOrder = mutableListOf<Int>()
@@ -559,7 +559,7 @@
@Test
fun getPagingStateWithAnchorPosition_placeHoldersEnabled() = runTest {
val source = TestPagingSource()
- val pager = TestPager(source, CONFIG)
+ val pager = TestPager(CONFIG, source)
val state = pager.run {
refresh(20)
@@ -583,7 +583,7 @@
)
)
val source2 = TestPagingSource()
- val pager2 = TestPager(source, CONFIG)
+ val pager2 = TestPager(CONFIG, source)
val page = pager2.run {
refresh(source2.getRefreshKey(state))
}
@@ -598,7 +598,7 @@
initialLoadSize = 5,
enablePlaceholders = false
)
- val pager = TestPager(source, config)
+ val pager = TestPager(config, source)
val state = pager.run {
refresh(20)
@@ -621,7 +621,7 @@
)
)
val source2 = TestPagingSource()
- val pager2 = TestPager(source, CONFIG)
+ val pager2 = TestPager(CONFIG, source)
val page = pager2.run {
refresh(source2.getRefreshKey(state))
}
@@ -634,7 +634,7 @@
@Test
fun getPagingStateWithAnchorPosition_indexOutOfBoundsWithPlaceholders() = runTest {
val source = TestPagingSource()
- val pager = TestPager(source, CONFIG)
+ val pager = TestPager(CONFIG, source)
val msg = assertFailsWith<IllegalStateException> {
pager.run {
@@ -661,12 +661,12 @@
fun getPagingStateWithAnchorPosition_indexOutOfBoundsWithoutPlaceholders() = runTest {
val source = TestPagingSource()
val pager = TestPager(
- source,
PagingConfig(
pageSize = 3,
initialLoadSize = 5,
enablePlaceholders = false
- )
+ ),
+ source
)
val msg = assertFailsWith<IllegalStateException> {
@@ -694,7 +694,7 @@
@Test
fun getPagingStateWithAnchorLookup_placeHoldersEnabled() = runTest {
val source = TestPagingSource()
- val pager = TestPager(source, CONFIG)
+ val pager = TestPager(CONFIG, source)
val state = pager.run {
refresh(20)
@@ -718,7 +718,7 @@
)
// use state to getRefreshKey
val source2 = TestPagingSource()
- val pager2 = TestPager(source, CONFIG)
+ val pager2 = TestPager(CONFIG, source)
val page = pager2.run {
refresh(source2.getRefreshKey(state))
}
@@ -733,7 +733,7 @@
initialLoadSize = 5,
enablePlaceholders = false
)
- val pager = TestPager(source, config)
+ val pager = TestPager(config, source)
val state = pager.run {
refresh(20)
@@ -757,7 +757,7 @@
)
// use state to getRefreshKey
val source2 = TestPagingSource()
- val pager2 = TestPager(source, CONFIG)
+ val pager2 = TestPager(CONFIG, source)
val page = pager2.run {
refresh(source2.getRefreshKey(state))
}
@@ -775,7 +775,7 @@
initialLoadSize = 5,
enablePlaceholders = false
)
- val pager = TestPager(source, config)
+ val pager = TestPager(config, source)
val msg = assertFailsWith<IllegalArgumentException> {
pager.run {
@@ -801,7 +801,7 @@
enablePlaceholders = false,
maxSize = 10
)
- val pager = TestPager(source, config)
+ val pager = TestPager(config, source)
pager.run {
refresh(20)
prepend()
@@ -833,7 +833,7 @@
enablePlaceholders = false,
maxSize = 10
)
- val pager = TestPager(source, config)
+ val pager = TestPager(config, source)
pager.run {
refresh(20)
append()
@@ -864,7 +864,7 @@
enablePlaceholders = false,
maxSize = 10
)
- val pager = TestPager(source, config)
+ val pager = TestPager(config, source)
pager.run {
refresh(20)
append()
@@ -896,7 +896,7 @@
maxSize = 5,
prefetchDistance = 2
)
- val pager = TestPager(source, config)
+ val pager = TestPager(config, source)
pager.refresh(20)
assertThat(pager.getPages()).containsExactlyElementsIn(
listOf(
@@ -931,7 +931,7 @@
maxSize = 3,
prefetchDistance = 1
)
- val pager = TestPager(source, config)
+ val pager = TestPager(config, source)
val result = pager.refresh() as LoadResult.Page
assertThat(result.data).containsExactlyElementsIn(
listOf(0, 1, 2, 3, 4)
diff --git a/paging/samples/build.gradle b/paging/samples/build.gradle
index 4a7e36a..9e5516a 100644
--- a/paging/samples/build.gradle
+++ b/paging/samples/build.gradle
@@ -52,7 +52,7 @@
}
androidx {
- name = "AndroidX Paging Samples"
+ name = "Paging Samples"
type = LibraryType.SAMPLES
inceptionYear = "2019"
description = "Contains the sample code for the Androidx Paging library"
diff --git a/paging/samples/src/main/java/androidx/paging/samples/BaseViewModel.kt b/paging/samples/src/main/java/androidx/paging/samples/BaseViewModel.kt
index fa93e32..9de9423 100644
--- a/paging/samples/src/main/java/androidx/paging/samples/BaseViewModel.kt
+++ b/paging/samples/src/main/java/androidx/paging/samples/BaseViewModel.kt
@@ -22,9 +22,9 @@
import androidx.paging.PagingConfig
import androidx.paging.PagingSource
import androidx.paging.cachedIn
+import androidx.paging.liveData
import androidx.paging.rxjava2.cachedIn
import androidx.paging.rxjava2.flowable
-import androidx.paging.liveData
import kotlinx.coroutines.ExperimentalCoroutinesApi
/**
diff --git a/paging/samples/src/main/java/androidx/paging/samples/InsertSeparatorsSample.kt b/paging/samples/src/main/java/androidx/paging/samples/InsertSeparatorsSample.kt
index 71a5a41..da92c7b 100644
--- a/paging/samples/src/main/java/androidx/paging/samples/InsertSeparatorsSample.kt
+++ b/paging/samples/src/main/java/androidx/paging/samples/InsertSeparatorsSample.kt
@@ -28,10 +28,10 @@
import com.google.common.util.concurrent.Futures
import io.reactivex.Maybe
import io.reactivex.schedulers.Schedulers
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.map
import java.util.concurrent.Callable
import java.util.concurrent.Executors
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.map
private lateinit var pagingDataStream: Flow<PagingData<String>>
diff --git a/paging/samples/src/main/java/androidx/paging/samples/InsertSeparatorsUiModelSample.kt b/paging/samples/src/main/java/androidx/paging/samples/InsertSeparatorsUiModelSample.kt
index 040f6f3..9a2bd7f 100644
--- a/paging/samples/src/main/java/androidx/paging/samples/InsertSeparatorsUiModelSample.kt
+++ b/paging/samples/src/main/java/androidx/paging/samples/InsertSeparatorsUiModelSample.kt
@@ -29,10 +29,10 @@
import com.google.common.util.concurrent.Futures
import io.reactivex.Maybe
import io.reactivex.schedulers.Schedulers
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.map
import java.util.concurrent.Callable
import java.util.concurrent.Executors
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.map
class Item(
@JvmField
diff --git a/paging/samples/src/main/java/androidx/paging/samples/ListenableFuturePagingSourceSample.kt b/paging/samples/src/main/java/androidx/paging/samples/ListenableFuturePagingSourceSample.kt
index 21718c3..ca2df59f 100644
--- a/paging/samples/src/main/java/androidx/paging/samples/ListenableFuturePagingSourceSample.kt
+++ b/paging/samples/src/main/java/androidx/paging/samples/ListenableFuturePagingSourceSample.kt
@@ -23,9 +23,9 @@
import androidx.paging.PagingState
import com.google.common.util.concurrent.FluentFuture
import com.google.common.util.concurrent.ListenableFuture
-import retrofit2.HttpException
import java.io.IOException
import java.util.concurrent.Executor
+import retrofit2.HttpException
data class RemoteResult(
val items: List<Item>,
diff --git a/paging/samples/src/main/java/androidx/paging/samples/PagingSourceSample.kt b/paging/samples/src/main/java/androidx/paging/samples/PagingSourceSample.kt
index bd894fc..efaee82 100644
--- a/paging/samples/src/main/java/androidx/paging/samples/PagingSourceSample.kt
+++ b/paging/samples/src/main/java/androidx/paging/samples/PagingSourceSample.kt
@@ -22,8 +22,8 @@
import androidx.paging.PagingSource
import androidx.paging.PagingSource.LoadResult
import androidx.paging.PagingState
-import retrofit2.HttpException
import java.io.IOException
+import retrofit2.HttpException
internal class MyBackendService {
data class RemoteResult(
diff --git a/paging/samples/src/main/java/androidx/paging/samples/RemoteMediatorSample.kt b/paging/samples/src/main/java/androidx/paging/samples/RemoteMediatorSample.kt
index 0b40372..6cbefcb 100644
--- a/paging/samples/src/main/java/androidx/paging/samples/RemoteMediatorSample.kt
+++ b/paging/samples/src/main/java/androidx/paging/samples/RemoteMediatorSample.kt
@@ -28,9 +28,9 @@
import androidx.paging.samples.shared.RoomDb
import androidx.paging.samples.shared.User
import androidx.room.withTransaction
-import retrofit2.HttpException
import java.io.IOException
import java.util.concurrent.TimeUnit
+import retrofit2.HttpException
private interface ItemDao {
fun withTransaction(block: () -> Any)
diff --git a/paging/samples/src/main/java/androidx/paging/samples/RxPagingSourceSample.kt b/paging/samples/src/main/java/androidx/paging/samples/RxPagingSourceSample.kt
index 0ec0ec4..2e6ce22 100644
--- a/paging/samples/src/main/java/androidx/paging/samples/RxPagingSourceSample.kt
+++ b/paging/samples/src/main/java/androidx/paging/samples/RxPagingSourceSample.kt
@@ -23,8 +23,8 @@
import androidx.paging.rxjava2.RxPagingSource
import io.reactivex.Single
import io.reactivex.schedulers.Schedulers
-import retrofit2.HttpException
import java.io.IOException
+import retrofit2.HttpException
private class RxBackendService {
data class RemoteResult(
diff --git a/palette/palette/build.gradle b/palette/palette/build.gradle
index 90bdee7..df6b451 100644
--- a/palette/palette/build.gradle
+++ b/palette/palette/build.gradle
@@ -17,7 +17,7 @@
}
androidx {
- name = "Android Support Palette"
+ name = "Palette"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2014"
description = "Android Support Palette"
diff --git a/percentlayout/percentlayout/api/current.txt b/percentlayout/percentlayout/api/current.txt
index d32e4e2..ffe5f88 100644
--- a/percentlayout/percentlayout/api/current.txt
+++ b/percentlayout/percentlayout/api/current.txt
@@ -11,12 +11,12 @@
@Deprecated public static class PercentFrameLayout.LayoutParams extends android.widget.FrameLayout.LayoutParams implements androidx.percentlayout.widget.PercentLayoutHelper.PercentLayoutParams {
ctor @Deprecated public PercentFrameLayout.LayoutParams(android.content.Context!, android.util.AttributeSet!);
- ctor @Deprecated public PercentFrameLayout.LayoutParams(int, int);
- ctor @Deprecated public PercentFrameLayout.LayoutParams(int, int, int);
ctor @Deprecated public PercentFrameLayout.LayoutParams(android.view.ViewGroup.LayoutParams!);
ctor @Deprecated public PercentFrameLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
ctor @Deprecated public PercentFrameLayout.LayoutParams(android.widget.FrameLayout.LayoutParams!);
ctor @Deprecated @RequiresApi(19) public PercentFrameLayout.LayoutParams(androidx.percentlayout.widget.PercentFrameLayout.LayoutParams!);
+ ctor @Deprecated public PercentFrameLayout.LayoutParams(int, int);
+ ctor @Deprecated public PercentFrameLayout.LayoutParams(int, int, int);
method @Deprecated public androidx.percentlayout.widget.PercentLayoutHelper.PercentLayoutInfo! getPercentLayoutInfo();
}
@@ -32,8 +32,8 @@
@Deprecated public static class PercentLayoutHelper.PercentLayoutInfo {
ctor @Deprecated public PercentLayoutHelper.PercentLayoutInfo();
method @Deprecated public void fillLayoutParams(android.view.ViewGroup.LayoutParams!, int, int);
- method @Deprecated public void fillMarginLayoutParams(android.view.ViewGroup.MarginLayoutParams!, int, int);
method @Deprecated public void fillMarginLayoutParams(android.view.View!, android.view.ViewGroup.MarginLayoutParams!, int, int);
+ method @Deprecated public void fillMarginLayoutParams(android.view.ViewGroup.MarginLayoutParams!, int, int);
method @Deprecated public void restoreLayoutParams(android.view.ViewGroup.LayoutParams!);
method @Deprecated public void restoreMarginLayoutParams(android.view.ViewGroup.MarginLayoutParams!);
field @Deprecated public float aspectRatio;
@@ -61,9 +61,9 @@
@Deprecated public static class PercentRelativeLayout.LayoutParams extends android.widget.RelativeLayout.LayoutParams implements androidx.percentlayout.widget.PercentLayoutHelper.PercentLayoutParams {
ctor @Deprecated public PercentRelativeLayout.LayoutParams(android.content.Context!, android.util.AttributeSet!);
- ctor @Deprecated public PercentRelativeLayout.LayoutParams(int, int);
ctor @Deprecated public PercentRelativeLayout.LayoutParams(android.view.ViewGroup.LayoutParams!);
ctor @Deprecated public PercentRelativeLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+ ctor @Deprecated public PercentRelativeLayout.LayoutParams(int, int);
method @Deprecated public androidx.percentlayout.widget.PercentLayoutHelper.PercentLayoutInfo! getPercentLayoutInfo();
}
diff --git a/percentlayout/percentlayout/api/public_plus_experimental_current.txt b/percentlayout/percentlayout/api/public_plus_experimental_current.txt
index d32e4e2..ffe5f88 100644
--- a/percentlayout/percentlayout/api/public_plus_experimental_current.txt
+++ b/percentlayout/percentlayout/api/public_plus_experimental_current.txt
@@ -11,12 +11,12 @@
@Deprecated public static class PercentFrameLayout.LayoutParams extends android.widget.FrameLayout.LayoutParams implements androidx.percentlayout.widget.PercentLayoutHelper.PercentLayoutParams {
ctor @Deprecated public PercentFrameLayout.LayoutParams(android.content.Context!, android.util.AttributeSet!);
- ctor @Deprecated public PercentFrameLayout.LayoutParams(int, int);
- ctor @Deprecated public PercentFrameLayout.LayoutParams(int, int, int);
ctor @Deprecated public PercentFrameLayout.LayoutParams(android.view.ViewGroup.LayoutParams!);
ctor @Deprecated public PercentFrameLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
ctor @Deprecated public PercentFrameLayout.LayoutParams(android.widget.FrameLayout.LayoutParams!);
ctor @Deprecated @RequiresApi(19) public PercentFrameLayout.LayoutParams(androidx.percentlayout.widget.PercentFrameLayout.LayoutParams!);
+ ctor @Deprecated public PercentFrameLayout.LayoutParams(int, int);
+ ctor @Deprecated public PercentFrameLayout.LayoutParams(int, int, int);
method @Deprecated public androidx.percentlayout.widget.PercentLayoutHelper.PercentLayoutInfo! getPercentLayoutInfo();
}
@@ -32,8 +32,8 @@
@Deprecated public static class PercentLayoutHelper.PercentLayoutInfo {
ctor @Deprecated public PercentLayoutHelper.PercentLayoutInfo();
method @Deprecated public void fillLayoutParams(android.view.ViewGroup.LayoutParams!, int, int);
- method @Deprecated public void fillMarginLayoutParams(android.view.ViewGroup.MarginLayoutParams!, int, int);
method @Deprecated public void fillMarginLayoutParams(android.view.View!, android.view.ViewGroup.MarginLayoutParams!, int, int);
+ method @Deprecated public void fillMarginLayoutParams(android.view.ViewGroup.MarginLayoutParams!, int, int);
method @Deprecated public void restoreLayoutParams(android.view.ViewGroup.LayoutParams!);
method @Deprecated public void restoreMarginLayoutParams(android.view.ViewGroup.MarginLayoutParams!);
field @Deprecated public float aspectRatio;
@@ -61,9 +61,9 @@
@Deprecated public static class PercentRelativeLayout.LayoutParams extends android.widget.RelativeLayout.LayoutParams implements androidx.percentlayout.widget.PercentLayoutHelper.PercentLayoutParams {
ctor @Deprecated public PercentRelativeLayout.LayoutParams(android.content.Context!, android.util.AttributeSet!);
- ctor @Deprecated public PercentRelativeLayout.LayoutParams(int, int);
ctor @Deprecated public PercentRelativeLayout.LayoutParams(android.view.ViewGroup.LayoutParams!);
ctor @Deprecated public PercentRelativeLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+ ctor @Deprecated public PercentRelativeLayout.LayoutParams(int, int);
method @Deprecated public androidx.percentlayout.widget.PercentLayoutHelper.PercentLayoutInfo! getPercentLayoutInfo();
}
diff --git a/percentlayout/percentlayout/api/restricted_current.txt b/percentlayout/percentlayout/api/restricted_current.txt
index d32e4e2..ffe5f88 100644
--- a/percentlayout/percentlayout/api/restricted_current.txt
+++ b/percentlayout/percentlayout/api/restricted_current.txt
@@ -11,12 +11,12 @@
@Deprecated public static class PercentFrameLayout.LayoutParams extends android.widget.FrameLayout.LayoutParams implements androidx.percentlayout.widget.PercentLayoutHelper.PercentLayoutParams {
ctor @Deprecated public PercentFrameLayout.LayoutParams(android.content.Context!, android.util.AttributeSet!);
- ctor @Deprecated public PercentFrameLayout.LayoutParams(int, int);
- ctor @Deprecated public PercentFrameLayout.LayoutParams(int, int, int);
ctor @Deprecated public PercentFrameLayout.LayoutParams(android.view.ViewGroup.LayoutParams!);
ctor @Deprecated public PercentFrameLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
ctor @Deprecated public PercentFrameLayout.LayoutParams(android.widget.FrameLayout.LayoutParams!);
ctor @Deprecated @RequiresApi(19) public PercentFrameLayout.LayoutParams(androidx.percentlayout.widget.PercentFrameLayout.LayoutParams!);
+ ctor @Deprecated public PercentFrameLayout.LayoutParams(int, int);
+ ctor @Deprecated public PercentFrameLayout.LayoutParams(int, int, int);
method @Deprecated public androidx.percentlayout.widget.PercentLayoutHelper.PercentLayoutInfo! getPercentLayoutInfo();
}
@@ -32,8 +32,8 @@
@Deprecated public static class PercentLayoutHelper.PercentLayoutInfo {
ctor @Deprecated public PercentLayoutHelper.PercentLayoutInfo();
method @Deprecated public void fillLayoutParams(android.view.ViewGroup.LayoutParams!, int, int);
- method @Deprecated public void fillMarginLayoutParams(android.view.ViewGroup.MarginLayoutParams!, int, int);
method @Deprecated public void fillMarginLayoutParams(android.view.View!, android.view.ViewGroup.MarginLayoutParams!, int, int);
+ method @Deprecated public void fillMarginLayoutParams(android.view.ViewGroup.MarginLayoutParams!, int, int);
method @Deprecated public void restoreLayoutParams(android.view.ViewGroup.LayoutParams!);
method @Deprecated public void restoreMarginLayoutParams(android.view.ViewGroup.MarginLayoutParams!);
field @Deprecated public float aspectRatio;
@@ -61,9 +61,9 @@
@Deprecated public static class PercentRelativeLayout.LayoutParams extends android.widget.RelativeLayout.LayoutParams implements androidx.percentlayout.widget.PercentLayoutHelper.PercentLayoutParams {
ctor @Deprecated public PercentRelativeLayout.LayoutParams(android.content.Context!, android.util.AttributeSet!);
- ctor @Deprecated public PercentRelativeLayout.LayoutParams(int, int);
ctor @Deprecated public PercentRelativeLayout.LayoutParams(android.view.ViewGroup.LayoutParams!);
ctor @Deprecated public PercentRelativeLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+ ctor @Deprecated public PercentRelativeLayout.LayoutParams(int, int);
method @Deprecated public androidx.percentlayout.widget.PercentLayoutHelper.PercentLayoutInfo! getPercentLayoutInfo();
}
diff --git a/percentlayout/percentlayout/build.gradle b/percentlayout/percentlayout/build.gradle
index a28d3b0..737f4d4 100644
--- a/percentlayout/percentlayout/build.gradle
+++ b/percentlayout/percentlayout/build.gradle
@@ -24,7 +24,7 @@
}
androidx {
- name = "Android Percent Support Library"
+ name = "Percent"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2015"
description = "Android Percent Support Library"
diff --git a/playground-common/androidx-shared.properties b/playground-common/androidx-shared.properties
index f223dc1..37e503a 100644
--- a/playground-common/androidx-shared.properties
+++ b/playground-common/androidx-shared.properties
@@ -46,6 +46,11 @@
# Generate versioned API files
androidx.writeVersionedApiFiles=true
+# Comma-delimited lists of project path prefixes which have been opted-out of or opted-in to the
+# Suppress Compatibility migration. Opt-out is matched first.
+androidx.suppress.compatibility.optout=activity/activity/,appsearch/appsearch-builtin-types/,appsearch/appsearch/,compose/,core/core/,core/core-telecom/,credentials/credentials/,navigation/navigation-ui/,wear/watchface/watchface-client/,window/window-java/,window/window/,graphics/graphics-path/,appsearch/appsearch-play/,work/work-datatransfer/,wear/compose/compose-foundation/,wear/protolayout/protolayout-expression/,wear/protolayout/protolayout-material/,graphics/graphics-core/
+androidx.suppress.compatibility.optin=a,b,c,d,e,f,g
+
# Disable features we do not use
android.defaults.buildfeatures.aidl=false
android.defaults.buildfeatures.buildconfig=false
diff --git a/playground-common/playground.properties b/playground-common/playground.properties
index 68b1459..32e09d6 100644
--- a/playground-common/playground.properties
+++ b/playground-common/playground.properties
@@ -25,6 +25,6 @@
kotlin.code.style=official
# Disable docs
androidx.enableDocumentation=false
-androidx.playground.snapshotBuildId=10041883
-androidx.playground.metalavaBuildId=10074764
+androidx.playground.snapshotBuildId=10059712
+androidx.playground.metalavaBuildId=10097894
androidx.studio.type=playground
diff --git a/preference/preference-ktx/api/current.txt b/preference/preference-ktx/api/current.txt
index def3f84..ab2f69a 100644
--- a/preference/preference-ktx/api/current.txt
+++ b/preference/preference-ktx/api/current.txt
@@ -5,8 +5,8 @@
method public static operator boolean contains(androidx.preference.PreferenceGroup, androidx.preference.Preference preference);
method public static inline void forEach(androidx.preference.PreferenceGroup, kotlin.jvm.functions.Function1<? super androidx.preference.Preference,kotlin.Unit> action);
method public static inline void forEachIndexed(androidx.preference.PreferenceGroup, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super androidx.preference.Preference,kotlin.Unit> action);
- method public static inline operator <T extends androidx.preference.Preference> T? get(androidx.preference.PreferenceGroup, CharSequence key);
method public static operator androidx.preference.Preference get(androidx.preference.PreferenceGroup, int index);
+ method public static inline operator <T extends androidx.preference.Preference> T? get(androidx.preference.PreferenceGroup, CharSequence key);
method public static kotlin.sequences.Sequence<androidx.preference.Preference> getChildren(androidx.preference.PreferenceGroup);
method public static inline int getSize(androidx.preference.PreferenceGroup);
method public static inline boolean isEmpty(androidx.preference.PreferenceGroup);
diff --git a/preference/preference-ktx/api/public_plus_experimental_current.txt b/preference/preference-ktx/api/public_plus_experimental_current.txt
index def3f84..ab2f69a 100644
--- a/preference/preference-ktx/api/public_plus_experimental_current.txt
+++ b/preference/preference-ktx/api/public_plus_experimental_current.txt
@@ -5,8 +5,8 @@
method public static operator boolean contains(androidx.preference.PreferenceGroup, androidx.preference.Preference preference);
method public static inline void forEach(androidx.preference.PreferenceGroup, kotlin.jvm.functions.Function1<? super androidx.preference.Preference,kotlin.Unit> action);
method public static inline void forEachIndexed(androidx.preference.PreferenceGroup, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super androidx.preference.Preference,kotlin.Unit> action);
- method public static inline operator <T extends androidx.preference.Preference> T? get(androidx.preference.PreferenceGroup, CharSequence key);
method public static operator androidx.preference.Preference get(androidx.preference.PreferenceGroup, int index);
+ method public static inline operator <T extends androidx.preference.Preference> T? get(androidx.preference.PreferenceGroup, CharSequence key);
method public static kotlin.sequences.Sequence<androidx.preference.Preference> getChildren(androidx.preference.PreferenceGroup);
method public static inline int getSize(androidx.preference.PreferenceGroup);
method public static inline boolean isEmpty(androidx.preference.PreferenceGroup);
diff --git a/preference/preference-ktx/api/restricted_current.txt b/preference/preference-ktx/api/restricted_current.txt
index def3f84..ab2f69a 100644
--- a/preference/preference-ktx/api/restricted_current.txt
+++ b/preference/preference-ktx/api/restricted_current.txt
@@ -5,8 +5,8 @@
method public static operator boolean contains(androidx.preference.PreferenceGroup, androidx.preference.Preference preference);
method public static inline void forEach(androidx.preference.PreferenceGroup, kotlin.jvm.functions.Function1<? super androidx.preference.Preference,kotlin.Unit> action);
method public static inline void forEachIndexed(androidx.preference.PreferenceGroup, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super androidx.preference.Preference,kotlin.Unit> action);
- method public static inline operator <T extends androidx.preference.Preference> T? get(androidx.preference.PreferenceGroup, CharSequence key);
method public static operator androidx.preference.Preference get(androidx.preference.PreferenceGroup, int index);
+ method public static inline operator <T extends androidx.preference.Preference> T? get(androidx.preference.PreferenceGroup, CharSequence key);
method public static kotlin.sequences.Sequence<androidx.preference.Preference> getChildren(androidx.preference.PreferenceGroup);
method public static inline int getSize(androidx.preference.PreferenceGroup);
method public static inline boolean isEmpty(androidx.preference.PreferenceGroup);
diff --git a/preference/preference-ktx/build.gradle b/preference/preference-ktx/build.gradle
index ebef733..e6e8c4f 100644
--- a/preference/preference-ktx/build.gradle
+++ b/preference/preference-ktx/build.gradle
@@ -43,7 +43,7 @@
}
androidx {
- name = "Android Preferences KTX"
+ name = "Preferences KTX"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "Kotlin extensions for preferences"
diff --git a/preference/preference/api/current.txt b/preference/preference/api/current.txt
index ee92871..dfbcf3b 100644
--- a/preference/preference/api/current.txt
+++ b/preference/preference/api/current.txt
@@ -2,17 +2,17 @@
package androidx.preference {
public class CheckBoxPreference extends androidx.preference.TwoStatePreference {
+ ctor public CheckBoxPreference(android.content.Context);
+ ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet?);
ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet?, int);
ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet?);
- ctor public CheckBoxPreference(android.content.Context);
}
public abstract class DialogPreference extends androidx.preference.Preference {
- ctor public DialogPreference(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public DialogPreference(android.content.Context, android.util.AttributeSet?, int);
- ctor public DialogPreference(android.content.Context, android.util.AttributeSet?);
ctor public DialogPreference(android.content.Context);
+ ctor public DialogPreference(android.content.Context, android.util.AttributeSet?);
+ ctor public DialogPreference(android.content.Context, android.util.AttributeSet?, int);
+ ctor public DialogPreference(android.content.Context, android.util.AttributeSet?, int, int);
method public android.graphics.drawable.Drawable? getDialogIcon();
method public int getDialogLayoutResource();
method public CharSequence? getDialogMessage();
@@ -22,14 +22,14 @@
method public void setDialogIcon(android.graphics.drawable.Drawable?);
method public void setDialogIcon(int);
method public void setDialogLayoutResource(int);
- method public void setDialogMessage(CharSequence?);
method public void setDialogMessage(int);
- method public void setDialogTitle(CharSequence?);
+ method public void setDialogMessage(CharSequence?);
method public void setDialogTitle(int);
- method public void setNegativeButtonText(CharSequence?);
+ method public void setDialogTitle(CharSequence?);
method public void setNegativeButtonText(int);
- method public void setPositiveButtonText(CharSequence?);
+ method public void setNegativeButtonText(CharSequence?);
method public void setPositiveButtonText(int);
+ method public void setPositiveButtonText(CharSequence?);
}
public static interface DialogPreference.TargetFragment {
@@ -45,10 +45,10 @@
}
public class EditTextPreference extends androidx.preference.DialogPreference {
- ctor public EditTextPreference(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public EditTextPreference(android.content.Context, android.util.AttributeSet?, int);
- ctor public EditTextPreference(android.content.Context, android.util.AttributeSet?);
ctor public EditTextPreference(android.content.Context);
+ ctor public EditTextPreference(android.content.Context, android.util.AttributeSet?);
+ ctor public EditTextPreference(android.content.Context, android.util.AttributeSet?, int);
+ ctor public EditTextPreference(android.content.Context, android.util.AttributeSet?, int, int);
method public String? getText();
method public void setOnBindEditTextListener(androidx.preference.EditTextPreference.OnBindEditTextListener?);
method public void setText(String?);
@@ -77,19 +77,19 @@
}
public class ListPreference extends androidx.preference.DialogPreference {
- ctor public ListPreference(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public ListPreference(android.content.Context, android.util.AttributeSet?, int);
- ctor public ListPreference(android.content.Context, android.util.AttributeSet?);
ctor public ListPreference(android.content.Context);
+ ctor public ListPreference(android.content.Context, android.util.AttributeSet?);
+ ctor public ListPreference(android.content.Context, android.util.AttributeSet?, int);
+ ctor public ListPreference(android.content.Context, android.util.AttributeSet?, int, int);
method public int findIndexOfValue(String!);
method public CharSequence![]! getEntries();
method public CharSequence? getEntry();
method public CharSequence![]! getEntryValues();
method public String! getValue();
- method public void setEntries(CharSequence![]!);
method public void setEntries(@ArrayRes int);
- method public void setEntryValues(CharSequence![]!);
+ method public void setEntries(CharSequence![]!);
method public void setEntryValues(@ArrayRes int);
+ method public void setEntryValues(CharSequence![]!);
method public void setValue(String!);
method public void setValueIndex(int);
}
@@ -113,19 +113,19 @@
}
public class MultiSelectListPreference extends androidx.preference.DialogPreference {
- ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet?, int);
- ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet?);
ctor public MultiSelectListPreference(android.content.Context);
+ ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet?);
+ ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet?, int);
+ ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet?, int, int);
method public int findIndexOfValue(String!);
method public CharSequence![]! getEntries();
method public CharSequence![]! getEntryValues();
method protected boolean[]! getSelectedItems();
method public java.util.Set<java.lang.String!>! getValues();
- method public void setEntries(CharSequence![]!);
method public void setEntries(@ArrayRes int);
- method public void setEntryValues(CharSequence![]!);
+ method public void setEntries(CharSequence![]!);
method public void setEntryValues(@ArrayRes int);
+ method public void setEntryValues(CharSequence![]!);
method public void setValues(java.util.Set<java.lang.String!>!);
}
@@ -143,10 +143,10 @@
}
public class Preference implements java.lang.Comparable<androidx.preference.Preference> {
- ctor public Preference(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public Preference(android.content.Context, android.util.AttributeSet?, int);
- ctor public Preference(android.content.Context, android.util.AttributeSet?);
ctor public Preference(android.content.Context);
+ ctor public Preference(android.content.Context, android.util.AttributeSet?);
+ ctor public Preference(android.content.Context, android.util.AttributeSet?, int);
+ ctor public Preference(android.content.Context, android.util.AttributeSet?, int, int);
method public boolean callChangeListener(Object!);
method public int compareTo(androidx.preference.Preference);
method protected <T extends androidx.preference.Preference> T? findPreferenceInHierarchy(String);
@@ -230,11 +230,11 @@
method public void setSelectable(boolean);
method public void setShouldDisableView(boolean);
method public void setSingleLineTitle(boolean);
- method public void setSummary(CharSequence?);
method public void setSummary(int);
+ method public void setSummary(CharSequence?);
method public final void setSummaryProvider(androidx.preference.Preference.SummaryProvider?);
- method public void setTitle(CharSequence?);
method public void setTitle(int);
+ method public void setTitle(CharSequence?);
method public void setViewId(int);
method public final void setVisible(boolean);
method public void setWidgetLayoutResource(int);
@@ -262,10 +262,10 @@
}
public class PreferenceCategory extends androidx.preference.PreferenceGroup {
- ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet?, int);
- ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet?);
ctor public PreferenceCategory(android.content.Context);
+ ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet?);
+ ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet?, int);
+ ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet?, int, int);
}
public abstract class PreferenceDataStore {
@@ -331,8 +331,8 @@
method @Deprecated public void onStart();
method @Deprecated public void onStop();
method @Deprecated public void onViewCreated(android.view.View, android.os.Bundle?);
- method @Deprecated public void scrollToPreference(String);
method @Deprecated public void scrollToPreference(androidx.preference.Preference);
+ method @Deprecated public void scrollToPreference(String);
method @Deprecated public void setDivider(android.graphics.drawable.Drawable?);
method @Deprecated public void setDividerHeight(int);
method @Deprecated public void setPreferenceScreen(androidx.preference.PreferenceScreen!);
@@ -366,8 +366,8 @@
method public void onDisplayPreferenceDialog(androidx.preference.Preference);
method public void onNavigateToScreen(androidx.preference.PreferenceScreen);
method public boolean onPreferenceTreeClick(androidx.preference.Preference);
- method public void scrollToPreference(String);
method public void scrollToPreference(androidx.preference.Preference);
+ method public void scrollToPreference(String);
method public void setDivider(android.graphics.drawable.Drawable?);
method public void setDividerHeight(int);
method public void setPreferenceScreen(androidx.preference.PreferenceScreen!);
@@ -388,9 +388,9 @@
}
public abstract class PreferenceGroup extends androidx.preference.Preference {
- ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet?, int);
ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet?);
+ ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet?, int);
+ ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet?, int, int);
method public void addItemFromInflater(androidx.preference.Preference);
method public boolean addPreference(androidx.preference.Preference);
method protected void dispatchRestoreInstanceState(android.os.Bundle);
@@ -410,8 +410,8 @@
}
public static interface PreferenceGroup.PreferencePositionCallback {
- method public int getPreferenceAdapterPosition(String);
method public int getPreferenceAdapterPosition(androidx.preference.Preference);
+ method public int getPreferenceAdapterPosition(String);
}
public abstract class PreferenceHeaderFragmentCompat extends androidx.fragment.app.Fragment implements androidx.preference.PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
@@ -493,10 +493,10 @@
}
public class SeekBarPreference extends androidx.preference.Preference {
- ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet?, int);
- ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet?);
ctor public SeekBarPreference(android.content.Context);
+ ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet?);
+ ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet?, int);
+ ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet?, int, int);
method public int getMax();
method public int getMin();
method public final int getSeekBarIncrement();
@@ -514,46 +514,46 @@
}
public class SwitchPreference extends androidx.preference.TwoStatePreference {
- ctor public SwitchPreference(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public SwitchPreference(android.content.Context, android.util.AttributeSet?, int);
- ctor public SwitchPreference(android.content.Context, android.util.AttributeSet?);
ctor public SwitchPreference(android.content.Context);
+ ctor public SwitchPreference(android.content.Context, android.util.AttributeSet?);
+ ctor public SwitchPreference(android.content.Context, android.util.AttributeSet?, int);
+ ctor public SwitchPreference(android.content.Context, android.util.AttributeSet?, int, int);
method public CharSequence? getSwitchTextOff();
method public CharSequence? getSwitchTextOn();
- method public void setSwitchTextOff(CharSequence?);
method public void setSwitchTextOff(int);
- method public void setSwitchTextOn(CharSequence?);
+ method public void setSwitchTextOff(CharSequence?);
method public void setSwitchTextOn(int);
+ method public void setSwitchTextOn(CharSequence?);
}
public class SwitchPreferenceCompat extends androidx.preference.TwoStatePreference {
- ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet?, int);
- ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet?);
ctor public SwitchPreferenceCompat(android.content.Context);
+ ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet?);
+ ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet?, int);
+ ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet?, int, int);
method public CharSequence? getSwitchTextOff();
method public CharSequence? getSwitchTextOn();
- method public void setSwitchTextOff(CharSequence?);
method public void setSwitchTextOff(int);
- method public void setSwitchTextOn(CharSequence?);
+ method public void setSwitchTextOff(CharSequence?);
method public void setSwitchTextOn(int);
+ method public void setSwitchTextOn(CharSequence?);
}
public abstract class TwoStatePreference extends androidx.preference.Preference {
- ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet?, int);
- ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet?);
ctor public TwoStatePreference(android.content.Context);
+ ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet?);
+ ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet?, int);
+ ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet?, int, int);
method public boolean getDisableDependentsState();
method public CharSequence? getSummaryOff();
method public CharSequence? getSummaryOn();
method public boolean isChecked();
method public void setChecked(boolean);
method public void setDisableDependentsState(boolean);
- method public void setSummaryOff(CharSequence?);
method public void setSummaryOff(int);
- method public void setSummaryOn(CharSequence?);
+ method public void setSummaryOff(CharSequence?);
method public void setSummaryOn(int);
+ method public void setSummaryOn(CharSequence?);
method protected void syncSummaryView(androidx.preference.PreferenceViewHolder);
field protected boolean mChecked;
}
diff --git a/preference/preference/api/public_plus_experimental_current.txt b/preference/preference/api/public_plus_experimental_current.txt
index ee92871..dfbcf3b 100644
--- a/preference/preference/api/public_plus_experimental_current.txt
+++ b/preference/preference/api/public_plus_experimental_current.txt
@@ -2,17 +2,17 @@
package androidx.preference {
public class CheckBoxPreference extends androidx.preference.TwoStatePreference {
+ ctor public CheckBoxPreference(android.content.Context);
+ ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet?);
ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet?, int);
ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet?);
- ctor public CheckBoxPreference(android.content.Context);
}
public abstract class DialogPreference extends androidx.preference.Preference {
- ctor public DialogPreference(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public DialogPreference(android.content.Context, android.util.AttributeSet?, int);
- ctor public DialogPreference(android.content.Context, android.util.AttributeSet?);
ctor public DialogPreference(android.content.Context);
+ ctor public DialogPreference(android.content.Context, android.util.AttributeSet?);
+ ctor public DialogPreference(android.content.Context, android.util.AttributeSet?, int);
+ ctor public DialogPreference(android.content.Context, android.util.AttributeSet?, int, int);
method public android.graphics.drawable.Drawable? getDialogIcon();
method public int getDialogLayoutResource();
method public CharSequence? getDialogMessage();
@@ -22,14 +22,14 @@
method public void setDialogIcon(android.graphics.drawable.Drawable?);
method public void setDialogIcon(int);
method public void setDialogLayoutResource(int);
- method public void setDialogMessage(CharSequence?);
method public void setDialogMessage(int);
- method public void setDialogTitle(CharSequence?);
+ method public void setDialogMessage(CharSequence?);
method public void setDialogTitle(int);
- method public void setNegativeButtonText(CharSequence?);
+ method public void setDialogTitle(CharSequence?);
method public void setNegativeButtonText(int);
- method public void setPositiveButtonText(CharSequence?);
+ method public void setNegativeButtonText(CharSequence?);
method public void setPositiveButtonText(int);
+ method public void setPositiveButtonText(CharSequence?);
}
public static interface DialogPreference.TargetFragment {
@@ -45,10 +45,10 @@
}
public class EditTextPreference extends androidx.preference.DialogPreference {
- ctor public EditTextPreference(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public EditTextPreference(android.content.Context, android.util.AttributeSet?, int);
- ctor public EditTextPreference(android.content.Context, android.util.AttributeSet?);
ctor public EditTextPreference(android.content.Context);
+ ctor public EditTextPreference(android.content.Context, android.util.AttributeSet?);
+ ctor public EditTextPreference(android.content.Context, android.util.AttributeSet?, int);
+ ctor public EditTextPreference(android.content.Context, android.util.AttributeSet?, int, int);
method public String? getText();
method public void setOnBindEditTextListener(androidx.preference.EditTextPreference.OnBindEditTextListener?);
method public void setText(String?);
@@ -77,19 +77,19 @@
}
public class ListPreference extends androidx.preference.DialogPreference {
- ctor public ListPreference(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public ListPreference(android.content.Context, android.util.AttributeSet?, int);
- ctor public ListPreference(android.content.Context, android.util.AttributeSet?);
ctor public ListPreference(android.content.Context);
+ ctor public ListPreference(android.content.Context, android.util.AttributeSet?);
+ ctor public ListPreference(android.content.Context, android.util.AttributeSet?, int);
+ ctor public ListPreference(android.content.Context, android.util.AttributeSet?, int, int);
method public int findIndexOfValue(String!);
method public CharSequence![]! getEntries();
method public CharSequence? getEntry();
method public CharSequence![]! getEntryValues();
method public String! getValue();
- method public void setEntries(CharSequence![]!);
method public void setEntries(@ArrayRes int);
- method public void setEntryValues(CharSequence![]!);
+ method public void setEntries(CharSequence![]!);
method public void setEntryValues(@ArrayRes int);
+ method public void setEntryValues(CharSequence![]!);
method public void setValue(String!);
method public void setValueIndex(int);
}
@@ -113,19 +113,19 @@
}
public class MultiSelectListPreference extends androidx.preference.DialogPreference {
- ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet?, int);
- ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet?);
ctor public MultiSelectListPreference(android.content.Context);
+ ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet?);
+ ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet?, int);
+ ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet?, int, int);
method public int findIndexOfValue(String!);
method public CharSequence![]! getEntries();
method public CharSequence![]! getEntryValues();
method protected boolean[]! getSelectedItems();
method public java.util.Set<java.lang.String!>! getValues();
- method public void setEntries(CharSequence![]!);
method public void setEntries(@ArrayRes int);
- method public void setEntryValues(CharSequence![]!);
+ method public void setEntries(CharSequence![]!);
method public void setEntryValues(@ArrayRes int);
+ method public void setEntryValues(CharSequence![]!);
method public void setValues(java.util.Set<java.lang.String!>!);
}
@@ -143,10 +143,10 @@
}
public class Preference implements java.lang.Comparable<androidx.preference.Preference> {
- ctor public Preference(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public Preference(android.content.Context, android.util.AttributeSet?, int);
- ctor public Preference(android.content.Context, android.util.AttributeSet?);
ctor public Preference(android.content.Context);
+ ctor public Preference(android.content.Context, android.util.AttributeSet?);
+ ctor public Preference(android.content.Context, android.util.AttributeSet?, int);
+ ctor public Preference(android.content.Context, android.util.AttributeSet?, int, int);
method public boolean callChangeListener(Object!);
method public int compareTo(androidx.preference.Preference);
method protected <T extends androidx.preference.Preference> T? findPreferenceInHierarchy(String);
@@ -230,11 +230,11 @@
method public void setSelectable(boolean);
method public void setShouldDisableView(boolean);
method public void setSingleLineTitle(boolean);
- method public void setSummary(CharSequence?);
method public void setSummary(int);
+ method public void setSummary(CharSequence?);
method public final void setSummaryProvider(androidx.preference.Preference.SummaryProvider?);
- method public void setTitle(CharSequence?);
method public void setTitle(int);
+ method public void setTitle(CharSequence?);
method public void setViewId(int);
method public final void setVisible(boolean);
method public void setWidgetLayoutResource(int);
@@ -262,10 +262,10 @@
}
public class PreferenceCategory extends androidx.preference.PreferenceGroup {
- ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet?, int);
- ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet?);
ctor public PreferenceCategory(android.content.Context);
+ ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet?);
+ ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet?, int);
+ ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet?, int, int);
}
public abstract class PreferenceDataStore {
@@ -331,8 +331,8 @@
method @Deprecated public void onStart();
method @Deprecated public void onStop();
method @Deprecated public void onViewCreated(android.view.View, android.os.Bundle?);
- method @Deprecated public void scrollToPreference(String);
method @Deprecated public void scrollToPreference(androidx.preference.Preference);
+ method @Deprecated public void scrollToPreference(String);
method @Deprecated public void setDivider(android.graphics.drawable.Drawable?);
method @Deprecated public void setDividerHeight(int);
method @Deprecated public void setPreferenceScreen(androidx.preference.PreferenceScreen!);
@@ -366,8 +366,8 @@
method public void onDisplayPreferenceDialog(androidx.preference.Preference);
method public void onNavigateToScreen(androidx.preference.PreferenceScreen);
method public boolean onPreferenceTreeClick(androidx.preference.Preference);
- method public void scrollToPreference(String);
method public void scrollToPreference(androidx.preference.Preference);
+ method public void scrollToPreference(String);
method public void setDivider(android.graphics.drawable.Drawable?);
method public void setDividerHeight(int);
method public void setPreferenceScreen(androidx.preference.PreferenceScreen!);
@@ -388,9 +388,9 @@
}
public abstract class PreferenceGroup extends androidx.preference.Preference {
- ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet?, int);
ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet?);
+ ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet?, int);
+ ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet?, int, int);
method public void addItemFromInflater(androidx.preference.Preference);
method public boolean addPreference(androidx.preference.Preference);
method protected void dispatchRestoreInstanceState(android.os.Bundle);
@@ -410,8 +410,8 @@
}
public static interface PreferenceGroup.PreferencePositionCallback {
- method public int getPreferenceAdapterPosition(String);
method public int getPreferenceAdapterPosition(androidx.preference.Preference);
+ method public int getPreferenceAdapterPosition(String);
}
public abstract class PreferenceHeaderFragmentCompat extends androidx.fragment.app.Fragment implements androidx.preference.PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
@@ -493,10 +493,10 @@
}
public class SeekBarPreference extends androidx.preference.Preference {
- ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet?, int);
- ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet?);
ctor public SeekBarPreference(android.content.Context);
+ ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet?);
+ ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet?, int);
+ ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet?, int, int);
method public int getMax();
method public int getMin();
method public final int getSeekBarIncrement();
@@ -514,46 +514,46 @@
}
public class SwitchPreference extends androidx.preference.TwoStatePreference {
- ctor public SwitchPreference(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public SwitchPreference(android.content.Context, android.util.AttributeSet?, int);
- ctor public SwitchPreference(android.content.Context, android.util.AttributeSet?);
ctor public SwitchPreference(android.content.Context);
+ ctor public SwitchPreference(android.content.Context, android.util.AttributeSet?);
+ ctor public SwitchPreference(android.content.Context, android.util.AttributeSet?, int);
+ ctor public SwitchPreference(android.content.Context, android.util.AttributeSet?, int, int);
method public CharSequence? getSwitchTextOff();
method public CharSequence? getSwitchTextOn();
- method public void setSwitchTextOff(CharSequence?);
method public void setSwitchTextOff(int);
- method public void setSwitchTextOn(CharSequence?);
+ method public void setSwitchTextOff(CharSequence?);
method public void setSwitchTextOn(int);
+ method public void setSwitchTextOn(CharSequence?);
}
public class SwitchPreferenceCompat extends androidx.preference.TwoStatePreference {
- ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet?, int);
- ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet?);
ctor public SwitchPreferenceCompat(android.content.Context);
+ ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet?);
+ ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet?, int);
+ ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet?, int, int);
method public CharSequence? getSwitchTextOff();
method public CharSequence? getSwitchTextOn();
- method public void setSwitchTextOff(CharSequence?);
method public void setSwitchTextOff(int);
- method public void setSwitchTextOn(CharSequence?);
+ method public void setSwitchTextOff(CharSequence?);
method public void setSwitchTextOn(int);
+ method public void setSwitchTextOn(CharSequence?);
}
public abstract class TwoStatePreference extends androidx.preference.Preference {
- ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet?, int);
- ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet?);
ctor public TwoStatePreference(android.content.Context);
+ ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet?);
+ ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet?, int);
+ ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet?, int, int);
method public boolean getDisableDependentsState();
method public CharSequence? getSummaryOff();
method public CharSequence? getSummaryOn();
method public boolean isChecked();
method public void setChecked(boolean);
method public void setDisableDependentsState(boolean);
- method public void setSummaryOff(CharSequence?);
method public void setSummaryOff(int);
- method public void setSummaryOn(CharSequence?);
+ method public void setSummaryOff(CharSequence?);
method public void setSummaryOn(int);
+ method public void setSummaryOn(CharSequence?);
method protected void syncSummaryView(androidx.preference.PreferenceViewHolder);
field protected boolean mChecked;
}
diff --git a/preference/preference/api/restricted_current.txt b/preference/preference/api/restricted_current.txt
index 6b4f873..6ef3edf 100644
--- a/preference/preference/api/restricted_current.txt
+++ b/preference/preference/api/restricted_current.txt
@@ -2,17 +2,17 @@
package androidx.preference {
public class CheckBoxPreference extends androidx.preference.TwoStatePreference {
+ ctor public CheckBoxPreference(android.content.Context);
+ ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet?);
ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet?, int);
ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet?);
- ctor public CheckBoxPreference(android.content.Context);
}
public abstract class DialogPreference extends androidx.preference.Preference {
- ctor public DialogPreference(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public DialogPreference(android.content.Context, android.util.AttributeSet?, int);
- ctor public DialogPreference(android.content.Context, android.util.AttributeSet?);
ctor public DialogPreference(android.content.Context);
+ ctor public DialogPreference(android.content.Context, android.util.AttributeSet?);
+ ctor public DialogPreference(android.content.Context, android.util.AttributeSet?, int);
+ ctor public DialogPreference(android.content.Context, android.util.AttributeSet?, int, int);
method public android.graphics.drawable.Drawable? getDialogIcon();
method public int getDialogLayoutResource();
method public CharSequence? getDialogMessage();
@@ -22,14 +22,14 @@
method public void setDialogIcon(android.graphics.drawable.Drawable?);
method public void setDialogIcon(int);
method public void setDialogLayoutResource(int);
- method public void setDialogMessage(CharSequence?);
method public void setDialogMessage(int);
- method public void setDialogTitle(CharSequence?);
+ method public void setDialogMessage(CharSequence?);
method public void setDialogTitle(int);
- method public void setNegativeButtonText(CharSequence?);
+ method public void setDialogTitle(CharSequence?);
method public void setNegativeButtonText(int);
- method public void setPositiveButtonText(CharSequence?);
+ method public void setNegativeButtonText(CharSequence?);
method public void setPositiveButtonText(int);
+ method public void setPositiveButtonText(CharSequence?);
}
public static interface DialogPreference.TargetFragment {
@@ -45,10 +45,10 @@
}
public class EditTextPreference extends androidx.preference.DialogPreference {
- ctor public EditTextPreference(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public EditTextPreference(android.content.Context, android.util.AttributeSet?, int);
- ctor public EditTextPreference(android.content.Context, android.util.AttributeSet?);
ctor public EditTextPreference(android.content.Context);
+ ctor public EditTextPreference(android.content.Context, android.util.AttributeSet?);
+ ctor public EditTextPreference(android.content.Context, android.util.AttributeSet?, int);
+ ctor public EditTextPreference(android.content.Context, android.util.AttributeSet?, int, int);
method public String? getText();
method public void setOnBindEditTextListener(androidx.preference.EditTextPreference.OnBindEditTextListener?);
method public void setText(String?);
@@ -77,19 +77,19 @@
}
public class ListPreference extends androidx.preference.DialogPreference {
- ctor public ListPreference(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public ListPreference(android.content.Context, android.util.AttributeSet?, int);
- ctor public ListPreference(android.content.Context, android.util.AttributeSet?);
ctor public ListPreference(android.content.Context);
+ ctor public ListPreference(android.content.Context, android.util.AttributeSet?);
+ ctor public ListPreference(android.content.Context, android.util.AttributeSet?, int);
+ ctor public ListPreference(android.content.Context, android.util.AttributeSet?, int, int);
method public int findIndexOfValue(String!);
method public CharSequence![]! getEntries();
method public CharSequence? getEntry();
method public CharSequence![]! getEntryValues();
method public String! getValue();
- method public void setEntries(CharSequence![]!);
method public void setEntries(@ArrayRes int);
- method public void setEntryValues(CharSequence![]!);
+ method public void setEntries(CharSequence![]!);
method public void setEntryValues(@ArrayRes int);
+ method public void setEntryValues(CharSequence![]!);
method public void setValue(String!);
method public void setValueIndex(int);
}
@@ -113,19 +113,19 @@
}
public class MultiSelectListPreference extends androidx.preference.DialogPreference {
- ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet?, int);
- ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet?);
ctor public MultiSelectListPreference(android.content.Context);
+ ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet?);
+ ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet?, int);
+ ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet?, int, int);
method public int findIndexOfValue(String!);
method public CharSequence![]! getEntries();
method public CharSequence![]! getEntryValues();
method protected boolean[]! getSelectedItems();
method public java.util.Set<java.lang.String!>! getValues();
- method public void setEntries(CharSequence![]!);
method public void setEntries(@ArrayRes int);
- method public void setEntryValues(CharSequence![]!);
+ method public void setEntries(CharSequence![]!);
method public void setEntryValues(@ArrayRes int);
+ method public void setEntryValues(CharSequence![]!);
method public void setValues(java.util.Set<java.lang.String!>!);
}
@@ -143,10 +143,10 @@
}
public class Preference implements java.lang.Comparable<androidx.preference.Preference> {
- ctor public Preference(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public Preference(android.content.Context, android.util.AttributeSet?, int);
- ctor public Preference(android.content.Context, android.util.AttributeSet?);
ctor public Preference(android.content.Context);
+ ctor public Preference(android.content.Context, android.util.AttributeSet?);
+ ctor public Preference(android.content.Context, android.util.AttributeSet?, int);
+ ctor public Preference(android.content.Context, android.util.AttributeSet?, int, int);
method public boolean callChangeListener(Object!);
method public int compareTo(androidx.preference.Preference);
method protected <T extends androidx.preference.Preference> T? findPreferenceInHierarchy(String);
@@ -204,8 +204,8 @@
method @Deprecated protected void onSetInitialValue(boolean, Object!);
method protected void onSetInitialValue(Object?);
method public android.os.Bundle? peekExtras();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected void performClick(android.view.View);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void performClick();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected void performClick(android.view.View);
method protected boolean persistBoolean(boolean);
method protected boolean persistFloat(float);
method protected boolean persistInt(int);
@@ -233,11 +233,11 @@
method public void setSelectable(boolean);
method public void setShouldDisableView(boolean);
method public void setSingleLineTitle(boolean);
- method public void setSummary(CharSequence?);
method public void setSummary(int);
+ method public void setSummary(CharSequence?);
method public final void setSummaryProvider(androidx.preference.Preference.SummaryProvider?);
- method public void setTitle(CharSequence?);
method public void setTitle(int);
+ method public void setTitle(CharSequence?);
method public void setViewId(int);
method public final void setVisible(boolean);
method public void setWidgetLayoutResource(int);
@@ -265,10 +265,10 @@
}
public class PreferenceCategory extends androidx.preference.PreferenceGroup {
- ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet?, int);
- ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet?);
ctor public PreferenceCategory(android.content.Context);
+ ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet?);
+ ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet?, int);
+ ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet?, int, int);
}
public abstract class PreferenceDataStore {
@@ -334,8 +334,8 @@
method @Deprecated public void onStart();
method @Deprecated public void onStop();
method @Deprecated public void onViewCreated(android.view.View, android.os.Bundle?);
- method @Deprecated public void scrollToPreference(String);
method @Deprecated public void scrollToPreference(androidx.preference.Preference);
+ method @Deprecated public void scrollToPreference(String);
method @Deprecated public void setDivider(android.graphics.drawable.Drawable?);
method @Deprecated public void setDividerHeight(int);
method @Deprecated public void setPreferenceScreen(androidx.preference.PreferenceScreen!);
@@ -372,8 +372,8 @@
method public void onNavigateToScreen(androidx.preference.PreferenceScreen);
method public boolean onPreferenceTreeClick(androidx.preference.Preference);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected void onUnbindPreferences();
- method public void scrollToPreference(String);
method public void scrollToPreference(androidx.preference.Preference);
+ method public void scrollToPreference(String);
method public void setDivider(android.graphics.drawable.Drawable?);
method public void setDividerHeight(int);
method public void setPreferenceScreen(androidx.preference.PreferenceScreen!);
@@ -394,9 +394,9 @@
}
public abstract class PreferenceGroup extends androidx.preference.Preference {
- ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet?, int);
ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet?);
+ ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet?, int);
+ ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet?, int, int);
method public void addItemFromInflater(androidx.preference.Preference);
method public boolean addPreference(androidx.preference.Preference);
method protected void dispatchRestoreInstanceState(android.os.Bundle);
@@ -422,16 +422,16 @@
}
public static interface PreferenceGroup.PreferencePositionCallback {
- method public int getPreferenceAdapterPosition(String);
method public int getPreferenceAdapterPosition(androidx.preference.Preference);
+ method public int getPreferenceAdapterPosition(String);
}
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class PreferenceGroupAdapter extends androidx.recyclerview.widget.RecyclerView.Adapter<androidx.preference.PreferenceViewHolder> implements androidx.preference.PreferenceGroup.PreferencePositionCallback {
ctor public PreferenceGroupAdapter(androidx.preference.PreferenceGroup);
method public androidx.preference.Preference? getItem(int);
method public int getItemCount();
- method public int getPreferenceAdapterPosition(String);
method public int getPreferenceAdapterPosition(androidx.preference.Preference);
+ method public int getPreferenceAdapterPosition(String);
method public void onBindViewHolder(androidx.preference.PreferenceViewHolder, int);
method public androidx.preference.PreferenceViewHolder onCreateViewHolder(android.view.ViewGroup, int);
method public void onPreferenceChange(androidx.preference.Preference);
@@ -525,10 +525,10 @@
}
public class SeekBarPreference extends androidx.preference.Preference {
- ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet?, int);
- ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet?);
ctor public SeekBarPreference(android.content.Context);
+ ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet?);
+ ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet?, int);
+ ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet?, int, int);
method public int getMax();
method public int getMin();
method public final int getSeekBarIncrement();
@@ -546,46 +546,46 @@
}
public class SwitchPreference extends androidx.preference.TwoStatePreference {
- ctor public SwitchPreference(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public SwitchPreference(android.content.Context, android.util.AttributeSet?, int);
- ctor public SwitchPreference(android.content.Context, android.util.AttributeSet?);
ctor public SwitchPreference(android.content.Context);
+ ctor public SwitchPreference(android.content.Context, android.util.AttributeSet?);
+ ctor public SwitchPreference(android.content.Context, android.util.AttributeSet?, int);
+ ctor public SwitchPreference(android.content.Context, android.util.AttributeSet?, int, int);
method public CharSequence? getSwitchTextOff();
method public CharSequence? getSwitchTextOn();
- method public void setSwitchTextOff(CharSequence?);
method public void setSwitchTextOff(int);
- method public void setSwitchTextOn(CharSequence?);
+ method public void setSwitchTextOff(CharSequence?);
method public void setSwitchTextOn(int);
+ method public void setSwitchTextOn(CharSequence?);
}
public class SwitchPreferenceCompat extends androidx.preference.TwoStatePreference {
- ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet?, int);
- ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet?);
ctor public SwitchPreferenceCompat(android.content.Context);
+ ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet?);
+ ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet?, int);
+ ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet?, int, int);
method public CharSequence? getSwitchTextOff();
method public CharSequence? getSwitchTextOn();
- method public void setSwitchTextOff(CharSequence?);
method public void setSwitchTextOff(int);
- method public void setSwitchTextOn(CharSequence?);
+ method public void setSwitchTextOff(CharSequence?);
method public void setSwitchTextOn(int);
+ method public void setSwitchTextOn(CharSequence?);
}
public abstract class TwoStatePreference extends androidx.preference.Preference {
- ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet?, int, int);
- ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet?, int);
- ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet?);
ctor public TwoStatePreference(android.content.Context);
+ ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet?);
+ ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet?, int);
+ ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet?, int, int);
method public boolean getDisableDependentsState();
method public CharSequence? getSummaryOff();
method public CharSequence? getSummaryOn();
method public boolean isChecked();
method public void setChecked(boolean);
method public void setDisableDependentsState(boolean);
- method public void setSummaryOff(CharSequence?);
method public void setSummaryOff(int);
- method public void setSummaryOn(CharSequence?);
+ method public void setSummaryOff(CharSequence?);
method public void setSummaryOn(int);
+ method public void setSummaryOn(CharSequence?);
method protected void syncSummaryView(androidx.preference.PreferenceViewHolder);
field protected boolean mChecked;
}
diff --git a/preference/preference/build.gradle b/preference/preference/build.gradle
index 366ccdc..0e7815d 100644
--- a/preference/preference/build.gradle
+++ b/preference/preference/build.gradle
@@ -64,7 +64,7 @@
}
androidx {
- name = "AndroidX Preference"
+ name = "Preference"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2015"
description = "AndroidX Preference"
diff --git a/preference/preference/src/androidTest/java/androidx/preference/tests/helpers/PreferenceTestHelperActivity.kt b/preference/preference/src/androidTest/java/androidx/preference/tests/helpers/PreferenceTestHelperActivity.kt
index 037659f..7f87518 100644
--- a/preference/preference/src/androidTest/java/androidx/preference/tests/helpers/PreferenceTestHelperActivity.kt
+++ b/preference/preference/src/androidTest/java/androidx/preference/tests/helpers/PreferenceTestHelperActivity.kt
@@ -17,7 +17,6 @@
package androidx.preference.tests.helpers
import android.os.Bundle
-
import androidx.annotation.LayoutRes
import androidx.appcompat.app.AppCompatActivity
import androidx.preference.PreferenceFragmentCompat
diff --git a/print/print/build.gradle b/print/print/build.gradle
index 3b8be7c..6e9dc83 100644
--- a/print/print/build.gradle
+++ b/print/print/build.gradle
@@ -10,7 +10,7 @@
}
androidx {
- name = "Android Support Library Print"
+ name = "Print"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later."
diff --git a/privacysandbox/ads/ads-adservices-java/api/1.0.0-beta05.txt b/privacysandbox/ads/ads-adservices-java/api/1.0.0-beta05.txt
new file mode 100644
index 0000000..26eea8b
--- /dev/null
+++ b/privacysandbox/ads/ads-adservices-java/api/1.0.0-beta05.txt
@@ -0,0 +1,92 @@
+// Signature format: 4.0
+package androidx.privacysandbox.ads.adservices.java.adid {
+
+ public abstract class AdIdManagerFutures {
+ method public static final androidx.privacysandbox.ads.adservices.java.adid.AdIdManagerFutures? from(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_AD_ID) public abstract com.google.common.util.concurrent.ListenableFuture<androidx.privacysandbox.ads.adservices.adid.AdId> getAdIdAsync();
+ field public static final androidx.privacysandbox.ads.adservices.java.adid.AdIdManagerFutures.Companion Companion;
+ }
+
+ public static final class AdIdManagerFutures.Companion {
+ method public androidx.privacysandbox.ads.adservices.java.adid.AdIdManagerFutures? from(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.java.adselection {
+
+ public abstract class AdSelectionManagerFutures {
+ method public static final androidx.privacysandbox.ads.adservices.java.adselection.AdSelectionManagerFutures? from(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> reportImpressionAsync(androidx.privacysandbox.ads.adservices.adselection.ReportImpressionRequest reportImpressionRequest);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract com.google.common.util.concurrent.ListenableFuture<androidx.privacysandbox.ads.adservices.adselection.AdSelectionOutcome> selectAdsAsync(androidx.privacysandbox.ads.adservices.adselection.AdSelectionConfig adSelectionConfig);
+ field public static final androidx.privacysandbox.ads.adservices.java.adselection.AdSelectionManagerFutures.Companion Companion;
+ }
+
+ public static final class AdSelectionManagerFutures.Companion {
+ method public androidx.privacysandbox.ads.adservices.java.adselection.AdSelectionManagerFutures? from(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.java.appsetid {
+
+ public abstract class AppSetIdManagerFutures {
+ method public static final androidx.privacysandbox.ads.adservices.java.appsetid.AppSetIdManagerFutures? from(android.content.Context context);
+ method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.privacysandbox.ads.adservices.appsetid.AppSetId> getAppSetIdAsync();
+ field public static final androidx.privacysandbox.ads.adservices.java.appsetid.AppSetIdManagerFutures.Companion Companion;
+ }
+
+ public static final class AppSetIdManagerFutures.Companion {
+ method public androidx.privacysandbox.ads.adservices.java.appsetid.AppSetIdManagerFutures? from(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.java.customaudience {
+
+ public abstract class CustomAudienceManagerFutures {
+ method public static final androidx.privacysandbox.ads.adservices.java.customaudience.CustomAudienceManagerFutures? from(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> joinCustomAudienceAsync(androidx.privacysandbox.ads.adservices.customaudience.JoinCustomAudienceRequest request);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> leaveCustomAudienceAsync(androidx.privacysandbox.ads.adservices.customaudience.LeaveCustomAudienceRequest request);
+ field public static final androidx.privacysandbox.ads.adservices.java.customaudience.CustomAudienceManagerFutures.Companion Companion;
+ }
+
+ public static final class CustomAudienceManagerFutures.Companion {
+ method public androidx.privacysandbox.ads.adservices.java.customaudience.CustomAudienceManagerFutures? from(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.java.measurement {
+
+ public abstract class MeasurementManagerFutures {
+ method public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> deleteRegistrationsAsync(androidx.privacysandbox.ads.adservices.measurement.DeletionRequest deletionRequest);
+ method public static final androidx.privacysandbox.ads.adservices.java.measurement.MeasurementManagerFutures? from(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract com.google.common.util.concurrent.ListenableFuture<java.lang.Integer> getMeasurementApiStatusAsync();
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> registerSourceAsync(android.net.Uri attributionSource, android.view.InputEvent? inputEvent);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> registerTriggerAsync(android.net.Uri trigger);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> registerWebSourceAsync(androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest request);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> registerWebTriggerAsync(androidx.privacysandbox.ads.adservices.measurement.WebTriggerRegistrationRequest request);
+ field public static final androidx.privacysandbox.ads.adservices.java.measurement.MeasurementManagerFutures.Companion Companion;
+ }
+
+ public static final class MeasurementManagerFutures.Companion {
+ method public androidx.privacysandbox.ads.adservices.java.measurement.MeasurementManagerFutures? from(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.java.topics {
+
+ public abstract class TopicsManagerFutures {
+ method public static final androidx.privacysandbox.ads.adservices.java.topics.TopicsManagerFutures? from(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_TOPICS) public abstract com.google.common.util.concurrent.ListenableFuture<androidx.privacysandbox.ads.adservices.topics.GetTopicsResponse> getTopicsAsync(androidx.privacysandbox.ads.adservices.topics.GetTopicsRequest request);
+ field public static final androidx.privacysandbox.ads.adservices.java.topics.TopicsManagerFutures.Companion Companion;
+ }
+
+ public static final class TopicsManagerFutures.Companion {
+ method public androidx.privacysandbox.ads.adservices.java.topics.TopicsManagerFutures? from(android.content.Context context);
+ }
+
+}
+
diff --git a/privacysandbox/ads/ads-adservices-java/api/public_plus_experimental_1.0.0-beta05.txt b/privacysandbox/ads/ads-adservices-java/api/public_plus_experimental_1.0.0-beta05.txt
new file mode 100644
index 0000000..26eea8b
--- /dev/null
+++ b/privacysandbox/ads/ads-adservices-java/api/public_plus_experimental_1.0.0-beta05.txt
@@ -0,0 +1,92 @@
+// Signature format: 4.0
+package androidx.privacysandbox.ads.adservices.java.adid {
+
+ public abstract class AdIdManagerFutures {
+ method public static final androidx.privacysandbox.ads.adservices.java.adid.AdIdManagerFutures? from(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_AD_ID) public abstract com.google.common.util.concurrent.ListenableFuture<androidx.privacysandbox.ads.adservices.adid.AdId> getAdIdAsync();
+ field public static final androidx.privacysandbox.ads.adservices.java.adid.AdIdManagerFutures.Companion Companion;
+ }
+
+ public static final class AdIdManagerFutures.Companion {
+ method public androidx.privacysandbox.ads.adservices.java.adid.AdIdManagerFutures? from(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.java.adselection {
+
+ public abstract class AdSelectionManagerFutures {
+ method public static final androidx.privacysandbox.ads.adservices.java.adselection.AdSelectionManagerFutures? from(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> reportImpressionAsync(androidx.privacysandbox.ads.adservices.adselection.ReportImpressionRequest reportImpressionRequest);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract com.google.common.util.concurrent.ListenableFuture<androidx.privacysandbox.ads.adservices.adselection.AdSelectionOutcome> selectAdsAsync(androidx.privacysandbox.ads.adservices.adselection.AdSelectionConfig adSelectionConfig);
+ field public static final androidx.privacysandbox.ads.adservices.java.adselection.AdSelectionManagerFutures.Companion Companion;
+ }
+
+ public static final class AdSelectionManagerFutures.Companion {
+ method public androidx.privacysandbox.ads.adservices.java.adselection.AdSelectionManagerFutures? from(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.java.appsetid {
+
+ public abstract class AppSetIdManagerFutures {
+ method public static final androidx.privacysandbox.ads.adservices.java.appsetid.AppSetIdManagerFutures? from(android.content.Context context);
+ method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.privacysandbox.ads.adservices.appsetid.AppSetId> getAppSetIdAsync();
+ field public static final androidx.privacysandbox.ads.adservices.java.appsetid.AppSetIdManagerFutures.Companion Companion;
+ }
+
+ public static final class AppSetIdManagerFutures.Companion {
+ method public androidx.privacysandbox.ads.adservices.java.appsetid.AppSetIdManagerFutures? from(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.java.customaudience {
+
+ public abstract class CustomAudienceManagerFutures {
+ method public static final androidx.privacysandbox.ads.adservices.java.customaudience.CustomAudienceManagerFutures? from(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> joinCustomAudienceAsync(androidx.privacysandbox.ads.adservices.customaudience.JoinCustomAudienceRequest request);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> leaveCustomAudienceAsync(androidx.privacysandbox.ads.adservices.customaudience.LeaveCustomAudienceRequest request);
+ field public static final androidx.privacysandbox.ads.adservices.java.customaudience.CustomAudienceManagerFutures.Companion Companion;
+ }
+
+ public static final class CustomAudienceManagerFutures.Companion {
+ method public androidx.privacysandbox.ads.adservices.java.customaudience.CustomAudienceManagerFutures? from(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.java.measurement {
+
+ public abstract class MeasurementManagerFutures {
+ method public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> deleteRegistrationsAsync(androidx.privacysandbox.ads.adservices.measurement.DeletionRequest deletionRequest);
+ method public static final androidx.privacysandbox.ads.adservices.java.measurement.MeasurementManagerFutures? from(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract com.google.common.util.concurrent.ListenableFuture<java.lang.Integer> getMeasurementApiStatusAsync();
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> registerSourceAsync(android.net.Uri attributionSource, android.view.InputEvent? inputEvent);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> registerTriggerAsync(android.net.Uri trigger);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> registerWebSourceAsync(androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest request);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> registerWebTriggerAsync(androidx.privacysandbox.ads.adservices.measurement.WebTriggerRegistrationRequest request);
+ field public static final androidx.privacysandbox.ads.adservices.java.measurement.MeasurementManagerFutures.Companion Companion;
+ }
+
+ public static final class MeasurementManagerFutures.Companion {
+ method public androidx.privacysandbox.ads.adservices.java.measurement.MeasurementManagerFutures? from(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.java.topics {
+
+ public abstract class TopicsManagerFutures {
+ method public static final androidx.privacysandbox.ads.adservices.java.topics.TopicsManagerFutures? from(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_TOPICS) public abstract com.google.common.util.concurrent.ListenableFuture<androidx.privacysandbox.ads.adservices.topics.GetTopicsResponse> getTopicsAsync(androidx.privacysandbox.ads.adservices.topics.GetTopicsRequest request);
+ field public static final androidx.privacysandbox.ads.adservices.java.topics.TopicsManagerFutures.Companion Companion;
+ }
+
+ public static final class TopicsManagerFutures.Companion {
+ method public androidx.privacysandbox.ads.adservices.java.topics.TopicsManagerFutures? from(android.content.Context context);
+ }
+
+}
+
diff --git a/privacysandbox/ads/ads-adservices-java/api/res-1.0.0-beta05.txt b/privacysandbox/ads/ads-adservices-java/api/res-1.0.0-beta05.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/privacysandbox/ads/ads-adservices-java/api/res-1.0.0-beta05.txt
diff --git a/privacysandbox/ads/ads-adservices-java/api/restricted_1.0.0-beta05.txt b/privacysandbox/ads/ads-adservices-java/api/restricted_1.0.0-beta05.txt
new file mode 100644
index 0000000..26eea8b
--- /dev/null
+++ b/privacysandbox/ads/ads-adservices-java/api/restricted_1.0.0-beta05.txt
@@ -0,0 +1,92 @@
+// Signature format: 4.0
+package androidx.privacysandbox.ads.adservices.java.adid {
+
+ public abstract class AdIdManagerFutures {
+ method public static final androidx.privacysandbox.ads.adservices.java.adid.AdIdManagerFutures? from(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_AD_ID) public abstract com.google.common.util.concurrent.ListenableFuture<androidx.privacysandbox.ads.adservices.adid.AdId> getAdIdAsync();
+ field public static final androidx.privacysandbox.ads.adservices.java.adid.AdIdManagerFutures.Companion Companion;
+ }
+
+ public static final class AdIdManagerFutures.Companion {
+ method public androidx.privacysandbox.ads.adservices.java.adid.AdIdManagerFutures? from(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.java.adselection {
+
+ public abstract class AdSelectionManagerFutures {
+ method public static final androidx.privacysandbox.ads.adservices.java.adselection.AdSelectionManagerFutures? from(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> reportImpressionAsync(androidx.privacysandbox.ads.adservices.adselection.ReportImpressionRequest reportImpressionRequest);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract com.google.common.util.concurrent.ListenableFuture<androidx.privacysandbox.ads.adservices.adselection.AdSelectionOutcome> selectAdsAsync(androidx.privacysandbox.ads.adservices.adselection.AdSelectionConfig adSelectionConfig);
+ field public static final androidx.privacysandbox.ads.adservices.java.adselection.AdSelectionManagerFutures.Companion Companion;
+ }
+
+ public static final class AdSelectionManagerFutures.Companion {
+ method public androidx.privacysandbox.ads.adservices.java.adselection.AdSelectionManagerFutures? from(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.java.appsetid {
+
+ public abstract class AppSetIdManagerFutures {
+ method public static final androidx.privacysandbox.ads.adservices.java.appsetid.AppSetIdManagerFutures? from(android.content.Context context);
+ method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.privacysandbox.ads.adservices.appsetid.AppSetId> getAppSetIdAsync();
+ field public static final androidx.privacysandbox.ads.adservices.java.appsetid.AppSetIdManagerFutures.Companion Companion;
+ }
+
+ public static final class AppSetIdManagerFutures.Companion {
+ method public androidx.privacysandbox.ads.adservices.java.appsetid.AppSetIdManagerFutures? from(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.java.customaudience {
+
+ public abstract class CustomAudienceManagerFutures {
+ method public static final androidx.privacysandbox.ads.adservices.java.customaudience.CustomAudienceManagerFutures? from(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> joinCustomAudienceAsync(androidx.privacysandbox.ads.adservices.customaudience.JoinCustomAudienceRequest request);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> leaveCustomAudienceAsync(androidx.privacysandbox.ads.adservices.customaudience.LeaveCustomAudienceRequest request);
+ field public static final androidx.privacysandbox.ads.adservices.java.customaudience.CustomAudienceManagerFutures.Companion Companion;
+ }
+
+ public static final class CustomAudienceManagerFutures.Companion {
+ method public androidx.privacysandbox.ads.adservices.java.customaudience.CustomAudienceManagerFutures? from(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.java.measurement {
+
+ public abstract class MeasurementManagerFutures {
+ method public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> deleteRegistrationsAsync(androidx.privacysandbox.ads.adservices.measurement.DeletionRequest deletionRequest);
+ method public static final androidx.privacysandbox.ads.adservices.java.measurement.MeasurementManagerFutures? from(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract com.google.common.util.concurrent.ListenableFuture<java.lang.Integer> getMeasurementApiStatusAsync();
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> registerSourceAsync(android.net.Uri attributionSource, android.view.InputEvent? inputEvent);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> registerTriggerAsync(android.net.Uri trigger);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> registerWebSourceAsync(androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest request);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> registerWebTriggerAsync(androidx.privacysandbox.ads.adservices.measurement.WebTriggerRegistrationRequest request);
+ field public static final androidx.privacysandbox.ads.adservices.java.measurement.MeasurementManagerFutures.Companion Companion;
+ }
+
+ public static final class MeasurementManagerFutures.Companion {
+ method public androidx.privacysandbox.ads.adservices.java.measurement.MeasurementManagerFutures? from(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.java.topics {
+
+ public abstract class TopicsManagerFutures {
+ method public static final androidx.privacysandbox.ads.adservices.java.topics.TopicsManagerFutures? from(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_TOPICS) public abstract com.google.common.util.concurrent.ListenableFuture<androidx.privacysandbox.ads.adservices.topics.GetTopicsResponse> getTopicsAsync(androidx.privacysandbox.ads.adservices.topics.GetTopicsRequest request);
+ field public static final androidx.privacysandbox.ads.adservices.java.topics.TopicsManagerFutures.Companion Companion;
+ }
+
+ public static final class TopicsManagerFutures.Companion {
+ method public androidx.privacysandbox.ads.adservices.java.topics.TopicsManagerFutures? from(android.content.Context context);
+ }
+
+}
+
diff --git a/privacysandbox/ads/ads-adservices-java/src/androidTest/java/androidx/privacysandbox/ads/adservices/java/adselection/AdSelectionManagerFuturesTest.kt b/privacysandbox/ads/ads-adservices-java/src/androidTest/java/androidx/privacysandbox/ads/adservices/java/adselection/AdSelectionManagerFuturesTest.kt
index ff87882..e0c2574 100644
--- a/privacysandbox/ads/ads-adservices-java/src/androidTest/java/androidx/privacysandbox/ads/adservices/java/adselection/AdSelectionManagerFuturesTest.kt
+++ b/privacysandbox/ads/ads-adservices-java/src/androidTest/java/androidx/privacysandbox/ads/adservices/java/adselection/AdSelectionManagerFuturesTest.kt
@@ -24,10 +24,10 @@
import androidx.privacysandbox.ads.adservices.adselection.AdSelectionConfig
import androidx.privacysandbox.ads.adservices.adselection.AdSelectionOutcome
import androidx.privacysandbox.ads.adservices.adselection.ReportImpressionRequest
-import androidx.test.core.app.ApplicationProvider
import androidx.privacysandbox.ads.adservices.common.AdSelectionSignals
import androidx.privacysandbox.ads.adservices.common.AdTechIdentifier
import androidx.privacysandbox.ads.adservices.java.adselection.AdSelectionManagerFutures.Companion.from
+import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
diff --git a/privacysandbox/ads/ads-adservices-java/src/androidTest/java/androidx/privacysandbox/ads/adservices/java/customaudience/CustomAudienceManagerFuturesTest.kt b/privacysandbox/ads/ads-adservices-java/src/androidTest/java/androidx/privacysandbox/ads/adservices/java/customaudience/CustomAudienceManagerFuturesTest.kt
index 1ebf7e7..d2f5802 100644
--- a/privacysandbox/ads/ads-adservices-java/src/androidTest/java/androidx/privacysandbox/ads/adservices/java/customaudience/CustomAudienceManagerFuturesTest.kt
+++ b/privacysandbox/ads/ads-adservices-java/src/androidTest/java/androidx/privacysandbox/ads/adservices/java/customaudience/CustomAudienceManagerFuturesTest.kt
@@ -26,10 +26,10 @@
import androidx.privacysandbox.ads.adservices.common.AdSelectionSignals
import androidx.privacysandbox.ads.adservices.common.AdTechIdentifier
import androidx.privacysandbox.ads.adservices.customaudience.CustomAudience
-import androidx.privacysandbox.ads.adservices.java.customaudience.CustomAudienceManagerFutures.Companion.from
import androidx.privacysandbox.ads.adservices.customaudience.JoinCustomAudienceRequest
import androidx.privacysandbox.ads.adservices.customaudience.LeaveCustomAudienceRequest
import androidx.privacysandbox.ads.adservices.customaudience.TrustedBiddingData
+import androidx.privacysandbox.ads.adservices.java.customaudience.CustomAudienceManagerFutures.Companion.from
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SdkSuppress
diff --git a/privacysandbox/ads/ads-adservices-java/src/main/java/androidx/privacysandbox/ads/adservices/java/adid/AdIdManagerFutures.kt b/privacysandbox/ads/ads-adservices-java/src/main/java/androidx/privacysandbox/ads/adservices/java/adid/AdIdManagerFutures.kt
index 8ffa244..860cccf 100644
--- a/privacysandbox/ads/ads-adservices-java/src/main/java/androidx/privacysandbox/ads/adservices/java/adid/AdIdManagerFutures.kt
+++ b/privacysandbox/ads/ads-adservices-java/src/main/java/androidx/privacysandbox/ads/adservices/java/adid/AdIdManagerFutures.kt
@@ -16,7 +16,6 @@
package androidx.privacysandbox.ads.adservices.java.adid
-import androidx.privacysandbox.ads.adservices.java.internal.asListenableFuture
import android.adservices.common.AdServicesPermissions
import android.content.Context
import android.os.LimitExceededException
@@ -24,6 +23,7 @@
import androidx.annotation.RequiresPermission
import androidx.privacysandbox.ads.adservices.adid.AdId
import androidx.privacysandbox.ads.adservices.adid.AdIdManager
+import androidx.privacysandbox.ads.adservices.java.internal.asListenableFuture
import com.google.common.util.concurrent.ListenableFuture
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
diff --git a/privacysandbox/ads/ads-adservices-java/src/main/java/androidx/privacysandbox/ads/adservices/java/adselection/AdSelectionManagerFutures.kt b/privacysandbox/ads/ads-adservices-java/src/main/java/androidx/privacysandbox/ads/adservices/java/adselection/AdSelectionManagerFutures.kt
index 4726167..0dc0c4c 100644
--- a/privacysandbox/ads/ads-adservices-java/src/main/java/androidx/privacysandbox/ads/adservices/java/adselection/AdSelectionManagerFutures.kt
+++ b/privacysandbox/ads/ads-adservices-java/src/main/java/androidx/privacysandbox/ads/adservices/java/adselection/AdSelectionManagerFutures.kt
@@ -16,9 +16,6 @@
package androidx.privacysandbox.ads.adservices.java.adselection
-import androidx.privacysandbox.ads.adservices.java.internal.asListenableFuture
-import androidx.privacysandbox.ads.adservices.adselection.AdSelectionManager
-import androidx.privacysandbox.ads.adservices.adselection.AdSelectionManager.Companion.obtain
import android.adservices.common.AdServicesPermissions
import android.content.Context
import android.os.LimitExceededException
@@ -26,8 +23,11 @@
import androidx.annotation.DoNotInline
import androidx.annotation.RequiresPermission
import androidx.privacysandbox.ads.adservices.adselection.AdSelectionConfig
+import androidx.privacysandbox.ads.adservices.adselection.AdSelectionManager
+import androidx.privacysandbox.ads.adservices.adselection.AdSelectionManager.Companion.obtain
import androidx.privacysandbox.ads.adservices.adselection.AdSelectionOutcome
import androidx.privacysandbox.ads.adservices.adselection.ReportImpressionRequest
+import androidx.privacysandbox.ads.adservices.java.internal.asListenableFuture
import com.google.common.util.concurrent.ListenableFuture
import java.util.concurrent.TimeoutException
import kotlinx.coroutines.CoroutineScope
diff --git a/privacysandbox/ads/ads-adservices-java/src/main/java/androidx/privacysandbox/ads/adservices/java/appsetid/AppSetIdManagerFutures.kt b/privacysandbox/ads/ads-adservices-java/src/main/java/androidx/privacysandbox/ads/adservices/java/appsetid/AppSetIdManagerFutures.kt
index fcae8d8..5c003dd 100644
--- a/privacysandbox/ads/ads-adservices-java/src/main/java/androidx/privacysandbox/ads/adservices/java/appsetid/AppSetIdManagerFutures.kt
+++ b/privacysandbox/ads/ads-adservices-java/src/main/java/androidx/privacysandbox/ads/adservices/java/appsetid/AppSetIdManagerFutures.kt
@@ -16,12 +16,12 @@
package androidx.privacysandbox.ads.adservices.java.appsetid
-import androidx.privacysandbox.ads.adservices.java.internal.asListenableFuture
import android.content.Context
import android.os.LimitExceededException
import androidx.annotation.DoNotInline
import androidx.privacysandbox.ads.adservices.appsetid.AppSetId
import androidx.privacysandbox.ads.adservices.appsetid.AppSetIdManager
+import androidx.privacysandbox.ads.adservices.java.internal.asListenableFuture
import com.google.common.util.concurrent.ListenableFuture
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
diff --git a/privacysandbox/ads/ads-adservices-java/src/main/java/androidx/privacysandbox/ads/adservices/java/customaudience/CustomAudienceManagerFutures.kt b/privacysandbox/ads/ads-adservices-java/src/main/java/androidx/privacysandbox/ads/adservices/java/customaudience/CustomAudienceManagerFutures.kt
index cb43cf4..f74372d 100644
--- a/privacysandbox/ads/ads-adservices-java/src/main/java/androidx/privacysandbox/ads/adservices/java/customaudience/CustomAudienceManagerFutures.kt
+++ b/privacysandbox/ads/ads-adservices-java/src/main/java/androidx/privacysandbox/ads/adservices/java/customaudience/CustomAudienceManagerFutures.kt
@@ -16,17 +16,17 @@
package androidx.privacysandbox.ads.adservices.java.customaudience
-import androidx.privacysandbox.ads.adservices.java.internal.asListenableFuture
-import androidx.privacysandbox.ads.adservices.customaudience.CustomAudience
-import androidx.privacysandbox.ads.adservices.customaudience.CustomAudienceManager
-import androidx.privacysandbox.ads.adservices.customaudience.CustomAudienceManager.Companion.obtain
import android.adservices.common.AdServicesPermissions
import android.content.Context
import android.os.LimitExceededException
import androidx.annotation.DoNotInline
import androidx.annotation.RequiresPermission
+import androidx.privacysandbox.ads.adservices.customaudience.CustomAudience
+import androidx.privacysandbox.ads.adservices.customaudience.CustomAudienceManager
+import androidx.privacysandbox.ads.adservices.customaudience.CustomAudienceManager.Companion.obtain
import androidx.privacysandbox.ads.adservices.customaudience.JoinCustomAudienceRequest
import androidx.privacysandbox.ads.adservices.customaudience.LeaveCustomAudienceRequest
+import androidx.privacysandbox.ads.adservices.java.internal.asListenableFuture
import com.google.common.util.concurrent.ListenableFuture
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
diff --git a/privacysandbox/ads/ads-adservices-java/src/main/java/androidx/privacysandbox/ads/adservices/java/topics/TopicsManagerFutures.kt b/privacysandbox/ads/ads-adservices-java/src/main/java/androidx/privacysandbox/ads/adservices/java/topics/TopicsManagerFutures.kt
index 5f80cd7..00fa709 100644
--- a/privacysandbox/ads/ads-adservices-java/src/main/java/androidx/privacysandbox/ads/adservices/java/topics/TopicsManagerFutures.kt
+++ b/privacysandbox/ads/ads-adservices-java/src/main/java/androidx/privacysandbox/ads/adservices/java/topics/TopicsManagerFutures.kt
@@ -16,15 +16,15 @@
package androidx.privacysandbox.ads.adservices.java.topics
-import androidx.privacysandbox.ads.adservices.java.internal.asListenableFuture
-import androidx.privacysandbox.ads.adservices.topics.TopicsManager
-import androidx.privacysandbox.ads.adservices.topics.TopicsManager.Companion.obtain
-import androidx.privacysandbox.ads.adservices.topics.GetTopicsRequest
-import androidx.privacysandbox.ads.adservices.topics.GetTopicsResponse
import android.adservices.common.AdServicesPermissions
import android.content.Context
import androidx.annotation.DoNotInline
import androidx.annotation.RequiresPermission
+import androidx.privacysandbox.ads.adservices.java.internal.asListenableFuture
+import androidx.privacysandbox.ads.adservices.topics.GetTopicsRequest
+import androidx.privacysandbox.ads.adservices.topics.GetTopicsResponse
+import androidx.privacysandbox.ads.adservices.topics.TopicsManager
+import androidx.privacysandbox.ads.adservices.topics.TopicsManager.Companion.obtain
import com.google.common.util.concurrent.ListenableFuture
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
diff --git a/privacysandbox/ads/ads-adservices/api/1.0.0-beta05.txt b/privacysandbox/ads/ads-adservices/api/1.0.0-beta05.txt
new file mode 100644
index 0000000..30cd307
--- /dev/null
+++ b/privacysandbox/ads/ads-adservices/api/1.0.0-beta05.txt
@@ -0,0 +1,345 @@
+// Signature format: 4.0
+package androidx.privacysandbox.ads.adservices.adid {
+
+ public final class AdId {
+ method public String getAdId();
+ method public boolean isLimitAdTrackingEnabled();
+ property public final String adId;
+ property public final boolean isLimitAdTrackingEnabled;
+ }
+
+ public abstract class AdIdManager {
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_AD_ID) public abstract suspend Object? getAdId(kotlin.coroutines.Continuation<? super androidx.privacysandbox.ads.adservices.adid.AdId>);
+ method public static final androidx.privacysandbox.ads.adservices.adid.AdIdManager? obtain(android.content.Context context);
+ field public static final androidx.privacysandbox.ads.adservices.adid.AdIdManager.Companion Companion;
+ }
+
+ public static final class AdIdManager.Companion {
+ method public androidx.privacysandbox.ads.adservices.adid.AdIdManager? obtain(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.adselection {
+
+ public final class AdSelectionConfig {
+ ctor public AdSelectionConfig(androidx.privacysandbox.ads.adservices.common.AdTechIdentifier seller, android.net.Uri decisionLogicUri, java.util.List<androidx.privacysandbox.ads.adservices.common.AdTechIdentifier> customAudienceBuyers, androidx.privacysandbox.ads.adservices.common.AdSelectionSignals adSelectionSignals, androidx.privacysandbox.ads.adservices.common.AdSelectionSignals sellerSignals, java.util.Map<androidx.privacysandbox.ads.adservices.common.AdTechIdentifier,androidx.privacysandbox.ads.adservices.common.AdSelectionSignals> perBuyerSignals, android.net.Uri trustedScoringSignalsUri);
+ method public androidx.privacysandbox.ads.adservices.common.AdSelectionSignals getAdSelectionSignals();
+ method public java.util.List<androidx.privacysandbox.ads.adservices.common.AdTechIdentifier> getCustomAudienceBuyers();
+ method public android.net.Uri getDecisionLogicUri();
+ method public java.util.Map<androidx.privacysandbox.ads.adservices.common.AdTechIdentifier,androidx.privacysandbox.ads.adservices.common.AdSelectionSignals> getPerBuyerSignals();
+ method public androidx.privacysandbox.ads.adservices.common.AdTechIdentifier getSeller();
+ method public androidx.privacysandbox.ads.adservices.common.AdSelectionSignals getSellerSignals();
+ method public android.net.Uri getTrustedScoringSignalsUri();
+ property public final androidx.privacysandbox.ads.adservices.common.AdSelectionSignals adSelectionSignals;
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.common.AdTechIdentifier> customAudienceBuyers;
+ property public final android.net.Uri decisionLogicUri;
+ property public final java.util.Map<androidx.privacysandbox.ads.adservices.common.AdTechIdentifier,androidx.privacysandbox.ads.adservices.common.AdSelectionSignals> perBuyerSignals;
+ property public final androidx.privacysandbox.ads.adservices.common.AdTechIdentifier seller;
+ property public final androidx.privacysandbox.ads.adservices.common.AdSelectionSignals sellerSignals;
+ property public final android.net.Uri trustedScoringSignalsUri;
+ }
+
+ public abstract class AdSelectionManager {
+ method public static final androidx.privacysandbox.ads.adservices.adselection.AdSelectionManager? obtain(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract suspend Object? reportImpression(androidx.privacysandbox.ads.adservices.adselection.ReportImpressionRequest reportImpressionRequest, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract suspend Object? selectAds(androidx.privacysandbox.ads.adservices.adselection.AdSelectionConfig adSelectionConfig, kotlin.coroutines.Continuation<? super androidx.privacysandbox.ads.adservices.adselection.AdSelectionOutcome>);
+ field public static final androidx.privacysandbox.ads.adservices.adselection.AdSelectionManager.Companion Companion;
+ }
+
+ public static final class AdSelectionManager.Companion {
+ method public androidx.privacysandbox.ads.adservices.adselection.AdSelectionManager? obtain(android.content.Context context);
+ }
+
+ public final class AdSelectionOutcome {
+ ctor public AdSelectionOutcome(long adSelectionId, android.net.Uri renderUri);
+ method public long getAdSelectionId();
+ method public android.net.Uri getRenderUri();
+ property public final long adSelectionId;
+ property public final android.net.Uri renderUri;
+ }
+
+ public final class ReportImpressionRequest {
+ ctor public ReportImpressionRequest(long adSelectionId, androidx.privacysandbox.ads.adservices.adselection.AdSelectionConfig adSelectionConfig);
+ method public androidx.privacysandbox.ads.adservices.adselection.AdSelectionConfig getAdSelectionConfig();
+ method public long getAdSelectionId();
+ property public final androidx.privacysandbox.ads.adservices.adselection.AdSelectionConfig adSelectionConfig;
+ property public final long adSelectionId;
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.appsetid {
+
+ public final class AppSetId {
+ ctor public AppSetId(String id, int scope);
+ method public String getId();
+ method public int getScope();
+ property public final String id;
+ property public final int scope;
+ field public static final androidx.privacysandbox.ads.adservices.appsetid.AppSetId.Companion Companion;
+ field public static final int SCOPE_APP = 1; // 0x1
+ field public static final int SCOPE_DEVELOPER = 2; // 0x2
+ }
+
+ public static final class AppSetId.Companion {
+ }
+
+ public abstract class AppSetIdManager {
+ method public abstract suspend Object? getAppSetId(kotlin.coroutines.Continuation<? super androidx.privacysandbox.ads.adservices.appsetid.AppSetId>);
+ method public static final androidx.privacysandbox.ads.adservices.appsetid.AppSetIdManager? obtain(android.content.Context context);
+ field public static final androidx.privacysandbox.ads.adservices.appsetid.AppSetIdManager.Companion Companion;
+ }
+
+ public static final class AppSetIdManager.Companion {
+ method public androidx.privacysandbox.ads.adservices.appsetid.AppSetIdManager? obtain(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.common {
+
+ public final class AdData {
+ ctor public AdData(android.net.Uri renderUri, String metadata);
+ method public String getMetadata();
+ method public android.net.Uri getRenderUri();
+ property public final String metadata;
+ property public final android.net.Uri renderUri;
+ }
+
+ public final class AdSelectionSignals {
+ ctor public AdSelectionSignals(String signals);
+ method public String getSignals();
+ property public final String signals;
+ }
+
+ public final class AdTechIdentifier {
+ ctor public AdTechIdentifier(String identifier);
+ method public String getIdentifier();
+ property public final String identifier;
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.customaudience {
+
+ public final class CustomAudience {
+ ctor public CustomAudience(androidx.privacysandbox.ads.adservices.common.AdTechIdentifier buyer, String name, android.net.Uri dailyUpdateUri, android.net.Uri biddingLogicUri, java.util.List<androidx.privacysandbox.ads.adservices.common.AdData> ads, optional java.time.Instant? activationTime, optional java.time.Instant? expirationTime, optional androidx.privacysandbox.ads.adservices.common.AdSelectionSignals? userBiddingSignals, optional androidx.privacysandbox.ads.adservices.customaudience.TrustedBiddingData? trustedBiddingSignals);
+ method public java.time.Instant? getActivationTime();
+ method public java.util.List<androidx.privacysandbox.ads.adservices.common.AdData> getAds();
+ method public android.net.Uri getBiddingLogicUri();
+ method public androidx.privacysandbox.ads.adservices.common.AdTechIdentifier getBuyer();
+ method public android.net.Uri getDailyUpdateUri();
+ method public java.time.Instant? getExpirationTime();
+ method public String getName();
+ method public androidx.privacysandbox.ads.adservices.customaudience.TrustedBiddingData? getTrustedBiddingSignals();
+ method public androidx.privacysandbox.ads.adservices.common.AdSelectionSignals? getUserBiddingSignals();
+ property public final java.time.Instant? activationTime;
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.common.AdData> ads;
+ property public final android.net.Uri biddingLogicUri;
+ property public final androidx.privacysandbox.ads.adservices.common.AdTechIdentifier buyer;
+ property public final android.net.Uri dailyUpdateUri;
+ property public final java.time.Instant? expirationTime;
+ property public final String name;
+ property public final androidx.privacysandbox.ads.adservices.customaudience.TrustedBiddingData? trustedBiddingSignals;
+ property public final androidx.privacysandbox.ads.adservices.common.AdSelectionSignals? userBiddingSignals;
+ }
+
+ public static final class CustomAudience.Builder {
+ ctor public CustomAudience.Builder(androidx.privacysandbox.ads.adservices.common.AdTechIdentifier buyer, String name, android.net.Uri dailyUpdateUri, android.net.Uri biddingLogicUri, java.util.List<androidx.privacysandbox.ads.adservices.common.AdData> ads);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience build();
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setActivationTime(java.time.Instant activationTime);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setAds(java.util.List<androidx.privacysandbox.ads.adservices.common.AdData> ads);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setBiddingLogicUri(android.net.Uri biddingLogicUri);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setBuyer(androidx.privacysandbox.ads.adservices.common.AdTechIdentifier buyer);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setDailyUpdateUri(android.net.Uri dailyUpdateUri);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setExpirationTime(java.time.Instant expirationTime);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setName(String name);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setTrustedBiddingData(androidx.privacysandbox.ads.adservices.customaudience.TrustedBiddingData trustedBiddingSignals);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setUserBiddingSignals(androidx.privacysandbox.ads.adservices.common.AdSelectionSignals userBiddingSignals);
+ }
+
+ public abstract class CustomAudienceManager {
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract suspend Object? joinCustomAudience(androidx.privacysandbox.ads.adservices.customaudience.JoinCustomAudienceRequest request, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract suspend Object? leaveCustomAudience(androidx.privacysandbox.ads.adservices.customaudience.LeaveCustomAudienceRequest request, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static final androidx.privacysandbox.ads.adservices.customaudience.CustomAudienceManager? obtain(android.content.Context context);
+ field public static final androidx.privacysandbox.ads.adservices.customaudience.CustomAudienceManager.Companion Companion;
+ }
+
+ public static final class CustomAudienceManager.Companion {
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudienceManager? obtain(android.content.Context context);
+ }
+
+ public final class JoinCustomAudienceRequest {
+ ctor public JoinCustomAudienceRequest(androidx.privacysandbox.ads.adservices.customaudience.CustomAudience customAudience);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience getCustomAudience();
+ property public final androidx.privacysandbox.ads.adservices.customaudience.CustomAudience customAudience;
+ }
+
+ public final class LeaveCustomAudienceRequest {
+ ctor public LeaveCustomAudienceRequest(androidx.privacysandbox.ads.adservices.common.AdTechIdentifier buyer, String name);
+ method public androidx.privacysandbox.ads.adservices.common.AdTechIdentifier getBuyer();
+ method public String getName();
+ property public final androidx.privacysandbox.ads.adservices.common.AdTechIdentifier buyer;
+ property public final String name;
+ }
+
+ public final class TrustedBiddingData {
+ ctor public TrustedBiddingData(android.net.Uri trustedBiddingUri, java.util.List<java.lang.String> trustedBiddingKeys);
+ method public java.util.List<java.lang.String> getTrustedBiddingKeys();
+ method public android.net.Uri getTrustedBiddingUri();
+ property public final java.util.List<java.lang.String> trustedBiddingKeys;
+ property public final android.net.Uri trustedBiddingUri;
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.measurement {
+
+ @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final class DeletionRequest {
+ ctor public DeletionRequest(int deletionMode, int matchBehavior, optional java.time.Instant start, optional java.time.Instant end, optional java.util.List<? extends android.net.Uri> domainUris, optional java.util.List<? extends android.net.Uri> originUris);
+ method public int getDeletionMode();
+ method public java.util.List<android.net.Uri> getDomainUris();
+ method public java.time.Instant getEnd();
+ method public int getMatchBehavior();
+ method public java.util.List<android.net.Uri> getOriginUris();
+ method public java.time.Instant getStart();
+ property public final int deletionMode;
+ property public final java.util.List<android.net.Uri> domainUris;
+ property public final java.time.Instant end;
+ property public final int matchBehavior;
+ property public final java.util.List<android.net.Uri> originUris;
+ property public final java.time.Instant start;
+ field public static final androidx.privacysandbox.ads.adservices.measurement.DeletionRequest.Companion Companion;
+ field public static final int DELETION_MODE_ALL = 0; // 0x0
+ field public static final int DELETION_MODE_EXCLUDE_INTERNAL_DATA = 1; // 0x1
+ field public static final int MATCH_BEHAVIOR_DELETE = 0; // 0x0
+ field public static final int MATCH_BEHAVIOR_PRESERVE = 1; // 0x1
+ }
+
+ @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public static final class DeletionRequest.Builder {
+ ctor public DeletionRequest.Builder(int deletionMode, int matchBehavior);
+ method public androidx.privacysandbox.ads.adservices.measurement.DeletionRequest build();
+ method public androidx.privacysandbox.ads.adservices.measurement.DeletionRequest.Builder setDomainUris(java.util.List<? extends android.net.Uri> domainUris);
+ method public androidx.privacysandbox.ads.adservices.measurement.DeletionRequest.Builder setEnd(java.time.Instant end);
+ method public androidx.privacysandbox.ads.adservices.measurement.DeletionRequest.Builder setOriginUris(java.util.List<? extends android.net.Uri> originUris);
+ method public androidx.privacysandbox.ads.adservices.measurement.DeletionRequest.Builder setStart(java.time.Instant start);
+ }
+
+ public static final class DeletionRequest.Companion {
+ }
+
+ public abstract class MeasurementManager {
+ ctor public MeasurementManager();
+ method public abstract suspend Object? deleteRegistrations(androidx.privacysandbox.ads.adservices.measurement.DeletionRequest deletionRequest, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract suspend Object? getMeasurementApiStatus(kotlin.coroutines.Continuation<? super java.lang.Integer>);
+ method public static final androidx.privacysandbox.ads.adservices.measurement.MeasurementManager? obtain(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract suspend Object? registerSource(android.net.Uri attributionSource, android.view.InputEvent? inputEvent, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract suspend Object? registerTrigger(android.net.Uri trigger, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract suspend Object? registerWebSource(androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest request, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract suspend Object? registerWebTrigger(androidx.privacysandbox.ads.adservices.measurement.WebTriggerRegistrationRequest request, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ field public static final androidx.privacysandbox.ads.adservices.measurement.MeasurementManager.Companion Companion;
+ field public static final int MEASUREMENT_API_STATE_DISABLED = 0; // 0x0
+ field public static final int MEASUREMENT_API_STATE_ENABLED = 1; // 0x1
+ }
+
+ public static final class MeasurementManager.Companion {
+ method public androidx.privacysandbox.ads.adservices.measurement.MeasurementManager? obtain(android.content.Context context);
+ }
+
+ @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final class WebSourceParams {
+ ctor public WebSourceParams(android.net.Uri registrationUri, boolean debugKeyAllowed);
+ method public boolean getDebugKeyAllowed();
+ method public android.net.Uri getRegistrationUri();
+ property public final boolean debugKeyAllowed;
+ property public final android.net.Uri registrationUri;
+ }
+
+ @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final class WebSourceRegistrationRequest {
+ ctor public WebSourceRegistrationRequest(java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebSourceParams> webSourceParams, android.net.Uri topOriginUri, optional android.view.InputEvent? inputEvent, optional android.net.Uri? appDestination, optional android.net.Uri? webDestination, optional android.net.Uri? verifiedDestination);
+ method public android.net.Uri? getAppDestination();
+ method public android.view.InputEvent? getInputEvent();
+ method public android.net.Uri getTopOriginUri();
+ method public android.net.Uri? getVerifiedDestination();
+ method public android.net.Uri? getWebDestination();
+ method public java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebSourceParams> getWebSourceParams();
+ property public final android.net.Uri? appDestination;
+ property public final android.view.InputEvent? inputEvent;
+ property public final android.net.Uri topOriginUri;
+ property public final android.net.Uri? verifiedDestination;
+ property public final android.net.Uri? webDestination;
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebSourceParams> webSourceParams;
+ }
+
+ public static final class WebSourceRegistrationRequest.Builder {
+ ctor public WebSourceRegistrationRequest.Builder(java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebSourceParams> webSourceParams, android.net.Uri topOriginUri);
+ method public androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest build();
+ method public androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest.Builder setAppDestination(android.net.Uri? appDestination);
+ method public androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest.Builder setInputEvent(android.view.InputEvent inputEvent);
+ method public androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest.Builder setVerifiedDestination(android.net.Uri? verifiedDestination);
+ method public androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest.Builder setWebDestination(android.net.Uri? webDestination);
+ }
+
+ @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final class WebTriggerParams {
+ ctor public WebTriggerParams(android.net.Uri registrationUri, boolean debugKeyAllowed);
+ method public boolean getDebugKeyAllowed();
+ method public android.net.Uri getRegistrationUri();
+ property public final boolean debugKeyAllowed;
+ property public final android.net.Uri registrationUri;
+ }
+
+ @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final class WebTriggerRegistrationRequest {
+ ctor public WebTriggerRegistrationRequest(java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebTriggerParams> webTriggerParams, android.net.Uri destination);
+ method public android.net.Uri getDestination();
+ method public java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebTriggerParams> getWebTriggerParams();
+ property public final android.net.Uri destination;
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebTriggerParams> webTriggerParams;
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.topics {
+
+ public final class GetTopicsRequest {
+ ctor public GetTopicsRequest(optional String adsSdkName, optional boolean shouldRecordObservation);
+ method public String getAdsSdkName();
+ method public boolean getShouldRecordObservation();
+ property public final String adsSdkName;
+ property public final boolean shouldRecordObservation;
+ }
+
+ public static final class GetTopicsRequest.Builder {
+ ctor public GetTopicsRequest.Builder();
+ method public androidx.privacysandbox.ads.adservices.topics.GetTopicsRequest build();
+ method public androidx.privacysandbox.ads.adservices.topics.GetTopicsRequest.Builder setAdsSdkName(String adsSdkName);
+ method public androidx.privacysandbox.ads.adservices.topics.GetTopicsRequest.Builder setShouldRecordObservation(boolean shouldRecordObservation);
+ }
+
+ public final class GetTopicsResponse {
+ ctor public GetTopicsResponse(java.util.List<androidx.privacysandbox.ads.adservices.topics.Topic> topics);
+ method public java.util.List<androidx.privacysandbox.ads.adservices.topics.Topic> getTopics();
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.topics.Topic> topics;
+ }
+
+ public final class Topic {
+ ctor public Topic(long taxonomyVersion, long modelVersion, int topicId);
+ method public long getModelVersion();
+ method public long getTaxonomyVersion();
+ method public int getTopicId();
+ property public final long modelVersion;
+ property public final long taxonomyVersion;
+ property public final int topicId;
+ }
+
+ public abstract class TopicsManager {
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_TOPICS) public abstract suspend Object? getTopics(androidx.privacysandbox.ads.adservices.topics.GetTopicsRequest request, kotlin.coroutines.Continuation<? super androidx.privacysandbox.ads.adservices.topics.GetTopicsResponse>);
+ method public static final androidx.privacysandbox.ads.adservices.topics.TopicsManager? obtain(android.content.Context context);
+ field public static final androidx.privacysandbox.ads.adservices.topics.TopicsManager.Companion Companion;
+ }
+
+ public static final class TopicsManager.Companion {
+ method public androidx.privacysandbox.ads.adservices.topics.TopicsManager? obtain(android.content.Context context);
+ }
+
+}
+
diff --git a/privacysandbox/ads/ads-adservices/api/public_plus_experimental_1.0.0-beta05.txt b/privacysandbox/ads/ads-adservices/api/public_plus_experimental_1.0.0-beta05.txt
new file mode 100644
index 0000000..30cd307
--- /dev/null
+++ b/privacysandbox/ads/ads-adservices/api/public_plus_experimental_1.0.0-beta05.txt
@@ -0,0 +1,345 @@
+// Signature format: 4.0
+package androidx.privacysandbox.ads.adservices.adid {
+
+ public final class AdId {
+ method public String getAdId();
+ method public boolean isLimitAdTrackingEnabled();
+ property public final String adId;
+ property public final boolean isLimitAdTrackingEnabled;
+ }
+
+ public abstract class AdIdManager {
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_AD_ID) public abstract suspend Object? getAdId(kotlin.coroutines.Continuation<? super androidx.privacysandbox.ads.adservices.adid.AdId>);
+ method public static final androidx.privacysandbox.ads.adservices.adid.AdIdManager? obtain(android.content.Context context);
+ field public static final androidx.privacysandbox.ads.adservices.adid.AdIdManager.Companion Companion;
+ }
+
+ public static final class AdIdManager.Companion {
+ method public androidx.privacysandbox.ads.adservices.adid.AdIdManager? obtain(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.adselection {
+
+ public final class AdSelectionConfig {
+ ctor public AdSelectionConfig(androidx.privacysandbox.ads.adservices.common.AdTechIdentifier seller, android.net.Uri decisionLogicUri, java.util.List<androidx.privacysandbox.ads.adservices.common.AdTechIdentifier> customAudienceBuyers, androidx.privacysandbox.ads.adservices.common.AdSelectionSignals adSelectionSignals, androidx.privacysandbox.ads.adservices.common.AdSelectionSignals sellerSignals, java.util.Map<androidx.privacysandbox.ads.adservices.common.AdTechIdentifier,androidx.privacysandbox.ads.adservices.common.AdSelectionSignals> perBuyerSignals, android.net.Uri trustedScoringSignalsUri);
+ method public androidx.privacysandbox.ads.adservices.common.AdSelectionSignals getAdSelectionSignals();
+ method public java.util.List<androidx.privacysandbox.ads.adservices.common.AdTechIdentifier> getCustomAudienceBuyers();
+ method public android.net.Uri getDecisionLogicUri();
+ method public java.util.Map<androidx.privacysandbox.ads.adservices.common.AdTechIdentifier,androidx.privacysandbox.ads.adservices.common.AdSelectionSignals> getPerBuyerSignals();
+ method public androidx.privacysandbox.ads.adservices.common.AdTechIdentifier getSeller();
+ method public androidx.privacysandbox.ads.adservices.common.AdSelectionSignals getSellerSignals();
+ method public android.net.Uri getTrustedScoringSignalsUri();
+ property public final androidx.privacysandbox.ads.adservices.common.AdSelectionSignals adSelectionSignals;
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.common.AdTechIdentifier> customAudienceBuyers;
+ property public final android.net.Uri decisionLogicUri;
+ property public final java.util.Map<androidx.privacysandbox.ads.adservices.common.AdTechIdentifier,androidx.privacysandbox.ads.adservices.common.AdSelectionSignals> perBuyerSignals;
+ property public final androidx.privacysandbox.ads.adservices.common.AdTechIdentifier seller;
+ property public final androidx.privacysandbox.ads.adservices.common.AdSelectionSignals sellerSignals;
+ property public final android.net.Uri trustedScoringSignalsUri;
+ }
+
+ public abstract class AdSelectionManager {
+ method public static final androidx.privacysandbox.ads.adservices.adselection.AdSelectionManager? obtain(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract suspend Object? reportImpression(androidx.privacysandbox.ads.adservices.adselection.ReportImpressionRequest reportImpressionRequest, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract suspend Object? selectAds(androidx.privacysandbox.ads.adservices.adselection.AdSelectionConfig adSelectionConfig, kotlin.coroutines.Continuation<? super androidx.privacysandbox.ads.adservices.adselection.AdSelectionOutcome>);
+ field public static final androidx.privacysandbox.ads.adservices.adselection.AdSelectionManager.Companion Companion;
+ }
+
+ public static final class AdSelectionManager.Companion {
+ method public androidx.privacysandbox.ads.adservices.adselection.AdSelectionManager? obtain(android.content.Context context);
+ }
+
+ public final class AdSelectionOutcome {
+ ctor public AdSelectionOutcome(long adSelectionId, android.net.Uri renderUri);
+ method public long getAdSelectionId();
+ method public android.net.Uri getRenderUri();
+ property public final long adSelectionId;
+ property public final android.net.Uri renderUri;
+ }
+
+ public final class ReportImpressionRequest {
+ ctor public ReportImpressionRequest(long adSelectionId, androidx.privacysandbox.ads.adservices.adselection.AdSelectionConfig adSelectionConfig);
+ method public androidx.privacysandbox.ads.adservices.adselection.AdSelectionConfig getAdSelectionConfig();
+ method public long getAdSelectionId();
+ property public final androidx.privacysandbox.ads.adservices.adselection.AdSelectionConfig adSelectionConfig;
+ property public final long adSelectionId;
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.appsetid {
+
+ public final class AppSetId {
+ ctor public AppSetId(String id, int scope);
+ method public String getId();
+ method public int getScope();
+ property public final String id;
+ property public final int scope;
+ field public static final androidx.privacysandbox.ads.adservices.appsetid.AppSetId.Companion Companion;
+ field public static final int SCOPE_APP = 1; // 0x1
+ field public static final int SCOPE_DEVELOPER = 2; // 0x2
+ }
+
+ public static final class AppSetId.Companion {
+ }
+
+ public abstract class AppSetIdManager {
+ method public abstract suspend Object? getAppSetId(kotlin.coroutines.Continuation<? super androidx.privacysandbox.ads.adservices.appsetid.AppSetId>);
+ method public static final androidx.privacysandbox.ads.adservices.appsetid.AppSetIdManager? obtain(android.content.Context context);
+ field public static final androidx.privacysandbox.ads.adservices.appsetid.AppSetIdManager.Companion Companion;
+ }
+
+ public static final class AppSetIdManager.Companion {
+ method public androidx.privacysandbox.ads.adservices.appsetid.AppSetIdManager? obtain(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.common {
+
+ public final class AdData {
+ ctor public AdData(android.net.Uri renderUri, String metadata);
+ method public String getMetadata();
+ method public android.net.Uri getRenderUri();
+ property public final String metadata;
+ property public final android.net.Uri renderUri;
+ }
+
+ public final class AdSelectionSignals {
+ ctor public AdSelectionSignals(String signals);
+ method public String getSignals();
+ property public final String signals;
+ }
+
+ public final class AdTechIdentifier {
+ ctor public AdTechIdentifier(String identifier);
+ method public String getIdentifier();
+ property public final String identifier;
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.customaudience {
+
+ public final class CustomAudience {
+ ctor public CustomAudience(androidx.privacysandbox.ads.adservices.common.AdTechIdentifier buyer, String name, android.net.Uri dailyUpdateUri, android.net.Uri biddingLogicUri, java.util.List<androidx.privacysandbox.ads.adservices.common.AdData> ads, optional java.time.Instant? activationTime, optional java.time.Instant? expirationTime, optional androidx.privacysandbox.ads.adservices.common.AdSelectionSignals? userBiddingSignals, optional androidx.privacysandbox.ads.adservices.customaudience.TrustedBiddingData? trustedBiddingSignals);
+ method public java.time.Instant? getActivationTime();
+ method public java.util.List<androidx.privacysandbox.ads.adservices.common.AdData> getAds();
+ method public android.net.Uri getBiddingLogicUri();
+ method public androidx.privacysandbox.ads.adservices.common.AdTechIdentifier getBuyer();
+ method public android.net.Uri getDailyUpdateUri();
+ method public java.time.Instant? getExpirationTime();
+ method public String getName();
+ method public androidx.privacysandbox.ads.adservices.customaudience.TrustedBiddingData? getTrustedBiddingSignals();
+ method public androidx.privacysandbox.ads.adservices.common.AdSelectionSignals? getUserBiddingSignals();
+ property public final java.time.Instant? activationTime;
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.common.AdData> ads;
+ property public final android.net.Uri biddingLogicUri;
+ property public final androidx.privacysandbox.ads.adservices.common.AdTechIdentifier buyer;
+ property public final android.net.Uri dailyUpdateUri;
+ property public final java.time.Instant? expirationTime;
+ property public final String name;
+ property public final androidx.privacysandbox.ads.adservices.customaudience.TrustedBiddingData? trustedBiddingSignals;
+ property public final androidx.privacysandbox.ads.adservices.common.AdSelectionSignals? userBiddingSignals;
+ }
+
+ public static final class CustomAudience.Builder {
+ ctor public CustomAudience.Builder(androidx.privacysandbox.ads.adservices.common.AdTechIdentifier buyer, String name, android.net.Uri dailyUpdateUri, android.net.Uri biddingLogicUri, java.util.List<androidx.privacysandbox.ads.adservices.common.AdData> ads);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience build();
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setActivationTime(java.time.Instant activationTime);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setAds(java.util.List<androidx.privacysandbox.ads.adservices.common.AdData> ads);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setBiddingLogicUri(android.net.Uri biddingLogicUri);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setBuyer(androidx.privacysandbox.ads.adservices.common.AdTechIdentifier buyer);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setDailyUpdateUri(android.net.Uri dailyUpdateUri);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setExpirationTime(java.time.Instant expirationTime);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setName(String name);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setTrustedBiddingData(androidx.privacysandbox.ads.adservices.customaudience.TrustedBiddingData trustedBiddingSignals);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setUserBiddingSignals(androidx.privacysandbox.ads.adservices.common.AdSelectionSignals userBiddingSignals);
+ }
+
+ public abstract class CustomAudienceManager {
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract suspend Object? joinCustomAudience(androidx.privacysandbox.ads.adservices.customaudience.JoinCustomAudienceRequest request, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract suspend Object? leaveCustomAudience(androidx.privacysandbox.ads.adservices.customaudience.LeaveCustomAudienceRequest request, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static final androidx.privacysandbox.ads.adservices.customaudience.CustomAudienceManager? obtain(android.content.Context context);
+ field public static final androidx.privacysandbox.ads.adservices.customaudience.CustomAudienceManager.Companion Companion;
+ }
+
+ public static final class CustomAudienceManager.Companion {
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudienceManager? obtain(android.content.Context context);
+ }
+
+ public final class JoinCustomAudienceRequest {
+ ctor public JoinCustomAudienceRequest(androidx.privacysandbox.ads.adservices.customaudience.CustomAudience customAudience);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience getCustomAudience();
+ property public final androidx.privacysandbox.ads.adservices.customaudience.CustomAudience customAudience;
+ }
+
+ public final class LeaveCustomAudienceRequest {
+ ctor public LeaveCustomAudienceRequest(androidx.privacysandbox.ads.adservices.common.AdTechIdentifier buyer, String name);
+ method public androidx.privacysandbox.ads.adservices.common.AdTechIdentifier getBuyer();
+ method public String getName();
+ property public final androidx.privacysandbox.ads.adservices.common.AdTechIdentifier buyer;
+ property public final String name;
+ }
+
+ public final class TrustedBiddingData {
+ ctor public TrustedBiddingData(android.net.Uri trustedBiddingUri, java.util.List<java.lang.String> trustedBiddingKeys);
+ method public java.util.List<java.lang.String> getTrustedBiddingKeys();
+ method public android.net.Uri getTrustedBiddingUri();
+ property public final java.util.List<java.lang.String> trustedBiddingKeys;
+ property public final android.net.Uri trustedBiddingUri;
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.measurement {
+
+ @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final class DeletionRequest {
+ ctor public DeletionRequest(int deletionMode, int matchBehavior, optional java.time.Instant start, optional java.time.Instant end, optional java.util.List<? extends android.net.Uri> domainUris, optional java.util.List<? extends android.net.Uri> originUris);
+ method public int getDeletionMode();
+ method public java.util.List<android.net.Uri> getDomainUris();
+ method public java.time.Instant getEnd();
+ method public int getMatchBehavior();
+ method public java.util.List<android.net.Uri> getOriginUris();
+ method public java.time.Instant getStart();
+ property public final int deletionMode;
+ property public final java.util.List<android.net.Uri> domainUris;
+ property public final java.time.Instant end;
+ property public final int matchBehavior;
+ property public final java.util.List<android.net.Uri> originUris;
+ property public final java.time.Instant start;
+ field public static final androidx.privacysandbox.ads.adservices.measurement.DeletionRequest.Companion Companion;
+ field public static final int DELETION_MODE_ALL = 0; // 0x0
+ field public static final int DELETION_MODE_EXCLUDE_INTERNAL_DATA = 1; // 0x1
+ field public static final int MATCH_BEHAVIOR_DELETE = 0; // 0x0
+ field public static final int MATCH_BEHAVIOR_PRESERVE = 1; // 0x1
+ }
+
+ @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public static final class DeletionRequest.Builder {
+ ctor public DeletionRequest.Builder(int deletionMode, int matchBehavior);
+ method public androidx.privacysandbox.ads.adservices.measurement.DeletionRequest build();
+ method public androidx.privacysandbox.ads.adservices.measurement.DeletionRequest.Builder setDomainUris(java.util.List<? extends android.net.Uri> domainUris);
+ method public androidx.privacysandbox.ads.adservices.measurement.DeletionRequest.Builder setEnd(java.time.Instant end);
+ method public androidx.privacysandbox.ads.adservices.measurement.DeletionRequest.Builder setOriginUris(java.util.List<? extends android.net.Uri> originUris);
+ method public androidx.privacysandbox.ads.adservices.measurement.DeletionRequest.Builder setStart(java.time.Instant start);
+ }
+
+ public static final class DeletionRequest.Companion {
+ }
+
+ public abstract class MeasurementManager {
+ ctor public MeasurementManager();
+ method public abstract suspend Object? deleteRegistrations(androidx.privacysandbox.ads.adservices.measurement.DeletionRequest deletionRequest, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract suspend Object? getMeasurementApiStatus(kotlin.coroutines.Continuation<? super java.lang.Integer>);
+ method public static final androidx.privacysandbox.ads.adservices.measurement.MeasurementManager? obtain(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract suspend Object? registerSource(android.net.Uri attributionSource, android.view.InputEvent? inputEvent, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract suspend Object? registerTrigger(android.net.Uri trigger, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract suspend Object? registerWebSource(androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest request, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract suspend Object? registerWebTrigger(androidx.privacysandbox.ads.adservices.measurement.WebTriggerRegistrationRequest request, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ field public static final androidx.privacysandbox.ads.adservices.measurement.MeasurementManager.Companion Companion;
+ field public static final int MEASUREMENT_API_STATE_DISABLED = 0; // 0x0
+ field public static final int MEASUREMENT_API_STATE_ENABLED = 1; // 0x1
+ }
+
+ public static final class MeasurementManager.Companion {
+ method public androidx.privacysandbox.ads.adservices.measurement.MeasurementManager? obtain(android.content.Context context);
+ }
+
+ @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final class WebSourceParams {
+ ctor public WebSourceParams(android.net.Uri registrationUri, boolean debugKeyAllowed);
+ method public boolean getDebugKeyAllowed();
+ method public android.net.Uri getRegistrationUri();
+ property public final boolean debugKeyAllowed;
+ property public final android.net.Uri registrationUri;
+ }
+
+ @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final class WebSourceRegistrationRequest {
+ ctor public WebSourceRegistrationRequest(java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebSourceParams> webSourceParams, android.net.Uri topOriginUri, optional android.view.InputEvent? inputEvent, optional android.net.Uri? appDestination, optional android.net.Uri? webDestination, optional android.net.Uri? verifiedDestination);
+ method public android.net.Uri? getAppDestination();
+ method public android.view.InputEvent? getInputEvent();
+ method public android.net.Uri getTopOriginUri();
+ method public android.net.Uri? getVerifiedDestination();
+ method public android.net.Uri? getWebDestination();
+ method public java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebSourceParams> getWebSourceParams();
+ property public final android.net.Uri? appDestination;
+ property public final android.view.InputEvent? inputEvent;
+ property public final android.net.Uri topOriginUri;
+ property public final android.net.Uri? verifiedDestination;
+ property public final android.net.Uri? webDestination;
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebSourceParams> webSourceParams;
+ }
+
+ public static final class WebSourceRegistrationRequest.Builder {
+ ctor public WebSourceRegistrationRequest.Builder(java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebSourceParams> webSourceParams, android.net.Uri topOriginUri);
+ method public androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest build();
+ method public androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest.Builder setAppDestination(android.net.Uri? appDestination);
+ method public androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest.Builder setInputEvent(android.view.InputEvent inputEvent);
+ method public androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest.Builder setVerifiedDestination(android.net.Uri? verifiedDestination);
+ method public androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest.Builder setWebDestination(android.net.Uri? webDestination);
+ }
+
+ @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final class WebTriggerParams {
+ ctor public WebTriggerParams(android.net.Uri registrationUri, boolean debugKeyAllowed);
+ method public boolean getDebugKeyAllowed();
+ method public android.net.Uri getRegistrationUri();
+ property public final boolean debugKeyAllowed;
+ property public final android.net.Uri registrationUri;
+ }
+
+ @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final class WebTriggerRegistrationRequest {
+ ctor public WebTriggerRegistrationRequest(java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebTriggerParams> webTriggerParams, android.net.Uri destination);
+ method public android.net.Uri getDestination();
+ method public java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebTriggerParams> getWebTriggerParams();
+ property public final android.net.Uri destination;
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebTriggerParams> webTriggerParams;
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.topics {
+
+ public final class GetTopicsRequest {
+ ctor public GetTopicsRequest(optional String adsSdkName, optional boolean shouldRecordObservation);
+ method public String getAdsSdkName();
+ method public boolean getShouldRecordObservation();
+ property public final String adsSdkName;
+ property public final boolean shouldRecordObservation;
+ }
+
+ public static final class GetTopicsRequest.Builder {
+ ctor public GetTopicsRequest.Builder();
+ method public androidx.privacysandbox.ads.adservices.topics.GetTopicsRequest build();
+ method public androidx.privacysandbox.ads.adservices.topics.GetTopicsRequest.Builder setAdsSdkName(String adsSdkName);
+ method public androidx.privacysandbox.ads.adservices.topics.GetTopicsRequest.Builder setShouldRecordObservation(boolean shouldRecordObservation);
+ }
+
+ public final class GetTopicsResponse {
+ ctor public GetTopicsResponse(java.util.List<androidx.privacysandbox.ads.adservices.topics.Topic> topics);
+ method public java.util.List<androidx.privacysandbox.ads.adservices.topics.Topic> getTopics();
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.topics.Topic> topics;
+ }
+
+ public final class Topic {
+ ctor public Topic(long taxonomyVersion, long modelVersion, int topicId);
+ method public long getModelVersion();
+ method public long getTaxonomyVersion();
+ method public int getTopicId();
+ property public final long modelVersion;
+ property public final long taxonomyVersion;
+ property public final int topicId;
+ }
+
+ public abstract class TopicsManager {
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_TOPICS) public abstract suspend Object? getTopics(androidx.privacysandbox.ads.adservices.topics.GetTopicsRequest request, kotlin.coroutines.Continuation<? super androidx.privacysandbox.ads.adservices.topics.GetTopicsResponse>);
+ method public static final androidx.privacysandbox.ads.adservices.topics.TopicsManager? obtain(android.content.Context context);
+ field public static final androidx.privacysandbox.ads.adservices.topics.TopicsManager.Companion Companion;
+ }
+
+ public static final class TopicsManager.Companion {
+ method public androidx.privacysandbox.ads.adservices.topics.TopicsManager? obtain(android.content.Context context);
+ }
+
+}
+
diff --git a/privacysandbox/ads/ads-adservices/api/res-1.0.0-beta05.txt b/privacysandbox/ads/ads-adservices/api/res-1.0.0-beta05.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/privacysandbox/ads/ads-adservices/api/res-1.0.0-beta05.txt
diff --git a/privacysandbox/ads/ads-adservices/api/restricted_1.0.0-beta05.txt b/privacysandbox/ads/ads-adservices/api/restricted_1.0.0-beta05.txt
new file mode 100644
index 0000000..30cd307
--- /dev/null
+++ b/privacysandbox/ads/ads-adservices/api/restricted_1.0.0-beta05.txt
@@ -0,0 +1,345 @@
+// Signature format: 4.0
+package androidx.privacysandbox.ads.adservices.adid {
+
+ public final class AdId {
+ method public String getAdId();
+ method public boolean isLimitAdTrackingEnabled();
+ property public final String adId;
+ property public final boolean isLimitAdTrackingEnabled;
+ }
+
+ public abstract class AdIdManager {
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_AD_ID) public abstract suspend Object? getAdId(kotlin.coroutines.Continuation<? super androidx.privacysandbox.ads.adservices.adid.AdId>);
+ method public static final androidx.privacysandbox.ads.adservices.adid.AdIdManager? obtain(android.content.Context context);
+ field public static final androidx.privacysandbox.ads.adservices.adid.AdIdManager.Companion Companion;
+ }
+
+ public static final class AdIdManager.Companion {
+ method public androidx.privacysandbox.ads.adservices.adid.AdIdManager? obtain(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.adselection {
+
+ public final class AdSelectionConfig {
+ ctor public AdSelectionConfig(androidx.privacysandbox.ads.adservices.common.AdTechIdentifier seller, android.net.Uri decisionLogicUri, java.util.List<androidx.privacysandbox.ads.adservices.common.AdTechIdentifier> customAudienceBuyers, androidx.privacysandbox.ads.adservices.common.AdSelectionSignals adSelectionSignals, androidx.privacysandbox.ads.adservices.common.AdSelectionSignals sellerSignals, java.util.Map<androidx.privacysandbox.ads.adservices.common.AdTechIdentifier,androidx.privacysandbox.ads.adservices.common.AdSelectionSignals> perBuyerSignals, android.net.Uri trustedScoringSignalsUri);
+ method public androidx.privacysandbox.ads.adservices.common.AdSelectionSignals getAdSelectionSignals();
+ method public java.util.List<androidx.privacysandbox.ads.adservices.common.AdTechIdentifier> getCustomAudienceBuyers();
+ method public android.net.Uri getDecisionLogicUri();
+ method public java.util.Map<androidx.privacysandbox.ads.adservices.common.AdTechIdentifier,androidx.privacysandbox.ads.adservices.common.AdSelectionSignals> getPerBuyerSignals();
+ method public androidx.privacysandbox.ads.adservices.common.AdTechIdentifier getSeller();
+ method public androidx.privacysandbox.ads.adservices.common.AdSelectionSignals getSellerSignals();
+ method public android.net.Uri getTrustedScoringSignalsUri();
+ property public final androidx.privacysandbox.ads.adservices.common.AdSelectionSignals adSelectionSignals;
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.common.AdTechIdentifier> customAudienceBuyers;
+ property public final android.net.Uri decisionLogicUri;
+ property public final java.util.Map<androidx.privacysandbox.ads.adservices.common.AdTechIdentifier,androidx.privacysandbox.ads.adservices.common.AdSelectionSignals> perBuyerSignals;
+ property public final androidx.privacysandbox.ads.adservices.common.AdTechIdentifier seller;
+ property public final androidx.privacysandbox.ads.adservices.common.AdSelectionSignals sellerSignals;
+ property public final android.net.Uri trustedScoringSignalsUri;
+ }
+
+ public abstract class AdSelectionManager {
+ method public static final androidx.privacysandbox.ads.adservices.adselection.AdSelectionManager? obtain(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract suspend Object? reportImpression(androidx.privacysandbox.ads.adservices.adselection.ReportImpressionRequest reportImpressionRequest, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract suspend Object? selectAds(androidx.privacysandbox.ads.adservices.adselection.AdSelectionConfig adSelectionConfig, kotlin.coroutines.Continuation<? super androidx.privacysandbox.ads.adservices.adselection.AdSelectionOutcome>);
+ field public static final androidx.privacysandbox.ads.adservices.adselection.AdSelectionManager.Companion Companion;
+ }
+
+ public static final class AdSelectionManager.Companion {
+ method public androidx.privacysandbox.ads.adservices.adselection.AdSelectionManager? obtain(android.content.Context context);
+ }
+
+ public final class AdSelectionOutcome {
+ ctor public AdSelectionOutcome(long adSelectionId, android.net.Uri renderUri);
+ method public long getAdSelectionId();
+ method public android.net.Uri getRenderUri();
+ property public final long adSelectionId;
+ property public final android.net.Uri renderUri;
+ }
+
+ public final class ReportImpressionRequest {
+ ctor public ReportImpressionRequest(long adSelectionId, androidx.privacysandbox.ads.adservices.adselection.AdSelectionConfig adSelectionConfig);
+ method public androidx.privacysandbox.ads.adservices.adselection.AdSelectionConfig getAdSelectionConfig();
+ method public long getAdSelectionId();
+ property public final androidx.privacysandbox.ads.adservices.adselection.AdSelectionConfig adSelectionConfig;
+ property public final long adSelectionId;
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.appsetid {
+
+ public final class AppSetId {
+ ctor public AppSetId(String id, int scope);
+ method public String getId();
+ method public int getScope();
+ property public final String id;
+ property public final int scope;
+ field public static final androidx.privacysandbox.ads.adservices.appsetid.AppSetId.Companion Companion;
+ field public static final int SCOPE_APP = 1; // 0x1
+ field public static final int SCOPE_DEVELOPER = 2; // 0x2
+ }
+
+ public static final class AppSetId.Companion {
+ }
+
+ public abstract class AppSetIdManager {
+ method public abstract suspend Object? getAppSetId(kotlin.coroutines.Continuation<? super androidx.privacysandbox.ads.adservices.appsetid.AppSetId>);
+ method public static final androidx.privacysandbox.ads.adservices.appsetid.AppSetIdManager? obtain(android.content.Context context);
+ field public static final androidx.privacysandbox.ads.adservices.appsetid.AppSetIdManager.Companion Companion;
+ }
+
+ public static final class AppSetIdManager.Companion {
+ method public androidx.privacysandbox.ads.adservices.appsetid.AppSetIdManager? obtain(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.common {
+
+ public final class AdData {
+ ctor public AdData(android.net.Uri renderUri, String metadata);
+ method public String getMetadata();
+ method public android.net.Uri getRenderUri();
+ property public final String metadata;
+ property public final android.net.Uri renderUri;
+ }
+
+ public final class AdSelectionSignals {
+ ctor public AdSelectionSignals(String signals);
+ method public String getSignals();
+ property public final String signals;
+ }
+
+ public final class AdTechIdentifier {
+ ctor public AdTechIdentifier(String identifier);
+ method public String getIdentifier();
+ property public final String identifier;
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.customaudience {
+
+ public final class CustomAudience {
+ ctor public CustomAudience(androidx.privacysandbox.ads.adservices.common.AdTechIdentifier buyer, String name, android.net.Uri dailyUpdateUri, android.net.Uri biddingLogicUri, java.util.List<androidx.privacysandbox.ads.adservices.common.AdData> ads, optional java.time.Instant? activationTime, optional java.time.Instant? expirationTime, optional androidx.privacysandbox.ads.adservices.common.AdSelectionSignals? userBiddingSignals, optional androidx.privacysandbox.ads.adservices.customaudience.TrustedBiddingData? trustedBiddingSignals);
+ method public java.time.Instant? getActivationTime();
+ method public java.util.List<androidx.privacysandbox.ads.adservices.common.AdData> getAds();
+ method public android.net.Uri getBiddingLogicUri();
+ method public androidx.privacysandbox.ads.adservices.common.AdTechIdentifier getBuyer();
+ method public android.net.Uri getDailyUpdateUri();
+ method public java.time.Instant? getExpirationTime();
+ method public String getName();
+ method public androidx.privacysandbox.ads.adservices.customaudience.TrustedBiddingData? getTrustedBiddingSignals();
+ method public androidx.privacysandbox.ads.adservices.common.AdSelectionSignals? getUserBiddingSignals();
+ property public final java.time.Instant? activationTime;
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.common.AdData> ads;
+ property public final android.net.Uri biddingLogicUri;
+ property public final androidx.privacysandbox.ads.adservices.common.AdTechIdentifier buyer;
+ property public final android.net.Uri dailyUpdateUri;
+ property public final java.time.Instant? expirationTime;
+ property public final String name;
+ property public final androidx.privacysandbox.ads.adservices.customaudience.TrustedBiddingData? trustedBiddingSignals;
+ property public final androidx.privacysandbox.ads.adservices.common.AdSelectionSignals? userBiddingSignals;
+ }
+
+ public static final class CustomAudience.Builder {
+ ctor public CustomAudience.Builder(androidx.privacysandbox.ads.adservices.common.AdTechIdentifier buyer, String name, android.net.Uri dailyUpdateUri, android.net.Uri biddingLogicUri, java.util.List<androidx.privacysandbox.ads.adservices.common.AdData> ads);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience build();
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setActivationTime(java.time.Instant activationTime);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setAds(java.util.List<androidx.privacysandbox.ads.adservices.common.AdData> ads);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setBiddingLogicUri(android.net.Uri biddingLogicUri);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setBuyer(androidx.privacysandbox.ads.adservices.common.AdTechIdentifier buyer);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setDailyUpdateUri(android.net.Uri dailyUpdateUri);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setExpirationTime(java.time.Instant expirationTime);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setName(String name);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setTrustedBiddingData(androidx.privacysandbox.ads.adservices.customaudience.TrustedBiddingData trustedBiddingSignals);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setUserBiddingSignals(androidx.privacysandbox.ads.adservices.common.AdSelectionSignals userBiddingSignals);
+ }
+
+ public abstract class CustomAudienceManager {
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract suspend Object? joinCustomAudience(androidx.privacysandbox.ads.adservices.customaudience.JoinCustomAudienceRequest request, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract suspend Object? leaveCustomAudience(androidx.privacysandbox.ads.adservices.customaudience.LeaveCustomAudienceRequest request, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static final androidx.privacysandbox.ads.adservices.customaudience.CustomAudienceManager? obtain(android.content.Context context);
+ field public static final androidx.privacysandbox.ads.adservices.customaudience.CustomAudienceManager.Companion Companion;
+ }
+
+ public static final class CustomAudienceManager.Companion {
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudienceManager? obtain(android.content.Context context);
+ }
+
+ public final class JoinCustomAudienceRequest {
+ ctor public JoinCustomAudienceRequest(androidx.privacysandbox.ads.adservices.customaudience.CustomAudience customAudience);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience getCustomAudience();
+ property public final androidx.privacysandbox.ads.adservices.customaudience.CustomAudience customAudience;
+ }
+
+ public final class LeaveCustomAudienceRequest {
+ ctor public LeaveCustomAudienceRequest(androidx.privacysandbox.ads.adservices.common.AdTechIdentifier buyer, String name);
+ method public androidx.privacysandbox.ads.adservices.common.AdTechIdentifier getBuyer();
+ method public String getName();
+ property public final androidx.privacysandbox.ads.adservices.common.AdTechIdentifier buyer;
+ property public final String name;
+ }
+
+ public final class TrustedBiddingData {
+ ctor public TrustedBiddingData(android.net.Uri trustedBiddingUri, java.util.List<java.lang.String> trustedBiddingKeys);
+ method public java.util.List<java.lang.String> getTrustedBiddingKeys();
+ method public android.net.Uri getTrustedBiddingUri();
+ property public final java.util.List<java.lang.String> trustedBiddingKeys;
+ property public final android.net.Uri trustedBiddingUri;
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.measurement {
+
+ @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final class DeletionRequest {
+ ctor public DeletionRequest(int deletionMode, int matchBehavior, optional java.time.Instant start, optional java.time.Instant end, optional java.util.List<? extends android.net.Uri> domainUris, optional java.util.List<? extends android.net.Uri> originUris);
+ method public int getDeletionMode();
+ method public java.util.List<android.net.Uri> getDomainUris();
+ method public java.time.Instant getEnd();
+ method public int getMatchBehavior();
+ method public java.util.List<android.net.Uri> getOriginUris();
+ method public java.time.Instant getStart();
+ property public final int deletionMode;
+ property public final java.util.List<android.net.Uri> domainUris;
+ property public final java.time.Instant end;
+ property public final int matchBehavior;
+ property public final java.util.List<android.net.Uri> originUris;
+ property public final java.time.Instant start;
+ field public static final androidx.privacysandbox.ads.adservices.measurement.DeletionRequest.Companion Companion;
+ field public static final int DELETION_MODE_ALL = 0; // 0x0
+ field public static final int DELETION_MODE_EXCLUDE_INTERNAL_DATA = 1; // 0x1
+ field public static final int MATCH_BEHAVIOR_DELETE = 0; // 0x0
+ field public static final int MATCH_BEHAVIOR_PRESERVE = 1; // 0x1
+ }
+
+ @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public static final class DeletionRequest.Builder {
+ ctor public DeletionRequest.Builder(int deletionMode, int matchBehavior);
+ method public androidx.privacysandbox.ads.adservices.measurement.DeletionRequest build();
+ method public androidx.privacysandbox.ads.adservices.measurement.DeletionRequest.Builder setDomainUris(java.util.List<? extends android.net.Uri> domainUris);
+ method public androidx.privacysandbox.ads.adservices.measurement.DeletionRequest.Builder setEnd(java.time.Instant end);
+ method public androidx.privacysandbox.ads.adservices.measurement.DeletionRequest.Builder setOriginUris(java.util.List<? extends android.net.Uri> originUris);
+ method public androidx.privacysandbox.ads.adservices.measurement.DeletionRequest.Builder setStart(java.time.Instant start);
+ }
+
+ public static final class DeletionRequest.Companion {
+ }
+
+ public abstract class MeasurementManager {
+ ctor public MeasurementManager();
+ method public abstract suspend Object? deleteRegistrations(androidx.privacysandbox.ads.adservices.measurement.DeletionRequest deletionRequest, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract suspend Object? getMeasurementApiStatus(kotlin.coroutines.Continuation<? super java.lang.Integer>);
+ method public static final androidx.privacysandbox.ads.adservices.measurement.MeasurementManager? obtain(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract suspend Object? registerSource(android.net.Uri attributionSource, android.view.InputEvent? inputEvent, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract suspend Object? registerTrigger(android.net.Uri trigger, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract suspend Object? registerWebSource(androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest request, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract suspend Object? registerWebTrigger(androidx.privacysandbox.ads.adservices.measurement.WebTriggerRegistrationRequest request, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ field public static final androidx.privacysandbox.ads.adservices.measurement.MeasurementManager.Companion Companion;
+ field public static final int MEASUREMENT_API_STATE_DISABLED = 0; // 0x0
+ field public static final int MEASUREMENT_API_STATE_ENABLED = 1; // 0x1
+ }
+
+ public static final class MeasurementManager.Companion {
+ method public androidx.privacysandbox.ads.adservices.measurement.MeasurementManager? obtain(android.content.Context context);
+ }
+
+ @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final class WebSourceParams {
+ ctor public WebSourceParams(android.net.Uri registrationUri, boolean debugKeyAllowed);
+ method public boolean getDebugKeyAllowed();
+ method public android.net.Uri getRegistrationUri();
+ property public final boolean debugKeyAllowed;
+ property public final android.net.Uri registrationUri;
+ }
+
+ @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final class WebSourceRegistrationRequest {
+ ctor public WebSourceRegistrationRequest(java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebSourceParams> webSourceParams, android.net.Uri topOriginUri, optional android.view.InputEvent? inputEvent, optional android.net.Uri? appDestination, optional android.net.Uri? webDestination, optional android.net.Uri? verifiedDestination);
+ method public android.net.Uri? getAppDestination();
+ method public android.view.InputEvent? getInputEvent();
+ method public android.net.Uri getTopOriginUri();
+ method public android.net.Uri? getVerifiedDestination();
+ method public android.net.Uri? getWebDestination();
+ method public java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebSourceParams> getWebSourceParams();
+ property public final android.net.Uri? appDestination;
+ property public final android.view.InputEvent? inputEvent;
+ property public final android.net.Uri topOriginUri;
+ property public final android.net.Uri? verifiedDestination;
+ property public final android.net.Uri? webDestination;
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebSourceParams> webSourceParams;
+ }
+
+ public static final class WebSourceRegistrationRequest.Builder {
+ ctor public WebSourceRegistrationRequest.Builder(java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebSourceParams> webSourceParams, android.net.Uri topOriginUri);
+ method public androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest build();
+ method public androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest.Builder setAppDestination(android.net.Uri? appDestination);
+ method public androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest.Builder setInputEvent(android.view.InputEvent inputEvent);
+ method public androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest.Builder setVerifiedDestination(android.net.Uri? verifiedDestination);
+ method public androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest.Builder setWebDestination(android.net.Uri? webDestination);
+ }
+
+ @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final class WebTriggerParams {
+ ctor public WebTriggerParams(android.net.Uri registrationUri, boolean debugKeyAllowed);
+ method public boolean getDebugKeyAllowed();
+ method public android.net.Uri getRegistrationUri();
+ property public final boolean debugKeyAllowed;
+ property public final android.net.Uri registrationUri;
+ }
+
+ @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final class WebTriggerRegistrationRequest {
+ ctor public WebTriggerRegistrationRequest(java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebTriggerParams> webTriggerParams, android.net.Uri destination);
+ method public android.net.Uri getDestination();
+ method public java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebTriggerParams> getWebTriggerParams();
+ property public final android.net.Uri destination;
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebTriggerParams> webTriggerParams;
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.topics {
+
+ public final class GetTopicsRequest {
+ ctor public GetTopicsRequest(optional String adsSdkName, optional boolean shouldRecordObservation);
+ method public String getAdsSdkName();
+ method public boolean getShouldRecordObservation();
+ property public final String adsSdkName;
+ property public final boolean shouldRecordObservation;
+ }
+
+ public static final class GetTopicsRequest.Builder {
+ ctor public GetTopicsRequest.Builder();
+ method public androidx.privacysandbox.ads.adservices.topics.GetTopicsRequest build();
+ method public androidx.privacysandbox.ads.adservices.topics.GetTopicsRequest.Builder setAdsSdkName(String adsSdkName);
+ method public androidx.privacysandbox.ads.adservices.topics.GetTopicsRequest.Builder setShouldRecordObservation(boolean shouldRecordObservation);
+ }
+
+ public final class GetTopicsResponse {
+ ctor public GetTopicsResponse(java.util.List<androidx.privacysandbox.ads.adservices.topics.Topic> topics);
+ method public java.util.List<androidx.privacysandbox.ads.adservices.topics.Topic> getTopics();
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.topics.Topic> topics;
+ }
+
+ public final class Topic {
+ ctor public Topic(long taxonomyVersion, long modelVersion, int topicId);
+ method public long getModelVersion();
+ method public long getTaxonomyVersion();
+ method public int getTopicId();
+ property public final long modelVersion;
+ property public final long taxonomyVersion;
+ property public final int topicId;
+ }
+
+ public abstract class TopicsManager {
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_TOPICS) public abstract suspend Object? getTopics(androidx.privacysandbox.ads.adservices.topics.GetTopicsRequest request, kotlin.coroutines.Continuation<? super androidx.privacysandbox.ads.adservices.topics.GetTopicsResponse>);
+ method public static final androidx.privacysandbox.ads.adservices.topics.TopicsManager? obtain(android.content.Context context);
+ field public static final androidx.privacysandbox.ads.adservices.topics.TopicsManager.Companion Companion;
+ }
+
+ public static final class TopicsManager.Companion {
+ method public androidx.privacysandbox.ads.adservices.topics.TopicsManager? obtain(android.content.Context context);
+ }
+
+}
+
diff --git a/privacysandbox/ads/ads-adservices/build.gradle b/privacysandbox/ads/ads-adservices/build.gradle
index 70c6da1..13284aa 100644
--- a/privacysandbox/ads/ads-adservices/build.gradle
+++ b/privacysandbox/ads/ads-adservices/build.gradle
@@ -50,7 +50,7 @@
}
androidx {
- name = "Androidx library for Privacy Preserving APIs."
+ name = "Privacy Sandbox for Ad Services"
type = LibraryType.PUBLISHED_LIBRARY
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2022"
diff --git a/privacysandbox/ads/ads-adservices/src/androidTest/java/androidx/privacysandbox/ads/adservices/adselection/AdSelectionManagerTest.kt b/privacysandbox/ads/ads-adservices/src/androidTest/java/androidx/privacysandbox/ads/adservices/adselection/AdSelectionManagerTest.kt
index 7ce3d77..5c658d3 100644
--- a/privacysandbox/ads/ads-adservices/src/androidTest/java/androidx/privacysandbox/ads/adservices/adselection/AdSelectionManagerTest.kt
+++ b/privacysandbox/ads/ads-adservices/src/androidTest/java/androidx/privacysandbox/ads/adservices/adselection/AdSelectionManagerTest.kt
@@ -22,10 +22,10 @@
import android.os.OutcomeReceiver
import android.os.ext.SdkExtensions
import androidx.annotation.RequiresExtension
-import androidx.test.core.app.ApplicationProvider
import androidx.privacysandbox.ads.adservices.adselection.AdSelectionManager.Companion.obtain
import androidx.privacysandbox.ads.adservices.common.AdSelectionSignals
import androidx.privacysandbox.ads.adservices.common.AdTechIdentifier
+import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
diff --git a/privacysandbox/ads/ads-adservices/src/main/java/androidx/privacysandbox/ads/adservices/adid/AdIdManager.kt b/privacysandbox/ads/ads-adservices/src/main/java/androidx/privacysandbox/ads/adservices/adid/AdIdManager.kt
index eaaae293..129d17b 100644
--- a/privacysandbox/ads/ads-adservices/src/main/java/androidx/privacysandbox/ads/adservices/adid/AdIdManager.kt
+++ b/privacysandbox/ads/ads-adservices/src/main/java/androidx/privacysandbox/ads/adservices/adid/AdIdManager.kt
@@ -19,8 +19,8 @@
import android.adservices.common.AdServicesPermissions
import android.annotation.SuppressLint
import android.content.Context
-import android.os.ext.SdkExtensions
import android.os.LimitExceededException
+import android.os.ext.SdkExtensions
import androidx.annotation.DoNotInline
import androidx.annotation.RequiresExtension
import androidx.annotation.RequiresPermission
diff --git a/privacysandbox/ads/ads-adservices/src/main/java/androidx/privacysandbox/ads/adservices/adselection/AdSelectionManager.kt b/privacysandbox/ads/ads-adservices/src/main/java/androidx/privacysandbox/ads/adservices/adselection/AdSelectionManager.kt
index 454a7cb..7e280c4 100644
--- a/privacysandbox/ads/ads-adservices/src/main/java/androidx/privacysandbox/ads/adservices/adselection/AdSelectionManager.kt
+++ b/privacysandbox/ads/ads-adservices/src/main/java/androidx/privacysandbox/ads/adservices/adselection/AdSelectionManager.kt
@@ -27,8 +27,8 @@
import androidx.annotation.RequiresPermission
import androidx.core.os.asOutcomeReceiver
import androidx.privacysandbox.ads.adservices.common.AdSelectionSignals
-import androidx.privacysandbox.ads.adservices.internal.AdServicesInfo
import androidx.privacysandbox.ads.adservices.common.AdTechIdentifier
+import androidx.privacysandbox.ads.adservices.internal.AdServicesInfo
import java.util.concurrent.TimeoutException
import kotlinx.coroutines.suspendCancellableCoroutine
diff --git a/privacysandbox/ads/ads-adservices/src/main/java/androidx/privacysandbox/ads/adservices/customaudience/CustomAudienceManager.kt b/privacysandbox/ads/ads-adservices/src/main/java/androidx/privacysandbox/ads/adservices/customaudience/CustomAudienceManager.kt
index f41199b..981aeaa 100644
--- a/privacysandbox/ads/ads-adservices/src/main/java/androidx/privacysandbox/ads/adservices/customaudience/CustomAudienceManager.kt
+++ b/privacysandbox/ads/ads-adservices/src/main/java/androidx/privacysandbox/ads/adservices/customaudience/CustomAudienceManager.kt
@@ -27,8 +27,8 @@
import androidx.core.os.asOutcomeReceiver
import androidx.privacysandbox.ads.adservices.common.AdData
import androidx.privacysandbox.ads.adservices.common.AdSelectionSignals
-import androidx.privacysandbox.ads.adservices.internal.AdServicesInfo
import androidx.privacysandbox.ads.adservices.common.AdTechIdentifier
+import androidx.privacysandbox.ads.adservices.internal.AdServicesInfo
import kotlinx.coroutines.suspendCancellableCoroutine
/**
diff --git a/privacysandbox/plugins/plugins-privacysandbox-library/src/test/java/androidx/privacysandboxlibraryplugin/PrivacySandboxLibraryPluginTest.kt b/privacysandbox/plugins/plugins-privacysandbox-library/src/test/java/androidx/privacysandboxlibraryplugin/PrivacySandboxLibraryPluginTest.kt
index e623e74..ac1f28b 100644
--- a/privacysandbox/plugins/plugins-privacysandbox-library/src/test/java/androidx/privacysandboxlibraryplugin/PrivacySandboxLibraryPluginTest.kt
+++ b/privacysandbox/plugins/plugins-privacysandbox-library/src/test/java/androidx/privacysandboxlibraryplugin/PrivacySandboxLibraryPluginTest.kt
@@ -23,10 +23,9 @@
import org.gradle.testkit.runner.TaskOutcome
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
-import org.junit.Test
-
import org.junit.Before
import org.junit.Rule
+import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/loader/FileClassLoaderFactoryTest.kt b/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/loader/FileClassLoaderFactoryTest.kt
index 31fee55..22d795b 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/loader/FileClassLoaderFactoryTest.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/loader/FileClassLoaderFactoryTest.kt
@@ -18,8 +18,8 @@
import android.content.Context
import androidx.privacysandbox.sdkruntime.client.config.LocalSdkConfig
-import androidx.privacysandbox.sdkruntime.client.loader.storage.LocalSdkStorage
import androidx.privacysandbox.sdkruntime.client.loader.storage.LocalSdkDexFiles
+import androidx.privacysandbox.sdkruntime.client.loader.storage.LocalSdkStorage
import androidx.privacysandbox.sdkruntime.client.loader.storage.TestLocalSdkStorage
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/loader/LocalSdkTestUtils.kt b/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/loader/LocalSdkTestUtils.kt
index def9887..40aee3a 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/loader/LocalSdkTestUtils.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/loader/LocalSdkTestUtils.kt
@@ -20,8 +20,8 @@
import android.os.Bundle
import android.os.IBinder
import androidx.privacysandbox.sdkruntime.core.SandboxedSdkCompat
-import androidx.privacysandbox.sdkruntime.core.Versions
import androidx.privacysandbox.sdkruntime.core.SandboxedSdkProviderCompat
+import androidx.privacysandbox.sdkruntime.core.Versions
import kotlin.reflect.cast
/**
diff --git a/privacysandbox/tools/tools-apicompiler/src/main/java/androidx/privacysandbox/tools/apicompiler/generator/SdkCodeGenerator.kt b/privacysandbox/tools/tools-apicompiler/src/main/java/androidx/privacysandbox/tools/apicompiler/generator/SdkCodeGenerator.kt
index c46fb02..d3332ac 100644
--- a/privacysandbox/tools/tools-apicompiler/src/main/java/androidx/privacysandbox/tools/apicompiler/generator/SdkCodeGenerator.kt
+++ b/privacysandbox/tools/tools-apicompiler/src/main/java/androidx/privacysandbox/tools/apicompiler/generator/SdkCodeGenerator.kt
@@ -22,6 +22,7 @@
import androidx.privacysandbox.tools.core.generator.ClientProxyTypeGenerator
import androidx.privacysandbox.tools.core.generator.CoreLibInfoAndBinderWrapperConverterGenerator
import androidx.privacysandbox.tools.core.generator.GenerationTarget
+import androidx.privacysandbox.tools.core.generator.SdkActivityLauncherWrapperGenerator
import androidx.privacysandbox.tools.core.generator.ServerBinderCodeConverter
import androidx.privacysandbox.tools.core.generator.ServiceFactoryFileGenerator
import androidx.privacysandbox.tools.core.generator.StubDelegatesGenerator
@@ -29,6 +30,7 @@
import androidx.privacysandbox.tools.core.generator.TransportCancellationGenerator
import androidx.privacysandbox.tools.core.generator.ValueConverterFileGenerator
import androidx.privacysandbox.tools.core.model.ParsedApi
+import androidx.privacysandbox.tools.core.model.containsSdkActivityLauncher
import androidx.privacysandbox.tools.core.model.getOnlyService
import androidx.privacysandbox.tools.core.model.hasSuspendFunctions
import com.google.devtools.ksp.processing.CodeGenerator
@@ -68,6 +70,7 @@
generateCallbackProxies()
generateToolMetadata()
generateSuspendFunctionUtilities()
+ generateSdkActivityLauncherUtilities()
generateServiceFactoryFile()
}
@@ -151,6 +154,11 @@
.also(::write)
}
+ private fun generateSdkActivityLauncherUtilities() {
+ if (!api.containsSdkActivityLauncher()) return
+ SdkActivityLauncherWrapperGenerator(basePackageName()).generate().also(::write)
+ }
+
private fun write(spec: FileSpec) {
codeGenerator.createNewFile(Dependencies.ALL_FILES, spec.packageName, spec.name)
.bufferedWriter().use(spec::writeTo)
diff --git a/privacysandbox/tools/tools-apicompiler/src/test/java/androidx/privacysandbox/tools/apicompiler/FullFeaturedSdkApiCompilerDiffTest.kt b/privacysandbox/tools/tools-apicompiler/src/test/java/androidx/privacysandbox/tools/apicompiler/FullFeaturedSdkApiCompilerDiffTest.kt
index 8f53ceb..75b6cd0 100644
--- a/privacysandbox/tools/tools-apicompiler/src/test/java/androidx/privacysandbox/tools/apicompiler/FullFeaturedSdkApiCompilerDiffTest.kt
+++ b/privacysandbox/tools/tools-apicompiler/src/test/java/androidx/privacysandbox/tools/apicompiler/FullFeaturedSdkApiCompilerDiffTest.kt
@@ -34,6 +34,7 @@
"com/mysdk/IMyUiInterfaceCoreLibInfoAndBinderWrapper.java",
"com/mysdk/IMyUiInterfaceTransactionCallback.java",
"com/mysdk/IMySecondInterfaceTransactionCallback.java",
+ "com/mysdk/ISdkActivityLauncherTransactionCallback.java",
"com/mysdk/IResponseTransactionCallback.java",
"com/mysdk/IStringTransactionCallback.java",
"com/mysdk/IUnitTransactionCallback.java",
diff --git a/privacysandbox/tools/tools-apicompiler/src/test/java/androidx/privacysandbox/tools/apicompiler/parser/InterfaceParserTest.kt b/privacysandbox/tools/tools-apicompiler/src/test/java/androidx/privacysandbox/tools/apicompiler/parser/InterfaceParserTest.kt
index d43d7fc..4648597 100644
--- a/privacysandbox/tools/tools-apicompiler/src/test/java/androidx/privacysandbox/tools/apicompiler/parser/InterfaceParserTest.kt
+++ b/privacysandbox/tools/tools-apicompiler/src/test/java/androidx/privacysandbox/tools/apicompiler/parser/InterfaceParserTest.kt
@@ -22,8 +22,8 @@
import androidx.privacysandbox.tools.core.model.Method
import androidx.privacysandbox.tools.core.model.Parameter
import androidx.privacysandbox.tools.core.model.ParsedApi
-import androidx.privacysandbox.tools.core.model.Types
import androidx.privacysandbox.tools.core.model.Type
+import androidx.privacysandbox.tools.core.model.Types
import androidx.privacysandbox.tools.core.model.Types.asNullable
import androidx.room.compiler.processing.util.Source
import com.google.common.truth.Truth.assertThat
@@ -366,9 +366,9 @@
checkSourceFails(serviceMethod("suspend fun foo(x: MutableList<Int>)"))
.containsExactlyErrors(
"Error in com.mysdk.MySdk.foo: only primitives, lists, data classes annotated " +
- "with @PrivacySandboxValue and interfaces annotated with " +
- "@PrivacySandboxCallback or @PrivacySandboxInterface are supported as " +
- "parameter types."
+ "with @PrivacySandboxValue, interfaces annotated with " +
+ "@PrivacySandboxCallback or @PrivacySandboxInterface, and " +
+ "SdkActivityLaunchers are supported as parameter types."
)
}
@@ -385,9 +385,9 @@
checkSourceFails(serviceMethod("suspend fun foo(x: (Int) -> Int)"))
.containsExactlyErrors(
"Error in com.mysdk.MySdk.foo: only primitives, lists, data classes annotated " +
- "with @PrivacySandboxValue and interfaces annotated with " +
- "@PrivacySandboxCallback or @PrivacySandboxInterface are supported as " +
- "parameter types."
+ "with @PrivacySandboxValue, interfaces annotated with " +
+ "@PrivacySandboxCallback " + "or @PrivacySandboxInterface, and " +
+ "SdkActivityLaunchers are supported as parameter types."
)
}
@@ -407,8 +407,8 @@
)
checkSourceFails(source).containsExactlyErrors(
"Error in com.mysdk.MySdk.foo: only primitives, lists, data classes annotated with " +
- "@PrivacySandboxValue and interfaces annotated with @PrivacySandboxInterface are " +
- "supported as return types."
+ "@PrivacySandboxValue, interfaces annotated with @PrivacySandboxInterface, and " +
+ "SdkActivityLaunchers are supported as return types."
)
}
diff --git a/privacysandbox/tools/tools-apicompiler/src/test/java/androidx/privacysandbox/tools/apicompiler/parser/ValueParserTest.kt b/privacysandbox/tools/tools-apicompiler/src/test/java/androidx/privacysandbox/tools/apicompiler/parser/ValueParserTest.kt
index 5d7dd17..ce1d8f2 100644
--- a/privacysandbox/tools/tools-apicompiler/src/test/java/androidx/privacysandbox/tools/apicompiler/parser/ValueParserTest.kt
+++ b/privacysandbox/tools/tools-apicompiler/src/test/java/androidx/privacysandbox/tools/apicompiler/parser/ValueParserTest.kt
@@ -167,8 +167,9 @@
checkSourceFails(dataClass)
.containsExactlyErrors(
"Error in com.mysdk.MySdkRequest.foo: only primitives, lists, data classes " +
- "annotated with @PrivacySandboxValue and interfaces annotated with " +
- "@PrivacySandboxInterface are supported as properties."
+ "annotated with @PrivacySandboxValue, interfaces annotated with " +
+ "@PrivacySandboxInterface, and SdkActivityLaunchers are supported as " +
+ "properties."
)
}
diff --git a/privacysandbox/tools/tools-apicompiler/src/test/test-data/fullfeaturedsdk/input/com/mysdk/MySdk.kt b/privacysandbox/tools/tools-apicompiler/src/test/test-data/fullfeaturedsdk/input/com/mysdk/MySdk.kt
index c096f86..7daabc5 100644
--- a/privacysandbox/tools/tools-apicompiler/src/test/test-data/fullfeaturedsdk/input/com/mysdk/MySdk.kt
+++ b/privacysandbox/tools/tools-apicompiler/src/test/test-data/fullfeaturedsdk/input/com/mysdk/MySdk.kt
@@ -5,6 +5,7 @@
import androidx.privacysandbox.tools.PrivacySandboxService
import androidx.privacysandbox.tools.PrivacySandboxValue
import androidx.privacysandbox.ui.core.SandboxedUiAdapter
+import androidx.privacysandbox.ui.core.SdkActivityLauncher
@PrivacySandboxService
interface MySdk {
@@ -31,6 +32,10 @@
suspend fun returnUiInterface(): MyUiInterface
fun acceptUiInterfaceParam(input: MyUiInterface)
+
+ fun acceptSdkActivityLauncherParam(activityLauncher: SdkActivityLauncher)
+
+ suspend fun returnSdkActivityLauncher(): SdkActivityLauncher
}
@PrivacySandboxInterface
@@ -77,6 +82,7 @@
val maybeValue: InnerValue?,
val myInterface: MyInterface,
val myUiInterface: MyUiInterface,
+ val activityLauncher: SdkActivityLauncher,
)
@PrivacySandboxValue
diff --git a/privacysandbox/tools/tools-apicompiler/src/test/test-data/fullfeaturedsdk/output/com/mysdk/MySdkStubDelegate.kt b/privacysandbox/tools/tools-apicompiler/src/test/test-data/fullfeaturedsdk/output/com/mysdk/MySdkStubDelegate.kt
index 0d5c413..5e9c140 100644
--- a/privacysandbox/tools/tools-apicompiler/src/test/test-data/fullfeaturedsdk/output/com/mysdk/MySdkStubDelegate.kt
+++ b/privacysandbox/tools/tools-apicompiler/src/test/test-data/fullfeaturedsdk/output/com/mysdk/MySdkStubDelegate.kt
@@ -1,6 +1,7 @@
package com.mysdk
import android.content.Context
+import android.os.Bundle
import androidx.privacysandbox.ui.provider.toCoreLibInfo
import com.mysdk.PrivacySandboxThrowableParcelConverter
import com.mysdk.PrivacySandboxThrowableParcelConverter.toThrowableParcel
@@ -172,4 +173,26 @@
delegate.acceptUiInterfaceParam((input.binder as MyUiInterfaceStubDelegate).delegate)
}
}
+
+ public override fun acceptSdkActivityLauncherParam(activityLauncher: Bundle): Unit {
+ coroutineScope.launch {
+ delegate.acceptSdkActivityLauncherParam(SdkActivityLauncherAndBinderWrapper(activityLauncher))
+ }
+ }
+
+ public override
+ fun returnSdkActivityLauncher(transactionCallback: ISdkActivityLauncherTransactionCallback):
+ Unit {
+ val job = coroutineScope.launch {
+ try {
+ val result = delegate.returnSdkActivityLauncher()
+ transactionCallback.onSuccess((result as SdkActivityLauncherAndBinderWrapper).launcherInfo)
+ }
+ catch (t: Throwable) {
+ transactionCallback.onFailure(toThrowableParcel(t))
+ }
+ }
+ val cancellationSignal = TransportCancellationCallback() { job.cancel() }
+ transactionCallback.onCancellable(cancellationSignal)
+ }
}
diff --git a/privacysandbox/tools/tools-apicompiler/src/test/test-data/fullfeaturedsdk/output/com/mysdk/RequestConverter.kt b/privacysandbox/tools/tools-apicompiler/src/test/test-data/fullfeaturedsdk/output/com/mysdk/RequestConverter.kt
index dba30f0..d4621af 100644
--- a/privacysandbox/tools/tools-apicompiler/src/test/test-data/fullfeaturedsdk/output/com/mysdk/RequestConverter.kt
+++ b/privacysandbox/tools/tools-apicompiler/src/test/test-data/fullfeaturedsdk/output/com/mysdk/RequestConverter.kt
@@ -15,7 +15,8 @@
InnerValueConverter(context).fromParcelable(notNullValue) },
myInterface = (parcelable.myInterface as MyInterfaceStubDelegate).delegate,
myUiInterface = (parcelable.myUiInterface.binder as
- MyUiInterfaceStubDelegate).delegate)
+ MyUiInterfaceStubDelegate).delegate,
+ activityLauncher = SdkActivityLauncherAndBinderWrapper(parcelable.activityLauncher))
return annotatedValue
}
@@ -30,6 +31,8 @@
parcelable.myUiInterface =
IMyUiInterfaceCoreLibInfoAndBinderWrapperConverter.toParcelable(annotatedValue.myUiInterface.toCoreLibInfo(context),
MyUiInterfaceStubDelegate(annotatedValue.myUiInterface, context))
+ parcelable.activityLauncher = (annotatedValue.activityLauncher as
+ SdkActivityLauncherAndBinderWrapper).launcherInfo
return parcelable
}
}
diff --git a/privacysandbox/tools/tools-apicompiler/src/test/test-data/fullfeaturedsdk/output/com/mysdk/SdkActivityLauncherAndBinderWrapper.kt b/privacysandbox/tools/tools-apicompiler/src/test/test-data/fullfeaturedsdk/output/com/mysdk/SdkActivityLauncherAndBinderWrapper.kt
new file mode 100644
index 0000000..8ef1af5
--- /dev/null
+++ b/privacysandbox/tools/tools-apicompiler/src/test/test-data/fullfeaturedsdk/output/com/mysdk/SdkActivityLauncherAndBinderWrapper.kt
@@ -0,0 +1,13 @@
+package com.mysdk
+
+import android.os.Bundle
+import androidx.privacysandbox.ui.core.SdkActivityLauncher
+import androidx.privacysandbox.ui.provider.SdkActivityLauncherFactory
+
+public class SdkActivityLauncherAndBinderWrapper private constructor(
+ private val `delegate`: SdkActivityLauncher,
+ public val launcherInfo: Bundle,
+) : SdkActivityLauncher by delegate {
+ public constructor(launcherInfo: Bundle) :
+ this(SdkActivityLauncherFactory.fromLauncherInfo(launcherInfo), launcherInfo)
+}
diff --git a/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/InterfaceFileGenerator.kt b/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/InterfaceFileGenerator.kt
index e7e87a0..19d9baf 100644
--- a/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/InterfaceFileGenerator.kt
+++ b/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/InterfaceFileGenerator.kt
@@ -17,12 +17,12 @@
package androidx.privacysandbox.tools.apigenerator
import androidx.privacysandbox.tools.core.generator.addCommonSettings
-import androidx.privacysandbox.tools.core.model.AnnotatedInterface
-import androidx.privacysandbox.tools.core.model.Method
import androidx.privacysandbox.tools.core.generator.build
import androidx.privacysandbox.tools.core.generator.poetClassName
import androidx.privacysandbox.tools.core.generator.poetSpec
import androidx.privacysandbox.tools.core.generator.poetTypeName
+import androidx.privacysandbox.tools.core.model.AnnotatedInterface
+import androidx.privacysandbox.tools.core.model.Method
import com.squareup.kotlinpoet.FileSpec
import com.squareup.kotlinpoet.FunSpec
import com.squareup.kotlinpoet.KModifier
diff --git a/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/PrivacySandboxApiGenerator.kt b/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/PrivacySandboxApiGenerator.kt
index e43ec79..49a34e2 100644
--- a/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/PrivacySandboxApiGenerator.kt
+++ b/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/PrivacySandboxApiGenerator.kt
@@ -25,14 +25,16 @@
import androidx.privacysandbox.tools.core.generator.ClientProxyTypeGenerator
import androidx.privacysandbox.tools.core.generator.CoreLibInfoAndBinderWrapperConverterGenerator
import androidx.privacysandbox.tools.core.generator.GenerationTarget
-import androidx.privacysandbox.tools.core.generator.PrivacySandboxExceptionFileGenerator
import androidx.privacysandbox.tools.core.generator.PrivacySandboxCancellationExceptionFileGenerator
+import androidx.privacysandbox.tools.core.generator.PrivacySandboxExceptionFileGenerator
+import androidx.privacysandbox.tools.core.generator.SdkActivityLauncherProxyGenerator
import androidx.privacysandbox.tools.core.generator.ServiceFactoryFileGenerator
import androidx.privacysandbox.tools.core.generator.StubDelegatesGenerator
import androidx.privacysandbox.tools.core.generator.ThrowableParcelConverterFileGenerator
import androidx.privacysandbox.tools.core.generator.ValueConverterFileGenerator
import androidx.privacysandbox.tools.core.generator.ValueFileGenerator
import androidx.privacysandbox.tools.core.model.ParsedApi
+import androidx.privacysandbox.tools.core.model.containsSdkActivityLauncher
import androidx.privacysandbox.tools.core.model.getOnlyService
import androidx.privacysandbox.tools.core.model.hasSuspendFunctions
import androidx.privacysandbox.tools.core.proto.PrivacySandboxToolsProtocol.ToolMetadata
@@ -113,6 +115,7 @@
generateValueConverters(api, binderCodeConverter, output)
generateSuspendFunctionUtilities(api, basePackageName, output)
generateCoreLibInfoConverters(api, output)
+ generateSdkActivityLauncherUtilities(api, basePackageName, output)
}
private fun generateBinders(api: ParsedApi, aidlCompiler: AidlCompiler, output: File) {
@@ -188,6 +191,15 @@
}
}
+ private fun generateSdkActivityLauncherUtilities(
+ api: ParsedApi,
+ basePackageName: String,
+ output: File
+ ) {
+ if (!api.containsSdkActivityLauncher()) return
+ SdkActivityLauncherProxyGenerator(basePackageName).generate().writeTo(output)
+ }
+
private fun unzipDescriptorsFileAndParseStubs(
sdkInterfaceDescriptors: Path,
outputDirectory: Path,
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/java/androidx/privacysandbox/tools/apigenerator/parser/ApiStubParserTest.kt b/privacysandbox/tools/tools-apigenerator/src/test/java/androidx/privacysandbox/tools/apigenerator/parser/ApiStubParserTest.kt
index 4c4c071..4270602 100644
--- a/privacysandbox/tools/tools-apigenerator/src/test/java/androidx/privacysandbox/tools/apigenerator/parser/ApiStubParserTest.kt
+++ b/privacysandbox/tools/tools-apigenerator/src/test/java/androidx/privacysandbox/tools/apigenerator/parser/ApiStubParserTest.kt
@@ -26,6 +26,7 @@
import androidx.privacysandbox.tools.core.model.Types
import androidx.privacysandbox.tools.core.model.Types.asNullable
import androidx.privacysandbox.tools.core.model.ValueProperty
+import androidx.privacysandbox.tools.core.model.containsSdkActivityLauncher
import androidx.privacysandbox.tools.testing.CompilationTestHelper.assertCompiles
import androidx.room.compiler.processing.util.Source
import androidx.testutils.assertThrows
@@ -263,6 +264,97 @@
}
@Test
+ fun sandboxedUiAdapter_correctlyDetectedInService() {
+ val source = Source.kotlin(
+ "com/mysdk/MySdk.kt", """
+ import androidx.privacysandbox.tools.PrivacySandboxService
+ import androidx.privacysandbox.ui.core.SdkActivityLauncher
+ @PrivacySandboxService
+ interface MySdk {
+ fun useLauncher(launcher: SdkActivityLauncher)
+ }
+ """
+ )
+
+ assertThat(compileAndParseApi(source).containsSdkActivityLauncher()).isTrue()
+ }
+
+ @Test
+ fun sandboxedUiAdapter_correctlyDetectedInInterface() {
+ val source = Source.kotlin(
+ "com/mysdk/MySdk.kt", """
+ import androidx.privacysandbox.tools.PrivacySandboxService
+ import androidx.privacysandbox.tools.PrivacySandboxInterface
+ import androidx.privacysandbox.ui.core.SdkActivityLauncher
+ @PrivacySandboxService
+ interface MySdk
+
+ @PrivacySandboxInterface
+ interface MyInterface {
+ fun useLauncher(launcher: SdkActivityLauncher)
+ }
+ """
+ )
+
+ assertThat(compileAndParseApi(source).containsSdkActivityLauncher()).isTrue()
+ }
+
+ @Test
+ fun sandboxedUiAdapter_correctlyDetectedInCallback() {
+ val source = Source.kotlin(
+ "com/mysdk/MySdk.kt", """
+ import androidx.privacysandbox.tools.PrivacySandboxService
+ import androidx.privacysandbox.tools.PrivacySandboxCallback
+ import androidx.privacysandbox.ui.core.SdkActivityLauncher
+ @PrivacySandboxService
+ interface MySdk
+
+ @PrivacySandboxCallback
+ interface MyCallback {
+ fun useLauncher(launcher: SdkActivityLauncher)
+ }
+ """
+ )
+
+ assertThat(compileAndParseApi(source).containsSdkActivityLauncher()).isTrue()
+ }
+
+ @Test
+ fun sandboxedUiAdapter_correctlyDetectedInValue() {
+ val source = Source.kotlin(
+ "com/mysdk/MySdk.kt", """
+ import androidx.privacysandbox.tools.PrivacySandboxService
+ import androidx.privacysandbox.tools.PrivacySandboxValue
+ import androidx.privacysandbox.ui.core.SdkActivityLauncher
+ @PrivacySandboxService
+ interface MySdk
+
+ @PrivacySandboxValue
+ data class MyValue(val launcher: SdkActivityLauncher)
+ """
+ )
+
+ assertThat(compileAndParseApi(source).containsSdkActivityLauncher()).isTrue()
+ }
+
+ @Test
+ fun sandboxedUiAdapter_notDetectedWhenNotPresent() {
+ val source = Source.kotlin(
+ "com/mysdk/MySdk.kt", """
+ import androidx.privacysandbox.tools.PrivacySandboxService
+ // Deliberate unused import
+ import androidx.privacysandbox.ui.core.SdkActivityLauncher
+ @PrivacySandboxService
+ interface MySdk {
+ fun doStuff(input: String)
+ }
+ """
+ )
+
+ assertThat(compileAndParseApi(source).containsSdkActivityLauncher()).isFalse()
+ }
+
+ @Test
fun nonKotlinAnnotatedInterface_throws() {
val source = Source.java(
"com/mysdk/MySdk", """
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/callbacks/input/com/sdkwithcallbacks/SdkService.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/callbacks/input/com/sdkwithcallbacks/SdkService.kt
index 8f50038..ff49344 100644
--- a/privacysandbox/tools/tools-apigenerator/src/test/test-data/callbacks/input/com/sdkwithcallbacks/SdkService.kt
+++ b/privacysandbox/tools/tools-apigenerator/src/test/test-data/callbacks/input/com/sdkwithcallbacks/SdkService.kt
@@ -5,6 +5,7 @@
import androidx.privacysandbox.tools.PrivacySandboxValue
import androidx.privacysandbox.tools.PrivacySandboxInterface
import androidx.privacysandbox.ui.core.SandboxedUiAdapter
+import androidx.privacysandbox.ui.core.SdkActivityLauncher
@PrivacySandboxService
interface SdkService {
@@ -20,6 +21,8 @@
fun onEmptyEvent()
fun onCompleteInterface(myInterface: MyInterface)
+
+ fun onSdkActivityLauncherReceived(myLauncher: SdkActivityLauncher)
}
@PrivacySandboxValue
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/callbacks/output/com/sdkwithcallbacks/SdkActivityLauncherProxy.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/callbacks/output/com/sdkwithcallbacks/SdkActivityLauncherProxy.kt
new file mode 100644
index 0000000..b6407a6
--- /dev/null
+++ b/privacysandbox/tools/tools-apigenerator/src/test/test-data/callbacks/output/com/sdkwithcallbacks/SdkActivityLauncherProxy.kt
@@ -0,0 +1,50 @@
+package com.sdkwithcallbacks
+
+import android.os.Bundle
+import android.os.IBinder
+import androidx.privacysandbox.ui.client.toLauncherInfo
+import androidx.privacysandbox.ui.core.ISdkActivityLauncher
+import androidx.privacysandbox.ui.core.ISdkActivityLauncherCallback
+import androidx.privacysandbox.ui.core.SdkActivityLauncher
+import kotlin.coroutines.resume
+import kotlin.coroutines.resumeWithException
+import kotlinx.coroutines.suspendCancellableCoroutine
+
+public class SdkActivityLauncherProxy(
+ public val remote: ISdkActivityLauncher,
+ public val launcherInfo: Bundle,
+) : SdkActivityLauncher {
+ public override suspend fun launchSdkActivity(sdkActivityHandlerToken: IBinder): Boolean =
+ suspendCancellableCoroutine {
+ remote.launchSdkActivity(
+ sdkActivityHandlerToken,
+ object: ISdkActivityLauncherCallback.Stub() {
+ override fun onLaunchAccepted(sdkActivityHandlerToken: IBinder?) {
+ it.resume(true)
+ }
+ override fun onLaunchRejected(sdkActivityHandlerToken: IBinder?) {
+ it.resume(true)
+ }
+ override fun onLaunchError(message: String?) {
+ it.resumeWithException(RuntimeException(message))
+ }
+ }
+ )
+ }
+}
+
+public object SdkActivityLauncherConverter {
+ public fun getLocalOrProxyLauncher(launcherInfo: Bundle): SdkActivityLauncher {
+ val remote = launcherInfo.getBinder("sdkActivityLauncherBinderKey")
+ requireNotNull(remote) { "Invalid SdkActivityLauncher info bundle." }
+ val binder = ISdkActivityLauncher.Stub.asInterface(remote)
+ return SdkActivityLauncherProxy(binder, launcherInfo)
+ }
+
+ public fun toBinder(launcher: SdkActivityLauncher): Bundle {
+ if (launcher is SdkActivityLauncherProxy) {
+ return launcher.launcherInfo
+ }
+ return launcher.toLauncherInfo()
+ }
+}
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/callbacks/output/com/sdkwithcallbacks/SdkCallback.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/callbacks/output/com/sdkwithcallbacks/SdkCallback.kt
index 1e6c2d4..ec21831 100644
--- a/privacysandbox/tools/tools-apigenerator/src/test/test-data/callbacks/output/com/sdkwithcallbacks/SdkCallback.kt
+++ b/privacysandbox/tools/tools-apigenerator/src/test/test-data/callbacks/output/com/sdkwithcallbacks/SdkCallback.kt
@@ -1,5 +1,7 @@
package com.sdkwithcallbacks
+import androidx.privacysandbox.ui.core.SdkActivityLauncher
+
public interface SdkCallback {
public fun onCompleteInterface(myInterface: MyInterface): Unit
@@ -7,5 +9,7 @@
public fun onPrimitivesReceived(x: Int, y: Int): Unit
+ public fun onSdkActivityLauncherReceived(myLauncher: SdkActivityLauncher): Unit
+
public fun onValueReceived(response: Response): Unit
}
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/callbacks/output/com/sdkwithcallbacks/SdkCallbackStubDelegate.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/callbacks/output/com/sdkwithcallbacks/SdkCallbackStubDelegate.kt
index d103c41..3bc4ed5 100644
--- a/privacysandbox/tools/tools-apigenerator/src/test/test-data/callbacks/output/com/sdkwithcallbacks/SdkCallbackStubDelegate.kt
+++ b/privacysandbox/tools/tools-apigenerator/src/test/test-data/callbacks/output/com/sdkwithcallbacks/SdkCallbackStubDelegate.kt
@@ -1,6 +1,8 @@
package com.sdkwithcallbacks
+import android.os.Bundle
import com.sdkwithcallbacks.ResponseConverter.fromParcelable
+import com.sdkwithcallbacks.SdkActivityLauncherConverter.getLocalOrProxyLauncher
import kotlin.Int
import kotlin.Unit
import kotlinx.coroutines.CoroutineScope
@@ -30,6 +32,12 @@
}
}
+ public override fun onSdkActivityLauncherReceived(myLauncher: Bundle): Unit {
+ coroutineScope.launch {
+ delegate.onSdkActivityLauncherReceived(getLocalOrProxyLauncher(myLauncher))
+ }
+ }
+
public override fun onValueReceived(response: ParcelableResponse): Unit {
coroutineScope.launch {
delegate.onValueReceived(fromParcelable(response))
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/interfaces/input/com/sdk/MySdk.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/interfaces/input/com/sdk/MySdk.kt
index 74b3e78..413a47a 100644
--- a/privacysandbox/tools/tools-apigenerator/src/test/test-data/interfaces/input/com/sdk/MySdk.kt
+++ b/privacysandbox/tools/tools-apigenerator/src/test/test-data/interfaces/input/com/sdk/MySdk.kt
@@ -4,6 +4,7 @@
import androidx.privacysandbox.tools.PrivacySandboxInterface
import androidx.privacysandbox.tools.PrivacySandboxService
import androidx.privacysandbox.ui.core.SandboxedUiAdapter
+import androidx.privacysandbox.ui.core.SdkActivityLauncher
@PrivacySandboxService
interface MySdk {
@@ -21,6 +22,8 @@
fun doSomething(firstInterface: MyInterface, secondInterface: MySecondInterface)
fun doSomethingWithNullableInterface(maybeInterface: MySecondInterface?)
+
+ public fun doSomethingWithSdkActivityLauncher(launcher: SdkActivityLauncher)
}
@PrivacySandboxInterface
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/interfaces/output/com/sdk/MyInterface.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/interfaces/output/com/sdk/MyInterface.kt
index e04de66..cc0fb50 100644
--- a/privacysandbox/tools/tools-apigenerator/src/test/test-data/interfaces/output/com/sdk/MyInterface.kt
+++ b/privacysandbox/tools/tools-apigenerator/src/test/test-data/interfaces/output/com/sdk/MyInterface.kt
@@ -1,9 +1,13 @@
package com.sdk
+import androidx.privacysandbox.ui.core.SdkActivityLauncher
+
public interface MyInterface {
public suspend fun add(x: Int, y: Int): Int
public fun doSomething(firstInterface: MyInterface, secondInterface: MySecondInterface): Unit
public fun doSomethingWithNullableInterface(maybeInterface: MySecondInterface?): Unit
+
+ public fun doSomethingWithSdkActivityLauncher(launcher: SdkActivityLauncher): Unit
}
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/interfaces/output/com/sdk/MyInterfaceClientProxy.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/interfaces/output/com/sdk/MyInterfaceClientProxy.kt
index 05069c3..33c8b84 100644
--- a/privacysandbox/tools/tools-apigenerator/src/test/test-data/interfaces/output/com/sdk/MyInterfaceClientProxy.kt
+++ b/privacysandbox/tools/tools-apigenerator/src/test/test-data/interfaces/output/com/sdk/MyInterfaceClientProxy.kt
@@ -1,6 +1,8 @@
package com.sdk
+import androidx.privacysandbox.ui.core.SdkActivityLauncher
import com.sdk.PrivacySandboxThrowableParcelConverter.fromThrowableParcel
+import com.sdk.SdkActivityLauncherConverter.toBinder
import kotlin.coroutines.resumeWithException
import kotlinx.coroutines.suspendCancellableCoroutine
@@ -41,4 +43,8 @@
IMySecondInterfaceCoreLibInfoAndBinderWrapperConverter.toParcelable((notNullValue as
MySecondInterfaceClientProxy).coreLibInfo, notNullValue.remote) })
}
+
+ public override fun doSomethingWithSdkActivityLauncher(launcher: SdkActivityLauncher): Unit {
+ remote.doSomethingWithSdkActivityLauncher(toBinder(launcher))
+ }
}
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/interfaces/output/com/sdk/SdkActivityLauncherProxy.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/interfaces/output/com/sdk/SdkActivityLauncherProxy.kt
new file mode 100644
index 0000000..3f1becf
--- /dev/null
+++ b/privacysandbox/tools/tools-apigenerator/src/test/test-data/interfaces/output/com/sdk/SdkActivityLauncherProxy.kt
@@ -0,0 +1,50 @@
+package com.sdk
+
+import android.os.Bundle
+import android.os.IBinder
+import androidx.privacysandbox.ui.client.toLauncherInfo
+import androidx.privacysandbox.ui.core.ISdkActivityLauncher
+import androidx.privacysandbox.ui.core.ISdkActivityLauncherCallback
+import androidx.privacysandbox.ui.core.SdkActivityLauncher
+import kotlin.coroutines.resume
+import kotlin.coroutines.resumeWithException
+import kotlinx.coroutines.suspendCancellableCoroutine
+
+public class SdkActivityLauncherProxy(
+ public val remote: ISdkActivityLauncher,
+ public val launcherInfo: Bundle,
+) : SdkActivityLauncher {
+ public override suspend fun launchSdkActivity(sdkActivityHandlerToken: IBinder): Boolean =
+ suspendCancellableCoroutine {
+ remote.launchSdkActivity(
+ sdkActivityHandlerToken,
+ object: ISdkActivityLauncherCallback.Stub() {
+ override fun onLaunchAccepted(sdkActivityHandlerToken: IBinder?) {
+ it.resume(true)
+ }
+ override fun onLaunchRejected(sdkActivityHandlerToken: IBinder?) {
+ it.resume(true)
+ }
+ override fun onLaunchError(message: String?) {
+ it.resumeWithException(RuntimeException(message))
+ }
+ }
+ )
+ }
+}
+
+public object SdkActivityLauncherConverter {
+ public fun getLocalOrProxyLauncher(launcherInfo: Bundle): SdkActivityLauncher {
+ val remote = launcherInfo.getBinder("sdkActivityLauncherBinderKey")
+ requireNotNull(remote) { "Invalid SdkActivityLauncher info bundle." }
+ val binder = ISdkActivityLauncher.Stub.asInterface(remote)
+ return SdkActivityLauncherProxy(binder, launcherInfo)
+ }
+
+ public fun toBinder(launcher: SdkActivityLauncher): Bundle {
+ if (launcher is SdkActivityLauncherProxy) {
+ return launcher.launcherInfo
+ }
+ return launcher.toLauncherInfo()
+ }
+}
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/input/com/sdkwithvalues/SdkInterface.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/input/com/sdkwithvalues/SdkInterface.kt
index 91b8904..f6b969b 100644
--- a/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/input/com/sdkwithvalues/SdkInterface.kt
+++ b/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/input/com/sdkwithvalues/SdkInterface.kt
@@ -4,6 +4,7 @@
import androidx.privacysandbox.tools.PrivacySandboxService
import androidx.privacysandbox.tools.PrivacySandboxValue
import androidx.privacysandbox.ui.core.SandboxedUiAdapter
+import androidx.privacysandbox.ui.core.SdkActivityLauncher
@PrivacySandboxService
interface SdkInterface {
@@ -35,7 +36,8 @@
val id: Long,
val innerValue: InnerSdkValue,
val maybeInnerValue: InnerSdkValue?,
- val moreValues: List<InnerSdkValue>
+ val moreValues: List<InnerSdkValue>,
+ val activityLauncher: SdkActivityLauncher,
)
@PrivacySandboxValue
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkActivityLauncherProxy.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkActivityLauncherProxy.kt
new file mode 100644
index 0000000..ed632db
--- /dev/null
+++ b/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkActivityLauncherProxy.kt
@@ -0,0 +1,50 @@
+package com.sdkwithvalues
+
+import android.os.Bundle
+import android.os.IBinder
+import androidx.privacysandbox.ui.client.toLauncherInfo
+import androidx.privacysandbox.ui.core.ISdkActivityLauncher
+import androidx.privacysandbox.ui.core.ISdkActivityLauncherCallback
+import androidx.privacysandbox.ui.core.SdkActivityLauncher
+import kotlin.coroutines.resume
+import kotlin.coroutines.resumeWithException
+import kotlinx.coroutines.suspendCancellableCoroutine
+
+public class SdkActivityLauncherProxy(
+ public val remote: ISdkActivityLauncher,
+ public val launcherInfo: Bundle,
+) : SdkActivityLauncher {
+ public override suspend fun launchSdkActivity(sdkActivityHandlerToken: IBinder): Boolean =
+ suspendCancellableCoroutine {
+ remote.launchSdkActivity(
+ sdkActivityHandlerToken,
+ object: ISdkActivityLauncherCallback.Stub() {
+ override fun onLaunchAccepted(sdkActivityHandlerToken: IBinder?) {
+ it.resume(true)
+ }
+ override fun onLaunchRejected(sdkActivityHandlerToken: IBinder?) {
+ it.resume(true)
+ }
+ override fun onLaunchError(message: String?) {
+ it.resumeWithException(RuntimeException(message))
+ }
+ }
+ )
+ }
+}
+
+public object SdkActivityLauncherConverter {
+ public fun getLocalOrProxyLauncher(launcherInfo: Bundle): SdkActivityLauncher {
+ val remote = launcherInfo.getBinder("sdkActivityLauncherBinderKey")
+ requireNotNull(remote) { "Invalid SdkActivityLauncher info bundle." }
+ val binder = ISdkActivityLauncher.Stub.asInterface(remote)
+ return SdkActivityLauncherProxy(binder, launcherInfo)
+ }
+
+ public fun toBinder(launcher: SdkActivityLauncher): Bundle {
+ if (launcher is SdkActivityLauncherProxy) {
+ return launcher.launcherInfo
+ }
+ return launcher.toLauncherInfo()
+ }
+}
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkRequest.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkRequest.kt
index 6a0b509..31de0c3 100644
--- a/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkRequest.kt
+++ b/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkRequest.kt
@@ -1,8 +1,11 @@
package com.sdkwithvalues
+import androidx.privacysandbox.ui.core.SdkActivityLauncher
+
public data class SdkRequest(
public val id: Long,
public val innerValue: InnerSdkValue,
public val maybeInnerValue: InnerSdkValue?,
public val moreValues: List<InnerSdkValue>,
+ public val activityLauncher: SdkActivityLauncher,
)
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkRequestConverter.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkRequestConverter.kt
index 7e69d94..297867f 100644
--- a/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkRequestConverter.kt
+++ b/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkRequestConverter.kt
@@ -1,5 +1,8 @@
package com.sdkwithvalues
+import com.sdkwithvalues.SdkActivityLauncherConverter.getLocalOrProxyLauncher
+import com.sdkwithvalues.SdkActivityLauncherConverter.toBinder
+
public object SdkRequestConverter {
public fun fromParcelable(parcelable: ParcelableSdkRequest): SdkRequest {
val annotatedValue = SdkRequest(
@@ -9,7 +12,8 @@
maybeInnerValue = parcelable.maybeInnerValue?.let { notNullValue ->
com.sdkwithvalues.InnerSdkValueConverter.fromParcelable(notNullValue) },
moreValues = parcelable.moreValues.map {
- com.sdkwithvalues.InnerSdkValueConverter.fromParcelable(it) }.toList())
+ com.sdkwithvalues.InnerSdkValueConverter.fromParcelable(it) }.toList(),
+ activityLauncher = getLocalOrProxyLauncher(parcelable.activityLauncher))
return annotatedValue
}
@@ -22,6 +26,7 @@
com.sdkwithvalues.InnerSdkValueConverter.toParcelable(notNullValue) }
parcelable.moreValues = annotatedValue.moreValues.map {
com.sdkwithvalues.InnerSdkValueConverter.toParcelable(it) }.toTypedArray()
+ parcelable.activityLauncher = toBinder(annotatedValue.activityLauncher)
return parcelable
}
}
diff --git a/privacysandbox/tools/tools-apipackager/build.gradle b/privacysandbox/tools/tools-apipackager/build.gradle
index 19089d3..006779b 100644
--- a/privacysandbox/tools/tools-apipackager/build.gradle
+++ b/privacysandbox/tools/tools-apipackager/build.gradle
@@ -15,6 +15,8 @@
*/
import androidx.build.LibraryType
+import androidx.build.SdkHelperKt
+import androidx.build.SupportConfig
plugins {
id("AndroidXPlugin")
@@ -35,6 +37,13 @@
testImplementation(project(":room:room-compiler-processing-testing"))
testImplementation(libs.junit)
testImplementation(libs.truth)
+
+ // TODO(b/281638337): Remove below dependency once SdkActivityLauncher stubs are removed
+ // Include android jar for compilation of generated sources.
+ testImplementation(fileTree(
+ dir: "${SdkHelperKt.getSdkPath(project)}/platforms/$SupportConfig.COMPILE_SDK_VERSION/",
+ include: "android.jar"
+ ))
}
androidx {
diff --git a/privacysandbox/tools/tools-apipackager/src/main/java/androidx/privacysandbox/tools/apipackager/PrivacySandboxApiPackager.kt b/privacysandbox/tools/tools-apipackager/src/main/java/androidx/privacysandbox/tools/apipackager/PrivacySandboxApiPackager.kt
index 382927c..8471190 100644
--- a/privacysandbox/tools/tools-apipackager/src/main/java/androidx/privacysandbox/tools/apipackager/PrivacySandboxApiPackager.kt
+++ b/privacysandbox/tools/tools-apipackager/src/main/java/androidx/privacysandbox/tools/apipackager/PrivacySandboxApiPackager.kt
@@ -17,15 +17,15 @@
package androidx.privacysandbox.tools.apipackager
import androidx.privacysandbox.tools.apipackager.AnnotationInspector.hasPrivacySandboxAnnotation
+import androidx.privacysandbox.tools.core.Metadata
import java.nio.file.Path
import java.util.zip.ZipEntry
import java.util.zip.ZipOutputStream
import kotlin.io.path.exists
-import kotlin.io.path.isDirectory
-import kotlin.io.path.notExists
-import androidx.privacysandbox.tools.core.Metadata
import kotlin.io.path.extension
import kotlin.io.path.inputStream
+import kotlin.io.path.isDirectory
+import kotlin.io.path.notExists
class PrivacySandboxApiPackager {
diff --git a/privacysandbox/tools/tools-apipackager/src/test/java/androidx/privacysandbox/tools/apipackager/PrivacySandboxApiPackagerTest.kt b/privacysandbox/tools/tools-apipackager/src/test/java/androidx/privacysandbox/tools/apipackager/PrivacySandboxApiPackagerTest.kt
index e537412..eb4b128 100644
--- a/privacysandbox/tools/tools-apipackager/src/test/java/androidx/privacysandbox/tools/apipackager/PrivacySandboxApiPackagerTest.kt
+++ b/privacysandbox/tools/tools-apipackager/src/test/java/androidx/privacysandbox/tools/apipackager/PrivacySandboxApiPackagerTest.kt
@@ -208,7 +208,7 @@
/** Compiles the given source file and returns a classpath with the results. */
private fun compileAndReturnUnzippedPackagedClasspath(source: Source): File {
- val result = compileAll(listOf(source))
+ val result = compileAll(listOf(source), includeLibraryStubs = false)
assertThat(result).succeeds()
assertThat(result.outputClasspath).hasSize(1)
@@ -221,7 +221,7 @@
generateSequence { input.nextEntry }
.forEach {
val file: File = outputDir.resolve(it.name)
- file.parentFile.mkdirs()
+ file.parentFile?.mkdirs()
file.createNewFile()
input.copyTo(file.outputStream())
}
diff --git a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/AidlGenerator.kt b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/AidlGenerator.kt
index 2cf4f2f..abb403b 100644
--- a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/AidlGenerator.kt
+++ b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/AidlGenerator.kt
@@ -118,10 +118,7 @@
private fun uiAidlWrapper(annotatedInterface: AnnotatedInterface) =
aidlParcelable(annotatedInterface.uiAdapterAidlWrapper()) {
- addProperty(
- "coreLibInfo",
- AidlTypeSpec(bundleType(), kind = AidlTypeKind.PARCELABLE)
- )
+ addProperty("coreLibInfo", bundleAidlType)
addProperty("binder", annotatedInterface.aidlType())
}
@@ -246,7 +243,12 @@
private fun throwableParcelType() = Type(packageName(), throwableParcelName)
private fun parcelableStackFrameType() = Type(packageName(), parcelableStackFrameName)
- private fun bundleType() = Type("android.os", "Bundle")
+ private val bundleType = Type("android.os", "Bundle")
+ private val bundleAidlType =
+ AidlTypeSpec(
+ bundleType,
+ AidlTypeKind.PARCELABLE
+ )
private fun transactionCallback(type: Type) =
AidlTypeSpec(
@@ -276,6 +278,7 @@
Short::class.qualifiedName -> primitive("int")
Unit::class.qualifiedName -> primitive("void")
List::class.qualifiedName -> getAidlTypeDeclaration(type.typeParameters[0]).listSpec()
+ Types.sdkActivityLauncher.qualifiedName -> bundleAidlType
else -> throw IllegalArgumentException(
"Unsupported type conversion ${type.qualifiedName}"
)
diff --git a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/BinderCodeConverter.kt b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/BinderCodeConverter.kt
index 0ef84b3e..fbcc1f1 100644
--- a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/BinderCodeConverter.kt
+++ b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/BinderCodeConverter.kt
@@ -16,6 +16,7 @@
package androidx.privacysandbox.tools.core.generator
+import androidx.privacysandbox.tools.core.generator.SpecNames.bundleClass
import androidx.privacysandbox.tools.core.generator.SpecNames.contextPropertyName
import androidx.privacysandbox.tools.core.model.AnnotatedInterface
import androidx.privacysandbox.tools.core.model.AnnotatedValue
@@ -80,6 +81,9 @@
CodeBlock.of(".map { %L }", convertToModelCodeBlock)
)
}
+ if (type.qualifiedName == Types.sdkActivityLauncher.qualifiedName) {
+ return convertToActivityLauncherModelCode(expression)
+ }
if (type == Types.short) {
return CodeBlock.of("%L.toShort()", expression)
}
@@ -140,6 +144,9 @@
toBinderList(type.typeParameters[0])
)
}
+ if (type.qualifiedName == Types.sdkActivityLauncher.qualifiedName) {
+ return convertToActivityLauncherBinderCode(expression)
+ }
if (type == Types.short) {
return CodeBlock.of("%L.toInt()", expression)
}
@@ -166,6 +173,10 @@
expression: String
): CodeBlock
+ protected abstract fun convertToActivityLauncherBinderCode(expression: String): CodeBlock
+
+ protected abstract fun convertToActivityLauncherModelCode(expression: String): CodeBlock
+
protected abstract fun convertToInterfaceBinderType(
annotatedInterface: AnnotatedInterface
): TypeName
@@ -215,6 +226,8 @@
}
if (type.qualifiedName == List::class.qualifiedName)
return convertToBinderListType(type.typeParameters[0])
+ if (type.qualifiedName == Types.sdkActivityLauncher.qualifiedName)
+ return bundleClass
return type.poetTypeName()
}
diff --git a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ClientBinderCodeConverter.kt b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ClientBinderCodeConverter.kt
index 103a40a..414d1cd 100644
--- a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ClientBinderCodeConverter.kt
+++ b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ClientBinderCodeConverter.kt
@@ -16,17 +16,21 @@
package androidx.privacysandbox.tools.core.generator
+import androidx.privacysandbox.tools.core.generator.SdkActivityLauncherProxyGenerator.Companion.converterClassName
import androidx.privacysandbox.tools.core.generator.SpecNames.contextPropertyName
import androidx.privacysandbox.tools.core.generator.ValueConverterFileGenerator.Companion.toParcelableMethodName
import androidx.privacysandbox.tools.core.model.AnnotatedInterface
import androidx.privacysandbox.tools.core.model.AnnotatedValue
import androidx.privacysandbox.tools.core.model.ParsedApi
+import androidx.privacysandbox.tools.core.model.getOnlyService
import com.squareup.kotlinpoet.ClassName
import com.squareup.kotlinpoet.CodeBlock
import com.squareup.kotlinpoet.MemberName
import com.squareup.kotlinpoet.TypeName
class ClientBinderCodeConverter(api: ParsedApi) : BinderCodeConverter(api) {
+ private val basePackageName = api.getOnlyService().type.packageName
+ private val activityLauncherConverterClass = ClassName(basePackageName, converterClassName)
override fun convertToInterfaceModelCode(
annotatedInterface: AnnotatedInterface,
@@ -97,4 +101,18 @@
),
expression,
)
+
+ override fun convertToActivityLauncherBinderCode(expression: String): CodeBlock =
+ CodeBlock.of(
+ "%M(%L)",
+ MemberName(activityLauncherConverterClass, "toBinder"),
+ expression,
+ )
+
+ override fun convertToActivityLauncherModelCode(expression: String): CodeBlock =
+ CodeBlock.of(
+ "%M(%L)",
+ MemberName(activityLauncherConverterClass, "getLocalOrProxyLauncher"),
+ expression,
+ )
}
\ No newline at end of file
diff --git a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/KotlinPoetSpecs.kt b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/KotlinPoetSpecs.kt
index 2a68daf..123a0f6 100644
--- a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/KotlinPoetSpecs.kt
+++ b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/KotlinPoetSpecs.kt
@@ -148,6 +148,7 @@
const val contextPropertyName = "context"
// Kotlin coroutines
+ val resumeMethod = MemberName("kotlin.coroutines", "resume", isExtension = true)
val resumeWithExceptionMethod =
MemberName("kotlin.coroutines", "resumeWithException", isExtension = true)
val cancellationExceptionClass =
diff --git a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/SdkActivityLauncherProxyGenerator.kt b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/SdkActivityLauncherProxyGenerator.kt
new file mode 100644
index 0000000..840d30c
--- /dev/null
+++ b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/SdkActivityLauncherProxyGenerator.kt
@@ -0,0 +1,149 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.privacysandbox.tools.core.generator
+
+import androidx.privacysandbox.tools.core.generator.SpecNames.iBinderClass
+import androidx.privacysandbox.tools.core.generator.SpecNames.resumeMethod
+import androidx.privacysandbox.tools.core.generator.SpecNames.resumeWithExceptionMethod
+import androidx.privacysandbox.tools.core.generator.SpecNames.suspendCancellableCoroutineMethod
+import androidx.privacysandbox.tools.core.model.Types
+import com.squareup.kotlinpoet.ClassName
+import com.squareup.kotlinpoet.FileSpec
+import com.squareup.kotlinpoet.FunSpec
+import com.squareup.kotlinpoet.KModifier
+import com.squareup.kotlinpoet.MemberName
+import com.squareup.kotlinpoet.PropertySpec
+import com.squareup.kotlinpoet.TypeSpec
+
+/**
+ * Used in client-side code generation to ensure that `SdkActivityLauncher`s are not repeatedly
+ * repackaged into binders.
+ */
+class SdkActivityLauncherProxyGenerator(private val basePackageName: String) {
+ companion object {
+ const val proxyClassName = "SdkActivityLauncherProxy"
+ const val converterClassName = "SdkActivityLauncherConverter"
+ val iSdkActivityLauncher = ClassName(
+ "androidx.privacysandbox.ui.core",
+ "ISdkActivityLauncher"
+ )
+ }
+
+ fun generate(): FileSpec {
+ val classSpec = TypeSpec.classBuilder(proxyClassName).build {
+ addSuperinterface(Types.sdkActivityLauncher.poetClassName())
+ addModifiers(KModifier.PUBLIC)
+ primaryConstructor(
+ listOf(
+ PropertySpec.builder("remote", iSdkActivityLauncher).build(),
+ PropertySpec.builder(
+ "launcherInfo",
+ SpecNames.bundleClass,
+ ).build(),
+ ),
+ )
+ addFunction(launchSdkActivityFunSpec())
+ }
+
+ return FileSpec.builder(basePackageName, proxyClassName).build {
+ addCommonSettings()
+ addType(classSpec)
+ addType(converterObjectSpec())
+ }
+ }
+
+ private fun launchSdkActivityFunSpec() = FunSpec.builder("launchSdkActivity").build {
+ val transactionCallbackName = ClassName(
+ "androidx.privacysandbox.ui.core",
+ "ISdkActivityLauncherCallback",
+ "Stub"
+ )
+ val tokenParameterName = "sdkActivityHandlerToken"
+
+ addModifiers(KModifier.PUBLIC)
+ addModifiers(KModifier.OVERRIDE)
+ addModifiers(KModifier.SUSPEND)
+ addParameter(tokenParameterName, iBinderClass)
+ returns(Boolean::class)
+ addCode {
+ addControlFlow("return %M", suspendCancellableCoroutineMethod) {
+ addStatement("remote.launchSdkActivity(")
+ indent()
+ addStatement("%L,", tokenParameterName)
+ addControlFlow("object: %T()", transactionCallbackName) {
+ addControlFlow(
+ "override fun onLaunchAccepted(%L: %T?)",
+ tokenParameterName,
+ iBinderClass,
+ ) {
+ addStatement("it.%M(true)", resumeMethod)
+ }
+ addControlFlow(
+ "override fun onLaunchRejected(%L: %T?)",
+ tokenParameterName,
+ iBinderClass,
+ ) {
+ addStatement("it.%M(true)", resumeMethod)
+ }
+ addControlFlow("override fun onLaunchError(message: String?)") {
+ addStatement("it.%M(RuntimeException(message))", resumeWithExceptionMethod)
+ }
+ }
+ unindent()
+ addStatement(")")
+ }
+ }
+ }
+
+ private fun converterObjectSpec() =
+ TypeSpec.objectBuilder("SdkActivityLauncherConverter").build {
+ val proxyPoetClassName = ClassName(basePackageName, proxyClassName)
+
+ addFunction(FunSpec.builder("getLocalOrProxyLauncher").build {
+ addParameter("launcherInfo", SpecNames.bundleClass)
+ returns(Types.sdkActivityLauncher.poetTypeName())
+ addStatement(
+ """val remote = launcherInfo.getBinder("sdkActivityLauncherBinderKey")"""
+ )
+ addStatement(
+ """requireNotNull(remote) { "Invalid SdkActivityLauncher info bundle." }"""
+ )
+ addStatement(
+ "val binder = %T.Stub.asInterface(remote)",
+ iSdkActivityLauncher,
+ )
+ addStatement("return SdkActivityLauncherProxy(binder, launcherInfo)")
+ })
+
+ addFunction(FunSpec.builder("toBinder").build {
+ addParameter("launcher", Types.sdkActivityLauncher.poetClassName())
+ returns(SpecNames.bundleClass)
+ addCode {
+ addControlFlow("if (launcher is %T)", proxyPoetClassName) {
+ addStatement("return launcher.launcherInfo")
+ }
+ }
+ addStatement(
+ "return launcher.%M()",
+ MemberName(
+ "androidx.privacysandbox.ui.client",
+ "toLauncherInfo"
+ )
+ )
+ })
+ }
+}
diff --git a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/SdkActivityLauncherWrapperGenerator.kt b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/SdkActivityLauncherWrapperGenerator.kt
new file mode 100644
index 0000000..a90a3ef
--- /dev/null
+++ b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/SdkActivityLauncherWrapperGenerator.kt
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.privacysandbox.tools.core.generator
+
+import androidx.privacysandbox.tools.core.model.Types
+import com.squareup.kotlinpoet.ClassName
+import com.squareup.kotlinpoet.CodeBlock
+import com.squareup.kotlinpoet.FileSpec
+import com.squareup.kotlinpoet.FunSpec
+import com.squareup.kotlinpoet.KModifier
+import com.squareup.kotlinpoet.PropertySpec
+import com.squareup.kotlinpoet.TypeSpec
+
+/**
+ * Used in server-side code generation to ensure that `SdkActivityLauncher`s are not repeatedly
+ * repackaged into binders.
+ */
+class SdkActivityLauncherWrapperGenerator(private val basePackageName: String) {
+ companion object {
+ const val className = "SdkActivityLauncherAndBinderWrapper"
+ }
+
+ fun generate(): FileSpec {
+ val classSpec = TypeSpec.classBuilder(className).build {
+ addSuperinterface(Types.sdkActivityLauncher.poetClassName(), CodeBlock.of("delegate"))
+ addModifiers(KModifier.PUBLIC)
+ primaryConstructor(
+ listOf(
+ PropertySpec.builder(
+ "delegate",
+ Types.sdkActivityLauncher.poetTypeName(),
+ ).addModifiers(KModifier.PRIVATE).build(),
+ PropertySpec.builder(
+ "launcherInfo",
+ SpecNames.bundleClass,
+ ).build(),
+ ),
+ KModifier.PRIVATE,
+ )
+ addFunction(
+ FunSpec.constructorBuilder()
+ .addParameter("launcherInfo", SpecNames.bundleClass)
+ .callThisConstructor(
+ CodeBlock.of(
+ "%T.fromLauncherInfo(launcherInfo)",
+ ClassName(
+ "androidx.privacysandbox.ui.provider",
+ "SdkActivityLauncherFactory"
+ ),
+ ),
+ CodeBlock.of("launcherInfo"),
+ ).build()
+ )
+ }
+
+ return FileSpec.builder(basePackageName, className).build {
+ addCommonSettings()
+ addType(classSpec)
+ }
+ }
+}
diff --git a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ServerBinderCodeConverter.kt b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ServerBinderCodeConverter.kt
index 623aa51..2eb9f88 100644
--- a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ServerBinderCodeConverter.kt
+++ b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ServerBinderCodeConverter.kt
@@ -23,11 +23,18 @@
import androidx.privacysandbox.tools.core.model.AnnotatedInterface
import androidx.privacysandbox.tools.core.model.AnnotatedValue
import androidx.privacysandbox.tools.core.model.ParsedApi
+import androidx.privacysandbox.tools.core.model.getOnlyService
import com.squareup.kotlinpoet.ClassName
import com.squareup.kotlinpoet.CodeBlock
import com.squareup.kotlinpoet.TypeName
class ServerBinderCodeConverter(private val api: ParsedApi) : BinderCodeConverter(api) {
+ private val basePackageName = api.getOnlyService().type.packageName
+ private val activityLauncherWrapperClass = ClassName(
+ basePackageName,
+ SdkActivityLauncherWrapperGenerator.className
+ )
+
override fun convertToInterfaceModelCode(
annotatedInterface: AnnotatedInterface,
expression: String
@@ -99,4 +106,14 @@
fromParcelableMethodName,
expression,
)
+
+ override fun convertToActivityLauncherBinderCode(expression: String): CodeBlock =
+ CodeBlock.of(
+ "(%L as %T).launcherInfo",
+ expression,
+ activityLauncherWrapperClass,
+ )
+
+ override fun convertToActivityLauncherModelCode(expression: String): CodeBlock =
+ CodeBlock.of("%T(%L)", activityLauncherWrapperClass, expression)
}
\ No newline at end of file
diff --git a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ServiceFactoryFileGenerator.kt b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ServiceFactoryFileGenerator.kt
index ffc5941..99979ab 100644
--- a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ServiceFactoryFileGenerator.kt
+++ b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ServiceFactoryFileGenerator.kt
@@ -16,8 +16,8 @@
package androidx.privacysandbox.tools.core.generator
-import androidx.privacysandbox.tools.internal.GeneratedPublicApi
import androidx.privacysandbox.tools.core.model.AnnotatedInterface
+import androidx.privacysandbox.tools.internal.GeneratedPublicApi
import com.squareup.kotlinpoet.AnnotationSpec
import com.squareup.kotlinpoet.ClassName
import com.squareup.kotlinpoet.FileSpec
diff --git a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ValueConverterFileGenerator.kt b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ValueConverterFileGenerator.kt
index e5e0ba2..e2d5768 100644
--- a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ValueConverterFileGenerator.kt
+++ b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ValueConverterFileGenerator.kt
@@ -16,9 +16,9 @@
package androidx.privacysandbox.tools.core.generator
+import androidx.privacysandbox.tools.core.generator.GenerationTarget.SERVER
import androidx.privacysandbox.tools.core.generator.SpecNames.contextClass
import androidx.privacysandbox.tools.core.generator.SpecNames.contextPropertyName
-import androidx.privacysandbox.tools.core.generator.GenerationTarget.SERVER
import androidx.privacysandbox.tools.core.model.AnnotatedValue
import androidx.privacysandbox.tools.core.model.ValueProperty
import com.squareup.kotlinpoet.CodeBlock
diff --git a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/model/Models.kt b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/model/Models.kt
index 88245e9..15d0e4b 100644
--- a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/model/Models.kt
+++ b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/model/Models.kt
@@ -30,6 +30,26 @@
.any(Method::isSuspend)
}
+fun ParsedApi.containsSdkActivityLauncher(): Boolean {
+ return values.any { it.containsSdkActivityLauncher() } ||
+ interfaces.any { it.containsSdkActivityLauncher() } ||
+ callbacks.any { it.containsSdkActivityLauncher() } ||
+ services.any { it.containsSdkActivityLauncher() }
+}
+
+private fun AnnotatedInterface.containsSdkActivityLauncher(): Boolean {
+ val isInReturns = methods
+ .any { it.returnType.qualifiedName == Types.sdkActivityLauncher.qualifiedName }
+ val isInParams = methods
+ .flatMap { it.parameters }
+ .any { it.type.qualifiedName == Types.sdkActivityLauncher.qualifiedName }
+
+ return isInReturns || isInParams
+}
+
+private fun AnnotatedValue.containsSdkActivityLauncher(): Boolean =
+ properties.any { it.type.qualifiedName == Types.sdkActivityLauncher.qualifiedName }
+
object Types {
val unit = Type(packageName = "kotlin", simpleName = "Unit")
val boolean = Type(packageName = "kotlin", simpleName = "Boolean")
@@ -45,6 +65,8 @@
val any = Type("kotlin", simpleName = "Any")
val sandboxedUiAdapter =
Type(packageName = "androidx.privacysandbox.ui.core", simpleName = "SandboxedUiAdapter")
+ val sdkActivityLauncher =
+ Type(packageName = "androidx.privacysandbox.ui.core", simpleName = "SdkActivityLauncher")
fun list(elementType: Type) = Type(
packageName = "kotlin.collections",
@@ -57,6 +79,7 @@
return this
return copy(isNullable = true)
}
+
fun Type.asNonNull(): Type {
if (isNullable)
return copy(isNullable = false)
diff --git a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/validator/ModelValidator.kt b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/validator/ModelValidator.kt
index bc6aeb5..2d75370 100644
--- a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/validator/ModelValidator.kt
+++ b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/validator/ModelValidator.kt
@@ -93,17 +93,18 @@
errors.add(
"Error in ${annotatedInterface.type.qualifiedName}.${method.name}: " +
"only primitives, lists, data classes annotated with " +
- "@PrivacySandboxValue and interfaces annotated with " +
- "@PrivacySandboxCallback or @PrivacySandboxInterface are supported " +
- "as parameter types."
+ "@PrivacySandboxValue, interfaces annotated with " +
+ "@PrivacySandboxCallback or @PrivacySandboxInterface, and " +
+ "SdkActivityLaunchers are supported as parameter types."
)
}
if (!isValidInterfaceReturnType(method.returnType)) {
errors.add(
"Error in ${annotatedInterface.type.qualifiedName}.${method.name}: " +
"only primitives, lists, data classes annotated with " +
- "@PrivacySandboxValue and interfaces annotated with " +
- "@PrivacySandboxInterface are supported as return types."
+ "@PrivacySandboxValue, interfaces annotated with " +
+ "@PrivacySandboxInterface, and SdkActivityLaunchers are supported as " +
+ "return types."
)
}
}
@@ -117,8 +118,9 @@
errors.add(
"Error in ${value.type.qualifiedName}.${property.name}: " +
"only primitives, lists, data classes annotated with " +
- "@PrivacySandboxValue and interfaces annotated with " +
- "@PrivacySandboxInterface are supported as properties."
+ "@PrivacySandboxValue, interfaces annotated with " +
+ "@PrivacySandboxInterface, and SdkActivityLaunchers are supported as " +
+ "properties."
)
}
}
@@ -132,8 +134,9 @@
errors.add(
"Error in ${callback.type.qualifiedName}.${method.name}: " +
"only primitives, lists, data classes annotated with " +
- "@PrivacySandboxValue and interfaces annotated with " +
- "@PrivacySandboxInterface are supported as callback parameter types."
+ "@PrivacySandboxValue, interfaces annotated with " +
+ "@PrivacySandboxInterface, and SdkActivityLaunchers are supported as " +
+ "callback parameter types."
)
}
if (method.returnType != Types.unit || method.isSuspend) {
@@ -147,13 +150,20 @@
}
private fun isValidInterfaceParameterType(type: Type) =
- isValue(type) || isInterface(type) || isPrimitive(type) || isList(type) || isCallback(type)
+ isValue(type) || isInterface(type) || isPrimitive(type) || isList(type) ||
+ isCallback(type) || isBundledType(type)
+
private fun isValidInterfaceReturnType(type: Type) =
- isValue(type) || isInterface(type) || isPrimitive(type) || isList(type)
+ isValue(type) || isInterface(type) || isPrimitive(type) || isList(type) ||
+ isBundledType(type)
+
private fun isValidValuePropertyType(type: Type) =
- isValue(type) || isInterface(type) || isPrimitive(type) || isList(type)
+ isValue(type) || isInterface(type) || isPrimitive(type) || isList(type) ||
+ isBundledType(type)
+
private fun isValidCallbackParameterType(type: Type) =
- isValue(type) || isInterface(type) || isPrimitive(type) || isList(type)
+ isValue(type) || isInterface(type) || isPrimitive(type) || isList(type) ||
+ isBundledType(type)
private fun isValue(type: Type) = values.contains(type.asNonNull())
private fun isInterface(type: Type) = interfaces.contains(type.asNonNull())
@@ -171,6 +181,8 @@
}
return false
}
+
+ private fun isBundledType(type: Type) = type == Types.sdkActivityLauncher
}
data class ValidationResult(val errors: List<String>) {
diff --git a/privacysandbox/tools/tools-core/src/test/java/androidx/privacysandbox/tools/core/generator/AidlInterfaceGeneratorTest.kt b/privacysandbox/tools/tools-core/src/test/java/androidx/privacysandbox/tools/core/generator/AidlInterfaceGeneratorTest.kt
index 780e27c..a536da8 100644
--- a/privacysandbox/tools/tools-core/src/test/java/androidx/privacysandbox/tools/core/generator/AidlInterfaceGeneratorTest.kt
+++ b/privacysandbox/tools/tools-core/src/test/java/androidx/privacysandbox/tools/core/generator/AidlInterfaceGeneratorTest.kt
@@ -72,7 +72,15 @@
parameters = listOf(),
returnType = Type("com.mysdk", "MyInterface"),
isSuspend = true,
- )
+ ),
+ Method(
+ name = "methodWithActivityLauncherParam",
+ parameters = listOf(
+ Parameter("activityLauncher", Types.sdkActivityLauncher)
+ ),
+ returnType = Types.unit,
+ isSuspend = false,
+ ),
)
)
)
diff --git a/privacysandbox/tools/tools-core/src/test/java/androidx/privacysandbox/tools/core/validator/ModelValidatorTest.kt b/privacysandbox/tools/tools-core/src/test/java/androidx/privacysandbox/tools/core/validator/ModelValidatorTest.kt
index ab69a85..4c7181a 100644
--- a/privacysandbox/tools/tools-core/src/test/java/androidx/privacysandbox/tools/core/validator/ModelValidatorTest.kt
+++ b/privacysandbox/tools/tools-core/src/test/java/androidx/privacysandbox/tools/core/validator/ModelValidatorTest.kt
@@ -148,7 +148,7 @@
)
)
)
- ),
+ ),
)
assertThat(ModelValidator.validate(api).isSuccess).isTrue()
}
@@ -264,12 +264,12 @@
assertThat(validationResult.isFailure).isTrue()
assertThat(validationResult.errors).containsExactly(
"Error in com.mysdk.MySdk.returnFoo: only primitives, lists, data classes annotated " +
- "with @PrivacySandboxValue and interfaces annotated with " +
- "@PrivacySandboxInterface are supported as return types.",
+ "with @PrivacySandboxValue, interfaces annotated with @PrivacySandboxInterface, " +
+ "and SdkActivityLaunchers are supported as return types.",
"Error in com.mysdk.MySdk.receiveFoo: only primitives, lists, data classes " +
- "annotated with @PrivacySandboxValue and interfaces annotated with " +
- "@PrivacySandboxCallback or @PrivacySandboxInterface are supported as parameter " +
- "types."
+ "annotated with @PrivacySandboxValue, interfaces annotated with " +
+ "@PrivacySandboxCallback or @PrivacySandboxInterface, and SdkActivityLaunchers " +
+ "are supported as parameter types."
)
}
@@ -299,9 +299,9 @@
assertThat(validationResult.isFailure).isTrue()
assertThat(validationResult.errors).containsExactly(
"Error in com.mysdk.MySdk.processNestedList: only primitives, lists, data classes " +
- "annotated with @PrivacySandboxValue and interfaces annotated with " +
- "@PrivacySandboxCallback or @PrivacySandboxInterface are supported as " +
- "parameter types."
+ "annotated with @PrivacySandboxValue, interfaces annotated with " +
+ "@PrivacySandboxCallback or @PrivacySandboxInterface, and SdkActivityLaunchers " +
+ "are supported as parameter types."
)
}
@@ -324,8 +324,8 @@
assertThat(validationResult.isFailure).isTrue()
assertThat(validationResult.errors).containsExactly(
"Error in com.mysdk.Foo.bar: only primitives, lists, data classes annotated with " +
- "@PrivacySandboxValue and interfaces annotated with @PrivacySandboxInterface " +
- "are supported as properties."
+ "@PrivacySandboxValue, interfaces annotated with @PrivacySandboxInterface, and " +
+ "SdkActivityLaunchers are supported as properties."
)
}
@@ -391,8 +391,9 @@
assertThat(validationResult.isFailure).isTrue()
assertThat(validationResult.errors).containsExactly(
"Error in com.mysdk.MySdkCallback.foo: only primitives, lists, data classes " +
- "annotated with @PrivacySandboxValue and interfaces annotated with " +
- "@PrivacySandboxInterface are supported as callback parameter types."
+ "annotated with @PrivacySandboxValue, interfaces annotated with " +
+ "@PrivacySandboxInterface, and SdkActivityLaunchers are supported as callback " +
+ "parameter types."
)
}
}
\ No newline at end of file
diff --git a/privacysandbox/tools/tools-core/src/test/test-data/aidlinterfacegeneratortest/output/com/mysdk/IMyInterface.aidl b/privacysandbox/tools/tools-core/src/test/test-data/aidlinterfacegeneratortest/output/com/mysdk/IMyInterface.aidl
index 2a532b7..4815029 100644
--- a/privacysandbox/tools/tools-core/src/test/test-data/aidlinterfacegeneratortest/output/com/mysdk/IMyInterface.aidl
+++ b/privacysandbox/tools/tools-core/src/test/test-data/aidlinterfacegeneratortest/output/com/mysdk/IMyInterface.aidl
@@ -1,8 +1,10 @@
package com.mysdk;
+import android.os.Bundle;
import com.mysdk.IMyInterfaceTransactionCallback;
oneway interface IMyInterface {
+ void methodWithActivityLauncherParam(in Bundle activityLauncher) = 12556385;
void methodWithInterfaceParam(IMyInterface myInterface) = 5537946;
void suspendMethodWithInterfaceReturn(IMyInterfaceTransactionCallback transactionCallback) = 13841773;
}
\ No newline at end of file
diff --git a/privacysandbox/tools/tools-testing/src/main/java/androidx/privacysandbox/tools/testing/CompilationTestHelper.kt b/privacysandbox/tools/tools-testing/src/main/java/androidx/privacysandbox/tools/testing/CompilationTestHelper.kt
index 0a9c958..84dd495 100644
--- a/privacysandbox/tools/tools-testing/src/main/java/androidx/privacysandbox/tools/testing/CompilationTestHelper.kt
+++ b/privacysandbox/tools/tools-testing/src/main/java/androidx/privacysandbox/tools/testing/CompilationTestHelper.kt
@@ -40,13 +40,16 @@
sources: List<Source>,
extraClasspath: List<File> = emptyList(),
symbolProcessorProviders: List<SymbolProcessorProvider> = emptyList(),
- processorOptions: Map<String, String> = emptyMap()
+ processorOptions: Map<String, String> = emptyMap(),
+ includeLibraryStubs: Boolean = true,
): TestCompilationResult {
val tempDir = Files.createTempDirectory("compile").toFile().also { it.deleteOnExit() }
+ // TODO(b/281638337): Remove library stubs once SdkActivityLauncher is upstreamed
+ val fullSources = sources + if (includeLibraryStubs) libraryStubs else emptyList()
return compile(
tempDir,
TestCompilationArguments(
- sources = sources,
+ sources = fullSources,
classpath = extraClasspath,
symbolProcessorProviders = symbolProcessorProviders,
processorOptions = processorOptions,
diff --git a/privacysandbox/tools/tools-testing/src/main/java/androidx/privacysandbox/tools/testing/LibraryStubs.kt b/privacysandbox/tools/tools-testing/src/main/java/androidx/privacysandbox/tools/testing/LibraryStubs.kt
new file mode 100644
index 0000000..f0caa9e
--- /dev/null
+++ b/privacysandbox/tools/tools-testing/src/main/java/androidx/privacysandbox/tools/testing/LibraryStubs.kt
@@ -0,0 +1,350 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.privacysandbox.tools.testing
+
+import androidx.room.compiler.processing.util.Source
+
+private val syntheticUiLibraryStubs = listOf(
+ Source.kotlin(
+ "androidx/privacysandbox/ui/core/SandboxedUiAdapter.kt", """
+ |package androidx.privacysandbox.ui.core
+ |
+ |import android.os.IBinder
+ |
+ |interface SdkActivityLauncher {
+ | suspend fun launchSdkActivity(sdkActivityHandlerToken: IBinder): Boolean
+ |}
+ |""".trimMargin()
+ ),
+ Source.kotlin(
+ "androidx/privacysandbox/ui/client/SdkActivityLaunchers.kt", """
+ |@file:JvmName("SdkActivityLaunchers")
+ |
+ |package androidx.privacysandbox.ui.client
+ |
+ |import android.os.Bundle
+ |import androidx.privacysandbox.ui.core.SdkActivityLauncher
+ |
+ |fun SdkActivityLauncher.toLauncherInfo(): Bundle {
+ | TODO("Stub!")
+ |}
+ |""".trimMargin()
+ ),
+ Source.kotlin(
+ "androidx/privacysandbox/ui/provider/SdkActivityLauncherFactory.kt", """
+ |package androidx.privacysandbox.ui.provider
+ |
+ |import android.os.Bundle
+ |import androidx.privacysandbox.ui.core.SdkActivityLauncher
+ |
+ |object SdkActivityLauncherFactory {
+ |
+ | @JvmStatic
+ | @Suppress("UNUSED_PARAMETER")
+ | fun fromLauncherInfo(launcherInfo: Bundle): SdkActivityLauncher {
+ | TODO("Stub!")
+ | }
+ |}""".trimMargin()
+ ),
+ Source.kotlin(
+ "androidx/core/os/BundleCompat.kt", """
+ |package androidx.core.os
+ |
+ |import android.os.IBinder
+ |import android.os.Bundle
+ |
+ |object BundleCompat {
+ | @Suppress("UNUSED_PARAMETER")
+ | fun getBinder(bundle: Bundle, key: String?): IBinder? {
+ | TODO("Stub!")
+ | }
+ |}
+ |""".trimMargin()
+ ),
+)
+
+private val syntheticAidlGeneratedCode = listOf(
+ Source.java(
+ "androidx/privacysandbox/ui/core/ISdkActivityLauncher", """
+ |package androidx.privacysandbox.ui.core;
+ |/** @hide */
+ |public interface ISdkActivityLauncher extends android.os.IInterface
+ |{
+ | /** Default implementation for ISdkActivityLauncher. */
+ | public static class Default implements androidx.privacysandbox.ui.core.ISdkActivityLauncher
+ | {
+ | @Override public void launchSdkActivity(android.os.IBinder sdkActivityHandlerToken, androidx.privacysandbox.ui.core.ISdkActivityLauncherCallback callback) throws android.os.RemoteException
+ | {
+ | }
+ | @Override
+ | public android.os.IBinder asBinder() {
+ | return null;
+ | }
+ | }
+ | /** Local-side IPC implementation stub class. */
+ | public static abstract class Stub extends android.os.Binder implements androidx.privacysandbox.ui.core.ISdkActivityLauncher
+ | {
+ | /** Construct the stub at attach it to the interface. */
+ | public Stub()
+ | {
+ | this.attachInterface(this, DESCRIPTOR);
+ | }
+ | /**
+ | * Cast an IBinder object into an androidx.privacysandbox.ui.core.ISdkActivityLauncher interface,
+ | * generating a proxy if needed.
+ | */
+ | public static androidx.privacysandbox.ui.core.ISdkActivityLauncher asInterface(android.os.IBinder obj)
+ | {
+ | if ((obj==null)) {
+ | return null;
+ | }
+ | android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR);
+ | if (((iin!=null)&&(iin instanceof androidx.privacysandbox.ui.core.ISdkActivityLauncher))) {
+ | return ((androidx.privacysandbox.ui.core.ISdkActivityLauncher)iin);
+ | }
+ | return new androidx.privacysandbox.ui.core.ISdkActivityLauncher.Stub.Proxy(obj);
+ | }
+ | @Override public android.os.IBinder asBinder()
+ | {
+ | return this;
+ | }
+ | @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
+ | {
+ | java.lang.String descriptor = DESCRIPTOR;
+ | if (code >= android.os.IBinder.FIRST_CALL_TRANSACTION && code <= android.os.IBinder.LAST_CALL_TRANSACTION) {
+ | data.enforceInterface(descriptor);
+ | }
+ | switch (code)
+ | {
+ | case INTERFACE_TRANSACTION:
+ | {
+ | reply.writeString(descriptor);
+ | return true;
+ | }
+ | }
+ | switch (code)
+ | {
+ | case TRANSACTION_launchSdkActivity:
+ | {
+ | android.os.IBinder _arg0;
+ | _arg0 = data.readStrongBinder();
+ | androidx.privacysandbox.ui.core.ISdkActivityLauncherCallback _arg1;
+ | _arg1 = androidx.privacysandbox.ui.core.ISdkActivityLauncherCallback.Stub.asInterface(data.readStrongBinder());
+ | this.launchSdkActivity(_arg0, _arg1);
+ | break;
+ | }
+ | default:
+ | {
+ | return super.onTransact(code, data, reply, flags);
+ | }
+ | }
+ | return true;
+ | }
+ | private static class Proxy implements androidx.privacysandbox.ui.core.ISdkActivityLauncher
+ | {
+ | private android.os.IBinder mRemote;
+ | Proxy(android.os.IBinder remote)
+ | {
+ | mRemote = remote;
+ | }
+ | @Override public android.os.IBinder asBinder()
+ | {
+ | return mRemote;
+ | }
+ | public java.lang.String getInterfaceDescriptor()
+ | {
+ | return DESCRIPTOR;
+ | }
+ | @Override public void launchSdkActivity(android.os.IBinder sdkActivityHandlerToken, androidx.privacysandbox.ui.core.ISdkActivityLauncherCallback callback) throws android.os.RemoteException
+ | {
+ | android.os.Parcel _data = android.os.Parcel.obtain();
+ | try {
+ | _data.writeInterfaceToken(DESCRIPTOR);
+ | _data.writeStrongBinder(sdkActivityHandlerToken);
+ | _data.writeStrongInterface(callback);
+ | boolean _status = mRemote.transact(Stub.TRANSACTION_launchSdkActivity, _data, null, android.os.IBinder.FLAG_ONEWAY);
+ | }
+ | finally {
+ | _data.recycle();
+ | }
+ | }
+ | }
+ | static final int TRANSACTION_launchSdkActivity = (android.os.IBinder.FIRST_CALL_TRANSACTION + 1);
+ | }
+ | public static final java.lang.String DESCRIPTOR = "androidx.privacysandbox.ui.core.ISdkActivityLauncher";
+ | public void launchSdkActivity(android.os.IBinder sdkActivityHandlerToken, androidx.privacysandbox.ui.core.ISdkActivityLauncherCallback callback) throws android.os.RemoteException;
+ |}""".trimMargin()
+ ),
+ Source.java(
+ "androidx/privacysandbox/ui/core/ISdkActivityLauncherCallback", """
+ |package androidx.privacysandbox.ui.core;
+ |/** @hide */
+ |public interface ISdkActivityLauncherCallback extends android.os.IInterface
+ |{
+ | /** Default implementation for ISdkActivityLauncherCallback. */
+ | public static class Default implements androidx.privacysandbox.ui.core.ISdkActivityLauncherCallback
+ | {
+ | @Override public void onLaunchAccepted(android.os.IBinder sdkActivityHandlerToken) throws android.os.RemoteException
+ | {
+ | }
+ | @Override public void onLaunchRejected(android.os.IBinder sdkActivityHandlerToken) throws android.os.RemoteException
+ | {
+ | }
+ | @Override public void onLaunchError(java.lang.String message) throws android.os.RemoteException
+ | {
+ | }
+ | @Override
+ | public android.os.IBinder asBinder() {
+ | return null;
+ | }
+ | }
+ | /** Local-side IPC implementation stub class. */
+ | public static abstract class Stub extends android.os.Binder implements androidx.privacysandbox.ui.core.ISdkActivityLauncherCallback
+ | {
+ | /** Construct the stub at attach it to the interface. */
+ | public Stub()
+ | {
+ | this.attachInterface(this, DESCRIPTOR);
+ | }
+ | /**
+ | * Cast an IBinder object into an androidx.privacysandbox.ui.core.ISdkActivityLauncherCallback interface,
+ | * generating a proxy if needed.
+ | */
+ | public static androidx.privacysandbox.ui.core.ISdkActivityLauncherCallback asInterface(android.os.IBinder obj)
+ | {
+ | if ((obj==null)) {
+ | return null;
+ | }
+ | android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR);
+ | if (((iin!=null)&&(iin instanceof androidx.privacysandbox.ui.core.ISdkActivityLauncherCallback))) {
+ | return ((androidx.privacysandbox.ui.core.ISdkActivityLauncherCallback)iin);
+ | }
+ | return new androidx.privacysandbox.ui.core.ISdkActivityLauncherCallback.Stub.Proxy(obj);
+ | }
+ | @Override public android.os.IBinder asBinder()
+ | {
+ | return this;
+ | }
+ | @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
+ | {
+ | java.lang.String descriptor = DESCRIPTOR;
+ | if (code >= android.os.IBinder.FIRST_CALL_TRANSACTION && code <= android.os.IBinder.LAST_CALL_TRANSACTION) {
+ | data.enforceInterface(descriptor);
+ | }
+ | switch (code)
+ | {
+ | case INTERFACE_TRANSACTION:
+ | {
+ | reply.writeString(descriptor);
+ | return true;
+ | }
+ | }
+ | switch (code)
+ | {
+ | case TRANSACTION_onLaunchAccepted:
+ | {
+ | android.os.IBinder _arg0;
+ | _arg0 = data.readStrongBinder();
+ | this.onLaunchAccepted(_arg0);
+ | break;
+ | }
+ | case TRANSACTION_onLaunchRejected:
+ | {
+ | android.os.IBinder _arg0;
+ | _arg0 = data.readStrongBinder();
+ | this.onLaunchRejected(_arg0);
+ | break;
+ | }
+ | case TRANSACTION_onLaunchError:
+ | {
+ | java.lang.String _arg0;
+ | _arg0 = data.readString();
+ | this.onLaunchError(_arg0);
+ | break;
+ | }
+ | default:
+ | {
+ | return super.onTransact(code, data, reply, flags);
+ | }
+ | }
+ | return true;
+ | }
+ | private static class Proxy implements androidx.privacysandbox.ui.core.ISdkActivityLauncherCallback
+ | {
+ | private android.os.IBinder mRemote;
+ | Proxy(android.os.IBinder remote)
+ | {
+ | mRemote = remote;
+ | }
+ | @Override public android.os.IBinder asBinder()
+ | {
+ | return mRemote;
+ | }
+ | public java.lang.String getInterfaceDescriptor()
+ | {
+ | return DESCRIPTOR;
+ | }
+ | @Override public void onLaunchAccepted(android.os.IBinder sdkActivityHandlerToken) throws android.os.RemoteException
+ | {
+ | android.os.Parcel _data = android.os.Parcel.obtain();
+ | try {
+ | _data.writeInterfaceToken(DESCRIPTOR);
+ | _data.writeStrongBinder(sdkActivityHandlerToken);
+ | boolean _status = mRemote.transact(Stub.TRANSACTION_onLaunchAccepted, _data, null, android.os.IBinder.FLAG_ONEWAY);
+ | }
+ | finally {
+ | _data.recycle();
+ | }
+ | }
+ | @Override public void onLaunchRejected(android.os.IBinder sdkActivityHandlerToken) throws android.os.RemoteException
+ | {
+ | android.os.Parcel _data = android.os.Parcel.obtain();
+ | try {
+ | _data.writeInterfaceToken(DESCRIPTOR);
+ | _data.writeStrongBinder(sdkActivityHandlerToken);
+ | boolean _status = mRemote.transact(Stub.TRANSACTION_onLaunchRejected, _data, null, android.os.IBinder.FLAG_ONEWAY);
+ | }
+ | finally {
+ | _data.recycle();
+ | }
+ | }
+ | @Override public void onLaunchError(java.lang.String message) throws android.os.RemoteException
+ | {
+ | android.os.Parcel _data = android.os.Parcel.obtain();
+ | try {
+ | _data.writeInterfaceToken(DESCRIPTOR);
+ | _data.writeString(message);
+ | boolean _status = mRemote.transact(Stub.TRANSACTION_onLaunchError, _data, null, android.os.IBinder.FLAG_ONEWAY);
+ | }
+ | finally {
+ | _data.recycle();
+ | }
+ | }
+ | }
+ | static final int TRANSACTION_onLaunchAccepted = (android.os.IBinder.FIRST_CALL_TRANSACTION + 1);
+ | static final int TRANSACTION_onLaunchRejected = (android.os.IBinder.FIRST_CALL_TRANSACTION + 2);
+ | static final int TRANSACTION_onLaunchError = (android.os.IBinder.FIRST_CALL_TRANSACTION + 3);
+ | }
+ | public static final java.lang.String DESCRIPTOR = "androidx.privacysandbox.ui.core.ISdkActivityLauncherCallback";
+ | public void onLaunchAccepted(android.os.IBinder sdkActivityHandlerToken) throws android.os.RemoteException;
+ | public void onLaunchRejected(android.os.IBinder sdkActivityHandlerToken) throws android.os.RemoteException;
+ | public void onLaunchError(java.lang.String message) throws android.os.RemoteException;
+ |}""".trimMargin()
+ ),
+)
+
+val libraryStubs = syntheticUiLibraryStubs + syntheticAidlGeneratedCode
\ No newline at end of file
diff --git a/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/MainActivity.kt b/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/MainActivity.kt
index 4e15e86..9373477 100644
--- a/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/MainActivity.kt
+++ b/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/MainActivity.kt
@@ -20,7 +20,6 @@
import android.app.sdksandbox.SandboxedSdk
import android.app.sdksandbox.SdkSandboxManager
import android.content.res.Configuration
-import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.OutcomeReceiver
import android.os.ext.SdkExtensions
@@ -29,6 +28,7 @@
import android.widget.LinearLayout
import android.widget.TextView
import androidx.annotation.RequiresExtension
+import androidx.appcompat.app.AppCompatActivity
import androidx.privacysandbox.ui.client.SandboxedUiAdapterFactory
import androidx.privacysandbox.ui.client.view.SandboxedSdkUiSessionState
import androidx.privacysandbox.ui.client.view.SandboxedSdkUiSessionStateChangedListener
diff --git a/privacysandbox/ui/ui-client/api/current.txt b/privacysandbox/ui/ui-client/api/current.txt
index c3fc560..ae23335 100644
--- a/privacysandbox/ui/ui-client/api/current.txt
+++ b/privacysandbox/ui/ui-client/api/current.txt
@@ -36,8 +36,8 @@
}
@RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final class SandboxedSdkView extends android.view.ViewGroup {
- ctor public SandboxedSdkView(android.content.Context context, optional android.util.AttributeSet? attrs);
ctor public SandboxedSdkView(android.content.Context context);
+ ctor public SandboxedSdkView(android.content.Context context, optional android.util.AttributeSet? attrs);
method public void addStateChangedListener(androidx.privacysandbox.ui.client.view.SandboxedSdkUiSessionStateChangedListener stateChangedListener);
method public void removeStateChangedListener(androidx.privacysandbox.ui.client.view.SandboxedSdkUiSessionStateChangedListener stateChangedListener);
method public void setAdapter(androidx.privacysandbox.ui.core.SandboxedUiAdapter sandboxedUiAdapter);
diff --git a/privacysandbox/ui/ui-client/api/public_plus_experimental_current.txt b/privacysandbox/ui/ui-client/api/public_plus_experimental_current.txt
index c3fc560..ae23335 100644
--- a/privacysandbox/ui/ui-client/api/public_plus_experimental_current.txt
+++ b/privacysandbox/ui/ui-client/api/public_plus_experimental_current.txt
@@ -36,8 +36,8 @@
}
@RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final class SandboxedSdkView extends android.view.ViewGroup {
- ctor public SandboxedSdkView(android.content.Context context, optional android.util.AttributeSet? attrs);
ctor public SandboxedSdkView(android.content.Context context);
+ ctor public SandboxedSdkView(android.content.Context context, optional android.util.AttributeSet? attrs);
method public void addStateChangedListener(androidx.privacysandbox.ui.client.view.SandboxedSdkUiSessionStateChangedListener stateChangedListener);
method public void removeStateChangedListener(androidx.privacysandbox.ui.client.view.SandboxedSdkUiSessionStateChangedListener stateChangedListener);
method public void setAdapter(androidx.privacysandbox.ui.core.SandboxedUiAdapter sandboxedUiAdapter);
diff --git a/privacysandbox/ui/ui-client/api/restricted_current.txt b/privacysandbox/ui/ui-client/api/restricted_current.txt
index c3fc560..ae23335 100644
--- a/privacysandbox/ui/ui-client/api/restricted_current.txt
+++ b/privacysandbox/ui/ui-client/api/restricted_current.txt
@@ -36,8 +36,8 @@
}
@RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final class SandboxedSdkView extends android.view.ViewGroup {
- ctor public SandboxedSdkView(android.content.Context context, optional android.util.AttributeSet? attrs);
ctor public SandboxedSdkView(android.content.Context context);
+ ctor public SandboxedSdkView(android.content.Context context, optional android.util.AttributeSet? attrs);
method public void addStateChangedListener(androidx.privacysandbox.ui.client.view.SandboxedSdkUiSessionStateChangedListener stateChangedListener);
method public void removeStateChangedListener(androidx.privacysandbox.ui.client.view.SandboxedSdkUiSessionStateChangedListener stateChangedListener);
method public void setAdapter(androidx.privacysandbox.ui.core.SandboxedUiAdapter sandboxedUiAdapter);
diff --git a/profileinstaller/profileinstaller-benchmark/src/androidTest/java/androidx/profileinstaller/benchmark/ProfileInstallerTranscodeBenchmark.kt b/profileinstaller/profileinstaller-benchmark/src/androidTest/java/androidx/profileinstaller/benchmark/ProfileInstallerTranscodeBenchmark.kt
index 597baf4..b85813e 100644
--- a/profileinstaller/profileinstaller-benchmark/src/androidTest/java/androidx/profileinstaller/benchmark/ProfileInstallerTranscodeBenchmark.kt
+++ b/profileinstaller/profileinstaller-benchmark/src/androidTest/java/androidx/profileinstaller/benchmark/ProfileInstallerTranscodeBenchmark.kt
@@ -25,13 +25,13 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import androidx.test.platform.app.InstrumentationRegistry
+import java.io.File
import org.junit.After
import org.junit.Assume.assumeTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.io.File
@RunWith(AndroidJUnit4::class)
@LargeTest
diff --git a/profileinstaller/profileinstaller/build.gradle b/profileinstaller/profileinstaller/build.gradle
index ba3d60d..793c5e5 100644
--- a/profileinstaller/profileinstaller/build.gradle
+++ b/profileinstaller/profileinstaller/build.gradle
@@ -32,7 +32,7 @@
}
androidx {
- name = "androidx.profileinstaller:profileinstaller"
+ name = "Profile Installer"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2021"
description = "Allows libraries to prepopulate ahead of time compilation traces to be read by" +
diff --git a/recommendation/recommendation/build.gradle b/recommendation/recommendation/build.gradle
index 25a96bf..50c69b0 100644
--- a/recommendation/recommendation/build.gradle
+++ b/recommendation/recommendation/build.gradle
@@ -17,7 +17,7 @@
}
androidx {
- name = "Android Support Recommendation"
+ name = "Recommendation"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2015"
description = "Android Support Recommendation"
diff --git a/recyclerview/recyclerview-lint/src/main/java/androidx/recyclerview/lint/InvalidSetHasFixedSizeDetector.kt b/recyclerview/recyclerview-lint/src/main/java/androidx/recyclerview/lint/InvalidSetHasFixedSizeDetector.kt
index addc95f..6b24503 100644
--- a/recyclerview/recyclerview-lint/src/main/java/androidx/recyclerview/lint/InvalidSetHasFixedSizeDetector.kt
+++ b/recyclerview/recyclerview-lint/src/main/java/androidx/recyclerview/lint/InvalidSetHasFixedSizeDetector.kt
@@ -36,12 +36,12 @@
import com.android.tools.lint.detector.api.XmlContext
import com.android.tools.lint.detector.api.XmlScanner
import com.intellij.psi.PsiMethod
+import java.util.EnumSet
import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf
import org.jetbrains.uast.UCallExpression
import org.jetbrains.uast.toUElement
import org.jetbrains.uast.visitor.AbstractUastVisitor
import org.w3c.dom.Element
-import java.util.EnumSet
class InvalidSetHasFixedSizeDetector : Detector(), XmlScanner, SourceCodeScanner {
diff --git a/recyclerview/recyclerview-selection/build.gradle b/recyclerview/recyclerview-selection/build.gradle
index 49f9cfd..12c9e66 100644
--- a/recyclerview/recyclerview-selection/build.gradle
+++ b/recyclerview/recyclerview-selection/build.gradle
@@ -37,7 +37,7 @@
}
androidx {
- name = "Android RecyclerView Selection"
+ name = "RecyclerView Selection"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.RECYCLERVIEW_SELECTION
inceptionYear = "2017"
diff --git a/recyclerview/recyclerview/api/current.txt b/recyclerview/recyclerview/api/current.txt
index ca945e9..0e9b27d 100644
--- a/recyclerview/recyclerview/api/current.txt
+++ b/recyclerview/recyclerview/api/current.txt
@@ -21,8 +21,8 @@
}
public class AsyncListDiffer<T> {
- ctor public AsyncListDiffer(androidx.recyclerview.widget.RecyclerView.Adapter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T!>);
ctor public AsyncListDiffer(androidx.recyclerview.widget.ListUpdateCallback, androidx.recyclerview.widget.AsyncDifferConfig<T!>);
+ ctor public AsyncListDiffer(androidx.recyclerview.widget.RecyclerView.Adapter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T!>);
method public void addListListener(androidx.recyclerview.widget.AsyncListDiffer.ListListener<T!>);
method public java.util.List<T!> getCurrentList();
method public void removeListListener(androidx.recyclerview.widget.AsyncListDiffer.ListListener<T!>);
@@ -71,10 +71,10 @@
}
public final class ConcatAdapter extends androidx.recyclerview.widget.RecyclerView.Adapter<androidx.recyclerview.widget.RecyclerView.ViewHolder> {
- ctor @java.lang.SafeVarargs public ConcatAdapter(androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>!...);
ctor @java.lang.SafeVarargs public ConcatAdapter(androidx.recyclerview.widget.ConcatAdapter.Config, androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>!...);
- ctor public ConcatAdapter(java.util.List<? extends androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>>);
ctor public ConcatAdapter(androidx.recyclerview.widget.ConcatAdapter.Config, java.util.List<? extends androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>>);
+ ctor @java.lang.SafeVarargs public ConcatAdapter(androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>!...);
+ ctor public ConcatAdapter(java.util.List<? extends androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>>);
method public boolean addAdapter(androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>);
method public boolean addAdapter(int, androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>);
method public java.util.List<? extends androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>> getAdapters();
@@ -137,8 +137,8 @@
public static class DiffUtil.DiffResult {
method public int convertNewPositionToOld(@IntRange(from=0) int);
method public int convertOldPositionToNew(@IntRange(from=0) int);
- method public void dispatchUpdatesTo(androidx.recyclerview.widget.RecyclerView.Adapter);
method public void dispatchUpdatesTo(androidx.recyclerview.widget.ListUpdateCallback);
+ method public void dispatchUpdatesTo(androidx.recyclerview.widget.RecyclerView.Adapter);
field public static final int NO_POSITION = -1; // 0xffffffff
}
@@ -178,10 +178,10 @@
public static class GridLayoutManager.LayoutParams extends androidx.recyclerview.widget.RecyclerView.LayoutParams {
ctor public GridLayoutManager.LayoutParams(android.content.Context!, android.util.AttributeSet!);
- ctor public GridLayoutManager.LayoutParams(int, int);
- ctor public GridLayoutManager.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
ctor public GridLayoutManager.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ ctor public GridLayoutManager.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
ctor public GridLayoutManager.LayoutParams(androidx.recyclerview.widget.RecyclerView.LayoutParams!);
+ ctor public GridLayoutManager.LayoutParams(int, int);
method public int getSpanIndex();
method public int getSpanSize();
field public static final int INVALID_SPAN_ID = -1; // 0xffffffff
@@ -273,8 +273,8 @@
public class LinearLayoutManager extends androidx.recyclerview.widget.RecyclerView.LayoutManager implements androidx.recyclerview.widget.ItemTouchHelper.ViewDropHandler androidx.recyclerview.widget.RecyclerView.SmoothScroller.ScrollVectorProvider {
ctor public LinearLayoutManager(android.content.Context!);
- ctor public LinearLayoutManager(android.content.Context!, int, boolean);
ctor public LinearLayoutManager(android.content.Context!, android.util.AttributeSet!, int, int);
+ ctor public LinearLayoutManager(android.content.Context!, int, boolean);
method protected void calculateExtraLayoutSpace(androidx.recyclerview.widget.RecyclerView.State, int[]);
method public android.graphics.PointF! computeScrollVectorForPosition(int);
method public int findFirstCompletelyVisibleItemPosition();
@@ -344,8 +344,8 @@
}
public abstract class ListAdapter<T, VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> extends androidx.recyclerview.widget.RecyclerView.Adapter<VH> {
- ctor protected ListAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T!>);
ctor protected ListAdapter(androidx.recyclerview.widget.AsyncDifferConfig<T!>);
+ ctor protected ListAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T!>);
method public java.util.List<T!> getCurrentList();
method protected T! getItem(int);
method public int getItemCount();
@@ -399,8 +399,8 @@
ctor public RecyclerView(android.content.Context);
ctor public RecyclerView(android.content.Context, android.util.AttributeSet?);
ctor public RecyclerView(android.content.Context, android.util.AttributeSet?, int);
- method public void addItemDecoration(androidx.recyclerview.widget.RecyclerView.ItemDecoration, int);
method public void addItemDecoration(androidx.recyclerview.widget.RecyclerView.ItemDecoration);
+ method public void addItemDecoration(androidx.recyclerview.widget.RecyclerView.ItemDecoration, int);
method public void addOnChildAttachStateChangeListener(androidx.recyclerview.widget.RecyclerView.OnChildAttachStateChangeListener);
method public void addOnItemTouchListener(androidx.recyclerview.widget.RecyclerView.OnItemTouchListener);
method public void addOnScrollListener(androidx.recyclerview.widget.RecyclerView.OnScrollListener);
@@ -633,12 +633,12 @@
public abstract static class RecyclerView.ItemDecoration {
ctor public RecyclerView.ItemDecoration();
- method @Deprecated public void getItemOffsets(android.graphics.Rect, int, androidx.recyclerview.widget.RecyclerView);
method public void getItemOffsets(android.graphics.Rect, android.view.View, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State);
- method public void onDraw(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State);
+ method @Deprecated public void getItemOffsets(android.graphics.Rect, int, androidx.recyclerview.widget.RecyclerView);
method @Deprecated public void onDraw(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView);
- method public void onDrawOver(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State);
+ method public void onDraw(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State);
method @Deprecated public void onDrawOver(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView);
+ method public void onDrawOver(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State);
}
public abstract static class RecyclerView.LayoutManager {
@@ -649,9 +649,9 @@
method public void addView(android.view.View!, int);
method public void assertInLayoutOrScroll(String!);
method public void assertNotInLayoutOrScroll(String!);
- method public void attachView(android.view.View, int, androidx.recyclerview.widget.RecyclerView.LayoutParams!);
- method public void attachView(android.view.View, int);
method public void attachView(android.view.View);
+ method public void attachView(android.view.View, int);
+ method public void attachView(android.view.View, int, androidx.recyclerview.widget.RecyclerView.LayoutParams!);
method public void calculateItemDecorationsForChild(android.view.View, android.graphics.Rect);
method public boolean canScrollHorizontally();
method public boolean canScrollVertically();
@@ -674,8 +674,8 @@
method public android.view.View? findContainingItemView(android.view.View);
method public android.view.View? findViewByPosition(int);
method public abstract androidx.recyclerview.widget.RecyclerView.LayoutParams! generateDefaultLayoutParams();
- method public androidx.recyclerview.widget.RecyclerView.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
method public androidx.recyclerview.widget.RecyclerView.LayoutParams! generateLayoutParams(android.content.Context!, android.util.AttributeSet!);
+ method public androidx.recyclerview.widget.RecyclerView.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
method public int getBaseline();
method public int getBottomDecorationHeight(android.view.View);
method public android.view.View? getChildAt(int);
@@ -800,10 +800,10 @@
public static class RecyclerView.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
ctor public RecyclerView.LayoutParams(android.content.Context!, android.util.AttributeSet!);
- ctor public RecyclerView.LayoutParams(int, int);
- ctor public RecyclerView.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
ctor public RecyclerView.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ ctor public RecyclerView.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
ctor public RecyclerView.LayoutParams(androidx.recyclerview.widget.RecyclerView.LayoutParams!);
+ ctor public RecyclerView.LayoutParams(int, int);
method public int getAbsoluteAdapterPosition();
method public int getBindingAdapterPosition();
method @Deprecated public int getViewAdapterPosition();
@@ -1003,9 +1003,9 @@
ctor public SortedList(Class<T!>, androidx.recyclerview.widget.SortedList.Callback<T!>);
ctor public SortedList(Class<T!>, androidx.recyclerview.widget.SortedList.Callback<T!>, int);
method public int add(T!);
- method public void addAll(T![], boolean);
- method public void addAll(T!...);
method public void addAll(java.util.Collection<T!>);
+ method public void addAll(T!...);
+ method public void addAll(T![], boolean);
method public void beginBatchedUpdates();
method public void clear();
method public void endBatchedUpdates();
@@ -1014,9 +1014,9 @@
method public void recalculatePositionOfItemAt(int);
method public boolean remove(T!);
method public T! removeItemAt(int);
- method public void replaceAll(T![], boolean);
- method public void replaceAll(T!...);
method public void replaceAll(java.util.Collection<T!>);
+ method public void replaceAll(T!...);
+ method public void replaceAll(T![], boolean);
method public int size();
method public void updateItemAt(int, T!);
field public static final int INVALID_POSITION = -1; // 0xffffffff
@@ -1080,10 +1080,10 @@
public static class StaggeredGridLayoutManager.LayoutParams extends androidx.recyclerview.widget.RecyclerView.LayoutParams {
ctor public StaggeredGridLayoutManager.LayoutParams(android.content.Context!, android.util.AttributeSet!);
- ctor public StaggeredGridLayoutManager.LayoutParams(int, int);
- ctor public StaggeredGridLayoutManager.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
ctor public StaggeredGridLayoutManager.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ ctor public StaggeredGridLayoutManager.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
ctor public StaggeredGridLayoutManager.LayoutParams(androidx.recyclerview.widget.RecyclerView.LayoutParams!);
+ ctor public StaggeredGridLayoutManager.LayoutParams(int, int);
method public final int getSpanIndex();
method public boolean isFullSpan();
method public void setFullSpan(boolean);
diff --git a/recyclerview/recyclerview/api/public_plus_experimental_current.txt b/recyclerview/recyclerview/api/public_plus_experimental_current.txt
index ca945e9..0e9b27d 100644
--- a/recyclerview/recyclerview/api/public_plus_experimental_current.txt
+++ b/recyclerview/recyclerview/api/public_plus_experimental_current.txt
@@ -21,8 +21,8 @@
}
public class AsyncListDiffer<T> {
- ctor public AsyncListDiffer(androidx.recyclerview.widget.RecyclerView.Adapter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T!>);
ctor public AsyncListDiffer(androidx.recyclerview.widget.ListUpdateCallback, androidx.recyclerview.widget.AsyncDifferConfig<T!>);
+ ctor public AsyncListDiffer(androidx.recyclerview.widget.RecyclerView.Adapter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T!>);
method public void addListListener(androidx.recyclerview.widget.AsyncListDiffer.ListListener<T!>);
method public java.util.List<T!> getCurrentList();
method public void removeListListener(androidx.recyclerview.widget.AsyncListDiffer.ListListener<T!>);
@@ -71,10 +71,10 @@
}
public final class ConcatAdapter extends androidx.recyclerview.widget.RecyclerView.Adapter<androidx.recyclerview.widget.RecyclerView.ViewHolder> {
- ctor @java.lang.SafeVarargs public ConcatAdapter(androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>!...);
ctor @java.lang.SafeVarargs public ConcatAdapter(androidx.recyclerview.widget.ConcatAdapter.Config, androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>!...);
- ctor public ConcatAdapter(java.util.List<? extends androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>>);
ctor public ConcatAdapter(androidx.recyclerview.widget.ConcatAdapter.Config, java.util.List<? extends androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>>);
+ ctor @java.lang.SafeVarargs public ConcatAdapter(androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>!...);
+ ctor public ConcatAdapter(java.util.List<? extends androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>>);
method public boolean addAdapter(androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>);
method public boolean addAdapter(int, androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>);
method public java.util.List<? extends androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>> getAdapters();
@@ -137,8 +137,8 @@
public static class DiffUtil.DiffResult {
method public int convertNewPositionToOld(@IntRange(from=0) int);
method public int convertOldPositionToNew(@IntRange(from=0) int);
- method public void dispatchUpdatesTo(androidx.recyclerview.widget.RecyclerView.Adapter);
method public void dispatchUpdatesTo(androidx.recyclerview.widget.ListUpdateCallback);
+ method public void dispatchUpdatesTo(androidx.recyclerview.widget.RecyclerView.Adapter);
field public static final int NO_POSITION = -1; // 0xffffffff
}
@@ -178,10 +178,10 @@
public static class GridLayoutManager.LayoutParams extends androidx.recyclerview.widget.RecyclerView.LayoutParams {
ctor public GridLayoutManager.LayoutParams(android.content.Context!, android.util.AttributeSet!);
- ctor public GridLayoutManager.LayoutParams(int, int);
- ctor public GridLayoutManager.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
ctor public GridLayoutManager.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ ctor public GridLayoutManager.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
ctor public GridLayoutManager.LayoutParams(androidx.recyclerview.widget.RecyclerView.LayoutParams!);
+ ctor public GridLayoutManager.LayoutParams(int, int);
method public int getSpanIndex();
method public int getSpanSize();
field public static final int INVALID_SPAN_ID = -1; // 0xffffffff
@@ -273,8 +273,8 @@
public class LinearLayoutManager extends androidx.recyclerview.widget.RecyclerView.LayoutManager implements androidx.recyclerview.widget.ItemTouchHelper.ViewDropHandler androidx.recyclerview.widget.RecyclerView.SmoothScroller.ScrollVectorProvider {
ctor public LinearLayoutManager(android.content.Context!);
- ctor public LinearLayoutManager(android.content.Context!, int, boolean);
ctor public LinearLayoutManager(android.content.Context!, android.util.AttributeSet!, int, int);
+ ctor public LinearLayoutManager(android.content.Context!, int, boolean);
method protected void calculateExtraLayoutSpace(androidx.recyclerview.widget.RecyclerView.State, int[]);
method public android.graphics.PointF! computeScrollVectorForPosition(int);
method public int findFirstCompletelyVisibleItemPosition();
@@ -344,8 +344,8 @@
}
public abstract class ListAdapter<T, VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> extends androidx.recyclerview.widget.RecyclerView.Adapter<VH> {
- ctor protected ListAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T!>);
ctor protected ListAdapter(androidx.recyclerview.widget.AsyncDifferConfig<T!>);
+ ctor protected ListAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T!>);
method public java.util.List<T!> getCurrentList();
method protected T! getItem(int);
method public int getItemCount();
@@ -399,8 +399,8 @@
ctor public RecyclerView(android.content.Context);
ctor public RecyclerView(android.content.Context, android.util.AttributeSet?);
ctor public RecyclerView(android.content.Context, android.util.AttributeSet?, int);
- method public void addItemDecoration(androidx.recyclerview.widget.RecyclerView.ItemDecoration, int);
method public void addItemDecoration(androidx.recyclerview.widget.RecyclerView.ItemDecoration);
+ method public void addItemDecoration(androidx.recyclerview.widget.RecyclerView.ItemDecoration, int);
method public void addOnChildAttachStateChangeListener(androidx.recyclerview.widget.RecyclerView.OnChildAttachStateChangeListener);
method public void addOnItemTouchListener(androidx.recyclerview.widget.RecyclerView.OnItemTouchListener);
method public void addOnScrollListener(androidx.recyclerview.widget.RecyclerView.OnScrollListener);
@@ -633,12 +633,12 @@
public abstract static class RecyclerView.ItemDecoration {
ctor public RecyclerView.ItemDecoration();
- method @Deprecated public void getItemOffsets(android.graphics.Rect, int, androidx.recyclerview.widget.RecyclerView);
method public void getItemOffsets(android.graphics.Rect, android.view.View, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State);
- method public void onDraw(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State);
+ method @Deprecated public void getItemOffsets(android.graphics.Rect, int, androidx.recyclerview.widget.RecyclerView);
method @Deprecated public void onDraw(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView);
- method public void onDrawOver(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State);
+ method public void onDraw(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State);
method @Deprecated public void onDrawOver(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView);
+ method public void onDrawOver(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State);
}
public abstract static class RecyclerView.LayoutManager {
@@ -649,9 +649,9 @@
method public void addView(android.view.View!, int);
method public void assertInLayoutOrScroll(String!);
method public void assertNotInLayoutOrScroll(String!);
- method public void attachView(android.view.View, int, androidx.recyclerview.widget.RecyclerView.LayoutParams!);
- method public void attachView(android.view.View, int);
method public void attachView(android.view.View);
+ method public void attachView(android.view.View, int);
+ method public void attachView(android.view.View, int, androidx.recyclerview.widget.RecyclerView.LayoutParams!);
method public void calculateItemDecorationsForChild(android.view.View, android.graphics.Rect);
method public boolean canScrollHorizontally();
method public boolean canScrollVertically();
@@ -674,8 +674,8 @@
method public android.view.View? findContainingItemView(android.view.View);
method public android.view.View? findViewByPosition(int);
method public abstract androidx.recyclerview.widget.RecyclerView.LayoutParams! generateDefaultLayoutParams();
- method public androidx.recyclerview.widget.RecyclerView.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
method public androidx.recyclerview.widget.RecyclerView.LayoutParams! generateLayoutParams(android.content.Context!, android.util.AttributeSet!);
+ method public androidx.recyclerview.widget.RecyclerView.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
method public int getBaseline();
method public int getBottomDecorationHeight(android.view.View);
method public android.view.View? getChildAt(int);
@@ -800,10 +800,10 @@
public static class RecyclerView.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
ctor public RecyclerView.LayoutParams(android.content.Context!, android.util.AttributeSet!);
- ctor public RecyclerView.LayoutParams(int, int);
- ctor public RecyclerView.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
ctor public RecyclerView.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ ctor public RecyclerView.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
ctor public RecyclerView.LayoutParams(androidx.recyclerview.widget.RecyclerView.LayoutParams!);
+ ctor public RecyclerView.LayoutParams(int, int);
method public int getAbsoluteAdapterPosition();
method public int getBindingAdapterPosition();
method @Deprecated public int getViewAdapterPosition();
@@ -1003,9 +1003,9 @@
ctor public SortedList(Class<T!>, androidx.recyclerview.widget.SortedList.Callback<T!>);
ctor public SortedList(Class<T!>, androidx.recyclerview.widget.SortedList.Callback<T!>, int);
method public int add(T!);
- method public void addAll(T![], boolean);
- method public void addAll(T!...);
method public void addAll(java.util.Collection<T!>);
+ method public void addAll(T!...);
+ method public void addAll(T![], boolean);
method public void beginBatchedUpdates();
method public void clear();
method public void endBatchedUpdates();
@@ -1014,9 +1014,9 @@
method public void recalculatePositionOfItemAt(int);
method public boolean remove(T!);
method public T! removeItemAt(int);
- method public void replaceAll(T![], boolean);
- method public void replaceAll(T!...);
method public void replaceAll(java.util.Collection<T!>);
+ method public void replaceAll(T!...);
+ method public void replaceAll(T![], boolean);
method public int size();
method public void updateItemAt(int, T!);
field public static final int INVALID_POSITION = -1; // 0xffffffff
@@ -1080,10 +1080,10 @@
public static class StaggeredGridLayoutManager.LayoutParams extends androidx.recyclerview.widget.RecyclerView.LayoutParams {
ctor public StaggeredGridLayoutManager.LayoutParams(android.content.Context!, android.util.AttributeSet!);
- ctor public StaggeredGridLayoutManager.LayoutParams(int, int);
- ctor public StaggeredGridLayoutManager.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
ctor public StaggeredGridLayoutManager.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ ctor public StaggeredGridLayoutManager.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
ctor public StaggeredGridLayoutManager.LayoutParams(androidx.recyclerview.widget.RecyclerView.LayoutParams!);
+ ctor public StaggeredGridLayoutManager.LayoutParams(int, int);
method public final int getSpanIndex();
method public boolean isFullSpan();
method public void setFullSpan(boolean);
diff --git a/recyclerview/recyclerview/api/restricted_current.txt b/recyclerview/recyclerview/api/restricted_current.txt
index 2b2bdad..8d25f96 100644
--- a/recyclerview/recyclerview/api/restricted_current.txt
+++ b/recyclerview/recyclerview/api/restricted_current.txt
@@ -21,8 +21,8 @@
}
public class AsyncListDiffer<T> {
- ctor public AsyncListDiffer(androidx.recyclerview.widget.RecyclerView.Adapter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T!>);
ctor public AsyncListDiffer(androidx.recyclerview.widget.ListUpdateCallback, androidx.recyclerview.widget.AsyncDifferConfig<T!>);
+ ctor public AsyncListDiffer(androidx.recyclerview.widget.RecyclerView.Adapter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T!>);
method public void addListListener(androidx.recyclerview.widget.AsyncListDiffer.ListListener<T!>);
method public java.util.List<T!> getCurrentList();
method public void removeListListener(androidx.recyclerview.widget.AsyncListDiffer.ListListener<T!>);
@@ -71,10 +71,10 @@
}
public final class ConcatAdapter extends androidx.recyclerview.widget.RecyclerView.Adapter<androidx.recyclerview.widget.RecyclerView.ViewHolder> {
- ctor @java.lang.SafeVarargs public ConcatAdapter(androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>!...);
ctor @java.lang.SafeVarargs public ConcatAdapter(androidx.recyclerview.widget.ConcatAdapter.Config, androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>!...);
- ctor public ConcatAdapter(java.util.List<? extends androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>>);
ctor public ConcatAdapter(androidx.recyclerview.widget.ConcatAdapter.Config, java.util.List<? extends androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>>);
+ ctor @java.lang.SafeVarargs public ConcatAdapter(androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>!...);
+ ctor public ConcatAdapter(java.util.List<? extends androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>>);
method public boolean addAdapter(androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>);
method public boolean addAdapter(int, androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>);
method public java.util.List<? extends androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>> getAdapters();
@@ -137,8 +137,8 @@
public static class DiffUtil.DiffResult {
method public int convertNewPositionToOld(@IntRange(from=0) int);
method public int convertOldPositionToNew(@IntRange(from=0) int);
- method public void dispatchUpdatesTo(androidx.recyclerview.widget.RecyclerView.Adapter);
method public void dispatchUpdatesTo(androidx.recyclerview.widget.ListUpdateCallback);
+ method public void dispatchUpdatesTo(androidx.recyclerview.widget.RecyclerView.Adapter);
field public static final int NO_POSITION = -1; // 0xffffffff
}
@@ -178,10 +178,10 @@
public static class GridLayoutManager.LayoutParams extends androidx.recyclerview.widget.RecyclerView.LayoutParams {
ctor public GridLayoutManager.LayoutParams(android.content.Context!, android.util.AttributeSet!);
- ctor public GridLayoutManager.LayoutParams(int, int);
- ctor public GridLayoutManager.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
ctor public GridLayoutManager.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ ctor public GridLayoutManager.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
ctor public GridLayoutManager.LayoutParams(androidx.recyclerview.widget.RecyclerView.LayoutParams!);
+ ctor public GridLayoutManager.LayoutParams(int, int);
method public int getSpanIndex();
method public int getSpanSize();
field public static final int INVALID_SPAN_ID = -1; // 0xffffffff
@@ -273,8 +273,8 @@
public class LinearLayoutManager extends androidx.recyclerview.widget.RecyclerView.LayoutManager implements androidx.recyclerview.widget.ItemTouchHelper.ViewDropHandler androidx.recyclerview.widget.RecyclerView.SmoothScroller.ScrollVectorProvider {
ctor public LinearLayoutManager(android.content.Context!);
- ctor public LinearLayoutManager(android.content.Context!, @androidx.recyclerview.widget.RecyclerView.Orientation int, boolean);
ctor public LinearLayoutManager(android.content.Context!, android.util.AttributeSet!, int, int);
+ ctor public LinearLayoutManager(android.content.Context!, @androidx.recyclerview.widget.RecyclerView.Orientation int, boolean);
method protected void calculateExtraLayoutSpace(androidx.recyclerview.widget.RecyclerView.State, int[]);
method public android.graphics.PointF! computeScrollVectorForPosition(int);
method public int findFirstCompletelyVisibleItemPosition();
@@ -344,8 +344,8 @@
}
public abstract class ListAdapter<T, VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> extends androidx.recyclerview.widget.RecyclerView.Adapter<VH> {
- ctor protected ListAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T!>);
ctor protected ListAdapter(androidx.recyclerview.widget.AsyncDifferConfig<T!>);
+ ctor protected ListAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T!>);
method public java.util.List<T!> getCurrentList();
method protected T! getItem(int);
method public int getItemCount();
@@ -399,8 +399,8 @@
ctor public RecyclerView(android.content.Context);
ctor public RecyclerView(android.content.Context, android.util.AttributeSet?);
ctor public RecyclerView(android.content.Context, android.util.AttributeSet?, int);
- method public void addItemDecoration(androidx.recyclerview.widget.RecyclerView.ItemDecoration, int);
method public void addItemDecoration(androidx.recyclerview.widget.RecyclerView.ItemDecoration);
+ method public void addItemDecoration(androidx.recyclerview.widget.RecyclerView.ItemDecoration, int);
method public void addOnChildAttachStateChangeListener(androidx.recyclerview.widget.RecyclerView.OnChildAttachStateChangeListener);
method public void addOnItemTouchListener(androidx.recyclerview.widget.RecyclerView.OnItemTouchListener);
method public void addOnScrollListener(androidx.recyclerview.widget.RecyclerView.OnScrollListener);
@@ -633,12 +633,12 @@
public abstract static class RecyclerView.ItemDecoration {
ctor public RecyclerView.ItemDecoration();
- method @Deprecated public void getItemOffsets(android.graphics.Rect, int, androidx.recyclerview.widget.RecyclerView);
method public void getItemOffsets(android.graphics.Rect, android.view.View, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State);
- method public void onDraw(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State);
+ method @Deprecated public void getItemOffsets(android.graphics.Rect, int, androidx.recyclerview.widget.RecyclerView);
method @Deprecated public void onDraw(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView);
- method public void onDrawOver(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State);
+ method public void onDraw(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State);
method @Deprecated public void onDrawOver(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView);
+ method public void onDrawOver(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State);
}
public abstract static class RecyclerView.LayoutManager {
@@ -649,9 +649,9 @@
method public void addView(android.view.View!, int);
method public void assertInLayoutOrScroll(String!);
method public void assertNotInLayoutOrScroll(String!);
- method public void attachView(android.view.View, int, androidx.recyclerview.widget.RecyclerView.LayoutParams!);
- method public void attachView(android.view.View, int);
method public void attachView(android.view.View);
+ method public void attachView(android.view.View, int);
+ method public void attachView(android.view.View, int, androidx.recyclerview.widget.RecyclerView.LayoutParams!);
method public void calculateItemDecorationsForChild(android.view.View, android.graphics.Rect);
method public boolean canScrollHorizontally();
method public boolean canScrollVertically();
@@ -674,8 +674,8 @@
method public android.view.View? findContainingItemView(android.view.View);
method public android.view.View? findViewByPosition(int);
method public abstract androidx.recyclerview.widget.RecyclerView.LayoutParams! generateDefaultLayoutParams();
- method public androidx.recyclerview.widget.RecyclerView.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
method public androidx.recyclerview.widget.RecyclerView.LayoutParams! generateLayoutParams(android.content.Context!, android.util.AttributeSet!);
+ method public androidx.recyclerview.widget.RecyclerView.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
method public int getBaseline();
method public int getBottomDecorationHeight(android.view.View);
method public android.view.View? getChildAt(int);
@@ -800,10 +800,10 @@
public static class RecyclerView.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
ctor public RecyclerView.LayoutParams(android.content.Context!, android.util.AttributeSet!);
- ctor public RecyclerView.LayoutParams(int, int);
- ctor public RecyclerView.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
ctor public RecyclerView.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ ctor public RecyclerView.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
ctor public RecyclerView.LayoutParams(androidx.recyclerview.widget.RecyclerView.LayoutParams!);
+ ctor public RecyclerView.LayoutParams(int, int);
method public int getAbsoluteAdapterPosition();
method public int getBindingAdapterPosition();
method @Deprecated public int getViewAdapterPosition();
@@ -1006,9 +1006,9 @@
ctor public SortedList(Class<T!>, androidx.recyclerview.widget.SortedList.Callback<T!>);
ctor public SortedList(Class<T!>, androidx.recyclerview.widget.SortedList.Callback<T!>, int);
method public int add(T!);
- method public void addAll(T![], boolean);
- method public void addAll(T!...);
method public void addAll(java.util.Collection<T!>);
+ method public void addAll(T!...);
+ method public void addAll(T![], boolean);
method public void beginBatchedUpdates();
method public void clear();
method public void endBatchedUpdates();
@@ -1017,9 +1017,9 @@
method public void recalculatePositionOfItemAt(int);
method public boolean remove(T!);
method public T! removeItemAt(int);
- method public void replaceAll(T![], boolean);
- method public void replaceAll(T!...);
method public void replaceAll(java.util.Collection<T!>);
+ method public void replaceAll(T!...);
+ method public void replaceAll(T![], boolean);
method public int size();
method public void updateItemAt(int, T!);
field public static final int INVALID_POSITION = -1; // 0xffffffff
@@ -1083,10 +1083,10 @@
public static class StaggeredGridLayoutManager.LayoutParams extends androidx.recyclerview.widget.RecyclerView.LayoutParams {
ctor public StaggeredGridLayoutManager.LayoutParams(android.content.Context!, android.util.AttributeSet!);
- ctor public StaggeredGridLayoutManager.LayoutParams(int, int);
- ctor public StaggeredGridLayoutManager.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
ctor public StaggeredGridLayoutManager.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ ctor public StaggeredGridLayoutManager.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
ctor public StaggeredGridLayoutManager.LayoutParams(androidx.recyclerview.widget.RecyclerView.LayoutParams!);
+ ctor public StaggeredGridLayoutManager.LayoutParams(int, int);
method public final int getSpanIndex();
method public boolean isFullSpan();
method public void setFullSpan(boolean);
diff --git a/recyclerview/recyclerview/build.gradle b/recyclerview/recyclerview/build.gradle
index aecfc856..8c7e013 100644
--- a/recyclerview/recyclerview/build.gradle
+++ b/recyclerview/recyclerview/build.gradle
@@ -58,7 +58,7 @@
}
androidx {
- name = "Android Support RecyclerView"
+ name = "RecyclerView"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.RECYCLERVIEW
inceptionYear = "2014"
diff --git a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/AsyncListDifferTest.kt b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/AsyncListDifferTest.kt
index 2b4ec9a..c3da7a7 100644
--- a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/AsyncListDifferTest.kt
+++ b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/AsyncListDifferTest.kt
@@ -19,6 +19,7 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import androidx.testutils.TestExecutor
+import java.util.Collections.emptyList
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotSame
import org.junit.Assert.assertSame
@@ -30,7 +31,6 @@
import org.mockito.Mockito.verify
import org.mockito.Mockito.verifyNoMoreInteractions
import org.mockito.Mockito.verifyZeroInteractions
-import java.util.Collections.emptyList
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/BaseSnapHelperCenterTest.kt b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/BaseSnapHelperCenterTest.kt
index 2d8f2e1..eac39fc 100644
--- a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/BaseSnapHelperCenterTest.kt
+++ b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/BaseSnapHelperCenterTest.kt
@@ -16,22 +16,19 @@
package androidx.recyclerview.widget
-import org.hamcrest.CoreMatchers.`is`
-import org.hamcrest.MatcherAssert.assertThat
-
import android.content.Context
import android.view.View
import android.view.ViewGroup
import androidx.test.core.app.ApplicationProvider
import androidx.test.filters.LargeTest
-
+import java.util.ArrayList
+import org.hamcrest.CoreMatchers.`is`
+import org.hamcrest.MatcherAssert.assertThat
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import java.util.ArrayList
-
/**
* Small integration test base that helps verify that [SnapHelper]s that implement "center"
* snapping define "center" correctly.
diff --git a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/ConcatAdapterTest.kt b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/ConcatAdapterTest.kt
index be28ecd..89330ac 100644
--- a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/ConcatAdapterTest.kt
+++ b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/ConcatAdapterTest.kt
@@ -44,12 +44,12 @@
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
+import java.lang.reflect.Method
+import java.lang.reflect.Modifier
import org.junit.Assert.fail
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import java.lang.reflect.Method
-import java.lang.reflect.Modifier
@RunWith(AndroidJUnit4::class)
@SmallTest
diff --git a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/LazyStateRestorationTest.kt b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/LazyStateRestorationTest.kt
index b9265e5..841555c 100644
--- a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/LazyStateRestorationTest.kt
+++ b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/LazyStateRestorationTest.kt
@@ -33,12 +33,12 @@
import androidx.test.core.app.ApplicationProvider.getApplicationContext
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
+import java.util.LinkedHashMap
+import java.util.UUID
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import java.util.LinkedHashMap
-import java.util.UUID
@RunWith(Parameterized::class)
@SmallTest
diff --git a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/LinearLayoutManagerFindReferenceChildTest.kt b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/LinearLayoutManagerFindReferenceChildTest.kt
index 12a8a44..987a3f9 100644
--- a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/LinearLayoutManagerFindReferenceChildTest.kt
+++ b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/LinearLayoutManagerFindReferenceChildTest.kt
@@ -21,11 +21,11 @@
import androidx.recyclerview.widget.RecyclerView.HORIZONTAL
import androidx.recyclerview.widget.RecyclerView.VERTICAL
import androidx.test.filters.MediumTest
+import java.util.ArrayList
import org.junit.Assert.assertEquals
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import java.util.ArrayList
// Size of both the width and height of both RecyclerView and it's children
private const val size = 500
diff --git a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/LinearLayoutManagerFindZeroPxReferenceChildTest.kt b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/LinearLayoutManagerFindZeroPxReferenceChildTest.kt
index 5476284..da4e121 100644
--- a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/LinearLayoutManagerFindZeroPxReferenceChildTest.kt
+++ b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/LinearLayoutManagerFindZeroPxReferenceChildTest.kt
@@ -21,11 +21,11 @@
import androidx.recyclerview.widget.RecyclerView.HORIZONTAL
import androidx.recyclerview.widget.RecyclerView.VERTICAL
import androidx.test.filters.MediumTest
+import java.util.ArrayList
import org.junit.Assert
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import java.util.ArrayList
// Number of items that fit in RecyclerView's viewport
private const val n = 4
diff --git a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/LinearSnapHelperCenterTest.kt b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/LinearSnapHelperCenterTest.kt
index ac974a6..e05e6c00 100644
--- a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/LinearSnapHelperCenterTest.kt
+++ b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/LinearSnapHelperCenterTest.kt
@@ -17,7 +17,6 @@
package androidx.recyclerview.widget
import androidx.test.filters.LargeTest
-
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
diff --git a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/ListAdapterTest.kt b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/ListAdapterTest.kt
index 5e811b7..5411f39 100644
--- a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/ListAdapterTest.kt
+++ b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/ListAdapterTest.kt
@@ -20,6 +20,7 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import androidx.testutils.TestExecutor
+import java.util.Collections.emptyList
import org.junit.Assert.assertEquals
import org.junit.Test
import org.junit.runner.RunWith
@@ -28,7 +29,6 @@
import org.mockito.Mockito.verify
import org.mockito.Mockito.verifyNoMoreInteractions
import org.mockito.Mockito.verifyZeroInteractions
-import java.util.Collections.emptyList
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/PagerSnapHelperCenterTest.kt b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/PagerSnapHelperCenterTest.kt
index 017572a..1d62973 100644
--- a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/PagerSnapHelperCenterTest.kt
+++ b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/PagerSnapHelperCenterTest.kt
@@ -17,7 +17,6 @@
package androidx.recyclerview.widget
import androidx.test.filters.LargeTest
-
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
diff --git a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewNestedScrollingFlingTest.kt b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewNestedScrollingFlingTest.kt
index 6954bc2..201394a 100644
--- a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewNestedScrollingFlingTest.kt
+++ b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewNestedScrollingFlingTest.kt
@@ -28,6 +28,8 @@
import androidx.test.filters.LargeTest
import androidx.testutils.ActivityScenarioResetRule
import androidx.testutils.ResettableActivityScenarioRule
+import java.util.ArrayList
+import java.util.Arrays
import org.hamcrest.MatcherAssert.assertThat
import org.hamcrest.Matchers.closeTo
import org.junit.Before
@@ -36,8 +38,6 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import java.util.ArrayList
-import java.util.Arrays
/**
* This test verifies that the velocity that RecyclerView flings with in response to finger input
diff --git a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewSmoothScrollToPositionTest.kt b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewSmoothScrollToPositionTest.kt
index 6fdbaf7..fcfce45 100644
--- a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewSmoothScrollToPositionTest.kt
+++ b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewSmoothScrollToPositionTest.kt
@@ -22,14 +22,14 @@
import android.widget.TextView
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.hamcrest.CoreMatchers.`is`
-import org.junit.Assert
import org.hamcrest.MatcherAssert.assertThat
+import org.junit.Assert
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@LargeTest
@RunWith(AndroidJUnit4::class)
diff --git a/recyclerview/recyclerview/src/test/java/androidx/recyclerview/widget/DiffUtilTest.kt b/recyclerview/recyclerview/src/test/java/androidx/recyclerview/widget/DiffUtilTest.kt
index 8aa135a..7146b50 100644
--- a/recyclerview/recyclerview/src/test/java/androidx/recyclerview/widget/DiffUtilTest.kt
+++ b/recyclerview/recyclerview/src/test/java/androidx/recyclerview/widget/DiffUtilTest.kt
@@ -15,8 +15,10 @@
*/
package androidx.recyclerview.widget
-import org.hamcrest.CoreMatchers.`is`
+import java.util.Random
+import java.util.UUID
import org.hamcrest.CoreMatchers.equalTo
+import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.CoreMatchers.not
import org.hamcrest.CoreMatchers.nullValue
import org.hamcrest.MatcherAssert.assertThat
@@ -29,8 +31,6 @@
import org.junit.runner.Description
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import java.util.Random
-import java.util.UUID
@RunWith(JUnit4::class)
class DiffUtilTest {
diff --git a/resourceinspection/resourceinspection-annotation/build.gradle b/resourceinspection/resourceinspection-annotation/build.gradle
index 86bb07a..a5b9ce9 100644
--- a/resourceinspection/resourceinspection-annotation/build.gradle
+++ b/resourceinspection/resourceinspection-annotation/build.gradle
@@ -26,7 +26,7 @@
}
androidx {
- name = "Android Resource Inspection - Annotations"
+ name = "Resource Inspection - Annotations"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2021"
description = "Annotation processors for Android resource and layout inspection"
diff --git a/resourceinspection/resourceinspection-processor/build.gradle b/resourceinspection/resourceinspection-processor/build.gradle
index a633319..959ea3d 100644
--- a/resourceinspection/resourceinspection-processor/build.gradle
+++ b/resourceinspection/resourceinspection-processor/build.gradle
@@ -50,7 +50,7 @@
}
androidx {
- name = "Android Resource Inspection - Annotation Processor"
+ name = "Resource Inspection - Annotation Processor"
type = LibraryType.ANNOTATION_PROCESSOR
inceptionYear = "2021"
description = "Annotation processors for Android resource and layout inspection"
diff --git a/resourceinspection/resourceinspection-processor/src/main/kotlin/androidx/resourceinspection/processor/ResourceInspectionProcessor.kt b/resourceinspection/resourceinspection-processor/src/main/kotlin/androidx/resourceinspection/processor/ResourceInspectionProcessor.kt
index 4611436..41a9564 100644
--- a/resourceinspection/resourceinspection-processor/src/main/kotlin/androidx/resourceinspection/processor/ResourceInspectionProcessor.kt
+++ b/resourceinspection/resourceinspection-processor/src/main/kotlin/androidx/resourceinspection/processor/ResourceInspectionProcessor.kt
@@ -18,10 +18,10 @@
import com.google.auto.common.BasicAnnotationProcessor
import com.google.auto.service.AutoService
-import net.ltgt.gradle.incap.IncrementalAnnotationProcessor
-import net.ltgt.gradle.incap.IncrementalAnnotationProcessorType.ISOLATING
import javax.annotation.processing.Processor
import javax.lang.model.SourceVersion
+import net.ltgt.gradle.incap.IncrementalAnnotationProcessor
+import net.ltgt.gradle.incap.IncrementalAnnotationProcessorType.ISOLATING
/** Annotation processor for resource inspection tools. */
@AutoService(Processor::class)
diff --git a/resourceinspection/resourceinspection-processor/src/test/kotlin/androidx/resourceinspection/processor/ResourceInspectionProcessorTest.kt b/resourceinspection/resourceinspection-processor/src/test/kotlin/androidx/resourceinspection/processor/ResourceInspectionProcessorTest.kt
index 0395f1c..87c1746 100644
--- a/resourceinspection/resourceinspection-processor/src/test/kotlin/androidx/resourceinspection/processor/ResourceInspectionProcessorTest.kt
+++ b/resourceinspection/resourceinspection-processor/src/test/kotlin/androidx/resourceinspection/processor/ResourceInspectionProcessorTest.kt
@@ -21,11 +21,11 @@
import com.google.testing.compile.CompilationSubject.assertThat
import com.google.testing.compile.Compiler.javac
import com.google.testing.compile.JavaFileObjects
-import org.intellij.lang.annotations.Language
-import org.junit.Test
import java.io.File
import javax.lang.model.SourceVersion
import javax.tools.JavaFileObject
+import org.intellij.lang.annotations.Language
+import org.junit.Test
/** Integration and unit tests for [ResourceInspectionProcessor]. */
class ResourceInspectionProcessorTest {
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/NewThreadDispatcher.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/NewThreadDispatcher.kt
index 376823b..e61991e 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/NewThreadDispatcher.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/NewThreadDispatcher.kt
@@ -16,12 +16,12 @@
package androidx.room.integration.kotlintestapp
-import kotlinx.coroutines.CoroutineDispatcher
-import kotlinx.coroutines.InternalCoroutinesApi
-import kotlinx.coroutines.Runnable
import java.util.concurrent.atomic.AtomicInteger
import kotlin.concurrent.thread
import kotlin.coroutines.CoroutineContext
+import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.InternalCoroutinesApi
+import kotlinx.coroutines.Runnable
/**
* A CoroutineDispatcher that dispatches every block into a new thread
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/TestDatabase.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/TestDatabase.kt
index 5ecead7..2d4cb03 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/TestDatabase.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/TestDatabase.kt
@@ -47,11 +47,11 @@
import androidx.room.integration.kotlintestapp.vo.PlaylistSongXRef
import androidx.room.integration.kotlintestapp.vo.Publisher
import androidx.room.integration.kotlintestapp.vo.Song
+import androidx.room.integration.kotlintestapp.vo.Toy
+import androidx.room.integration.kotlintestapp.vo.User
import java.nio.ByteBuffer
import java.util.Date
import java.util.UUID
-import androidx.room.integration.kotlintestapp.vo.Toy
-import androidx.room.integration.kotlintestapp.vo.User
@Database(
entities = [
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/migration/MigrationKotlinTest.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/migration/MigrationKotlinTest.kt
index d5bc9e5..625d44f 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/migration/MigrationKotlinTest.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/migration/MigrationKotlinTest.kt
@@ -24,15 +24,15 @@
import androidx.sqlite.db.SupportSQLiteDatabase
import androidx.test.filters.MediumTest
import androidx.test.platform.app.InstrumentationRegistry
-import org.hamcrest.CoreMatchers.`is`
+import java.io.FileNotFoundException
+import java.io.IOException
import org.hamcrest.CoreMatchers.containsString
import org.hamcrest.CoreMatchers.instanceOf
+import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.CoreMatchers.nullValue
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Rule
import org.junit.Test
-import java.io.FileNotFoundException
-import java.io.IOException
@MediumTest
class MigrationKotlinTest {
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/BoxedNonNullTypesTest.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/BoxedNonNullTypesTest.kt
index 005da89..9679239 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/BoxedNonNullTypesTest.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/BoxedNonNullTypesTest.kt
@@ -37,13 +37,13 @@
import com.google.common.util.concurrent.ListenableFuture
import io.reactivex.Flowable
import io.reactivex.Observable
+import java.util.Optional
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.runBlocking
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.Optional
/**
* This test matters in KSP specifically where we might use primitive adapter for non-null java
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/ConstructorInheritanceTest.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/ConstructorInheritanceTest.kt
index f5af52b..64f21a7 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/ConstructorInheritanceTest.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/ConstructorInheritanceTest.kt
@@ -30,9 +30,9 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
-import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.CoreMatchers.equalTo
import org.hamcrest.CoreMatchers.hasItems
+import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.MatcherAssert.assertThat
import org.hamcrest.Matchers.hasSize
import org.junit.Test
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/FlowQueryTest.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/FlowQueryTest.kt
index 31b33dc..6653b7f 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/FlowQueryTest.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/FlowQueryTest.kt
@@ -21,6 +21,8 @@
import androidx.room.withTransaction
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.FlowPreview
@@ -38,8 +40,6 @@
import org.junit.Assert.fail
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@OptIn(ExperimentalCoroutinesApi::class, FlowPreview::class)
@MediumTest
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/InvalidationTrackerFlowTest.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/InvalidationTrackerFlowTest.kt
index 4f5c817..7c0345f 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/InvalidationTrackerFlowTest.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/InvalidationTrackerFlowTest.kt
@@ -224,6 +224,7 @@
channel.cancel()
}
+ @Ignore("b/277764166")
@Test
fun mapTransactionQuery() = runBlocking {
booksDao.addAuthors(TestUtil.AUTHOR_1)
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/QueryInterceptorTest.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/QueryInterceptorTest.kt
index 909eabb..4f6a445 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/QueryInterceptorTest.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/QueryInterceptorTest.kt
@@ -32,6 +32,7 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.google.common.util.concurrent.MoreExecutors
+import java.util.concurrent.CopyOnWriteArrayList
import org.junit.After
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotNull
@@ -39,7 +40,6 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CopyOnWriteArrayList
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/Rx3PagingSourceTest.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/Rx3PagingSourceTest.kt
index 1423d98..cef0319 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/Rx3PagingSourceTest.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/Rx3PagingSourceTest.kt
@@ -16,10 +16,10 @@
package androidx.room.integration.kotlintestapp.test
+import androidx.kruth.assertThat
import androidx.paging.Pager
import androidx.paging.PagingState
import androidx.paging.rxjava3.RxPagingSource
-import androidx.kruth.assertThat
import androidx.room.Room
import androidx.room.RoomDatabase
import androidx.room.integration.kotlintestapp.testutil.ItemStore
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/SneakyThrowTest.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/SneakyThrowTest.kt
index 2fee4f7..977ba54 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/SneakyThrowTest.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/SneakyThrowTest.kt
@@ -18,12 +18,12 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
+import java.util.concurrent.Callable
import org.json.JSONException
import org.json.JSONObject
import org.junit.Assert.fail
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.Callable
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/SuspendRoomDispatcherTest.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/SuspendRoomDispatcherTest.kt
index 744283c..10770bc 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/SuspendRoomDispatcherTest.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/SuspendRoomDispatcherTest.kt
@@ -19,13 +19,13 @@
import androidx.arch.core.executor.ArchTaskExecutor
import androidx.arch.core.executor.DefaultTaskExecutor
import androidx.test.filters.SmallTest
+import java.util.concurrent.atomic.AtomicInteger
import kotlinx.coroutines.runBlocking
import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.MatcherAssert.assertThat
import org.junit.After
import org.junit.Before
import org.junit.Test
-import java.util.concurrent.atomic.AtomicInteger
/**
* A small test to verify Room's executor is used as dispatcher for DAO suspend functions.
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/SuspendingTransactionCancellationTest.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/SuspendingTransactionCancellationTest.kt
index 3bf3982..f92825f 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/SuspendingTransactionCancellationTest.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/SuspendingTransactionCancellationTest.kt
@@ -16,14 +16,15 @@
package androidx.room.integration.kotlintestapp.test
+import androidx.kruth.assertThat
import androidx.room.integration.kotlintestapp.vo.Book
import androidx.room.withTransaction
-import androidx.kruth.assertThat
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import androidx.test.filters.MediumTest
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
+import java.util.concurrent.TimeUnit
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.CoroutineScope
@@ -40,7 +41,6 @@
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.TimeUnit
// see b/148181325
@RunWith(AndroidJUnit4::class)
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/UuidColumnTypeAdapterTest.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/UuidColumnTypeAdapterTest.kt
index f7d3dc9..4bd0c4f 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/UuidColumnTypeAdapterTest.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/UuidColumnTypeAdapterTest.kt
@@ -30,11 +30,11 @@
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
-import org.junit.Test
-import org.junit.runner.RunWith
import java.nio.ByteBuffer
import java.util.UUID
import kotlin.reflect.KClass
+import org.junit.Test
+import org.junit.runner.RunWith
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/room/room-common/build.gradle b/room/room-common/build.gradle
index 151639e..bd514ec 100644
--- a/room/room-common/build.gradle
+++ b/room/room-common/build.gradle
@@ -32,7 +32,7 @@
}
androidx {
- name = "Android Room-Common"
+ name = "Room-Common"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2017"
description = "Android Room-Common"
diff --git a/room/room-common/src/main/java/androidx/room/Fts4.kt b/room/room-common/src/main/java/androidx/room/Fts4.kt
index 7255265..f9ed6e1 100644
--- a/room/room-common/src/main/java/androidx/room/Fts4.kt
+++ b/room/room-common/src/main/java/androidx/room/Fts4.kt
@@ -16,12 +16,11 @@
package androidx.room
-import kotlin.reflect.KClass
-
import androidx.annotation.RequiresApi
-import androidx.room.FtsOptions.TOKENIZER_SIMPLE
import androidx.room.FtsOptions.MatchInfo
import androidx.room.FtsOptions.Order
+import androidx.room.FtsOptions.TOKENIZER_SIMPLE
+import kotlin.reflect.KClass
/**
* Marks an [Entity] annotated class as a FTS4 entity. This class will have a mapping SQLite
diff --git a/room/room-common/src/test/java/androidx/room/AmbiguousColumnResolverTest.kt b/room/room-common/src/test/java/androidx/room/AmbiguousColumnResolverTest.kt
index 80885a53..65dc715 100644
--- a/room/room-common/src/test/java/androidx/room/AmbiguousColumnResolverTest.kt
+++ b/room/room-common/src/test/java/androidx/room/AmbiguousColumnResolverTest.kt
@@ -18,8 +18,8 @@
import androidx.kruth.assertThat
import java.util.Locale
-import org.junit.Test
import org.junit.Ignore
+import org.junit.Test
class AmbiguousColumnResolverTest {
diff --git a/room/room-common/src/test/java/androidx/room/AnnotationRetentionPolicyTest.kt b/room/room-common/src/test/java/androidx/room/AnnotationRetentionPolicyTest.kt
index 43a60e5..025fe3b 100644
--- a/room/room-common/src/test/java/androidx/room/AnnotationRetentionPolicyTest.kt
+++ b/room/room-common/src/test/java/androidx/room/AnnotationRetentionPolicyTest.kt
@@ -18,9 +18,9 @@
import androidx.kruth.assertThat
import com.google.common.reflect.ClassPath
-import org.junit.Test
import java.lang.annotation.Retention
import java.lang.annotation.RetentionPolicy
+import org.junit.Test
/** Test to make sure annotations have the correct retention policy. */
class AnnotationRetentionPolicyTest {
diff --git a/room/room-compiler-processing-testing/build.gradle b/room/room-compiler-processing-testing/build.gradle
index 2d1f1e7c..abc8872 100644
--- a/room/room-compiler-processing-testing/build.gradle
+++ b/room/room-compiler-processing-testing/build.gradle
@@ -72,7 +72,7 @@
}
androidx {
- name = "AndroidX Room XProcessor Testing"
+ name = "Room XProcessor Testing"
type = LibraryType.ANNOTATION_PROCESSOR_UTILS
inceptionYear = "2020"
description = "Testing helpers for Room XProcessing APIs"
diff --git a/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/CompilationTestCapabilities.kt b/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/CompilationTestCapabilities.kt
index d611ef2..ba27129 100644
--- a/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/CompilationTestCapabilities.kt
+++ b/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/CompilationTestCapabilities.kt
@@ -16,8 +16,8 @@
package androidx.room.compiler.processing.util
-import org.junit.AssumptionViolatedException
import java.util.Properties
+import org.junit.AssumptionViolatedException
/**
* Provides the information about compilation test capabilities.
diff --git a/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/Source.kt b/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/Source.kt
index 4860763..4e97a26 100644
--- a/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/Source.kt
+++ b/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/Source.kt
@@ -17,9 +17,9 @@
package androidx.room.compiler.processing.util
import com.google.testing.compile.JavaFileObjects
-import org.intellij.lang.annotations.Language
import java.io.File
import javax.tools.JavaFileObject
+import org.intellij.lang.annotations.Language
/**
* Common abstraction for test sources in kotlin and java
diff --git a/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/compiler/steps/KotlinSourceCompilationStep.kt b/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/compiler/steps/KotlinSourceCompilationStep.kt
index aa80eaf..940b4e6 100644
--- a/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/compiler/steps/KotlinSourceCompilationStep.kt
+++ b/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/compiler/steps/KotlinSourceCompilationStep.kt
@@ -17,9 +17,9 @@
package androidx.room.compiler.processing.util.compiler.steps
import androidx.room.compiler.processing.util.compiler.KotlinCliRunner
-import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi
-import org.jetbrains.kotlin.cli.common.ExitCode
import java.io.File
+import org.jetbrains.kotlin.cli.common.ExitCode
+import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi
/**
* Compiles kotlin sources.
diff --git a/room/room-compiler-processing-testing/src/test/java/androidx/room/compiler/processing/util/DiagnosticsTest.kt b/room/room-compiler-processing-testing/src/test/java/androidx/room/compiler/processing/util/DiagnosticsTest.kt
index cf0ef44..dda1356 100644
--- a/room/room-compiler-processing-testing/src/test/java/androidx/room/compiler/processing/util/DiagnosticsTest.kt
+++ b/room/room-compiler-processing-testing/src/test/java/androidx/room/compiler/processing/util/DiagnosticsTest.kt
@@ -18,10 +18,10 @@
import androidx.room.compiler.processing.ExperimentalProcessingApi
import com.google.common.truth.Truth.assertThat
+import javax.tools.Diagnostic
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import javax.tools.Diagnostic
@RunWith(Parameterized::class)
@OptIn(ExperimentalProcessingApi::class)
diff --git a/room/room-compiler-processing-testing/src/test/java/androidx/room/compiler/processing/util/GeneratedCodeMatchTest.kt b/room/room-compiler-processing-testing/src/test/java/androidx/room/compiler/processing/util/GeneratedCodeMatchTest.kt
index fc964f9..ba43888 100644
--- a/room/room-compiler-processing-testing/src/test/java/androidx/room/compiler/processing/util/GeneratedCodeMatchTest.kt
+++ b/room/room-compiler-processing-testing/src/test/java/androidx/room/compiler/processing/util/GeneratedCodeMatchTest.kt
@@ -16,7 +16,6 @@
package androidx.room.compiler.processing.util
-import com.squareup.kotlinpoet.TypeSpec as KTypeSpec
import androidx.room.compiler.processing.ExperimentalProcessingApi
import androidx.room.compiler.processing.XElement
import androidx.room.compiler.processing.compat.XConverters.toXProcessing
@@ -26,6 +25,7 @@
import com.squareup.javapoet.TypeSpec
import com.squareup.kotlinpoet.BOOLEAN
import com.squareup.kotlinpoet.FileSpec
+import com.squareup.kotlinpoet.TypeSpec as KTypeSpec
import java.io.File
import org.junit.AssumptionViolatedException
import org.junit.Test
@@ -93,6 +93,38 @@
}
@Test
+ fun successfulGeneratedJavaCodeMatchWithWriteSourceNoPackage() {
+ val file = JavaFile.builder(
+ "",
+ TypeSpec.classBuilder("Baz").build()
+ ).build()
+ runTest { invocation ->
+ if (invocation.processingEnv.findTypeElement("Baz") == null) {
+ val originatingElements: List<XElement> =
+ file.typeSpec.originatingElements.map {
+ it.toXProcessing(invocation.processingEnv)
+ }
+ invocation.processingEnv.filer.writeSource(
+ file.packageName,
+ file.typeSpec.name,
+ "java",
+ originatingElements
+ ).bufferedWriter().use {
+ it.write(file.toString())
+ }
+ }
+ invocation.assertCompilationResult {
+ generatedSource(
+ Source.java(
+ "Baz",
+ file.toString()
+ )
+ )
+ }
+ }
+ }
+
+ @Test
fun missingGeneratedCode() {
val result = runCatching {
runTest { invocation ->
@@ -186,6 +218,38 @@
}
@Test
+ fun successfulGeneratedKotlinCodeMatchWithWriteSourceNoPackage() {
+ // java environment will not generate kotlin files
+ runTest.assumeCanCompileKotlin()
+
+ val type = KTypeSpec.classBuilder("Baz").build()
+ val file = FileSpec.builder("", "Baz")
+ .addType(type)
+ .build()
+ runTest { invocation ->
+ if (invocation.processingEnv.findTypeElement("Baz") == null) {
+ val originatingElements: List<XElement> =
+ type.originatingElements.map {
+ it.toXProcessing(invocation.processingEnv)
+ }
+ invocation.processingEnv.filer.writeSource(
+ file.packageName,
+ file.name,
+ "kt",
+ originatingElements
+ ).bufferedWriter().use {
+ it.write(file.toString())
+ }
+ }
+ invocation.assertCompilationResult {
+ generatedSource(
+ Source.kotlin("Baz.kt", file.toString())
+ )
+ }
+ }
+ }
+
+ @Test
fun successfulGeneratedKotlinCodeMatch() {
// java environment will not generate kotlin files
runTest.assumeCanCompileKotlin()
diff --git a/room/room-compiler-processing-testing/src/test/java/androidx/room/compiler/processing/util/MultiRoundProcessingTest.kt b/room/room-compiler-processing-testing/src/test/java/androidx/room/compiler/processing/util/MultiRoundProcessingTest.kt
index 0313f36..b6e62b6 100644
--- a/room/room-compiler-processing-testing/src/test/java/androidx/room/compiler/processing/util/MultiRoundProcessingTest.kt
+++ b/room/room-compiler-processing-testing/src/test/java/androidx/room/compiler/processing/util/MultiRoundProcessingTest.kt
@@ -20,10 +20,10 @@
import com.squareup.javapoet.ClassName
import com.squareup.javapoet.JavaFile
import com.squareup.javapoet.TypeSpec
+import javax.tools.Diagnostic
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import javax.tools.Diagnostic
@RunWith(Parameterized::class)
class MultiRoundProcessingTest(
diff --git a/room/room-compiler-processing-testing/src/test/java/androidx/room/compiler/processing/util/TestRunnerTest.kt b/room/room-compiler-processing-testing/src/test/java/androidx/room/compiler/processing/util/TestRunnerTest.kt
index 3ad0d31..f13460d 100644
--- a/room/room-compiler-processing-testing/src/test/java/androidx/room/compiler/processing/util/TestRunnerTest.kt
+++ b/room/room-compiler-processing-testing/src/test/java/androidx/room/compiler/processing/util/TestRunnerTest.kt
@@ -38,11 +38,11 @@
import com.squareup.javapoet.TypeSpec
import com.squareup.kotlinpoet.FileSpec
import com.squareup.kotlinpoet.KModifier
-import org.junit.Test
import java.net.URLClassLoader
import java.nio.file.Files
import javax.lang.model.element.Modifier
import javax.tools.Diagnostic
+import org.junit.Test
@OptIn(ExperimentalProcessingApi::class)
class TestRunnerTest {
diff --git a/room/room-compiler-processing/build.gradle b/room/room-compiler-processing/build.gradle
index 345e56b..f8d3190 100644
--- a/room/room-compiler-processing/build.gradle
+++ b/room/room-compiler-processing/build.gradle
@@ -20,6 +20,42 @@
plugins {
id("AndroidXPlugin")
id("kotlin")
+ id("com.github.johnrengelman.shadow")
+}
+
+configurations {
+ // For shadowed / jarjared deps
+ shadowed
+ // shadowed deps are compile only deps
+ compileOnly.extendsFrom(shadowed)
+ // compiler tests don't use shadowed, so include them
+ testCompile.extendsFrom(shadowed)
+ // for downstream tests
+ shadowAndImplementation.extendsFrom(shadow)
+ shadowAndImplementation.extendsFrom(implementation)
+}
+
+shadowJar {
+ archiveClassifier = ""
+ configurations = [project.configurations.shadowed]
+ relocate("kotlinx.metadata", "androidx.room.jarjarred.kotlinx.metadata")
+ mergeServiceFiles() // kotlinx-metadata-jvm has a service descriptor that needs transformation
+}
+
+jar {
+ archiveClassifier = "before-jarjar"
+}
+
+configurations {
+ // replace the standard jar with the one built by 'shadowJar' in both api and runtime variants
+ apiElements.outgoing.artifacts.clear()
+ apiElements.outgoing.artifact(shadowJar) {
+ builtBy shadowJar
+ }
+ runtimeElements.outgoing.artifacts.clear()
+ runtimeElements.outgoing.artifact(shadowJar) {
+ builtBy shadowJar
+ }
}
dependencies {
@@ -30,8 +66,9 @@
implementation(libs.guava)
implementation(libs.autoCommon)
implementation(libs.autoValueAnnotations)
-
- implementation(libs.kotlinMetadataJvm)
+ shadowed(libs.kotlinMetadataJvm) {
+ exclude group: "org.jetbrains.kotlin", module: "kotlin-stdlib"
+ }
implementation(libs.intellijAnnotations)
implementation(libs.kspApi)
implementation(libs.kotlinStdlibJdk8) // KSP defines older version as dependency, force update.
@@ -41,6 +78,7 @@
testImplementation(libs.junit)
testImplementation(libs.jsr250)
testImplementation(libs.ksp)
+ testImplementation(libs.kotlinMetadataJvm)
testImplementation(project(":room:room-compiler-processing-testing"))
testImplementation(project(":internal-testutils-common"))
}
@@ -60,7 +98,7 @@
}
androidx {
- name = "AndroidX Room XProcessor"
+ name = "Room XProcessor"
type = LibraryType.ANNOTATION_PROCESSOR_UTILS
inceptionYear = "2020"
description = "Processing Environment Abstraction for AndroidX Room"
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/codegen/XTypeName.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/codegen/XTypeName.kt
index df2a0b3..522d97d 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/codegen/XTypeName.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/codegen/XTypeName.kt
@@ -16,8 +16,6 @@
package androidx.room.compiler.codegen
-import com.squareup.kotlinpoet.asClassName as asKClassName
-import com.squareup.kotlinpoet.asTypeName as asKTypeName
import androidx.room.compiler.processing.XNullability
import com.squareup.kotlinpoet.ARRAY
import com.squareup.kotlinpoet.BOOLEAN_ARRAY
@@ -35,6 +33,8 @@
import com.squareup.kotlinpoet.MUTABLE_SET
import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy
import com.squareup.kotlinpoet.SHORT_ARRAY
+import com.squareup.kotlinpoet.asClassName as asKClassName
+import com.squareup.kotlinpoet.asTypeName as asKTypeName
import com.squareup.kotlinpoet.javapoet.JClassName
import com.squareup.kotlinpoet.javapoet.JParameterizedTypeName
import com.squareup.kotlinpoet.javapoet.JTypeName
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XElement.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XElement.kt
index 7dec0bc..9dee083 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XElement.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XElement.kt
@@ -20,8 +20,8 @@
import androidx.room.compiler.processing.ksp.KSFileAsOriginatingElement
import androidx.room.compiler.processing.ksp.KspElement
import androidx.room.compiler.processing.ksp.KspMemberContainer
-import androidx.room.compiler.processing.ksp.wrapAsOriginatingElement
import androidx.room.compiler.processing.ksp.synthetic.KspSyntheticPropertyMethodElement
+import androidx.room.compiler.processing.ksp.wrapAsOriginatingElement
import javax.lang.model.element.Element
import kotlin.contracts.contract
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacAnnotation.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacAnnotation.kt
index 7f45596..2e532d3 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacAnnotation.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacAnnotation.kt
@@ -18,9 +18,9 @@
import androidx.room.compiler.processing.InternalXAnnotation
import androidx.room.compiler.processing.XAnnotationBox
+import androidx.room.compiler.processing.XAnnotationValue
import androidx.room.compiler.processing.XNullability
import androidx.room.compiler.processing.XType
-import androidx.room.compiler.processing.XAnnotationValue
import androidx.room.compiler.processing.compat.XConverters.toXProcessing
import com.google.auto.common.AnnotationMirrors
import com.google.auto.common.MoreTypes
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacFiler.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacFiler.kt
index 2043d41..779539c 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacFiler.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacFiler.kt
@@ -60,8 +60,13 @@
originatingElements.filterIsInstance<JavacElement>().map { it.element }.toTypedArray()
return when (extension) {
"java" -> {
+ val name = if (packageName.isEmpty()) {
+ fileNameWithoutExtension
+ } else {
+ "$packageName.$fileNameWithoutExtension"
+ }
delegate.createSourceFile(
- "$packageName.$fileNameWithoutExtension",
+ name,
*javaOriginatingElements
).openOutputStream()
}
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/DefaultKspType.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/DefaultKspType.kt
index 77606d3..a24eeb0 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/DefaultKspType.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/DefaultKspType.kt
@@ -16,7 +16,6 @@
package androidx.room.compiler.processing.ksp
-import androidx.room.compiler.processing.XNullability
import androidx.room.compiler.processing.tryBox
import com.google.devtools.ksp.symbol.KSType
import com.squareup.kotlinpoet.javapoet.JTypeName
@@ -25,8 +24,9 @@
internal class DefaultKspType(
env: KspProcessingEnv,
ksType: KSType,
- scope: KSTypeVarianceResolverScope?
-) : KspType(env, ksType, scope) {
+ scope: KSTypeVarianceResolverScope? = null,
+ typeAlias: KSType? = null,
+) : KspType(env, ksType, scope, typeAlias) {
override fun resolveJTypeName(): JTypeName {
// always box these. For primitives, typeName might return the primitive type but if we
@@ -42,19 +42,10 @@
return this
}
- override fun copyWithNullability(nullability: XNullability): KspType {
- return DefaultKspType(
- env = env,
- ksType = ksType.withNullability(nullability),
- scope = scope
- )
- }
-
- override fun copyWithScope(scope: KSTypeVarianceResolverScope): KspType {
- return DefaultKspType(
- env = env,
- ksType = ksType,
- scope = scope
- )
- }
+ override fun copy(
+ env: KspProcessingEnv,
+ ksType: KSType,
+ scope: KSTypeVarianceResolverScope?,
+ typeAlias: KSType?
+ ) = DefaultKspType(env, ksType, scope, typeAlias)
}
\ No newline at end of file
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeExt.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeExt.kt
index 1b31225..83e3f36 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeExt.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeExt.kt
@@ -17,6 +17,8 @@
package androidx.room.compiler.processing.ksp
import androidx.room.compiler.processing.XNullability
+import androidx.room.compiler.processing.rawTypeName
+import com.google.devtools.ksp.processing.Resolver
import com.google.devtools.ksp.symbol.KSAnnotated
import com.google.devtools.ksp.symbol.KSAnnotation
import com.google.devtools.ksp.symbol.KSDeclaration
@@ -26,6 +28,86 @@
import com.google.devtools.ksp.symbol.KSTypeArgument
import com.google.devtools.ksp.symbol.KSTypeParameter
import com.google.devtools.ksp.symbol.KSTypeReference
+import com.google.devtools.ksp.symbol.Nullability
+import com.google.devtools.ksp.symbol.Variance
+import com.squareup.kotlinpoet.javapoet.JClassName
+
+internal fun KSType.replaceSuspendFunctionTypes(resolver: Resolver): KSType {
+ return if (!isSuspendFunctionType) {
+ this
+ } else {
+ // Find the JVM FunctionN type that will replace the suspend function and use that.
+ val functionN = resolver.requireType(
+ (declaration.asJTypeName(resolver).rawTypeName() as JClassName).canonicalName()
+ )
+ functionN.replace(
+ buildList {
+ addAll(arguments.dropLast(1))
+ val continuationTypeRef = resolver.requireType("kotlin.coroutines.Continuation")
+ .replace(arguments.takeLast(1))
+ .createTypeReference()
+ add(resolver.getTypeArgument(continuationTypeRef, Variance.INVARIANT))
+ val objTypeRef = resolver.requireType("java.lang.Object").createTypeReference()
+ add(resolver.getTypeArgument(objTypeRef, Variance.INVARIANT))
+ }
+ )
+ }
+}
+
+internal fun KSType.replaceTypeAliases(resolver: Resolver): KSType {
+ return if (declaration is KSTypeAlias) {
+ // Note: KSP only gives us access to the typealias through the declaration. This means
+ // that any type arguments on the typealias won't be resolved so we have to do this
+ // manually by creating a map from type parameter to type argument and manually
+ // substituting the type parameters as we find them.
+ val typeParamNameToTypeArgs = declaration.typeParameters.indices.associate { i ->
+ declaration.typeParameters[i].name.asString() to arguments[i]
+ }
+ (declaration as KSTypeAlias).type.resolve()
+ .replaceTypeArgs(resolver, typeParamNameToTypeArgs)
+ } else {
+ this
+ }.let {
+ it.replace(it.arguments.map { typeArg -> typeArg.replaceTypeAliases(resolver) })
+ }.let {
+ // if this type is nullable, carry it over
+ if (nullability == Nullability.NULLABLE) {
+ it.makeNullable()
+ } else {
+ it
+ }
+ }
+}
+
+private fun KSTypeArgument.replaceTypeAliases(resolver: Resolver): KSTypeArgument {
+ val type = type?.resolve() ?: return this
+ return resolver.getTypeArgument(
+ type.replaceTypeAliases(resolver).createTypeReference(),
+ variance
+ )
+}
+
+private fun KSType.replaceTypeArgs(
+ resolver: Resolver,
+ typeArgsMap: Map<String, KSTypeArgument>
+): KSType = replace(arguments.map { it.replaceTypeArgs(resolver, typeArgsMap) })
+
+private fun KSTypeArgument.replaceTypeArgs(
+ resolver: Resolver,
+ typeArgsMap: Map<String, KSTypeArgument>
+): KSTypeArgument {
+ val type = type?.resolve() ?: return this
+ if (type.isTypeParameter()) {
+ val name = (type.declaration as KSTypeParameter).name.asString()
+ if (typeArgsMap.containsKey(name)) {
+ return typeArgsMap[name]!!
+ }
+ }
+ return resolver.getTypeArgument(
+ type.replaceTypeArgs(resolver, typeArgsMap).createTypeReference(),
+ variance
+ )
+}
/**
* Root package comes as <root> instead of "" so we work around it here.
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeJavaPoetExt.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeJavaPoetExt.kt
index a40fe41..1aaaee0 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeJavaPoetExt.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeJavaPoetExt.kt
@@ -168,7 +168,9 @@
resolver: Resolver,
typeArgumentTypeLookup: JTypeArgumentTypeLookup
): JTypeName {
- return if (this.arguments.isNotEmpty() && !resolver.isJavaRawType(this)) {
+ return if (declaration is KSTypeAlias) {
+ replaceTypeAliases(resolver).asJTypeName(resolver, typeArgumentTypeLookup)
+ } else if (this.arguments.isNotEmpty() && !resolver.isJavaRawType(this)) {
val args: Array<JTypeName> = this.arguments
.map { typeArg -> typeArg.asJTypeName(resolver, typeArgumentTypeLookup) }
.map { it.tryBox() }
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeKotlinPoetExt.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeKotlinPoetExt.kt
index affa165..bf9c0d6 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeKotlinPoetExt.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeKotlinPoetExt.kt
@@ -140,7 +140,9 @@
resolver: Resolver,
typeArgumentTypeLookup: KTypeArgumentTypeLookup
): KTypeName {
- return if (this.arguments.isNotEmpty() && !resolver.isJavaRawType(this)) {
+ return if (declaration is KSTypeAlias) {
+ replaceTypeAliases(resolver).asKTypeName(resolver, typeArgumentTypeLookup)
+ } else if (this.arguments.isNotEmpty() && !resolver.isJavaRawType(this)) {
val args: List<KTypeName> = this.arguments
.map { typeArg ->
typeArg.asKTypeName(
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeVarianceResolver.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeVarianceResolver.kt
index 56c3455..2687c5e 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeVarianceResolver.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeVarianceResolver.kt
@@ -16,7 +16,6 @@
package androidx.room.compiler.processing.ksp
-import androidx.room.compiler.processing.rawTypeName
import com.google.devtools.ksp.KspExperimental
import com.google.devtools.ksp.isOpen
import com.google.devtools.ksp.processing.Resolver
@@ -28,7 +27,6 @@
import com.google.devtools.ksp.symbol.KSTypeParameter
import com.google.devtools.ksp.symbol.Modifier
import com.google.devtools.ksp.symbol.Variance
-import com.squareup.kotlinpoet.javapoet.JClassName
/**
* When kotlin generates java code, it has some interesting rules on how variance is handled.
@@ -53,10 +51,7 @@
*/
@OptIn(KspExperimental::class)
fun applyTypeVariance(type: KSType, scope: KSTypeVarianceResolverScope?): KSType {
- if (type.isError ||
- type.arguments.isEmpty() ||
- resolver.isJavaRawType(type) ||
- scope?.needsWildcardResolution == false) {
+ if (type.isError || scope?.needsWildcardResolution == false) {
// There's nothing to resolve in this case, so just return the original type.
return type
}
@@ -64,6 +59,10 @@
// First wrap types/arguments in our own wrappers so that we can keep track of the original
// type, which is needed to get annotations.
return KSTypeWrapper(resolver, type)
+ // Next, replace all type aliases with their resolved types
+ .replaceTypeAliases()
+ // Next, replace all suspend functions with their JVM types.
+ .replaceSuspendFunctionTypes()
// Next, resolve wildcards based on the scope of the type
.resolveWildcards(scope)
// Next, apply any additional variance changes based on the @JvmSuppressWildcards or
@@ -76,6 +75,73 @@
.unwrap()
}
+ private fun KSTypeWrapper.replaceTypeAliases(): KSTypeWrapper {
+ return if (declaration is KSTypeAlias) {
+ // Note: KSP only gives us access to the type alias through the declaration. This means
+ // that any type arguments on the type alias won't be resolved.
+ // For example, if we have a type alias, MyAlias<T> = Foo<Bar<T>>, and a property,
+ // MyAlias<Baz>, then calling KSTypeAlias#type on the property will give Foo<Bar<T>>
+ // rather than Foo<Bar<Baz>>.
+ val typeParamNameToTypeArgs = declaration.typeParameters.indices.associate { i ->
+ declaration.typeParameters[i].name.asString() to arguments[i]
+ }
+ replaceType(declaration.type.resolve()).replaceTypeArgs(typeParamNameToTypeArgs)
+ } else {
+ this
+ }.let {
+ it.replace(it.arguments.map { typeArg -> typeArg.replaceTypeAliases() })
+ }
+ }
+
+ private fun KSTypeArgumentWrapper.replaceTypeAliases(): KSTypeArgumentWrapper {
+ val type = type ?: return this
+ return replace(type.replaceTypeAliases(), variance)
+ }
+
+ private fun KSTypeWrapper.replaceTypeArgs(
+ typeArgsMap: Map<String, KSTypeArgumentWrapper>
+ ): KSTypeWrapper = replace(arguments.map { it.replaceTypeArgs(typeArgsMap) })
+
+ private fun KSTypeArgumentWrapper.replaceTypeArgs(
+ typeArgsMap: Map<String, KSTypeArgumentWrapper>
+ ): KSTypeArgumentWrapper {
+ val type = type ?: return this
+ if (type.isTypeParameter()) {
+ val name = (type.declaration as KSTypeParameter).name.asString()
+ if (typeArgsMap.containsKey(name)) {
+ return replace(typeArgsMap[name]?.type!!, variance)
+ }
+ }
+ return replace(type.replaceTypeArgs(typeArgsMap), variance)
+ }
+
+ private fun KSTypeWrapper.replaceSuspendFunctionTypes(): KSTypeWrapper {
+ return if (!newType.isSuspendFunctionType) {
+ this
+ } else {
+ val newKSType = newType.replaceSuspendFunctionTypes(resolver)
+ val newType = KSTypeWrapper(resolver, newKSType)
+ replaceType(newKSType).replace(
+ buildList {
+ addAll(arguments.dropLast(1))
+ val originalArg = arguments.last()
+ val continuationArg = newType.arguments[newType.arguments.lastIndex - 1]
+ add(
+ continuationArg.replace(
+ continuationArg.type!!.replace(
+ continuationArg.type!!.arguments.map {
+ it.replace(originalArg.type!!, originalArg.variance)
+ }
+ ),
+ continuationArg.variance
+ )
+ )
+ add(newType.arguments.last())
+ }
+ )
+ }
+ }
+
private fun KSTypeWrapper.resolveWildcards(
scope: KSTypeVarianceResolverScope?
) = if (scope == null) {
@@ -249,8 +315,7 @@
private fun KSTypeWrapper.applyJvmWildcardAnnotations(
scope: KSTypeVarianceResolverScope?
- ) =
- replace(arguments.map { it.applyJvmWildcardAnnotations(scope) })
+ ) = replace(arguments.map { it.applyJvmWildcardAnnotations(scope) })
private fun KSTypeArgumentWrapper.applyJvmWildcardAnnotations(
scope: KSTypeVarianceResolverScope?
@@ -282,23 +347,26 @@
* [IllegalStateException] since KSP tries to cast to its own implementation of [KSTypeArgument].
*/
private class KSTypeWrapper constructor(
- private val resolver: Resolver,
- private val originalType: KSType,
- private val newType: KSType =
- originalType.replaceTypeAliases().replaceSuspendFunctionTypes(resolver),
- newTypeArguments: List<KSTypeArgumentWrapper>? = null,
- private val typeStack: List<KSTypeWrapper> = emptyList(),
- private val typeArgStack: List<KSTypeArgumentWrapper> = emptyList(),
- private val typeParamStack: List<KSTypeParameter> = emptyList(),
+ val resolver: Resolver,
+ val originalType: KSType,
+ val newType: KSType = originalType,
+ val newTypeArguments: List<KSTypeArgumentWrapper>? = null,
+ val typeStack: List<KSTypeWrapper> = emptyList(),
+ val typeArgStack: List<KSTypeArgumentWrapper> = emptyList(),
+ val typeParamStack: List<KSTypeParameter> = emptyList(),
) {
- val declaration = originalType.declaration
+ val declaration = newType.declaration
val arguments: List<KSTypeArgumentWrapper> by lazy {
- newTypeArguments ?: newType.arguments.indices.map { i ->
+ val arguments = newTypeArguments ?: newType.arguments.indices.map { i ->
KSTypeArgumentWrapper(
originalTypeArg = newType.arguments[i],
typeParam = newType.declaration.typeParameters[i],
resolver = resolver,
+ )
+ }
+ arguments.map { newTypeArg ->
+ newTypeArg.copy(
typeStack = typeStack + this,
typeArgStack = typeArgStack,
typeParamStack = typeParamStack,
@@ -306,11 +374,23 @@
}
}
- fun replace(newTypeArguments: List<KSTypeArgumentWrapper>) = KSTypeWrapper(
+ fun replaceType(newType: KSType): KSTypeWrapper = copy(newType = newType)
+
+ fun replace(newTypeArguments: List<KSTypeArgumentWrapper>) =
+ copy(newTypeArguments = newTypeArguments)
+
+ fun copy(
+ originalType: KSType = this.originalType,
+ newType: KSType = this.newType,
+ newTypeArguments: List<KSTypeArgumentWrapper>? = this.newTypeArguments,
+ typeStack: List<KSTypeWrapper> = this.typeStack,
+ typeArgStack: List<KSTypeArgumentWrapper> = this.typeArgStack,
+ typeParamStack: List<KSTypeParameter> = this.typeParamStack,
+ ) = KSTypeWrapper(
+ resolver = resolver,
originalType = originalType,
newType = newType,
newTypeArguments = newTypeArguments,
- resolver = resolver,
typeStack = typeStack,
typeArgStack = typeArgStack,
typeParamStack = typeParamStack,
@@ -328,32 +408,7 @@
}
append(newType.declaration.simpleName.asString())
if (arguments.isNotEmpty()) {
- append("$arguments")
- }
- }
-
- private companion object {
- fun KSType.replaceTypeAliases() = (declaration as? KSTypeAlias)?.type?.resolve() ?: this
-
- fun KSType.replaceSuspendFunctionTypes(resolver: Resolver) = if (!isSuspendFunctionType) {
- this
- } else {
- // Find the JVM FunctionN type that will replace the suspend function and use that.
- val functionN = resolver.requireType(
- (declaration.asJTypeName(resolver).rawTypeName() as JClassName).canonicalName()
- )
- functionN.replace(
- buildList {
- addAll(arguments.dropLast(1))
- val continuationArgs = arguments.takeLast(1)
- val continuationTypeRef = resolver.requireType("kotlin.coroutines.Continuation")
- .replace(continuationArgs)
- .createTypeReference()
- val objTypeRef = resolver.requireType("java.lang.Object").createTypeReference()
- add(resolver.getTypeArgument(continuationTypeRef, Variance.INVARIANT))
- add(resolver.getTypeArgument(objTypeRef, Variance.INVARIANT))
- }
- )
+ append("<${arguments.joinToString(", ")}>")
}
}
}
@@ -368,36 +423,47 @@
* type argument.
*/
private class KSTypeArgumentWrapper constructor(
- private val originalTypeArg: KSTypeArgument,
- private val newType: KSTypeWrapper? = null,
- private val resolver: Resolver,
+ val originalTypeArg: KSTypeArgument,
+ val newType: KSTypeWrapper? = null,
+ val resolver: Resolver,
val typeParam: KSTypeParameter,
val variance: Variance = originalTypeArg.variance,
- val typeStack: List<KSTypeWrapper>,
- val typeArgStack: List<KSTypeArgumentWrapper>,
- val typeParamStack: List<KSTypeParameter>,
+ val typeStack: List<KSTypeWrapper> = emptyList(),
+ val typeArgStack: List<KSTypeArgumentWrapper> = emptyList(),
+ val typeParamStack: List<KSTypeParameter> = emptyList(),
) {
val type: KSTypeWrapper? by lazy {
if (variance == Variance.STAR || originalTypeArg.type == null) {
// Return null for star projections, otherwise we'll end up in an infinite loop.
- null
- } else {
- newType ?: KSTypeWrapper(
- originalType = originalTypeArg.type!!.resolve(),
- resolver = resolver,
- typeStack = typeStack,
- typeArgStack = typeArgStack + this,
- typeParamStack = typeParamStack + typeParam,
- )
+ return@lazy null
}
+ val type = newType ?: KSTypeWrapper(resolver, originalTypeArg.type!!.resolve())
+ type.copy(
+ typeStack = typeStack,
+ typeArgStack = typeArgStack + this,
+ typeParamStack = typeParamStack + typeParam,
+ )
}
- fun replace(newType: KSTypeWrapper, newVariance: Variance) = KSTypeArgumentWrapper(
- originalTypeArg = originalTypeArg,
- typeParam = typeParam,
+ fun replace(newType: KSTypeWrapper, newVariance: Variance) = copy(
newType = newType,
variance = newVariance,
+ )
+
+ fun copy(
+ originalTypeArg: KSTypeArgument = this.originalTypeArg,
+ newType: KSTypeWrapper? = this.newType,
+ typeParam: KSTypeParameter = this.typeParam,
+ variance: Variance = this.variance,
+ typeStack: List<KSTypeWrapper> = this.typeStack,
+ typeArgStack: List<KSTypeArgumentWrapper> = this.typeArgStack,
+ typeParamStack: List<KSTypeParameter> = this.typeParamStack,
+ ) = KSTypeArgumentWrapper(
resolver = resolver,
+ originalTypeArg = originalTypeArg,
+ newType = newType,
+ variance = variance,
+ typeParam = typeParam,
typeStack = typeStack,
typeArgStack = typeArgStack,
typeParamStack = typeParamStack,
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspAnnotation.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspAnnotation.kt
index 4e48afc..dbfb091 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspAnnotation.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspAnnotation.kt
@@ -18,8 +18,8 @@
import androidx.room.compiler.processing.InternalXAnnotation
import androidx.room.compiler.processing.XAnnotationBox
-import androidx.room.compiler.processing.XType
import androidx.room.compiler.processing.XAnnotationValue
+import androidx.room.compiler.processing.XType
import com.google.devtools.ksp.symbol.KSAnnotation
import com.google.devtools.ksp.symbol.KSType
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspArrayType.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspArrayType.kt
index 21a2942..74a142a 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspArrayType.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspArrayType.kt
@@ -28,8 +28,9 @@
internal sealed class KspArrayType(
env: KspProcessingEnv,
ksType: KSType,
- scope: KSTypeVarianceResolverScope?
-) : KspType(env, ksType, scope), XArrayType {
+ scope: KSTypeVarianceResolverScope? = null,
+ typeAlias: KSType? = null,
+) : KspType(env, ksType, scope, typeAlias), XArrayType {
abstract override val componentType: KspType
@@ -52,8 +53,9 @@
private class BoxedArray(
env: KspProcessingEnv,
ksType: KSType,
- scope: KSTypeVarianceResolverScope?
- ) : KspArrayType(env, ksType, scope) {
+ scope: KSTypeVarianceResolverScope? = null,
+ typeAlias: KSType? = null,
+ ) : KspArrayType(env, ksType, scope, typeAlias) {
override fun resolveJTypeName(): JTypeName {
return JArrayTypeName.of(componentType.asTypeName().java.box())
}
@@ -72,21 +74,12 @@
)
}
- override fun copyWithNullability(nullability: XNullability): BoxedArray {
- return BoxedArray(
- env = env,
- ksType = ksType.withNullability(nullability),
- scope = scope,
- )
- }
-
- override fun copyWithScope(scope: KSTypeVarianceResolverScope): KspType {
- return BoxedArray(
- env = env,
- ksType = ksType,
- scope = scope
- )
- }
+ override fun copy(
+ env: KspProcessingEnv,
+ ksType: KSType,
+ scope: KSTypeVarianceResolverScope?,
+ typeAlias: KSType?
+ ) = BoxedArray(env, ksType, scope, typeAlias)
}
/**
@@ -95,9 +88,10 @@
private class PrimitiveArray(
env: KspProcessingEnv,
ksType: KSType,
- scope: KSTypeVarianceResolverScope?,
- override val componentType: KspType
- ) : KspArrayType(env, ksType, scope) {
+ scope: KSTypeVarianceResolverScope? = null,
+ typeAlias: KSType? = null,
+ override val componentType: KspType,
+ ) : KspArrayType(env, ksType, scope, typeAlias) {
override fun resolveJTypeName(): JTypeName {
return JArrayTypeName.of(componentType.asTypeName().java.unbox())
}
@@ -106,23 +100,12 @@
return ksType.asKTypeName(env.resolver)
}
- override fun copyWithNullability(nullability: XNullability): PrimitiveArray {
- return PrimitiveArray(
- env = env,
- ksType = ksType.withNullability(nullability),
- componentType = componentType,
- scope = scope
- )
- }
-
- override fun copyWithScope(scope: KSTypeVarianceResolverScope): KspType {
- return PrimitiveArray(
- env = env,
- ksType = ksType,
- componentType = componentType,
- scope = scope
- )
- }
+ override fun copy(
+ env: KspProcessingEnv,
+ ksType: KSType,
+ scope: KSTypeVarianceResolverScope?,
+ typeAlias: KSType?
+ ) = PrimitiveArray(env, ksType, scope, typeAlias, componentType)
}
/**
@@ -131,14 +114,14 @@
internal class Factory(private val env: KspProcessingEnv) {
// map of built in array type to its component type
private val builtInArrays = mapOf(
- "kotlin.BooleanArray" to KspPrimitiveType(env, env.resolver.builtIns.booleanType, null),
- "kotlin.ByteArray" to KspPrimitiveType(env, env.resolver.builtIns.byteType, null),
- "kotlin.CharArray" to KspPrimitiveType(env, env.resolver.builtIns.charType, null),
- "kotlin.DoubleArray" to KspPrimitiveType(env, env.resolver.builtIns.doubleType, null),
- "kotlin.FloatArray" to KspPrimitiveType(env, env.resolver.builtIns.floatType, null),
- "kotlin.IntArray" to KspPrimitiveType(env, env.resolver.builtIns.intType, null),
- "kotlin.LongArray" to KspPrimitiveType(env, env.resolver.builtIns.longType, null),
- "kotlin.ShortArray" to KspPrimitiveType(env, env.resolver.builtIns.shortType, null),
+ "kotlin.BooleanArray" to KspPrimitiveType(env, env.resolver.builtIns.booleanType),
+ "kotlin.ByteArray" to KspPrimitiveType(env, env.resolver.builtIns.byteType),
+ "kotlin.CharArray" to KspPrimitiveType(env, env.resolver.builtIns.charType),
+ "kotlin.DoubleArray" to KspPrimitiveType(env, env.resolver.builtIns.doubleType),
+ "kotlin.FloatArray" to KspPrimitiveType(env, env.resolver.builtIns.floatType),
+ "kotlin.IntArray" to KspPrimitiveType(env, env.resolver.builtIns.intType),
+ "kotlin.LongArray" to KspPrimitiveType(env, env.resolver.builtIns.longType),
+ "kotlin.ShortArray" to KspPrimitiveType(env, env.resolver.builtIns.shortType),
)
// map from the primitive to its array
@@ -156,7 +139,6 @@
primitiveArrayEntry.key
),
componentType = primitiveArrayEntry.value,
- scope = null
)
}
}
@@ -171,7 +153,6 @@
)
)
),
- scope = null
)
}
@@ -185,7 +166,6 @@
return BoxedArray(
env = env,
ksType = ksType,
- scope = null
)
}
builtInArrays[qName]?.let { primitiveType ->
@@ -193,7 +173,6 @@
env = env,
ksType = ksType,
componentType = primitiveType,
- scope = null
)
}
return null
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspPrimitiveType.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspPrimitiveType.kt
index 73d675c..2035e3a 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspPrimitiveType.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspPrimitiveType.kt
@@ -16,7 +16,6 @@
package androidx.room.compiler.processing.ksp
-import androidx.room.compiler.processing.XNullability
import androidx.room.compiler.processing.tryUnbox
import com.google.devtools.ksp.symbol.KSType
import com.squareup.kotlinpoet.javapoet.JTypeName
@@ -32,8 +31,8 @@
internal class KspPrimitiveType(
env: KspProcessingEnv,
ksType: KSType,
- scope: KSTypeVarianceResolverScope?
-) : KspType(env, ksType, scope) {
+ typeAlias: KSType? = null,
+) : KspType(env, ksType, null, typeAlias) {
override fun resolveJTypeName(): JTypeName {
return ksType.asJTypeName(env.resolver).tryUnbox()
}
@@ -49,28 +48,10 @@
)
}
- override fun copyWithNullability(nullability: XNullability): KspType {
- return when (nullability) {
- XNullability.NONNULL -> {
- this
- }
- XNullability.NULLABLE -> {
- // primitive types cannot be nullable hence we box them.
- boxed().makeNullable()
- }
- else -> {
- // this should actually never happens as the only time this is called is from
- // make nullable-make nonnull but we have this error here for completeness.
- error("cannot set nullability to unknown in KSP")
- }
- }
- }
-
- override fun copyWithScope(scope: KSTypeVarianceResolverScope): KspType {
- return KspPrimitiveType(
- env = env,
- ksType = ksType,
- scope = scope
- )
- }
+ override fun copy(
+ env: KspProcessingEnv,
+ ksType: KSType,
+ scope: KSTypeVarianceResolverScope?,
+ typeAlias: KSType?
+ ) = KspPrimitiveType(env, ksType, typeAlias)
}
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspProcessingEnv.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspProcessingEnv.kt
index ae5a43cb..1081550 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspProcessingEnv.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspProcessingEnv.kt
@@ -105,7 +105,6 @@
env = this,
ksType = resolver.builtIns.unitType,
boxed = false,
- scope = null
)
override fun findTypeElement(qName: String): KspTypeElement? {
@@ -227,7 +226,6 @@
return KspTypeArgumentType(
env = this,
typeArg = ksTypeArgument,
- scope = null
)
}
@@ -242,41 +240,27 @@
fun wrap(ksType: KSType, allowPrimitives: Boolean): KspType {
val declaration = ksType.declaration
if (declaration is KSTypeAlias) {
- val actual = wrap(
- ksType = declaration.type.resolve().replace(ksType.arguments),
+ return wrap(
+ ksType = ksType.replaceTypeAliases(resolver),
allowPrimitives = allowPrimitives && ksType.nullability == Nullability.NOT_NULL
- )
- // if this type is nullable, carry it over
- return if (ksType.nullability == Nullability.NULLABLE) {
- actual.makeNullable()
- } else {
- actual
- }
+ ).copyWithTypeAlias(ksType)
}
val qName = ksType.declaration.qualifiedName?.asString()
if (declaration is KSTypeParameter) {
- return KspTypeVariableType(
- env = this,
- ksType = ksType,
- scope = null
- )
+ return KspTypeVariableType(this, ksType)
}
if (allowPrimitives && qName != null && ksType.nullability == Nullability.NOT_NULL) {
// check for primitives
val javaPrimitive = KspTypeMapper.getPrimitiveJavaTypeName(qName)
if (javaPrimitive != null) {
- return KspPrimitiveType(this, ksType, scope = null)
+ return KspPrimitiveType(this, ksType)
}
// special case for void
if (qName == "kotlin.Unit") {
return voidType
}
}
- return arrayTypeFactory.createIfArray(ksType) ?: DefaultKspType(
- this,
- ksType,
- scope = null
- )
+ return arrayTypeFactory.createIfArray(ksType) ?: DefaultKspType(this, ksType)
}
fun wrapClassDeclaration(declaration: KSClassDeclaration): KspTypeElement {
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspType.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspType.kt
index dc5cf7c..b347008 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspType.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspType.kt
@@ -49,10 +49,10 @@
internal abstract class KspType(
env: KspProcessingEnv,
val ksType: KSType,
- /**
- * Type resolver to convert KSType into its JVM representation.
- */
- val scope: KSTypeVarianceResolverScope?
+ /** Type resolver to convert KSType into its JVM representation. */
+ val scope: KSTypeVarianceResolverScope?,
+ /** The `typealias` that was resolved to get the [ksType], or null if none exists. */
+ val typeAlias: KSType?,
) : KspAnnotated(env), XType, XEquality {
override val rawType by lazy {
KspRawType(this)
@@ -69,7 +69,7 @@
* The [XTypeName] represents those differences as [JTypeName] and [KTypeName], respectively.
*/
private val xTypeName: XTypeName by lazy {
- val jvmWildcardType = env.resolveWildcards(ksType, scope).let {
+ val jvmWildcardType = env.resolveWildcards(typeAlias ?: ksType, scope).let {
if (it == ksType) {
this
} else {
@@ -266,14 +266,23 @@
abstract override fun boxed(): KspType
- abstract fun copyWithScope(scope: KSTypeVarianceResolverScope): KspType
+ abstract fun copy(
+ env: KspProcessingEnv,
+ ksType: KSType,
+ scope: KSTypeVarianceResolverScope?,
+ typeAlias: KSType?,
+ ): KspType
- /**
- * Create a copy of this type with the given nullability.
- * This method is not called if the nullability of the type is already equal to the given
- * nullability.
- */
- protected abstract fun copyWithNullability(nullability: XNullability): KspType
+ fun copyWithScope(scope: KSTypeVarianceResolverScope) = copy(env, ksType, scope, typeAlias)
+
+ fun copyWithTypeAlias(typeAlias: KSType) = copy(env, ksType, scope, typeAlias)
+
+ private fun copyWithNullability(nullability: XNullability): KspType = boxed().copy(
+ env = env,
+ ksType = ksType.withNullability(nullability),
+ scope = scope,
+ typeAlias = typeAlias,
+ )
final override fun makeNullable(): KspType {
if (nullability == XNullability.NULLABLE) {
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspTypeArgumentType.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspTypeArgumentType.kt
index 589244d..bd262c6 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspTypeArgumentType.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspTypeArgumentType.kt
@@ -16,8 +16,8 @@
package androidx.room.compiler.processing.ksp
-import androidx.room.compiler.processing.XNullability
import androidx.room.compiler.processing.XType
+import com.google.devtools.ksp.symbol.KSType
import com.google.devtools.ksp.symbol.KSTypeArgument
import com.google.devtools.ksp.symbol.KSTypeParameter
import com.google.devtools.ksp.symbol.KSTypeReference
@@ -32,11 +32,13 @@
internal class KspTypeArgumentType(
env: KspProcessingEnv,
val typeArg: KSTypeArgument,
- scope: KSTypeVarianceResolverScope?
+ scope: KSTypeVarianceResolverScope? = null,
+ typeAlias: KSType? = null,
) : KspType(
env = env,
ksType = typeArg.requireType(),
- scope = scope
+ scope = scope,
+ typeAlias = typeAlias,
) {
/**
* When KSP resolves classes, it always resolves to the upper bound. Hence, the ksType we
@@ -72,24 +74,17 @@
return _extendsBound
}
- override fun copyWithNullability(nullability: XNullability): KspTypeArgumentType {
- return KspTypeArgumentType(
- env = env,
- typeArg = DelegatingTypeArg(
- original = typeArg,
- type = ksType.withNullability(nullability).createTypeReference()
- ),
- scope = scope
- )
- }
-
- override fun copyWithScope(scope: KSTypeVarianceResolverScope): KspType {
- return KspTypeArgumentType(
- env = env,
- typeArg = typeArg,
- scope = scope
- )
- }
+ override fun copy(
+ env: KspProcessingEnv,
+ ksType: KSType,
+ scope: KSTypeVarianceResolverScope?,
+ typeAlias: KSType?
+ ) = KspTypeArgumentType(
+ env = env,
+ typeArg = DelegatingTypeArg(typeArg, type = ksType.createTypeReference()),
+ scope = scope,
+ typeAlias = typeAlias
+ )
private class DelegatingTypeArg(
val original: KSTypeArgument,
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspTypeVariableType.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspTypeVariableType.kt
index cd2b9e6..43d1d17 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspTypeVariableType.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspTypeVariableType.kt
@@ -16,7 +16,6 @@
package androidx.room.compiler.processing.ksp
-import androidx.room.compiler.processing.XNullability
import androidx.room.compiler.processing.XType
import androidx.room.compiler.processing.XTypeVariableType
import com.google.devtools.ksp.symbol.KSType
@@ -27,8 +26,8 @@
internal class KspTypeVariableType(
env: KspProcessingEnv,
ksType: KSType,
- scope: KSTypeVarianceResolverScope?
-) : KspType(env, ksType, scope), XTypeVariableType {
+ scope: KSTypeVarianceResolverScope? = null,
+) : KspType(env, ksType, scope, null), XTypeVariableType {
private val typeVariable: KSTypeParameter by lazy {
// Note: This is a workaround for a bug in KSP where we may get ERROR_TYPE in the bounds
// (https://github.com/google/ksp/issues/1250). To work around it we get the matching
@@ -52,19 +51,10 @@
return this
}
- override fun copyWithNullability(nullability: XNullability): KspTypeVariableType {
- return KspTypeVariableType(
- env = env,
- ksType = ksType,
- scope = scope
- )
- }
-
- override fun copyWithScope(scope: KSTypeVarianceResolverScope): KspType {
- return KspTypeVariableType(
- env = env,
- ksType = ksType,
- scope = scope
- )
- }
+ override fun copy(
+ env: KspProcessingEnv,
+ ksType: KSType,
+ scope: KSTypeVarianceResolverScope?,
+ typeAlias: KSType?
+ ) = KspTypeVariableType(env, ksType, scope)
}
\ No newline at end of file
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspVoidType.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspVoidType.kt
index a68b298..9af6ba0 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspVoidType.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspVoidType.kt
@@ -32,8 +32,9 @@
env: KspProcessingEnv,
ksType: KSType,
val boxed: Boolean,
- scope: KSTypeVarianceResolverScope?
-) : KspType(env, ksType, scope) {
+ scope: KSTypeVarianceResolverScope? = null,
+ typeAlias: KSType? = null,
+) : KspType(env, ksType, scope, typeAlias) {
override fun resolveJTypeName(): JTypeName {
return if (boxed || nullability == XNullability.NULLABLE) {
JTypeName.VOID.box()
@@ -54,26 +55,16 @@
env = env,
ksType = ksType,
boxed = true,
- scope = scope
+ scope = scope,
+ typeAlias = typeAlias,
)
}
}
- override fun copyWithNullability(nullability: XNullability): KspType {
- return KspVoidType(
- env = env,
- ksType = ksType.withNullability(nullability),
- boxed = boxed || nullability == XNullability.NULLABLE,
- scope = scope
- )
- }
-
- override fun copyWithScope(scope: KSTypeVarianceResolverScope): KspType {
- return KspVoidType(
- env = env,
- ksType = ksType,
- boxed = boxed,
- scope = scope
- )
- }
+ override fun copy(
+ env: KspProcessingEnv,
+ ksType: KSType,
+ scope: KSTypeVarianceResolverScope?,
+ typeAlias: KSType?,
+ ) = KspVoidType(env, ksType, boxed, scope, typeAlias)
}
diff --git a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/MethodSpecHelperTest.kt b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/MethodSpecHelperTest.kt
index f9e64b5..d408755 100644
--- a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/MethodSpecHelperTest.kt
+++ b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/MethodSpecHelperTest.kt
@@ -21,22 +21,22 @@
import androidx.room.compiler.processing.util.Source
import androidx.room.compiler.processing.util.XTestInvocation
import androidx.room.compiler.processing.util.compileFiles
-import androidx.testutils.generateAllEnumerations
import androidx.room.compiler.processing.util.javaTypeUtils
import androidx.room.compiler.processing.util.runKaptTest
import androidx.room.compiler.processing.util.runProcessorTest
+import androidx.testutils.generateAllEnumerations
import com.google.auto.common.MoreTypes
import com.google.common.truth.Truth.assertThat
import com.squareup.javapoet.MethodSpec
import com.squareup.javapoet.ParameterSpec
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.Parameterized
import java.io.File
import javax.lang.model.element.ExecutableElement
import javax.lang.model.element.Modifier
import javax.lang.model.type.DeclaredType
import javax.lang.model.util.Types
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
@RunWith(Parameterized::class)
class MethodSpecHelperTest(
diff --git a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/OriginatingElementsTest.kt b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/OriginatingElementsTest.kt
index 1c18366..800f064 100644
--- a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/OriginatingElementsTest.kt
+++ b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/OriginatingElementsTest.kt
@@ -24,11 +24,11 @@
import androidx.room.compiler.processing.util.runProcessorTest
import com.google.common.truth.Truth.assertThat
import com.squareup.javapoet.TypeSpec
+import javax.lang.model.element.ExecutableElement
+import javax.lang.model.element.TypeElement
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import javax.lang.model.element.ExecutableElement
-import javax.lang.model.element.TypeElement
@RunWith(JUnit4::class)
class OriginatingElementsTest {
diff --git a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XMessagerTest.kt b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XMessagerTest.kt
index c540af4..7574266 100644
--- a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XMessagerTest.kt
+++ b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XMessagerTest.kt
@@ -19,10 +19,10 @@
import androidx.room.compiler.processing.util.Source
import androidx.room.compiler.processing.util.runProcessorTest
import com.google.common.truth.Truth.assertThat
+import javax.tools.Diagnostic
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import javax.tools.Diagnostic
@RunWith(JUnit4::class)
class XMessagerTest {
diff --git a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/javac/kotlin/JvmDescriptorUtilsTest.kt b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/javac/kotlin/JvmDescriptorUtilsTest.kt
index 2c297e0..f83d2f4 100644
--- a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/javac/kotlin/JvmDescriptorUtilsTest.kt
+++ b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/javac/kotlin/JvmDescriptorUtilsTest.kt
@@ -24,9 +24,6 @@
import com.squareup.javapoet.ArrayTypeName
import com.squareup.javapoet.ClassName
import com.squareup.javapoet.TypeName
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
import javax.annotation.processing.AbstractProcessor
import javax.annotation.processing.RoundEnvironment
import javax.lang.model.element.ElementKind.CONSTRUCTOR
@@ -34,6 +31,9 @@
import javax.lang.model.element.ElementKind.METHOD
import javax.lang.model.element.TypeElement
import javax.tools.JavaFileObject
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
@RunWith(JUnit4::class)
class JvmDescriptorUtilsTest {
diff --git a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/ksp/KspFieldElementTest.kt b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/ksp/KspFieldElementTest.kt
index b753598..688c746 100644
--- a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/ksp/KspFieldElementTest.kt
+++ b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/ksp/KspFieldElementTest.kt
@@ -17,10 +17,10 @@
package androidx.room.compiler.processing.ksp
import androidx.room.compiler.processing.XFieldElement
+import androidx.room.compiler.processing.ksp.KspFieldElementTest.TestModifier.FINAL
import androidx.room.compiler.processing.ksp.KspFieldElementTest.TestModifier.PRIVATE
import androidx.room.compiler.processing.ksp.KspFieldElementTest.TestModifier.PROTECTED
import androidx.room.compiler.processing.ksp.KspFieldElementTest.TestModifier.PUBLIC
-import androidx.room.compiler.processing.ksp.KspFieldElementTest.TestModifier.FINAL
import androidx.room.compiler.processing.util.Source
import androidx.room.compiler.processing.util.XTestInvocation
import androidx.room.compiler.processing.util.className
diff --git a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/ksp/KspReflectiveAnnotationBoxTest.kt b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/ksp/KspReflectiveAnnotationBoxTest.kt
index 8c694265..cc3a950 100644
--- a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/ksp/KspReflectiveAnnotationBoxTest.kt
+++ b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/ksp/KspReflectiveAnnotationBoxTest.kt
@@ -20,8 +20,8 @@
import com.google.common.truth.Truth.assertThat
import com.squareup.javapoet.ClassName
import com.squareup.javapoet.TypeName
-import org.junit.Test
import kotlin.reflect.KClass
+import org.junit.Test
class KspReflectiveAnnotationBoxTest {
enum class TestEnum {
diff --git a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/ksp/KspTypeNamesGoldenTest.kt b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/ksp/KspTypeNamesGoldenTest.kt
index 35f0b23..b0c73fd 100644
--- a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/ksp/KspTypeNamesGoldenTest.kt
+++ b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/ksp/KspTypeNamesGoldenTest.kt
@@ -158,10 +158,15 @@
class MyGeneric<T>
class MyGenericIn<in T>
class MyGenericOut<out T>
+ class MyGeneric2Parameters<in T1, out T2>
class MyGenericMultipleParameters<T1: MyGeneric<*>, T2: MyGeneric<T1>>
interface MyInterface
typealias MyInterfaceAlias = MyInterface
typealias MyGenericAlias = MyGenericIn<MyGenericOut<MyGenericOut<MyType>>>
+ typealias MyGenericOutAlias<T> = MyGenericOut<T>
+ typealias MyGenericOutAliasWithJSW<T> = MyGenericOut<@JSW T>
+ typealias MyGeneric2ParametersAlias<T1, T2> = MyGeneric2Parameters<MyGenericOut<T1>, MyGeneric<MyGenericOut<T2>>>
+ typealias MyGeneric1ParameterAlias<T> = MyGeneric2Parameters<MyGenericOut<T>, MyGeneric<MyGenericOut<T>>>
typealias MyLambdaAlias1 = (List<MyGenericIn<MyGenericOut<MyGenericOut<MyType>>>>) -> List<MyGenericIn<MyGenericOut<MyGenericOut<MyType>>>>
typealias MyLambdaAlias2 = @JSW (List<MyGenericIn<MyGenericOut<MyGenericOut<MyType>>>>) -> List<MyGenericIn<MyGenericOut<MyGenericOut<MyType>>>>
typealias MyLambdaAlias3 = (@JSW List<MyGenericIn<MyGenericOut<MyGenericOut<MyType>>>>) -> @JSW List<MyGenericIn<MyGenericOut<MyGenericOut<MyType>>>>
@@ -296,6 +301,69 @@
fun method31(
param: MyGenericOut<MyGeneric<out MyGenericOut<MyGeneric<MyType>>>>
): MyGenericOut<MyGeneric<out MyGenericOut<MyGeneric<MyType>>>> = TODO()
+ fun method32(
+ param: MyGenericOutAlias<MyInterface>
+ ): MyGenericOutAlias<MyInterface> = TODO()
+ fun method33(
+ param: MyGenericOut<MyGenericOutAlias<MyInterface>>
+ ): MyGenericOut<MyGenericOutAlias<MyInterface>> = TODO()
+ fun method34(
+ param: MyGenericIn<MyGenericOutAlias<MyInterface>>
+ ): MyGenericIn<MyGenericOutAlias<MyInterface>> = TODO()
+ fun method35(
+ param: MyGenericOutAlias<MyGenericOut<MyInterface>>
+ ): MyGenericOutAlias<MyGenericOut<MyInterface>> = TODO()
+ fun method36(
+ param: MyGenericIn<MyGenericOutAlias<MyGenericOut<MyInterface>>>
+ ): MyGenericIn<MyGenericOutAlias<MyGenericOut<MyInterface>>> = TODO()
+ fun method37(
+ param: MyGenericIn<MyGenericOutAlias<MyGenericIn<MyInterface>>>
+ ): MyGenericIn<MyGenericOutAlias<MyGenericIn<MyInterface>>> = TODO()
+ fun method38(
+ param: MyGenericOutAliasWithJSW<MyInterface>
+ ): MyGenericOutAliasWithJSW<MyInterface> = TODO()
+ fun method39(
+ param: MyGenericOut<MyGenericOutAliasWithJSW<MyInterface>>
+ ): MyGenericOut<MyGenericOutAliasWithJSW<MyInterface>> = TODO()
+ fun method40(
+ param: MyGenericIn<MyGenericOutAliasWithJSW<MyInterface>>
+ ): MyGenericIn<MyGenericOutAliasWithJSW<MyInterface>> = TODO()
+ fun method41(
+ param: MyGenericOutAliasWithJSW<MyGenericOut<MyInterface>>
+ ): MyGenericOutAliasWithJSW<MyGenericOut<MyInterface>> = TODO()
+ fun method42(
+ param: MyGenericIn<MyGenericOutAliasWithJSW<MyGenericOut<MyInterface>>>
+ ): MyGenericIn<MyGenericOutAliasWithJSW<MyGenericOut<MyInterface>>> = TODO()
+ fun method43(
+ param: MyGenericIn<MyGenericOutAliasWithJSW<MyGenericIn<MyInterface>>>
+ ): MyGenericIn<MyGenericOutAliasWithJSW<MyGenericIn<MyInterface>>> = TODO()
+ fun method44(
+ param: MyGenericOutAliasWithJSW<MyType>
+ ): MyGenericOutAliasWithJSW<MyType> = TODO()
+ fun method45(
+ param: MyGenericOut<MyGenericOutAliasWithJSW<MyType>>
+ ): MyGenericOut<MyGenericOutAliasWithJSW<MyType>> = TODO()
+ fun method46(
+ param: MyGenericIn<MyGenericOutAliasWithJSW<MyType>>
+ ): MyGenericIn<MyGenericOutAliasWithJSW<MyType>> = TODO()
+ fun method47(
+ param: MyGeneric2ParametersAlias<MyType, MyType>
+ ): MyGeneric2ParametersAlias<MyType, MyType> = TODO()
+ fun method48(
+ param: MyGenericOut<MyGeneric2ParametersAlias<MyType, MyType>>
+ ): MyGenericOut<MyGeneric2ParametersAlias<MyType, MyType>> = TODO()
+ fun method49(
+ param: MyGenericIn<MyGeneric2ParametersAlias<MyType, MyType>>
+ ): MyGenericIn<MyGeneric2ParametersAlias<MyType, MyType>> = TODO()
+ fun method50(
+ param: MyGeneric2ParametersAlias<MyGenericOut<MyType>, MyGenericIn<MyType>>
+ ): MyGeneric2ParametersAlias<MyGenericOut<MyType>, MyGenericIn<MyType>> = TODO()
+ fun method51(
+ param: MyGenericOut<MyGeneric2ParametersAlias<MyGenericOut<MyType>, MyGenericIn<MyType>>>
+ ): MyGenericOut<MyGeneric2ParametersAlias<MyGenericOut<MyType>, MyGenericIn<MyType>>> = TODO()
+ fun method52(
+ param: MyGenericIn<MyGeneric2ParametersAlias<MyGenericOut<MyType>, MyGenericIn<MyType>>>
+ ): MyGenericIn<MyGeneric2ParametersAlias<MyGenericOut<MyType>, MyGenericIn<MyType>>> = TODO()
}
""".trimIndent()
), listOf("Subject")
diff --git a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/profiling/ProfileRule.kt b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/profiling/ProfileRule.kt
index 03bc13c..b14ba17 100644
--- a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/profiling/ProfileRule.kt
+++ b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/profiling/ProfileRule.kt
@@ -16,14 +16,14 @@
package androidx.room.compiler.processing.profiling
-import org.junit.AssumptionViolatedException
-import org.junit.rules.TestRule
-import org.junit.runner.Description
-import org.junit.runners.model.Statement
import kotlin.time.Duration
import kotlin.time.Duration.Companion.nanoseconds
import kotlin.time.DurationUnit
import kotlin.time.ExperimentalTime
+import org.junit.AssumptionViolatedException
+import org.junit.rules.TestRule
+import org.junit.runner.Description
+import org.junit.runners.model.Statement
/**
* Helper rule to run profiling tests.
diff --git a/room/room-compiler/build.gradle b/room/room-compiler/build.gradle
index 6b7096e..98470ed 100644
--- a/room/room-compiler/build.gradle
+++ b/room/room-compiler/build.gradle
@@ -299,7 +299,7 @@
}
androidx {
- name = "Android Room Compiler"
+ name = "Room Compiler"
type = LibraryType.ANNOTATION_PROCESSOR
inceptionYear = "2017"
description = "Android Room annotation processor"
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/ext/xelement_ext.kt b/room/room-compiler/src/main/kotlin/androidx/room/ext/xelement_ext.kt
index 5c36768..42a63d5 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/ext/xelement_ext.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/ext/xelement_ext.kt
@@ -16,10 +16,10 @@
package androidx.room.ext
-import kotlin.contracts.contract
import androidx.room.compiler.processing.XElement
import androidx.room.compiler.processing.XFieldElement
import androidx.room.compiler.processing.XTypeElement
+import kotlin.contracts.contract
fun XElement.isEntityElement(): Boolean {
contract {
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/processor/DatabaseViewProcessor.kt b/room/room-compiler/src/main/kotlin/androidx/room/processor/DatabaseViewProcessor.kt
index 67aecd0..44f349e 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/processor/DatabaseViewProcessor.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/processor/DatabaseViewProcessor.kt
@@ -16,10 +16,10 @@
package androidx.room.processor
+import androidx.room.compiler.processing.XTypeElement
import androidx.room.parser.ParsedQuery
import androidx.room.parser.QueryType
import androidx.room.parser.SqlParser
-import androidx.room.compiler.processing.XTypeElement
import androidx.room.vo.DatabaseView
class DatabaseViewProcessor(
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/solver/binderprovider/LiveDataQueryResultBinderProvider.kt b/room/room-compiler/src/main/kotlin/androidx/room/solver/binderprovider/LiveDataQueryResultBinderProvider.kt
index 042b24a..3bd2cda 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/solver/binderprovider/LiveDataQueryResultBinderProvider.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/solver/binderprovider/LiveDataQueryResultBinderProvider.kt
@@ -16,9 +16,9 @@
package androidx.room.solver.binderprovider
-import androidx.room.ext.LifecyclesTypeNames
import androidx.room.compiler.processing.XRawType
import androidx.room.compiler.processing.XType
+import androidx.room.ext.LifecyclesTypeNames
import androidx.room.processor.Context
import androidx.room.solver.ObservableQueryResultBinderProvider
import androidx.room.solver.query.result.LiveDataQueryResultBinder
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/solver/types/CursorValueReader.kt b/room/room-compiler/src/main/kotlin/androidx/room/solver/types/CursorValueReader.kt
index 2e560af..6771c01 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/solver/types/CursorValueReader.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/solver/types/CursorValueReader.kt
@@ -16,8 +16,8 @@
package androidx.room.solver.types
-import androidx.room.parser.SQLTypeAffinity
import androidx.room.compiler.processing.XType
+import androidx.room.parser.SQLTypeAffinity
import androidx.room.solver.CodeGenScope
/**
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/util/SchemaDiffer.kt b/room/room-compiler/src/main/kotlin/androidx/room/util/SchemaDiffer.kt
index ceb7f64..9d59d4d 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/util/SchemaDiffer.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/util/SchemaDiffer.kt
@@ -23,12 +23,12 @@
import androidx.room.migration.bundle.ForeignKeyBundle
import androidx.room.migration.bundle.FtsEntityBundle
import androidx.room.migration.bundle.IndexBundle
-import androidx.room.processor.ProcessorErrors.deletedOrRenamedTableFound
-import androidx.room.processor.ProcessorErrors.tableRenameError
import androidx.room.processor.ProcessorErrors.conflictingRenameColumnAnnotationsFound
import androidx.room.processor.ProcessorErrors.conflictingRenameTableAnnotationsFound
-import androidx.room.processor.ProcessorErrors.newNotNullColumnMustHaveDefaultValue
import androidx.room.processor.ProcessorErrors.deletedOrRenamedColumnFound
+import androidx.room.processor.ProcessorErrors.deletedOrRenamedTableFound
+import androidx.room.processor.ProcessorErrors.newNotNullColumnMustHaveDefaultValue
+import androidx.room.processor.ProcessorErrors.tableRenameError
import androidx.room.processor.ProcessorErrors.tableWithConflictingPrefixFound
import androidx.room.vo.AutoMigration
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/vo/DatabaseView.kt b/room/room-compiler/src/main/kotlin/androidx/room/vo/DatabaseView.kt
index 142cdf8..acdf443 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/vo/DatabaseView.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/vo/DatabaseView.kt
@@ -17,10 +17,10 @@
package androidx.room.vo
import androidx.room.compiler.processing.XType
-import androidx.room.migration.bundle.DatabaseViewBundle
-import androidx.room.parser.ParsedQuery
import androidx.room.compiler.processing.XTypeElement
+import androidx.room.migration.bundle.DatabaseViewBundle
import androidx.room.migration.bundle.VIEW_NAME_PLACEHOLDER
+import androidx.room.parser.ParsedQuery
class DatabaseView(
element: XTypeElement,
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/vo/Entity.kt b/room/room-compiler/src/main/kotlin/androidx/room/vo/Entity.kt
index a565c5f..6f4b932 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/vo/Entity.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/vo/Entity.kt
@@ -17,8 +17,8 @@
package androidx.room.vo
import androidx.room.compiler.processing.XType
-import androidx.room.migration.bundle.EntityBundle
import androidx.room.compiler.processing.XTypeElement
+import androidx.room.migration.bundle.EntityBundle
import androidx.room.migration.bundle.TABLE_NAME_PLACEHOLDER
/**
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/vo/FtsEntity.kt b/room/room-compiler/src/main/kotlin/androidx/room/vo/FtsEntity.kt
index 0a33965..7295095 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/vo/FtsEntity.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/vo/FtsEntity.kt
@@ -17,10 +17,10 @@
package androidx.room.vo
import androidx.room.compiler.processing.XType
-import androidx.room.migration.bundle.FtsEntityBundle
-import androidx.room.parser.FtsVersion
import androidx.room.compiler.processing.XTypeElement
+import androidx.room.migration.bundle.FtsEntityBundle
import androidx.room.migration.bundle.TABLE_NAME_PLACEHOLDER
+import androidx.room.parser.FtsVersion
/**
* An Entity with a mapping FTS table.
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/vo/PrimaryKey.kt b/room/room-compiler/src/main/kotlin/androidx/room/vo/PrimaryKey.kt
index fde1bf8..69816b4 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/vo/PrimaryKey.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/vo/PrimaryKey.kt
@@ -15,8 +15,8 @@
*/
package androidx.room.vo
-import androidx.room.migration.bundle.PrimaryKeyBundle
import androidx.room.compiler.processing.XElement
+import androidx.room.migration.bundle.PrimaryKeyBundle
/**
* Represents a PrimaryKey for an Entity.
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/vo/QueryMethod.kt b/room/room-compiler/src/main/kotlin/androidx/room/vo/QueryMethod.kt
index 2a87a34..81d260c 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/vo/QueryMethod.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/vo/QueryMethod.kt
@@ -16,9 +16,9 @@
package androidx.room.vo
-import androidx.room.parser.ParsedQuery
import androidx.room.compiler.processing.XMethodElement
import androidx.room.compiler.processing.XType
+import androidx.room.parser.ParsedQuery
import androidx.room.solver.prepared.binder.PreparedQueryResultBinder
import androidx.room.solver.query.result.QueryResultBinder
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/vo/SchemaIdentityKey.kt b/room/room-compiler/src/main/kotlin/androidx/room/vo/SchemaIdentityKey.kt
index 007ea5d..75e5117 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/vo/SchemaIdentityKey.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/vo/SchemaIdentityKey.kt
@@ -16,8 +16,8 @@
package androidx.room.vo
-import org.apache.commons.codec.digest.DigestUtils
import java.util.Locale
+import org.apache.commons.codec.digest.DigestUtils
interface HasSchemaIdentity {
fun getIdKey(): String
diff --git a/room/room-compiler/src/test/kotlin/androidx/room/log/RLogTest.kt b/room/room-compiler/src/test/kotlin/androidx/room/log/RLogTest.kt
index 0e39b5a..a45785d 100644
--- a/room/room-compiler/src/test/kotlin/androidx/room/log/RLogTest.kt
+++ b/room/room-compiler/src/test/kotlin/androidx/room/log/RLogTest.kt
@@ -21,10 +21,10 @@
import androidx.room.compiler.processing.XElement
import androidx.room.compiler.processing.XMessager
import androidx.room.vo.Warning
+import javax.tools.Diagnostic
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import javax.tools.Diagnostic
@RunWith(JUnit4::class)
class RLogTest {
diff --git a/room/room-compiler/src/test/kotlin/androidx/room/parser/ExpandableSqlParserTest.kt b/room/room-compiler/src/test/kotlin/androidx/room/parser/ExpandableSqlParserTest.kt
index 0a030e4..61d54d2 100644
--- a/room/room-compiler/src/test/kotlin/androidx/room/parser/ExpandableSqlParserTest.kt
+++ b/room/room-compiler/src/test/kotlin/androidx/room/parser/ExpandableSqlParserTest.kt
@@ -18,9 +18,9 @@
import androidx.room.parser.expansion.ExpandableSection
import androidx.room.parser.expansion.ExpandableSqlParser
-import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.CoreMatchers.equalTo
import org.hamcrest.CoreMatchers.instanceOf
+import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.CoreMatchers.not
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Test
diff --git a/room/room-compiler/src/test/kotlin/androidx/room/processor/DaoProcessorTest.kt b/room/room-compiler/src/test/kotlin/androidx/room/processor/DaoProcessorTest.kt
index f8e5603..076ccf0 100644
--- a/room/room-compiler/src/test/kotlin/androidx/room/processor/DaoProcessorTest.kt
+++ b/room/room-compiler/src/test/kotlin/androidx/room/processor/DaoProcessorTest.kt
@@ -24,8 +24,8 @@
import androidx.room.compiler.processing.util.runKspTest
import androidx.room.compiler.processing.util.runProcessorTest
import androidx.room.ext.RoomTypeNames.ROOM_DB
-import androidx.room.processor.ProcessorErrors.nullableComponentInDaoMethodReturnType
import androidx.room.processor.ProcessorErrors.nullableCollectionOrArrayReturnTypeInDaoMethod
+import androidx.room.processor.ProcessorErrors.nullableComponentInDaoMethodReturnType
import androidx.room.testing.context
import androidx.room.vo.Dao
import androidx.room.vo.ReadQueryMethod
diff --git a/room/room-compiler/src/test/kotlin/androidx/room/processor/InsertionMethodProcessorTest.kt b/room/room-compiler/src/test/kotlin/androidx/room/processor/InsertionMethodProcessorTest.kt
index 1806453c..55f7026 100644
--- a/room/room-compiler/src/test/kotlin/androidx/room/processor/InsertionMethodProcessorTest.kt
+++ b/room/room-compiler/src/test/kotlin/androidx/room/processor/InsertionMethodProcessorTest.kt
@@ -20,8 +20,8 @@
import androidx.room.OnConflictStrategy
import androidx.room.compiler.processing.XMethodElement
import androidx.room.compiler.processing.XType
-import androidx.room.processor.ProcessorErrors.INSERTION_DOES_NOT_HAVE_ANY_PARAMETERS_TO_INSERT
import androidx.room.processor.ProcessorErrors.CANNOT_FIND_INSERT_RESULT_ADAPTER
+import androidx.room.processor.ProcessorErrors.INSERTION_DOES_NOT_HAVE_ANY_PARAMETERS_TO_INSERT
import androidx.room.processor.ProcessorErrors.INSERT_MULTI_PARAM_SINGLE_RETURN_MISMATCH
import androidx.room.processor.ProcessorErrors.INSERT_SINGLE_PARAM_MULTI_RETURN_MISMATCH
import androidx.room.vo.InsertionMethod
diff --git a/room/room-compiler/src/test/kotlin/androidx/room/processor/ProjectionExpanderTest.kt b/room/room-compiler/src/test/kotlin/androidx/room/processor/ProjectionExpanderTest.kt
index 3a136ab..2b5edd13 100644
--- a/room/room-compiler/src/test/kotlin/androidx/room/processor/ProjectionExpanderTest.kt
+++ b/room/room-compiler/src/test/kotlin/androidx/room/processor/ProjectionExpanderTest.kt
@@ -25,8 +25,8 @@
import androidx.room.parser.expansion.ProjectionExpander
import androidx.room.testing.context
import createVerifierFromEntitiesAndViews
-import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.CoreMatchers.equalTo
+import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Test
import org.junit.runner.RunWith
diff --git a/room/room-compiler/src/test/kotlin/androidx/room/processor/UpsertionMethodProcessorTest.kt b/room/room-compiler/src/test/kotlin/androidx/room/processor/UpsertionMethodProcessorTest.kt
index 49832fb..0dea532 100644
--- a/room/room-compiler/src/test/kotlin/androidx/room/processor/UpsertionMethodProcessorTest.kt
+++ b/room/room-compiler/src/test/kotlin/androidx/room/processor/UpsertionMethodProcessorTest.kt
@@ -19,8 +19,8 @@
import androidx.room.Upsert
import androidx.room.compiler.processing.XMethodElement
import androidx.room.compiler.processing.XType
-import androidx.room.processor.ProcessorErrors.UPSERTION_DOES_NOT_HAVE_ANY_PARAMETERS_TO_UPSERT
import androidx.room.processor.ProcessorErrors.CANNOT_FIND_UPSERT_RESULT_ADAPTER
+import androidx.room.processor.ProcessorErrors.UPSERTION_DOES_NOT_HAVE_ANY_PARAMETERS_TO_UPSERT
import androidx.room.processor.ProcessorErrors.UPSERT_MULTI_PARAM_SINGLE_RETURN_MISMATCH
import androidx.room.processor.ProcessorErrors.UPSERT_SINGLE_PARAM_MULTI_RETURN_MISMATCH
import androidx.room.vo.UpsertionMethod
diff --git a/room/room-compiler/src/test/kotlin/androidx/room/vo/FtsEntityTest.kt b/room/room-compiler/src/test/kotlin/androidx/room/vo/FtsEntityTest.kt
index fcca115..c589003 100644
--- a/room/room-compiler/src/test/kotlin/androidx/room/vo/FtsEntityTest.kt
+++ b/room/room-compiler/src/test/kotlin/androidx/room/vo/FtsEntityTest.kt
@@ -16,10 +16,10 @@
package androidx.room.vo
-import androidx.room.parser.FtsVersion
import androidx.room.compiler.processing.XElement
import androidx.room.compiler.processing.XType
import androidx.room.compiler.processing.XTypeElement
+import androidx.room.parser.FtsVersion
import mockElementAndType
import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.MatcherAssert.assertThat
diff --git a/room/room-gradle-plugin/build.gradle b/room/room-gradle-plugin/build.gradle
index 8b12c66..e9dfec6 100644
--- a/room/room-gradle-plugin/build.gradle
+++ b/room/room-gradle-plugin/build.gradle
@@ -81,7 +81,7 @@
}
androidx {
- name = "Android Room Gradle Plugin"
+ name = "Room Gradle Plugin"
type = LibraryType.GRADLE_PLUGIN
inceptionYear = "2023"
description = "Android Room Gradle Plugin"
diff --git a/room/room-guava/api/restricted_current.txt b/room/room-guava/api/restricted_current.txt
index 1c04602..76401e6 100644
--- a/room/room-guava/api/restricted_current.txt
+++ b/room/room-guava/api/restricted_current.txt
@@ -2,12 +2,12 @@
package androidx.room.guava {
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class GuavaRoom {
- method @Deprecated public static <T> com.google.common.util.concurrent.ListenableFuture<T!>! createListenableFuture(java.util.concurrent.Callable<T!>!, androidx.room.RoomSQLiteQuery!, boolean);
- method @Deprecated public static <T> com.google.common.util.concurrent.ListenableFuture<T!>! createListenableFuture(androidx.room.RoomDatabase!, java.util.concurrent.Callable<T!>!, androidx.room.RoomSQLiteQuery!, boolean);
+ method public static <T> com.google.common.util.concurrent.ListenableFuture<T!> createListenableFuture(androidx.room.RoomDatabase, boolean, java.util.concurrent.Callable<T!>);
method public static <T> com.google.common.util.concurrent.ListenableFuture<T!>! createListenableFuture(androidx.room.RoomDatabase!, boolean, java.util.concurrent.Callable<T!>!, androidx.room.RoomSQLiteQuery!, boolean);
method public static <T> com.google.common.util.concurrent.ListenableFuture<T!> createListenableFuture(androidx.room.RoomDatabase, boolean, java.util.concurrent.Callable<T!>, androidx.room.RoomSQLiteQuery, boolean, android.os.CancellationSignal?);
method @Deprecated public static <T> com.google.common.util.concurrent.ListenableFuture<T!> createListenableFuture(androidx.room.RoomDatabase, java.util.concurrent.Callable<T!>);
- method public static <T> com.google.common.util.concurrent.ListenableFuture<T!> createListenableFuture(androidx.room.RoomDatabase, boolean, java.util.concurrent.Callable<T!>);
+ method @Deprecated public static <T> com.google.common.util.concurrent.ListenableFuture<T!>! createListenableFuture(androidx.room.RoomDatabase!, java.util.concurrent.Callable<T!>!, androidx.room.RoomSQLiteQuery!, boolean);
+ method @Deprecated public static <T> com.google.common.util.concurrent.ListenableFuture<T!>! createListenableFuture(java.util.concurrent.Callable<T!>!, androidx.room.RoomSQLiteQuery!, boolean);
}
}
diff --git a/room/room-guava/build.gradle b/room/room-guava/build.gradle
index 99c5ad7..572953f 100644
--- a/room/room-guava/build.gradle
+++ b/room/room-guava/build.gradle
@@ -34,7 +34,7 @@
}
androidx {
- name = "Android Room Guava"
+ name = "Room Guava"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "Android Room Guava"
diff --git a/room/room-ktx/api/restricted_current.txt b/room/room-ktx/api/restricted_current.txt
index 884fcfe..bfc510c 100644
--- a/room/room-ktx/api/restricted_current.txt
+++ b/room/room-ktx/api/restricted_current.txt
@@ -3,15 +3,15 @@
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class CoroutinesRoom {
method public static <R> kotlinx.coroutines.flow.Flow<R> createFlow(androidx.room.RoomDatabase db, boolean inTransaction, String![] tableNames, java.util.concurrent.Callable<R> callable);
- method public static suspend <R> Object? execute(androidx.room.RoomDatabase db, boolean inTransaction, java.util.concurrent.Callable<R> callable, kotlin.coroutines.Continuation<? super R>);
method public static suspend <R> Object? execute(androidx.room.RoomDatabase db, boolean inTransaction, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Callable<R> callable, kotlin.coroutines.Continuation<? super R>);
+ method public static suspend <R> Object? execute(androidx.room.RoomDatabase db, boolean inTransaction, java.util.concurrent.Callable<R> callable, kotlin.coroutines.Continuation<? super R>);
field public static final androidx.room.CoroutinesRoom.Companion Companion;
}
public static final class CoroutinesRoom.Companion {
method public <R> kotlinx.coroutines.flow.Flow<R> createFlow(androidx.room.RoomDatabase db, boolean inTransaction, String![] tableNames, java.util.concurrent.Callable<R> callable);
- method public suspend <R> Object? execute(androidx.room.RoomDatabase db, boolean inTransaction, java.util.concurrent.Callable<R> callable, kotlin.coroutines.Continuation<? super R>);
method public suspend <R> Object? execute(androidx.room.RoomDatabase db, boolean inTransaction, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Callable<R> callable, kotlin.coroutines.Continuation<? super R>);
+ method public suspend <R> Object? execute(androidx.room.RoomDatabase db, boolean inTransaction, java.util.concurrent.Callable<R> callable, kotlin.coroutines.Continuation<? super R>);
}
public final class RoomDatabaseKt {
diff --git a/room/room-ktx/build.gradle b/room/room-ktx/build.gradle
index 5e4a868..3dfa666 100644
--- a/room/room-ktx/build.gradle
+++ b/room/room-ktx/build.gradle
@@ -41,7 +41,7 @@
}
androidx {
- name = "Android Room Kotlin Extensions"
+ name = "Room Kotlin Extensions"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2019"
description = "Android Room Kotlin Extensions"
diff --git a/room/room-ktx/src/androidTest/java/androidx/room/CoroutineRoomCancellationTest.kt b/room/room-ktx/src/androidTest/java/androidx/room/CoroutineRoomCancellationTest.kt
index 97dcc0d..c3e1e03 100644
--- a/room/room-ktx/src/androidTest/java/androidx/room/CoroutineRoomCancellationTest.kt
+++ b/room/room-ktx/src/androidTest/java/androidx/room/CoroutineRoomCancellationTest.kt
@@ -22,6 +22,8 @@
import androidx.sqlite.db.SupportSQLiteOpenHelper
import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
+import java.util.concurrent.Callable
+import java.util.concurrent.CountDownLatch
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -34,8 +36,6 @@
import kotlinx.coroutines.test.runCurrent
import org.junit.Assert.fail
import org.junit.Test
-import java.util.concurrent.Callable
-import java.util.concurrent.CountDownLatch
@SmallTest
@SdkSuppress(minSdkVersion = 16)
diff --git a/room/room-ktx/src/test/java/androidx/room/CoroutinesRoomTest.kt b/room/room-ktx/src/test/java/androidx/room/CoroutinesRoomTest.kt
index 08dc8c5..af8d5a7 100644
--- a/room/room-ktx/src/test/java/androidx/room/CoroutinesRoomTest.kt
+++ b/room/room-ktx/src/test/java/androidx/room/CoroutinesRoomTest.kt
@@ -18,6 +18,7 @@
import androidx.kruth.assertThat
import androidx.sqlite.db.SupportSQLiteOpenHelper
+import kotlin.coroutines.ContinuationInterceptor
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.async
import kotlinx.coroutines.flow.first
@@ -26,7 +27,6 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import kotlin.coroutines.ContinuationInterceptor
@RunWith(JUnit4::class)
class CoroutinesRoomTest {
diff --git a/room/room-ktx/src/test/java/androidx/room/MigrationTest.kt b/room/room-ktx/src/test/java/androidx/room/MigrationTest.kt
index f49e8ce..bf24923 100644
--- a/room/room-ktx/src/test/java/androidx/room/MigrationTest.kt
+++ b/room/room-ktx/src/test/java/androidx/room/MigrationTest.kt
@@ -26,10 +26,10 @@
import androidx.sqlite.db.SupportSQLiteDatabase
import androidx.sqlite.db.SupportSQLiteQuery
import androidx.sqlite.db.SupportSQLiteStatement
+import java.util.Locale
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import java.util.Locale
@RunWith(JUnit4::class)
class MigrationTest {
diff --git a/room/room-migration/api/restricted_current.txt b/room/room-migration/api/restricted_current.txt
index 1c948b9..9a58664 100644
--- a/room/room-migration/api/restricted_current.txt
+++ b/room/room-migration/api/restricted_current.txt
@@ -9,8 +9,8 @@
}
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class DatabaseBundle implements androidx.room.migration.bundle.SchemaEquality<androidx.room.migration.bundle.DatabaseBundle> {
- ctor public DatabaseBundle(int version, String identityHash, java.util.List<? extends androidx.room.migration.bundle.EntityBundle> entities, java.util.List<? extends androidx.room.migration.bundle.DatabaseViewBundle> views, java.util.List<java.lang.String> setupQueries);
ctor @Deprecated public DatabaseBundle();
+ ctor public DatabaseBundle(int version, String identityHash, java.util.List<? extends androidx.room.migration.bundle.EntityBundle> entities, java.util.List<? extends androidx.room.migration.bundle.DatabaseViewBundle> views, java.util.List<java.lang.String> setupQueries);
method public java.util.List<java.lang.String> buildCreateQueries();
method public java.util.List<androidx.room.migration.bundle.EntityBundle> getEntities();
method public java.util.Map<java.lang.String,androidx.room.migration.bundle.EntityBundle> getEntitiesByTableName();
@@ -73,8 +73,8 @@
}
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class FieldBundle implements androidx.room.migration.bundle.SchemaEquality<androidx.room.migration.bundle.FieldBundle> {
- ctor public FieldBundle(@com.google.gson.annotations.SerializedName("fieldPath") String fieldPath, @com.google.gson.annotations.SerializedName("columnName") String columnName, @com.google.gson.annotations.SerializedName("affinity") String affinity, @com.google.gson.annotations.SerializedName("notNull") boolean isNonNull, @com.google.gson.annotations.SerializedName("defaultValue") String? defaultValue);
ctor @Deprecated public FieldBundle(String fieldPath, String columnName, String affinity, boolean nonNull);
+ ctor public FieldBundle(@com.google.gson.annotations.SerializedName("fieldPath") String fieldPath, @com.google.gson.annotations.SerializedName("columnName") String columnName, @com.google.gson.annotations.SerializedName("affinity") String affinity, @com.google.gson.annotations.SerializedName("notNull") boolean isNonNull, @com.google.gson.annotations.SerializedName("defaultValue") String? defaultValue);
method public String getAffinity();
method public String getColumnName();
method public String? getDefaultValue();
@@ -135,12 +135,12 @@
}
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class IndexBundle implements androidx.room.migration.bundle.SchemaEquality<androidx.room.migration.bundle.IndexBundle> {
- ctor public IndexBundle(@com.google.gson.annotations.SerializedName("name") String name, @com.google.gson.annotations.SerializedName("unique") boolean isUnique, @com.google.gson.annotations.SerializedName("columnNames") java.util.List<java.lang.String>? columnNames, @com.google.gson.annotations.SerializedName("orders") java.util.List<java.lang.String>? orders, @com.google.gson.annotations.SerializedName("createSql") String createSql);
ctor @Deprecated public IndexBundle(String name, boolean unique, java.util.List<java.lang.String> columnNames, String createSql);
+ ctor public IndexBundle(@com.google.gson.annotations.SerializedName("name") String name, @com.google.gson.annotations.SerializedName("unique") boolean isUnique, @com.google.gson.annotations.SerializedName("columnNames") java.util.List<java.lang.String>? columnNames, @com.google.gson.annotations.SerializedName("orders") java.util.List<java.lang.String>? orders, @com.google.gson.annotations.SerializedName("createSql") String createSql);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public String create(String tableName);
method public java.util.List<java.lang.String>? getColumnNames();
- method public String getCreateSql(String tableName);
method public String getCreateSql();
+ method public String getCreateSql(String tableName);
method public String getName();
method public java.util.List<java.lang.String>? getOrders();
method public boolean isSchemaEqual(androidx.room.migration.bundle.IndexBundle other);
diff --git a/room/room-migration/build.gradle b/room/room-migration/build.gradle
index 20954b0..3eb7477 100644
--- a/room/room-migration/build.gradle
+++ b/room/room-migration/build.gradle
@@ -32,7 +32,7 @@
}
androidx {
- name = "Android Room Migration"
+ name = "Room Migration"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2017"
description = "Android Room Migration"
diff --git a/room/room-migration/src/main/java/androidx/room/migration/bundle/DatabaseViewBundle.kt b/room/room-migration/src/main/java/androidx/room/migration/bundle/DatabaseViewBundle.kt
index 247ec91a..4d8d0d4 100644
--- a/room/room-migration/src/main/java/androidx/room/migration/bundle/DatabaseViewBundle.kt
+++ b/room/room-migration/src/main/java/androidx/room/migration/bundle/DatabaseViewBundle.kt
@@ -17,7 +17,6 @@
package androidx.room.migration.bundle
import androidx.annotation.RestrictTo
-
import com.google.gson.annotations.SerializedName
/**
diff --git a/room/room-migration/src/main/java/androidx/room/migration/bundle/EntityBundle.kt b/room/room-migration/src/main/java/androidx/room/migration/bundle/EntityBundle.kt
index 515574b..ca445ae 100644
--- a/room/room-migration/src/main/java/androidx/room/migration/bundle/EntityBundle.kt
+++ b/room/room-migration/src/main/java/androidx/room/migration/bundle/EntityBundle.kt
@@ -18,7 +18,6 @@
import androidx.annotation.RestrictTo
import androidx.room.migration.bundle.SchemaEqualityUtil.checkSchemaEquality
-
import com.google.gson.annotations.SerializedName
/**
diff --git a/room/room-migration/src/main/java/androidx/room/migration/bundle/FieldBundle.kt b/room/room-migration/src/main/java/androidx/room/migration/bundle/FieldBundle.kt
index 4b3e07e9..c13f17f 100644
--- a/room/room-migration/src/main/java/androidx/room/migration/bundle/FieldBundle.kt
+++ b/room/room-migration/src/main/java/androidx/room/migration/bundle/FieldBundle.kt
@@ -17,7 +17,6 @@
package androidx.room.migration.bundle
import androidx.annotation.RestrictTo
-
import com.google.gson.annotations.SerializedName
/**
diff --git a/room/room-migration/src/main/java/androidx/room/migration/bundle/ForeignKeyBundle.kt b/room/room-migration/src/main/java/androidx/room/migration/bundle/ForeignKeyBundle.kt
index 5420167..3939331 100644
--- a/room/room-migration/src/main/java/androidx/room/migration/bundle/ForeignKeyBundle.kt
+++ b/room/room-migration/src/main/java/androidx/room/migration/bundle/ForeignKeyBundle.kt
@@ -17,7 +17,6 @@
package androidx.room.migration.bundle
import androidx.annotation.RestrictTo
-
import com.google.gson.annotations.SerializedName
/**
diff --git a/room/room-migration/src/main/java/androidx/room/migration/bundle/FtsEntityBundle.kt b/room/room-migration/src/main/java/androidx/room/migration/bundle/FtsEntityBundle.kt
index a66911b..0653167 100644
--- a/room/room-migration/src/main/java/androidx/room/migration/bundle/FtsEntityBundle.kt
+++ b/room/room-migration/src/main/java/androidx/room/migration/bundle/FtsEntityBundle.kt
@@ -18,7 +18,6 @@
import androidx.annotation.RestrictTo
import androidx.room.migration.bundle.SchemaEqualityUtil.checkSchemaEquality
-
import com.google.gson.annotations.SerializedName
/**
diff --git a/room/room-migration/src/main/java/androidx/room/migration/bundle/FtsOptionsBundle.kt b/room/room-migration/src/main/java/androidx/room/migration/bundle/FtsOptionsBundle.kt
index da62796..1040374 100644
--- a/room/room-migration/src/main/java/androidx/room/migration/bundle/FtsOptionsBundle.kt
+++ b/room/room-migration/src/main/java/androidx/room/migration/bundle/FtsOptionsBundle.kt
@@ -17,7 +17,6 @@
package androidx.room.migration.bundle
import androidx.annotation.RestrictTo
-
import com.google.gson.annotations.SerializedName
/**
diff --git a/room/room-migration/src/main/java/androidx/room/migration/bundle/IndexBundle.kt b/room/room-migration/src/main/java/androidx/room/migration/bundle/IndexBundle.kt
index a54c633..c245c78 100644
--- a/room/room-migration/src/main/java/androidx/room/migration/bundle/IndexBundle.kt
+++ b/room/room-migration/src/main/java/androidx/room/migration/bundle/IndexBundle.kt
@@ -18,7 +18,6 @@
import androidx.annotation.RestrictTo
import androidx.room.Index
-
import com.google.gson.annotations.SerializedName
/**
diff --git a/room/room-migration/src/main/java/androidx/room/migration/bundle/PrimaryKeyBundle.kt b/room/room-migration/src/main/java/androidx/room/migration/bundle/PrimaryKeyBundle.kt
index b8f2406..1fd0e00 100644
--- a/room/room-migration/src/main/java/androidx/room/migration/bundle/PrimaryKeyBundle.kt
+++ b/room/room-migration/src/main/java/androidx/room/migration/bundle/PrimaryKeyBundle.kt
@@ -17,7 +17,6 @@
package androidx.room.migration.bundle
import androidx.annotation.RestrictTo
-
import com.google.gson.annotations.SerializedName
/**
diff --git a/room/room-migration/src/test/java/androidx/room/migration/bundle/DatabaseViewBundleTest.kt b/room/room-migration/src/test/java/androidx/room/migration/bundle/DatabaseViewBundleTest.kt
index 3f37dba..75fb554 100644
--- a/room/room-migration/src/test/java/androidx/room/migration/bundle/DatabaseViewBundleTest.kt
+++ b/room/room-migration/src/test/java/androidx/room/migration/bundle/DatabaseViewBundleTest.kt
@@ -18,7 +18,6 @@
import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.MatcherAssert.assertThat
-
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
diff --git a/room/room-migration/src/test/java/androidx/room/migration/bundle/PrimaryKeyBundleTest.kt b/room/room-migration/src/test/java/androidx/room/migration/bundle/PrimaryKeyBundleTest.kt
index 9a42f55..8b43988 100644
--- a/room/room-migration/src/test/java/androidx/room/migration/bundle/PrimaryKeyBundleTest.kt
+++ b/room/room-migration/src/test/java/androidx/room/migration/bundle/PrimaryKeyBundleTest.kt
@@ -18,7 +18,6 @@
import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.MatcherAssert.assertThat
-
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
diff --git a/room/room-paging/src/androidTest/kotlin/androidx/room/InvalidationTrackerExtRoomPaging.kt b/room/room-paging/src/androidTest/kotlin/androidx/room/InvalidationTrackerExtRoomPaging.kt
index 654a96e..fe1df3e6 100644
--- a/room/room-paging/src/androidTest/kotlin/androidx/room/InvalidationTrackerExtRoomPaging.kt
+++ b/room/room-paging/src/androidTest/kotlin/androidx/room/InvalidationTrackerExtRoomPaging.kt
@@ -15,9 +15,9 @@
*/
package androidx.room
+import java.util.concurrent.TimeUnit
import kotlinx.coroutines.delay
import kotlinx.coroutines.withTimeout
-import java.util.concurrent.TimeUnit
/**
* True if invalidation tracker is pending a refresh event to get database changes.
diff --git a/room/room-paging/src/androidTest/kotlin/androidx/room/paging/LimitOffsetPagingSourceTest.kt b/room/room-paging/src/androidTest/kotlin/androidx/room/paging/LimitOffsetPagingSourceTest.kt
index 09a9564..8231cf1 100644
--- a/room/room-paging/src/androidTest/kotlin/androidx/room/paging/LimitOffsetPagingSourceTest.kt
+++ b/room/room-paging/src/androidTest/kotlin/androidx/room/paging/LimitOffsetPagingSourceTest.kt
@@ -34,23 +34,23 @@
import androidx.testutils.FilteringExecutor
import androidx.testutils.TestExecutor
import com.google.common.truth.Truth.assertThat
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.launch
-import kotlinx.coroutines.runBlocking
-import kotlinx.coroutines.test.advanceUntilIdle
-import org.junit.After
-import org.junit.Before
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
import java.util.concurrent.Executors
import java.util.concurrent.TimeUnit
import kotlin.test.assertFailsWith
import kotlin.test.assertFalse
import kotlin.test.assertTrue
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.Job
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.runBlocking
+import kotlinx.coroutines.test.advanceUntilIdle
import kotlinx.coroutines.test.runTest
+import org.junit.After
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
private const val tableName: String = "TestItem"
@@ -573,7 +573,7 @@
val refreshKey = 85 - (15 / 2)
val pagingSource2 = LimitOffsetPagingSourceImpl(database)
- val pager2 = TestPager(pagingSource2, CONFIG)
+ val pager2 = TestPager(CONFIG, pagingSource2)
val result = pager2.refresh(initialKey = refreshKey) as LoadResult.Page
// database should only have 40 items left. Refresh key is invalid at this point
@@ -616,7 +616,7 @@
dao.deleteTestItems(0, 29)
val pagingSource2 = LimitOffsetPagingSourceImpl(database)
- val pager2 = TestPager(pagingSource2, CONFIG)
+ val pager2 = TestPager(CONFIG, pagingSource2)
// assume user was viewing first few items with anchorPosition = 0 and refresh key
// clips to 0
val result = pager2.refresh(initialKey = 0) as LoadResult.Page
@@ -648,7 +648,7 @@
dao.deleteTestItems(0, 94)
val pagingSource2 = LimitOffsetPagingSourceImpl(database)
- val pager2 = TestPager(pagingSource2, CONFIG)
+ val pager2 = TestPager(CONFIG, pagingSource2)
// assume user was viewing first few items with anchorPosition = 0 and refresh key
// clips to 0
val result = pager2.refresh(initialKey = 0) as LoadResult.Page
@@ -682,7 +682,7 @@
) -> Unit
) {
runBlocking {
- block(TestPager(pagingSource, config), pagingSource)
+ block(TestPager(config, pagingSource), pagingSource)
}
}
}
@@ -736,7 +736,7 @@
@Test
fun invalid_append() = runTest {
val pagingSource = LimitOffsetPagingSourceImpl(db)
- val pager = TestPager(pagingSource, CONFIG)
+ val pager = TestPager(CONFIG, pagingSource)
dao.addAllItems(ITEMS_LIST)
val result = pager.refresh() as LoadResult.Page
@@ -769,7 +769,7 @@
@Test
fun invalid_prepend() = runTest {
val pagingSource = LimitOffsetPagingSourceImpl(db)
- val pager = TestPager(pagingSource, CONFIG)
+ val pager = TestPager(CONFIG, pagingSource)
dao.addAllItems(ITEMS_LIST)
val result = pager.refresh(initialKey = 20) as LoadResult.Page
diff --git a/room/room-paging/src/main/java/androidx/room/paging/LimitOffsetPagingSource.kt b/room/room-paging/src/main/java/androidx/room/paging/LimitOffsetPagingSource.kt
index 6634131..bca76d1 100644
--- a/room/room-paging/src/main/java/androidx/room/paging/LimitOffsetPagingSource.kt
+++ b/room/room-paging/src/main/java/androidx/room/paging/LimitOffsetPagingSource.kt
@@ -32,8 +32,8 @@
import androidx.room.paging.util.queryItemCount
import androidx.room.withTransaction
import androidx.sqlite.db.SupportSQLiteQuery
-import kotlinx.coroutines.withContext
import java.util.concurrent.atomic.AtomicInteger
+import kotlinx.coroutines.withContext
/**
* An implementation of [PagingSource] to perform a LIMIT OFFSET query
diff --git a/room/room-paging/src/main/java/androidx/room/paging/util/RoomPagingUtil.kt b/room/room-paging/src/main/java/androidx/room/paging/util/RoomPagingUtil.kt
index 1722c11..e51ceb0 100644
--- a/room/room-paging/src/main/java/androidx/room/paging/util/RoomPagingUtil.kt
+++ b/room/room-paging/src/main/java/androidx/room/paging/util/RoomPagingUtil.kt
@@ -22,8 +22,8 @@
import androidx.annotation.RestrictTo
import androidx.paging.PagingSource
import androidx.paging.PagingSource.LoadParams
-import androidx.paging.PagingSource.LoadParams.Prepend
import androidx.paging.PagingSource.LoadParams.Append
+import androidx.paging.PagingSource.LoadParams.Prepend
import androidx.paging.PagingSource.LoadParams.Refresh
import androidx.paging.PagingSource.LoadResult
import androidx.paging.PagingState
diff --git a/room/room-runtime-lint/build.gradle b/room/room-runtime-lint/build.gradle
index ea43587..52cc23c 100644
--- a/room/room-runtime-lint/build.gradle
+++ b/room/room-runtime-lint/build.gradle
@@ -33,7 +33,7 @@
}
androidx {
- name = "Android Room-Runtime Lint Checks"
+ name = "Room-Runtime Lint Checks"
type = LibraryType.LINT
inceptionYear = "2022"
description = "Android Room-Runtime Lint Checks"
diff --git a/room/room-runtime/api/current.txt b/room/room-runtime/api/current.txt
index 316622e..7a3725f 100644
--- a/room/room-runtime/api/current.txt
+++ b/room/room-runtime/api/current.txt
@@ -35,8 +35,8 @@
}
public abstract static class InvalidationTracker.Observer {
- ctor public InvalidationTracker.Observer(String![] tables);
ctor protected InvalidationTracker.Observer(String firstTable, java.lang.String... rest);
+ ctor public InvalidationTracker.Observer(String![] tables);
method public abstract void onInvalidated(java.util.Set<java.lang.String> tables);
}
@@ -65,9 +65,9 @@
method @CallSuper public void init(androidx.room.DatabaseConfiguration configuration);
method protected void internalInitInvalidationTracker(androidx.sqlite.db.SupportSQLiteDatabase db);
method public boolean isOpen();
- method public android.database.Cursor query(String query, Object![]? args);
- method public android.database.Cursor query(androidx.sqlite.db.SupportSQLiteQuery query, optional android.os.CancellationSignal? signal);
method public android.database.Cursor query(androidx.sqlite.db.SupportSQLiteQuery query);
+ method public android.database.Cursor query(androidx.sqlite.db.SupportSQLiteQuery query, optional android.os.CancellationSignal? signal);
+ method public android.database.Cursor query(String query, Object![]? args);
method public void runInTransaction(Runnable body);
method public <V> V runInTransaction(java.util.concurrent.Callable<V> body);
method @Deprecated public void setTransactionSuccessful();
diff --git a/room/room-runtime/api/public_plus_experimental_current.txt b/room/room-runtime/api/public_plus_experimental_current.txt
index 5c47de6..85a503e 100644
--- a/room/room-runtime/api/public_plus_experimental_current.txt
+++ b/room/room-runtime/api/public_plus_experimental_current.txt
@@ -38,8 +38,8 @@
}
public abstract static class InvalidationTracker.Observer {
- ctor public InvalidationTracker.Observer(String![] tables);
ctor protected InvalidationTracker.Observer(String firstTable, java.lang.String... rest);
+ ctor public InvalidationTracker.Observer(String![] tables);
method public abstract void onInvalidated(java.util.Set<java.lang.String> tables);
}
@@ -73,9 +73,9 @@
method @CallSuper public void init(androidx.room.DatabaseConfiguration configuration);
method protected void internalInitInvalidationTracker(androidx.sqlite.db.SupportSQLiteDatabase db);
method public boolean isOpen();
- method public android.database.Cursor query(String query, Object![]? args);
- method public android.database.Cursor query(androidx.sqlite.db.SupportSQLiteQuery query, optional android.os.CancellationSignal? signal);
method public android.database.Cursor query(androidx.sqlite.db.SupportSQLiteQuery query);
+ method public android.database.Cursor query(androidx.sqlite.db.SupportSQLiteQuery query, optional android.os.CancellationSignal? signal);
+ method public android.database.Cursor query(String query, Object![]? args);
method public void runInTransaction(Runnable body);
method public <V> V runInTransaction(java.util.concurrent.Callable<V> body);
method @Deprecated public void setTransactionSuccessful();
diff --git a/room/room-runtime/api/restricted_current.txt b/room/room-runtime/api/restricted_current.txt
index 1126d91..b20f71c 100644
--- a/room/room-runtime/api/restricted_current.txt
+++ b/room/room-runtime/api/restricted_current.txt
@@ -2,8 +2,8 @@
package androidx.room {
public class DatabaseConfiguration {
- ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public DatabaseConfiguration(android.content.Context context, String? name, androidx.sqlite.db.SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory, androidx.room.RoomDatabase.MigrationContainer migrationContainer, java.util.List<? extends androidx.room.RoomDatabase.Callback>? callbacks, boolean allowMainThreadQueries, androidx.room.RoomDatabase.JournalMode journalMode, java.util.concurrent.Executor queryExecutor, java.util.concurrent.Executor transactionExecutor, android.content.Intent? multiInstanceInvalidationServiceIntent, boolean requireMigration, boolean allowDestructiveMigrationOnDowngrade, java.util.Set<java.lang.Integer>? migrationNotRequiredFrom, String? copyFromAssetPath, java.io.File? copyFromFile, java.util.concurrent.Callable<java.io.InputStream>? copyFromInputStream, androidx.room.RoomDatabase.PrepackagedDatabaseCallback? prepackagedDatabaseCallback, java.util.List<?> typeConverters, java.util.List<? extends androidx.room.migration.AutoMigrationSpec> autoMigrationSpecs);
ctor @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public DatabaseConfiguration(android.content.Context context, String? name, androidx.sqlite.db.SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory, androidx.room.RoomDatabase.MigrationContainer migrationContainer, java.util.List<? extends androidx.room.RoomDatabase.Callback>? callbacks, boolean allowMainThreadQueries, androidx.room.RoomDatabase.JournalMode journalMode, java.util.concurrent.Executor queryExecutor, boolean requireMigration, java.util.Set<java.lang.Integer>? migrationNotRequiredFrom);
+ ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public DatabaseConfiguration(android.content.Context context, String? name, androidx.sqlite.db.SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory, androidx.room.RoomDatabase.MigrationContainer migrationContainer, java.util.List<? extends androidx.room.RoomDatabase.Callback>? callbacks, boolean allowMainThreadQueries, androidx.room.RoomDatabase.JournalMode journalMode, java.util.concurrent.Executor queryExecutor, java.util.concurrent.Executor transactionExecutor, android.content.Intent? multiInstanceInvalidationServiceIntent, boolean requireMigration, boolean allowDestructiveMigrationOnDowngrade, java.util.Set<java.lang.Integer>? migrationNotRequiredFrom, String? copyFromAssetPath, java.io.File? copyFromFile, java.util.concurrent.Callable<java.io.InputStream>? copyFromInputStream, androidx.room.RoomDatabase.PrepackagedDatabaseCallback? prepackagedDatabaseCallback, java.util.List<?> typeConverters, java.util.List<? extends androidx.room.migration.AutoMigrationSpec> autoMigrationSpecs);
ctor @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public DatabaseConfiguration(android.content.Context context, String? name, androidx.sqlite.db.SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory, androidx.room.RoomDatabase.MigrationContainer migrationContainer, java.util.List<? extends androidx.room.RoomDatabase.Callback>? callbacks, boolean allowMainThreadQueries, androidx.room.RoomDatabase.JournalMode journalMode, java.util.concurrent.Executor queryExecutor, java.util.concurrent.Executor transactionExecutor, boolean multiInstanceInvalidation, boolean requireMigration, boolean allowDestructiveMigrationOnDowngrade, java.util.Set<java.lang.Integer>? migrationNotRequiredFrom);
ctor @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public DatabaseConfiguration(android.content.Context context, String? name, androidx.sqlite.db.SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory, androidx.room.RoomDatabase.MigrationContainer migrationContainer, java.util.List<? extends androidx.room.RoomDatabase.Callback>? callbacks, boolean allowMainThreadQueries, androidx.room.RoomDatabase.JournalMode journalMode, java.util.concurrent.Executor queryExecutor, java.util.concurrent.Executor transactionExecutor, boolean multiInstanceInvalidation, boolean requireMigration, boolean allowDestructiveMigrationOnDowngrade, java.util.Set<java.lang.Integer>? migrationNotRequiredFrom, String? copyFromAssetPath, java.io.File? copyFromFile);
ctor @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public DatabaseConfiguration(android.content.Context context, String? name, androidx.sqlite.db.SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory, androidx.room.RoomDatabase.MigrationContainer migrationContainer, java.util.List<? extends androidx.room.RoomDatabase.Callback>? callbacks, boolean allowMainThreadQueries, androidx.room.RoomDatabase.JournalMode journalMode, java.util.concurrent.Executor queryExecutor, java.util.concurrent.Executor transactionExecutor, boolean multiInstanceInvalidation, boolean requireMigration, boolean allowDestructiveMigrationOnDowngrade, java.util.Set<java.lang.Integer>? migrationNotRequiredFrom, String? copyFromAssetPath, java.io.File? copyFromFile, java.util.concurrent.Callable<java.io.InputStream>? copyFromInputStream);
@@ -44,39 +44,39 @@
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract class EntityInsertionAdapter<T> extends androidx.room.SharedSQLiteStatement {
ctor public EntityInsertionAdapter(androidx.room.RoomDatabase database);
method protected abstract void bind(androidx.sqlite.db.SupportSQLiteStatement statement, T entity);
+ method public final void insert(Iterable<? extends T> entities);
method public final void insert(T entity);
method public final void insert(T![] entities);
- method public final void insert(Iterable<? extends T> entities);
method public final long insertAndReturnId(T entity);
method public final long[] insertAndReturnIdsArray(java.util.Collection<? extends T> entities);
method public final long[] insertAndReturnIdsArray(T![] entities);
method public final Long![] insertAndReturnIdsArrayBox(java.util.Collection<? extends T> entities);
method public final Long![] insertAndReturnIdsArrayBox(T![] entities);
- method public final java.util.List<java.lang.Long> insertAndReturnIdsList(T![] entities);
method public final java.util.List<java.lang.Long> insertAndReturnIdsList(java.util.Collection<? extends T> entities);
+ method public final java.util.List<java.lang.Long> insertAndReturnIdsList(T![] entities);
}
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class EntityUpsertionAdapter<T> {
ctor public EntityUpsertionAdapter(androidx.room.EntityInsertionAdapter<T> insertionAdapter, androidx.room.EntityDeletionOrUpdateAdapter<T> updateAdapter);
+ method public void upsert(Iterable<? extends T> entities);
method public void upsert(T entity);
method public void upsert(T![] entities);
- method public void upsert(Iterable<? extends T> entities);
method public long upsertAndReturnId(T entity);
- method public long[] upsertAndReturnIdsArray(T![] entities);
method public long[] upsertAndReturnIdsArray(java.util.Collection<? extends T> entities);
- method public Long![] upsertAndReturnIdsArrayBox(T![] entities);
+ method public long[] upsertAndReturnIdsArray(T![] entities);
method public Long![] upsertAndReturnIdsArrayBox(java.util.Collection<? extends T> entities);
- method public java.util.List<java.lang.Long> upsertAndReturnIdsList(T![] entities);
+ method public Long![] upsertAndReturnIdsArrayBox(T![] entities);
method public java.util.List<java.lang.Long> upsertAndReturnIdsList(java.util.Collection<? extends T> entities);
+ method public java.util.List<java.lang.Long> upsertAndReturnIdsList(T![] entities);
}
public class InvalidationTracker {
- ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public InvalidationTracker(androidx.room.RoomDatabase database, java.util.Map<java.lang.String,java.lang.String> shadowTablesMap, java.util.Map<java.lang.String,java.util.Set<java.lang.String>> viewTables, java.lang.String... tableNames);
ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public InvalidationTracker(androidx.room.RoomDatabase database, java.lang.String... tableNames);
+ ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public InvalidationTracker(androidx.room.RoomDatabase database, java.util.Map<java.lang.String,java.lang.String> shadowTablesMap, java.util.Map<java.lang.String,java.util.Set<java.lang.String>> viewTables, java.lang.String... tableNames);
method @WorkerThread public void addObserver(androidx.room.InvalidationTracker.Observer observer);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void addWeakObserver(androidx.room.InvalidationTracker.Observer observer);
- method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public <T> androidx.lifecycle.LiveData<T> createLiveData(String![] tableNames, java.util.concurrent.Callable<T> computeFunction);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public <T> androidx.lifecycle.LiveData<T> createLiveData(String![] tableNames, boolean inTransaction, java.util.concurrent.Callable<T> computeFunction);
+ method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public <T> androidx.lifecycle.LiveData<T> createLiveData(String![] tableNames, java.util.concurrent.Callable<T> computeFunction);
method public void refreshVersionsAsync();
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @WorkerThread public void refreshVersionsSync();
method @WorkerThread public void removeObserver(androidx.room.InvalidationTracker.Observer observer);
@@ -87,8 +87,8 @@
}
public abstract static class InvalidationTracker.Observer {
- ctor public InvalidationTracker.Observer(String![] tables);
ctor protected InvalidationTracker.Observer(String firstTable, java.lang.String... rest);
+ ctor public InvalidationTracker.Observer(String![] tables);
method public abstract void onInvalidated(java.util.Set<java.lang.String> tables);
}
@@ -118,9 +118,9 @@
method @CallSuper public void init(androidx.room.DatabaseConfiguration configuration);
method protected void internalInitInvalidationTracker(androidx.sqlite.db.SupportSQLiteDatabase db);
method public boolean isOpen();
- method public android.database.Cursor query(String query, Object![]? args);
- method public android.database.Cursor query(androidx.sqlite.db.SupportSQLiteQuery query, optional android.os.CancellationSignal? signal);
method public android.database.Cursor query(androidx.sqlite.db.SupportSQLiteQuery query);
+ method public android.database.Cursor query(androidx.sqlite.db.SupportSQLiteQuery query, optional android.os.CancellationSignal? signal);
+ method public android.database.Cursor query(String query, Object![]? args);
method public void runInTransaction(Runnable body);
method public <V> V runInTransaction(java.util.concurrent.Callable<V> body);
method @Deprecated public void setTransactionSuccessful();
@@ -196,8 +196,8 @@
}
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class RoomOpenHelper extends androidx.sqlite.db.SupportSQLiteOpenHelper.Callback {
- ctor public RoomOpenHelper(androidx.room.DatabaseConfiguration configuration, androidx.room.RoomOpenHelper.Delegate delegate, String identityHash, String legacyHash);
ctor public RoomOpenHelper(androidx.room.DatabaseConfiguration configuration, androidx.room.RoomOpenHelper.Delegate delegate, String legacyHash);
+ ctor public RoomOpenHelper(androidx.room.DatabaseConfiguration configuration, androidx.room.RoomOpenHelper.Delegate delegate, String identityHash, String legacyHash);
method public void onCreate(androidx.sqlite.db.SupportSQLiteDatabase db);
method public void onUpgrade(androidx.sqlite.db.SupportSQLiteDatabase db, int oldVersion, int newVersion);
field public static final androidx.room.RoomOpenHelper.Companion Companion;
@@ -288,10 +288,10 @@
package androidx.room.paging {
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract class LimitOffsetDataSource<T> extends androidx.paging.PositionalDataSource<T> {
- ctor protected LimitOffsetDataSource(androidx.room.RoomDatabase, androidx.sqlite.db.SupportSQLiteQuery, boolean, java.lang.String!...);
- ctor protected LimitOffsetDataSource(androidx.room.RoomDatabase, androidx.sqlite.db.SupportSQLiteQuery, boolean, boolean, java.lang.String!...);
- ctor protected LimitOffsetDataSource(androidx.room.RoomDatabase, androidx.room.RoomSQLiteQuery, boolean, java.lang.String!...);
ctor protected LimitOffsetDataSource(androidx.room.RoomDatabase, androidx.room.RoomSQLiteQuery, boolean, boolean, java.lang.String!...);
+ ctor protected LimitOffsetDataSource(androidx.room.RoomDatabase, androidx.room.RoomSQLiteQuery, boolean, java.lang.String!...);
+ ctor protected LimitOffsetDataSource(androidx.room.RoomDatabase, androidx.sqlite.db.SupportSQLiteQuery, boolean, boolean, java.lang.String!...);
+ ctor protected LimitOffsetDataSource(androidx.room.RoomDatabase, androidx.sqlite.db.SupportSQLiteQuery, boolean, java.lang.String!...);
method protected abstract java.util.List<T!> convertRows(android.database.Cursor);
method public void loadInitial(androidx.paging.PositionalDataSource.LoadInitialParams, androidx.paging.PositionalDataSource.LoadInitialCallback<T!>);
method public void loadRange(androidx.paging.PositionalDataSource.LoadRangeParams, androidx.paging.PositionalDataSource.LoadRangeCallback<T!>);
@@ -324,8 +324,8 @@
}
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class FtsTableInfo {
- ctor public FtsTableInfo(String name, java.util.Set<java.lang.String> columns, java.util.Set<java.lang.String> options);
ctor public FtsTableInfo(String name, java.util.Set<java.lang.String> columns, String createSql);
+ ctor public FtsTableInfo(String name, java.util.Set<java.lang.String> columns, java.util.Set<java.lang.String> options);
method @VisibleForTesting public static java.util.Set<java.lang.String> parseOptions(String createStatement);
method public static androidx.room.util.FtsTableInfo read(androidx.sqlite.db.SupportSQLiteDatabase database, String tableName);
field public static final androidx.room.util.FtsTableInfo.Companion Companion;
@@ -354,8 +354,8 @@
}
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class TableInfo {
- ctor public TableInfo(String name, java.util.Map<java.lang.String,androidx.room.util.TableInfo.Column> columns, java.util.Set<androidx.room.util.TableInfo.ForeignKey> foreignKeys, optional java.util.Set<androidx.room.util.TableInfo.Index>? indices);
ctor public TableInfo(String name, java.util.Map<java.lang.String,androidx.room.util.TableInfo.Column> columns, java.util.Set<androidx.room.util.TableInfo.ForeignKey> foreignKeys);
+ ctor public TableInfo(String name, java.util.Map<java.lang.String,androidx.room.util.TableInfo.Column> columns, java.util.Set<androidx.room.util.TableInfo.ForeignKey> foreignKeys, optional java.util.Set<androidx.room.util.TableInfo.Index>? indices);
method public static androidx.room.util.TableInfo read(androidx.sqlite.db.SupportSQLiteDatabase database, String tableName);
field public static final int CREATED_FROM_DATABASE = 2; // 0x2
field public static final int CREATED_FROM_ENTITY = 1; // 0x1
@@ -368,8 +368,8 @@
}
public static final class TableInfo.Column {
- ctor public TableInfo.Column(String name, String type, boolean notNull, int primaryKeyPosition, String? defaultValue, int createdFrom);
ctor @Deprecated public TableInfo.Column(String name, String type, boolean notNull, int primaryKeyPosition);
+ ctor public TableInfo.Column(String name, String type, boolean notNull, int primaryKeyPosition, String? defaultValue, int createdFrom);
method @VisibleForTesting public static boolean defaultValueEquals(String current, String? other);
method public boolean isPrimaryKey();
property public final boolean isPrimaryKey;
@@ -401,8 +401,8 @@
}
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final class TableInfo.Index {
- ctor public TableInfo.Index(String name, boolean unique, java.util.List<java.lang.String> columns, java.util.List<java.lang.String> orders);
ctor @Deprecated public TableInfo.Index(String name, boolean unique, java.util.List<java.lang.String> columns);
+ ctor public TableInfo.Index(String name, boolean unique, java.util.List<java.lang.String> columns, java.util.List<java.lang.String> orders);
field public static final androidx.room.util.TableInfo.Index.Companion Companion;
field public static final String DEFAULT_PREFIX = "index_";
field public final java.util.List<java.lang.String> columns;
diff --git a/room/room-runtime/build.gradle b/room/room-runtime/build.gradle
index 5859784..f5a047d 100644
--- a/room/room-runtime/build.gradle
+++ b/room/room-runtime/build.gradle
@@ -73,7 +73,7 @@
}
androidx {
- name = "Android Room-Runtime"
+ name = "Room-Runtime"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2017"
description = "Android Room-Runtime"
diff --git a/room/room-runtime/src/androidTest/java/androidx/room/AutoCloserTest.kt b/room/room-runtime/src/androidTest/java/androidx/room/AutoCloserTest.kt
index ceaacd1..6a3fc94 100644
--- a/room/room-runtime/src/androidTest/java/androidx/room/AutoCloserTest.kt
+++ b/room/room-runtime/src/androidTest/java/androidx/room/AutoCloserTest.kt
@@ -27,14 +27,14 @@
import androidx.test.filters.MediumTest
import androidx.testutils.assertThrows
import com.google.common.truth.Truth.assertThat
+import java.io.IOException
+import java.util.concurrent.TimeUnit
import org.junit.After
import org.junit.Before
import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.io.IOException
-import java.util.concurrent.TimeUnit
@RunWith(AndroidJUnit4::class)
@MediumTest
diff --git a/room/room-runtime/src/androidTest/java/androidx/room/AutoClosingRoomOpenHelperFactoryTest.kt b/room/room-runtime/src/androidTest/java/androidx/room/AutoClosingRoomOpenHelperFactoryTest.kt
index 5b2fc1d..2efa582 100644
--- a/room/room-runtime/src/androidTest/java/androidx/room/AutoClosingRoomOpenHelperFactoryTest.kt
+++ b/room/room-runtime/src/androidTest/java/androidx/room/AutoClosingRoomOpenHelperFactoryTest.kt
@@ -24,13 +24,13 @@
import androidx.sqlite.db.SupportSQLiteOpenHelper
import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory
import androidx.test.core.app.ApplicationProvider
+import java.util.concurrent.Executors
+import java.util.concurrent.TimeUnit
+import java.util.concurrent.atomic.AtomicInteger
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
-import java.util.concurrent.Executors
-import java.util.concurrent.TimeUnit
-import java.util.concurrent.atomic.AtomicInteger
public class AutoClosingRoomOpenHelperFactoryTest {
private val DB_NAME = "name"
diff --git a/room/room-runtime/src/androidTest/java/androidx/room/AutoClosingRoomOpenHelperTest.kt b/room/room-runtime/src/androidTest/java/androidx/room/AutoClosingRoomOpenHelperTest.kt
index d8f36a4a..0a22c62 100644
--- a/room/room-runtime/src/androidTest/java/androidx/room/AutoClosingRoomOpenHelperTest.kt
+++ b/room/room-runtime/src/androidTest/java/androidx/room/AutoClosingRoomOpenHelperTest.kt
@@ -29,12 +29,12 @@
import androidx.test.filters.SdkSuppress
import androidx.testutils.assertThrows
import com.google.common.truth.Truth.assertThat
-import org.junit.Before
-import org.junit.Ignore
-import org.junit.Test
import java.io.IOException
import java.util.concurrent.Executors
import java.util.concurrent.TimeUnit
+import org.junit.Before
+import org.junit.Ignore
+import org.junit.Test
class AutoClosingRoomOpenHelperTest {
diff --git a/room/room-runtime/src/main/java/androidx/room/EntityUpsertionAdapter.kt b/room/room-runtime/src/main/java/androidx/room/EntityUpsertionAdapter.kt
index 89fb70a..b1c65a8 100644
--- a/room/room-runtime/src/main/java/androidx/room/EntityUpsertionAdapter.kt
+++ b/room/room-runtime/src/main/java/androidx/room/EntityUpsertionAdapter.kt
@@ -17,8 +17,8 @@
package androidx.room
import android.database.sqlite.SQLiteConstraintException
-import androidx.annotation.RestrictTo
import android.os.Build
+import androidx.annotation.RestrictTo
/**
* The ErrorCode defined by SQLite Library for SQLITE_CONSTRAINT_PRIMARYKEY error
diff --git a/room/room-runtime/src/main/java/androidx/room/MultiInstanceInvalidationClient.kt b/room/room-runtime/src/main/java/androidx/room/MultiInstanceInvalidationClient.kt
index 0659f92..bbf6f8e 100644
--- a/room/room-runtime/src/main/java/androidx/room/MultiInstanceInvalidationClient.kt
+++ b/room/room-runtime/src/main/java/androidx/room/MultiInstanceInvalidationClient.kt
@@ -15,10 +15,10 @@
*/
package androidx.room
-import android.content.Intent
-import android.content.ServiceConnection
import android.content.ComponentName
import android.content.Context
+import android.content.Intent
+import android.content.ServiceConnection
import android.os.IBinder
import android.os.RemoteException
import android.util.Log
diff --git a/room/room-runtime/src/main/java/androidx/room/MultiInstanceInvalidationService.kt b/room/room-runtime/src/main/java/androidx/room/MultiInstanceInvalidationService.kt
index 761541d..06ecd35 100644
--- a/room/room-runtime/src/main/java/androidx/room/MultiInstanceInvalidationService.kt
+++ b/room/room-runtime/src/main/java/androidx/room/MultiInstanceInvalidationService.kt
@@ -16,9 +16,9 @@
package androidx.room
import android.app.Service
-import android.os.RemoteCallbackList
import android.content.Intent
import android.os.IBinder
+import android.os.RemoteCallbackList
import android.os.RemoteException
import android.util.Log
import androidx.room.Room.LOG_TAG
diff --git a/room/room-runtime/src/main/java/androidx/room/QueryInterceptorDatabase.kt b/room/room-runtime/src/main/java/androidx/room/QueryInterceptorDatabase.kt
index 4fb5661..d6a4107 100644
--- a/room/room-runtime/src/main/java/androidx/room/QueryInterceptorDatabase.kt
+++ b/room/room-runtime/src/main/java/androidx/room/QueryInterceptorDatabase.kt
@@ -19,7 +19,6 @@
import android.database.Cursor
import android.database.sqlite.SQLiteTransactionListener
import android.os.CancellationSignal
-
import androidx.sqlite.db.SupportSQLiteDatabase
import androidx.sqlite.db.SupportSQLiteQuery
import androidx.sqlite.db.SupportSQLiteStatement
diff --git a/room/room-runtime/src/main/java/androidx/room/QueryInterceptorOpenHelper.kt b/room/room-runtime/src/main/java/androidx/room/QueryInterceptorOpenHelper.kt
index 4f36a1f..c15672f 100644
--- a/room/room-runtime/src/main/java/androidx/room/QueryInterceptorOpenHelper.kt
+++ b/room/room-runtime/src/main/java/androidx/room/QueryInterceptorOpenHelper.kt
@@ -18,7 +18,6 @@
import androidx.sqlite.db.SupportSQLiteDatabase
import androidx.sqlite.db.SupportSQLiteOpenHelper
-
import java.util.concurrent.Executor
internal class QueryInterceptorOpenHelper(
diff --git a/room/room-runtime/src/main/java/androidx/room/QueryInterceptorOpenHelperFactory.kt b/room/room-runtime/src/main/java/androidx/room/QueryInterceptorOpenHelperFactory.kt
index d0fab60..1d86465 100644
--- a/room/room-runtime/src/main/java/androidx/room/QueryInterceptorOpenHelperFactory.kt
+++ b/room/room-runtime/src/main/java/androidx/room/QueryInterceptorOpenHelperFactory.kt
@@ -17,7 +17,6 @@
package androidx.room
import androidx.sqlite.db.SupportSQLiteOpenHelper
-
import java.util.concurrent.Executor
/**
diff --git a/room/room-runtime/src/main/java/androidx/room/QueryInterceptorStatement.kt b/room/room-runtime/src/main/java/androidx/room/QueryInterceptorStatement.kt
index 2ec9508..50cf02c 100644
--- a/room/room-runtime/src/main/java/androidx/room/QueryInterceptorStatement.kt
+++ b/room/room-runtime/src/main/java/androidx/room/QueryInterceptorStatement.kt
@@ -17,7 +17,6 @@
package androidx.room
import androidx.sqlite.db.SupportSQLiteStatement
-
import java.util.concurrent.Executor
/**
diff --git a/room/room-runtime/src/main/java/androidx/room/SQLiteCopyOpenHelper.kt b/room/room-runtime/src/main/java/androidx/room/SQLiteCopyOpenHelper.kt
index dceaab0..37d3ebd 100644
--- a/room/room-runtime/src/main/java/androidx/room/SQLiteCopyOpenHelper.kt
+++ b/room/room-runtime/src/main/java/androidx/room/SQLiteCopyOpenHelper.kt
@@ -20,8 +20,8 @@
import android.util.Log
import androidx.annotation.RequiresApi
import androidx.room.Room.LOG_TAG
-import androidx.room.util.readVersion
import androidx.room.util.copy
+import androidx.room.util.readVersion
import androidx.sqlite.db.SupportSQLiteDatabase
import androidx.sqlite.db.SupportSQLiteOpenHelper
import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory
diff --git a/room/room-runtime/src/test/java/androidx/room/InvalidationLiveDataContainerTest.kt b/room/room-runtime/src/test/java/androidx/room/InvalidationLiveDataContainerTest.kt
index 62d6ecd..b63bfa0 100644
--- a/room/room-runtime/src/test/java/androidx/room/InvalidationLiveDataContainerTest.kt
+++ b/room/room-runtime/src/test/java/androidx/room/InvalidationLiveDataContainerTest.kt
@@ -17,6 +17,7 @@
package androidx.room
import androidx.lifecycle.LiveData
+import java.util.concurrent.Callable
import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Before
@@ -24,7 +25,6 @@
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
import org.mockito.Mockito
-import java.util.concurrent.Callable
@RunWith(JUnit4::class)
class InvalidationLiveDataContainerTest {
diff --git a/room/room-runtime/src/test/java/androidx/room/SQLiteCopyOpenHelperTest.kt b/room/room-runtime/src/test/java/androidx/room/SQLiteCopyOpenHelperTest.kt
index b1b2124..be50aa4 100644
--- a/room/room-runtime/src/test/java/androidx/room/SQLiteCopyOpenHelperTest.kt
+++ b/room/room-runtime/src/test/java/androidx/room/SQLiteCopyOpenHelperTest.kt
@@ -22,19 +22,6 @@
import androidx.annotation.RequiresApi
import androidx.sqlite.db.SupportSQLiteDatabase
import androidx.sqlite.db.SupportSQLiteOpenHelper
-import org.junit.Assert.assertEquals
-import org.junit.Assert.assertSame
-import org.junit.Ignore
-import org.junit.Rule
-import org.junit.Test
-import org.junit.rules.TemporaryFolder
-import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
-import org.mockito.Mockito.`when`
-import org.mockito.Mockito.mock
-import org.mockito.Mockito.times
-import org.mockito.Mockito.verify
-import org.mockito.Mockito.verifyNoMoreInteractions
import java.io.File
import java.io.FileInputStream
import java.io.IOException
@@ -45,6 +32,19 @@
import java.util.concurrent.TimeoutException
import java.util.concurrent.atomic.AtomicInteger
import kotlin.concurrent.thread
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertSame
+import org.junit.Ignore
+import org.junit.Rule
+import org.junit.Test
+import org.junit.rules.TemporaryFolder
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import org.mockito.Mockito.mock
+import org.mockito.Mockito.times
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.verifyNoMoreInteractions
+import org.mockito.Mockito.`when`
@RunWith(JUnit4::class)
class SQLiteCopyOpenHelperTest {
diff --git a/room/room-runtime/src/test/java/androidx/room/TransactionExecutorTest.kt b/room/room-runtime/src/test/java/androidx/room/TransactionExecutorTest.kt
index edda059..9163232 100644
--- a/room/room-runtime/src/test/java/androidx/room/TransactionExecutorTest.kt
+++ b/room/room-runtime/src/test/java/androidx/room/TransactionExecutorTest.kt
@@ -17,13 +17,13 @@
package androidx.room
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.Executors
+import java.util.concurrent.TimeUnit
import org.junit.After
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.Executors
-import java.util.concurrent.TimeUnit
@RunWith(JUnit4::class)
class TransactionExecutorTest {
diff --git a/room/room-runtime/src/test/java/androidx/room/util/UUIDUtilTest.kt b/room/room-runtime/src/test/java/androidx/room/util/UUIDUtilTest.kt
index 19ec25d..aafd7cd 100644
--- a/room/room-runtime/src/test/java/androidx/room/util/UUIDUtilTest.kt
+++ b/room/room-runtime/src/test/java/androidx/room/util/UUIDUtilTest.kt
@@ -17,12 +17,12 @@
package androidx.room.util
import com.google.common.truth.Truth.assertThat
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
import java.nio.ByteBuffer
import java.util.UUID
import kotlin.random.Random
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
@RunWith(JUnit4::class)
class UUIDUtilTest {
diff --git a/room/room-rxjava2/api/restricted_current.txt b/room/room-rxjava2/api/restricted_current.txt
index 090c028..8513625b 100644
--- a/room/room-rxjava2/api/restricted_current.txt
+++ b/room/room-rxjava2/api/restricted_current.txt
@@ -7,12 +7,12 @@
public class RxRoom {
ctor @Deprecated public RxRoom();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static <T> io.reactivex.Flowable<T!>! createFlowable(androidx.room.RoomDatabase!, boolean, String![]!, java.util.concurrent.Callable<T!>!);
method public static io.reactivex.Flowable<java.lang.Object!>! createFlowable(androidx.room.RoomDatabase!, java.lang.String!...);
method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static <T> io.reactivex.Flowable<T!>! createFlowable(androidx.room.RoomDatabase!, String![]!, java.util.concurrent.Callable<T!>!);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static <T> io.reactivex.Flowable<T!>! createFlowable(androidx.room.RoomDatabase!, boolean, String![]!, java.util.concurrent.Callable<T!>!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static <T> io.reactivex.Observable<T!>! createObservable(androidx.room.RoomDatabase!, boolean, String![]!, java.util.concurrent.Callable<T!>!);
method public static io.reactivex.Observable<java.lang.Object!>! createObservable(androidx.room.RoomDatabase!, java.lang.String!...);
method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static <T> io.reactivex.Observable<T!>! createObservable(androidx.room.RoomDatabase!, String![]!, java.util.concurrent.Callable<T!>!);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static <T> io.reactivex.Observable<T!>! createObservable(androidx.room.RoomDatabase!, boolean, String![]!, java.util.concurrent.Callable<T!>!);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static <T> io.reactivex.Single<T!>! createSingle(java.util.concurrent.Callable<? extends T>!);
field public static final Object! NOTHING;
}
diff --git a/room/room-rxjava2/build.gradle b/room/room-rxjava2/build.gradle
index 6cc2e1e..c802802 100644
--- a/room/room-rxjava2/build.gradle
+++ b/room/room-rxjava2/build.gradle
@@ -39,7 +39,7 @@
}
androidx {
- name = "Android Room RXJava2"
+ name = "Room RXJava2"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2017"
description = "Android Room RXJava2"
diff --git a/room/room-rxjava2/src/test/java/androidx/room/RxRoomTest.kt b/room/room-rxjava2/src/test/java/androidx/room/RxRoomTest.kt
index bea3aa5..a5d9af9 100644
--- a/room/room-rxjava2/src/test/java/androidx/room/RxRoomTest.kt
+++ b/room/room-rxjava2/src/test/java/androidx/room/RxRoomTest.kt
@@ -17,25 +17,24 @@
import androidx.arch.core.executor.ArchTaskExecutor
import androidx.arch.core.executor.testing.CountingTaskExecutorRule
+import com.google.common.truth.Truth.assertThat
import io.reactivex.functions.Consumer
import io.reactivex.observers.TestObserver
import io.reactivex.subscribers.TestSubscriber
-
import java.util.concurrent.TimeUnit
import java.util.concurrent.atomic.AtomicReference
-import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
import org.mockito.kotlin.any
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.times
-import org.mockito.kotlin.whenever
import org.mockito.kotlin.doAnswer
-import org.mockito.kotlin.verify
+import org.mockito.kotlin.mock
import org.mockito.kotlin.never
+import org.mockito.kotlin.times
+import org.mockito.kotlin.verify
+import org.mockito.kotlin.whenever
@RunWith(JUnit4::class)
class RxRoomTest {
diff --git a/room/room-rxjava3/api/restricted_current.txt b/room/room-rxjava3/api/restricted_current.txt
index 8e9be92..6ec5079 100644
--- a/room/room-rxjava3/api/restricted_current.txt
+++ b/room/room-rxjava3/api/restricted_current.txt
@@ -6,10 +6,10 @@
}
public final class RxRoom {
- method public static io.reactivex.rxjava3.core.Flowable<java.lang.Object!> createFlowable(androidx.room.RoomDatabase, java.lang.String!...);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static <T> io.reactivex.rxjava3.core.Flowable<T!> createFlowable(androidx.room.RoomDatabase, boolean, String![], java.util.concurrent.Callable<T!>);
- method public static io.reactivex.rxjava3.core.Observable<java.lang.Object!> createObservable(androidx.room.RoomDatabase, java.lang.String!...);
+ method public static io.reactivex.rxjava3.core.Flowable<java.lang.Object!> createFlowable(androidx.room.RoomDatabase, java.lang.String!...);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static <T> io.reactivex.rxjava3.core.Observable<T!> createObservable(androidx.room.RoomDatabase, boolean, String![], java.util.concurrent.Callable<T!>);
+ method public static io.reactivex.rxjava3.core.Observable<java.lang.Object!> createObservable(androidx.room.RoomDatabase, java.lang.String!...);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static <T> io.reactivex.rxjava3.core.Single<T!> createSingle(java.util.concurrent.Callable<? extends T>);
field public static final Object NOTHING;
}
diff --git a/room/room-rxjava3/build.gradle b/room/room-rxjava3/build.gradle
index fee4abe..3533c33 100644
--- a/room/room-rxjava3/build.gradle
+++ b/room/room-rxjava3/build.gradle
@@ -40,7 +40,7 @@
}
androidx {
- name = "Android Room RXJava3"
+ name = "Room RXJava3"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2020"
description = "Android Room RXJava3"
diff --git a/room/room-rxjava3/src/test/java/androidx/room/rxjava3/RxRoomTest.kt b/room/room-rxjava3/src/test/java/androidx/room/rxjava3/RxRoomTest.kt
index cb5b547..e63839a 100644
--- a/room/room-rxjava3/src/test/java/androidx/room/rxjava3/RxRoomTest.kt
+++ b/room/room-rxjava3/src/test/java/androidx/room/rxjava3/RxRoomTest.kt
@@ -30,14 +30,14 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import org.mockito.kotlin.any
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.times
-import org.mockito.kotlin.whenever
-import org.mockito.kotlin.doAnswer
-import org.mockito.kotlin.verify
-import org.mockito.kotlin.never
import org.mockito.invocation.InvocationOnMock
+import org.mockito.kotlin.any
+import org.mockito.kotlin.doAnswer
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.never
+import org.mockito.kotlin.times
+import org.mockito.kotlin.verify
+import org.mockito.kotlin.whenever
@RunWith(JUnit4::class)
class RxRoomTest {
diff --git a/room/room-testing/api/current.txt b/room/room-testing/api/current.txt
index 7138ac0..482f988 100644
--- a/room/room-testing/api/current.txt
+++ b/room/room-testing/api/current.txt
@@ -2,13 +2,13 @@
package androidx.room.testing {
public class MigrationTestHelper extends org.junit.rules.TestWatcher {
- ctor @Deprecated public MigrationTestHelper(android.app.Instrumentation instrumentation, String assetsFolder, optional androidx.sqlite.db.SupportSQLiteOpenHelper.Factory openFactory);
- ctor @Deprecated public MigrationTestHelper(android.app.Instrumentation instrumentation, String assetsFolder);
ctor public MigrationTestHelper(android.app.Instrumentation instrumentation, Class<? extends androidx.room.RoomDatabase> databaseClass);
- ctor public MigrationTestHelper(android.app.Instrumentation instrumentation, Class<? extends androidx.room.RoomDatabase> databaseClass, java.util.List<? extends androidx.room.migration.AutoMigrationSpec> specs, optional androidx.sqlite.db.SupportSQLiteOpenHelper.Factory openFactory);
ctor public MigrationTestHelper(android.app.Instrumentation instrumentation, Class<? extends androidx.room.RoomDatabase> databaseClass, java.util.List<? extends androidx.room.migration.AutoMigrationSpec> specs);
- method public void closeWhenFinished(androidx.sqlite.db.SupportSQLiteDatabase db);
+ ctor public MigrationTestHelper(android.app.Instrumentation instrumentation, Class<? extends androidx.room.RoomDatabase> databaseClass, java.util.List<? extends androidx.room.migration.AutoMigrationSpec> specs, optional androidx.sqlite.db.SupportSQLiteOpenHelper.Factory openFactory);
+ ctor @Deprecated public MigrationTestHelper(android.app.Instrumentation instrumentation, String assetsFolder);
+ ctor @Deprecated public MigrationTestHelper(android.app.Instrumentation instrumentation, String assetsFolder, optional androidx.sqlite.db.SupportSQLiteOpenHelper.Factory openFactory);
method public void closeWhenFinished(androidx.room.RoomDatabase db);
+ method public void closeWhenFinished(androidx.sqlite.db.SupportSQLiteDatabase db);
method @kotlin.jvm.Throws(exceptionClasses=IOException::class) public androidx.sqlite.db.SupportSQLiteDatabase createDatabase(String name, int version) throws java.io.IOException;
method public androidx.sqlite.db.SupportSQLiteDatabase runMigrationsAndValidate(String name, int version, boolean validateDroppedTables, androidx.room.migration.Migration... migrations);
}
diff --git a/room/room-testing/api/public_plus_experimental_current.txt b/room/room-testing/api/public_plus_experimental_current.txt
index 7138ac0..482f988 100644
--- a/room/room-testing/api/public_plus_experimental_current.txt
+++ b/room/room-testing/api/public_plus_experimental_current.txt
@@ -2,13 +2,13 @@
package androidx.room.testing {
public class MigrationTestHelper extends org.junit.rules.TestWatcher {
- ctor @Deprecated public MigrationTestHelper(android.app.Instrumentation instrumentation, String assetsFolder, optional androidx.sqlite.db.SupportSQLiteOpenHelper.Factory openFactory);
- ctor @Deprecated public MigrationTestHelper(android.app.Instrumentation instrumentation, String assetsFolder);
ctor public MigrationTestHelper(android.app.Instrumentation instrumentation, Class<? extends androidx.room.RoomDatabase> databaseClass);
- ctor public MigrationTestHelper(android.app.Instrumentation instrumentation, Class<? extends androidx.room.RoomDatabase> databaseClass, java.util.List<? extends androidx.room.migration.AutoMigrationSpec> specs, optional androidx.sqlite.db.SupportSQLiteOpenHelper.Factory openFactory);
ctor public MigrationTestHelper(android.app.Instrumentation instrumentation, Class<? extends androidx.room.RoomDatabase> databaseClass, java.util.List<? extends androidx.room.migration.AutoMigrationSpec> specs);
- method public void closeWhenFinished(androidx.sqlite.db.SupportSQLiteDatabase db);
+ ctor public MigrationTestHelper(android.app.Instrumentation instrumentation, Class<? extends androidx.room.RoomDatabase> databaseClass, java.util.List<? extends androidx.room.migration.AutoMigrationSpec> specs, optional androidx.sqlite.db.SupportSQLiteOpenHelper.Factory openFactory);
+ ctor @Deprecated public MigrationTestHelper(android.app.Instrumentation instrumentation, String assetsFolder);
+ ctor @Deprecated public MigrationTestHelper(android.app.Instrumentation instrumentation, String assetsFolder, optional androidx.sqlite.db.SupportSQLiteOpenHelper.Factory openFactory);
method public void closeWhenFinished(androidx.room.RoomDatabase db);
+ method public void closeWhenFinished(androidx.sqlite.db.SupportSQLiteDatabase db);
method @kotlin.jvm.Throws(exceptionClasses=IOException::class) public androidx.sqlite.db.SupportSQLiteDatabase createDatabase(String name, int version) throws java.io.IOException;
method public androidx.sqlite.db.SupportSQLiteDatabase runMigrationsAndValidate(String name, int version, boolean validateDroppedTables, androidx.room.migration.Migration... migrations);
}
diff --git a/room/room-testing/api/restricted_current.txt b/room/room-testing/api/restricted_current.txt
index 7138ac0..482f988 100644
--- a/room/room-testing/api/restricted_current.txt
+++ b/room/room-testing/api/restricted_current.txt
@@ -2,13 +2,13 @@
package androidx.room.testing {
public class MigrationTestHelper extends org.junit.rules.TestWatcher {
- ctor @Deprecated public MigrationTestHelper(android.app.Instrumentation instrumentation, String assetsFolder, optional androidx.sqlite.db.SupportSQLiteOpenHelper.Factory openFactory);
- ctor @Deprecated public MigrationTestHelper(android.app.Instrumentation instrumentation, String assetsFolder);
ctor public MigrationTestHelper(android.app.Instrumentation instrumentation, Class<? extends androidx.room.RoomDatabase> databaseClass);
- ctor public MigrationTestHelper(android.app.Instrumentation instrumentation, Class<? extends androidx.room.RoomDatabase> databaseClass, java.util.List<? extends androidx.room.migration.AutoMigrationSpec> specs, optional androidx.sqlite.db.SupportSQLiteOpenHelper.Factory openFactory);
ctor public MigrationTestHelper(android.app.Instrumentation instrumentation, Class<? extends androidx.room.RoomDatabase> databaseClass, java.util.List<? extends androidx.room.migration.AutoMigrationSpec> specs);
- method public void closeWhenFinished(androidx.sqlite.db.SupportSQLiteDatabase db);
+ ctor public MigrationTestHelper(android.app.Instrumentation instrumentation, Class<? extends androidx.room.RoomDatabase> databaseClass, java.util.List<? extends androidx.room.migration.AutoMigrationSpec> specs, optional androidx.sqlite.db.SupportSQLiteOpenHelper.Factory openFactory);
+ ctor @Deprecated public MigrationTestHelper(android.app.Instrumentation instrumentation, String assetsFolder);
+ ctor @Deprecated public MigrationTestHelper(android.app.Instrumentation instrumentation, String assetsFolder, optional androidx.sqlite.db.SupportSQLiteOpenHelper.Factory openFactory);
method public void closeWhenFinished(androidx.room.RoomDatabase db);
+ method public void closeWhenFinished(androidx.sqlite.db.SupportSQLiteDatabase db);
method @kotlin.jvm.Throws(exceptionClasses=IOException::class) public androidx.sqlite.db.SupportSQLiteDatabase createDatabase(String name, int version) throws java.io.IOException;
method public androidx.sqlite.db.SupportSQLiteDatabase runMigrationsAndValidate(String name, int version, boolean validateDroppedTables, androidx.room.migration.Migration... migrations);
}
diff --git a/room/room-testing/build.gradle b/room/room-testing/build.gradle
index 1471e49..e8970dc 100644
--- a/room/room-testing/build.gradle
+++ b/room/room-testing/build.gradle
@@ -54,7 +54,7 @@
}
androidx {
- name = "Android Room Testing"
+ name = "Room Testing"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2017"
description = "Android Room Testing"
diff --git a/samples/AndroidXDemos/src/main/java/com/example/androidx/widget/RecyclerViewCoordinatorLayoutAppBarActivity.kt b/samples/AndroidXDemos/src/main/java/com/example/androidx/widget/RecyclerViewCoordinatorLayoutAppBarActivity.kt
index 163843d..ce8e561 100644
--- a/samples/AndroidXDemos/src/main/java/com/example/androidx/widget/RecyclerViewCoordinatorLayoutAppBarActivity.kt
+++ b/samples/AndroidXDemos/src/main/java/com/example/androidx/widget/RecyclerViewCoordinatorLayoutAppBarActivity.kt
@@ -21,11 +21,9 @@
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
-
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
-
import com.example.androidx.R
class RecyclerViewCoordinatorLayoutAppBarActivity : AppCompatActivity() {
diff --git a/savedstate/savedstate/src/main/java/androidx/savedstate/SavedStateRegistryOwner.kt b/savedstate/savedstate/src/main/java/androidx/savedstate/SavedStateRegistryOwner.kt
index dc63d7f..4d8667a 100644
--- a/savedstate/savedstate/src/main/java/androidx/savedstate/SavedStateRegistryOwner.kt
+++ b/savedstate/savedstate/src/main/java/androidx/savedstate/SavedStateRegistryOwner.kt
@@ -16,8 +16,8 @@
package androidx.savedstate
import androidx.lifecycle.Lifecycle
-import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.LifecycleObserver
+import androidx.lifecycle.LifecycleOwner
/**
* A scope that owns [SavedStateRegistry]
*
diff --git a/security/security-app-authenticator-testing/build.gradle b/security/security-app-authenticator-testing/build.gradle
index 7f3ed40..e0e8856 100644
--- a/security/security-app-authenticator-testing/build.gradle
+++ b/security/security-app-authenticator-testing/build.gradle
@@ -38,7 +38,7 @@
}
androidx {
- name = "Android Security App Package Authenticator Testing"
+ name = "Security App Authenticator Testing Extensions"
type = LibraryType.PUBLISHED_TEST_LIBRARY
mavenVersion = LibraryVersions.SECURITY_APP_AUTHENTICATOR_TESTING
inceptionYear = "2021"
diff --git a/security/security-app-authenticator/build.gradle b/security/security-app-authenticator/build.gradle
index cb80735..de6d420 100644
--- a/security/security-app-authenticator/build.gradle
+++ b/security/security-app-authenticator/build.gradle
@@ -48,7 +48,7 @@
}
androidx {
- name = "Android Security App Package Authenitcator Library"
+ name = "Security App Authenitcator"
type = LibraryType.PUBLISHED_LIBRARY
mavenVersion = LibraryVersions.SECURITY_APP_AUTHENTICATOR
inceptionYear = "2020"
diff --git a/security/security-biometric/build.gradle b/security/security-biometric/build.gradle
index c8204ad..c48792f 100644
--- a/security/security-biometric/build.gradle
+++ b/security/security-biometric/build.gradle
@@ -43,7 +43,7 @@
}
androidx {
- name = "AndroidX Security Biometric"
+ name = "Security Biometric"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.SECURITY_BIOMETRIC
inceptionYear = "2020"
diff --git a/security/security-crypto-ktx/build.gradle b/security/security-crypto-ktx/build.gradle
index adf0c8b..6717a1f 100644
--- a/security/security-crypto-ktx/build.gradle
+++ b/security/security-crypto-ktx/build.gradle
@@ -42,7 +42,7 @@
}
androidx {
- name = "AndroidX Security Kotlin Extensions"
+ name = "Security Kotlin Extensions"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.SECURITY
inceptionYear = "2020"
diff --git a/security/security-crypto-ktx/src/androidTest/java/androidx/security/crypto/KtxTests.kt b/security/security-crypto-ktx/src/androidTest/java/androidx/security/crypto/KtxTests.kt
index d91fc08..5e2e079 100644
--- a/security/security-crypto-ktx/src/androidTest/java/androidx/security/crypto/KtxTests.kt
+++ b/security/security-crypto-ktx/src/androidTest/java/androidx/security/crypto/KtxTests.kt
@@ -20,13 +20,13 @@
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
+import java.io.File
+import java.nio.charset.StandardCharsets
+import java.security.KeyStore
import org.junit.Assert
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import java.io.File
-import java.nio.charset.StandardCharsets
-import java.security.KeyStore
private const val PREFS_FILE = "test_shared_prefs"
diff --git a/security/security-crypto/api/current.txt b/security/security-crypto/api/current.txt
index 5ac2ea1..8e8b71a 100644
--- a/security/security-crypto/api/current.txt
+++ b/security/security-crypto/api/current.txt
@@ -7,8 +7,8 @@
}
public static final class EncryptedFile.Builder {
- ctor @Deprecated public EncryptedFile.Builder(java.io.File, android.content.Context, String, androidx.security.crypto.EncryptedFile.FileEncryptionScheme);
ctor public EncryptedFile.Builder(android.content.Context, java.io.File, androidx.security.crypto.MasterKey, androidx.security.crypto.EncryptedFile.FileEncryptionScheme);
+ ctor @Deprecated public EncryptedFile.Builder(java.io.File, android.content.Context, String, androidx.security.crypto.EncryptedFile.FileEncryptionScheme);
method public androidx.security.crypto.EncryptedFile build() throws java.security.GeneralSecurityException, java.io.IOException;
method public androidx.security.crypto.EncryptedFile.Builder setKeysetAlias(String);
method public androidx.security.crypto.EncryptedFile.Builder setKeysetPrefName(String);
diff --git a/security/security-crypto/api/public_plus_experimental_current.txt b/security/security-crypto/api/public_plus_experimental_current.txt
index 5ac2ea1..8e8b71a 100644
--- a/security/security-crypto/api/public_plus_experimental_current.txt
+++ b/security/security-crypto/api/public_plus_experimental_current.txt
@@ -7,8 +7,8 @@
}
public static final class EncryptedFile.Builder {
- ctor @Deprecated public EncryptedFile.Builder(java.io.File, android.content.Context, String, androidx.security.crypto.EncryptedFile.FileEncryptionScheme);
ctor public EncryptedFile.Builder(android.content.Context, java.io.File, androidx.security.crypto.MasterKey, androidx.security.crypto.EncryptedFile.FileEncryptionScheme);
+ ctor @Deprecated public EncryptedFile.Builder(java.io.File, android.content.Context, String, androidx.security.crypto.EncryptedFile.FileEncryptionScheme);
method public androidx.security.crypto.EncryptedFile build() throws java.security.GeneralSecurityException, java.io.IOException;
method public androidx.security.crypto.EncryptedFile.Builder setKeysetAlias(String);
method public androidx.security.crypto.EncryptedFile.Builder setKeysetPrefName(String);
diff --git a/security/security-crypto/api/restricted_current.txt b/security/security-crypto/api/restricted_current.txt
index 5ac2ea1..8e8b71a 100644
--- a/security/security-crypto/api/restricted_current.txt
+++ b/security/security-crypto/api/restricted_current.txt
@@ -7,8 +7,8 @@
}
public static final class EncryptedFile.Builder {
- ctor @Deprecated public EncryptedFile.Builder(java.io.File, android.content.Context, String, androidx.security.crypto.EncryptedFile.FileEncryptionScheme);
ctor public EncryptedFile.Builder(android.content.Context, java.io.File, androidx.security.crypto.MasterKey, androidx.security.crypto.EncryptedFile.FileEncryptionScheme);
+ ctor @Deprecated public EncryptedFile.Builder(java.io.File, android.content.Context, String, androidx.security.crypto.EncryptedFile.FileEncryptionScheme);
method public androidx.security.crypto.EncryptedFile build() throws java.security.GeneralSecurityException, java.io.IOException;
method public androidx.security.crypto.EncryptedFile.Builder setKeysetAlias(String);
method public androidx.security.crypto.EncryptedFile.Builder setKeysetPrefName(String);
diff --git a/security/security-crypto/build.gradle b/security/security-crypto/build.gradle
index 4b86de9..f33cc83 100644
--- a/security/security-crypto/build.gradle
+++ b/security/security-crypto/build.gradle
@@ -46,7 +46,7 @@
}
androidx {
- name = "AndroidX Security"
+ name = "Security"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.SECURITY
inceptionYear = "2019"
diff --git a/security/security-identity-credential/api/current.txt b/security/security-identity-credential/api/current.txt
index 1396722..1bae701 100644
--- a/security/security-identity-credential/api/current.txt
+++ b/security/security-identity-credential/api/current.txt
@@ -53,8 +53,8 @@
method public abstract void setAvailableAuthenticationKeys(int, int);
method public abstract void setReaderEphemeralPublicKey(java.security.PublicKey) throws java.security.InvalidKeyException;
method public abstract void setSessionTranscript(byte[]);
- method @Deprecated public abstract void storeStaticAuthenticationData(java.security.cert.X509Certificate, byte[]) throws androidx.security.identity.UnknownAuthenticationKeyException;
method public void storeStaticAuthenticationData(java.security.cert.X509Certificate, android.icu.util.Calendar, byte[]) throws androidx.security.identity.UnknownAuthenticationKeyException;
+ method @Deprecated public abstract void storeStaticAuthenticationData(java.security.cert.X509Certificate, byte[]) throws androidx.security.identity.UnknownAuthenticationKeyException;
method public byte[] update(androidx.security.identity.PersonalizationData);
}
diff --git a/security/security-identity-credential/api/public_plus_experimental_current.txt b/security/security-identity-credential/api/public_plus_experimental_current.txt
index 1396722..1bae701 100644
--- a/security/security-identity-credential/api/public_plus_experimental_current.txt
+++ b/security/security-identity-credential/api/public_plus_experimental_current.txt
@@ -53,8 +53,8 @@
method public abstract void setAvailableAuthenticationKeys(int, int);
method public abstract void setReaderEphemeralPublicKey(java.security.PublicKey) throws java.security.InvalidKeyException;
method public abstract void setSessionTranscript(byte[]);
- method @Deprecated public abstract void storeStaticAuthenticationData(java.security.cert.X509Certificate, byte[]) throws androidx.security.identity.UnknownAuthenticationKeyException;
method public void storeStaticAuthenticationData(java.security.cert.X509Certificate, android.icu.util.Calendar, byte[]) throws androidx.security.identity.UnknownAuthenticationKeyException;
+ method @Deprecated public abstract void storeStaticAuthenticationData(java.security.cert.X509Certificate, byte[]) throws androidx.security.identity.UnknownAuthenticationKeyException;
method public byte[] update(androidx.security.identity.PersonalizationData);
}
diff --git a/security/security-identity-credential/api/restricted_current.txt b/security/security-identity-credential/api/restricted_current.txt
index 1396722..1bae701 100644
--- a/security/security-identity-credential/api/restricted_current.txt
+++ b/security/security-identity-credential/api/restricted_current.txt
@@ -53,8 +53,8 @@
method public abstract void setAvailableAuthenticationKeys(int, int);
method public abstract void setReaderEphemeralPublicKey(java.security.PublicKey) throws java.security.InvalidKeyException;
method public abstract void setSessionTranscript(byte[]);
- method @Deprecated public abstract void storeStaticAuthenticationData(java.security.cert.X509Certificate, byte[]) throws androidx.security.identity.UnknownAuthenticationKeyException;
method public void storeStaticAuthenticationData(java.security.cert.X509Certificate, android.icu.util.Calendar, byte[]) throws androidx.security.identity.UnknownAuthenticationKeyException;
+ method @Deprecated public abstract void storeStaticAuthenticationData(java.security.cert.X509Certificate, byte[]) throws androidx.security.identity.UnknownAuthenticationKeyException;
method public byte[] update(androidx.security.identity.PersonalizationData);
}
diff --git a/security/security-identity-credential/build.gradle b/security/security-identity-credential/build.gradle
index d6b322a..b81043e 100644
--- a/security/security-identity-credential/build.gradle
+++ b/security/security-identity-credential/build.gradle
@@ -45,7 +45,7 @@
}
androidx {
- name = "AndroidX Security"
+ name = "Security"
publish = Publish.SNAPSHOT_AND_RELEASE
runApiTasks = new RunApiTasks.Yes("Need to track API surface before moving to publish")
mavenVersion = LibraryVersions.SECURITY_IDENTITY_CREDENTIAL
diff --git a/settings.gradle b/settings.gradle
index 0f11a3a..063496e 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1012,11 +1012,13 @@
includeProject(":wear:compose:compose-material3-benchmark", "wear/compose/compose-material3/benchmark", [BuildType.COMPOSE])
includeProject(":wear:compose:compose-material-core", [BuildType.COMPOSE])
includeProject(":wear:compose:compose-material-samples", "wear/compose/compose-material/samples", [BuildType.COMPOSE])
+includeProject(":wear:compose:compose-material3-integration-tests", "wear/compose/compose-material3/integration-tests", [BuildType.COMPOSE])
includeProject(":wear:compose:compose-material3-samples", "wear/compose/compose-material3/samples", [BuildType.COMPOSE])
includeProject(":wear:compose:compose-navigation", [BuildType.COMPOSE])
includeProject(":wear:compose:compose-navigation-samples", "wear/compose/compose-navigation/samples", [BuildType.COMPOSE])
includeProject(":wear:compose:compose-ui-tooling", [BuildType.COMPOSE])
includeProject(":wear:compose:integration-tests:demos", [BuildType.COMPOSE])
+includeProject(":wear:compose:integration-tests:demos:common", [BuildType.COMPOSE])
includeProject(":wear:compose:integration-tests:macrobenchmark", [BuildType.COMPOSE])
includeProject(":wear:compose:integration-tests:macrobenchmark-target", [BuildType.COMPOSE])
includeProject(":wear:compose:integration-tests:navigation", [BuildType.COMPOSE])
diff --git a/sharetarget/sharetarget/build.gradle b/sharetarget/sharetarget/build.gradle
index 233ff32..4c1c02f 100644
--- a/sharetarget/sharetarget/build.gradle
+++ b/sharetarget/sharetarget/build.gradle
@@ -36,7 +36,7 @@
}
androidx {
- name = "AndroidX Share Target Support Library"
+ name = "Share Target"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "ShareTarget"
diff --git a/slice/slice-benchmark/build.gradle b/slice/slice-benchmark/build.gradle
index 1e151d0..6cfa1f1 100644
--- a/slice/slice-benchmark/build.gradle
+++ b/slice/slice-benchmark/build.gradle
@@ -40,7 +40,7 @@
}
androidx {
- name = "Slices Benchmarks"
+ name = "Slice Benchmarks"
publish = Publish.NONE // Library is deprecated pending removal.
mavenVersion = LibraryVersions.SLICE_BENCHMARK
inceptionYear = "2018"
diff --git a/slice/slice-builders-ktx/build.gradle b/slice/slice-builders-ktx/build.gradle
index cbd1af6..c67b6c7 100644
--- a/slice/slice-builders-ktx/build.gradle
+++ b/slice/slice-builders-ktx/build.gradle
@@ -45,7 +45,7 @@
}
androidx {
- name = "Slice builders KTX"
+ name = "Slice Builders Kotlin Extensions"
publish = Publish.SNAPSHOT_ONLY // Library is deprecated pending removal.
runApiTasks = new RunApiTasks.Yes() // Pending removal, but keep API files for now.
mavenVersion = LibraryVersions.SLICE_BUILDERS_KTX
diff --git a/slice/slice-builders/api/current.txt b/slice/slice-builders/api/current.txt
index 2eb8c22..1351608 100644
--- a/slice/slice-builders/api/current.txt
+++ b/slice/slice-builders/api/current.txt
@@ -29,8 +29,8 @@
}
@RequiresApi(19) public class ListBuilder extends androidx.slice.builders.TemplateSliceBuilder {
- ctor public ListBuilder(android.content.Context, android.net.Uri, long);
ctor @RequiresApi(26) public ListBuilder(android.content.Context, android.net.Uri, java.time.Duration?);
+ ctor public ListBuilder(android.content.Context, android.net.Uri, long);
method public androidx.slice.builders.ListBuilder addAction(androidx.slice.builders.SliceAction);
method public androidx.slice.builders.ListBuilder addGridRow(androidx.slice.builders.GridRowBuilder);
method public androidx.slice.builders.ListBuilder addInputRange(androidx.slice.builders.ListBuilder.InputRangeBuilder);
@@ -124,11 +124,11 @@
public static class ListBuilder.RowBuilder {
ctor public ListBuilder.RowBuilder();
ctor public ListBuilder.RowBuilder(android.net.Uri);
- method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(long);
method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(androidx.core.graphics.drawable.IconCompat, int);
method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(androidx.core.graphics.drawable.IconCompat?, int, boolean);
method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(androidx.slice.builders.SliceAction);
method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(androidx.slice.builders.SliceAction, boolean);
+ method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(long);
method public androidx.slice.builders.ListBuilder.RowBuilder setContentDescription(CharSequence);
method public androidx.slice.builders.ListBuilder.RowBuilder setEndOfSection(boolean);
method public androidx.slice.builders.ListBuilder.RowBuilder setLayoutDirection(int);
@@ -137,11 +137,11 @@
method public androidx.slice.builders.ListBuilder.RowBuilder setSubtitle(CharSequence?, boolean);
method public androidx.slice.builders.ListBuilder.RowBuilder setTitle(CharSequence);
method public androidx.slice.builders.ListBuilder.RowBuilder setTitle(CharSequence?, boolean);
- method public androidx.slice.builders.ListBuilder.RowBuilder setTitleItem(long);
method public androidx.slice.builders.ListBuilder.RowBuilder setTitleItem(androidx.core.graphics.drawable.IconCompat, int);
method public androidx.slice.builders.ListBuilder.RowBuilder setTitleItem(androidx.core.graphics.drawable.IconCompat?, int, boolean);
method public androidx.slice.builders.ListBuilder.RowBuilder setTitleItem(androidx.slice.builders.SliceAction);
method public androidx.slice.builders.ListBuilder.RowBuilder setTitleItem(androidx.slice.builders.SliceAction, boolean);
+ method public androidx.slice.builders.ListBuilder.RowBuilder setTitleItem(long);
}
@RequiresApi(19) public class SelectionBuilder {
@@ -162,10 +162,10 @@
method public static androidx.slice.builders.SliceAction! create(androidx.remotecallback.RemoteCallback, androidx.core.graphics.drawable.IconCompat, int, CharSequence);
method public static androidx.slice.builders.SliceAction! createDeeplink(android.app.PendingIntent, androidx.core.graphics.drawable.IconCompat, int, CharSequence);
method public static androidx.slice.builders.SliceAction! createDeeplink(androidx.remotecallback.RemoteCallback, androidx.core.graphics.drawable.IconCompat, int, CharSequence);
- method public static androidx.slice.builders.SliceAction! createToggle(android.app.PendingIntent, CharSequence, boolean);
- method public static androidx.slice.builders.SliceAction! createToggle(androidx.remotecallback.RemoteCallback, CharSequence, boolean);
method public static androidx.slice.builders.SliceAction! createToggle(android.app.PendingIntent, androidx.core.graphics.drawable.IconCompat, CharSequence, boolean);
+ method public static androidx.slice.builders.SliceAction! createToggle(android.app.PendingIntent, CharSequence, boolean);
method public static androidx.slice.builders.SliceAction! createToggle(androidx.remotecallback.RemoteCallback, androidx.core.graphics.drawable.IconCompat, CharSequence, boolean);
+ method public static androidx.slice.builders.SliceAction! createToggle(androidx.remotecallback.RemoteCallback, CharSequence, boolean);
method public android.app.PendingIntent getAction();
method public CharSequence? getContentDescription();
method public androidx.core.graphics.drawable.IconCompat? getIcon();
diff --git a/slice/slice-builders/api/public_plus_experimental_current.txt b/slice/slice-builders/api/public_plus_experimental_current.txt
index 2eb8c22..1351608 100644
--- a/slice/slice-builders/api/public_plus_experimental_current.txt
+++ b/slice/slice-builders/api/public_plus_experimental_current.txt
@@ -29,8 +29,8 @@
}
@RequiresApi(19) public class ListBuilder extends androidx.slice.builders.TemplateSliceBuilder {
- ctor public ListBuilder(android.content.Context, android.net.Uri, long);
ctor @RequiresApi(26) public ListBuilder(android.content.Context, android.net.Uri, java.time.Duration?);
+ ctor public ListBuilder(android.content.Context, android.net.Uri, long);
method public androidx.slice.builders.ListBuilder addAction(androidx.slice.builders.SliceAction);
method public androidx.slice.builders.ListBuilder addGridRow(androidx.slice.builders.GridRowBuilder);
method public androidx.slice.builders.ListBuilder addInputRange(androidx.slice.builders.ListBuilder.InputRangeBuilder);
@@ -124,11 +124,11 @@
public static class ListBuilder.RowBuilder {
ctor public ListBuilder.RowBuilder();
ctor public ListBuilder.RowBuilder(android.net.Uri);
- method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(long);
method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(androidx.core.graphics.drawable.IconCompat, int);
method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(androidx.core.graphics.drawable.IconCompat?, int, boolean);
method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(androidx.slice.builders.SliceAction);
method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(androidx.slice.builders.SliceAction, boolean);
+ method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(long);
method public androidx.slice.builders.ListBuilder.RowBuilder setContentDescription(CharSequence);
method public androidx.slice.builders.ListBuilder.RowBuilder setEndOfSection(boolean);
method public androidx.slice.builders.ListBuilder.RowBuilder setLayoutDirection(int);
@@ -137,11 +137,11 @@
method public androidx.slice.builders.ListBuilder.RowBuilder setSubtitle(CharSequence?, boolean);
method public androidx.slice.builders.ListBuilder.RowBuilder setTitle(CharSequence);
method public androidx.slice.builders.ListBuilder.RowBuilder setTitle(CharSequence?, boolean);
- method public androidx.slice.builders.ListBuilder.RowBuilder setTitleItem(long);
method public androidx.slice.builders.ListBuilder.RowBuilder setTitleItem(androidx.core.graphics.drawable.IconCompat, int);
method public androidx.slice.builders.ListBuilder.RowBuilder setTitleItem(androidx.core.graphics.drawable.IconCompat?, int, boolean);
method public androidx.slice.builders.ListBuilder.RowBuilder setTitleItem(androidx.slice.builders.SliceAction);
method public androidx.slice.builders.ListBuilder.RowBuilder setTitleItem(androidx.slice.builders.SliceAction, boolean);
+ method public androidx.slice.builders.ListBuilder.RowBuilder setTitleItem(long);
}
@RequiresApi(19) public class SelectionBuilder {
@@ -162,10 +162,10 @@
method public static androidx.slice.builders.SliceAction! create(androidx.remotecallback.RemoteCallback, androidx.core.graphics.drawable.IconCompat, int, CharSequence);
method public static androidx.slice.builders.SliceAction! createDeeplink(android.app.PendingIntent, androidx.core.graphics.drawable.IconCompat, int, CharSequence);
method public static androidx.slice.builders.SliceAction! createDeeplink(androidx.remotecallback.RemoteCallback, androidx.core.graphics.drawable.IconCompat, int, CharSequence);
- method public static androidx.slice.builders.SliceAction! createToggle(android.app.PendingIntent, CharSequence, boolean);
- method public static androidx.slice.builders.SliceAction! createToggle(androidx.remotecallback.RemoteCallback, CharSequence, boolean);
method public static androidx.slice.builders.SliceAction! createToggle(android.app.PendingIntent, androidx.core.graphics.drawable.IconCompat, CharSequence, boolean);
+ method public static androidx.slice.builders.SliceAction! createToggle(android.app.PendingIntent, CharSequence, boolean);
method public static androidx.slice.builders.SliceAction! createToggle(androidx.remotecallback.RemoteCallback, androidx.core.graphics.drawable.IconCompat, CharSequence, boolean);
+ method public static androidx.slice.builders.SliceAction! createToggle(androidx.remotecallback.RemoteCallback, CharSequence, boolean);
method public android.app.PendingIntent getAction();
method public CharSequence? getContentDescription();
method public androidx.core.graphics.drawable.IconCompat? getIcon();
diff --git a/slice/slice-builders/api/restricted_current.txt b/slice/slice-builders/api/restricted_current.txt
index ee28dd3..84c8575 100644
--- a/slice/slice-builders/api/restricted_current.txt
+++ b/slice/slice-builders/api/restricted_current.txt
@@ -29,8 +29,8 @@
}
@RequiresApi(19) public class ListBuilder extends androidx.slice.builders.TemplateSliceBuilder {
- ctor public ListBuilder(android.content.Context, android.net.Uri, long);
ctor @RequiresApi(26) public ListBuilder(android.content.Context, android.net.Uri, java.time.Duration?);
+ ctor public ListBuilder(android.content.Context, android.net.Uri, long);
method public androidx.slice.builders.ListBuilder addAction(androidx.slice.builders.SliceAction);
method public androidx.slice.builders.ListBuilder addGridRow(androidx.slice.builders.GridRowBuilder);
method public androidx.slice.builders.ListBuilder addInputRange(androidx.slice.builders.ListBuilder.InputRangeBuilder);
@@ -125,11 +125,11 @@
public static class ListBuilder.RowBuilder {
ctor public ListBuilder.RowBuilder();
ctor public ListBuilder.RowBuilder(android.net.Uri);
- method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(long);
method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(androidx.core.graphics.drawable.IconCompat, int);
method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(androidx.core.graphics.drawable.IconCompat?, int, boolean);
method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(androidx.slice.builders.SliceAction);
method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(androidx.slice.builders.SliceAction, boolean);
+ method public androidx.slice.builders.ListBuilder.RowBuilder addEndItem(long);
method public androidx.slice.builders.ListBuilder.RowBuilder setContentDescription(CharSequence);
method public androidx.slice.builders.ListBuilder.RowBuilder setEndOfSection(boolean);
method public androidx.slice.builders.ListBuilder.RowBuilder setLayoutDirection(int);
@@ -138,17 +138,17 @@
method public androidx.slice.builders.ListBuilder.RowBuilder setSubtitle(CharSequence?, boolean);
method public androidx.slice.builders.ListBuilder.RowBuilder setTitle(CharSequence);
method public androidx.slice.builders.ListBuilder.RowBuilder setTitle(CharSequence?, boolean);
- method public androidx.slice.builders.ListBuilder.RowBuilder setTitleItem(long);
method public androidx.slice.builders.ListBuilder.RowBuilder setTitleItem(androidx.core.graphics.drawable.IconCompat, int);
method public androidx.slice.builders.ListBuilder.RowBuilder setTitleItem(androidx.core.graphics.drawable.IconCompat?, int, boolean);
method public androidx.slice.builders.ListBuilder.RowBuilder setTitleItem(androidx.slice.builders.SliceAction);
method public androidx.slice.builders.ListBuilder.RowBuilder setTitleItem(androidx.slice.builders.SliceAction, boolean);
+ method public androidx.slice.builders.ListBuilder.RowBuilder setTitleItem(long);
}
@RequiresApi(19) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class MessagingSliceBuilder extends androidx.slice.builders.TemplateSliceBuilder {
ctor public MessagingSliceBuilder(android.content.Context, android.net.Uri);
- method public androidx.slice.builders.MessagingSliceBuilder! add(androidx.slice.builders.MessagingSliceBuilder.MessageBuilder!);
method public androidx.slice.builders.MessagingSliceBuilder! add(androidx.core.util.Consumer<androidx.slice.builders.MessagingSliceBuilder.MessageBuilder!>!);
+ method public androidx.slice.builders.MessagingSliceBuilder! add(androidx.slice.builders.MessagingSliceBuilder.MessageBuilder!);
field public static final int MAXIMUM_RETAINED_MESSAGES = 50; // 0x32
}
@@ -182,10 +182,10 @@
method public static androidx.slice.builders.SliceAction! create(androidx.remotecallback.RemoteCallback, androidx.core.graphics.drawable.IconCompat, int, CharSequence);
method public static androidx.slice.builders.SliceAction! createDeeplink(android.app.PendingIntent, androidx.core.graphics.drawable.IconCompat, int, CharSequence);
method public static androidx.slice.builders.SliceAction! createDeeplink(androidx.remotecallback.RemoteCallback, androidx.core.graphics.drawable.IconCompat, int, CharSequence);
- method public static androidx.slice.builders.SliceAction! createToggle(android.app.PendingIntent, CharSequence, boolean);
- method public static androidx.slice.builders.SliceAction! createToggle(androidx.remotecallback.RemoteCallback, CharSequence, boolean);
method public static androidx.slice.builders.SliceAction! createToggle(android.app.PendingIntent, androidx.core.graphics.drawable.IconCompat, CharSequence, boolean);
+ method public static androidx.slice.builders.SliceAction! createToggle(android.app.PendingIntent, CharSequence, boolean);
method public static androidx.slice.builders.SliceAction! createToggle(androidx.remotecallback.RemoteCallback, androidx.core.graphics.drawable.IconCompat, CharSequence, boolean);
+ method public static androidx.slice.builders.SliceAction! createToggle(androidx.remotecallback.RemoteCallback, CharSequence, boolean);
method public android.app.PendingIntent getAction();
method public CharSequence? getContentDescription();
method public androidx.core.graphics.drawable.IconCompat? getIcon();
diff --git a/slice/slice-builders/build.gradle b/slice/slice-builders/build.gradle
index a8c0dbb..06f184e 100644
--- a/slice/slice-builders/build.gradle
+++ b/slice/slice-builders/build.gradle
@@ -31,7 +31,7 @@
}
androidx {
- name = "Slice builders"
+ name = "Slice Builders"
publish = Publish.SNAPSHOT_ONLY // Library is deprecated pending removal.
runApiTasks = new RunApiTasks.Yes() // Pending removal, but keep API files for now.
mavenVersion = LibraryVersions.SLICE
diff --git a/slice/slice-core/api/current.txt b/slice/slice-core/api/current.txt
index 3e0e604..6a6b471 100644
--- a/slice/slice-core/api/current.txt
+++ b/slice/slice-core/api/current.txt
@@ -40,8 +40,8 @@
}
public abstract class SliceProvider extends android.content.ContentProvider {
- ctor public SliceProvider(java.lang.String!...);
ctor public SliceProvider();
+ ctor public SliceProvider(java.lang.String!...);
method public final int bulkInsert(android.net.Uri, android.content.ContentValues![]);
method @RequiresApi(19) public final android.net.Uri? canonicalize(android.net.Uri);
method public final int delete(android.net.Uri, String?, String![]?);
@@ -56,8 +56,8 @@
method @RequiresApi(19) public android.net.Uri onMapIntentToUri(android.content.Intent);
method @RequiresApi(19) public void onSlicePinned(android.net.Uri);
method @RequiresApi(19) public void onSliceUnpinned(android.net.Uri);
- method public final android.database.Cursor? query(android.net.Uri, String![]?, String?, String![]?, String?);
method @RequiresApi(28) public final android.database.Cursor? query(android.net.Uri, String![]?, android.os.Bundle?, android.os.CancellationSignal?);
+ method public final android.database.Cursor? query(android.net.Uri, String![]?, String?, String![]?, String?);
method @RequiresApi(16) public final android.database.Cursor? query(android.net.Uri, String![]?, String?, String![]?, String?, android.os.CancellationSignal?);
method public final int update(android.net.Uri, android.content.ContentValues?, String?, String![]?);
}
diff --git a/slice/slice-core/api/public_plus_experimental_current.txt b/slice/slice-core/api/public_plus_experimental_current.txt
index 3e0e604..6a6b471 100644
--- a/slice/slice-core/api/public_plus_experimental_current.txt
+++ b/slice/slice-core/api/public_plus_experimental_current.txt
@@ -40,8 +40,8 @@
}
public abstract class SliceProvider extends android.content.ContentProvider {
- ctor public SliceProvider(java.lang.String!...);
ctor public SliceProvider();
+ ctor public SliceProvider(java.lang.String!...);
method public final int bulkInsert(android.net.Uri, android.content.ContentValues![]);
method @RequiresApi(19) public final android.net.Uri? canonicalize(android.net.Uri);
method public final int delete(android.net.Uri, String?, String![]?);
@@ -56,8 +56,8 @@
method @RequiresApi(19) public android.net.Uri onMapIntentToUri(android.content.Intent);
method @RequiresApi(19) public void onSlicePinned(android.net.Uri);
method @RequiresApi(19) public void onSliceUnpinned(android.net.Uri);
- method public final android.database.Cursor? query(android.net.Uri, String![]?, String?, String![]?, String?);
method @RequiresApi(28) public final android.database.Cursor? query(android.net.Uri, String![]?, android.os.Bundle?, android.os.CancellationSignal?);
+ method public final android.database.Cursor? query(android.net.Uri, String![]?, String?, String![]?, String?);
method @RequiresApi(16) public final android.database.Cursor? query(android.net.Uri, String![]?, String?, String![]?, String?, android.os.CancellationSignal?);
method public final int update(android.net.Uri, android.content.ContentValues?, String?, String![]?);
}
diff --git a/slice/slice-core/api/restricted_current.txt b/slice/slice-core/api/restricted_current.txt
index def0c1d..332afef 100644
--- a/slice/slice-core/api/restricted_current.txt
+++ b/slice/slice-core/api/restricted_current.txt
@@ -34,8 +34,8 @@
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.slice.Slice.Builder addItem(androidx.slice.SliceItem);
method public androidx.slice.Slice.Builder addLong(long, String?, java.lang.String!...);
method public androidx.slice.Slice.Builder addLong(long, String?, java.util.List<java.lang.String!>);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.slice.Slice.Builder addRemoteInput(android.app.RemoteInput, String?, java.util.List<java.lang.String!>);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.slice.Slice.Builder addRemoteInput(android.app.RemoteInput, String?, java.lang.String!...);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.slice.Slice.Builder addRemoteInput(android.app.RemoteInput, String?, java.util.List<java.lang.String!>);
method public androidx.slice.Slice.Builder addSubSlice(androidx.slice.Slice);
method public androidx.slice.Slice.Builder addSubSlice(androidx.slice.Slice, String?);
method public androidx.slice.Slice.Builder addText(CharSequence?, String?, java.lang.String!...);
@@ -52,11 +52,11 @@
}
@RequiresApi(19) @androidx.versionedparcelable.VersionedParcelize(allowSerialization=true, ignoreParcelables=true, isCustom=true) public final class SliceItem extends androidx.versionedparcelable.CustomVersionedParcelable {
- ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public SliceItem(Object!, String, String?, String![]);
- ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public SliceItem(Object!, String, String?, java.util.List<java.lang.String!>);
ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public SliceItem();
ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public SliceItem(android.app.PendingIntent, androidx.slice.Slice?, String, String?, String![]);
ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public SliceItem(androidx.slice.SliceItem.ActionHandler, androidx.slice.Slice?, String, String?, String![]);
+ ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public SliceItem(Object!, String, String?, String![]);
+ ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public SliceItem(Object!, String, String?, java.util.List<java.lang.String!>);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void addHint(String);
method public static android.text.ParcelableSpan createSensitiveSpan();
method public void fireAction(android.content.Context?, android.content.Intent?) throws android.app.PendingIntent.CanceledException;
@@ -91,8 +91,8 @@
}
public abstract class SliceProvider extends android.content.ContentProvider implements androidx.core.app.CoreComponentFactory.CompatWrapped {
- ctor public SliceProvider(java.lang.String!...);
ctor public SliceProvider();
+ ctor public SliceProvider(java.lang.String!...);
method public final int bulkInsert(android.net.Uri, android.content.ContentValues![]);
method @RequiresApi(19) public final android.net.Uri? canonicalize(android.net.Uri);
method public final int delete(android.net.Uri, String?, String![]?);
@@ -110,8 +110,8 @@
method @RequiresApi(19) public android.net.Uri onMapIntentToUri(android.content.Intent);
method @RequiresApi(19) public void onSlicePinned(android.net.Uri);
method @RequiresApi(19) public void onSliceUnpinned(android.net.Uri);
- method public final android.database.Cursor? query(android.net.Uri, String![]?, String?, String![]?, String?);
method @RequiresApi(28) public final android.database.Cursor? query(android.net.Uri, String![]?, android.os.Bundle?, android.os.CancellationSignal?);
+ method public final android.database.Cursor? query(android.net.Uri, String![]?, String?, String![]?, String?);
method @RequiresApi(16) public final android.database.Cursor? query(android.net.Uri, String![]?, String?, String![]?, String?, android.os.CancellationSignal?);
method public final int update(android.net.Uri, android.content.ContentValues?, String?, String![]?);
}
@@ -157,8 +157,8 @@
@RequiresApi(19) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public class SliceProviderCompat {
ctor public SliceProviderCompat(androidx.slice.SliceProvider, androidx.slice.compat.CompatPermissionManager, android.content.Context);
method public static void addSpecs(android.os.Bundle, java.util.Set<androidx.slice.SliceSpec!>);
- method public static androidx.slice.Slice? bindSlice(android.content.Context, android.net.Uri, java.util.Set<androidx.slice.SliceSpec!>);
method public static androidx.slice.Slice? bindSlice(android.content.Context, android.content.Intent, java.util.Set<androidx.slice.SliceSpec!>);
+ method public static androidx.slice.Slice? bindSlice(android.content.Context, android.net.Uri, java.util.Set<androidx.slice.SliceSpec!>);
method public android.os.Bundle? call(String, String?, android.os.Bundle);
method public static int checkSlicePermission(android.content.Context, String?, android.net.Uri, int, int);
method public String? getCallingPackage();
@@ -219,8 +219,8 @@
}
@RequiresApi(19) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class SliceActionImpl implements androidx.slice.core.SliceAction {
- ctor public SliceActionImpl(android.app.PendingIntent, androidx.core.graphics.drawable.IconCompat, CharSequence);
ctor public SliceActionImpl(android.app.PendingIntent, androidx.core.graphics.drawable.IconCompat, @androidx.slice.core.SliceHints.ImageMode int, CharSequence);
+ ctor public SliceActionImpl(android.app.PendingIntent, androidx.core.graphics.drawable.IconCompat, CharSequence);
ctor public SliceActionImpl(android.app.PendingIntent, androidx.core.graphics.drawable.IconCompat, CharSequence, boolean);
ctor public SliceActionImpl(android.app.PendingIntent, CharSequence, boolean);
ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public SliceActionImpl(androidx.slice.SliceItem);
@@ -283,16 +283,16 @@
}
@RequiresApi(19) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class SliceQuery {
- method public static androidx.slice.SliceItem? find(androidx.slice.Slice?, String?, String?, String?);
method public static androidx.slice.SliceItem? find(androidx.slice.Slice?, String?);
+ method public static androidx.slice.SliceItem? find(androidx.slice.Slice?, String?, String?, String?);
+ method public static androidx.slice.SliceItem? find(androidx.slice.Slice?, String?, String![]?, String![]?);
method public static androidx.slice.SliceItem? find(androidx.slice.SliceItem?, String?);
method public static androidx.slice.SliceItem? find(androidx.slice.SliceItem?, String?, String?, String?);
- method public static androidx.slice.SliceItem? find(androidx.slice.Slice?, String?, String![]?, String![]?);
method public static androidx.slice.SliceItem? find(androidx.slice.SliceItem?, String?, String![]?, String![]?);
- method public static java.util.List<androidx.slice.SliceItem!> findAll(androidx.slice.SliceItem, String?);
method public static java.util.List<androidx.slice.SliceItem!> findAll(androidx.slice.Slice, String?, String?, String?);
- method public static java.util.List<androidx.slice.SliceItem!> findAll(androidx.slice.SliceItem, String?, String?, String?);
method public static java.util.List<androidx.slice.SliceItem!> findAll(androidx.slice.Slice, String?, String![]?, String![]?);
+ method public static java.util.List<androidx.slice.SliceItem!> findAll(androidx.slice.SliceItem, String?);
+ method public static java.util.List<androidx.slice.SliceItem!> findAll(androidx.slice.SliceItem, String?, String?, String?);
method public static java.util.List<androidx.slice.SliceItem!> findAll(androidx.slice.SliceItem, String?, String![]?, String![]?);
method public static androidx.slice.SliceItem? findItem(androidx.slice.Slice, android.net.Uri);
method public static androidx.slice.SliceItem? findNotContaining(androidx.slice.SliceItem?, java.util.List<androidx.slice.SliceItem!>);
@@ -300,8 +300,8 @@
method public static androidx.slice.SliceItem? findSubtype(androidx.slice.SliceItem?, String?, String?);
method public static androidx.slice.SliceItem? findTopLevelItem(androidx.slice.Slice, String?, String?, String![]?, String![]?);
method public static boolean hasAnyHints(androidx.slice.SliceItem, java.lang.String!...);
- method public static boolean hasHints(androidx.slice.SliceItem, java.lang.String!...);
method public static boolean hasHints(androidx.slice.Slice, java.lang.String!...);
+ method public static boolean hasHints(androidx.slice.SliceItem, java.lang.String!...);
}
}
diff --git a/slice/slice-core/build.gradle b/slice/slice-core/build.gradle
index 03a0441..33028b2 100644
--- a/slice/slice-core/build.gradle
+++ b/slice/slice-core/build.gradle
@@ -37,7 +37,7 @@
}
androidx {
- name = "Common utilities for slices"
+ name = "Slice Core"
publish = Publish.SNAPSHOT_ONLY // Library is deprecated pending removal.
runApiTasks = new RunApiTasks.Yes() // Pending removal, but keep API files for now.
mavenVersion = LibraryVersions.SLICE
diff --git a/slice/slice-test/build.gradle b/slice/slice-test/build.gradle
index a7330d5..6913178 100644
--- a/slice/slice-test/build.gradle
+++ b/slice/slice-test/build.gradle
@@ -38,7 +38,7 @@
}
androidx {
- name = "Slice test code"
+ name = "Slice Test Extensions"
type = LibraryType.INTERNAL_TEST_LIBRARY
publish = Publish.NONE // Library is deprecated pending removal.
mavenVersion = LibraryVersions.SLICE
diff --git a/slice/slice-view/api/current.txt b/slice/slice-view/api/current.txt
index 7e949f4..9ba9a2f 100644
--- a/slice/slice-view/api/current.txt
+++ b/slice/slice-view/api/current.txt
@@ -60,8 +60,8 @@
}
@RequiresApi(19) public abstract class SliceViewManager {
- method public abstract androidx.slice.Slice? bindSlice(android.net.Uri);
method public abstract androidx.slice.Slice? bindSlice(android.content.Intent);
+ method public abstract androidx.slice.Slice? bindSlice(android.net.Uri);
method public static androidx.slice.SliceViewManager getInstance(android.content.Context);
method @WorkerThread public abstract java.util.Collection<android.net.Uri!> getSliceDescendants(android.net.Uri);
method public abstract android.net.Uri? mapIntentToUri(android.content.Intent);
diff --git a/slice/slice-view/api/public_plus_experimental_current.txt b/slice/slice-view/api/public_plus_experimental_current.txt
index 7e949f4..9ba9a2f 100644
--- a/slice/slice-view/api/public_plus_experimental_current.txt
+++ b/slice/slice-view/api/public_plus_experimental_current.txt
@@ -60,8 +60,8 @@
}
@RequiresApi(19) public abstract class SliceViewManager {
- method public abstract androidx.slice.Slice? bindSlice(android.net.Uri);
method public abstract androidx.slice.Slice? bindSlice(android.content.Intent);
+ method public abstract androidx.slice.Slice? bindSlice(android.net.Uri);
method public static androidx.slice.SliceViewManager getInstance(android.content.Context);
method @WorkerThread public abstract java.util.Collection<android.net.Uri!> getSliceDescendants(android.net.Uri);
method public abstract android.net.Uri? mapIntentToUri(android.content.Intent);
diff --git a/slice/slice-view/api/restricted_current.txt b/slice/slice-view/api/restricted_current.txt
index 219cc31..f46664b 100644
--- a/slice/slice-view/api/restricted_current.txt
+++ b/slice/slice-view/api/restricted_current.txt
@@ -60,8 +60,8 @@
}
@RequiresApi(19) public abstract class SliceViewManager {
- method public abstract androidx.slice.Slice? bindSlice(android.net.Uri);
method public abstract androidx.slice.Slice? bindSlice(android.content.Intent);
+ method public abstract androidx.slice.Slice? bindSlice(android.net.Uri);
method public static androidx.slice.SliceViewManager getInstance(android.content.Context);
method @WorkerThread public abstract java.util.Collection<android.net.Uri!> getSliceDescendants(android.net.Uri);
method public abstract android.net.Uri? mapIntentToUri(android.content.Intent);
@@ -229,8 +229,8 @@
method public static androidx.slice.widget.SliceLiveData.CachedSliceLiveData fromCachedSlice(android.content.Context, java.io.InputStream, androidx.slice.widget.SliceLiveData.OnErrorListener!);
method public static androidx.lifecycle.LiveData<androidx.slice.Slice!> fromIntent(android.content.Context, android.content.Intent);
method public static androidx.lifecycle.LiveData<androidx.slice.Slice!> fromIntent(android.content.Context, android.content.Intent, androidx.slice.widget.SliceLiveData.OnErrorListener?);
- method public static androidx.lifecycle.LiveData<androidx.slice.Slice!> fromStream(android.content.Context, java.io.InputStream, androidx.slice.widget.SliceLiveData.OnErrorListener!);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.slice.widget.SliceLiveData.CachedSliceLiveData fromStream(android.content.Context, androidx.slice.SliceViewManager!, java.io.InputStream, androidx.slice.widget.SliceLiveData.OnErrorListener!);
+ method public static androidx.lifecycle.LiveData<androidx.slice.Slice!> fromStream(android.content.Context, java.io.InputStream, androidx.slice.widget.SliceLiveData.OnErrorListener!);
method public static androidx.lifecycle.LiveData<androidx.slice.Slice!> fromUri(android.content.Context, android.net.Uri);
method public static androidx.lifecycle.LiveData<androidx.slice.Slice!> fromUri(android.content.Context, android.net.Uri, androidx.slice.widget.SliceLiveData.OnErrorListener?);
}
diff --git a/slice/slice-view/build.gradle b/slice/slice-view/build.gradle
index 8f8c858..14f019d 100644
--- a/slice/slice-view/build.gradle
+++ b/slice/slice-view/build.gradle
@@ -41,7 +41,7 @@
}
androidx {
- name = "Slice views"
+ name = "Slice Views"
publish = Publish.SNAPSHOT_ONLY // Library is deprecated pending removal.
runApiTasks = new RunApiTasks.Yes() // Pending removal, but keep API files for now.
mavenVersion = LibraryVersions.SLICE
diff --git a/slidingpanelayout/slidingpanelayout/api/current.txt b/slidingpanelayout/slidingpanelayout/api/current.txt
index 9340904..27dc80b 100644
--- a/slidingpanelayout/slidingpanelayout/api/current.txt
+++ b/slidingpanelayout/slidingpanelayout/api/current.txt
@@ -6,6 +6,7 @@
ctor public SlidingPaneLayout(android.content.Context, android.util.AttributeSet?);
ctor public SlidingPaneLayout(android.content.Context, android.util.AttributeSet?, int);
method public void addPanelSlideListener(androidx.slidingpanelayout.widget.SlidingPaneLayout.PanelSlideListener);
+ method public void addSlideableStateListener(androidx.slidingpanelayout.widget.SlidingPaneLayout.SlideableStateListener);
method protected boolean canScroll(android.view.View, boolean, int, int, int);
method @Deprecated public boolean canSlide();
method public void close();
@@ -19,6 +20,7 @@
method public void open();
method public boolean openPane();
method public void removePanelSlideListener(androidx.slidingpanelayout.widget.SlidingPaneLayout.PanelSlideListener);
+ method public void removeSlideableStateListener(androidx.slidingpanelayout.widget.SlidingPaneLayout.SlideableStateListener);
method @Deprecated public void setCoveredFadeColor(@ColorInt int);
method public final void setLockMode(int);
method @Deprecated public void setPanelSlideListener(androidx.slidingpanelayout.widget.SlidingPaneLayout.PanelSlideListener?);
@@ -40,11 +42,11 @@
public static class SlidingPaneLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
ctor public SlidingPaneLayout.LayoutParams();
- ctor public SlidingPaneLayout.LayoutParams(int, int);
+ ctor public SlidingPaneLayout.LayoutParams(android.content.Context, android.util.AttributeSet?);
ctor public SlidingPaneLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
ctor public SlidingPaneLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
ctor public SlidingPaneLayout.LayoutParams(androidx.slidingpanelayout.widget.SlidingPaneLayout.LayoutParams);
- ctor public SlidingPaneLayout.LayoutParams(android.content.Context, android.util.AttributeSet?);
+ ctor public SlidingPaneLayout.LayoutParams(int, int);
field public float weight;
}
@@ -61,5 +63,9 @@
method public void onPanelSlide(android.view.View, float);
}
+ public static interface SlidingPaneLayout.SlideableStateListener {
+ method public void onSlideableStateChanged(boolean);
+ }
+
}
diff --git a/slidingpanelayout/slidingpanelayout/api/public_plus_experimental_current.txt b/slidingpanelayout/slidingpanelayout/api/public_plus_experimental_current.txt
index 9340904..27dc80b 100644
--- a/slidingpanelayout/slidingpanelayout/api/public_plus_experimental_current.txt
+++ b/slidingpanelayout/slidingpanelayout/api/public_plus_experimental_current.txt
@@ -6,6 +6,7 @@
ctor public SlidingPaneLayout(android.content.Context, android.util.AttributeSet?);
ctor public SlidingPaneLayout(android.content.Context, android.util.AttributeSet?, int);
method public void addPanelSlideListener(androidx.slidingpanelayout.widget.SlidingPaneLayout.PanelSlideListener);
+ method public void addSlideableStateListener(androidx.slidingpanelayout.widget.SlidingPaneLayout.SlideableStateListener);
method protected boolean canScroll(android.view.View, boolean, int, int, int);
method @Deprecated public boolean canSlide();
method public void close();
@@ -19,6 +20,7 @@
method public void open();
method public boolean openPane();
method public void removePanelSlideListener(androidx.slidingpanelayout.widget.SlidingPaneLayout.PanelSlideListener);
+ method public void removeSlideableStateListener(androidx.slidingpanelayout.widget.SlidingPaneLayout.SlideableStateListener);
method @Deprecated public void setCoveredFadeColor(@ColorInt int);
method public final void setLockMode(int);
method @Deprecated public void setPanelSlideListener(androidx.slidingpanelayout.widget.SlidingPaneLayout.PanelSlideListener?);
@@ -40,11 +42,11 @@
public static class SlidingPaneLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
ctor public SlidingPaneLayout.LayoutParams();
- ctor public SlidingPaneLayout.LayoutParams(int, int);
+ ctor public SlidingPaneLayout.LayoutParams(android.content.Context, android.util.AttributeSet?);
ctor public SlidingPaneLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
ctor public SlidingPaneLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
ctor public SlidingPaneLayout.LayoutParams(androidx.slidingpanelayout.widget.SlidingPaneLayout.LayoutParams);
- ctor public SlidingPaneLayout.LayoutParams(android.content.Context, android.util.AttributeSet?);
+ ctor public SlidingPaneLayout.LayoutParams(int, int);
field public float weight;
}
@@ -61,5 +63,9 @@
method public void onPanelSlide(android.view.View, float);
}
+ public static interface SlidingPaneLayout.SlideableStateListener {
+ method public void onSlideableStateChanged(boolean);
+ }
+
}
diff --git a/slidingpanelayout/slidingpanelayout/api/restricted_current.txt b/slidingpanelayout/slidingpanelayout/api/restricted_current.txt
index 9340904..27dc80b 100644
--- a/slidingpanelayout/slidingpanelayout/api/restricted_current.txt
+++ b/slidingpanelayout/slidingpanelayout/api/restricted_current.txt
@@ -6,6 +6,7 @@
ctor public SlidingPaneLayout(android.content.Context, android.util.AttributeSet?);
ctor public SlidingPaneLayout(android.content.Context, android.util.AttributeSet?, int);
method public void addPanelSlideListener(androidx.slidingpanelayout.widget.SlidingPaneLayout.PanelSlideListener);
+ method public void addSlideableStateListener(androidx.slidingpanelayout.widget.SlidingPaneLayout.SlideableStateListener);
method protected boolean canScroll(android.view.View, boolean, int, int, int);
method @Deprecated public boolean canSlide();
method public void close();
@@ -19,6 +20,7 @@
method public void open();
method public boolean openPane();
method public void removePanelSlideListener(androidx.slidingpanelayout.widget.SlidingPaneLayout.PanelSlideListener);
+ method public void removeSlideableStateListener(androidx.slidingpanelayout.widget.SlidingPaneLayout.SlideableStateListener);
method @Deprecated public void setCoveredFadeColor(@ColorInt int);
method public final void setLockMode(int);
method @Deprecated public void setPanelSlideListener(androidx.slidingpanelayout.widget.SlidingPaneLayout.PanelSlideListener?);
@@ -40,11 +42,11 @@
public static class SlidingPaneLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
ctor public SlidingPaneLayout.LayoutParams();
- ctor public SlidingPaneLayout.LayoutParams(int, int);
+ ctor public SlidingPaneLayout.LayoutParams(android.content.Context, android.util.AttributeSet?);
ctor public SlidingPaneLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
ctor public SlidingPaneLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
ctor public SlidingPaneLayout.LayoutParams(androidx.slidingpanelayout.widget.SlidingPaneLayout.LayoutParams);
- ctor public SlidingPaneLayout.LayoutParams(android.content.Context, android.util.AttributeSet?);
+ ctor public SlidingPaneLayout.LayoutParams(int, int);
field public float weight;
}
@@ -61,5 +63,9 @@
method public void onPanelSlide(android.view.View, float);
}
+ public static interface SlidingPaneLayout.SlideableStateListener {
+ method public void onSlideableStateChanged(boolean);
+ }
+
}
diff --git a/slidingpanelayout/slidingpanelayout/build.gradle b/slidingpanelayout/slidingpanelayout/build.gradle
index 6a29dca..58cbeb8 100644
--- a/slidingpanelayout/slidingpanelayout/build.gradle
+++ b/slidingpanelayout/slidingpanelayout/build.gradle
@@ -23,7 +23,7 @@
}
androidx {
- name = "Android Support Library Sliding Pane Layout"
+ name = "Sliding Pane Layout"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "SlidingPaneLayout offers a responsive, two pane layout that automatically switches between overlapping panes on smaller devices to a side by side view on larger devices."
diff --git a/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/LockModeTest.kt b/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/LockModeTest.kt
index faf82fa..fe2cdae 100644
--- a/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/LockModeTest.kt
+++ b/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/LockModeTest.kt
@@ -17,9 +17,9 @@
package androidx.slidingpanelayout.widget
import androidx.slidingpanelayout.test.R
+import androidx.slidingpanelayout.widget.SlidingPaneLayout.LOCK_MODE_LOCKED
import androidx.slidingpanelayout.widget.SlidingPaneLayout.LOCK_MODE_LOCKED_CLOSED
import androidx.slidingpanelayout.widget.SlidingPaneLayout.LOCK_MODE_LOCKED_OPEN
-import androidx.slidingpanelayout.widget.SlidingPaneLayout.LOCK_MODE_LOCKED
import androidx.slidingpanelayout.widget.SlidingPaneLayout.LOCK_MODE_UNLOCKED
import androidx.slidingpanelayout.widget.helpers.TestActivity
import androidx.slidingpanelayout.widget.helpers.addWaitForCloseLatch
@@ -39,10 +39,10 @@
import androidx.test.filters.SdkSuppress
import androidx.testutils.withActivity
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.TimeUnit
import org.junit.After
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.TimeUnit
/**
* Tests [SlidingPaneLayout.setLockMode] and [SlidingPaneLayout.getLockMode]
diff --git a/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/PanelSlideListenerTest.kt b/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/PanelSlideListenerTest.kt
index 027b5cd..a98a7d9 100644
--- a/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/PanelSlideListenerTest.kt
+++ b/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/PanelSlideListenerTest.kt
@@ -30,11 +30,11 @@
import androidx.testutils.withActivity
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.After
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
/**
* Tests [SlidingPaneLayout.PanelSlideListener]
diff --git a/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/SlideableStateListenerTest.kt b/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/SlideableStateListenerTest.kt
new file mode 100644
index 0000000..490a911
--- /dev/null
+++ b/slidingpanelayout/slidingpanelayout/src/androidTest/java/androidx/slidingpanelayout/widget/SlideableStateListenerTest.kt
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.slidingpanelayout.widget
+
+import android.view.ViewGroup
+import android.widget.FrameLayout
+import androidx.slidingpanelayout.test.R
+import androidx.slidingpanelayout.widget.SlidingPaneLayout.SlideableStateListener
+import androidx.slidingpanelayout.widget.helpers.TestActivity
+import androidx.test.core.app.ActivityScenario
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import com.google.common.truth.Truth.assertWithMessage
+import org.junit.After
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+@LargeTest
+class SlideableStateListenerTest {
+
+ @After
+ public fun tearDown() {
+ TestActivity.onActivityCreated = {}
+ }
+
+ @Test
+ fun testAddSlideableStateListener() {
+ var isSlideableCalled = false
+ TestActivity.onActivityCreated = { activity ->
+ val container = FrameLayout(activity)
+ val layout = activity.layoutInflater.inflate(
+ R.layout.activity_test_layout, null, false
+ )
+ container.addView(
+ layout,
+ ViewGroup.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ )
+ )
+ val slidingPaneLayout = container
+ .findViewById<SlidingPaneLayout>(R.id.sliding_pane_layout)
+ slidingPaneLayout.addSlideableStateListener { _ ->
+ isSlideableCalled = true
+ }
+
+ activity.setContentView(container)
+ }
+
+ with(ActivityScenario.launch(TestActivity::class.java)) {
+ assertWithMessage(
+ "isSlideable should be called when measuring the layout has completed")
+ .that(isSlideableCalled)
+ .isTrue()
+ }
+ }
+
+ @Test
+ fun testRemoveSlideableStateListener() {
+ var isSlideableCalled: Boolean? = null
+
+ TestActivity.onActivityCreated = { activity ->
+ val container = FrameLayout(activity)
+ val layout = activity.layoutInflater.inflate(
+ R.layout.activity_test_layout, null, false
+ )
+ container.addView(
+ layout,
+ ViewGroup.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ )
+ )
+ val slideableStateListener = SlideableStateListener {
+ isSlideableCalled = true
+ }
+
+ val slidingPaneLayout = container
+ .findViewById<SlidingPaneLayout>(R.id.sliding_pane_layout)
+ slidingPaneLayout.addSlideableStateListener(slideableStateListener)
+
+ activity.setContentView(container)
+ slidingPaneLayout.removeSlideableStateListener(slideableStateListener)
+ }
+
+ with(ActivityScenario.launch(TestActivity::class.java)) {
+ assertWithMessage("isSlideable should not be called if the listener has been removed")
+ .that(isSlideableCalled)
+ .isNull()
+ }
+ }
+}
\ No newline at end of file
diff --git a/slidingpanelayout/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/FoldingFeatureObserver.kt b/slidingpanelayout/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/FoldingFeatureObserver.kt
index b3119aa..d4ae2e7 100644
--- a/slidingpanelayout/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/FoldingFeatureObserver.kt
+++ b/slidingpanelayout/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/FoldingFeatureObserver.kt
@@ -20,6 +20,7 @@
import androidx.window.layout.FoldingFeature
import androidx.window.layout.WindowInfoTracker
import androidx.window.layout.WindowLayoutInfo
+import java.util.concurrent.Executor
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.asCoroutineDispatcher
@@ -27,7 +28,6 @@
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.mapNotNull
import kotlinx.coroutines.launch
-import java.util.concurrent.Executor
/**
* A device folding feature observer is used to notify listener when there is a folding feature
diff --git a/slidingpanelayout/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout.java b/slidingpanelayout/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout.java
index 27478c9..4c826d2 100644
--- a/slidingpanelayout/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout.java
+++ b/slidingpanelayout/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout.java
@@ -178,6 +178,9 @@
private float mInitialMotionX;
private float mInitialMotionY;
+ private final List<SlideableStateListener> mSlideableStateListeners =
+ new CopyOnWriteArrayList<>();
+
private final List<PanelSlideListener> mPanelSlideListeners = new CopyOnWriteArrayList<>();
private @Nullable PanelSlideListener mPanelSlideListener;
@@ -249,6 +252,20 @@
}
/**
+ * Listener to whether the SlidingPaneLayout is slideable or is a fixed width.
+ */
+ public interface SlideableStateListener {
+
+ /**
+ * Called when onMeasure has measured out the total width of the added layouts
+ * within SlidingPaneLayout
+ * @param isSlideable Returns true if the current SlidingPaneLayout has the ability to
+ * slide, returns false if the SlidingPaneLayout is a fixed width.
+ */
+ void onSlideableStateChanged(boolean isSlideable);
+ }
+
+ /**
* Listener for monitoring events about sliding panes.
*/
public interface PanelSlideListener {
@@ -436,6 +453,25 @@
}
/**
+ * Adds the specified listener to the list of listeners that will be notified of sliding
+ * state events.
+ * @param listener Listener to notify when sliding state events occur.
+ * @see #removeSlideableStateListener(SlideableStateListener)
+ */
+ public void addSlideableStateListener(@NonNull SlideableStateListener listener) {
+ mSlideableStateListeners.add(listener);
+ }
+
+ /**
+ * Removes the specified listener from the list of listeners that will be notified of sliding
+ * state events.
+ * @param listener Listener to notify when sliding state events occur
+ */
+ public void removeSlideableStateListener(@NonNull SlideableStateListener listener) {
+ mSlideableStateListeners.remove(listener);
+ }
+
+ /**
* Adds the specified listener to the list of listeners that will be notified of
* panel slide events.
*
@@ -777,7 +813,12 @@
final int measuredHeight = layoutHeight + getPaddingTop() + getPaddingBottom();
setMeasuredDimension(measuredWidth, measuredHeight);
- mCanSlide = canSlide;
+ if (canSlide != mCanSlide) {
+ mCanSlide = canSlide;
+ for (SlideableStateListener listener : mSlideableStateListeners) {
+ listener.onSlideableStateChanged(mCanSlide);
+ }
+ }
if (mDragHelper.getViewDragState() != ViewDragHelper.STATE_IDLE && !canSlide) {
// Cancel scrolling in progress, it's no longer relevant.
@@ -1056,6 +1097,15 @@
}
/**
+ * @return true if content in this layout can be slid open and closed
+ * @deprecated Renamed to {@link #isSlideable()} - this method is going away soon!
+ */
+ @Deprecated
+ public boolean canSlide() {
+ return mCanSlide;
+ }
+
+ /**
* @deprecated Renamed to {@link #closePane()} - this method is going away soon!
*/
@Deprecated
@@ -1094,15 +1144,6 @@
}
/**
- * @return true if content in this layout can be slid open and closed
- * @deprecated Renamed to {@link #isSlideable()} - this method is going away soon!
- */
- @Deprecated
- public boolean canSlide() {
- return mCanSlide;
- }
-
- /**
* Check if both the list and detail view panes in this layout can fully fit side-by-side. If
* not, the content pane has the capability to slide back and forth. Note that the lock mode
* is not taken into account in this method. This method is typically used to determine
diff --git a/sqlite/integration-tests/inspection-room-testapp/src/androidTest/java/androidx/sqlite/inspection/RoomInvalidationHookTest.kt b/sqlite/integration-tests/inspection-room-testapp/src/androidTest/java/androidx/sqlite/inspection/RoomInvalidationHookTest.kt
index 57ef857..d69eee1 100644
--- a/sqlite/integration-tests/inspection-room-testapp/src/androidTest/java/androidx/sqlite/inspection/RoomInvalidationHookTest.kt
+++ b/sqlite/integration-tests/inspection-room-testapp/src/androidTest/java/androidx/sqlite/inspection/RoomInvalidationHookTest.kt
@@ -30,6 +30,8 @@
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.google.common.truth.Truth.assertWithMessage
+import java.util.concurrent.Executors
+import java.util.concurrent.TimeUnit
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.Job
import kotlinx.coroutines.runBlocking
@@ -37,8 +39,6 @@
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.Executors
-import java.util.concurrent.TimeUnit
@RunWith(AndroidJUnit4::class)
class RoomInvalidationHookTest {
diff --git a/sqlite/integration-tests/inspection-sqldelight-testapp/src/main/generated/androidx/sqlite/inspection/sqldeligttestapp/Database.kt b/sqlite/integration-tests/inspection-sqldelight-testapp/src/main/generated/androidx/sqlite/inspection/sqldeligttestapp/Database.kt
index bebc2ab..ca2c993 100644
--- a/sqlite/integration-tests/inspection-sqldelight-testapp/src/main/generated/androidx/sqlite/inspection/sqldeligttestapp/Database.kt
+++ b/sqlite/integration-tests/inspection-sqldelight-testapp/src/main/generated/androidx/sqlite/inspection/sqldeligttestapp/Database.kt
@@ -16,9 +16,9 @@
package androidx.sqlite.inspection.sqldeligttestapp
-import androidx.sqlite.inspection.test.TestEntityQueries
import androidx.sqlite.inspection.sqldeligttestapp.app.newInstance
import androidx.sqlite.inspection.sqldeligttestapp.app.schema
+import androidx.sqlite.inspection.test.TestEntityQueries
import com.squareup.sqldelight.Transacter
import com.squareup.sqldelight.db.SqlDriver
diff --git a/sqlite/integration-tests/inspection-sqldelight-testapp/src/main/generated/androidx/sqlite/inspection/sqldeligttestapp/app/DatabaseImpl.kt b/sqlite/integration-tests/inspection-sqldelight-testapp/src/main/generated/androidx/sqlite/inspection/sqldeligttestapp/app/DatabaseImpl.kt
index cb63403..675a5a1 100644
--- a/sqlite/integration-tests/inspection-sqldelight-testapp/src/main/generated/androidx/sqlite/inspection/sqldeligttestapp/app/DatabaseImpl.kt
+++ b/sqlite/integration-tests/inspection-sqldelight-testapp/src/main/generated/androidx/sqlite/inspection/sqldeligttestapp/app/DatabaseImpl.kt
@@ -16,9 +16,9 @@
package androidx.sqlite.inspection.sqldeligttestapp.app
+import androidx.sqlite.inspection.sqldeligttestapp.Database
import androidx.sqlite.inspection.test.TestEntity
import androidx.sqlite.inspection.test.TestEntityQueries
-import androidx.sqlite.inspection.sqldeligttestapp.Database
import com.squareup.sqldelight.Query
import com.squareup.sqldelight.TransacterImpl
import com.squareup.sqldelight.db.SqlDriver
diff --git a/sqlite/sqlite-framework/build.gradle b/sqlite/sqlite-framework/build.gradle
index 0169f43..65eb1e4 100644
--- a/sqlite/sqlite-framework/build.gradle
+++ b/sqlite/sqlite-framework/build.gradle
@@ -37,7 +37,7 @@
}
androidx {
- name = "Android Support SQLite - Framework Implementation"
+ name = "SQLite Framework Integration"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2017"
description = "The implementation of Support SQLite library using the framework code."
diff --git a/sqlite/sqlite-inspection/build.gradle b/sqlite/sqlite-inspection/build.gradle
index da58266..3210e2c 100644
--- a/sqlite/sqlite-inspection/build.gradle
+++ b/sqlite/sqlite-inspection/build.gradle
@@ -38,7 +38,7 @@
}
androidx {
- name = "Android SQLite Inspector"
+ name = "SQLite Inspector"
type = LibraryType.IDE_PLUGIN
// Decouple SQLITE_INSPECTOR because it depends on
// the inspection protocol, which is alpha
diff --git a/sqlite/sqlite-inspection/src/androidTest/java/androidx/sqlite/inspection/test/CancellationQueryTest.kt b/sqlite/sqlite-inspection/src/androidTest/java/androidx/sqlite/inspection/test/CancellationQueryTest.kt
index 997730a..642fa58 100644
--- a/sqlite/sqlite-inspection/src/androidTest/java/androidx/sqlite/inspection/test/CancellationQueryTest.kt
+++ b/sqlite/sqlite-inspection/src/androidTest/java/androidx/sqlite/inspection/test/CancellationQueryTest.kt
@@ -22,6 +22,8 @@
import androidx.test.filters.MediumTest
import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.Executor
+import java.util.concurrent.Executors.newCachedThreadPool
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.cancelAndJoin
import kotlinx.coroutines.channels.Channel
@@ -32,8 +34,6 @@
import org.junit.Test
import org.junit.rules.TemporaryFolder
import org.junit.runner.RunWith
-import java.util.concurrent.Executor
-import java.util.concurrent.Executors.newCachedThreadPool
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/sqlite/sqlite-inspection/src/androidTest/java/androidx/sqlite/inspection/test/DatabaseExtensions.kt b/sqlite/sqlite-inspection/src/androidTest/java/androidx/sqlite/inspection/test/DatabaseExtensions.kt
index d72b712..d8ace8b 100644
--- a/sqlite/sqlite-inspection/src/androidTest/java/androidx/sqlite/inspection/test/DatabaseExtensions.kt
+++ b/sqlite/sqlite-inspection/src/androidTest/java/androidx/sqlite/inspection/test/DatabaseExtensions.kt
@@ -20,8 +20,8 @@
import android.database.sqlite.SQLiteOpenHelper
import androidx.test.core.app.ApplicationProvider
import com.google.common.truth.Truth.assertThat
-import org.junit.rules.TemporaryFolder
import java.io.File
+import org.junit.rules.TemporaryFolder
fun SQLiteDatabase.addTable(table: Table) = execSQL(table.toCreateString())
diff --git a/sqlite/sqlite-inspection/src/androidTest/java/androidx/sqlite/inspection/test/DatabaseLockingTest.kt b/sqlite/sqlite-inspection/src/androidTest/java/androidx/sqlite/inspection/test/DatabaseLockingTest.kt
index 67e4214..492b7b2 100644
--- a/sqlite/sqlite-inspection/src/androidTest/java/androidx/sqlite/inspection/test/DatabaseLockingTest.kt
+++ b/sqlite/sqlite-inspection/src/androidTest/java/androidx/sqlite/inspection/test/DatabaseLockingTest.kt
@@ -32,6 +32,13 @@
import androidx.test.filters.SdkSuppress
import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.Callable
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.Executors.newSingleThreadExecutor
+import java.util.concurrent.TimeUnit.SECONDS
+import java.util.concurrent.atomic.AtomicBoolean
+import java.util.concurrent.atomic.AtomicInteger
+import java.util.regex.Pattern.CASE_INSENSITIVE
import kotlinx.coroutines.asCoroutineDispatcher
import kotlinx.coroutines.ensureActive
import kotlinx.coroutines.launch
@@ -40,13 +47,6 @@
import org.junit.Test
import org.junit.rules.TemporaryFolder
import org.junit.runner.RunWith
-import java.util.concurrent.Callable
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.Executors.newSingleThreadExecutor
-import java.util.concurrent.TimeUnit.SECONDS
-import java.util.concurrent.atomic.AtomicBoolean
-import java.util.concurrent.atomic.AtomicInteger
-import java.util.regex.Pattern.CASE_INSENSITIVE
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/sqlite/sqlite-inspection/src/androidTest/java/androidx/sqlite/inspection/test/SqliteInspectorTestEnvironment.kt b/sqlite/sqlite-inspection/src/androidTest/java/androidx/sqlite/inspection/test/SqliteInspectorTestEnvironment.kt
index 706dced..92a93bf 100644
--- a/sqlite/sqlite-inspection/src/androidTest/java/androidx/sqlite/inspection/test/SqliteInspectorTestEnvironment.kt
+++ b/sqlite/sqlite-inspection/src/androidTest/java/androidx/sqlite/inspection/test/SqliteInspectorTestEnvironment.kt
@@ -28,12 +28,12 @@
import androidx.sqlite.inspection.SqliteInspectorProtocol.Event
import androidx.sqlite.inspection.SqliteInspectorProtocol.Response
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.Executor
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.Job
import kotlinx.coroutines.cancelAndJoin
import kotlinx.coroutines.runBlocking
import org.junit.rules.ExternalResource
-import java.util.concurrent.Executor
private const val SQLITE_INSPECTOR_ID = "androidx.sqlite.inspection"
diff --git a/sqlite/sqlite-inspection/src/androidTest/java/androidx/sqlite/inspection/test/TrackDatabasesTest.kt b/sqlite/sqlite-inspection/src/androidTest/java/androidx/sqlite/inspection/test/TrackDatabasesTest.kt
index 4efe8d8..cf8da8b 100644
--- a/sqlite/sqlite-inspection/src/androidTest/java/androidx/sqlite/inspection/test/TrackDatabasesTest.kt
+++ b/sqlite/sqlite-inspection/src/androidTest/java/androidx/sqlite/inspection/test/TrackDatabasesTest.kt
@@ -31,12 +31,12 @@
import androidx.test.filters.LargeTest
import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
import com.google.common.truth.Truth.assertThat
+import java.io.File
import kotlinx.coroutines.runBlocking
import org.junit.Rule
import org.junit.Test
import org.junit.rules.TemporaryFolder
import org.junit.runner.RunWith
-import java.io.File
private const val OPEN_DATABASE_COMMAND_SIGNATURE_API11: String = "openDatabase" +
"(" +
diff --git a/sqlite/sqlite-ktx/build.gradle b/sqlite/sqlite-ktx/build.gradle
index a793599..5698d49 100644
--- a/sqlite/sqlite-ktx/build.gradle
+++ b/sqlite/sqlite-ktx/build.gradle
@@ -31,7 +31,7 @@
}
androidx {
- name = "Android DB KTX"
+ name = "SQLite Kotlin Extensions"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "Kotlin extensions for DB"
diff --git a/sqlite/sqlite/api/current.txt b/sqlite/sqlite/api/current.txt
index d416831..3e4733c 100644
--- a/sqlite/sqlite/api/current.txt
+++ b/sqlite/sqlite/api/current.txt
@@ -2,8 +2,8 @@
package androidx.sqlite.db {
public final class SimpleSQLiteQuery implements androidx.sqlite.db.SupportSQLiteQuery {
- ctor public SimpleSQLiteQuery(String query, Object![]? bindArgs);
ctor public SimpleSQLiteQuery(String query);
+ ctor public SimpleSQLiteQuery(String query, Object![]? bindArgs);
method public static void bind(androidx.sqlite.db.SupportSQLiteProgram statement, Object![]? bindArgs);
method public void bindTo(androidx.sqlite.db.SupportSQLiteProgram statement);
method public int getArgCount();
@@ -44,10 +44,10 @@
method public boolean isReadOnly();
method @RequiresApi(api=android.os.Build.VERSION_CODES.JELLY_BEAN) public boolean isWriteAheadLoggingEnabled();
method public boolean needUpgrade(int newVersion);
- method public android.database.Cursor query(String query);
- method public android.database.Cursor query(String query, Object![] bindArgs);
method public android.database.Cursor query(androidx.sqlite.db.SupportSQLiteQuery query);
method @RequiresApi(api=android.os.Build.VERSION_CODES.JELLY_BEAN) public android.database.Cursor query(androidx.sqlite.db.SupportSQLiteQuery query, android.os.CancellationSignal? cancellationSignal);
+ method public android.database.Cursor query(String query);
+ method public android.database.Cursor query(String query, Object![] bindArgs);
method @RequiresApi(api=android.os.Build.VERSION_CODES.JELLY_BEAN) public void setForeignKeyConstraintsEnabled(boolean enabled);
method public void setLocale(java.util.Locale locale);
method public void setMaxSqlCacheSize(int cacheSize);
diff --git a/sqlite/sqlite/api/public_plus_experimental_current.txt b/sqlite/sqlite/api/public_plus_experimental_current.txt
index d416831..3e4733c 100644
--- a/sqlite/sqlite/api/public_plus_experimental_current.txt
+++ b/sqlite/sqlite/api/public_plus_experimental_current.txt
@@ -2,8 +2,8 @@
package androidx.sqlite.db {
public final class SimpleSQLiteQuery implements androidx.sqlite.db.SupportSQLiteQuery {
- ctor public SimpleSQLiteQuery(String query, Object![]? bindArgs);
ctor public SimpleSQLiteQuery(String query);
+ ctor public SimpleSQLiteQuery(String query, Object![]? bindArgs);
method public static void bind(androidx.sqlite.db.SupportSQLiteProgram statement, Object![]? bindArgs);
method public void bindTo(androidx.sqlite.db.SupportSQLiteProgram statement);
method public int getArgCount();
@@ -44,10 +44,10 @@
method public boolean isReadOnly();
method @RequiresApi(api=android.os.Build.VERSION_CODES.JELLY_BEAN) public boolean isWriteAheadLoggingEnabled();
method public boolean needUpgrade(int newVersion);
- method public android.database.Cursor query(String query);
- method public android.database.Cursor query(String query, Object![] bindArgs);
method public android.database.Cursor query(androidx.sqlite.db.SupportSQLiteQuery query);
method @RequiresApi(api=android.os.Build.VERSION_CODES.JELLY_BEAN) public android.database.Cursor query(androidx.sqlite.db.SupportSQLiteQuery query, android.os.CancellationSignal? cancellationSignal);
+ method public android.database.Cursor query(String query);
+ method public android.database.Cursor query(String query, Object![] bindArgs);
method @RequiresApi(api=android.os.Build.VERSION_CODES.JELLY_BEAN) public void setForeignKeyConstraintsEnabled(boolean enabled);
method public void setLocale(java.util.Locale locale);
method public void setMaxSqlCacheSize(int cacheSize);
diff --git a/sqlite/sqlite/api/restricted_current.txt b/sqlite/sqlite/api/restricted_current.txt
index d416831..3e4733c 100644
--- a/sqlite/sqlite/api/restricted_current.txt
+++ b/sqlite/sqlite/api/restricted_current.txt
@@ -2,8 +2,8 @@
package androidx.sqlite.db {
public final class SimpleSQLiteQuery implements androidx.sqlite.db.SupportSQLiteQuery {
- ctor public SimpleSQLiteQuery(String query, Object![]? bindArgs);
ctor public SimpleSQLiteQuery(String query);
+ ctor public SimpleSQLiteQuery(String query, Object![]? bindArgs);
method public static void bind(androidx.sqlite.db.SupportSQLiteProgram statement, Object![]? bindArgs);
method public void bindTo(androidx.sqlite.db.SupportSQLiteProgram statement);
method public int getArgCount();
@@ -44,10 +44,10 @@
method public boolean isReadOnly();
method @RequiresApi(api=android.os.Build.VERSION_CODES.JELLY_BEAN) public boolean isWriteAheadLoggingEnabled();
method public boolean needUpgrade(int newVersion);
- method public android.database.Cursor query(String query);
- method public android.database.Cursor query(String query, Object![] bindArgs);
method public android.database.Cursor query(androidx.sqlite.db.SupportSQLiteQuery query);
method @RequiresApi(api=android.os.Build.VERSION_CODES.JELLY_BEAN) public android.database.Cursor query(androidx.sqlite.db.SupportSQLiteQuery query, android.os.CancellationSignal? cancellationSignal);
+ method public android.database.Cursor query(String query);
+ method public android.database.Cursor query(String query, Object![] bindArgs);
method @RequiresApi(api=android.os.Build.VERSION_CODES.JELLY_BEAN) public void setForeignKeyConstraintsEnabled(boolean enabled);
method public void setLocale(java.util.Locale locale);
method public void setMaxSqlCacheSize(int cacheSize);
diff --git a/sqlite/sqlite/build.gradle b/sqlite/sqlite/build.gradle
index 580912e..5d64abf 100644
--- a/sqlite/sqlite/build.gradle
+++ b/sqlite/sqlite/build.gradle
@@ -36,7 +36,7 @@
}
androidx {
- name = "Android DB"
+ name = "SQLite"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2017"
description = "Android DB"
diff --git a/stableaidl/stableaidl-gradle-plugin/src/main/java/androidx/stableaidl/tasks/UpdateStableAidlApiTask.kt b/stableaidl/stableaidl-gradle-plugin/src/main/java/androidx/stableaidl/tasks/UpdateStableAidlApiTask.kt
index c12b84b..8a1bf84 100644
--- a/stableaidl/stableaidl-gradle-plugin/src/main/java/androidx/stableaidl/tasks/UpdateStableAidlApiTask.kt
+++ b/stableaidl/stableaidl-gradle-plugin/src/main/java/androidx/stableaidl/tasks/UpdateStableAidlApiTask.kt
@@ -16,22 +16,22 @@
package androidx.stableaidl.tasks
+import java.io.File
+import java.security.MessageDigest
+import org.apache.commons.io.FileUtils
import org.gradle.api.DefaultTask
+import org.gradle.api.GradleException
+import org.gradle.api.file.DirectoryProperty
+import org.gradle.api.logging.Logger
import org.gradle.api.provider.ListProperty
import org.gradle.api.provider.Property
import org.gradle.api.tasks.CacheableTask
import org.gradle.api.tasks.Input
+import org.gradle.api.tasks.InputDirectory
+import org.gradle.api.tasks.OutputDirectories
import org.gradle.api.tasks.PathSensitive
import org.gradle.api.tasks.PathSensitivity
import org.gradle.api.tasks.TaskAction
-import java.io.File
-import java.security.MessageDigest
-import org.gradle.api.GradleException
-import org.gradle.api.logging.Logger
-import org.gradle.api.tasks.InputDirectory
-import org.gradle.api.tasks.OutputDirectories
-import org.apache.commons.io.FileUtils
-import org.gradle.api.file.DirectoryProperty
/**
* Task for updating the public Android resource surface, e.g. `public.xml`.
diff --git a/stableaidl/stableaidl-gradle-plugin/src/test/java/com/android/build/gradle/internal/fixtures/FakeGradleExecOperations.kt b/stableaidl/stableaidl-gradle-plugin/src/test/java/com/android/build/gradle/internal/fixtures/FakeGradleExecOperations.kt
index a65ad83..80859ab 100644
--- a/stableaidl/stableaidl-gradle-plugin/src/test/java/com/android/build/gradle/internal/fixtures/FakeGradleExecOperations.kt
+++ b/stableaidl/stableaidl-gradle-plugin/src/test/java/com/android/build/gradle/internal/fixtures/FakeGradleExecOperations.kt
@@ -16,6 +16,9 @@
package com.android.build.gradle.internal.fixtures
+import java.io.File
+import java.io.InputStream
+import java.io.OutputStream
import org.gradle.api.Action
import org.gradle.process.BaseExecSpec
import org.gradle.process.CommandLineArgumentProvider
@@ -24,9 +27,6 @@
import org.gradle.process.ExecSpec
import org.gradle.process.JavaExecSpec
import org.gradle.process.ProcessForkOptions
-import java.io.File
-import java.io.InputStream
-import java.io.OutputStream
/** This implementation only captures arguments used to launch process, it does not run it. */
class FakeGradleExecOperations : ExecOperations {
diff --git a/stableaidl/stableaidl-gradle-plugin/src/test/java/com/android/build/gradle/internal/fixtures/FakeGradleProperty.kt b/stableaidl/stableaidl-gradle-plugin/src/test/java/com/android/build/gradle/internal/fixtures/FakeGradleProperty.kt
index f64e355..bd198da 100644
--- a/stableaidl/stableaidl-gradle-plugin/src/test/java/com/android/build/gradle/internal/fixtures/FakeGradleProperty.kt
+++ b/stableaidl/stableaidl-gradle-plugin/src/test/java/com/android/build/gradle/internal/fixtures/FakeGradleProperty.kt
@@ -16,10 +16,10 @@
package com.android.build.gradle.internal.fixtures
+import java.util.function.BiFunction
import org.gradle.api.Transformer
import org.gradle.api.provider.Property
import org.gradle.api.provider.Provider
-import java.util.function.BiFunction
class FakeGradleProperty<T>(private var value: T? = null) : Property<T> {
diff --git a/stableaidl/stableaidl-gradle-plugin/src/test/java/com/android/build/gradle/internal/fixtures/FakeGradleWorkExecutor.kt b/stableaidl/stableaidl-gradle-plugin/src/test/java/com/android/build/gradle/internal/fixtures/FakeGradleWorkExecutor.kt
index 678696b..7a17b63 100644
--- a/stableaidl/stableaidl-gradle-plugin/src/test/java/com/android/build/gradle/internal/fixtures/FakeGradleWorkExecutor.kt
+++ b/stableaidl/stableaidl-gradle-plugin/src/test/java/com/android/build/gradle/internal/fixtures/FakeGradleWorkExecutor.kt
@@ -16,6 +16,10 @@
package com.android.build.gradle.internal.fixtures
+import java.io.File
+import java.lang.reflect.Method
+import java.lang.reflect.ParameterizedType
+import java.net.URLClassLoader
import org.gradle.api.Action
import org.gradle.api.model.ObjectFactory
import org.gradle.workers.ClassLoaderWorkerSpec
@@ -32,10 +36,6 @@
import org.objectweb.asm.FieldVisitor
import org.objectweb.asm.MethodVisitor
import org.objectweb.asm.Opcodes
-import java.io.File
-import java.lang.reflect.Method
-import java.lang.reflect.ParameterizedType
-import java.net.URLClassLoader
/**
* Fake implementation of [WorkerExecutor]. [ObjectFactory] is used to instantiate parameters,
diff --git a/stableaidl/stableaidl-gradle-plugin/src/test/java/com/android/build/gradle/internal/fixtures/FakeNoOpAnalyticsService.kt b/stableaidl/stableaidl-gradle-plugin/src/test/java/com/android/build/gradle/internal/fixtures/FakeNoOpAnalyticsService.kt
index 9de1d23..4bd73b8 100644
--- a/stableaidl/stableaidl-gradle-plugin/src/test/java/com/android/build/gradle/internal/fixtures/FakeNoOpAnalyticsService.kt
+++ b/stableaidl/stableaidl-gradle-plugin/src/test/java/com/android/build/gradle/internal/fixtures/FakeNoOpAnalyticsService.kt
@@ -29,13 +29,13 @@
import com.google.wireless.android.sdk.stats.GradleBuildProject
import com.google.wireless.android.sdk.stats.GradleBuildVariant
import com.google.wireless.android.sdk.stats.GradleTransformExecution
+import java.io.File
+import java.util.Base64
+import java.util.concurrent.ConcurrentLinkedQueue
import org.gradle.api.provider.MapProperty
import org.gradle.api.provider.Property
import org.gradle.api.provider.SetProperty
import org.gradle.tooling.events.FinishEvent
-import java.io.File
-import java.util.Base64
-import java.util.concurrent.ConcurrentLinkedQueue
/**
* A no-operation implementation of [AnalyticsService] for unit tests.
diff --git a/startup/startup-runtime-lint/build.gradle b/startup/startup-runtime-lint/build.gradle
index 0a10bc6..2ca037c 100644
--- a/startup/startup-runtime-lint/build.gradle
+++ b/startup/startup-runtime-lint/build.gradle
@@ -32,7 +32,7 @@
}
androidx {
- name = "Android App Startup Runtime Lint Checks"
+ name = "Startup Runtime Lint Checks"
type = LibraryType.LINT
inceptionYear = "2020"
description = "Android App Startup Runtime"
diff --git a/startup/startup-runtime-lint/src/main/java/androidx/startup/lint/EnsureInitializerMetadataDetector.kt b/startup/startup-runtime-lint/src/main/java/androidx/startup/lint/EnsureInitializerMetadataDetector.kt
index 4da10fc..824b5fe 100644
--- a/startup/startup-runtime-lint/src/main/java/androidx/startup/lint/EnsureInitializerMetadataDetector.kt
+++ b/startup/startup-runtime-lint/src/main/java/androidx/startup/lint/EnsureInitializerMetadataDetector.kt
@@ -34,11 +34,11 @@
import com.android.tools.lint.detector.api.XmlContext
import com.android.tools.lint.detector.api.XmlScanner
import com.intellij.psi.impl.source.PsiClassReferenceType
+import java.util.EnumSet
import org.jetbrains.uast.UClass
import org.jetbrains.uast.UClassLiteralExpression
import org.jetbrains.uast.visitor.AbstractUastVisitor
import org.w3c.dom.Element
-import java.util.EnumSet
/**
* A [Detector] which ensures that every `ComponentInitializer` is accompanied by a corresponding
diff --git a/startup/startup-runtime-lint/src/main/java/androidx/startup/lint/InitializerConstructorDetector.kt b/startup/startup-runtime-lint/src/main/java/androidx/startup/lint/InitializerConstructorDetector.kt
index c99826d..87b8615 100644
--- a/startup/startup-runtime-lint/src/main/java/androidx/startup/lint/InitializerConstructorDetector.kt
+++ b/startup/startup-runtime-lint/src/main/java/androidx/startup/lint/InitializerConstructorDetector.kt
@@ -27,8 +27,8 @@
import com.android.tools.lint.detector.api.Severity
import com.android.tools.lint.detector.api.SourceCodeScanner
import com.intellij.lang.java.JavaLanguage
-import org.jetbrains.uast.UClass
import java.util.EnumSet
+import org.jetbrains.uast.UClass
/**
* A [Detector] which ensures that every `ComponentInitializer` has a no argument constructor.
diff --git a/startup/startup-runtime-lint/src/test/java/androidx/startup/lint/EnsureInitializerMetadataTest.kt b/startup/startup-runtime-lint/src/test/java/androidx/startup/lint/EnsureInitializerMetadataTest.kt
index 23b8e36..8e5f981 100644
--- a/startup/startup-runtime-lint/src/test/java/androidx/startup/lint/EnsureInitializerMetadataTest.kt
+++ b/startup/startup-runtime-lint/src/test/java/androidx/startup/lint/EnsureInitializerMetadataTest.kt
@@ -18,8 +18,8 @@
package androidx.startup.lint
-import androidx.startup.lint.Stubs.TEST_INITIALIZER
import androidx.startup.lint.Stubs.INITIALIZER
+import androidx.startup.lint.Stubs.TEST_INITIALIZER
import androidx.startup.lint.Stubs.TEST_INITIALIZER_2
import androidx.startup.lint.Stubs.TEST_INITIALIZER_WITH_DEPENDENCIES
import com.android.tools.lint.checks.infrastructure.TestFiles.manifest
diff --git a/startup/startup-runtime/build.gradle b/startup/startup-runtime/build.gradle
index 9cfaac9..d4f9766 100644
--- a/startup/startup-runtime/build.gradle
+++ b/startup/startup-runtime/build.gradle
@@ -49,7 +49,7 @@
}
androidx {
- name = "Android App Startup Runtime"
+ name = "Startup Runtime"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2020"
description = "Android App Startup Runtime"
diff --git a/startup/startup-runtime/src/androidTest/java/androidx/startup/AppInitializerTest.kt b/startup/startup-runtime/src/androidTest/java/androidx/startup/AppInitializerTest.kt
index 7b54f14f..d9501e8 100644
--- a/startup/startup-runtime/src/androidTest/java/androidx/startup/AppInitializerTest.kt
+++ b/startup/startup-runtime/src/androidTest/java/androidx/startup/AppInitializerTest.kt
@@ -20,8 +20,8 @@
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
-import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.CoreMatchers.containsString
+import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Assert.assertTrue
import org.junit.Assert.fail
diff --git a/swiperefreshlayout/swiperefreshlayout/api/current.txt b/swiperefreshlayout/swiperefreshlayout/api/current.txt
index 9317cb2..259df79 100644
--- a/swiperefreshlayout/swiperefreshlayout/api/current.txt
+++ b/swiperefreshlayout/swiperefreshlayout/api/current.txt
@@ -42,8 +42,8 @@
ctor public SwipeRefreshLayout(android.content.Context, android.util.AttributeSet?);
method public boolean canChildScrollUp();
method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, int);
- method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]);
method public boolean dispatchNestedScroll(int, int, int, int, int[]?, int);
+ method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]);
method public int getProgressCircleDiameter();
method public int getProgressViewEndOffset();
method public int getProgressViewStartOffset();
@@ -51,8 +51,8 @@
method public boolean isRefreshing();
method public void onMeasure(int, int);
method public void onNestedPreScroll(android.view.View, int, int, int[], int);
- method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]);
method public void onNestedScroll(android.view.View, int, int, int, int, int);
+ method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]);
method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
method public void onStopNestedScroll(android.view.View, int);
diff --git a/swiperefreshlayout/swiperefreshlayout/api/public_plus_experimental_current.txt b/swiperefreshlayout/swiperefreshlayout/api/public_plus_experimental_current.txt
index 9317cb2..259df79 100644
--- a/swiperefreshlayout/swiperefreshlayout/api/public_plus_experimental_current.txt
+++ b/swiperefreshlayout/swiperefreshlayout/api/public_plus_experimental_current.txt
@@ -42,8 +42,8 @@
ctor public SwipeRefreshLayout(android.content.Context, android.util.AttributeSet?);
method public boolean canChildScrollUp();
method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, int);
- method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]);
method public boolean dispatchNestedScroll(int, int, int, int, int[]?, int);
+ method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]);
method public int getProgressCircleDiameter();
method public int getProgressViewEndOffset();
method public int getProgressViewStartOffset();
@@ -51,8 +51,8 @@
method public boolean isRefreshing();
method public void onMeasure(int, int);
method public void onNestedPreScroll(android.view.View, int, int, int[], int);
- method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]);
method public void onNestedScroll(android.view.View, int, int, int, int, int);
+ method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]);
method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
method public void onStopNestedScroll(android.view.View, int);
diff --git a/swiperefreshlayout/swiperefreshlayout/api/restricted_current.txt b/swiperefreshlayout/swiperefreshlayout/api/restricted_current.txt
index b10ae26..aee2a54 100644
--- a/swiperefreshlayout/swiperefreshlayout/api/restricted_current.txt
+++ b/swiperefreshlayout/swiperefreshlayout/api/restricted_current.txt
@@ -45,8 +45,8 @@
ctor public SwipeRefreshLayout(android.content.Context, android.util.AttributeSet?);
method public boolean canChildScrollUp();
method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, int);
- method public void dispatchNestedScroll(int, int, int, int, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int, int[]);
method public boolean dispatchNestedScroll(int, int, int, int, int[]?, int);
+ method public void dispatchNestedScroll(int, int, int, int, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int, int[]);
method public int getProgressCircleDiameter();
method public int getProgressViewEndOffset();
method public int getProgressViewStartOffset();
@@ -54,8 +54,8 @@
method public boolean isRefreshing();
method public void onMeasure(int, int);
method public void onNestedPreScroll(android.view.View, int, int, int[], int);
- method public void onNestedScroll(android.view.View, int, int, int, int, @androidx.core.view.ViewCompat.NestedScrollType int, int[]);
method public void onNestedScroll(android.view.View, int, int, int, int, int);
+ method public void onNestedScroll(android.view.View, int, int, int, int, @androidx.core.view.ViewCompat.NestedScrollType int, int[]);
method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
method public void onStopNestedScroll(android.view.View, int);
diff --git a/swiperefreshlayout/swiperefreshlayout/build.gradle b/swiperefreshlayout/swiperefreshlayout/build.gradle
index 8450677..a80a5e5 100644
--- a/swiperefreshlayout/swiperefreshlayout/build.gradle
+++ b/swiperefreshlayout/swiperefreshlayout/build.gradle
@@ -30,7 +30,7 @@
}
androidx {
- name = "Android Support Library Custom View"
+ name = "Swipe Refresh Layout"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later."
diff --git a/test/ext/junit-gtest/build.gradle b/test/ext/junit-gtest/build.gradle
index be6c1fd..868ab98 100644
--- a/test/ext/junit-gtest/build.gradle
+++ b/test/ext/junit-gtest/build.gradle
@@ -34,7 +34,7 @@
}
androidx {
- name = "AndroidX JUnit GTest"
+ name = "JUnit GTest"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2022"
description = "Run GTest tests on Android devices"
diff --git a/test/screenshot/screenshot/build.gradle b/test/screenshot/screenshot/build.gradle
index 7147d25..69303c3 100644
--- a/test/screenshot/screenshot/build.gradle
+++ b/test/screenshot/screenshot/build.gradle
@@ -46,7 +46,7 @@
}
androidx {
- name = "AndroidX Library Screenshot Test"
+ name = "Screenshot Test"
type = LibraryType.INTERNAL_TEST_LIBRARY
}
diff --git a/test/screenshot/screenshot/src/androidTest/java/androidx/test/screenshot/ScreenshotTestRuleTest.kt b/test/screenshot/screenshot/src/androidTest/java/androidx/test/screenshot/ScreenshotTestRuleTest.kt
index 0275075..3dc6acb 100644
--- a/test/screenshot/screenshot/src/androidTest/java/androidx/test/screenshot/ScreenshotTestRuleTest.kt
+++ b/test/screenshot/screenshot/src/androidTest/java/androidx/test/screenshot/ScreenshotTestRuleTest.kt
@@ -25,12 +25,12 @@
import androidx.test.screenshot.matchers.PixelPerfectMatcher
import androidx.test.screenshot.utils.loadBitmap
import com.google.common.truth.Truth.assertThat
+import java.lang.AssertionError
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.lang.AssertionError
@RunWith(AndroidJUnit4::class)
@MediumTest
diff --git a/test/screenshot/screenshot/src/main/java/androidx/test/screenshot/ScreenshotTestRule.kt b/test/screenshot/screenshot/src/main/java/androidx/test/screenshot/ScreenshotTestRule.kt
index 132b215..7cbd8db 100644
--- a/test/screenshot/screenshot/src/main/java/androidx/test/screenshot/ScreenshotTestRule.kt
+++ b/test/screenshot/screenshot/src/main/java/androidx/test/screenshot/ScreenshotTestRule.kt
@@ -28,15 +28,15 @@
import androidx.test.screenshot.matchers.PixelPerfectMatcher
import androidx.test.screenshot.proto.ScreenshotResultProto
import androidx.test.screenshot.proto.ScreenshotResultProto.ScreenshotResult.Status
+import java.io.File
+import java.io.FileNotFoundException
+import java.io.FileOutputStream
+import java.io.IOException
import org.junit.Assume
import org.junit.rules.TestRule
import org.junit.rules.TestWatcher
import org.junit.runner.Description
import org.junit.runners.model.Statement
-import java.io.File
-import java.io.FileNotFoundException
-import java.io.FileOutputStream
-import java.io.IOException
/**
* Config for [ScreenshotTestRule].
diff --git a/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/BaseTest.java b/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/BaseTest.java
index 67decb1..da92d0f 100644
--- a/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/BaseTest.java
+++ b/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/BaseTest.java
@@ -22,6 +22,7 @@
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
+import android.util.Log;
import androidx.annotation.NonNull;
import androidx.test.core.app.ApplicationProvider;
@@ -34,9 +35,14 @@
import androidx.test.uiautomator.Until;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.function.ThrowingRunnable;
+import org.junit.rules.TestWatcher;
+import org.junit.runner.Description;
import org.junit.runner.RunWith;
+import java.io.ByteArrayOutputStream;
+
@RunWith(AndroidJUnit4.class)
public abstract class BaseTest {
@@ -45,6 +51,20 @@
protected static final int DEFAULT_FLAGS =
Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK;
+ // Dumps the UI hierarchy to logcat on failure.
+ @Rule
+ public TestWatcher mDumpHierarchyWatcher = new TestWatcher() {
+ @Override
+ protected void failed(Throwable t, Description description) {
+ try (ByteArrayOutputStream stream = new ByteArrayOutputStream()) {
+ mDevice.dumpWindowHierarchy(stream);
+ Log.w(description.getTestClass().getSimpleName(), stream.toString());
+ } catch (Exception e) {
+ Log.e(description.getTestClass().getSimpleName(), "Failed to dump hierarchy", e);
+ }
+ }
+ };
+
protected UiDevice mDevice;
@Before
diff --git a/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/BySelectorTest.java b/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/BySelectorTest.java
index dfc9684..284c3a4 100644
--- a/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/BySelectorTest.java
+++ b/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/BySelectorTest.java
@@ -23,6 +23,7 @@
import android.widget.Button;
import android.widget.TextView;
+import androidx.test.filters.SdkSuppress;
import androidx.test.uiautomator.By;
import androidx.test.uiautomator.BySelector;
import androidx.test.uiautomator.UiObject2;
@@ -188,6 +189,47 @@
}
@Test
+ @SdkSuppress(minSdkVersion = 26)
+ public void testHint() {
+ launchTestActivity(HintTestActivity.class);
+
+ // Single string as the exact content of the hint.
+ assertTrue(mDevice.hasObject(By.hint("sample_hint")));
+ assertFalse(mDevice.hasObject(By.hint("hint")));
+
+ // Pattern of the hint.
+ assertTrue(mDevice.hasObject(By.hint(Pattern.compile(".*hint.*", Pattern.DOTALL))));
+ assertFalse(mDevice.hasObject(By.hint(Pattern.compile(".*not_hint.*", Pattern.DOTALL))));
+ }
+
+ @Test
+ @SdkSuppress(minSdkVersion = 26)
+ public void testHintContains() {
+ launchTestActivity(HintTestActivity.class);
+
+ assertTrue(mDevice.hasObject(By.hintContains("hint")));
+ assertFalse(mDevice.hasObject(By.hintContains("not_hint")));
+ }
+
+ @Test
+ @SdkSuppress(minSdkVersion = 26)
+ public void testHintStartsWith() {
+ launchTestActivity(HintTestActivity.class);
+
+ assertTrue(mDevice.hasObject(By.hintStartsWith("sample")));
+ assertFalse(mDevice.hasObject(By.hintStartsWith("not_sample")));
+ }
+
+ @Test
+ @SdkSuppress(minSdkVersion = 26)
+ public void testHintEndsWith() {
+ launchTestActivity(HintTestActivity.class);
+
+ assertTrue(mDevice.hasObject(By.hintEndsWith("hint")));
+ assertFalse(mDevice.hasObject(By.hintEndsWith("hint_not")));
+ }
+
+ @Test
public void testCheckable() {
launchTestActivity(BySelectorTestActivity.class);
diff --git a/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/UiDeviceTest.java b/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/UiDeviceTest.java
index 0e7dd93..f14e6e6 100644
--- a/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/UiDeviceTest.java
+++ b/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/UiDeviceTest.java
@@ -36,7 +36,6 @@
import androidx.test.uiautomator.UiObject2;
import androidx.test.uiautomator.Until;
-import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -59,6 +58,7 @@
public class UiDeviceTest extends BaseTest {
private static final long TIMEOUT_MS = 5_000;
+ private static final long LONG_TIMEOUT_MS = 30_000;
private static final String PACKAGE_NAME = "androidx.test.uiautomator.testapp";
// Defined in 'AndroidManifest.xml'.
private static final String APP_NAME = "UiAutomator Test App";
@@ -243,15 +243,15 @@
assertEquals("keycode Z pressed with meta shift left on", textView.getText());
}
- @Ignore // b/266617096
@Test
public void testPressRecentApps() throws Exception {
launchTestActivity(MainActivity.class);
- // Test app appears in the "Recent Apps" screen after pressing button.
- assertFalse(mDevice.wait(Until.hasObject(By.desc(APP_NAME)), TIMEOUT_MS));
+ // Test app appears in the "Recent Apps" screen after pressing button (may need to wait
+ // for a tooltip that shows up the first time the screen is opened).
+ assertFalse(mDevice.hasObject(By.desc(APP_NAME)));
mDevice.pressRecentApps();
- assertTrue(mDevice.wait(Until.hasObject(By.desc(APP_NAME)), TIMEOUT_MS));
+ assertTrue(mDevice.wait(Until.hasObject(By.desc(APP_NAME)), LONG_TIMEOUT_MS));
}
@Test
@@ -354,7 +354,6 @@
}
@Test
- @Ignore("b/280669851")
public void testSetOrientationLeft() throws Exception {
launchTestActivity(KeycodeTestActivity.class);
try {
@@ -373,7 +372,6 @@
}
@Test
- @Ignore("b/280669851")
public void testSetOrientationRight() throws Exception {
launchTestActivity(KeycodeTestActivity.class);
try {
@@ -403,7 +401,6 @@
}
@Test
- @Ignore("b/280669851")
public void testSetOrientationLandscape() throws Exception {
launchTestActivity(KeycodeTestActivity.class);
try {
diff --git a/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/UiObject2Test.java b/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/UiObject2Test.java
index bb9f70b..94e12f0 100644
--- a/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/UiObject2Test.java
+++ b/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/UiObject2Test.java
@@ -329,6 +329,18 @@
}
@Test
+ @SdkSuppress(minSdkVersion = 26)
+ public void testGetHint() {
+ launchTestActivity(HintTestActivity.class);
+
+ UiObject2 hintNotSetObj = mDevice.findObject(By.res(TEST_APP, "hint_not_set"));
+ UiObject2 hintSetObj = mDevice.findObject(By.res(TEST_APP, "hint_set"));
+
+ assertNull(hintNotSetObj.getHint());
+ assertEquals("sample_hint", hintSetObj.getHint());
+ }
+
+ @Test
public void testGetVisibleBounds() {
launchTestActivity(VisibleBoundsTestActivity.class);
diff --git a/test/uiautomator/integration-tests/testapp/src/main/AndroidManifest.xml b/test/uiautomator/integration-tests/testapp/src/main/AndroidManifest.xml
index 01557b8..651dba2 100644
--- a/test/uiautomator/integration-tests/testapp/src/main/AndroidManifest.xml
+++ b/test/uiautomator/integration-tests/testapp/src/main/AndroidManifest.xml
@@ -92,6 +92,13 @@
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
+ <activity android:name=".HintTestActivity"
+ android:exported="true"
+ android:theme="@android:style/Theme.Holo.NoActionBar">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ </intent-filter>
+ </activity>
<activity android:name=".HorizontalScrollTestActivity"
android:exported="true"
android:theme="@android:style/Theme.Holo.NoActionBar">
diff --git a/wear/compose/compose-material/src/androidMain/kotlin/androidx/wear/compose/material/DefaultPlatformTextStyle.android.kt b/test/uiautomator/integration-tests/testapp/src/main/java/androidx/test/uiautomator/testapp/HintTestActivity.java
similarity index 62%
rename from wear/compose/compose-material/src/androidMain/kotlin/androidx/wear/compose/material/DefaultPlatformTextStyle.android.kt
rename to test/uiautomator/integration-tests/testapp/src/main/java/androidx/test/uiautomator/testapp/HintTestActivity.java
index 5365a53..40c7374 100644
--- a/wear/compose/compose-material/src/androidMain/kotlin/androidx/wear/compose/material/DefaultPlatformTextStyle.android.kt
+++ b/test/uiautomator/integration-tests/testapp/src/main/java/androidx/test/uiautomator/testapp/HintTestActivity.java
@@ -14,14 +14,19 @@
* limitations under the License.
*/
-package androidx.wear.compose.material
+package androidx.test.uiautomator.testapp;
-import androidx.compose.ui.text.PlatformTextStyle
+import android.app.Activity;
+import android.os.Bundle;
-private const val DefaultIncludeFontPadding = true
+import androidx.annotation.Nullable;
-@Suppress("DEPRECATION")
-private val DefaultPlatformTextStyle = PlatformTextStyle(
- includeFontPadding = DefaultIncludeFontPadding
-)
-internal actual fun defaultPlatformTextStyle(): PlatformTextStyle? = DefaultPlatformTextStyle
\ No newline at end of file
+public class HintTestActivity extends Activity {
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setContentView(R.layout.hint_test_activity);
+ }
+}
diff --git a/test/uiautomator/integration-tests/testapp/src/main/res/layout/hint_test_activity.xml b/test/uiautomator/integration-tests/testapp/src/main/res/layout/hint_test_activity.xml
new file mode 100644
index 0000000..073dc3a
--- /dev/null
+++ b/test/uiautomator/integration-tests/testapp/src/main/res/layout/hint_test_activity.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+ Copyright 2023 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
+
+ http://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.
+ -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ tools:context=".HintTestActivity">
+
+ <EditText
+ android:id="@+id/hint_set"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:inputType="text"
+ android:hint="sample_hint" />
+
+ <EditText
+ android:id="@+id/hint_not_set"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:inputType="text" />
+
+</LinearLayout>
\ No newline at end of file
diff --git a/test/uiautomator/uiautomator/api/current.txt b/test/uiautomator/uiautomator/api/current.txt
index 0c09ca5..f479f1e 100644
--- a/test/uiautomator/uiautomator/api/current.txt
+++ b/test/uiautomator/uiautomator/api/current.txt
@@ -4,9 +4,9 @@
public class By {
method public static androidx.test.uiautomator.BySelector checkable(boolean);
method public static androidx.test.uiautomator.BySelector checked(boolean);
+ method public static androidx.test.uiautomator.BySelector clazz(Class);
method public static androidx.test.uiautomator.BySelector clazz(String);
method public static androidx.test.uiautomator.BySelector clazz(String, String);
- method public static androidx.test.uiautomator.BySelector clazz(Class);
method public static androidx.test.uiautomator.BySelector clazz(java.util.regex.Pattern);
method public static androidx.test.uiautomator.BySelector clickable(boolean);
method public static androidx.test.uiautomator.BySelector copy(androidx.test.uiautomator.BySelector);
@@ -25,6 +25,11 @@
method public static androidx.test.uiautomator.BySelector hasDescendant(androidx.test.uiautomator.BySelector);
method public static androidx.test.uiautomator.BySelector hasDescendant(androidx.test.uiautomator.BySelector, int);
method public static androidx.test.uiautomator.BySelector hasParent(androidx.test.uiautomator.BySelector);
+ method @RequiresApi(26) public static androidx.test.uiautomator.BySelector hint(String);
+ method @RequiresApi(26) public static androidx.test.uiautomator.BySelector hint(java.util.regex.Pattern);
+ method @RequiresApi(26) public static androidx.test.uiautomator.BySelector hintContains(String);
+ method @RequiresApi(26) public static androidx.test.uiautomator.BySelector hintEndsWith(String);
+ method @RequiresApi(26) public static androidx.test.uiautomator.BySelector hintStartsWith(String);
method public static androidx.test.uiautomator.BySelector longClickable(boolean);
method public static androidx.test.uiautomator.BySelector pkg(String);
method public static androidx.test.uiautomator.BySelector pkg(java.util.regex.Pattern);
@@ -43,9 +48,9 @@
public class BySelector {
method public androidx.test.uiautomator.BySelector checkable(boolean);
method public androidx.test.uiautomator.BySelector checked(boolean);
+ method public androidx.test.uiautomator.BySelector clazz(Class);
method public androidx.test.uiautomator.BySelector clazz(String);
method public androidx.test.uiautomator.BySelector clazz(String, String);
- method public androidx.test.uiautomator.BySelector clazz(Class);
method public androidx.test.uiautomator.BySelector clazz(java.util.regex.Pattern);
method public androidx.test.uiautomator.BySelector clickable(boolean);
method public androidx.test.uiautomator.BySelector depth(int);
@@ -64,6 +69,11 @@
method public androidx.test.uiautomator.BySelector hasDescendant(androidx.test.uiautomator.BySelector);
method public androidx.test.uiautomator.BySelector hasDescendant(androidx.test.uiautomator.BySelector, int);
method public androidx.test.uiautomator.BySelector hasParent(androidx.test.uiautomator.BySelector);
+ method @RequiresApi(26) public androidx.test.uiautomator.BySelector hint(String);
+ method @RequiresApi(26) public androidx.test.uiautomator.BySelector hint(java.util.regex.Pattern);
+ method @RequiresApi(26) public androidx.test.uiautomator.BySelector hintContains(String);
+ method @RequiresApi(26) public androidx.test.uiautomator.BySelector hintEndsWith(String);
+ method @RequiresApi(26) public androidx.test.uiautomator.BySelector hintStartsWith(String);
method public androidx.test.uiautomator.BySelector longClickable(boolean);
method public androidx.test.uiautomator.BySelector maxDepth(int);
method public androidx.test.uiautomator.BySelector minDepth(int);
@@ -154,11 +164,11 @@
method public void clearLastTraversedText();
method public boolean click(int, int);
method public boolean drag(int, int, int, int, int);
- method @Deprecated public void dumpWindowHierarchy(String);
method public void dumpWindowHierarchy(java.io.File) throws java.io.IOException;
method public void dumpWindowHierarchy(java.io.OutputStream) throws java.io.IOException;
- method public androidx.test.uiautomator.UiObject findObject(androidx.test.uiautomator.UiSelector);
+ method @Deprecated public void dumpWindowHierarchy(String);
method public androidx.test.uiautomator.UiObject2! findObject(androidx.test.uiautomator.BySelector);
+ method public androidx.test.uiautomator.UiObject findObject(androidx.test.uiautomator.UiSelector);
method public java.util.List<androidx.test.uiautomator.UiObject2!> findObjects(androidx.test.uiautomator.BySelector);
method public void freezeRotation() throws android.os.RemoteException;
method @Deprecated public String! getCurrentActivityName();
@@ -208,8 +218,8 @@
method public void setOrientationPortrait() throws android.os.RemoteException;
method public void setOrientationRight() throws android.os.RemoteException;
method public void sleep() throws android.os.RemoteException;
- method public boolean swipe(int, int, int, int, int);
method public boolean swipe(android.graphics.Point![], int);
+ method public boolean swipe(int, int, int, int, int);
method public boolean takeScreenshot(java.io.File);
method public boolean takeScreenshot(java.io.File, float, int);
method public void unfreezeRotation() throws android.os.RemoteException;
@@ -277,10 +287,10 @@
method public void clear();
method public void click();
method public void click(android.graphics.Point);
- method public void click(long);
method public void click(android.graphics.Point, long);
- method public <U> U! clickAndWait(androidx.test.uiautomator.EventCondition<U!>, long);
+ method public void click(long);
method public <U> U! clickAndWait(android.graphics.Point, androidx.test.uiautomator.EventCondition<U!>, long);
+ method public <U> U! clickAndWait(androidx.test.uiautomator.EventCondition<U!>, long);
method public void drag(android.graphics.Point);
method public void drag(android.graphics.Point, int);
method public androidx.test.uiautomator.UiObject2! findObject(androidx.test.uiautomator.BySelector);
@@ -293,6 +303,7 @@
method public String! getClassName();
method public String! getContentDescription();
method public int getDisplayId();
+ method @RequiresApi(26) public String? getHint();
method public androidx.test.uiautomator.UiObject2! getParent();
method public String! getResourceName();
method public String! getText();
@@ -357,10 +368,10 @@
method public boolean scrollIntoView(androidx.test.uiautomator.UiObject) throws androidx.test.uiautomator.UiObjectNotFoundException;
method public boolean scrollIntoView(androidx.test.uiautomator.UiSelector) throws androidx.test.uiautomator.UiObjectNotFoundException;
method public boolean scrollTextIntoView(String) throws androidx.test.uiautomator.UiObjectNotFoundException;
- method public boolean scrollToBeginning(int, int) throws androidx.test.uiautomator.UiObjectNotFoundException;
method public boolean scrollToBeginning(int) throws androidx.test.uiautomator.UiObjectNotFoundException;
- method public boolean scrollToEnd(int, int) throws androidx.test.uiautomator.UiObjectNotFoundException;
+ method public boolean scrollToBeginning(int, int) throws androidx.test.uiautomator.UiObjectNotFoundException;
method public boolean scrollToEnd(int) throws androidx.test.uiautomator.UiObjectNotFoundException;
+ method public boolean scrollToEnd(int, int) throws androidx.test.uiautomator.UiObjectNotFoundException;
method public androidx.test.uiautomator.UiScrollable setAsHorizontalList();
method public androidx.test.uiautomator.UiScrollable setAsVerticalList();
method public androidx.test.uiautomator.UiScrollable setMaxSearchSwipes(int);
@@ -372,8 +383,8 @@
method public androidx.test.uiautomator.UiSelector checkable(boolean);
method public androidx.test.uiautomator.UiSelector checked(boolean);
method public androidx.test.uiautomator.UiSelector childSelector(androidx.test.uiautomator.UiSelector);
- method public androidx.test.uiautomator.UiSelector className(String);
method public <T> androidx.test.uiautomator.UiSelector className(Class<T!>);
+ method public androidx.test.uiautomator.UiSelector className(String);
method public androidx.test.uiautomator.UiSelector classNameMatches(String);
method public androidx.test.uiautomator.UiSelector clickable(boolean);
method protected androidx.test.uiautomator.UiSelector cloneSelector();
@@ -411,8 +422,8 @@
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> descContains(String);
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> descEndsWith(String);
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> descEquals(String);
- method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> descMatches(java.util.regex.Pattern);
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> descMatches(String);
+ method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> descMatches(java.util.regex.Pattern);
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> descStartsWith(String);
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> enabled(boolean);
method public static androidx.test.uiautomator.SearchCondition<androidx.test.uiautomator.UiObject2!> findObject(androidx.test.uiautomator.BySelector);
@@ -429,8 +440,8 @@
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> textContains(String);
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> textEndsWith(String);
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> textEquals(String);
- method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> textMatches(java.util.regex.Pattern);
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> textMatches(String);
+ method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> textMatches(java.util.regex.Pattern);
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> textNotEquals(String);
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> textStartsWith(String);
}
diff --git a/test/uiautomator/uiautomator/api/public_plus_experimental_current.txt b/test/uiautomator/uiautomator/api/public_plus_experimental_current.txt
index 0c09ca5..f479f1e 100644
--- a/test/uiautomator/uiautomator/api/public_plus_experimental_current.txt
+++ b/test/uiautomator/uiautomator/api/public_plus_experimental_current.txt
@@ -4,9 +4,9 @@
public class By {
method public static androidx.test.uiautomator.BySelector checkable(boolean);
method public static androidx.test.uiautomator.BySelector checked(boolean);
+ method public static androidx.test.uiautomator.BySelector clazz(Class);
method public static androidx.test.uiautomator.BySelector clazz(String);
method public static androidx.test.uiautomator.BySelector clazz(String, String);
- method public static androidx.test.uiautomator.BySelector clazz(Class);
method public static androidx.test.uiautomator.BySelector clazz(java.util.regex.Pattern);
method public static androidx.test.uiautomator.BySelector clickable(boolean);
method public static androidx.test.uiautomator.BySelector copy(androidx.test.uiautomator.BySelector);
@@ -25,6 +25,11 @@
method public static androidx.test.uiautomator.BySelector hasDescendant(androidx.test.uiautomator.BySelector);
method public static androidx.test.uiautomator.BySelector hasDescendant(androidx.test.uiautomator.BySelector, int);
method public static androidx.test.uiautomator.BySelector hasParent(androidx.test.uiautomator.BySelector);
+ method @RequiresApi(26) public static androidx.test.uiautomator.BySelector hint(String);
+ method @RequiresApi(26) public static androidx.test.uiautomator.BySelector hint(java.util.regex.Pattern);
+ method @RequiresApi(26) public static androidx.test.uiautomator.BySelector hintContains(String);
+ method @RequiresApi(26) public static androidx.test.uiautomator.BySelector hintEndsWith(String);
+ method @RequiresApi(26) public static androidx.test.uiautomator.BySelector hintStartsWith(String);
method public static androidx.test.uiautomator.BySelector longClickable(boolean);
method public static androidx.test.uiautomator.BySelector pkg(String);
method public static androidx.test.uiautomator.BySelector pkg(java.util.regex.Pattern);
@@ -43,9 +48,9 @@
public class BySelector {
method public androidx.test.uiautomator.BySelector checkable(boolean);
method public androidx.test.uiautomator.BySelector checked(boolean);
+ method public androidx.test.uiautomator.BySelector clazz(Class);
method public androidx.test.uiautomator.BySelector clazz(String);
method public androidx.test.uiautomator.BySelector clazz(String, String);
- method public androidx.test.uiautomator.BySelector clazz(Class);
method public androidx.test.uiautomator.BySelector clazz(java.util.regex.Pattern);
method public androidx.test.uiautomator.BySelector clickable(boolean);
method public androidx.test.uiautomator.BySelector depth(int);
@@ -64,6 +69,11 @@
method public androidx.test.uiautomator.BySelector hasDescendant(androidx.test.uiautomator.BySelector);
method public androidx.test.uiautomator.BySelector hasDescendant(androidx.test.uiautomator.BySelector, int);
method public androidx.test.uiautomator.BySelector hasParent(androidx.test.uiautomator.BySelector);
+ method @RequiresApi(26) public androidx.test.uiautomator.BySelector hint(String);
+ method @RequiresApi(26) public androidx.test.uiautomator.BySelector hint(java.util.regex.Pattern);
+ method @RequiresApi(26) public androidx.test.uiautomator.BySelector hintContains(String);
+ method @RequiresApi(26) public androidx.test.uiautomator.BySelector hintEndsWith(String);
+ method @RequiresApi(26) public androidx.test.uiautomator.BySelector hintStartsWith(String);
method public androidx.test.uiautomator.BySelector longClickable(boolean);
method public androidx.test.uiautomator.BySelector maxDepth(int);
method public androidx.test.uiautomator.BySelector minDepth(int);
@@ -154,11 +164,11 @@
method public void clearLastTraversedText();
method public boolean click(int, int);
method public boolean drag(int, int, int, int, int);
- method @Deprecated public void dumpWindowHierarchy(String);
method public void dumpWindowHierarchy(java.io.File) throws java.io.IOException;
method public void dumpWindowHierarchy(java.io.OutputStream) throws java.io.IOException;
- method public androidx.test.uiautomator.UiObject findObject(androidx.test.uiautomator.UiSelector);
+ method @Deprecated public void dumpWindowHierarchy(String);
method public androidx.test.uiautomator.UiObject2! findObject(androidx.test.uiautomator.BySelector);
+ method public androidx.test.uiautomator.UiObject findObject(androidx.test.uiautomator.UiSelector);
method public java.util.List<androidx.test.uiautomator.UiObject2!> findObjects(androidx.test.uiautomator.BySelector);
method public void freezeRotation() throws android.os.RemoteException;
method @Deprecated public String! getCurrentActivityName();
@@ -208,8 +218,8 @@
method public void setOrientationPortrait() throws android.os.RemoteException;
method public void setOrientationRight() throws android.os.RemoteException;
method public void sleep() throws android.os.RemoteException;
- method public boolean swipe(int, int, int, int, int);
method public boolean swipe(android.graphics.Point![], int);
+ method public boolean swipe(int, int, int, int, int);
method public boolean takeScreenshot(java.io.File);
method public boolean takeScreenshot(java.io.File, float, int);
method public void unfreezeRotation() throws android.os.RemoteException;
@@ -277,10 +287,10 @@
method public void clear();
method public void click();
method public void click(android.graphics.Point);
- method public void click(long);
method public void click(android.graphics.Point, long);
- method public <U> U! clickAndWait(androidx.test.uiautomator.EventCondition<U!>, long);
+ method public void click(long);
method public <U> U! clickAndWait(android.graphics.Point, androidx.test.uiautomator.EventCondition<U!>, long);
+ method public <U> U! clickAndWait(androidx.test.uiautomator.EventCondition<U!>, long);
method public void drag(android.graphics.Point);
method public void drag(android.graphics.Point, int);
method public androidx.test.uiautomator.UiObject2! findObject(androidx.test.uiautomator.BySelector);
@@ -293,6 +303,7 @@
method public String! getClassName();
method public String! getContentDescription();
method public int getDisplayId();
+ method @RequiresApi(26) public String? getHint();
method public androidx.test.uiautomator.UiObject2! getParent();
method public String! getResourceName();
method public String! getText();
@@ -357,10 +368,10 @@
method public boolean scrollIntoView(androidx.test.uiautomator.UiObject) throws androidx.test.uiautomator.UiObjectNotFoundException;
method public boolean scrollIntoView(androidx.test.uiautomator.UiSelector) throws androidx.test.uiautomator.UiObjectNotFoundException;
method public boolean scrollTextIntoView(String) throws androidx.test.uiautomator.UiObjectNotFoundException;
- method public boolean scrollToBeginning(int, int) throws androidx.test.uiautomator.UiObjectNotFoundException;
method public boolean scrollToBeginning(int) throws androidx.test.uiautomator.UiObjectNotFoundException;
- method public boolean scrollToEnd(int, int) throws androidx.test.uiautomator.UiObjectNotFoundException;
+ method public boolean scrollToBeginning(int, int) throws androidx.test.uiautomator.UiObjectNotFoundException;
method public boolean scrollToEnd(int) throws androidx.test.uiautomator.UiObjectNotFoundException;
+ method public boolean scrollToEnd(int, int) throws androidx.test.uiautomator.UiObjectNotFoundException;
method public androidx.test.uiautomator.UiScrollable setAsHorizontalList();
method public androidx.test.uiautomator.UiScrollable setAsVerticalList();
method public androidx.test.uiautomator.UiScrollable setMaxSearchSwipes(int);
@@ -372,8 +383,8 @@
method public androidx.test.uiautomator.UiSelector checkable(boolean);
method public androidx.test.uiautomator.UiSelector checked(boolean);
method public androidx.test.uiautomator.UiSelector childSelector(androidx.test.uiautomator.UiSelector);
- method public androidx.test.uiautomator.UiSelector className(String);
method public <T> androidx.test.uiautomator.UiSelector className(Class<T!>);
+ method public androidx.test.uiautomator.UiSelector className(String);
method public androidx.test.uiautomator.UiSelector classNameMatches(String);
method public androidx.test.uiautomator.UiSelector clickable(boolean);
method protected androidx.test.uiautomator.UiSelector cloneSelector();
@@ -411,8 +422,8 @@
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> descContains(String);
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> descEndsWith(String);
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> descEquals(String);
- method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> descMatches(java.util.regex.Pattern);
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> descMatches(String);
+ method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> descMatches(java.util.regex.Pattern);
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> descStartsWith(String);
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> enabled(boolean);
method public static androidx.test.uiautomator.SearchCondition<androidx.test.uiautomator.UiObject2!> findObject(androidx.test.uiautomator.BySelector);
@@ -429,8 +440,8 @@
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> textContains(String);
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> textEndsWith(String);
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> textEquals(String);
- method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> textMatches(java.util.regex.Pattern);
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> textMatches(String);
+ method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> textMatches(java.util.regex.Pattern);
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> textNotEquals(String);
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> textStartsWith(String);
}
diff --git a/test/uiautomator/uiautomator/api/restricted_current.txt b/test/uiautomator/uiautomator/api/restricted_current.txt
index 0c09ca5..f479f1e 100644
--- a/test/uiautomator/uiautomator/api/restricted_current.txt
+++ b/test/uiautomator/uiautomator/api/restricted_current.txt
@@ -4,9 +4,9 @@
public class By {
method public static androidx.test.uiautomator.BySelector checkable(boolean);
method public static androidx.test.uiautomator.BySelector checked(boolean);
+ method public static androidx.test.uiautomator.BySelector clazz(Class);
method public static androidx.test.uiautomator.BySelector clazz(String);
method public static androidx.test.uiautomator.BySelector clazz(String, String);
- method public static androidx.test.uiautomator.BySelector clazz(Class);
method public static androidx.test.uiautomator.BySelector clazz(java.util.regex.Pattern);
method public static androidx.test.uiautomator.BySelector clickable(boolean);
method public static androidx.test.uiautomator.BySelector copy(androidx.test.uiautomator.BySelector);
@@ -25,6 +25,11 @@
method public static androidx.test.uiautomator.BySelector hasDescendant(androidx.test.uiautomator.BySelector);
method public static androidx.test.uiautomator.BySelector hasDescendant(androidx.test.uiautomator.BySelector, int);
method public static androidx.test.uiautomator.BySelector hasParent(androidx.test.uiautomator.BySelector);
+ method @RequiresApi(26) public static androidx.test.uiautomator.BySelector hint(String);
+ method @RequiresApi(26) public static androidx.test.uiautomator.BySelector hint(java.util.regex.Pattern);
+ method @RequiresApi(26) public static androidx.test.uiautomator.BySelector hintContains(String);
+ method @RequiresApi(26) public static androidx.test.uiautomator.BySelector hintEndsWith(String);
+ method @RequiresApi(26) public static androidx.test.uiautomator.BySelector hintStartsWith(String);
method public static androidx.test.uiautomator.BySelector longClickable(boolean);
method public static androidx.test.uiautomator.BySelector pkg(String);
method public static androidx.test.uiautomator.BySelector pkg(java.util.regex.Pattern);
@@ -43,9 +48,9 @@
public class BySelector {
method public androidx.test.uiautomator.BySelector checkable(boolean);
method public androidx.test.uiautomator.BySelector checked(boolean);
+ method public androidx.test.uiautomator.BySelector clazz(Class);
method public androidx.test.uiautomator.BySelector clazz(String);
method public androidx.test.uiautomator.BySelector clazz(String, String);
- method public androidx.test.uiautomator.BySelector clazz(Class);
method public androidx.test.uiautomator.BySelector clazz(java.util.regex.Pattern);
method public androidx.test.uiautomator.BySelector clickable(boolean);
method public androidx.test.uiautomator.BySelector depth(int);
@@ -64,6 +69,11 @@
method public androidx.test.uiautomator.BySelector hasDescendant(androidx.test.uiautomator.BySelector);
method public androidx.test.uiautomator.BySelector hasDescendant(androidx.test.uiautomator.BySelector, int);
method public androidx.test.uiautomator.BySelector hasParent(androidx.test.uiautomator.BySelector);
+ method @RequiresApi(26) public androidx.test.uiautomator.BySelector hint(String);
+ method @RequiresApi(26) public androidx.test.uiautomator.BySelector hint(java.util.regex.Pattern);
+ method @RequiresApi(26) public androidx.test.uiautomator.BySelector hintContains(String);
+ method @RequiresApi(26) public androidx.test.uiautomator.BySelector hintEndsWith(String);
+ method @RequiresApi(26) public androidx.test.uiautomator.BySelector hintStartsWith(String);
method public androidx.test.uiautomator.BySelector longClickable(boolean);
method public androidx.test.uiautomator.BySelector maxDepth(int);
method public androidx.test.uiautomator.BySelector minDepth(int);
@@ -154,11 +164,11 @@
method public void clearLastTraversedText();
method public boolean click(int, int);
method public boolean drag(int, int, int, int, int);
- method @Deprecated public void dumpWindowHierarchy(String);
method public void dumpWindowHierarchy(java.io.File) throws java.io.IOException;
method public void dumpWindowHierarchy(java.io.OutputStream) throws java.io.IOException;
- method public androidx.test.uiautomator.UiObject findObject(androidx.test.uiautomator.UiSelector);
+ method @Deprecated public void dumpWindowHierarchy(String);
method public androidx.test.uiautomator.UiObject2! findObject(androidx.test.uiautomator.BySelector);
+ method public androidx.test.uiautomator.UiObject findObject(androidx.test.uiautomator.UiSelector);
method public java.util.List<androidx.test.uiautomator.UiObject2!> findObjects(androidx.test.uiautomator.BySelector);
method public void freezeRotation() throws android.os.RemoteException;
method @Deprecated public String! getCurrentActivityName();
@@ -208,8 +218,8 @@
method public void setOrientationPortrait() throws android.os.RemoteException;
method public void setOrientationRight() throws android.os.RemoteException;
method public void sleep() throws android.os.RemoteException;
- method public boolean swipe(int, int, int, int, int);
method public boolean swipe(android.graphics.Point![], int);
+ method public boolean swipe(int, int, int, int, int);
method public boolean takeScreenshot(java.io.File);
method public boolean takeScreenshot(java.io.File, float, int);
method public void unfreezeRotation() throws android.os.RemoteException;
@@ -277,10 +287,10 @@
method public void clear();
method public void click();
method public void click(android.graphics.Point);
- method public void click(long);
method public void click(android.graphics.Point, long);
- method public <U> U! clickAndWait(androidx.test.uiautomator.EventCondition<U!>, long);
+ method public void click(long);
method public <U> U! clickAndWait(android.graphics.Point, androidx.test.uiautomator.EventCondition<U!>, long);
+ method public <U> U! clickAndWait(androidx.test.uiautomator.EventCondition<U!>, long);
method public void drag(android.graphics.Point);
method public void drag(android.graphics.Point, int);
method public androidx.test.uiautomator.UiObject2! findObject(androidx.test.uiautomator.BySelector);
@@ -293,6 +303,7 @@
method public String! getClassName();
method public String! getContentDescription();
method public int getDisplayId();
+ method @RequiresApi(26) public String? getHint();
method public androidx.test.uiautomator.UiObject2! getParent();
method public String! getResourceName();
method public String! getText();
@@ -357,10 +368,10 @@
method public boolean scrollIntoView(androidx.test.uiautomator.UiObject) throws androidx.test.uiautomator.UiObjectNotFoundException;
method public boolean scrollIntoView(androidx.test.uiautomator.UiSelector) throws androidx.test.uiautomator.UiObjectNotFoundException;
method public boolean scrollTextIntoView(String) throws androidx.test.uiautomator.UiObjectNotFoundException;
- method public boolean scrollToBeginning(int, int) throws androidx.test.uiautomator.UiObjectNotFoundException;
method public boolean scrollToBeginning(int) throws androidx.test.uiautomator.UiObjectNotFoundException;
- method public boolean scrollToEnd(int, int) throws androidx.test.uiautomator.UiObjectNotFoundException;
+ method public boolean scrollToBeginning(int, int) throws androidx.test.uiautomator.UiObjectNotFoundException;
method public boolean scrollToEnd(int) throws androidx.test.uiautomator.UiObjectNotFoundException;
+ method public boolean scrollToEnd(int, int) throws androidx.test.uiautomator.UiObjectNotFoundException;
method public androidx.test.uiautomator.UiScrollable setAsHorizontalList();
method public androidx.test.uiautomator.UiScrollable setAsVerticalList();
method public androidx.test.uiautomator.UiScrollable setMaxSearchSwipes(int);
@@ -372,8 +383,8 @@
method public androidx.test.uiautomator.UiSelector checkable(boolean);
method public androidx.test.uiautomator.UiSelector checked(boolean);
method public androidx.test.uiautomator.UiSelector childSelector(androidx.test.uiautomator.UiSelector);
- method public androidx.test.uiautomator.UiSelector className(String);
method public <T> androidx.test.uiautomator.UiSelector className(Class<T!>);
+ method public androidx.test.uiautomator.UiSelector className(String);
method public androidx.test.uiautomator.UiSelector classNameMatches(String);
method public androidx.test.uiautomator.UiSelector clickable(boolean);
method protected androidx.test.uiautomator.UiSelector cloneSelector();
@@ -411,8 +422,8 @@
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> descContains(String);
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> descEndsWith(String);
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> descEquals(String);
- method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> descMatches(java.util.regex.Pattern);
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> descMatches(String);
+ method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> descMatches(java.util.regex.Pattern);
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> descStartsWith(String);
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> enabled(boolean);
method public static androidx.test.uiautomator.SearchCondition<androidx.test.uiautomator.UiObject2!> findObject(androidx.test.uiautomator.BySelector);
@@ -429,8 +440,8 @@
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> textContains(String);
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> textEndsWith(String);
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> textEquals(String);
- method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> textMatches(java.util.regex.Pattern);
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> textMatches(String);
+ method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> textMatches(java.util.regex.Pattern);
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> textNotEquals(String);
method public static androidx.test.uiautomator.UiObject2Condition<java.lang.Boolean!> textStartsWith(String);
}
diff --git a/test/uiautomator/uiautomator/build.gradle b/test/uiautomator/uiautomator/build.gradle
index ef6ca7c..b1dd210 100644
--- a/test/uiautomator/uiautomator/build.gradle
+++ b/test/uiautomator/uiautomator/build.gradle
@@ -44,7 +44,7 @@
}
androidx {
- name = "Android UIAutomator"
+ name = "UIAutomator"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2012"
description = "UI testing framework suitable for cross-app functional UI testing"
diff --git a/test/uiautomator/uiautomator/src/androidTest/java/androidx/test/uiautomator/BySelectorTest.java b/test/uiautomator/uiautomator/src/androidTest/java/androidx/test/uiautomator/BySelectorTest.java
index 949d01d..adc78fa 100644
--- a/test/uiautomator/uiautomator/src/androidTest/java/androidx/test/uiautomator/BySelectorTest.java
+++ b/test/uiautomator/uiautomator/src/androidTest/java/androidx/test/uiautomator/BySelectorTest.java
@@ -19,6 +19,7 @@
import static org.junit.Assert.assertThrows;
import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SdkSuppress;
import androidx.test.filters.SmallTest;
import org.junit.Test;
@@ -98,6 +99,22 @@
By.text("first").textStartsWith("second");
}
+ @Test
+ @SdkSuppress(minSdkVersion = 26)
+ public void testHint_nullValue() {
+ assertThrows(NullPointerException.class, () -> By.hint((String) null));
+ assertThrows(NullPointerException.class, () -> By.hintContains(null));
+ assertThrows(NullPointerException.class, () -> By.hintStartsWith(null));
+ assertThrows(NullPointerException.class, () -> By.hintEndsWith(null));
+ assertThrows(NullPointerException.class, () -> By.hint((Pattern) null));
+ }
+
+ @Test(expected = IllegalStateException.class)
+ @SdkSuppress(minSdkVersion = 26)
+ public void testHint_alreadyDefined() {
+ By.hint("first").hintStartsWith("second");
+ }
+
@Test(expected = IllegalStateException.class)
public void testCheckable_alreadyDefined() {
By.checkable(true).checkable(false);
diff --git a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/AccessibilityNodeInfoDumper.java b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/AccessibilityNodeInfoDumper.java
index eab1c92..a90b0e6 100644
--- a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/AccessibilityNodeInfoDumper.java
+++ b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/AccessibilityNodeInfoDumper.java
@@ -16,10 +16,14 @@
package androidx.test.uiautomator;
+import android.os.Build;
import android.util.Log;
import android.util.Xml;
import android.view.accessibility.AccessibilityNodeInfo;
+import androidx.annotation.DoNotInline;
+import androidx.annotation.RequiresApi;
+
import org.xmlpull.v1.XmlSerializer;
import java.io.IOException;
@@ -79,6 +83,9 @@
serializer.attribute("", "visible-to-user", Boolean.toString(node.isVisibleToUser()));
serializer.attribute("", "bounds", AccessibilityNodeInfoHelper.getVisibleBoundsInScreen(
node, width, height, false).toShortString());
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ serializer.attribute("", "hint", safeCharSeqToString(Api26Impl.getHintText(node)));
+ }
int count = node.getChildCount();
for (int i = 0; i < count; i++) {
AccessibilityNodeInfo child = node.getChild(i);
@@ -188,4 +195,16 @@
}
return ret.toString();
}
+
+ @RequiresApi(26)
+ static class Api26Impl {
+ private Api26Impl() {
+ }
+
+ @DoNotInline
+ static String getHintText(AccessibilityNodeInfo accessibilityNodeInfo) {
+ CharSequence chars = accessibilityNodeInfo.getHintText();
+ return chars != null ? chars.toString() : null;
+ }
+ }
}
diff --git a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/By.java b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/By.java
index d480917..d09a771 100644
--- a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/By.java
+++ b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/By.java
@@ -18,6 +18,7 @@
import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
import java.util.regex.Pattern;
@@ -103,8 +104,8 @@
*
* @see BySelector#descStartsWith(String)
*/
- public static @NonNull BySelector descStartsWith(@NonNull String substring) {
- return new BySelector().descStartsWith(substring);
+ public static @NonNull BySelector descStartsWith(@NonNull String prefix) {
+ return new BySelector().descStartsWith(prefix);
}
/**
@@ -112,8 +113,8 @@
*
* @see BySelector#descEndsWith(String)
*/
- public static @NonNull BySelector descEndsWith(@NonNull String substring) {
- return new BySelector().descEndsWith(substring);
+ public static @NonNull BySelector descEndsWith(@NonNull String suffix) {
+ return new BySelector().descEndsWith(suffix);
}
/**
@@ -194,8 +195,8 @@
*
* @see BySelector#textStartsWith(String)
*/
- public static @NonNull BySelector textStartsWith(@NonNull String substring) {
- return new BySelector().textStartsWith(substring);
+ public static @NonNull BySelector textStartsWith(@NonNull String prefix) {
+ return new BySelector().textStartsWith(prefix);
}
/**
@@ -203,8 +204,8 @@
*
* @see BySelector#textEndsWith(String)
*/
- public static @NonNull BySelector textEndsWith(@NonNull String substring) {
- return new BySelector().textEndsWith(substring);
+ public static @NonNull BySelector textEndsWith(@NonNull String suffix) {
+ return new BySelector().textEndsWith(suffix);
}
/**
@@ -217,6 +218,56 @@
}
/**
+ * Constructs a new {@link BySelector} and sets the hint value criteria.
+ *
+ * @see BySelector#hint(String)
+ */
+ @RequiresApi(26)
+ public static @NonNull BySelector hint(@NonNull String hint) {
+ return new BySelector().hint(hint);
+ }
+
+ /**
+ * Constructs a new {@link BySelector} and sets the hint value criteria.
+ *
+ * @see BySelector#hintContains(String)
+ */
+ @RequiresApi(26)
+ public static @NonNull BySelector hintContains(@NonNull String substring) {
+ return new BySelector().hintContains(substring);
+ }
+
+ /**
+ * Constructs a new {@link BySelector} and sets the hint value criteria.
+ *
+ * @see BySelector#hintStartsWith(String)
+ */
+ @RequiresApi(26)
+ public static @NonNull BySelector hintStartsWith(@NonNull String prefix) {
+ return new BySelector().hintStartsWith(prefix);
+ }
+
+ /**
+ * Constructs a new {@link BySelector} and sets the hint value criteria.
+ *
+ * @see BySelector#hintEndsWith(String)
+ */
+ @RequiresApi(26)
+ public static @NonNull BySelector hintEndsWith(@NonNull String suffix) {
+ return new BySelector().hintEndsWith(suffix);
+ }
+
+ /**
+ * Constructs a new {@link BySelector} and sets the hint value criteria.
+ *
+ * @see BySelector#hint(Pattern)
+ */
+ @RequiresApi(26)
+ public static @NonNull BySelector hint(@NonNull Pattern regex) {
+ return new BySelector().hint(regex);
+ }
+
+ /**
* Constructs a new {@link BySelector} and sets the checkable criteria.
*
* @see BySelector#checkable(boolean)
diff --git a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/ByMatcher.java b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/ByMatcher.java
index 9ad57c2..f91d12a 100644
--- a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/ByMatcher.java
+++ b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/ByMatcher.java
@@ -16,10 +16,13 @@
package androidx.test.uiautomator;
+import android.os.Build;
import android.util.Log;
import android.view.accessibility.AccessibilityNodeInfo;
+import androidx.annotation.DoNotInline;
import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
import java.util.ArrayList;
import java.util.HashSet;
@@ -124,7 +127,6 @@
// Don't bother searching the subtree if it is not visible
if (!node.isVisibleToUser()) {
- Log.v(TAG, String.format("Skipping invisible child: %s", node));
return ret;
}
@@ -218,8 +220,8 @@
* Returns true if the node matches the selector, ignoring child selectors.
*
* @param selector search criteria to match
- * @param node node to check
- * @param depth distance between the node and its relevant ancestor
+ * @param node node to check
+ * @param depth distance between the node and its relevant ancestor
*/
private static boolean matchesSelector(
BySelector selector, AccessibilityNodeInfo node, int depth) {
@@ -238,7 +240,8 @@
&& matchesCriteria(selector.mFocusable, node.isFocusable())
&& matchesCriteria(selector.mLongClickable, node.isLongClickable())
&& matchesCriteria(selector.mScrollable, node.isScrollable())
- && matchesCriteria(selector.mSelected, node.isSelected());
+ && matchesCriteria(selector.mSelected, node.isSelected())
+ && matchesHint(selector.mHint, node);
}
/** Returns true if the criteria is null or matches the value. */
@@ -254,6 +257,15 @@
return criteria == null || criteria.equals(value);
}
+ /** Returns true if the criteria is null or equal to the hint text of node. */
+ private static boolean matchesHint(Pattern criteria, AccessibilityNodeInfo node) {
+ if (criteria == null) {
+ return true;
+ }
+ return Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && matchesCriteria(criteria,
+ Api26Impl.getHintText(node));
+ }
+
/**
* Checks whether a node matches any child selector. Creates a child match if it does and
* adds it to the list of tracked matches.
@@ -310,6 +322,18 @@
pm.recycleNodes();
}
}
+
+ @RequiresApi(26)
+ static class Api26Impl {
+ private Api26Impl() {
+ }
+
+ @DoNotInline
+ static String getHintText(AccessibilityNodeInfo accessibilityNodeInfo) {
+ CharSequence chars = accessibilityNodeInfo.getHintText();
+ return chars != null ? chars.toString() : null;
+ }
+ }
}
/** Immutable singly-linked list of matches that is safe for tree traversal. */
diff --git a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/BySelector.java b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/BySelector.java
index b818481..ed4f64b 100644
--- a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/BySelector.java
+++ b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/BySelector.java
@@ -20,6 +20,7 @@
import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
import java.util.LinkedList;
import java.util.List;
@@ -37,6 +38,7 @@
Pattern mPkg;
Pattern mRes;
Pattern mText;
+ Pattern mHint;
// Boolean criteria
Boolean mChecked;
@@ -75,6 +77,7 @@
mPkg = original.mPkg;
mRes = original.mRes;
mText = original.mText;
+ mHint = original.mHint;
mChecked = original.mChecked;
mCheckable = original.mCheckable;
@@ -190,28 +193,28 @@
/**
* Sets the content description criteria for matching. A UI element will be considered a match
- * if its content description starts with the {@code substring} parameter and all other criteria
+ * if its content description starts with the {@code prefix} parameter and all other criteria
* for this selector are met.
*
- * @param substring The substring to match (case-sensitive).
+ * @param prefix The prefix to match (case-sensitive).
* @return A reference to this {@link BySelector}.
*/
- public @NonNull BySelector descStartsWith(@NonNull String substring) {
- requireNonNull(substring, "substring cannot be null");
- return desc(RegexHelper.getPatternStartsWith(substring));
+ public @NonNull BySelector descStartsWith(@NonNull String prefix) {
+ requireNonNull(prefix, "prefix cannot be null");
+ return desc(RegexHelper.getPatternStartsWith(prefix));
}
/**
* Sets the content description criteria for matching. A UI element will be considered a match
- * if its content description ends with the {@code substring} parameter and all other criteria
+ * if its content description ends with the {@code suffix} parameter and all other criteria
* for this selector are met.
*
- * @param substring The substring to match (case-sensitive).
+ * @param suffix The suffix to match (case-sensitive).
* @return A reference to this {@link BySelector}.
*/
- public @NonNull BySelector descEndsWith(@NonNull String substring) {
- requireNonNull(substring, "substring cannot be null");
- return desc(RegexHelper.getPatternEndsWith(substring));
+ public @NonNull BySelector descEndsWith(@NonNull String suffix) {
+ requireNonNull(suffix, "suffix cannot be null");
+ return desc(RegexHelper.getPatternEndsWith(suffix));
}
/**
@@ -335,28 +338,28 @@
/**
* Sets the text value criteria for matching. A UI element will be considered a match if its
- * text value starts with the {@code substring} parameter and all other criteria for this
+ * text value starts with the {@code prefix} parameter and all other criteria for this
* selector are met.
*
- * @param substring The substring to match (case-sensitive).
+ * @param prefix The prefix to match (case-sensitive).
* @return A reference to this {@link BySelector}.
*/
- public @NonNull BySelector textStartsWith(@NonNull String substring) {
- requireNonNull(substring, "substring cannot be null");
- return text(RegexHelper.getPatternStartsWith(substring));
+ public @NonNull BySelector textStartsWith(@NonNull String prefix) {
+ requireNonNull(prefix, "prefix cannot be null");
+ return text(RegexHelper.getPatternStartsWith(prefix));
}
/**
* Sets the text value criteria for matching. A UI element will be considered a match if its
- * text value ends with the {@code substring} parameter and all other criteria for this selector
+ * text value ends with the {@code suffix} parameter and all other criteria for this selector
* are met.
*
- * @param substring The substring to match (case-sensitive).
+ * @param suffix The suffix to match (case-sensitive).
* @return A reference to this {@link BySelector}.
*/
- public @NonNull BySelector textEndsWith(@NonNull String substring) {
- requireNonNull(substring, "substring cannot be null");
- return text(RegexHelper.getPatternEndsWith(substring));
+ public @NonNull BySelector textEndsWith(@NonNull String suffix) {
+ requireNonNull(suffix, "suffix cannot be null");
+ return text(RegexHelper.getPatternEndsWith(suffix));
}
/** Sets the text value criteria for matching. A UI element will be considered a match if its
@@ -375,6 +378,85 @@
return this;
}
+ /**
+ * Sets the hint value criteria for matching. A UI element will be considered a match if its
+ * hint value exactly matches the {@code hintValue} parameter and all other criteria for this
+ * selector are met.
+ * <p>Hint text is displayed when there's no user input text.
+ *
+ * @param hintValue The exact value to match (case-sensitive).
+ * @return A reference to this {@link BySelector}.
+ */
+ @RequiresApi(26)
+ public @NonNull BySelector hint(@NonNull String hintValue) {
+ requireNonNull(hintValue, "hintValue cannot be null");
+ return hint(Pattern.compile(Pattern.quote(hintValue)));
+ }
+
+ /**
+ * Sets the hint value criteria for matching. A UI element will be considered a match if its
+ * hint value contains the {@code substring} parameter and all other criteria for this selector
+ * are met.
+ * <p>Hint text is displayed when there's no user input text.
+ *
+ * @param substring The substring to match (case-sensitive).
+ * @return A reference to this {@link BySelector}.
+ */
+ @RequiresApi(26)
+ public @NonNull BySelector hintContains(@NonNull String substring) {
+ requireNonNull(substring, "substring cannot be null");
+ return hint(RegexHelper.getPatternContains(substring));
+ }
+
+ /**
+ * Sets the hint value criteria for matching. A UI element will be considered a match if its
+ * hint value starts with the {@code prefix} parameter and all other criteria for this
+ * selector are met.
+ * <p>Hint text is displayed when there's no user input text.
+ *
+ * @param prefix The prefix to match (case-sensitive).
+ * @return A reference to this {@link BySelector}.
+ */
+ @RequiresApi(26)
+ public @NonNull BySelector hintStartsWith(@NonNull String prefix) {
+ requireNonNull(prefix, "prefix cannot be null");
+ return hint(RegexHelper.getPatternStartsWith(prefix));
+ }
+
+ /**
+ * Sets the hint value criteria for matching. A UI element will be considered a match if its
+ * hint value ends with the {@code suffix} parameter and all other criteria for this selector
+ * are met.
+ * <p>Hint text is displayed when there's no user input text.
+ *
+ * @param suffix The suffix to match (case-sensitive).
+ * @return A reference to this {@link BySelector}.
+ */
+ @RequiresApi(26)
+ public @NonNull BySelector hintEndsWith(@NonNull String suffix) {
+ requireNonNull(suffix, "suffix cannot be null");
+ return hint(RegexHelper.getPatternEndsWith(suffix));
+ }
+
+ /**
+ * Sets the hint value criteria for matching. A UI element will be considered a match if its
+ * hint value matches the {@code hintValue} {@link Pattern} and all other criteria for this
+ * selector are met.
+ * <p>Hint text is displayed when there's no user input text.
+ *
+ * @param hintValue The {@link Pattern} to be used for matching.
+ * @return A reference to this {@link BySelector}.
+ */
+ @RequiresApi(26)
+ public @NonNull BySelector hint(@NonNull Pattern hintValue) {
+ requireNonNull(hintValue, "hintValue cannot be null");
+ if (mHint != null) {
+ throw new IllegalStateException("Hint selector is already defined");
+ }
+ mHint = hintValue;
+ return this;
+ }
+
/**
* Sets the search criteria to match elements that are checkable or not checkable.
@@ -679,6 +761,9 @@
if (mText != null) {
builder.append("TEXT='").append(mText).append("', ");
}
+ if (mHint != null) {
+ builder.append("HINT='").append(mHint).append("', ");
+ }
if (mChecked != null) {
builder.append("CHECKED='").append(mChecked).append("', ");
}
diff --git a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiDevice.java b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiDevice.java
index c353926..f2f540a 100644
--- a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiDevice.java
+++ b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiDevice.java
@@ -76,7 +76,7 @@
// Use a short timeout after HOME or BACK key presses, as no events might be generated if
// already on the home page or if there is nothing to go back to.
private static final long KEY_PRESS_EVENT_TIMEOUT = 1_000; // ms
- private static final long ROTATION_TIMEOUT = 1_000; // ms
+ private static final long ROTATION_TIMEOUT = 2_000; // ms
// Singleton instance.
private static UiDevice sInstance;
@@ -126,6 +126,7 @@
/** Returns whether there is a match for the given {@code selector} criteria. */
@Override
public boolean hasObject(@NonNull BySelector selector) {
+ Log.d(TAG, String.format("Searching for node with selector: %s.", selector));
AccessibilityNodeInfo node = ByMatcher.findMatch(this, selector, getWindowRoots());
if (node != null) {
node.recycle();
@@ -141,6 +142,7 @@
@Override
@SuppressLint("UnknownNullness") // Avoid unnecessary null checks from nullable testing APIs.
public UiObject2 findObject(@NonNull BySelector selector) {
+ Log.d(TAG, String.format("Retrieving node with selector: %s.", selector));
AccessibilityNodeInfo node = ByMatcher.findMatch(this, selector, getWindowRoots());
if (node == null) {
Log.d(TAG, String.format("Node not found with selector: %s.", selector));
@@ -153,6 +155,7 @@
@Override
@NonNull
public List<UiObject2> findObjects(@NonNull BySelector selector) {
+ Log.d(TAG, String.format("Retrieving nodes with selector: %s.", selector));
List<UiObject2> ret = new ArrayList<>();
for (AccessibilityNodeInfo node : ByMatcher.findMatches(this, selector, getWindowRoots())) {
ret.add(new UiObject2(this, selector, node));
diff --git a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiObject2.java b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiObject2.java
index 48f1e89..fce297d 100644
--- a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiObject2.java
+++ b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiObject2.java
@@ -214,6 +214,7 @@
/** Returns {@code true} if there is a nested element which matches the {@code selector}. */
@Override
public boolean hasObject(@NonNull BySelector selector) {
+ Log.d(TAG, String.format("Searching for node with selector: %s.", selector));
AccessibilityNodeInfo node =
ByMatcher.findMatch(getDevice(), selector, getAccessibilityNodeInfo());
if (node != null) {
@@ -230,6 +231,7 @@
@Override
@SuppressLint("UnknownNullness") // Avoid unnecessary null checks from nullable testing APIs.
public UiObject2 findObject(@NonNull BySelector selector) {
+ Log.d(TAG, String.format("Retrieving node with selector: %s.", selector));
AccessibilityNodeInfo node =
ByMatcher.findMatch(getDevice(), selector, getAccessibilityNodeInfo());
if (node == null) {
@@ -245,6 +247,7 @@
@Override
@NonNull
public List<UiObject2> findObjects(@NonNull BySelector selector) {
+ Log.d(TAG, String.format("Retrieving nodes with selector: %s.", selector));
List<UiObject2> ret = new ArrayList<>();
for (AccessibilityNodeInfo node :
ByMatcher.findMatches(getDevice(), selector, getAccessibilityNodeInfo())) {
@@ -358,6 +361,18 @@
}
/**
+ * Returns the hint text of this object, or null if hint text is not preset.
+ * <p>Hint text is displayed when there's no user input text.
+ *
+ * @see TextView#getHint()
+ */
+ @RequiresApi(26)
+ @Nullable
+ public String getHint() {
+ return Api26Impl.getHintText(getAccessibilityNodeInfo());
+ }
+
+ /**
* Returns {@code true} if this object is checkable.
*
* @see Checkable
@@ -952,6 +967,18 @@
}
}
+ @RequiresApi(26)
+ static class Api26Impl {
+ private Api26Impl() {
+ }
+
+ @DoNotInline
+ static String getHintText(AccessibilityNodeInfo accessibilityNodeInfo) {
+ CharSequence chars = accessibilityNodeInfo.getHintText();
+ return chars != null ? chars.toString() : null;
+ }
+ }
+
@RequiresApi(30)
static class Api30Impl {
private Api30Impl() {
diff --git a/testutils/testutils-appcompat/src/main/java/androidx/testutils/RecreatedAppCompatActivity.kt b/testutils/testutils-appcompat/src/main/java/androidx/testutils/RecreatedAppCompatActivity.kt
index ea23c83..5d5694e 100644
--- a/testutils/testutils-appcompat/src/main/java/androidx/testutils/RecreatedAppCompatActivity.kt
+++ b/testutils/testutils-appcompat/src/main/java/androidx/testutils/RecreatedAppCompatActivity.kt
@@ -19,9 +19,9 @@
import android.os.Bundle
import androidx.annotation.LayoutRes
import androidx.appcompat.app.AppCompatActivity
-import org.junit.Assert.assertTrue
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
+import org.junit.Assert.assertTrue
/**
* Extension of [AppCompatActivity] that keeps track of when it is recreated.
diff --git a/testutils/testutils-common/src/main/java/androidx/testutils/FilteringExecutor.kt b/testutils/testutils-common/src/main/java/androidx/testutils/FilteringExecutor.kt
index e981829..3d5618a1 100644
--- a/testutils/testutils-common/src/main/java/androidx/testutils/FilteringExecutor.kt
+++ b/testutils/testutils-common/src/main/java/androidx/testutils/FilteringExecutor.kt
@@ -15,17 +15,17 @@
*/
package androidx.testutils
-import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.flow.MutableStateFlow
-import kotlinx.coroutines.flow.first
-import kotlinx.coroutines.flow.mapLatest
-import kotlinx.coroutines.withTimeout
import java.util.concurrent.Executor
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors
import java.util.concurrent.TimeUnit
import java.util.concurrent.locks.ReentrantLock
import kotlin.concurrent.withLock
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.first
+import kotlinx.coroutines.flow.mapLatest
+import kotlinx.coroutines.withTimeout
/**
* An executor that can block some known runnables. We use it to slow down database
diff --git a/testutils/testutils-datastore/src/commonMain/kotlin/androidx/datastore/OkioTestIO.kt b/testutils/testutils-datastore/src/commonMain/kotlin/androidx/datastore/OkioTestIO.kt
index 733d614..84705fc 100644
--- a/testutils/testutils-datastore/src/commonMain/kotlin/androidx/datastore/OkioTestIO.kt
+++ b/testutils/testutils-datastore/src/commonMain/kotlin/androidx/datastore/OkioTestIO.kt
@@ -22,8 +22,8 @@
import kotlin.random.Random
import kotlin.reflect.KClass
import okio.FileSystem
-import okio.Path
import okio.IOException
+import okio.Path
import okio.Path.Companion.toPath
open class OkioTestIO(dirName: String = "test-dir") : TestIO<OkioPath, IOException>(dirName) {
diff --git a/testutils/testutils-datastore/src/commonMain/kotlin/androidx/datastore/TestIO.kt b/testutils/testutils-datastore/src/commonMain/kotlin/androidx/datastore/TestIO.kt
index bddb036..021e629 100644
--- a/testutils/testutils-datastore/src/commonMain/kotlin/androidx/datastore/TestIO.kt
+++ b/testutils/testutils-datastore/src/commonMain/kotlin/androidx/datastore/TestIO.kt
@@ -17,9 +17,9 @@
package androidx.datastore
import androidx.datastore.core.DataStore
-import androidx.datastore.core.Storage
import androidx.datastore.core.DataStoreFactory.create
import androidx.datastore.core.InterProcessCoordinator
+import androidx.datastore.core.Storage
import kotlin.reflect.KClass
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
diff --git a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/Kruth.kt b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/Kruth.kt
index f842714..89114369 100644
--- a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/Kruth.kt
+++ b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/Kruth.kt
@@ -42,3 +42,6 @@
fun <T> assertThat(actual: Iterable<T>?): IterableSubject<T> =
IterableSubject(actual)
+
+fun <K, V> assertThat(actual: Map<K, V>?): MapSubject<K, V> =
+ MapSubject(actual)
diff --git a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/KruthExt.kt b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/KruthExt.kt
index a55d4e0..e44dc61 100644
--- a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/KruthExt.kt
+++ b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/KruthExt.kt
@@ -16,8 +16,8 @@
package androidx.kruth
-import kotlin.test.assertFailsWith
import kotlin.reflect.KClass
+import kotlin.test.assertFailsWith
// Commonized extensions on top of Truth. These are kept separate for book-keeping in case we end up
// promoting Kruth.
diff --git a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/MapSubject.kt b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/MapSubject.kt
new file mode 100644
index 0000000..c5fdabd
--- /dev/null
+++ b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/MapSubject.kt
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.kruth
+
+import kotlin.test.fail
+
+class MapSubject<K, V>(actual: Map<K, V>?) : Subject<Map<K, V>>(actual) {
+
+ /** Fails if the map is not empty. */
+ fun isEmpty() {
+ requireNonNull(actual) { "Expected to be empty, but was null" }
+
+ if (actual.isNotEmpty()) {
+ fail("Expected to be empty, but was $actual")
+ }
+ }
+
+ /** Fails if the map does not contain the given key. */
+ fun containsKey(key: Any?) {
+ requireNonNull(actual) { "Expected to contain $key, but was null" }
+
+ if (!actual.containsKey(key)) {
+ fail("Expected to contain $key, but was ${actual.keys}")
+ }
+ }
+}
diff --git a/testutils/testutils-kmp/src/commonTest/kotlin/androidx/kruth/MapSubjectTest.kt b/testutils/testutils-kmp/src/commonTest/kotlin/androidx/kruth/MapSubjectTest.kt
new file mode 100644
index 0000000..98c6288
--- /dev/null
+++ b/testutils/testutils-kmp/src/commonTest/kotlin/androidx/kruth/MapSubjectTest.kt
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.kruth
+
+import kotlin.test.Test
+import kotlin.test.assertFailsWith
+
+class MapSubjectTest {
+
+ @Test
+ fun isEmpty() {
+ assertThat(mapOf<Any, Any>()).isEmpty()
+ }
+
+ @Test
+ fun isEmptyWithFailure() {
+ assertFailsWith<AssertionError> {
+ assertThat(mapOf(1 to 5)).isEmpty()
+ }
+ }
+
+ @Test
+ fun containsKey() {
+ assertThat(mapOf("kurt" to "kluever")).containsKey("kurt")
+ }
+
+ @Test
+ fun containsKeyFailure() {
+ val actual = mapOf("kurt" to "kluever")
+ assertFailsWith<AssertionError> {
+ assertThat(actual).containsKey("greg")
+ }
+ }
+
+ @Test
+ fun containsKeyNullFailure() {
+ assertFailsWith<AssertionError> {
+ assertThat(mapOf("kurt" to "kluever")).containsKey(null)
+ }
+ }
+
+ @Test
+ fun containsKey_failsWithSameToString() {
+ assertFailsWith<AssertionError> {
+ assertThat(mapOf(1L to "value1", 2L to "value2", "1" to "value3")).containsKey(1)
+ }
+ }
+
+ @Test
+ fun containsKey_failsWithNullStringAndNull() {
+ assertFailsWith<AssertionError> {
+ assertThat(mapOf("null" to "value1")).containsKey(null)
+ }
+ }
+
+ @Test
+ fun containsNullKey() {
+ assertThat(mapOf(null to "null")).containsKey(null)
+ }
+
+ @Test
+ fun failMapContainsKey() {
+ assertFailsWith<AssertionError> {
+ assertThat(mapOf("a" to "A")).containsKey("b")
+ }
+ }
+
+ @Test
+ fun failMapContainsKeyWithNull() {
+ assertFailsWith<AssertionError> {
+ assertThat(mapOf("a" to "A")).containsKey(null)
+ }
+ }
+}
diff --git a/testutils/testutils-ktx/build.gradle b/testutils/testutils-ktx/build.gradle
index 499d1ed..21ef343d 100644
--- a/testutils/testutils-ktx/build.gradle
+++ b/testutils/testutils-ktx/build.gradle
@@ -15,18 +15,35 @@
*/
import androidx.build.LibraryType
-import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
id("AndroidXPlugin")
- id("kotlin")
}
-dependencies {
- api(libs.kotlinStdlib)
- api(libs.kotlinCoroutinesCore)
- api(libs.kotlinCoroutinesTest)
- api(libs.junit)
+androidXMultiplatform {
+ ios()
+ js {
+ nodejs()
+ binaries.executable()
+ }
+ jvm()
+ linux()
+ mac()
+
+ sourceSets {
+ commonMain {
+ dependencies {
+ api(libs.kotlinStdlib)
+ api(libs.kotlinCoroutinesCore)
+ api(libs.kotlinCoroutinesTest)
+ }
+ }
+ jvmMain {
+ dependencies {
+ api(libs.junit)
+ }
+ }
+ }
}
androidx {
diff --git a/testutils/testutils-ktx/src/main/java/androidx/testutils/DirectDispatcher.kt b/testutils/testutils-ktx/src/commonMain/kotlin/androidx/testutils/DirectDispatcher.kt
similarity index 95%
rename from testutils/testutils-ktx/src/main/java/androidx/testutils/DirectDispatcher.kt
rename to testutils/testutils-ktx/src/commonMain/kotlin/androidx/testutils/DirectDispatcher.kt
index 6c961b7..150d68a 100644
--- a/testutils/testutils-ktx/src/main/java/androidx/testutils/DirectDispatcher.kt
+++ b/testutils/testutils-ktx/src/commonMain/kotlin/androidx/testutils/DirectDispatcher.kt
@@ -16,8 +16,9 @@
package androidx.testutils
-import kotlinx.coroutines.CoroutineDispatcher
import kotlin.coroutines.CoroutineContext
+import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.Runnable
object DirectDispatcher : CoroutineDispatcher() {
override fun dispatch(context: CoroutineContext, block: Runnable) {
diff --git a/testutils/testutils-ktx/src/main/java/androidx/testutils/TestDispatcher.kt b/testutils/testutils-ktx/src/commonMain/kotlin/androidx/testutils/TestDispatcher.kt
similarity index 81%
rename from testutils/testutils-ktx/src/main/java/androidx/testutils/TestDispatcher.kt
rename to testutils/testutils-ktx/src/commonMain/kotlin/androidx/testutils/TestDispatcher.kt
index be8b54f..5c84e3c 100644
--- a/testutils/testutils-ktx/src/main/java/androidx/testutils/TestDispatcher.kt
+++ b/testutils/testutils-ktx/src/commonMain/kotlin/androidx/testutils/TestDispatcher.kt
@@ -16,24 +16,24 @@
package androidx.testutils
-import kotlinx.coroutines.CoroutineDispatcher
-import java.util.concurrent.ConcurrentLinkedQueue
import kotlin.coroutines.CoroutineContext
+import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.Runnable
/**
* [CoroutineDispatcher] which keeps track of all its queued jobs.
*/
class TestDispatcher : CoroutineDispatcher() {
- val queue = ConcurrentLinkedQueue<Runnable>()
+ val queue = ArrayDeque<Runnable>()
override fun dispatch(context: CoroutineContext, block: Runnable) {
queue.add(block)
}
fun executeAll() {
- do {
- val runnable = queue.poll()
- runnable?.run()
- } while (runnable != null)
+ while (queue.isNotEmpty()) {
+ val runnable = queue.removeFirst()
+ runnable.run()
+ }
}
}
diff --git a/testutils/testutils-ktx/src/main/java/androidx/testutils/MainDispatcherRule.kt b/testutils/testutils-ktx/src/jvmMain/kotlin/androidx/testutils/MainDispatcherRule.kt
similarity index 100%
rename from testutils/testutils-ktx/src/main/java/androidx/testutils/MainDispatcherRule.kt
rename to testutils/testutils-ktx/src/jvmMain/kotlin/androidx/testutils/MainDispatcherRule.kt
diff --git a/testutils/testutils-ktx/src/main/java/androidx/testutils/VerifyWithPolling.kt b/testutils/testutils-ktx/src/jvmMain/kotlin/androidx/testutils/VerifyWithPolling.kt
similarity index 93%
rename from testutils/testutils-ktx/src/main/java/androidx/testutils/VerifyWithPolling.kt
rename to testutils/testutils-ktx/src/jvmMain/kotlin/androidx/testutils/VerifyWithPolling.kt
index c6155b2..258a218 100644
--- a/testutils/testutils-ktx/src/main/java/androidx/testutils/VerifyWithPolling.kt
+++ b/testutils/testutils-ktx/src/jvmMain/kotlin/androidx/testutils/VerifyWithPolling.kt
@@ -16,8 +16,10 @@
package androidx.testutils
+import java.lang.SuppressWarnings
import org.junit.Assert
+@SuppressWarnings("BanThreadSleep")
fun verifyWithPolling(
message: String,
periodMs: Long,
diff --git a/testutils/testutils-macrobenchmark/src/main/java/androidx/testutils/MacrobenchUtils.kt b/testutils/testutils-macrobenchmark/src/main/java/androidx/testutils/MacrobenchUtils.kt
index 6c85c25..5af1c28 100644
--- a/testutils/testutils-macrobenchmark/src/main/java/androidx/testutils/MacrobenchUtils.kt
+++ b/testutils/testutils-macrobenchmark/src/main/java/androidx/testutils/MacrobenchUtils.kt
@@ -20,9 +20,10 @@
import android.os.Build
import androidx.benchmark.macro.BaselineProfileMode
import androidx.benchmark.macro.CompilationMode
+import androidx.benchmark.macro.ExperimentalMetricApi
+import androidx.benchmark.macro.MemoryUsageMetric
import androidx.benchmark.macro.Metric
import androidx.benchmark.macro.StartupMode
-import androidx.benchmark.macro.StartupTimingLegacyMetric
import androidx.benchmark.macro.StartupTimingMetric
import androidx.benchmark.macro.isSupportedWithVmSettings
import androidx.benchmark.macro.junit4.MacrobenchmarkRule
@@ -64,11 +65,9 @@
/**
* Temporary, while transitioning to new metrics
*/
-fun getStartupMetrics() = if (Build.VERSION.SDK_INT >= 29) {
- listOf(StartupTimingMetric(), StartupTimingLegacyMetric())
-} else {
- listOf(StartupTimingMetric())
-}
+@OptIn(ExperimentalMetricApi::class)
+fun getStartupMetrics() =
+ listOf(StartupTimingMetric(), MemoryUsageMetric(MemoryUsageMetric.Mode.Last))
fun MacrobenchmarkRule.measureStartup(
compilationMode: CompilationMode,
diff --git a/testutils/testutils-runtime/src/androidTest/java/androidx/testutils/LocaleTestUtilsTest.kt b/testutils/testutils-runtime/src/androidTest/java/androidx/testutils/LocaleTestUtilsTest.kt
index ab49a11..5dbff64 100644
--- a/testutils/testutils-runtime/src/androidTest/java/androidx/testutils/LocaleTestUtilsTest.kt
+++ b/testutils/testutils-runtime/src/androidTest/java/androidx/testutils/LocaleTestUtilsTest.kt
@@ -25,13 +25,13 @@
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
+import java.util.Locale
import org.hamcrest.CoreMatchers
import org.hamcrest.MatcherAssert.assertThat
import org.junit.After
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.Locale
// Fetch default locale as early as possible (e.g., before initializing LocaleTestUtilsTest class)
private val DEFAULT_LANGUAGE = Locale.getDefault().toString()
diff --git a/testutils/testutils-runtime/src/main/java/androidx/testutils/AnimationActivityTestRule.kt b/testutils/testutils-runtime/src/main/java/androidx/testutils/AnimationActivityTestRule.kt
index ee33b44..02a1cd5 100644
--- a/testutils/testutils-runtime/src/main/java/androidx/testutils/AnimationActivityTestRule.kt
+++ b/testutils/testutils-runtime/src/main/java/androidx/testutils/AnimationActivityTestRule.kt
@@ -16,16 +16,15 @@
package androidx.testutils
-import android.app.Activity
import android.animation.ValueAnimator
import android.annotation.SuppressLint
+import android.app.Activity
import android.os.Build
import androidx.test.runner.intercepting.SingleActivityFactory
-
-import org.junit.runner.Description
-import org.junit.runners.model.Statement
import java.lang.RuntimeException
import java.lang.reflect.Method
+import org.junit.runner.Description
+import org.junit.runners.model.Statement
/**
* To solve the issue that androidx changes system settings to make animation duration to 0:
diff --git a/testutils/testutils-runtime/src/main/java/androidx/testutils/RecreatedActivity.kt b/testutils/testutils-runtime/src/main/java/androidx/testutils/RecreatedActivity.kt
index 8ddecfe..2296e75 100644
--- a/testutils/testutils-runtime/src/main/java/androidx/testutils/RecreatedActivity.kt
+++ b/testutils/testutils-runtime/src/main/java/androidx/testutils/RecreatedActivity.kt
@@ -19,9 +19,9 @@
import android.os.Bundle
import androidx.annotation.LayoutRes
import androidx.fragment.app.FragmentActivity
-import org.junit.Assert
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
+import org.junit.Assert
/**
* Extension of [FragmentActivity] that keeps track of when it is recreated.
diff --git a/testutils/testutils-truth/src/test/java/androidx/testutils/AssertionsTest.kt b/testutils/testutils-truth/src/test/java/androidx/testutils/AssertionsTest.kt
index b65e977..f517604 100644
--- a/testutils/testutils-truth/src/test/java/androidx/testutils/AssertionsTest.kt
+++ b/testutils/testutils-truth/src/test/java/androidx/testutils/AssertionsTest.kt
@@ -16,8 +16,8 @@
package androidx.testutils
-import org.junit.Test
import java.io.IOException
+import org.junit.Test
class AssertionsTest {
@Test
diff --git a/text/text/src/androidTest/java/androidx/compose/ui/text/android/BoringLayoutFactoryTest.kt b/text/text/src/androidTest/java/androidx/compose/ui/text/android/BoringLayoutFactoryTest.kt
index fba9e8f..cfae5f2 100644
--- a/text/text/src/androidTest/java/androidx/compose/ui/text/android/BoringLayoutFactoryTest.kt
+++ b/text/text/src/androidTest/java/androidx/compose/ui/text/android/BoringLayoutFactoryTest.kt
@@ -27,11 +27,11 @@
import android.text.style.LeadingMarginSpan
import androidx.compose.ui.text.android.BoringLayoutFactory.create
import androidx.compose.ui.text.android.BoringLayoutFactory.measure
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/text/text/src/androidTest/java/androidx/compose/ui/text/android/FontPaddingWithCustomFallbackTest.kt b/text/text/src/androidTest/java/androidx/compose/ui/text/android/FontPaddingWithCustomFallbackTest.kt
index c5c6cee..edef78c 100644
--- a/text/text/src/androidTest/java/androidx/compose/ui/text/android/FontPaddingWithCustomFallbackTest.kt
+++ b/text/text/src/androidTest/java/androidx/compose/ui/text/android/FontPaddingWithCustomFallbackTest.kt
@@ -12,12 +12,12 @@
import androidx.test.platform.app.InstrumentationRegistry
import androidx.testutils.fonts.R
import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
import org.mockito.kotlin.any
import org.mockito.kotlin.spy
import org.mockito.kotlin.times
import org.mockito.kotlin.verify
-import org.junit.Test
-import org.junit.runner.RunWith
@OptIn(InternalPlatformTextApi::class)
@RunWith(AndroidJUnit4::class)
diff --git a/text/text/src/androidTest/java/androidx/compose/ui/text/android/LayoutCompatTest.kt b/text/text/src/androidTest/java/androidx/compose/ui/text/android/LayoutCompatTest.kt
index 9355f82..21af3cf 100644
--- a/text/text/src/androidTest/java/androidx/compose/ui/text/android/LayoutCompatTest.kt
+++ b/text/text/src/androidTest/java/androidx/compose/ui/text/android/LayoutCompatTest.kt
@@ -20,11 +20,11 @@
import android.text.Layout
import android.text.StaticLayout
import android.text.TextPaint
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@SmallTest
@OptIn(InternalPlatformTextApi::class)
diff --git a/text/text/src/androidTest/java/androidx/compose/ui/text/android/LayoutGetHorizontalMultiLineTest.kt b/text/text/src/androidTest/java/androidx/compose/ui/text/android/LayoutGetHorizontalMultiLineTest.kt
index 22f1976..212c5e4 100644
--- a/text/text/src/androidTest/java/androidx/compose/ui/text/android/LayoutGetHorizontalMultiLineTest.kt
+++ b/text/text/src/androidTest/java/androidx/compose/ui/text/android/LayoutGetHorizontalMultiLineTest.kt
@@ -18,13 +18,13 @@
import android.text.TextPaint
import androidx.core.content.res.ResourcesCompat
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
import androidx.testutils.fonts.R
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@SmallTest
@OptIn(InternalPlatformTextApi::class)
diff --git a/text/text/src/androidTest/java/androidx/compose/ui/text/android/LayoutGetHorizontalTest.kt b/text/text/src/androidTest/java/androidx/compose/ui/text/android/LayoutGetHorizontalTest.kt
index 023c89a..4108cbf 100644
--- a/text/text/src/androidTest/java/androidx/compose/ui/text/android/LayoutGetHorizontalTest.kt
+++ b/text/text/src/androidTest/java/androidx/compose/ui/text/android/LayoutGetHorizontalTest.kt
@@ -20,13 +20,13 @@
import android.text.TextDirectionHeuristics
import android.text.TextPaint
import androidx.core.content.res.ResourcesCompat
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
import androidx.testutils.fonts.R
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
/**
* In this test cases, use following notations:
diff --git a/text/text/src/androidTest/java/androidx/compose/ui/text/android/LayoutHelperParagraphTest.kt b/text/text/src/androidTest/java/androidx/compose/ui/text/android/LayoutHelperParagraphTest.kt
index d8d1305..4c53a41 100644
--- a/text/text/src/androidTest/java/androidx/compose/ui/text/android/LayoutHelperParagraphTest.kt
+++ b/text/text/src/androidTest/java/androidx/compose/ui/text/android/LayoutHelperParagraphTest.kt
@@ -20,11 +20,11 @@
import android.text.Layout
import android.text.StaticLayout
import android.text.TextPaint
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@SmallTest
@OptIn(InternalPlatformTextApi::class)
diff --git a/text/text/src/androidTest/java/androidx/compose/ui/text/android/LayoutIntrinsicsTest.kt b/text/text/src/androidTest/java/androidx/compose/ui/text/android/LayoutIntrinsicsTest.kt
index 733de18..3e47f8f 100644
--- a/text/text/src/androidTest/java/androidx/compose/ui/text/android/LayoutIntrinsicsTest.kt
+++ b/text/text/src/androidTest/java/androidx/compose/ui/text/android/LayoutIntrinsicsTest.kt
@@ -22,13 +22,13 @@
import android.text.TextPaint
import android.text.style.BulletSpan
import androidx.core.content.res.ResourcesCompat
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
import androidx.testutils.fonts.R
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@OptIn(InternalPlatformTextApi::class)
@RunWith(AndroidJUnit4::class)
diff --git a/text/text/src/androidTest/java/androidx/compose/ui/text/android/SegmentBreakerTest.kt b/text/text/src/androidTest/java/androidx/compose/ui/text/android/SegmentBreakerTest.kt
index e8eb3b8..ae9f92f 100644
--- a/text/text/src/androidTest/java/androidx/compose/ui/text/android/SegmentBreakerTest.kt
+++ b/text/text/src/androidTest/java/androidx/compose/ui/text/android/SegmentBreakerTest.kt
@@ -22,13 +22,13 @@
import androidx.compose.ui.text.android.animation.SegmentBreaker
import androidx.compose.ui.text.android.animation.SegmentType
import androidx.core.content.res.ResourcesCompat
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
import androidx.testutils.fonts.R
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
/**
* In this test cases, use following notations:
diff --git a/text/text/src/androidTest/java/androidx/compose/ui/text/android/StaticLayoutFactoryTest.kt b/text/text/src/androidTest/java/androidx/compose/ui/text/android/StaticLayoutFactoryTest.kt
index e67a9d2..6324d42 100644
--- a/text/text/src/androidTest/java/androidx/compose/ui/text/android/StaticLayoutFactoryTest.kt
+++ b/text/text/src/androidTest/java/androidx/compose/ui/text/android/StaticLayoutFactoryTest.kt
@@ -22,16 +22,16 @@
import android.text.TextPaint
import android.text.TextUtils
import androidx.core.content.res.ResourcesCompat
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
import androidx.testutils.fonts.R
import com.google.common.truth.Truth.assertThat
+import kotlin.math.floor
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import kotlin.math.floor
@RunWith(AndroidJUnit4::class)
@OptIn(InternalPlatformTextApi::class)
diff --git a/text/text/src/androidTest/java/androidx/compose/ui/text/android/TextAndroidCanvasTest.kt b/text/text/src/androidTest/java/androidx/compose/ui/text/android/TextAndroidCanvasTest.kt
index c12d1a3..fb80db9 100644
--- a/text/text/src/androidTest/java/androidx/compose/ui/text/android/TextAndroidCanvasTest.kt
+++ b/text/text/src/androidTest/java/androidx/compose/ui/text/android/TextAndroidCanvasTest.kt
@@ -19,10 +19,10 @@
import android.graphics.Canvas
import android.graphics.Rect
import com.google.common.truth.Truth.assertThat
+import org.junit.Test
import org.mockito.kotlin.any
import org.mockito.kotlin.mock
import org.mockito.kotlin.whenever
-import org.junit.Test
class TextAndroidCanvasTest {
diff --git a/text/text/src/androidTest/java/androidx/compose/ui/text/android/TextLayoutFillBoundingBoxesTest.kt b/text/text/src/androidTest/java/androidx/compose/ui/text/android/TextLayoutFillBoundingBoxesTest.kt
index 5bacbb2..0af5ddc 100644
--- a/text/text/src/androidTest/java/androidx/compose/ui/text/android/TextLayoutFillBoundingBoxesTest.kt
+++ b/text/text/src/androidTest/java/androidx/compose/ui/text/android/TextLayoutFillBoundingBoxesTest.kt
@@ -22,15 +22,15 @@
import android.text.TextPaint
import android.text.style.AbsoluteSizeSpan
import androidx.core.content.res.ResourcesCompat
-import androidx.test.filters.SmallTest
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SdkSuppress
+import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
import androidx.testutils.fonts.R
+import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import com.google.common.truth.Truth.assertThat
@OptIn(InternalPlatformTextApi::class)
@RunWith(AndroidJUnit4::class)
diff --git a/text/text/src/androidTest/java/androidx/compose/ui/text/android/TextLayoutIsLineEllipsizedTest.kt b/text/text/src/androidTest/java/androidx/compose/ui/text/android/TextLayoutIsLineEllipsizedTest.kt
index 42f6f2f..26f1373 100644
--- a/text/text/src/androidTest/java/androidx/compose/ui/text/android/TextLayoutIsLineEllipsizedTest.kt
+++ b/text/text/src/androidTest/java/androidx/compose/ui/text/android/TextLayoutIsLineEllipsizedTest.kt
@@ -19,13 +19,13 @@
import android.text.TextPaint
import android.text.TextUtils.TruncateAt
import androidx.core.content.res.ResourcesCompat
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
import androidx.testutils.fonts.R
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@OptIn(InternalPlatformTextApi::class)
@RunWith(AndroidJUnit4::class)
diff --git a/text/text/src/androidTest/java/androidx/compose/ui/text/android/TextLayoutSpanTest.kt b/text/text/src/androidTest/java/androidx/compose/ui/text/android/TextLayoutSpanTest.kt
index 8a8387f..9945d9a 100644
--- a/text/text/src/androidTest/java/androidx/compose/ui/text/android/TextLayoutSpanTest.kt
+++ b/text/text/src/androidTest/java/androidx/compose/ui/text/android/TextLayoutSpanTest.kt
@@ -29,12 +29,12 @@
import androidx.test.platform.app.InstrumentationRegistry
import androidx.testutils.fonts.R
import com.google.common.truth.Truth.assertThat
-import org.mockito.kotlin.any
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mockito.doAnswer
import org.mockito.Mockito.spy
+import org.mockito.kotlin.any
import org.mockito.stubbing.Answer
@OptIn(InternalPlatformTextApi::class)
diff --git a/text/text/src/androidTest/java/androidx/compose/ui/text/android/TextLayoutTest.kt b/text/text/src/androidTest/java/androidx/compose/ui/text/android/TextLayoutTest.kt
index 4de574f..945d772 100644
--- a/text/text/src/androidTest/java/androidx/compose/ui/text/android/TextLayoutTest.kt
+++ b/text/text/src/androidTest/java/androidx/compose/ui/text/android/TextLayoutTest.kt
@@ -26,6 +26,7 @@
import androidx.compose.ui.text.android.style.BaselineShiftSpan
import androidx.compose.ui.text.android.style.LineHeightStyleSpan
import androidx.core.content.res.ResourcesCompat
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
import androidx.testutils.fonts.R
@@ -33,7 +34,6 @@
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@OptIn(InternalPlatformTextApi::class)
@RunWith(AndroidJUnit4::class)
diff --git a/text/text/src/androidTest/java/androidx/compose/ui/text/android/animation/SegmentBreakerBreakSegmentTest.kt b/text/text/src/androidTest/java/androidx/compose/ui/text/android/animation/SegmentBreakerBreakSegmentTest.kt
index 424b8d0..9c9b2ad 100644
--- a/text/text/src/androidTest/java/androidx/compose/ui/text/android/animation/SegmentBreakerBreakSegmentTest.kt
+++ b/text/text/src/androidTest/java/androidx/compose/ui/text/android/animation/SegmentBreakerBreakSegmentTest.kt
@@ -23,13 +23,13 @@
import androidx.compose.ui.text.android.LayoutHelper
import androidx.compose.ui.text.android.StaticLayoutFactory
import androidx.core.content.res.ResourcesCompat
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
import androidx.testutils.fonts.R
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
/**
* In this test cases, use following notations:
diff --git a/text/text/src/androidTest/java/androidx/compose/ui/text/android/selection/WordBoundaryTest.kt b/text/text/src/androidTest/java/androidx/compose/ui/text/android/selection/WordBoundaryTest.kt
index 21dac62..a7794c2 100644
--- a/text/text/src/androidTest/java/androidx/compose/ui/text/android/selection/WordBoundaryTest.kt
+++ b/text/text/src/androidTest/java/androidx/compose/ui/text/android/selection/WordBoundaryTest.kt
@@ -16,13 +16,13 @@
package androidx.compose.ui.text.android.selection
import androidx.compose.ui.text.android.InternalPlatformTextApi
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
-import org.junit.Test
-import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
import java.text.BreakIterator
import java.util.Locale
+import org.junit.Test
+import org.junit.runner.RunWith
@OptIn(InternalPlatformTextApi::class)
@SmallTest
diff --git a/text/text/src/androidTest/java/androidx/compose/ui/text/android/selection/WordIteratorTest.kt b/text/text/src/androidTest/java/androidx/compose/ui/text/android/selection/WordIteratorTest.kt
index d75f35e..c18022b 100644
--- a/text/text/src/androidTest/java/androidx/compose/ui/text/android/selection/WordIteratorTest.kt
+++ b/text/text/src/androidTest/java/androidx/compose/ui/text/android/selection/WordIteratorTest.kt
@@ -16,13 +16,13 @@
package androidx.compose.ui.text.android.selection
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
-import org.junit.Test
-import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
import java.text.BreakIterator
import java.util.Locale
+import org.junit.Test
+import org.junit.runner.RunWith
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/text/text/src/androidTest/java/androidx/compose/ui/text/android/style/BaselineShiftSpanTest.kt b/text/text/src/androidTest/java/androidx/compose/ui/text/android/style/BaselineShiftSpanTest.kt
index 0affcc1..87e6cbc 100644
--- a/text/text/src/androidTest/java/androidx/compose/ui/text/android/style/BaselineShiftSpanTest.kt
+++ b/text/text/src/androidTest/java/androidx/compose/ui/text/android/style/BaselineShiftSpanTest.kt
@@ -18,11 +18,11 @@
import android.text.TextPaint
import androidx.compose.ui.text.android.InternalPlatformTextApi
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@OptIn(InternalPlatformTextApi::class)
@RunWith(AndroidJUnit4::class)
diff --git a/text/text/src/androidTest/java/androidx/compose/ui/text/android/style/FontFeatureSpanTest.kt b/text/text/src/androidTest/java/androidx/compose/ui/text/android/style/FontFeatureSpanTest.kt
index c32713b..03d1202 100644
--- a/text/text/src/androidTest/java/androidx/compose/ui/text/android/style/FontFeatureSpanTest.kt
+++ b/text/text/src/androidTest/java/androidx/compose/ui/text/android/style/FontFeatureSpanTest.kt
@@ -17,11 +17,11 @@
import android.text.TextPaint
import androidx.compose.ui.text.android.InternalPlatformTextApi
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@OptIn(InternalPlatformTextApi::class)
@RunWith(AndroidJUnit4::class)
diff --git a/text/text/src/androidTest/java/androidx/compose/ui/text/android/style/LetterSpacingSpanEmTest.kt b/text/text/src/androidTest/java/androidx/compose/ui/text/android/style/LetterSpacingSpanEmTest.kt
index 4791812..5cfe34d 100644
--- a/text/text/src/androidTest/java/androidx/compose/ui/text/android/style/LetterSpacingSpanEmTest.kt
+++ b/text/text/src/androidTest/java/androidx/compose/ui/text/android/style/LetterSpacingSpanEmTest.kt
@@ -17,11 +17,11 @@
import android.text.TextPaint
import androidx.compose.ui.text.android.InternalPlatformTextApi
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@OptIn(InternalPlatformTextApi::class)
@RunWith(AndroidJUnit4::class)
diff --git a/text/text/src/androidTest/java/androidx/compose/ui/text/android/style/LetterSpacingSpanPxTest.kt b/text/text/src/androidTest/java/androidx/compose/ui/text/android/style/LetterSpacingSpanPxTest.kt
index e40871d..bd98830 100644
--- a/text/text/src/androidTest/java/androidx/compose/ui/text/android/style/LetterSpacingSpanPxTest.kt
+++ b/text/text/src/androidTest/java/androidx/compose/ui/text/android/style/LetterSpacingSpanPxTest.kt
@@ -20,13 +20,13 @@
import androidx.compose.ui.text.android.InternalPlatformTextApi
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
+import org.junit.Test
+import org.junit.runner.RunWith
import org.mockito.kotlin.any
import org.mockito.kotlin.doReturn
import org.mockito.kotlin.mock
import org.mockito.kotlin.never
import org.mockito.kotlin.verify
-import org.junit.Test
-import org.junit.runner.RunWith
@OptIn(InternalPlatformTextApi::class)
@MediumTest
diff --git a/text/text/src/androidTest/java/androidx/compose/ui/text/android/style/PlaceholderSpanTest.kt b/text/text/src/androidTest/java/androidx/compose/ui/text/android/style/PlaceholderSpanTest.kt
index 944a467..9069271 100644
--- a/text/text/src/androidTest/java/androidx/compose/ui/text/android/style/PlaceholderSpanTest.kt
+++ b/text/text/src/androidTest/java/androidx/compose/ui/text/android/style/PlaceholderSpanTest.kt
@@ -19,12 +19,12 @@
import android.graphics.Paint
import android.text.TextPaint
import androidx.compose.ui.text.android.InternalPlatformTextApi
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertThat
+import kotlin.math.abs
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import kotlin.math.abs
@OptIn(InternalPlatformTextApi::class)
@RunWith(AndroidJUnit4::class)
diff --git a/text/text/src/androidTest/java/androidx/compose/ui/text/android/style/SkewXSpanTest.kt b/text/text/src/androidTest/java/androidx/compose/ui/text/android/style/SkewXSpanTest.kt
index dedb532..3d8eb63 100644
--- a/text/text/src/androidTest/java/androidx/compose/ui/text/android/style/SkewXSpanTest.kt
+++ b/text/text/src/androidTest/java/androidx/compose/ui/text/android/style/SkewXSpanTest.kt
@@ -17,11 +17,11 @@
import android.text.TextPaint
import androidx.compose.ui.text.android.InternalPlatformTextApi
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth
import org.junit.Test
import org.junit.runner.RunWith
-import androidx.test.ext.junit.runners.AndroidJUnit4
@OptIn(InternalPlatformTextApi::class)
@RunWith(AndroidJUnit4::class)
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/LayoutHelper.kt b/text/text/src/main/java/androidx/compose/ui/text/android/LayoutHelper.kt
index e2b2cdc..62e7978 100644
--- a/text/text/src/main/java/androidx/compose/ui/text/android/LayoutHelper.kt
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/LayoutHelper.kt
@@ -349,10 +349,23 @@
}
}
- private fun getDownstreamHorizontal(offset: Int, primary: Boolean) = if (primary) {
- layout.getPrimaryHorizontal(offset)
- } else {
- layout.getSecondaryHorizontal(offset)
+ private fun getDownstreamHorizontal(offset: Int, primary: Boolean): Float {
+ val lineNo = layout.getLineForOffset(offset)
+ val lineEnd = layout.getLineEnd(lineNo)
+
+ // [android.text.Layout#getHorizontal] has a bug that causes a crash if requested offset
+ // is in an ellipsized region and comes after a line feed character. We coerce at most to
+ // lineEnd of the line this offset belongs to. getLineEnd respects line feed characters.
+ // Any ellipsized character should already return the visible end value, which they do until
+ // a line feed character. We can safely assume rest of the characters can also return the
+ // same result as the reported line end.
+ val targetOffset = offset.coerceAtMost(lineEnd)
+
+ return if (primary) {
+ layout.getPrimaryHorizontal(targetOffset)
+ } else {
+ layout.getSecondaryHorizontal(targetOffset)
+ }
}
private data class BidiRun(val start: Int, val end: Int, val isRtl: Boolean)
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/TextLayout.kt b/text/text/src/main/java/androidx/compose/ui/text/android/TextLayout.kt
index 20c751f..3944f11 100644
--- a/text/text/src/main/java/androidx/compose/ui/text/android/TextLayout.kt
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/TextLayout.kt
@@ -38,8 +38,6 @@
import androidx.compose.ui.text.android.LayoutCompat.ALIGN_OPPOSITE
import androidx.compose.ui.text.android.LayoutCompat.ALIGN_RIGHT
import androidx.compose.ui.text.android.LayoutCompat.BreakStrategy
-import androidx.compose.ui.text.android.LayoutCompat.LineBreakStyle
-import androidx.compose.ui.text.android.LayoutCompat.LineBreakWordStyle
import androidx.compose.ui.text.android.LayoutCompat.DEFAULT_ALIGNMENT
import androidx.compose.ui.text.android.LayoutCompat.DEFAULT_BREAK_STRATEGY
import androidx.compose.ui.text.android.LayoutCompat.DEFAULT_HYPHENATION_FREQUENCY
@@ -52,6 +50,8 @@
import androidx.compose.ui.text.android.LayoutCompat.DEFAULT_TEXT_DIRECTION
import androidx.compose.ui.text.android.LayoutCompat.HyphenationFrequency
import androidx.compose.ui.text.android.LayoutCompat.JustificationMode
+import androidx.compose.ui.text.android.LayoutCompat.LineBreakStyle
+import androidx.compose.ui.text.android.LayoutCompat.LineBreakWordStyle
import androidx.compose.ui.text.android.LayoutCompat.TEXT_DIRECTION_ANY_RTL_LTR
import androidx.compose.ui.text.android.LayoutCompat.TEXT_DIRECTION_FIRST_STRONG_LTR
import androidx.compose.ui.text.android.LayoutCompat.TEXT_DIRECTION_FIRST_STRONG_RTL
@@ -292,6 +292,8 @@
always returned.
*/
lineCount = min(layout.lineCount, maxLines)
+ val lastLine = lineCount - 1
+
didExceedMaxLines =
/* When lineCount is less than maxLines, actual line count is guaranteed not to exceed
the maxLines.
@@ -312,8 +314,8 @@
handled by truncating.
So we have to check both cases, no matter what ellipsis parameter is passed.
*/
- layout.getEllipsisCount(lineCount - 1) > 0 ||
- layout.getLineEnd(lineCount - 1) != charSequence.length
+ layout.getEllipsisCount(lastLine) > 0 ||
+ layout.getLineEnd(lastLine) != charSequence.length
}
val verticalPaddings = getVerticalPaddings()
@@ -323,12 +325,18 @@
topPadding = max(verticalPaddings.topPadding, lineHeightPaddings.topPadding)
bottomPadding = max(verticalPaddings.bottomPadding, lineHeightPaddings.bottomPadding)
- val lastLineMetricsPair = getLastLineMetrics(textPaint, frameworkTextDir, lineHeightSpans)
- lastLineFontMetrics = lastLineMetricsPair.first
- lastLineExtra = lastLineMetricsPair.second
+ val fontMetrics = getLastLineMetrics(textPaint, frameworkTextDir, lineHeightSpans)
+ lastLineExtra = if (fontMetrics != null) {
+ fontMetrics.bottom - getLineHeight(lastLine).toInt()
+ } else {
+ 0
+ }
+ // Set lastLineFontMetrics after calling getLineHeight() above, as the metrics
+ // are different when lastLineFontMetrics is null
+ lastLineFontMetrics = fontMetrics
- leftPadding = layout.getEllipsizedLeftPadding(lineCount - 1)
- rightPadding = layout.getEllipsizedRightPadding(lineCount - 1)
+ leftPadding = layout.getEllipsizedLeftPadding(lastLine)
+ rightPadding = layout.getEllipsizedRightPadding(lastLine)
}
private val layoutHelper by lazy(LazyThreadSafetyMode.NONE) { LayoutHelper(layout) }
@@ -963,7 +971,7 @@
textPaint: TextPaint,
frameworkTextDir: TextDirectionHeuristic,
lineHeightSpans: Array<LineHeightStyleSpan>
-): Pair<FontMetricsInt?, Int> {
+): FontMetricsInt? {
val lastLine = lineCount - 1
// did not check for "\n" since the last line might include zero width characters
if (layout.getLineStart(lastLine) == layout.getLineEnd(lastLine) &&
@@ -1006,10 +1014,9 @@
bottom = tmpLayout.getLineBottom(0)
}
- val lastLineExtra = lastLineFontMetrics.bottom - getLineHeight(lastLine).toInt()
- return Pair(lastLineFontMetrics, lastLineExtra)
+ return lastLineFontMetrics
}
- return Pair(null, 0)
+ return null
}
@OptIn(InternalPlatformTextApi::class)
diff --git a/tracing/tracing-ktx/build.gradle b/tracing/tracing-ktx/build.gradle
index 9cfe63d..a40116c 100644
--- a/tracing/tracing-ktx/build.gradle
+++ b/tracing/tracing-ktx/build.gradle
@@ -34,7 +34,7 @@
}
androidx {
- name = "Android Tracing Runtime Kotlin Extensions"
+ name = "Tracing Kotlin Extensions"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2020"
description = "Android Tracing"
diff --git a/tracing/tracing-perfetto-binary/build.gradle b/tracing/tracing-perfetto-binary/build.gradle
index 6a2f998..c663488 100644
--- a/tracing/tracing-perfetto-binary/build.gradle
+++ b/tracing/tracing-perfetto-binary/build.gradle
@@ -82,7 +82,7 @@
}
androidx {
- name = "AndroidX Tracing: Perfetto SDK Native Dependencies"
+ name = "Tracing Perfetto Binary"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.TRACING_PERFETTO
inceptionYear = "2022"
diff --git a/tracing/tracing-perfetto-common/build.gradle b/tracing/tracing-perfetto-common/build.gradle
index 4d9548c..ac22d616 100644
--- a/tracing/tracing-perfetto-common/build.gradle
+++ b/tracing/tracing-perfetto-common/build.gradle
@@ -33,7 +33,7 @@
}
androidx {
- name = "AndroidX Tracing: Perfetto Common"
+ name = "Tracing Perfetto Common"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.TRACING_PERFETTO
inceptionYear = "2022"
diff --git a/tracing/tracing-perfetto/build.gradle b/tracing/tracing-perfetto/build.gradle
index 9e6c8fb..5632eb7 100644
--- a/tracing/tracing-perfetto/build.gradle
+++ b/tracing/tracing-perfetto/build.gradle
@@ -58,7 +58,7 @@
}
androidx {
- name = "AndroidX Tracing: Perfetto SDK"
+ name = "Tracing Perfetto"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.TRACING_PERFETTO
inceptionYear = "2022"
diff --git a/tracing/tracing-perfetto/src/androidTest/java/androidx/tracing/perfetto/test/TracingTest.kt b/tracing/tracing-perfetto/src/androidTest/java/androidx/tracing/perfetto/test/TracingTest.kt
index d6f95cd..1dce783 100644
--- a/tracing/tracing-perfetto/src/androidTest/java/androidx/tracing/perfetto/test/TracingTest.kt
+++ b/tracing/tracing-perfetto/src/androidTest/java/androidx/tracing/perfetto/test/TracingTest.kt
@@ -20,9 +20,9 @@
import androidx.annotation.RequiresApi
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
+import androidx.tracing.perfetto.PerfettoHandshake.RequestKeys.RECEIVER_CLASS_NAME
import androidx.tracing.perfetto.Tracing
import androidx.tracing.perfetto.TracingReceiver
-import androidx.tracing.perfetto.PerfettoHandshake.RequestKeys.RECEIVER_CLASS_NAME
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
diff --git a/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/TracingReceiver.kt b/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/TracingReceiver.kt
index 0ca316b..bca33d3 100644
--- a/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/TracingReceiver.kt
+++ b/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/TracingReceiver.kt
@@ -23,12 +23,12 @@
import android.util.JsonWriter
import androidx.annotation.RestrictTo
import androidx.annotation.RestrictTo.Scope.LIBRARY
-import androidx.tracing.perfetto.Tracing.EnableTracingResponse
import androidx.tracing.perfetto.PerfettoHandshake.EnableTracingResponse
import androidx.tracing.perfetto.PerfettoHandshake.RequestKeys.ACTION_ENABLE_TRACING
import androidx.tracing.perfetto.PerfettoHandshake.RequestKeys.KEY_PATH
import androidx.tracing.perfetto.PerfettoHandshake.ResponseExitCodes.RESULT_CODE_ERROR_OTHER
import androidx.tracing.perfetto.PerfettoHandshake.ResponseKeys
+import androidx.tracing.perfetto.Tracing.EnableTracingResponse
import java.io.File
import java.io.StringWriter
import java.util.concurrent.LinkedBlockingQueue
diff --git a/tracing/tracing/build.gradle b/tracing/tracing/build.gradle
index 032edf2..1f0851b 100644
--- a/tracing/tracing/build.gradle
+++ b/tracing/tracing/build.gradle
@@ -32,7 +32,7 @@
}
androidx {
- name = "Android Tracing"
+ name = "Tracing"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2020"
description = "Android Tracing"
diff --git a/transition/transition-ktx/src/androidTest/java/androidx/transition/TransitionTest.kt b/transition/transition-ktx/src/androidTest/java/androidx/transition/TransitionTest.kt
index 915ecb6..0f42fdc 100644
--- a/transition/transition-ktx/src/androidTest/java/androidx/transition/TransitionTest.kt
+++ b/transition/transition-ktx/src/androidTest/java/androidx/transition/TransitionTest.kt
@@ -24,13 +24,13 @@
import androidx.test.filters.SdkSuppress
import androidx.test.platform.app.InstrumentationRegistry
import androidx.transition.ktx.test.R
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import java.util.concurrent.atomic.AtomicBoolean
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
-import java.util.concurrent.atomic.AtomicBoolean
@SdkSuppress(minSdkVersion = 19)
@MediumTest
diff --git a/transition/transition/api/current.txt b/transition/transition/api/current.txt
index 0c3d6bf..fdaded9 100644
--- a/transition/transition/api/current.txt
+++ b/transition/transition/api/current.txt
@@ -71,9 +71,9 @@
}
public class Fade extends androidx.transition.Visibility {
- ctor public Fade(int);
ctor public Fade();
ctor public Fade(android.content.Context, android.util.AttributeSet);
+ ctor public Fade(int);
field public static final int IN = 1; // 0x1
field public static final int OUT = 2; // 0x2
}
@@ -114,8 +114,8 @@
public class Slide extends androidx.transition.Visibility {
ctor public Slide();
- ctor public Slide(int);
ctor public Slide(android.content.Context, android.util.AttributeSet);
+ ctor public Slide(int);
method public int getSlideEdge();
method public void setSlideEdge(int);
}
@@ -126,8 +126,8 @@
method public androidx.transition.Transition addListener(androidx.transition.Transition.TransitionListener);
method public androidx.transition.Transition addTarget(android.view.View);
method public androidx.transition.Transition addTarget(@IdRes int);
- method public androidx.transition.Transition addTarget(String);
method public androidx.transition.Transition addTarget(Class<?>);
+ method public androidx.transition.Transition addTarget(String);
method public abstract void captureEndValues(androidx.transition.TransitionValues);
method public abstract void captureStartValues(androidx.transition.TransitionValues);
method public androidx.transition.Transition clone();
@@ -137,8 +137,8 @@
method public androidx.transition.Transition excludeChildren(Class<?>, boolean);
method public androidx.transition.Transition excludeTarget(android.view.View, boolean);
method public androidx.transition.Transition excludeTarget(@IdRes int, boolean);
- method public androidx.transition.Transition excludeTarget(String, boolean);
method public androidx.transition.Transition excludeTarget(Class<?>, boolean);
+ method public androidx.transition.Transition excludeTarget(String, boolean);
method public long getDuration();
method public android.graphics.Rect? getEpicenter();
method public androidx.transition.Transition.EpicenterCallback? getEpicenterCallback();
@@ -157,8 +157,8 @@
method public androidx.transition.Transition removeListener(androidx.transition.Transition.TransitionListener);
method public androidx.transition.Transition removeTarget(android.view.View);
method public androidx.transition.Transition removeTarget(@IdRes int);
- method public androidx.transition.Transition removeTarget(String);
method public androidx.transition.Transition removeTarget(Class<?>);
+ method public androidx.transition.Transition removeTarget(String);
method public androidx.transition.Transition setDuration(long);
method public void setEpicenterCallback(androidx.transition.Transition.EpicenterCallback?);
method public androidx.transition.Transition setInterpolator(android.animation.TimeInterpolator?);
@@ -207,8 +207,8 @@
method public static void endTransitions(android.view.ViewGroup?);
method public static void go(androidx.transition.Scene);
method public static void go(androidx.transition.Scene, androidx.transition.Transition?);
- method public void setTransition(androidx.transition.Scene, androidx.transition.Transition?);
method public void setTransition(androidx.transition.Scene, androidx.transition.Scene, androidx.transition.Transition?);
+ method public void setTransition(androidx.transition.Scene, androidx.transition.Transition?);
method public void transitionTo(androidx.transition.Scene);
}
@@ -225,8 +225,8 @@
method public androidx.transition.TransitionSet addListener(androidx.transition.Transition.TransitionListener);
method public androidx.transition.TransitionSet addTarget(android.view.View);
method public androidx.transition.TransitionSet addTarget(@IdRes int);
- method public androidx.transition.TransitionSet addTarget(String);
method public androidx.transition.TransitionSet addTarget(Class<?>);
+ method public androidx.transition.TransitionSet addTarget(String);
method public androidx.transition.TransitionSet addTransition(androidx.transition.Transition);
method public void captureEndValues(androidx.transition.TransitionValues);
method public void captureStartValues(androidx.transition.TransitionValues);
@@ -234,8 +234,8 @@
method public androidx.transition.Transition? getTransitionAt(int);
method public int getTransitionCount();
method public androidx.transition.TransitionSet removeListener(androidx.transition.Transition.TransitionListener);
- method public androidx.transition.TransitionSet removeTarget(@IdRes int);
method public androidx.transition.TransitionSet removeTarget(android.view.View);
+ method public androidx.transition.TransitionSet removeTarget(@IdRes int);
method public androidx.transition.TransitionSet removeTarget(Class<?>);
method public androidx.transition.TransitionSet removeTarget(String);
method public androidx.transition.TransitionSet removeTransition(androidx.transition.Transition);
@@ -261,10 +261,10 @@
method public void captureStartValues(androidx.transition.TransitionValues);
method public int getMode();
method public boolean isVisible(androidx.transition.TransitionValues?);
- method public android.animation.Animator? onAppear(android.view.ViewGroup, androidx.transition.TransitionValues?, int, androidx.transition.TransitionValues?, int);
method public android.animation.Animator? onAppear(android.view.ViewGroup, android.view.View, androidx.transition.TransitionValues?, androidx.transition.TransitionValues?);
- method public android.animation.Animator? onDisappear(android.view.ViewGroup, androidx.transition.TransitionValues?, int, androidx.transition.TransitionValues?, int);
+ method public android.animation.Animator? onAppear(android.view.ViewGroup, androidx.transition.TransitionValues?, int, androidx.transition.TransitionValues?, int);
method public android.animation.Animator? onDisappear(android.view.ViewGroup, android.view.View, androidx.transition.TransitionValues?, androidx.transition.TransitionValues?);
+ method public android.animation.Animator? onDisappear(android.view.ViewGroup, androidx.transition.TransitionValues?, int, androidx.transition.TransitionValues?, int);
method public void setMode(int);
field public static final int MODE_IN = 1; // 0x1
field public static final int MODE_OUT = 2; // 0x2
diff --git a/transition/transition/api/public_plus_experimental_current.txt b/transition/transition/api/public_plus_experimental_current.txt
index 0c3d6bf..fdaded9 100644
--- a/transition/transition/api/public_plus_experimental_current.txt
+++ b/transition/transition/api/public_plus_experimental_current.txt
@@ -71,9 +71,9 @@
}
public class Fade extends androidx.transition.Visibility {
- ctor public Fade(int);
ctor public Fade();
ctor public Fade(android.content.Context, android.util.AttributeSet);
+ ctor public Fade(int);
field public static final int IN = 1; // 0x1
field public static final int OUT = 2; // 0x2
}
@@ -114,8 +114,8 @@
public class Slide extends androidx.transition.Visibility {
ctor public Slide();
- ctor public Slide(int);
ctor public Slide(android.content.Context, android.util.AttributeSet);
+ ctor public Slide(int);
method public int getSlideEdge();
method public void setSlideEdge(int);
}
@@ -126,8 +126,8 @@
method public androidx.transition.Transition addListener(androidx.transition.Transition.TransitionListener);
method public androidx.transition.Transition addTarget(android.view.View);
method public androidx.transition.Transition addTarget(@IdRes int);
- method public androidx.transition.Transition addTarget(String);
method public androidx.transition.Transition addTarget(Class<?>);
+ method public androidx.transition.Transition addTarget(String);
method public abstract void captureEndValues(androidx.transition.TransitionValues);
method public abstract void captureStartValues(androidx.transition.TransitionValues);
method public androidx.transition.Transition clone();
@@ -137,8 +137,8 @@
method public androidx.transition.Transition excludeChildren(Class<?>, boolean);
method public androidx.transition.Transition excludeTarget(android.view.View, boolean);
method public androidx.transition.Transition excludeTarget(@IdRes int, boolean);
- method public androidx.transition.Transition excludeTarget(String, boolean);
method public androidx.transition.Transition excludeTarget(Class<?>, boolean);
+ method public androidx.transition.Transition excludeTarget(String, boolean);
method public long getDuration();
method public android.graphics.Rect? getEpicenter();
method public androidx.transition.Transition.EpicenterCallback? getEpicenterCallback();
@@ -157,8 +157,8 @@
method public androidx.transition.Transition removeListener(androidx.transition.Transition.TransitionListener);
method public androidx.transition.Transition removeTarget(android.view.View);
method public androidx.transition.Transition removeTarget(@IdRes int);
- method public androidx.transition.Transition removeTarget(String);
method public androidx.transition.Transition removeTarget(Class<?>);
+ method public androidx.transition.Transition removeTarget(String);
method public androidx.transition.Transition setDuration(long);
method public void setEpicenterCallback(androidx.transition.Transition.EpicenterCallback?);
method public androidx.transition.Transition setInterpolator(android.animation.TimeInterpolator?);
@@ -207,8 +207,8 @@
method public static void endTransitions(android.view.ViewGroup?);
method public static void go(androidx.transition.Scene);
method public static void go(androidx.transition.Scene, androidx.transition.Transition?);
- method public void setTransition(androidx.transition.Scene, androidx.transition.Transition?);
method public void setTransition(androidx.transition.Scene, androidx.transition.Scene, androidx.transition.Transition?);
+ method public void setTransition(androidx.transition.Scene, androidx.transition.Transition?);
method public void transitionTo(androidx.transition.Scene);
}
@@ -225,8 +225,8 @@
method public androidx.transition.TransitionSet addListener(androidx.transition.Transition.TransitionListener);
method public androidx.transition.TransitionSet addTarget(android.view.View);
method public androidx.transition.TransitionSet addTarget(@IdRes int);
- method public androidx.transition.TransitionSet addTarget(String);
method public androidx.transition.TransitionSet addTarget(Class<?>);
+ method public androidx.transition.TransitionSet addTarget(String);
method public androidx.transition.TransitionSet addTransition(androidx.transition.Transition);
method public void captureEndValues(androidx.transition.TransitionValues);
method public void captureStartValues(androidx.transition.TransitionValues);
@@ -234,8 +234,8 @@
method public androidx.transition.Transition? getTransitionAt(int);
method public int getTransitionCount();
method public androidx.transition.TransitionSet removeListener(androidx.transition.Transition.TransitionListener);
- method public androidx.transition.TransitionSet removeTarget(@IdRes int);
method public androidx.transition.TransitionSet removeTarget(android.view.View);
+ method public androidx.transition.TransitionSet removeTarget(@IdRes int);
method public androidx.transition.TransitionSet removeTarget(Class<?>);
method public androidx.transition.TransitionSet removeTarget(String);
method public androidx.transition.TransitionSet removeTransition(androidx.transition.Transition);
@@ -261,10 +261,10 @@
method public void captureStartValues(androidx.transition.TransitionValues);
method public int getMode();
method public boolean isVisible(androidx.transition.TransitionValues?);
- method public android.animation.Animator? onAppear(android.view.ViewGroup, androidx.transition.TransitionValues?, int, androidx.transition.TransitionValues?, int);
method public android.animation.Animator? onAppear(android.view.ViewGroup, android.view.View, androidx.transition.TransitionValues?, androidx.transition.TransitionValues?);
- method public android.animation.Animator? onDisappear(android.view.ViewGroup, androidx.transition.TransitionValues?, int, androidx.transition.TransitionValues?, int);
+ method public android.animation.Animator? onAppear(android.view.ViewGroup, androidx.transition.TransitionValues?, int, androidx.transition.TransitionValues?, int);
method public android.animation.Animator? onDisappear(android.view.ViewGroup, android.view.View, androidx.transition.TransitionValues?, androidx.transition.TransitionValues?);
+ method public android.animation.Animator? onDisappear(android.view.ViewGroup, androidx.transition.TransitionValues?, int, androidx.transition.TransitionValues?, int);
method public void setMode(int);
field public static final int MODE_IN = 1; // 0x1
field public static final int MODE_OUT = 2; // 0x2
diff --git a/transition/transition/api/restricted_current.txt b/transition/transition/api/restricted_current.txt
index 64748fe..a344c51 100644
--- a/transition/transition/api/restricted_current.txt
+++ b/transition/transition/api/restricted_current.txt
@@ -71,9 +71,9 @@
}
public class Fade extends androidx.transition.Visibility {
- ctor public Fade(@androidx.transition.Visibility.Mode int);
ctor public Fade();
ctor public Fade(android.content.Context, android.util.AttributeSet);
+ ctor public Fade(@androidx.transition.Visibility.Mode int);
field public static final int IN = 1; // 0x1
field public static final int OUT = 2; // 0x2
}
@@ -91,8 +91,8 @@
method public void replaceTargets(Object, java.util.ArrayList<android.view.View!>!, java.util.ArrayList<android.view.View!>!);
method public void scheduleHideFragmentView(Object, android.view.View, java.util.ArrayList<android.view.View!>);
method public void scheduleRemoveTargets(Object, Object?, java.util.ArrayList<android.view.View!>?, Object?, java.util.ArrayList<android.view.View!>?, Object?, java.util.ArrayList<android.view.View!>?);
- method public void setEpicenter(Object, android.view.View?);
method public void setEpicenter(Object, android.graphics.Rect);
+ method public void setEpicenter(Object, android.view.View?);
method public void setSharedElementTargets(Object, android.view.View, java.util.ArrayList<android.view.View!>);
method public void swapSharedElementTargets(Object?, java.util.ArrayList<android.view.View!>?, java.util.ArrayList<android.view.View!>?);
method public Object? wrapTransitionInSet(Object?);
@@ -134,8 +134,8 @@
public class Slide extends androidx.transition.Visibility {
ctor public Slide();
- ctor public Slide(@androidx.transition.Slide.GravityFlag int);
ctor public Slide(android.content.Context, android.util.AttributeSet);
+ ctor public Slide(@androidx.transition.Slide.GravityFlag int);
method @androidx.transition.Slide.GravityFlag public int getSlideEdge();
method public void setSlideEdge(@androidx.transition.Slide.GravityFlag int);
}
@@ -149,8 +149,8 @@
method public androidx.transition.Transition addListener(androidx.transition.Transition.TransitionListener);
method public androidx.transition.Transition addTarget(android.view.View);
method public androidx.transition.Transition addTarget(@IdRes int);
- method public androidx.transition.Transition addTarget(String);
method public androidx.transition.Transition addTarget(Class<?>);
+ method public androidx.transition.Transition addTarget(String);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected void animate(android.animation.Animator?);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected void cancel();
method public abstract void captureEndValues(androidx.transition.TransitionValues);
@@ -163,8 +163,8 @@
method public androidx.transition.Transition excludeChildren(Class<?>, boolean);
method public androidx.transition.Transition excludeTarget(android.view.View, boolean);
method public androidx.transition.Transition excludeTarget(@IdRes int, boolean);
- method public androidx.transition.Transition excludeTarget(String, boolean);
method public androidx.transition.Transition excludeTarget(Class<?>, boolean);
+ method public androidx.transition.Transition excludeTarget(String, boolean);
method public long getDuration();
method public android.graphics.Rect? getEpicenter();
method public androidx.transition.Transition.EpicenterCallback? getEpicenterCallback();
@@ -184,8 +184,8 @@
method public androidx.transition.Transition removeListener(androidx.transition.Transition.TransitionListener);
method public androidx.transition.Transition removeTarget(android.view.View);
method public androidx.transition.Transition removeTarget(@IdRes int);
- method public androidx.transition.Transition removeTarget(String);
method public androidx.transition.Transition removeTarget(Class<?>);
+ method public androidx.transition.Transition removeTarget(String);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void resume(android.view.View?);
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected void runAnimators();
method public androidx.transition.Transition setDuration(long);
@@ -240,8 +240,8 @@
method public static void endTransitions(android.view.ViewGroup?);
method public static void go(androidx.transition.Scene);
method public static void go(androidx.transition.Scene, androidx.transition.Transition?);
- method public void setTransition(androidx.transition.Scene, androidx.transition.Transition?);
method public void setTransition(androidx.transition.Scene, androidx.transition.Scene, androidx.transition.Transition?);
+ method public void setTransition(androidx.transition.Scene, androidx.transition.Transition?);
method public void transitionTo(androidx.transition.Scene);
}
@@ -258,8 +258,8 @@
method public androidx.transition.TransitionSet addListener(androidx.transition.Transition.TransitionListener);
method public androidx.transition.TransitionSet addTarget(android.view.View);
method public androidx.transition.TransitionSet addTarget(@IdRes int);
- method public androidx.transition.TransitionSet addTarget(String);
method public androidx.transition.TransitionSet addTarget(Class<?>);
+ method public androidx.transition.TransitionSet addTarget(String);
method public androidx.transition.TransitionSet addTransition(androidx.transition.Transition);
method public void captureEndValues(androidx.transition.TransitionValues);
method public void captureStartValues(androidx.transition.TransitionValues);
@@ -267,8 +267,8 @@
method public androidx.transition.Transition? getTransitionAt(int);
method public int getTransitionCount();
method public androidx.transition.TransitionSet removeListener(androidx.transition.Transition.TransitionListener);
- method public androidx.transition.TransitionSet removeTarget(@IdRes int);
method public androidx.transition.TransitionSet removeTarget(android.view.View);
+ method public androidx.transition.TransitionSet removeTarget(@IdRes int);
method public androidx.transition.TransitionSet removeTarget(Class<?>);
method public androidx.transition.TransitionSet removeTarget(String);
method public androidx.transition.TransitionSet removeTransition(androidx.transition.Transition);
@@ -294,10 +294,10 @@
method public void captureStartValues(androidx.transition.TransitionValues);
method @androidx.transition.Visibility.Mode public int getMode();
method public boolean isVisible(androidx.transition.TransitionValues?);
- method public android.animation.Animator? onAppear(android.view.ViewGroup, androidx.transition.TransitionValues?, int, androidx.transition.TransitionValues?, int);
method public android.animation.Animator? onAppear(android.view.ViewGroup, android.view.View, androidx.transition.TransitionValues?, androidx.transition.TransitionValues?);
- method public android.animation.Animator? onDisappear(android.view.ViewGroup, androidx.transition.TransitionValues?, int, androidx.transition.TransitionValues?, int);
+ method public android.animation.Animator? onAppear(android.view.ViewGroup, androidx.transition.TransitionValues?, int, androidx.transition.TransitionValues?, int);
method public android.animation.Animator? onDisappear(android.view.ViewGroup, android.view.View, androidx.transition.TransitionValues?, androidx.transition.TransitionValues?);
+ method public android.animation.Animator? onDisappear(android.view.ViewGroup, androidx.transition.TransitionValues?, int, androidx.transition.TransitionValues?, int);
method public void setMode(@androidx.transition.Visibility.Mode int);
field public static final int MODE_IN = 1; // 0x1
field public static final int MODE_OUT = 2; // 0x2
diff --git a/transition/transition/build.gradle b/transition/transition/build.gradle
index e1080ed..1518fbe 100644
--- a/transition/transition/build.gradle
+++ b/transition/transition/build.gradle
@@ -44,7 +44,7 @@
}
androidx {
- name = "Android Transition Support Library"
+ name = "Transition"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2016"
description = "Android Transition Support Library"
diff --git a/transition/transition/src/androidTest/java/androidx/transition/FragmentTransitionTest.kt b/transition/transition/src/androidTest/java/androidx/transition/FragmentTransitionTest.kt
index db5d385..245fde8 100644
--- a/transition/transition/src/androidTest/java/androidx/transition/FragmentTransitionTest.kt
+++ b/transition/transition/src/androidTest/java/androidx/transition/FragmentTransitionTest.kt
@@ -31,6 +31,8 @@
import androidx.transition.test.R
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.After
import org.junit.Assert.fail
import org.junit.Before
@@ -42,8 +44,6 @@
import org.mockito.Mockito.mock
import org.mockito.Mockito.reset
import org.mockito.Mockito.verify
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@MediumTest
@RunWith(Parameterized::class)
diff --git a/tv/tv-foundation/build.gradle b/tv/tv-foundation/build.gradle
index a53a44ee..eace93c 100644
--- a/tv/tv-foundation/build.gradle
+++ b/tv/tv-foundation/build.gradle
@@ -67,7 +67,7 @@
}
androidx {
- name = "androidx.tv:tv-foundation"
+ name = "TV Foundation"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2022"
description = "This library makes it easier for developers" +
diff --git a/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/grid/LazyGridsIndexedTest.kt b/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/grid/LazyGridsIndexedTest.kt
index 7bc39fb..1376532 100644
--- a/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/grid/LazyGridsIndexedTest.kt
+++ b/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/grid/LazyGridsIndexedTest.kt
@@ -17,8 +17,8 @@
package androidx.tv.foundation.lazy.grid
import androidx.compose.foundation.layout.Spacer
-import androidx.compose.foundation.layout.requiredHeight
import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.requiredHeight
import androidx.compose.foundation.text.BasicText
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.testTag
diff --git a/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/grid/LazyGridsReverseLayoutTest.kt b/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/grid/LazyGridsReverseLayoutTest.kt
index 5cf5c36..4d8ad86 100644
--- a/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/grid/LazyGridsReverseLayoutTest.kt
+++ b/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/grid/LazyGridsReverseLayoutTest.kt
@@ -22,7 +22,6 @@
import androidx.compose.foundation.layout.requiredSize
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
-import androidx.tv.foundation.lazy.list.setContentWithTestViewConfiguration
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
@@ -35,6 +34,7 @@
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
+import androidx.tv.foundation.lazy.list.setContentWithTestViewConfiguration
import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Rule
diff --git a/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/grid/LazyNestedScrollingTest.kt b/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/grid/LazyNestedScrollingTest.kt
index ed9df04..f988a2d2 100644
--- a/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/grid/LazyNestedScrollingTest.kt
+++ b/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/grid/LazyNestedScrollingTest.kt
@@ -17,18 +17,16 @@
package androidx.tv.foundation.lazy.grid
import androidx.compose.foundation.focusable
+import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.gestures.ScrollableState
import androidx.compose.foundation.gestures.scrollable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.requiredHeight
import androidx.compose.foundation.layout.requiredSize
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
-import androidx.compose.foundation.gestures.Orientation
-import androidx.compose.foundation.layout.requiredHeight
import androidx.compose.ui.input.key.NativeKeyEvent
-import androidx.tv.foundation.lazy.list.TestTouchSlop
-import androidx.tv.foundation.lazy.list.setContentWithTestViewConfiguration
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onNodeWithTag
@@ -36,6 +34,8 @@
import androidx.compose.ui.unit.dp
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
+import androidx.tv.foundation.lazy.list.TestTouchSlop
+import androidx.tv.foundation.lazy.list.setContentWithTestViewConfiguration
import com.google.common.truth.Truth
import kotlinx.coroutines.runBlocking
import org.junit.Rule
diff --git a/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/grid/LazyScrollTest.kt b/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/grid/LazyScrollTest.kt
index fc4e60f..57639cd 100644
--- a/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/grid/LazyScrollTest.kt
+++ b/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/grid/LazyScrollTest.kt
@@ -22,8 +22,8 @@
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.width
import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.ui.Modifier
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.unit.Dp
import androidx.test.filters.MediumTest
diff --git a/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/grid/TvLazyGridLayoutInfoTest.kt b/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/grid/TvLazyGridLayoutInfoTest.kt
index c1ef2fb9e..55b2cef 100644
--- a/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/grid/TvLazyGridLayoutInfoTest.kt
+++ b/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/grid/TvLazyGridLayoutInfoTest.kt
@@ -21,7 +21,6 @@
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
-import androidx.tv.foundation.lazy.list.LayoutInfoTestParam
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Stable
import androidx.compose.runtime.getValue
@@ -32,6 +31,7 @@
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.dp
import androidx.test.filters.MediumTest
+import androidx.tv.foundation.lazy.list.LayoutInfoTestParam
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
import kotlinx.coroutines.runBlocking
diff --git a/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyColumnTest.kt b/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyColumnTest.kt
index db1f1eb..f26d36e 100644
--- a/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyColumnTest.kt
+++ b/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyColumnTest.kt
@@ -17,7 +17,6 @@
package androidx.tv.foundation.lazy.list
import android.os.Build
-import androidx.tv.foundation.lazy.AutoTestFrameClock
import androidx.compose.foundation.background
import androidx.compose.foundation.focusable
import androidx.compose.foundation.gestures.scrollBy
@@ -58,6 +57,7 @@
import androidx.test.filters.LargeTest
import androidx.test.filters.SdkSuppress
import androidx.tv.foundation.PivotOffsets
+import androidx.tv.foundation.lazy.AutoTestFrameClock
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
import kotlinx.coroutines.runBlocking
diff --git a/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyListAnimateItemPlacementTest.kt b/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyListAnimateItemPlacementTest.kt
index fb1bf65..2e9e5c9 100644
--- a/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyListAnimateItemPlacementTest.kt
+++ b/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyListAnimateItemPlacementTest.kt
@@ -59,14 +59,14 @@
import androidx.tv.foundation.ExperimentalTvFoundationApi
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
+import kotlin.math.roundToInt
import kotlinx.coroutines.runBlocking
import org.junit.Assume.assumeTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
-import org.junit.runners.Parameterized
-import kotlin.math.roundToInt
import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
@LargeTest
@RunWith(Parameterized::class)
diff --git a/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyListPrefetcherTest.kt b/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyListPrefetcherTest.kt
index 13f31cf..688fe7f 100644
--- a/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyListPrefetcherTest.kt
+++ b/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyListPrefetcherTest.kt
@@ -16,7 +16,6 @@
package androidx.tv.foundation.lazy.list
-import androidx.tv.foundation.lazy.AutoTestFrameClock
import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.gestures.scrollBy
import androidx.compose.foundation.layout.PaddingValues
@@ -32,6 +31,7 @@
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.unit.dp
import androidx.test.filters.LargeTest
+import androidx.tv.foundation.lazy.AutoTestFrameClock
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.runBlocking
import org.junit.Test
diff --git a/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyListsIndexedTest.kt b/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyListsIndexedTest.kt
index 9eab54b..2faff75 100644
--- a/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyListsIndexedTest.kt
+++ b/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyListsIndexedTest.kt
@@ -18,10 +18,10 @@
import androidx.compose.foundation.focusable
import androidx.compose.foundation.layout.Spacer
-import androidx.compose.foundation.layout.requiredHeight
import androidx.compose.foundation.layout.height
-import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.layout.requiredHeight
import androidx.compose.foundation.layout.requiredWidth
+import androidx.compose.foundation.layout.width
import androidx.compose.foundation.text.BasicText
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.testTag
diff --git a/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyNestedScrollingTest.kt b/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyNestedScrollingTest.kt
index 02ba39f..1a6000df 100644
--- a/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyNestedScrollingTest.kt
+++ b/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyNestedScrollingTest.kt
@@ -17,6 +17,7 @@
package androidx.tv.foundation.lazy.list
import androidx.compose.foundation.focusable
+import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.gestures.ScrollableState
import androidx.compose.foundation.gestures.scrollable
import androidx.compose.foundation.layout.Box
@@ -24,7 +25,6 @@
import androidx.compose.foundation.layout.requiredSize
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
-import androidx.compose.foundation.gestures.Orientation
import androidx.compose.ui.input.key.NativeKeyEvent
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.test.junit4.createComposeRule
diff --git a/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyScrollTest.kt b/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyScrollTest.kt
index 638985f..6ed7d6c 100644
--- a/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyScrollTest.kt
+++ b/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/list/LazyScrollTest.kt
@@ -17,21 +17,23 @@
package androidx.tv.foundation.lazy.list
import androidx.compose.animation.core.FloatSpringSpec
-import androidx.tv.foundation.lazy.AutoTestFrameClock
+import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.gestures.animateScrollBy
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.width
import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-import androidx.compose.foundation.gestures.Orientation
import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.ui.Modifier
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.unit.Dp
import androidx.test.filters.MediumTest
import androidx.tv.foundation.PivotOffsets
+import androidx.tv.foundation.lazy.AutoTestFrameClock
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
+import java.util.concurrent.TimeUnit
+import kotlin.math.roundToInt
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@@ -42,8 +44,6 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import java.util.concurrent.TimeUnit
-import kotlin.math.roundToInt
@MediumTest
@RunWith(Parameterized::class)
diff --git a/tv/tv-foundation/src/main/java/androidx/tv/foundation/lazy/grid/LazyMeasuredItemProvider.kt b/tv/tv-foundation/src/main/java/androidx/tv/foundation/lazy/grid/LazyMeasuredItemProvider.kt
index 4e5c1df..4e1cabc 100644
--- a/tv/tv-foundation/src/main/java/androidx/tv/foundation/lazy/grid/LazyMeasuredItemProvider.kt
+++ b/tv/tv-foundation/src/main/java/androidx/tv/foundation/lazy/grid/LazyMeasuredItemProvider.kt
@@ -17,10 +17,10 @@
package androidx.tv.foundation.lazy.grid
import androidx.compose.foundation.ExperimentalFoundationApi
-import androidx.tv.foundation.lazy.layout.LazyLayoutKeyIndexMap
import androidx.compose.foundation.lazy.layout.LazyLayoutMeasureScope
import androidx.compose.ui.layout.Placeable
import androidx.compose.ui.unit.Constraints
+import androidx.tv.foundation.lazy.layout.LazyLayoutKeyIndexMap
/**
* Abstracts away the subcomposition from the measuring logic.
diff --git a/tv/tv-foundation/src/main/java/androidx/tv/foundation/lazy/grid/LazyMeasuredLineProvider.kt b/tv/tv-foundation/src/main/java/androidx/tv/foundation/lazy/grid/LazyMeasuredLineProvider.kt
index 1d8433df..6b68329 100644
--- a/tv/tv-foundation/src/main/java/androidx/tv/foundation/lazy/grid/LazyMeasuredLineProvider.kt
+++ b/tv/tv-foundation/src/main/java/androidx/tv/foundation/lazy/grid/LazyMeasuredLineProvider.kt
@@ -17,8 +17,8 @@
package androidx.tv.foundation.lazy.grid
import androidx.compose.foundation.ExperimentalFoundationApi
-import androidx.tv.foundation.lazy.layout.LazyLayoutKeyIndexMap
import androidx.compose.ui.unit.Constraints
+import androidx.tv.foundation.lazy.layout.LazyLayoutKeyIndexMap
/**
* Abstracts away subcomposition and span calculation from the measuring logic of entire lines.
diff --git a/tv/tv-foundation/src/main/java/androidx/tv/foundation/lazy/list/LazyListItemPlacementAnimator.kt b/tv/tv-foundation/src/main/java/androidx/tv/foundation/lazy/list/LazyListItemPlacementAnimator.kt
index 6cde370..431d51a 100644
--- a/tv/tv-foundation/src/main/java/androidx/tv/foundation/lazy/list/LazyListItemPlacementAnimator.kt
+++ b/tv/tv-foundation/src/main/java/androidx/tv/foundation/lazy/list/LazyListItemPlacementAnimator.kt
@@ -23,7 +23,6 @@
import androidx.compose.animation.core.VisibilityThreshold
import androidx.compose.animation.core.spring
import androidx.compose.foundation.ExperimentalFoundationApi
-import androidx.tv.foundation.lazy.layout.LazyLayoutKeyIndexMap
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
@@ -31,6 +30,7 @@
import androidx.compose.ui.util.fastAny
import androidx.compose.ui.util.fastForEach
import androidx.compose.ui.util.fastForEachIndexed
+import androidx.tv.foundation.lazy.layout.LazyLayoutKeyIndexMap
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
diff --git a/tv/tv-foundation/src/main/java/androidx/tv/foundation/lazy/list/LazyMeasuredItemProvider.kt b/tv/tv-foundation/src/main/java/androidx/tv/foundation/lazy/list/LazyMeasuredItemProvider.kt
index cd3a131..a291b8a 100644
--- a/tv/tv-foundation/src/main/java/androidx/tv/foundation/lazy/list/LazyMeasuredItemProvider.kt
+++ b/tv/tv-foundation/src/main/java/androidx/tv/foundation/lazy/list/LazyMeasuredItemProvider.kt
@@ -17,10 +17,10 @@
package androidx.tv.foundation.lazy.list
import androidx.compose.foundation.ExperimentalFoundationApi
-import androidx.tv.foundation.lazy.layout.LazyLayoutKeyIndexMap
import androidx.compose.foundation.lazy.layout.LazyLayoutMeasureScope
import androidx.compose.ui.layout.Placeable
import androidx.compose.ui.unit.Constraints
+import androidx.tv.foundation.lazy.layout.LazyLayoutKeyIndexMap
/**
* Abstracts away the subcomposition from the measuring logic.
diff --git a/tv/tv-material/api/current.txt b/tv/tv-material/api/current.txt
index ad9374e..dea09db 100644
--- a/tv/tv-material/api/current.txt
+++ b/tv/tv-material/api/current.txt
@@ -51,8 +51,8 @@
public final class TextKt {
method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> LocalTextStyle;
}
diff --git a/tv/tv-material/api/public_plus_experimental_current.txt b/tv/tv-material/api/public_plus_experimental_current.txt
index 16c8b91..9fa65e0 100644
--- a/tv/tv-material/api/public_plus_experimental_current.txt
+++ b/tv/tv-material/api/public_plus_experimental_current.txt
@@ -309,9 +309,9 @@
}
public final class IconKt {
- method @androidx.compose.runtime.Composable @androidx.tv.material3.ExperimentalTvMaterial3Api public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
method @androidx.compose.runtime.Composable @androidx.tv.material3.ExperimentalTvMaterial3Api public static void Icon(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
method @androidx.compose.runtime.Composable @androidx.tv.material3.ExperimentalTvMaterial3Api public static void Icon(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+ method @androidx.compose.runtime.Composable @androidx.tv.material3.ExperimentalTvMaterial3Api public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
}
@androidx.compose.runtime.Immutable @androidx.tv.material3.ExperimentalTvMaterial3Api public final class ImmersiveListBackgroundScope implements androidx.compose.foundation.layout.BoxScope {
@@ -450,8 +450,8 @@
public final class SurfaceKt {
method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable @androidx.tv.material3.ExperimentalTvMaterial3Api public static void Surface(optional androidx.compose.ui.Modifier modifier, optional float tonalElevation, optional androidx.compose.ui.graphics.Shape shape, optional androidx.tv.material3.NonInteractiveSurfaceColors colors, optional androidx.tv.material3.Border border, optional androidx.tv.material3.Glow glow, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable @androidx.tv.material3.ExperimentalTvMaterial3Api public static void Surface(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional float tonalElevation, optional androidx.tv.material3.ClickableSurfaceShape shape, optional androidx.tv.material3.ClickableSurfaceColors colors, optional androidx.tv.material3.ClickableSurfaceScale scale, optional androidx.tv.material3.ClickableSurfaceBorder border, optional androidx.tv.material3.ClickableSurfaceGlow glow, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable @androidx.tv.material3.ExperimentalTvMaterial3Api public static void Surface(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional float tonalElevation, optional androidx.tv.material3.ToggleableSurfaceShape shape, optional androidx.tv.material3.ToggleableSurfaceColors colors, optional androidx.tv.material3.ToggleableSurfaceScale scale, optional androidx.tv.material3.ToggleableSurfaceBorder border, optional androidx.tv.material3.ToggleableSurfaceGlow glow, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.tv.material3.ExperimentalTvMaterial3Api public static void Surface(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional float tonalElevation, optional androidx.tv.material3.ClickableSurfaceShape shape, optional androidx.tv.material3.ClickableSurfaceColors colors, optional androidx.tv.material3.ClickableSurfaceScale scale, optional androidx.tv.material3.ClickableSurfaceBorder border, optional androidx.tv.material3.ClickableSurfaceGlow glow, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.unit.Dp> getLocalAbsoluteTonalElevation();
property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.unit.Dp> LocalAbsoluteTonalElevation;
}
@@ -499,8 +499,8 @@
public final class TextKt {
method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> LocalTextStyle;
}
diff --git a/tv/tv-material/api/restricted_current.txt b/tv/tv-material/api/restricted_current.txt
index ad9374e..dea09db 100644
--- a/tv/tv-material/api/restricted_current.txt
+++ b/tv/tv-material/api/restricted_current.txt
@@ -51,8 +51,8 @@
public final class TextKt {
method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> LocalTextStyle;
}
diff --git a/tv/tv-material/build.gradle b/tv/tv-material/build.gradle
index 334a3f1..760e574 100644
--- a/tv/tv-material/build.gradle
+++ b/tv/tv-material/build.gradle
@@ -57,7 +57,7 @@
}
androidx {
- name = "androidx.tv:tv-material"
+ name = "TV Material"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2022"
description = "build TV applications using controls that adhere to Material Design Language."
diff --git a/tv/tv-material/src/main/java/androidx/tv/material3/IconButton.kt b/tv/tv-material/src/main/java/androidx/tv/material3/IconButton.kt
index 408ab4f..bc0b098 100644
--- a/tv/tv-material/src/main/java/androidx/tv/material3/IconButton.kt
+++ b/tv/tv-material/src/main/java/androidx/tv/material3/IconButton.kt
@@ -16,8 +16,8 @@
package androidx.tv.material3
-import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.interaction.Interaction
+import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxScope
import androidx.compose.foundation.layout.fillMaxSize
diff --git a/tv/tv-material/src/main/java/androidx/tv/material3/IconButtonDefaults.kt b/tv/tv-material/src/main/java/androidx/tv/material3/IconButtonDefaults.kt
index c56fd82..d2a3f17 100644
--- a/tv/tv-material/src/main/java/androidx/tv/material3/IconButtonDefaults.kt
+++ b/tv/tv-material/src/main/java/androidx/tv/material3/IconButtonDefaults.kt
@@ -16,9 +16,9 @@
package androidx.tv.material3
-import androidx.compose.foundation.interaction.Interaction
import androidx.annotation.FloatRange
import androidx.compose.foundation.BorderStroke
+import androidx.compose.foundation.interaction.Interaction
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.runtime.Composable
import androidx.compose.runtime.ReadOnlyComposable
diff --git a/tv/tv-material/src/main/java/androidx/tv/material3/Surface.kt b/tv/tv-material/src/main/java/androidx/tv/material3/Surface.kt
index 2b563e7..f21b2bfb 100644
--- a/tv/tv-material/src/main/java/androidx/tv/material3/Surface.kt
+++ b/tv/tv-material/src/main/java/androidx/tv/material3/Surface.kt
@@ -333,7 +333,8 @@
LocalAbsoluteTonalElevation provides absoluteElevation
) {
val zIndex by animateFloatAsState(
- targetValue = if (focused) FocusedZIndex else NonFocusedZIndex
+ targetValue = if (focused) FocusedZIndex else NonFocusedZIndex,
+ label = "zIndex"
)
val backgroundColorByState = surfaceColorAtElevation(
@@ -414,12 +415,14 @@
enabled: Boolean,
onClick: (() -> Unit)?,
interactionSource: MutableInteractionSource
-) = this
- .handleDPadEnter(
- enabled = enabled,
- interactionSource = interactionSource,
- onClick = onClick
- )
+) = handleDPadEnter(
+ enabled = enabled,
+ interactionSource = interactionSource,
+ onClick = onClick
+)
+ // We are not using "clickable" modifier here because if we set "enabled" to false
+ // then the Surface won't be focusable as well. But, in TV use case, a disabled surface
+ // should be focusable
.focusable(interactionSource = interactionSource)
.semantics(mergeDescendants = true) {
onClick {
@@ -447,11 +450,14 @@
onCheckedChange: (Boolean) -> Unit,
interactionSource: MutableInteractionSource,
) = handleDPadEnter(
- enabled = enabled,
- interactionSource = interactionSource,
- checked = checked,
- onCheckedChanged = onCheckedChange
- )
+ enabled = enabled,
+ interactionSource = interactionSource,
+ checked = checked,
+ onCheckedChanged = onCheckedChange
+)
+ // We are not using "toggleable" modifier here because if we set "enabled" to false
+ // then the Surface won't be focusable as well. But, in TV use case, a disabled surface
+ // should be focusable
.focusable(enabled = enabled, interactionSource = interactionSource)
.semantics(mergeDescendants = true) {
onClick {
@@ -492,35 +498,33 @@
val coroutineScope = rememberCoroutineScope()
val pressInteraction = remember { PressInteraction.Press(Offset.Zero) }
var isPressed by remember { mutableStateOf(false) }
- this.then(
- onKeyEvent { keyEvent ->
- if (AcceptableKeys.any { keyEvent.nativeKeyEvent.keyCode == it } && enabled) {
- when (keyEvent.nativeKeyEvent.action) {
- NativeKeyEvent.ACTION_DOWN -> {
- if (!isPressed) {
- isPressed = true
- coroutineScope.launch {
- interactionSource.emit(pressInteraction)
- }
- }
- }
-
- NativeKeyEvent.ACTION_UP -> {
- if (isPressed) {
- isPressed = false
- coroutineScope.launch {
- interactionSource.emit(PressInteraction.Release(pressInteraction))
- }
- onClick?.invoke()
- onCheckedChanged?.invoke(!checked)
+ onKeyEvent { keyEvent ->
+ if (AcceptableKeys.any { keyEvent.nativeKeyEvent.keyCode == it } && enabled) {
+ when (keyEvent.nativeKeyEvent.action) {
+ NativeKeyEvent.ACTION_DOWN -> {
+ if (!isPressed) {
+ isPressed = true
+ coroutineScope.launch {
+ interactionSource.emit(pressInteraction)
}
}
}
- return@onKeyEvent KeyEventPropagation.StopPropagation
+
+ NativeKeyEvent.ACTION_UP -> {
+ if (isPressed) {
+ isPressed = false
+ coroutineScope.launch {
+ interactionSource.emit(PressInteraction.Release(pressInteraction))
+ }
+ onClick?.invoke()
+ onCheckedChanged?.invoke(!checked)
+ }
+ }
}
- KeyEventPropagation.ContinuePropagation
+ return@onKeyEvent KeyEventPropagation.StopPropagation
}
- )
+ KeyEventPropagation.ContinuePropagation
+ }
}
@Composable
diff --git a/tvprovider/tvprovider/api/current.txt b/tvprovider/tvprovider/api/current.txt
index a48d742..c82fb20 100644
--- a/tvprovider/tvprovider/api/current.txt
+++ b/tvprovider/tvprovider/api/current.txt
@@ -76,8 +76,8 @@
@WorkerThread public class ChannelLogoUtils {
ctor @Deprecated public ChannelLogoUtils();
method @WorkerThread public static android.graphics.Bitmap? loadChannelLogo(android.content.Context, long);
- method public static boolean storeChannelLogo(android.content.Context, long, android.net.Uri);
method @WorkerThread public static boolean storeChannelLogo(android.content.Context, long, android.graphics.Bitmap);
+ method public static boolean storeChannelLogo(android.content.Context, long, android.net.Uri);
}
public class PreviewChannel {
@@ -336,20 +336,20 @@
}
public final class TvContractCompat {
- method public static android.net.Uri! buildChannelLogoUri(long);
method public static android.net.Uri! buildChannelLogoUri(android.net.Uri!);
+ method public static android.net.Uri! buildChannelLogoUri(long);
method public static android.net.Uri! buildChannelUri(long);
method public static android.net.Uri! buildChannelUriForPassthroughInput(String!);
method public static android.net.Uri! buildChannelsUriForInput(String?);
method public static String! buildInputId(android.content.ComponentName!);
method public static android.net.Uri! buildPreviewProgramUri(long);
- method public static android.net.Uri! buildPreviewProgramsUriForChannel(long);
method public static android.net.Uri! buildPreviewProgramsUriForChannel(android.net.Uri!);
+ method public static android.net.Uri! buildPreviewProgramsUriForChannel(long);
method public static android.net.Uri! buildProgramUri(long);
- method public static android.net.Uri! buildProgramsUriForChannel(long);
method public static android.net.Uri! buildProgramsUriForChannel(android.net.Uri!);
- method public static android.net.Uri! buildProgramsUriForChannel(long, long, long);
method public static android.net.Uri! buildProgramsUriForChannel(android.net.Uri!, long, long);
+ method public static android.net.Uri! buildProgramsUriForChannel(long);
+ method public static android.net.Uri! buildProgramsUriForChannel(long, long, long);
method public static android.net.Uri! buildRecordedProgramUri(long);
method public static android.net.Uri! buildWatchNextProgramUri(long);
method public static boolean isChannelUri(android.net.Uri!);
diff --git a/tvprovider/tvprovider/api/public_plus_experimental_current.txt b/tvprovider/tvprovider/api/public_plus_experimental_current.txt
index a48d742..c82fb20 100644
--- a/tvprovider/tvprovider/api/public_plus_experimental_current.txt
+++ b/tvprovider/tvprovider/api/public_plus_experimental_current.txt
@@ -76,8 +76,8 @@
@WorkerThread public class ChannelLogoUtils {
ctor @Deprecated public ChannelLogoUtils();
method @WorkerThread public static android.graphics.Bitmap? loadChannelLogo(android.content.Context, long);
- method public static boolean storeChannelLogo(android.content.Context, long, android.net.Uri);
method @WorkerThread public static boolean storeChannelLogo(android.content.Context, long, android.graphics.Bitmap);
+ method public static boolean storeChannelLogo(android.content.Context, long, android.net.Uri);
}
public class PreviewChannel {
@@ -336,20 +336,20 @@
}
public final class TvContractCompat {
- method public static android.net.Uri! buildChannelLogoUri(long);
method public static android.net.Uri! buildChannelLogoUri(android.net.Uri!);
+ method public static android.net.Uri! buildChannelLogoUri(long);
method public static android.net.Uri! buildChannelUri(long);
method public static android.net.Uri! buildChannelUriForPassthroughInput(String!);
method public static android.net.Uri! buildChannelsUriForInput(String?);
method public static String! buildInputId(android.content.ComponentName!);
method public static android.net.Uri! buildPreviewProgramUri(long);
- method public static android.net.Uri! buildPreviewProgramsUriForChannel(long);
method public static android.net.Uri! buildPreviewProgramsUriForChannel(android.net.Uri!);
+ method public static android.net.Uri! buildPreviewProgramsUriForChannel(long);
method public static android.net.Uri! buildProgramUri(long);
- method public static android.net.Uri! buildProgramsUriForChannel(long);
method public static android.net.Uri! buildProgramsUriForChannel(android.net.Uri!);
- method public static android.net.Uri! buildProgramsUriForChannel(long, long, long);
method public static android.net.Uri! buildProgramsUriForChannel(android.net.Uri!, long, long);
+ method public static android.net.Uri! buildProgramsUriForChannel(long);
+ method public static android.net.Uri! buildProgramsUriForChannel(long, long, long);
method public static android.net.Uri! buildRecordedProgramUri(long);
method public static android.net.Uri! buildWatchNextProgramUri(long);
method public static boolean isChannelUri(android.net.Uri!);
diff --git a/tvprovider/tvprovider/api/restricted_current.txt b/tvprovider/tvprovider/api/restricted_current.txt
index 089a93e..aa21de7 100644
--- a/tvprovider/tvprovider/api/restricted_current.txt
+++ b/tvprovider/tvprovider/api/restricted_current.txt
@@ -82,8 +82,8 @@
@WorkerThread public class ChannelLogoUtils {
ctor @Deprecated public ChannelLogoUtils();
method @WorkerThread public static android.graphics.Bitmap? loadChannelLogo(android.content.Context, long);
- method public static boolean storeChannelLogo(android.content.Context, long, android.net.Uri);
method @WorkerThread public static boolean storeChannelLogo(android.content.Context, long, android.graphics.Bitmap);
+ method public static boolean storeChannelLogo(android.content.Context, long, android.net.Uri);
}
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class CollectionUtils {
@@ -367,20 +367,20 @@
}
public final class TvContractCompat {
- method public static android.net.Uri! buildChannelLogoUri(long);
method public static android.net.Uri! buildChannelLogoUri(android.net.Uri!);
+ method public static android.net.Uri! buildChannelLogoUri(long);
method public static android.net.Uri! buildChannelUri(long);
method public static android.net.Uri! buildChannelUriForPassthroughInput(String!);
method public static android.net.Uri! buildChannelsUriForInput(String?);
method public static String! buildInputId(android.content.ComponentName!);
method public static android.net.Uri! buildPreviewProgramUri(long);
- method public static android.net.Uri! buildPreviewProgramsUriForChannel(long);
method public static android.net.Uri! buildPreviewProgramsUriForChannel(android.net.Uri!);
+ method public static android.net.Uri! buildPreviewProgramsUriForChannel(long);
method public static android.net.Uri! buildProgramUri(long);
- method public static android.net.Uri! buildProgramsUriForChannel(long);
method public static android.net.Uri! buildProgramsUriForChannel(android.net.Uri!);
- method public static android.net.Uri! buildProgramsUriForChannel(long, long, long);
method public static android.net.Uri! buildProgramsUriForChannel(android.net.Uri!, long, long);
+ method public static android.net.Uri! buildProgramsUriForChannel(long);
+ method public static android.net.Uri! buildProgramsUriForChannel(long, long, long);
method public static android.net.Uri! buildRecordedProgramUri(long);
method public static android.net.Uri! buildWatchNextProgramUri(long);
method public static boolean isChannelUri(android.net.Uri!);
diff --git a/tvprovider/tvprovider/build.gradle b/tvprovider/tvprovider/build.gradle
index 3ca9e91..4c19140 100644
--- a/tvprovider/tvprovider/build.gradle
+++ b/tvprovider/tvprovider/build.gradle
@@ -24,7 +24,7 @@
}
androidx {
- name = "Android Support TV Provider"
+ name = "TV Provider"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2017"
description = "Android Support Library for TV Provider"
diff --git a/vectordrawable/vectordrawable-animated/api/1.2.0-beta01.txt b/vectordrawable/vectordrawable-animated/api/1.2.0-beta01.txt
index 683796b..b2b38cab 100644
--- a/vectordrawable/vectordrawable-animated/api/1.2.0-beta01.txt
+++ b/vectordrawable/vectordrawable-animated/api/1.2.0-beta01.txt
@@ -21,15 +21,15 @@
method public void draw(android.graphics.Canvas);
method public int getOpacity();
method public boolean isRunning();
- method public void registerAnimationCallback(androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
method public static void registerAnimationCallback(android.graphics.drawable.Drawable?, androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
+ method public void registerAnimationCallback(androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
method public void setAlpha(int);
method public void setColorFilter(android.graphics.ColorFilter?);
method public void setColorFilter(int, android.graphics.PorterDuff.Mode!);
method public void start();
method public void stop();
- method public boolean unregisterAnimationCallback(androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
method public static boolean unregisterAnimationCallback(android.graphics.drawable.Drawable?, androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
+ method public boolean unregisterAnimationCallback(androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
}
}
diff --git a/vectordrawable/vectordrawable-animated/api/current.txt b/vectordrawable/vectordrawable-animated/api/current.txt
index 683796b..b2b38cab 100644
--- a/vectordrawable/vectordrawable-animated/api/current.txt
+++ b/vectordrawable/vectordrawable-animated/api/current.txt
@@ -21,15 +21,15 @@
method public void draw(android.graphics.Canvas);
method public int getOpacity();
method public boolean isRunning();
- method public void registerAnimationCallback(androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
method public static void registerAnimationCallback(android.graphics.drawable.Drawable?, androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
+ method public void registerAnimationCallback(androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
method public void setAlpha(int);
method public void setColorFilter(android.graphics.ColorFilter?);
method public void setColorFilter(int, android.graphics.PorterDuff.Mode!);
method public void start();
method public void stop();
- method public boolean unregisterAnimationCallback(androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
method public static boolean unregisterAnimationCallback(android.graphics.drawable.Drawable?, androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
+ method public boolean unregisterAnimationCallback(androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
}
}
diff --git a/vectordrawable/vectordrawable-animated/api/public_plus_experimental_1.2.0-beta01.txt b/vectordrawable/vectordrawable-animated/api/public_plus_experimental_1.2.0-beta01.txt
index 683796b..b2b38cab 100644
--- a/vectordrawable/vectordrawable-animated/api/public_plus_experimental_1.2.0-beta01.txt
+++ b/vectordrawable/vectordrawable-animated/api/public_plus_experimental_1.2.0-beta01.txt
@@ -21,15 +21,15 @@
method public void draw(android.graphics.Canvas);
method public int getOpacity();
method public boolean isRunning();
- method public void registerAnimationCallback(androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
method public static void registerAnimationCallback(android.graphics.drawable.Drawable?, androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
+ method public void registerAnimationCallback(androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
method public void setAlpha(int);
method public void setColorFilter(android.graphics.ColorFilter?);
method public void setColorFilter(int, android.graphics.PorterDuff.Mode!);
method public void start();
method public void stop();
- method public boolean unregisterAnimationCallback(androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
method public static boolean unregisterAnimationCallback(android.graphics.drawable.Drawable?, androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
+ method public boolean unregisterAnimationCallback(androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
}
}
diff --git a/vectordrawable/vectordrawable-animated/api/public_plus_experimental_current.txt b/vectordrawable/vectordrawable-animated/api/public_plus_experimental_current.txt
index 683796b..b2b38cab 100644
--- a/vectordrawable/vectordrawable-animated/api/public_plus_experimental_current.txt
+++ b/vectordrawable/vectordrawable-animated/api/public_plus_experimental_current.txt
@@ -21,15 +21,15 @@
method public void draw(android.graphics.Canvas);
method public int getOpacity();
method public boolean isRunning();
- method public void registerAnimationCallback(androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
method public static void registerAnimationCallback(android.graphics.drawable.Drawable?, androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
+ method public void registerAnimationCallback(androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
method public void setAlpha(int);
method public void setColorFilter(android.graphics.ColorFilter?);
method public void setColorFilter(int, android.graphics.PorterDuff.Mode!);
method public void start();
method public void stop();
- method public boolean unregisterAnimationCallback(androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
method public static boolean unregisterAnimationCallback(android.graphics.drawable.Drawable?, androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
+ method public boolean unregisterAnimationCallback(androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
}
}
diff --git a/vectordrawable/vectordrawable-animated/api/restricted_1.2.0-beta01.txt b/vectordrawable/vectordrawable-animated/api/restricted_1.2.0-beta01.txt
index 5221d91..502a7a7 100644
--- a/vectordrawable/vectordrawable-animated/api/restricted_1.2.0-beta01.txt
+++ b/vectordrawable/vectordrawable-animated/api/restricted_1.2.0-beta01.txt
@@ -21,15 +21,15 @@
method public void draw(android.graphics.Canvas);
method public int getOpacity();
method public boolean isRunning();
- method public void registerAnimationCallback(androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
method public static void registerAnimationCallback(android.graphics.drawable.Drawable?, androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
+ method public void registerAnimationCallback(androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
method public void setAlpha(int);
method public void setColorFilter(android.graphics.ColorFilter?);
method public void setColorFilter(int, android.graphics.PorterDuff.Mode!);
method public void start();
method public void stop();
- method public boolean unregisterAnimationCallback(androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
method public static boolean unregisterAnimationCallback(android.graphics.drawable.Drawable?, androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
+ method public boolean unregisterAnimationCallback(androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
}
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class AnimationUtilsCompat {
@@ -37,9 +37,9 @@
}
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class AnimatorInflaterCompat {
- method public static android.animation.Animator! loadAnimator(android.content.Context!, @AnimatorRes int) throws android.content.res.Resources.NotFoundException;
method public static android.animation.Animator! loadAnimator(android.content.Context!, android.content.res.Resources!, android.content.res.Resources.Theme!, @AnimatorRes int) throws android.content.res.Resources.NotFoundException;
method public static android.animation.Animator! loadAnimator(android.content.Context!, android.content.res.Resources!, android.content.res.Resources.Theme!, @AnimatorRes int, float) throws android.content.res.Resources.NotFoundException;
+ method public static android.animation.Animator! loadAnimator(android.content.Context!, @AnimatorRes int) throws android.content.res.Resources.NotFoundException;
}
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ArgbEvaluator implements android.animation.TypeEvaluator<java.lang.Object> {
diff --git a/vectordrawable/vectordrawable-animated/api/restricted_current.txt b/vectordrawable/vectordrawable-animated/api/restricted_current.txt
index 5221d91..502a7a7 100644
--- a/vectordrawable/vectordrawable-animated/api/restricted_current.txt
+++ b/vectordrawable/vectordrawable-animated/api/restricted_current.txt
@@ -21,15 +21,15 @@
method public void draw(android.graphics.Canvas);
method public int getOpacity();
method public boolean isRunning();
- method public void registerAnimationCallback(androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
method public static void registerAnimationCallback(android.graphics.drawable.Drawable?, androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
+ method public void registerAnimationCallback(androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
method public void setAlpha(int);
method public void setColorFilter(android.graphics.ColorFilter?);
method public void setColorFilter(int, android.graphics.PorterDuff.Mode!);
method public void start();
method public void stop();
- method public boolean unregisterAnimationCallback(androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
method public static boolean unregisterAnimationCallback(android.graphics.drawable.Drawable?, androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
+ method public boolean unregisterAnimationCallback(androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback?);
}
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class AnimationUtilsCompat {
@@ -37,9 +37,9 @@
}
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class AnimatorInflaterCompat {
- method public static android.animation.Animator! loadAnimator(android.content.Context!, @AnimatorRes int) throws android.content.res.Resources.NotFoundException;
method public static android.animation.Animator! loadAnimator(android.content.Context!, android.content.res.Resources!, android.content.res.Resources.Theme!, @AnimatorRes int) throws android.content.res.Resources.NotFoundException;
method public static android.animation.Animator! loadAnimator(android.content.Context!, android.content.res.Resources!, android.content.res.Resources.Theme!, @AnimatorRes int, float) throws android.content.res.Resources.NotFoundException;
+ method public static android.animation.Animator! loadAnimator(android.content.Context!, @AnimatorRes int) throws android.content.res.Resources.NotFoundException;
}
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ArgbEvaluator implements android.animation.TypeEvaluator<java.lang.Object> {
diff --git a/vectordrawable/vectordrawable-animated/build.gradle b/vectordrawable/vectordrawable-animated/build.gradle
index 2217ba2..8fd4fa3 100644
--- a/vectordrawable/vectordrawable-animated/build.gradle
+++ b/vectordrawable/vectordrawable-animated/build.gradle
@@ -34,7 +34,7 @@
}
androidx {
- name = "Android Support AnimatedVectorDrawable"
+ name = "AnimatedVectorDrawable"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.VECTORDRAWABLE_ANIMATED
inceptionYear = "2015"
diff --git a/vectordrawable/vectordrawable-seekable/build.gradle b/vectordrawable/vectordrawable-seekable/build.gradle
index aac1763..fa14340 100644
--- a/vectordrawable/vectordrawable-seekable/build.gradle
+++ b/vectordrawable/vectordrawable-seekable/build.gradle
@@ -36,7 +36,7 @@
}
androidx {
- name = "Android SeekableAnimatedVectorDrawable"
+ name = "SeekableAnimatedVectorDrawable"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.VECTORDRAWABLE_SEEKABLE
inceptionYear = "2020"
diff --git a/vectordrawable/vectordrawable/build.gradle b/vectordrawable/vectordrawable/build.gradle
index 9a818af..1d61639 100644
--- a/vectordrawable/vectordrawable/build.gradle
+++ b/vectordrawable/vectordrawable/build.gradle
@@ -28,7 +28,7 @@
}
androidx {
- name = "Android Support VectorDrawable"
+ name = "VectorDrawable"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.VECTORDRAWABLE
inceptionYear = "2015"
diff --git a/versionedparcelable/versionedparcelable/api/restricted_current.txt b/versionedparcelable/versionedparcelable/api/restricted_current.txt
index 7927248..6cb1356 100644
--- a/versionedparcelable/versionedparcelable/api/restricted_current.txt
+++ b/versionedparcelable/versionedparcelable/api/restricted_current.txt
@@ -31,12 +31,12 @@
method protected abstract androidx.versionedparcelable.VersionedParcel createSubParcel();
method protected static Throwable getRootCause(Throwable);
method public boolean isStream();
- method public <T> T![]? readArray(T![]?, int);
method protected <T> T![]? readArray(T![]?);
+ method public <T> T![]? readArray(T![]?, int);
method protected abstract boolean readBoolean();
method public boolean readBoolean(boolean, int);
- method public boolean[]? readBooleanArray(boolean[]?, int);
method protected boolean[]? readBooleanArray();
+ method public boolean[]? readBooleanArray(boolean[]?, int);
method protected abstract android.os.Bundle? readBundle();
method public android.os.Bundle? readBundle(android.os.Bundle?, int);
method public byte readByte(byte, int);
@@ -47,24 +47,24 @@
method public CharSequence? readCharSequence(CharSequence?, int);
method protected abstract double readDouble();
method public double readDouble(double, int);
- method public double[]? readDoubleArray(double[]?, int);
method protected double[]? readDoubleArray();
+ method public double[]? readDoubleArray(double[]?, int);
method public Exception? readException(Exception?, int);
method protected abstract boolean readField(int);
method protected abstract float readFloat();
method public float readFloat(float, int);
- method public float[]? readFloatArray(float[]?, int);
method protected float[]? readFloatArray();
+ method public float[]? readFloatArray(float[]?, int);
method protected <T extends androidx.versionedparcelable.VersionedParcelable> T readFromParcel(String, androidx.versionedparcelable.VersionedParcel);
method protected abstract int readInt();
method public int readInt(int, int);
- method public int[]? readIntArray(int[]?, int);
method protected int[]? readIntArray();
+ method public int[]? readIntArray(int[]?, int);
method public <T> java.util.List<T!>? readList(java.util.List<T!>?, int);
method protected abstract long readLong();
method public long readLong(long, int);
- method public long[]? readLongArray(long[]?, int);
method protected long[]? readLongArray();
+ method public long[]? readLongArray(long[]?, int);
method public <K, V> java.util.Map<K!,V!>? readMap(java.util.Map<K!,V!>?, int);
method protected abstract <T extends android.os.Parcelable> T? readParcelable();
method public <T extends android.os.Parcelable> T? readParcelable(T?, int);
@@ -77,44 +77,44 @@
method public String? readString(String?, int);
method protected abstract android.os.IBinder? readStrongBinder();
method public android.os.IBinder? readStrongBinder(android.os.IBinder?, int);
- method public <T extends androidx.versionedparcelable.VersionedParcelable> T? readVersionedParcelable(T?, int);
method protected <T extends androidx.versionedparcelable.VersionedParcelable> T? readVersionedParcelable();
+ method public <T extends androidx.versionedparcelable.VersionedParcelable> T? readVersionedParcelable(T?, int);
method protected abstract void setOutputField(int);
method public void setSerializationFlags(boolean, boolean);
- method public <T> void writeArray(T![]?, int);
method protected <T> void writeArray(T![]?);
+ method public <T> void writeArray(T![]?, int);
method protected abstract void writeBoolean(boolean);
method public void writeBoolean(boolean, int);
- method public void writeBooleanArray(boolean[]?, int);
method protected void writeBooleanArray(boolean[]?);
+ method public void writeBooleanArray(boolean[]?, int);
method protected abstract void writeBundle(android.os.Bundle?);
method public void writeBundle(android.os.Bundle?, int);
method public void writeByte(byte, int);
method protected abstract void writeByteArray(byte[]?);
- method protected abstract void writeByteArray(byte[]?, int, int);
method public void writeByteArray(byte[]?, int);
+ method protected abstract void writeByteArray(byte[]?, int, int);
method public void writeByteArray(byte[]?, int, int, int);
method public void writeCharArray(char[]?, int);
method protected abstract void writeCharSequence(CharSequence?);
method public void writeCharSequence(CharSequence?, int);
method protected abstract void writeDouble(double);
method public void writeDouble(double, int);
- method public void writeDoubleArray(double[]?, int);
method protected void writeDoubleArray(double[]?);
+ method public void writeDoubleArray(double[]?, int);
method public void writeException(Exception?, int);
method protected abstract void writeFloat(float);
method public void writeFloat(float, int);
- method public void writeFloatArray(float[]?, int);
method protected void writeFloatArray(float[]?);
+ method public void writeFloatArray(float[]?, int);
method protected abstract void writeInt(int);
method public void writeInt(int, int);
- method public void writeIntArray(int[]?, int);
method protected void writeIntArray(int[]?);
+ method public void writeIntArray(int[]?, int);
method public <T> void writeList(java.util.List<T!>?, int);
method protected abstract void writeLong(long);
method public void writeLong(long, int);
- method public void writeLongArray(long[]?, int);
method protected void writeLongArray(long[]?);
+ method public void writeLongArray(long[]?, int);
method public <K, V> void writeMap(java.util.Map<K!,V!>?, int);
method protected void writeNoException();
method protected abstract void writeParcelable(android.os.Parcelable?);
@@ -131,8 +131,8 @@
method protected abstract void writeStrongInterface(android.os.IInterface?);
method public void writeStrongInterface(android.os.IInterface?, int);
method protected <T extends androidx.versionedparcelable.VersionedParcelable> void writeToParcel(T, androidx.versionedparcelable.VersionedParcel);
- method public void writeVersionedParcelable(androidx.versionedparcelable.VersionedParcelable?, int);
method protected void writeVersionedParcelable(androidx.versionedparcelable.VersionedParcelable?);
+ method public void writeVersionedParcelable(androidx.versionedparcelable.VersionedParcelable?, int);
}
public static class VersionedParcel.ParcelException extends java.lang.RuntimeException {
diff --git a/viewpager/viewpager/api/current.txt b/viewpager/viewpager/api/current.txt
index 5396c43..d3f6327 100644
--- a/viewpager/viewpager/api/current.txt
+++ b/viewpager/viewpager/api/current.txt
@@ -3,25 +3,25 @@
public abstract class PagerAdapter {
ctor public PagerAdapter();
- method public void destroyItem(android.view.ViewGroup, int, Object);
method @Deprecated public void destroyItem(android.view.View, int, Object);
- method public void finishUpdate(android.view.ViewGroup);
+ method public void destroyItem(android.view.ViewGroup, int, Object);
method @Deprecated public void finishUpdate(android.view.View);
+ method public void finishUpdate(android.view.ViewGroup);
method public abstract int getCount();
method public int getItemPosition(Object);
method public CharSequence? getPageTitle(int);
method public float getPageWidth(int);
- method public Object instantiateItem(android.view.ViewGroup, int);
method @Deprecated public Object instantiateItem(android.view.View, int);
+ method public Object instantiateItem(android.view.ViewGroup, int);
method public abstract boolean isViewFromObject(android.view.View, Object);
method public void notifyDataSetChanged();
method public void registerDataSetObserver(android.database.DataSetObserver);
method public void restoreState(android.os.Parcelable?, ClassLoader?);
method public android.os.Parcelable? saveState();
- method public void setPrimaryItem(android.view.ViewGroup, int, Object);
method @Deprecated public void setPrimaryItem(android.view.View, int, Object);
- method public void startUpdate(android.view.ViewGroup);
+ method public void setPrimaryItem(android.view.ViewGroup, int, Object);
method @Deprecated public void startUpdate(android.view.View);
+ method public void startUpdate(android.view.ViewGroup);
method public void unregisterDataSetObserver(android.database.DataSetObserver);
field public static final int POSITION_NONE = -2; // 0xfffffffe
field public static final int POSITION_UNCHANGED = -1; // 0xffffffff
diff --git a/viewpager/viewpager/api/public_plus_experimental_current.txt b/viewpager/viewpager/api/public_plus_experimental_current.txt
index 5396c43..d3f6327 100644
--- a/viewpager/viewpager/api/public_plus_experimental_current.txt
+++ b/viewpager/viewpager/api/public_plus_experimental_current.txt
@@ -3,25 +3,25 @@
public abstract class PagerAdapter {
ctor public PagerAdapter();
- method public void destroyItem(android.view.ViewGroup, int, Object);
method @Deprecated public void destroyItem(android.view.View, int, Object);
- method public void finishUpdate(android.view.ViewGroup);
+ method public void destroyItem(android.view.ViewGroup, int, Object);
method @Deprecated public void finishUpdate(android.view.View);
+ method public void finishUpdate(android.view.ViewGroup);
method public abstract int getCount();
method public int getItemPosition(Object);
method public CharSequence? getPageTitle(int);
method public float getPageWidth(int);
- method public Object instantiateItem(android.view.ViewGroup, int);
method @Deprecated public Object instantiateItem(android.view.View, int);
+ method public Object instantiateItem(android.view.ViewGroup, int);
method public abstract boolean isViewFromObject(android.view.View, Object);
method public void notifyDataSetChanged();
method public void registerDataSetObserver(android.database.DataSetObserver);
method public void restoreState(android.os.Parcelable?, ClassLoader?);
method public android.os.Parcelable? saveState();
- method public void setPrimaryItem(android.view.ViewGroup, int, Object);
method @Deprecated public void setPrimaryItem(android.view.View, int, Object);
- method public void startUpdate(android.view.ViewGroup);
+ method public void setPrimaryItem(android.view.ViewGroup, int, Object);
method @Deprecated public void startUpdate(android.view.View);
+ method public void startUpdate(android.view.ViewGroup);
method public void unregisterDataSetObserver(android.database.DataSetObserver);
field public static final int POSITION_NONE = -2; // 0xfffffffe
field public static final int POSITION_UNCHANGED = -1; // 0xffffffff
diff --git a/viewpager/viewpager/api/restricted_current.txt b/viewpager/viewpager/api/restricted_current.txt
index 5396c43..d3f6327 100644
--- a/viewpager/viewpager/api/restricted_current.txt
+++ b/viewpager/viewpager/api/restricted_current.txt
@@ -3,25 +3,25 @@
public abstract class PagerAdapter {
ctor public PagerAdapter();
- method public void destroyItem(android.view.ViewGroup, int, Object);
method @Deprecated public void destroyItem(android.view.View, int, Object);
- method public void finishUpdate(android.view.ViewGroup);
+ method public void destroyItem(android.view.ViewGroup, int, Object);
method @Deprecated public void finishUpdate(android.view.View);
+ method public void finishUpdate(android.view.ViewGroup);
method public abstract int getCount();
method public int getItemPosition(Object);
method public CharSequence? getPageTitle(int);
method public float getPageWidth(int);
- method public Object instantiateItem(android.view.ViewGroup, int);
method @Deprecated public Object instantiateItem(android.view.View, int);
+ method public Object instantiateItem(android.view.ViewGroup, int);
method public abstract boolean isViewFromObject(android.view.View, Object);
method public void notifyDataSetChanged();
method public void registerDataSetObserver(android.database.DataSetObserver);
method public void restoreState(android.os.Parcelable?, ClassLoader?);
method public android.os.Parcelable? saveState();
- method public void setPrimaryItem(android.view.ViewGroup, int, Object);
method @Deprecated public void setPrimaryItem(android.view.View, int, Object);
- method public void startUpdate(android.view.ViewGroup);
+ method public void setPrimaryItem(android.view.ViewGroup, int, Object);
method @Deprecated public void startUpdate(android.view.View);
+ method public void startUpdate(android.view.ViewGroup);
method public void unregisterDataSetObserver(android.database.DataSetObserver);
field public static final int POSITION_NONE = -2; // 0xfffffffe
field public static final int POSITION_UNCHANGED = -1; // 0xffffffff
diff --git a/viewpager/viewpager/build.gradle b/viewpager/viewpager/build.gradle
index 583c085..0bf2230 100644
--- a/viewpager/viewpager/build.gradle
+++ b/viewpager/viewpager/build.gradle
@@ -21,7 +21,7 @@
}
androidx {
- name = "Android Support Library View Pager"
+ name = "ViewPager"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later."
diff --git a/viewpager2/integration-tests/targetsdk-tests/src/androidTest/kotlin/androidx/viewpager2/integration/targetsdktests/OnApplyWindowInsetsListenerTest.kt b/viewpager2/integration-tests/targetsdk-tests/src/androidTest/kotlin/androidx/viewpager2/integration/targetsdktests/OnApplyWindowInsetsListenerTest.kt
index 6e8f5e1..1a6f6cb 100644
--- a/viewpager2/integration-tests/targetsdk-tests/src/androidTest/kotlin/androidx/viewpager2/integration/targetsdktests/OnApplyWindowInsetsListenerTest.kt
+++ b/viewpager2/integration-tests/targetsdk-tests/src/androidTest/kotlin/androidx/viewpager2/integration/targetsdktests/OnApplyWindowInsetsListenerTest.kt
@@ -38,14 +38,14 @@
import androidx.viewpager2.widget.ViewPager2
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_HORIZONTAL
import androidx.viewpager2.widget.WindowInsetsApplier
+import java.lang.reflect.Field
import org.hamcrest.CoreMatchers.equalTo
-import org.junit.Assert.assertNotNull
import org.hamcrest.MatcherAssert.assertThat
+import org.junit.Assert.assertNotNull
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import java.lang.reflect.Field
@LargeTest
@SdkSuppress(minSdkVersion = 30) // TODO(b/273945673): fix test on API 21..30
diff --git a/viewpager2/integration-tests/testapp/src/androidTest/java/androidx/viewpager2/integration/testapp/test/BaseTest.kt b/viewpager2/integration-tests/testapp/src/androidTest/java/androidx/viewpager2/integration/testapp/test/BaseTest.kt
index 04b9043..b211aef 100644
--- a/viewpager2/integration-tests/testapp/src/androidTest/java/androidx/viewpager2/integration/testapp/test/BaseTest.kt
+++ b/viewpager2/integration-tests/testapp/src/androidTest/java/androidx/viewpager2/integration/testapp/test/BaseTest.kt
@@ -40,12 +40,12 @@
import androidx.viewpager2.widget.ViewPager2
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_HORIZONTAL
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_VERTICAL
+import java.util.Locale
import org.hamcrest.CoreMatchers.equalTo
import org.hamcrest.Matcher
import org.junit.After
import org.junit.Before
import org.junit.Rule
-import java.util.Locale
/**
* Base class for all tests. Contains common functionality, like finding the [ViewPager2] under
diff --git a/viewpager2/integration-tests/testapp/src/androidTest/java/androidx/viewpager2/integration/testapp/test/FakeDragTest.kt b/viewpager2/integration-tests/testapp/src/androidTest/java/androidx/viewpager2/integration/testapp/test/FakeDragTest.kt
index 95aee13..f94204a 100644
--- a/viewpager2/integration-tests/testapp/src/androidTest/java/androidx/viewpager2/integration/testapp/test/FakeDragTest.kt
+++ b/viewpager2/integration-tests/testapp/src/androidTest/java/androidx/viewpager2/integration/testapp/test/FakeDragTest.kt
@@ -42,14 +42,14 @@
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_HORIZONTAL
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_VERTICAL
import androidx.viewpager2.widget.ViewPager2.SCROLL_STATE_DRAGGING
+import java.lang.reflect.Field
+import kotlin.math.sign
import org.hamcrest.CoreMatchers.equalTo
import org.junit.Before
import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import java.lang.reflect.Field
-import kotlin.math.sign
@LargeTest
@RunWith(Parameterized::class)
diff --git a/viewpager2/integration-tests/testapp/src/androidTest/java/androidx/viewpager2/integration/testapp/test/MarginPageTransformerTest.kt b/viewpager2/integration-tests/testapp/src/androidTest/java/androidx/viewpager2/integration/testapp/test/MarginPageTransformerTest.kt
index aba8db8..44c7c81 100644
--- a/viewpager2/integration-tests/testapp/src/androidTest/java/androidx/viewpager2/integration/testapp/test/MarginPageTransformerTest.kt
+++ b/viewpager2/integration-tests/testapp/src/androidTest/java/androidx/viewpager2/integration/testapp/test/MarginPageTransformerTest.kt
@@ -30,16 +30,16 @@
import androidx.viewpager2.widget.ViewPager2
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_HORIZONTAL
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_VERTICAL
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.hamcrest.CoreMatchers
+import org.hamcrest.MatcherAssert.assertThat
import org.hamcrest.Matchers.closeTo
import org.hamcrest.Matchers.equalTo
import org.hamcrest.Matchers.greaterThan
-import org.hamcrest.MatcherAssert.assertThat
import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
private const val LABEL_NONE = "None"
private const val LABEL_50_PX = "Margin 50px"
diff --git a/viewpager2/integration-tests/testapp/src/androidTest/java/androidx/viewpager2/integration/testapp/test/util/AnimationVerifier.kt b/viewpager2/integration-tests/testapp/src/androidTest/java/androidx/viewpager2/integration/testapp/test/util/AnimationVerifier.kt
index 920657f..6884e9e 100644
--- a/viewpager2/integration-tests/testapp/src/androidTest/java/androidx/viewpager2/integration/testapp/test/util/AnimationVerifier.kt
+++ b/viewpager2/integration-tests/testapp/src/androidTest/java/androidx/viewpager2/integration/testapp/test/util/AnimationVerifier.kt
@@ -21,10 +21,10 @@
import androidx.recyclerview.widget.RecyclerView
import androidx.test.espresso.matcher.ViewMatchers.assertThat
import androidx.viewpager2.widget.ViewPager2
-import org.hamcrest.CoreMatchers.equalTo
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
import kotlin.math.abs
+import org.hamcrest.CoreMatchers.equalTo
/**
* Verifies if animation happened in the given [ViewPager2]. It listens to
diff --git a/viewpager2/integration-tests/testapp/src/main/java/androidx/viewpager2/integration/testapp/CardFragmentActivity.kt b/viewpager2/integration-tests/testapp/src/main/java/androidx/viewpager2/integration/testapp/CardFragmentActivity.kt
index cc02c2f..843322b 100644
--- a/viewpager2/integration-tests/testapp/src/main/java/androidx/viewpager2/integration/testapp/CardFragmentActivity.kt
+++ b/viewpager2/integration-tests/testapp/src/main/java/androidx/viewpager2/integration/testapp/CardFragmentActivity.kt
@@ -22,7 +22,6 @@
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter
-
import androidx.viewpager2.integration.testapp.cards.Card
import androidx.viewpager2.integration.testapp.cards.CardView
diff --git a/viewpager2/integration-tests/testapp/src/main/java/androidx/viewpager2/integration/testapp/PageTransformerActivity.kt b/viewpager2/integration-tests/testapp/src/main/java/androidx/viewpager2/integration/testapp/PageTransformerActivity.kt
index e01899c..fe0c4ed 100644
--- a/viewpager2/integration-tests/testapp/src/main/java/androidx/viewpager2/integration/testapp/PageTransformerActivity.kt
+++ b/viewpager2/integration-tests/testapp/src/main/java/androidx/viewpager2/integration/testapp/PageTransformerActivity.kt
@@ -19,8 +19,8 @@
import android.os.Bundle
import androidx.fragment.app.FragmentActivity
import androidx.viewpager2.integration.testapp.cards.CardViewAdapter
-import androidx.viewpager2.widget.ViewPager2
import androidx.viewpager2.widget.MarginPageTransformer
+import androidx.viewpager2.widget.ViewPager2
/**
* Shows examples of [ViewPager2.PageTransformer], e.g. [MarginPageTransformer].
diff --git a/viewpager2/integration-tests/testapp/src/main/java/androidx/viewpager2/integration/testapp/cards/CardView.kt b/viewpager2/integration-tests/testapp/src/main/java/androidx/viewpager2/integration/testapp/cards/CardView.kt
index a079f44..2ad388f 100644
--- a/viewpager2/integration-tests/testapp/src/main/java/androidx/viewpager2/integration/testapp/cards/CardView.kt
+++ b/viewpager2/integration-tests/testapp/src/main/java/androidx/viewpager2/integration/testapp/cards/CardView.kt
@@ -20,9 +20,7 @@
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
-
import androidx.annotation.ColorRes
-
import androidx.viewpager2.integration.testapp.R
/** Inflates and populates a [View] representing a [Card] */
diff --git a/viewpager2/viewpager2/api/current.txt b/viewpager2/viewpager2/api/current.txt
index 997ce2a..32e3185 100644
--- a/viewpager2/viewpager2/api/current.txt
+++ b/viewpager2/viewpager2/api/current.txt
@@ -2,8 +2,8 @@
package androidx.viewpager2.adapter {
public abstract class FragmentStateAdapter extends androidx.recyclerview.widget.RecyclerView.Adapter<androidx.viewpager2.adapter.FragmentViewHolder> implements androidx.viewpager2.adapter.StatefulAdapter {
- ctor public FragmentStateAdapter(androidx.fragment.app.FragmentActivity);
ctor public FragmentStateAdapter(androidx.fragment.app.Fragment);
+ ctor public FragmentStateAdapter(androidx.fragment.app.FragmentActivity);
ctor public FragmentStateAdapter(androidx.fragment.app.FragmentManager, androidx.lifecycle.Lifecycle);
method public boolean containsItem(long);
method public abstract androidx.fragment.app.Fragment createFragment(int);
diff --git a/viewpager2/viewpager2/api/public_plus_experimental_current.txt b/viewpager2/viewpager2/api/public_plus_experimental_current.txt
index 63ac8cb..2aabc06 100644
--- a/viewpager2/viewpager2/api/public_plus_experimental_current.txt
+++ b/viewpager2/viewpager2/api/public_plus_experimental_current.txt
@@ -2,8 +2,8 @@
package androidx.viewpager2.adapter {
public abstract class FragmentStateAdapter extends androidx.recyclerview.widget.RecyclerView.Adapter<androidx.viewpager2.adapter.FragmentViewHolder> implements androidx.viewpager2.adapter.StatefulAdapter {
- ctor public FragmentStateAdapter(androidx.fragment.app.FragmentActivity);
ctor public FragmentStateAdapter(androidx.fragment.app.Fragment);
+ ctor public FragmentStateAdapter(androidx.fragment.app.FragmentActivity);
ctor public FragmentStateAdapter(androidx.fragment.app.FragmentManager, androidx.lifecycle.Lifecycle);
method public boolean containsItem(long);
method public abstract androidx.fragment.app.Fragment createFragment(int);
diff --git a/viewpager2/viewpager2/api/restricted_current.txt b/viewpager2/viewpager2/api/restricted_current.txt
index 4aab4bd..e1f1be7 100644
--- a/viewpager2/viewpager2/api/restricted_current.txt
+++ b/viewpager2/viewpager2/api/restricted_current.txt
@@ -2,8 +2,8 @@
package androidx.viewpager2.adapter {
public abstract class FragmentStateAdapter extends androidx.recyclerview.widget.RecyclerView.Adapter<androidx.viewpager2.adapter.FragmentViewHolder> implements androidx.viewpager2.adapter.StatefulAdapter {
- ctor public FragmentStateAdapter(androidx.fragment.app.FragmentActivity);
ctor public FragmentStateAdapter(androidx.fragment.app.Fragment);
+ ctor public FragmentStateAdapter(androidx.fragment.app.FragmentActivity);
ctor public FragmentStateAdapter(androidx.fragment.app.FragmentManager, androidx.lifecycle.Lifecycle);
method public boolean containsItem(long);
method public abstract androidx.fragment.app.Fragment createFragment(int);
diff --git a/viewpager2/viewpager2/build.gradle b/viewpager2/viewpager2/build.gradle
index 7397c66..fcba271 100644
--- a/viewpager2/viewpager2/build.gradle
+++ b/viewpager2/viewpager2/build.gradle
@@ -52,7 +52,7 @@
}
androidx {
- name = "AndroidX Widget ViewPager2"
+ name = "ViewPager2"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2017"
description = "AndroidX Widget ViewPager2"
diff --git a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/AccessibilityTest.kt b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/AccessibilityTest.kt
index afd41feb..f3ba3a4 100644
--- a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/AccessibilityTest.kt
+++ b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/AccessibilityTest.kt
@@ -27,12 +27,12 @@
import androidx.testutils.LocaleTestUtils
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_HORIZONTAL
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_VERTICAL
+import java.util.concurrent.TimeUnit
import org.hamcrest.CoreMatchers.equalTo
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import java.util.concurrent.TimeUnit
@RunWith(Parameterized::class)
@LargeTest
diff --git a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/AdapterDataSetChangeTest.kt b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/AdapterDataSetChangeTest.kt
index 24b8bf3..d5f29f4 100644
--- a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/AdapterDataSetChangeTest.kt
+++ b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/AdapterDataSetChangeTest.kt
@@ -27,14 +27,14 @@
import androidx.viewpager2.widget.AdapterDataSetChangeTest.Action.ReplaceWith
import androidx.viewpager2.widget.AdapterDataSetChangeTest.TestConfig
import androidx.viewpager2.widget.swipe.ViewAdapter
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit.SECONDS
import org.hamcrest.MatcherAssert.assertThat
import org.hamcrest.Matchers.equalTo
import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit.SECONDS
@RunWith(Parameterized::class)
@LargeTest
diff --git a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/AdapterDataSetChangeWhileSmoothScrollTest.kt b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/AdapterDataSetChangeWhileSmoothScrollTest.kt
index 227a1f0..3f7aa14 100644
--- a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/AdapterDataSetChangeWhileSmoothScrollTest.kt
+++ b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/AdapterDataSetChangeWhileSmoothScrollTest.kt
@@ -33,16 +33,16 @@
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_VERTICAL
import androidx.viewpager2.widget.ViewPager2.SCROLL_STATE_IDLE
import androidx.viewpager2.widget.ViewPager2.SCROLL_STATE_SETTLING
+import java.util.concurrent.TimeUnit.SECONDS
+import kotlin.math.roundToInt
+import kotlin.math.sign
import org.hamcrest.CoreMatchers.equalTo
-import org.hamcrest.Matchers.greaterThan
import org.hamcrest.MatcherAssert.assertThat
+import org.hamcrest.Matchers.greaterThan
import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import java.util.concurrent.TimeUnit.SECONDS
-import kotlin.math.roundToInt
-import kotlin.math.sign
/** Number of pages */
private const val pageCount = 25
diff --git a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/AdapterTest.kt b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/AdapterTest.kt
index 45aca4c..2625d59 100644
--- a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/AdapterTest.kt
+++ b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/AdapterTest.kt
@@ -24,14 +24,14 @@
import androidx.viewpager2.widget.BaseTest.Context.SwipeMethod
import androidx.viewpager2.widget.ViewPager2.SCROLL_STATE_DRAGGING
import androidx.viewpager2.widget.ViewPager2.SCROLL_STATE_IDLE
+import java.util.concurrent.TimeUnit.SECONDS
import org.hamcrest.CoreMatchers.equalTo
import org.hamcrest.CoreMatchers.notNullValue
import org.hamcrest.CoreMatchers.nullValue
-import org.hamcrest.Matchers.greaterThan
import org.hamcrest.MatcherAssert.assertThat
+import org.hamcrest.Matchers.greaterThan
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.TimeUnit.SECONDS
@LargeTest
@RunWith(AndroidJUnit4::class)
diff --git a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/BaseTest.kt b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/BaseTest.kt
index 1ac998c..aaa96c9 100644
--- a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/BaseTest.kt
+++ b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/BaseTest.kt
@@ -62,20 +62,20 @@
import androidx.viewpager2.widget.swipe.TestActivity
import androidx.viewpager2.widget.swipe.ViewAdapter
import androidx.viewpager2.widget.swipe.WaitForInjectMotionEventsAction.Companion.waitForInjectMotionEvents
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import kotlin.math.abs
import org.hamcrest.CoreMatchers.equalTo
import org.hamcrest.Matcher
+import org.hamcrest.MatcherAssert.assertThat
import org.hamcrest.Matchers.allOf
import org.hamcrest.Matchers.greaterThanOrEqualTo
import org.hamcrest.Matchers.lessThan
import org.hamcrest.Matchers.lessThanOrEqualTo
import org.junit.After
-import org.hamcrest.MatcherAssert.assertThat
+import org.junit.Assert.fail
import org.junit.Before
import org.junit.Rule
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
-import kotlin.math.abs
-import org.junit.Assert.fail
open class BaseTest {
companion object {
diff --git a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/CanScrollTest.kt b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/CanScrollTest.kt
index 045de41..f4df49a 100644
--- a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/CanScrollTest.kt
+++ b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/CanScrollTest.kt
@@ -22,11 +22,11 @@
import androidx.testutils.LocaleTestUtils
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_HORIZONTAL
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_VERTICAL
+import java.util.concurrent.TimeUnit.SECONDS
import org.hamcrest.CoreMatchers.equalTo
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.TimeUnit.SECONDS
/**
* Tests [ViewPager2.canScrollHorizontally] and [ViewPager2.canScrollVertically]
diff --git a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/DisableUserInputTest.kt b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/DisableUserInputTest.kt
index 1be5e31..887553a 100644
--- a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/DisableUserInputTest.kt
+++ b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/DisableUserInputTest.kt
@@ -28,13 +28,13 @@
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_HORIZONTAL
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_VERTICAL
import androidx.viewpager2.widget.swipe.ViewAdapter
+import java.util.concurrent.TimeUnit.SECONDS
+import kotlin.math.roundToInt
import org.hamcrest.CoreMatchers.equalTo
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import java.util.concurrent.TimeUnit.SECONDS
-import kotlin.math.roundToInt
/**
* Tests what happens when a smooth scroll is interrupted by a drag
diff --git a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/DragWhileSmoothScrollTest.kt b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/DragWhileSmoothScrollTest.kt
index 1879ee12..40f6183 100644
--- a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/DragWhileSmoothScrollTest.kt
+++ b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/DragWhileSmoothScrollTest.kt
@@ -30,6 +30,10 @@
import androidx.viewpager2.widget.ViewPager2.SCROLL_STATE_DRAGGING
import androidx.viewpager2.widget.ViewPager2.SCROLL_STATE_IDLE
import androidx.viewpager2.widget.ViewPager2.SCROLL_STATE_SETTLING
+import java.util.concurrent.TimeUnit.SECONDS
+import kotlin.math.ceil
+import kotlin.math.floor
+import kotlin.math.max
import org.hamcrest.CoreMatchers.equalTo
import org.hamcrest.CoreMatchers.not
import org.hamcrest.MatcherAssert.assertThat
@@ -39,10 +43,6 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import java.util.concurrent.TimeUnit.SECONDS
-import kotlin.math.ceil
-import kotlin.math.floor
-import kotlin.math.max
/**
* Tests what happens when a smooth scroll is interrupted by a drag
diff --git a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/EditTextFocusTest.kt b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/EditTextFocusTest.kt
index 882aa67..18c63e4 100644
--- a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/EditTextFocusTest.kt
+++ b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/EditTextFocusTest.kt
@@ -34,11 +34,11 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_HORIZONTAL
+import java.util.concurrent.TimeUnit.SECONDS
import org.hamcrest.CoreMatchers.allOf
import org.junit.Assert.assertFalse
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.TimeUnit.SECONDS
/** Regression test for an issue when focusing on an EditText would cause a scroll to page 0. */
@RunWith(AndroidJUnit4::class)
diff --git a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/FakeDragTest.kt b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/FakeDragTest.kt
index b3e2d09..10dbbd5 100644
--- a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/FakeDragTest.kt
+++ b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/FakeDragTest.kt
@@ -35,17 +35,11 @@
import androidx.viewpager2.widget.FakeDragTest.TestConfig
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_HORIZONTAL
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_VERTICAL
+import androidx.viewpager2.widget.ViewPager2.SCROLL_STATE_DRAGGING as DRAGGING
+import androidx.viewpager2.widget.ViewPager2.SCROLL_STATE_IDLE as IDLE
+import androidx.viewpager2.widget.ViewPager2.SCROLL_STATE_SETTLING as SETTLING
import androidx.viewpager2.widget.swipe.PageSwiperFakeDrag
import androidx.viewpager2.widget.swipe.PageSwiperManual
-import org.hamcrest.CoreMatchers.equalTo
-import org.hamcrest.CoreMatchers.notNullValue
-import org.hamcrest.Matchers.greaterThan
-import org.hamcrest.MatcherAssert.assertThat
-import org.junit.Assume.assumeThat
-import org.junit.Ignore
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.Parameterized
import java.lang.reflect.Field
import java.lang.reflect.Method
import java.util.concurrent.CountDownLatch
@@ -54,9 +48,15 @@
import java.util.concurrent.TimeUnit.SECONDS
import kotlin.math.min
import kotlin.math.roundToInt
-import androidx.viewpager2.widget.ViewPager2.SCROLL_STATE_DRAGGING as DRAGGING
-import androidx.viewpager2.widget.ViewPager2.SCROLL_STATE_IDLE as IDLE
-import androidx.viewpager2.widget.ViewPager2.SCROLL_STATE_SETTLING as SETTLING
+import org.hamcrest.CoreMatchers.equalTo
+import org.hamcrest.CoreMatchers.notNullValue
+import org.hamcrest.MatcherAssert.assertThat
+import org.hamcrest.Matchers.greaterThan
+import org.junit.Assume.assumeThat
+import org.junit.Ignore
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
@RunWith(Parameterized::class)
@LargeTest
diff --git a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/FragmentLifecycleTest.kt b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/FragmentLifecycleTest.kt
index 3e6ff55..9d271f9 100644
--- a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/FragmentLifecycleTest.kt
+++ b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/FragmentLifecycleTest.kt
@@ -22,13 +22,13 @@
import androidx.test.filters.LargeTest
import androidx.viewpager2.widget.ViewPager2.OFFSCREEN_PAGE_LIMIT_DEFAULT
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_HORIZONTAL
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit.MILLISECONDS
import org.hamcrest.CoreMatchers.equalTo
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit.MILLISECONDS
private const val STATE_RESUMED = "RESUMED"
private const val STATE_STARTED = "STARTED"
diff --git a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/FragmentTransactionCallbackTest.kt b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/FragmentTransactionCallbackTest.kt
index 7bc0900..737b33f 100644
--- a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/FragmentTransactionCallbackTest.kt
+++ b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/FragmentTransactionCallbackTest.kt
@@ -30,13 +30,13 @@
import androidx.viewpager2.adapter.FragmentStateAdapter.FragmentTransactionCallback
import androidx.viewpager2.adapter.FragmentStateAdapter.FragmentTransactionCallback.OnPostEventListener
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_HORIZONTAL
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit.SECONDS
import org.hamcrest.MatcherAssert.assertThat
import org.hamcrest.Matchers.equalTo
import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit.SECONDS
@RunWith(AndroidJUnit4::class)
@LargeTest
diff --git a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/HostFragmentBackStackTest.kt b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/HostFragmentBackStackTest.kt
index 2d17809..4ca8cf5 100644
--- a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/HostFragmentBackStackTest.kt
+++ b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/HostFragmentBackStackTest.kt
@@ -36,11 +36,11 @@
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_HORIZONTAL
import androidx.viewpager2.widget.swipe.FragmentAdapter
import androidx.viewpager2.widget.swipe.PageFragment
+import java.util.concurrent.TimeUnit.SECONDS
import org.hamcrest.CoreMatchers.equalTo
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.TimeUnit.SECONDS
/**
* Regression test for an issue when recreating a [ViewPager2]'s host [Fragment]'s [View] causes
diff --git a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/ItemDecorationTest.kt b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/ItemDecorationTest.kt
index ebfc7b0..ccf9bbb 100644
--- a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/ItemDecorationTest.kt
+++ b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/ItemDecorationTest.kt
@@ -24,14 +24,14 @@
import androidx.test.filters.LargeTest
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_HORIZONTAL
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_VERTICAL
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit.SECONDS
import org.hamcrest.CoreMatchers.equalTo
-import org.hamcrest.Matchers.greaterThan
import org.hamcrest.MatcherAssert.assertThat
+import org.hamcrest.Matchers.greaterThan
import org.junit.Assert.fail
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit.SECONDS
private const val operationTimeoutSeconds = 5L
diff --git a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/MutableCollectionsTest.kt b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/MutableCollectionsTest.kt
index 6eb2463..e39d5e7 100644
--- a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/MutableCollectionsTest.kt
+++ b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/MutableCollectionsTest.kt
@@ -30,15 +30,15 @@
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_VERTICAL
import androidx.viewpager2.widget.swipe.PageView
import androidx.viewpager2.widget.swipe.SelfChecking
-import org.hamcrest.Matchers.equalTo
-import org.hamcrest.MatcherAssert.assertThat
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.Parameterized
import java.util.Random
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
import java.util.concurrent.atomic.AtomicInteger
+import org.hamcrest.MatcherAssert.assertThat
+import org.hamcrest.Matchers.equalTo
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
private const val RANDOM_TESTS_PER_CONFIG = 0 // increase to have random tests generated
diff --git a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/OffscreenPageLimitTest.kt b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/OffscreenPageLimitTest.kt
index b4b3c85..2a05ec3 100644
--- a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/OffscreenPageLimitTest.kt
+++ b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/OffscreenPageLimitTest.kt
@@ -29,21 +29,21 @@
import androidx.viewpager2.widget.OffscreenPageLimitTest.TestConfig
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_HORIZONTAL
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_VERTICAL
-import org.hamcrest.CoreMatchers.equalTo
-import org.hamcrest.CoreMatchers.hasItem
-import org.hamcrest.Matchers.greaterThanOrEqualTo
-import org.hamcrest.Matchers.lessThan
-import org.hamcrest.Matchers.lessThanOrEqualTo
-import org.hamcrest.MatcherAssert.assertThat
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.Parameterized
import java.util.concurrent.TimeUnit.SECONDS
import kotlin.math.ceil
import kotlin.math.floor
import kotlin.math.max
import kotlin.math.min
import kotlin.math.roundToInt
+import org.hamcrest.CoreMatchers.equalTo
+import org.hamcrest.CoreMatchers.hasItem
+import org.hamcrest.MatcherAssert.assertThat
+import org.hamcrest.Matchers.greaterThanOrEqualTo
+import org.hamcrest.Matchers.lessThan
+import org.hamcrest.Matchers.lessThanOrEqualTo
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
@RunWith(Parameterized::class)
class OffscreenPageLimitTest(private val config: TestConfig) : BaseTest() {
diff --git a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/PaddingMarginDecorationTest.kt b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/PaddingMarginDecorationTest.kt
index 40fb085..fee2599 100644
--- a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/PaddingMarginDecorationTest.kt
+++ b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/PaddingMarginDecorationTest.kt
@@ -33,13 +33,13 @@
import androidx.viewpager2.widget.ViewPager2.SCROLL_STATE_IDLE
import androidx.viewpager2.widget.ViewPager2.SCROLL_STATE_SETTLING
import androidx.viewpager2.widget.swipe.ViewAdapter
+import java.util.concurrent.TimeUnit.SECONDS
+import kotlin.math.roundToInt
import org.hamcrest.CoreMatchers.equalTo
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import java.util.concurrent.TimeUnit.SECONDS
-import kotlin.math.roundToInt
@RunWith(Parameterized::class)
@LargeTest
diff --git a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/PageChangeCallbackTest.kt b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/PageChangeCallbackTest.kt
index 355402c..ec95b53 100644
--- a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/PageChangeCallbackTest.kt
+++ b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/PageChangeCallbackTest.kt
@@ -40,20 +40,20 @@
import androidx.viewpager2.widget.ViewPager2.SCROLL_STATE_IDLE
import androidx.viewpager2.widget.ViewPager2.SCROLL_STATE_SETTLING
import androidx.viewpager2.widget.swipe.PageSwiperManual
-import org.hamcrest.CoreMatchers.equalTo
-import org.hamcrest.CoreMatchers.not
-import org.hamcrest.Matchers.allOf
-import org.hamcrest.Matchers.greaterThan
-import org.hamcrest.Matchers.greaterThanOrEqualTo
-import org.hamcrest.MatcherAssert.assertThat
-import org.junit.Ignore
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.Parameterized
import java.util.concurrent.CountDownLatch
import java.util.concurrent.Executors.newSingleThreadExecutor
import java.util.concurrent.TimeUnit.SECONDS
import kotlin.math.roundToInt
+import org.hamcrest.CoreMatchers.equalTo
+import org.hamcrest.CoreMatchers.not
+import org.hamcrest.MatcherAssert.assertThat
+import org.hamcrest.Matchers.allOf
+import org.hamcrest.Matchers.greaterThan
+import org.hamcrest.Matchers.greaterThanOrEqualTo
+import org.junit.Ignore
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
@RunWith(Parameterized::class)
@LargeTest
diff --git a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/PageFillTest.kt b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/PageFillTest.kt
index adeff10..63bfb25 100644
--- a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/PageFillTest.kt
+++ b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/PageFillTest.kt
@@ -25,8 +25,8 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_HORIZONTAL
-import org.hamcrest.Matchers.containsString
import org.hamcrest.MatcherAssert.assertThat
+import org.hamcrest.Matchers.containsString
import org.junit.Assert.fail
import org.junit.Test
import org.junit.runner.RunWith
diff --git a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/PageTransformerTest.kt b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/PageTransformerTest.kt
index 5fbbc06..0909f67 100644
--- a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/PageTransformerTest.kt
+++ b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/PageTransformerTest.kt
@@ -30,17 +30,17 @@
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_VERTICAL
import androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback
import androidx.viewpager2.widget.ViewPager2.PageTransformer
+import java.util.concurrent.TimeUnit.SECONDS
import org.hamcrest.CoreMatchers.equalTo
import org.hamcrest.CoreMatchers.not
+import org.hamcrest.MatcherAssert.assertThat
import org.hamcrest.Matchers.greaterThan
import org.hamcrest.Matchers.lessThan
import org.junit.Assert.assertFalse
-import org.hamcrest.MatcherAssert.assertThat
import org.junit.Assert.assertTrue
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import java.util.concurrent.TimeUnit.SECONDS
@RunWith(Parameterized::class)
@LargeTest
diff --git a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/SetItemWhileScrollInProgressTest.kt b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/SetItemWhileScrollInProgressTest.kt
index fc0b05d1..c505b33 100644
--- a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/SetItemWhileScrollInProgressTest.kt
+++ b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/SetItemWhileScrollInProgressTest.kt
@@ -26,6 +26,7 @@
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_HORIZONTAL
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_VERTICAL
import androidx.viewpager2.widget.ViewPager2.SCROLL_STATE_DRAGGING
+import java.util.Random
import org.hamcrest.CoreMatchers.anyOf
import org.hamcrest.CoreMatchers.equalTo
import org.hamcrest.CoreMatchers.instanceOf
@@ -36,7 +37,6 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import java.util.Random
private const val RANDOM_TESTS_PER_CONFIG = 0 // increase to have random tests generated
diff --git a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/SwipeTest.kt b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/SwipeTest.kt
index d669298..0bfdab5 100644
--- a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/SwipeTest.kt
+++ b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/SwipeTest.kt
@@ -23,11 +23,11 @@
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_VERTICAL
import androidx.viewpager2.widget.ViewPager2.Orientation
import androidx.viewpager2.widget.swipe.PageView
+import java.util.Random
+import java.util.concurrent.TimeUnit
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import java.util.Random
-import java.util.concurrent.TimeUnit
// region test
diff --git a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/TransientStateFragmentTest.kt b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/TransientStateFragmentTest.kt
index ec89330..f9e4951 100644
--- a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/TransientStateFragmentTest.kt
+++ b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/TransientStateFragmentTest.kt
@@ -24,9 +24,9 @@
import androidx.test.filters.LargeTest
import androidx.test.filters.SdkSuppress
import androidx.viewpager2.widget.ViewPager2.ORIENTATION_HORIZONTAL
+import java.util.concurrent.TimeUnit.MILLISECONDS
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.TimeUnit.MILLISECONDS
/**
* Verifies that [androidx.viewpager2.adapter.FragmentStateAdapter] can handle [Fragment]s
diff --git a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/swipe/FragmentAdapter.kt b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/swipe/FragmentAdapter.kt
index 6cfa14f..da365fc 100644
--- a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/swipe/FragmentAdapter.kt
+++ b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/swipe/FragmentAdapter.kt
@@ -25,11 +25,11 @@
import androidx.fragment.app.FragmentManager
import androidx.lifecycle.Lifecycle
import androidx.viewpager2.adapter.FragmentStateAdapter
+import java.util.concurrent.atomic.AtomicInteger
+import org.hamcrest.MatcherAssert.assertThat
import org.hamcrest.Matchers.allOf
import org.hamcrest.Matchers.greaterThanOrEqualTo
import org.hamcrest.Matchers.lessThanOrEqualTo
-import org.hamcrest.MatcherAssert.assertThat
-import java.util.concurrent.atomic.AtomicInteger
private const val ARG_KEY = "key"
diff --git a/wear/compose/compose-foundation/api/current.txt b/wear/compose/compose-foundation/api/current.txt
index 224c57f..91d6749 100644
--- a/wear/compose/compose-foundation/api/current.txt
+++ b/wear/compose/compose-foundation/api/current.txt
@@ -99,11 +99,11 @@
}
public final class CurvedDrawKt {
- method public static androidx.wear.compose.foundation.CurvedModifier angularGradientBackground(androidx.wear.compose.foundation.CurvedModifier, kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional int cap);
method public static androidx.wear.compose.foundation.CurvedModifier angularGradientBackground(androidx.wear.compose.foundation.CurvedModifier, java.util.List<androidx.compose.ui.graphics.Color> colors, optional int cap);
+ method public static androidx.wear.compose.foundation.CurvedModifier angularGradientBackground(androidx.wear.compose.foundation.CurvedModifier, kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional int cap);
method public static androidx.wear.compose.foundation.CurvedModifier background(androidx.wear.compose.foundation.CurvedModifier, long color, optional int cap);
- method public static androidx.wear.compose.foundation.CurvedModifier radialGradientBackground(androidx.wear.compose.foundation.CurvedModifier, kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional int cap);
method public static androidx.wear.compose.foundation.CurvedModifier radialGradientBackground(androidx.wear.compose.foundation.CurvedModifier, java.util.List<androidx.compose.ui.graphics.Color> colors, optional int cap);
+ method public static androidx.wear.compose.foundation.CurvedModifier radialGradientBackground(androidx.wear.compose.foundation.CurvedModifier, kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional int cap);
}
public final class CurvedLayoutKt {
@@ -119,13 +119,13 @@
}
public final class CurvedPaddingKt {
- method public static androidx.wear.compose.foundation.ArcPaddingValues ArcPaddingValues(optional float outer, optional float inner, optional float before, optional float after);
method public static androidx.wear.compose.foundation.ArcPaddingValues ArcPaddingValues(float all);
method public static androidx.wear.compose.foundation.ArcPaddingValues ArcPaddingValues(optional float radial, optional float angular);
+ method public static androidx.wear.compose.foundation.ArcPaddingValues ArcPaddingValues(optional float outer, optional float inner, optional float before, optional float after);
method public static androidx.wear.compose.foundation.CurvedModifier padding(androidx.wear.compose.foundation.CurvedModifier, androidx.wear.compose.foundation.ArcPaddingValues paddingValues);
- method public static androidx.wear.compose.foundation.CurvedModifier padding(androidx.wear.compose.foundation.CurvedModifier, float outer, float inner, float before, float after);
- method public static androidx.wear.compose.foundation.CurvedModifier padding(androidx.wear.compose.foundation.CurvedModifier, optional float radial, optional float angular);
method public static androidx.wear.compose.foundation.CurvedModifier padding(androidx.wear.compose.foundation.CurvedModifier, optional float all);
+ method public static androidx.wear.compose.foundation.CurvedModifier padding(androidx.wear.compose.foundation.CurvedModifier, optional float radial, optional float angular);
+ method public static androidx.wear.compose.foundation.CurvedModifier padding(androidx.wear.compose.foundation.CurvedModifier, float outer, float inner, float before, float after);
}
public final class CurvedParentDataKt {
@@ -149,9 +149,9 @@
}
public final class CurvedTextStyle {
- ctor public CurvedTextStyle(optional long background, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis);
ctor public CurvedTextStyle(androidx.compose.ui.text.TextStyle style);
ctor @Deprecated public CurvedTextStyle(optional long background, optional long color, optional long fontSize);
+ ctor public CurvedTextStyle(optional long background, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis);
method @Deprecated public androidx.wear.compose.foundation.CurvedTextStyle copy(optional long background, optional long color, optional long fontSize);
method public androidx.wear.compose.foundation.CurvedTextStyle copy(optional long background, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis);
method public long getBackground();
diff --git a/wear/compose/compose-foundation/api/public_plus_experimental_current.txt b/wear/compose/compose-foundation/api/public_plus_experimental_current.txt
index 81af87e..03d2707 100644
--- a/wear/compose/compose-foundation/api/public_plus_experimental_current.txt
+++ b/wear/compose/compose-foundation/api/public_plus_experimental_current.txt
@@ -26,6 +26,11 @@
method public static void basicCurvedText(androidx.wear.compose.foundation.CurvedScope, String text, androidx.wear.compose.foundation.CurvedTextStyle style, optional androidx.wear.compose.foundation.CurvedModifier modifier, optional androidx.wear.compose.foundation.CurvedDirection.Angular? angularDirection, optional int overflow);
}
+ public final class CompositionLocalsKt {
+ method @androidx.wear.compose.foundation.ExperimentalWearFoundationApi public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.wear.compose.foundation.ReduceMotion> getLocalReduceMotion();
+ property @androidx.wear.compose.foundation.ExperimentalWearFoundationApi public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.wear.compose.foundation.ReduceMotion> LocalReduceMotion;
+ }
+
public interface CurvedAlignment {
}
@@ -99,11 +104,11 @@
}
public final class CurvedDrawKt {
- method public static androidx.wear.compose.foundation.CurvedModifier angularGradientBackground(androidx.wear.compose.foundation.CurvedModifier, kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional int cap);
method public static androidx.wear.compose.foundation.CurvedModifier angularGradientBackground(androidx.wear.compose.foundation.CurvedModifier, java.util.List<androidx.compose.ui.graphics.Color> colors, optional int cap);
+ method public static androidx.wear.compose.foundation.CurvedModifier angularGradientBackground(androidx.wear.compose.foundation.CurvedModifier, kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional int cap);
method public static androidx.wear.compose.foundation.CurvedModifier background(androidx.wear.compose.foundation.CurvedModifier, long color, optional int cap);
- method public static androidx.wear.compose.foundation.CurvedModifier radialGradientBackground(androidx.wear.compose.foundation.CurvedModifier, kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional int cap);
method public static androidx.wear.compose.foundation.CurvedModifier radialGradientBackground(androidx.wear.compose.foundation.CurvedModifier, java.util.List<androidx.compose.ui.graphics.Color> colors, optional int cap);
+ method public static androidx.wear.compose.foundation.CurvedModifier radialGradientBackground(androidx.wear.compose.foundation.CurvedModifier, kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional int cap);
}
public final class CurvedLayoutKt {
@@ -119,13 +124,13 @@
}
public final class CurvedPaddingKt {
- method public static androidx.wear.compose.foundation.ArcPaddingValues ArcPaddingValues(optional float outer, optional float inner, optional float before, optional float after);
method public static androidx.wear.compose.foundation.ArcPaddingValues ArcPaddingValues(float all);
method public static androidx.wear.compose.foundation.ArcPaddingValues ArcPaddingValues(optional float radial, optional float angular);
+ method public static androidx.wear.compose.foundation.ArcPaddingValues ArcPaddingValues(optional float outer, optional float inner, optional float before, optional float after);
method public static androidx.wear.compose.foundation.CurvedModifier padding(androidx.wear.compose.foundation.CurvedModifier, androidx.wear.compose.foundation.ArcPaddingValues paddingValues);
- method public static androidx.wear.compose.foundation.CurvedModifier padding(androidx.wear.compose.foundation.CurvedModifier, float outer, float inner, float before, float after);
- method public static androidx.wear.compose.foundation.CurvedModifier padding(androidx.wear.compose.foundation.CurvedModifier, optional float radial, optional float angular);
method public static androidx.wear.compose.foundation.CurvedModifier padding(androidx.wear.compose.foundation.CurvedModifier, optional float all);
+ method public static androidx.wear.compose.foundation.CurvedModifier padding(androidx.wear.compose.foundation.CurvedModifier, optional float radial, optional float angular);
+ method public static androidx.wear.compose.foundation.CurvedModifier padding(androidx.wear.compose.foundation.CurvedModifier, float outer, float inner, float before, float after);
}
public final class CurvedParentDataKt {
@@ -149,9 +154,9 @@
}
public final class CurvedTextStyle {
- ctor public CurvedTextStyle(optional long background, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis);
ctor public CurvedTextStyle(androidx.compose.ui.text.TextStyle style);
ctor @Deprecated public CurvedTextStyle(optional long background, optional long color, optional long fontSize);
+ ctor public CurvedTextStyle(optional long background, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis);
method @Deprecated public androidx.wear.compose.foundation.CurvedTextStyle copy(optional long background, optional long color, optional long fontSize);
method public androidx.wear.compose.foundation.CurvedTextStyle copy(optional long background, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis);
method public long getBackground();
@@ -205,6 +210,10 @@
method @androidx.compose.runtime.Composable @androidx.wear.compose.foundation.ExperimentalWearFoundationApi public static androidx.compose.ui.focus.FocusRequester rememberActiveFocusRequester();
}
+ @androidx.wear.compose.foundation.ExperimentalWearFoundationApi public fun interface ReduceMotion {
+ method @androidx.compose.runtime.Composable public boolean enabled();
+ }
+
@androidx.wear.compose.foundation.ExperimentalWearFoundationApi public interface RevealScope {
method public float getRevealOffset();
property public abstract float revealOffset;
diff --git a/wear/compose/compose-foundation/api/restricted_current.txt b/wear/compose/compose-foundation/api/restricted_current.txt
index 224c57f..91d6749 100644
--- a/wear/compose/compose-foundation/api/restricted_current.txt
+++ b/wear/compose/compose-foundation/api/restricted_current.txt
@@ -99,11 +99,11 @@
}
public final class CurvedDrawKt {
- method public static androidx.wear.compose.foundation.CurvedModifier angularGradientBackground(androidx.wear.compose.foundation.CurvedModifier, kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional int cap);
method public static androidx.wear.compose.foundation.CurvedModifier angularGradientBackground(androidx.wear.compose.foundation.CurvedModifier, java.util.List<androidx.compose.ui.graphics.Color> colors, optional int cap);
+ method public static androidx.wear.compose.foundation.CurvedModifier angularGradientBackground(androidx.wear.compose.foundation.CurvedModifier, kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional int cap);
method public static androidx.wear.compose.foundation.CurvedModifier background(androidx.wear.compose.foundation.CurvedModifier, long color, optional int cap);
- method public static androidx.wear.compose.foundation.CurvedModifier radialGradientBackground(androidx.wear.compose.foundation.CurvedModifier, kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional int cap);
method public static androidx.wear.compose.foundation.CurvedModifier radialGradientBackground(androidx.wear.compose.foundation.CurvedModifier, java.util.List<androidx.compose.ui.graphics.Color> colors, optional int cap);
+ method public static androidx.wear.compose.foundation.CurvedModifier radialGradientBackground(androidx.wear.compose.foundation.CurvedModifier, kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional int cap);
}
public final class CurvedLayoutKt {
@@ -119,13 +119,13 @@
}
public final class CurvedPaddingKt {
- method public static androidx.wear.compose.foundation.ArcPaddingValues ArcPaddingValues(optional float outer, optional float inner, optional float before, optional float after);
method public static androidx.wear.compose.foundation.ArcPaddingValues ArcPaddingValues(float all);
method public static androidx.wear.compose.foundation.ArcPaddingValues ArcPaddingValues(optional float radial, optional float angular);
+ method public static androidx.wear.compose.foundation.ArcPaddingValues ArcPaddingValues(optional float outer, optional float inner, optional float before, optional float after);
method public static androidx.wear.compose.foundation.CurvedModifier padding(androidx.wear.compose.foundation.CurvedModifier, androidx.wear.compose.foundation.ArcPaddingValues paddingValues);
- method public static androidx.wear.compose.foundation.CurvedModifier padding(androidx.wear.compose.foundation.CurvedModifier, float outer, float inner, float before, float after);
- method public static androidx.wear.compose.foundation.CurvedModifier padding(androidx.wear.compose.foundation.CurvedModifier, optional float radial, optional float angular);
method public static androidx.wear.compose.foundation.CurvedModifier padding(androidx.wear.compose.foundation.CurvedModifier, optional float all);
+ method public static androidx.wear.compose.foundation.CurvedModifier padding(androidx.wear.compose.foundation.CurvedModifier, optional float radial, optional float angular);
+ method public static androidx.wear.compose.foundation.CurvedModifier padding(androidx.wear.compose.foundation.CurvedModifier, float outer, float inner, float before, float after);
}
public final class CurvedParentDataKt {
@@ -149,9 +149,9 @@
}
public final class CurvedTextStyle {
- ctor public CurvedTextStyle(optional long background, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis);
ctor public CurvedTextStyle(androidx.compose.ui.text.TextStyle style);
ctor @Deprecated public CurvedTextStyle(optional long background, optional long color, optional long fontSize);
+ ctor public CurvedTextStyle(optional long background, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis);
method @Deprecated public androidx.wear.compose.foundation.CurvedTextStyle copy(optional long background, optional long color, optional long fontSize);
method public androidx.wear.compose.foundation.CurvedTextStyle copy(optional long background, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis);
method public long getBackground();
diff --git a/wear/compose/compose-foundation/build.gradle b/wear/compose/compose-foundation/build.gradle
index 81bb66b5..c00ea3b 100644
--- a/wear/compose/compose-foundation/build.gradle
+++ b/wear/compose/compose-foundation/build.gradle
@@ -21,11 +21,9 @@
id("AndroidXPlugin")
id("com.android.library")
id("AndroidXComposePlugin")
+ id("org.jetbrains.kotlin.android")
}
-// Disable multi-platform.
-AndroidXComposePlugin.applyAndConfigureKotlinPlugin(project, /* isMultiplatformEnabled= */ false)
-
dependencies {
api(project(":compose:foundation:foundation"))
api(project(":compose:ui:ui"))
@@ -35,6 +33,7 @@
implementation(libs.kotlinStdlib)
implementation(project(":compose:foundation:foundation-layout"))
implementation(project(":compose:ui:ui-util"))
+ implementation(project(":core:core"))
implementation("androidx.profileinstaller:profileinstaller:1.3.0")
testImplementation(libs.testRules)
diff --git a/wear/compose/compose-foundation/src/androidMain/kotlin/androidx/wear/compose/foundation/CurvedTextDelegate.android.kt b/wear/compose/compose-foundation/src/androidMain/kotlin/androidx/wear/compose/foundation/CurvedTextDelegate.android.kt
deleted file mode 100644
index fcc21e2..0000000
--- a/wear/compose/compose-foundation/src/androidMain/kotlin/androidx/wear/compose/foundation/CurvedTextDelegate.android.kt
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Copyright 2021 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
- *
- * http://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.
- */
-
-package androidx.wear.compose.foundation
-
-import android.graphics.Typeface
-import android.text.StaticLayout
-import android.text.TextPaint
-import android.text.TextUtils
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.State
-import androidx.compose.runtime.derivedStateOf
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableFloatStateOf
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
-import androidx.compose.runtime.setValue
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.drawscope.DrawScope
-import androidx.compose.ui.graphics.drawscope.drawIntoCanvas
-import androidx.compose.ui.graphics.isSpecified
-import androidx.compose.ui.graphics.nativeCanvas
-import androidx.compose.ui.graphics.toArgb
-import androidx.compose.ui.platform.LocalFontFamilyResolver
-import androidx.compose.ui.text.font.FontFamily
-import androidx.compose.ui.text.font.FontStyle
-import androidx.compose.ui.text.font.FontSynthesis
-import androidx.compose.ui.text.font.FontWeight
-import androidx.compose.ui.text.font.resolveAsTypeface
-import androidx.compose.ui.text.style.TextOverflow
-import kotlin.math.roundToInt
-
-/**
- * Used to cache computations and objects with expensive construction (Android's Paint & Path)
- */
-internal actual class CurvedTextDelegate {
- private var text: String = ""
- private var clockwise: Boolean = true
- private var fontSizePx: Float = 0f
-
- actual var textWidth by mutableFloatStateOf(0f)
- actual var textHeight by mutableFloatStateOf(0f)
- actual var baseLinePosition = 0f
-
- private var typeFace: State<Typeface?> = mutableStateOf(null)
-
- private val paint = android.graphics.Paint().apply { isAntiAlias = true }
- private val backgroundPath = android.graphics.Path()
- private val textPath = android.graphics.Path()
-
- var lastLayoutInfo: CurvedLayoutInfo? = null
-
- actual fun updateIfNeeded(
- text: String,
- clockwise: Boolean,
- fontSizePx: Float
- ) {
- if (
- text != this.text ||
- clockwise != this.clockwise ||
- fontSizePx != this.fontSizePx
- ) {
- this.text = text
- this.clockwise = clockwise
- this.fontSizePx = fontSizePx
- paint.textSize = fontSizePx
- updateMeasures()
- lastLayoutInfo = null // Ensure paths are recomputed
- }
- }
-
- @Composable
- actual fun UpdateFontIfNeeded(
- fontFamily: FontFamily?,
- fontWeight: FontWeight?,
- fontStyle: FontStyle?,
- fontSynthesis: FontSynthesis?
- ) {
- val fontFamilyResolver = LocalFontFamilyResolver.current
- typeFace = remember(fontFamily, fontWeight, fontStyle, fontSynthesis, fontFamilyResolver) {
- derivedStateOf {
- fontFamilyResolver.resolveAsTypeface(
- fontFamily,
- fontWeight ?: FontWeight.Normal,
- fontStyle ?: FontStyle.Normal,
- fontSynthesis ?: FontSynthesis.All
- ).value
- }
- }
- updateTypeFace()
- }
-
- private fun updateMeasures() {
- val rect = android.graphics.Rect()
- paint.getTextBounds(text, 0, text.length, rect)
-
- textWidth = rect.width().toFloat()
- textHeight = -paint.fontMetrics.top + paint.fontMetrics.bottom
- baseLinePosition =
- if (clockwise) -paint.fontMetrics.top else paint.fontMetrics.bottom
- }
-
- private fun updateTypeFace() {
- val currentTypeface = typeFace.value
- if (currentTypeface != paint.typeface) {
- paint.typeface = currentTypeface
- updateMeasures()
- lastLayoutInfo = null // Ensure paths are recomputed
- }
- }
-
- private fun updatePathsIfNeeded(layoutInfo: CurvedLayoutInfo) {
- if (layoutInfo != lastLayoutInfo) {
- lastLayoutInfo = layoutInfo
- with(layoutInfo) {
- val clockwiseFactor = if (clockwise) 1f else -1f
-
- val sweepDegree = sweepRadians.toDegrees().coerceAtMost(360f)
-
- val centerX = centerOffset.x
- val centerY = centerOffset.y
-
- // TODO: move background drawing to a CurvedModifier
- backgroundPath.reset()
- backgroundPath.arcTo(
- centerX - outerRadius,
- centerY - outerRadius,
- centerX + outerRadius,
- centerY + outerRadius,
- startAngleRadians.toDegrees(),
- sweepDegree, false
- )
- backgroundPath.arcTo(
- centerX - innerRadius,
- centerY - innerRadius,
- centerX + innerRadius,
- centerY + innerRadius,
- startAngleRadians.toDegrees() + sweepDegree,
- -sweepDegree, false
- )
- backgroundPath.close()
-
- textPath.reset()
- textPath.addArc(
- centerX - measureRadius,
- centerY - measureRadius,
- centerX + measureRadius,
- centerY + measureRadius,
- startAngleRadians.toDegrees() +
- (if (clockwise) 0f else sweepDegree),
- clockwiseFactor * sweepDegree
- )
- }
- }
- }
-
- actual fun DrawScope.doDraw(
- layoutInfo: CurvedLayoutInfo,
- parentSweepRadians: Float,
- overflow: TextOverflow,
- color: Color,
- background: Color
- ) {
- updateTypeFace()
- updatePathsIfNeeded(layoutInfo)
-
- drawIntoCanvas { canvas ->
- if (background.isSpecified && background != Color.Transparent) {
- paint.color = background.toArgb()
- canvas.nativeCanvas.drawPath(backgroundPath, paint)
- }
-
- paint.color = color.toArgb()
- val actualText = if (
- // Float arithmetic can make the parentSweepRadians slightly smaller
- layoutInfo.sweepRadians <= parentSweepRadians + 0.001f ||
- overflow == TextOverflow.Visible
- ) {
- text
- } else {
- ellipsize(
- text, TextPaint(paint), overflow == TextOverflow.Ellipsis,
- (parentSweepRadians * layoutInfo.measureRadius).roundToInt()
- )
- }
- canvas.nativeCanvas.drawTextOnPath(actualText, textPath, 0f, 0f, paint)
- }
- }
-
- private fun ellipsize(
- text: String,
- paint: TextPaint,
- addEllipsis: Boolean,
- ellipsizedWidth: Int,
- ): String {
- if (addEllipsis) {
- return TextUtils.ellipsize(
- text,
- paint,
- ellipsizedWidth.toFloat(),
- TextUtils.TruncateAt.END
- ).toString()
- }
-
- val layout = StaticLayout.Builder
- .obtain(text, 0, text.length, paint, ellipsizedWidth)
- .setEllipsize(null)
- .setMaxLines(1)
- .build()
-
- // Cut text that it's too big when in TextOverFlow.Clip mode.
- return text.substring(0, layout.getLineEnd(0))
- }
-}
diff --git a/wear/compose/compose-foundation/src/androidAndroidTest/kotlin/AndroidManifest.xml b/wear/compose/compose-foundation/src/androidTest/kotlin/AndroidManifest.xml
similarity index 100%
rename from wear/compose/compose-foundation/src/androidAndroidTest/kotlin/AndroidManifest.xml
rename to wear/compose/compose-foundation/src/androidTest/kotlin/AndroidManifest.xml
diff --git a/wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/BasicCurvedTextTest.kt b/wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/BasicCurvedTextTest.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/BasicCurvedTextTest.kt
rename to wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/BasicCurvedTextTest.kt
diff --git a/wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/CurvedBoxTest.kt b/wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/CurvedBoxTest.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/CurvedBoxTest.kt
rename to wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/CurvedBoxTest.kt
diff --git a/wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/CurvedLayoutTest.kt b/wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/CurvedLayoutTest.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/CurvedLayoutTest.kt
rename to wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/CurvedLayoutTest.kt
diff --git a/wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/CurvedPaddingTest.kt b/wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/CurvedPaddingTest.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/CurvedPaddingTest.kt
rename to wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/CurvedPaddingTest.kt
diff --git a/wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/CurvedScreenshotTest.kt b/wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/CurvedScreenshotTest.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/CurvedScreenshotTest.kt
rename to wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/CurvedScreenshotTest.kt
diff --git a/wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/CurvedSizeTest.kt b/wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/CurvedSizeTest.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/CurvedSizeTest.kt
rename to wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/CurvedSizeTest.kt
diff --git a/wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/CurvedWeightTest.kt b/wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/CurvedWeightTest.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/CurvedWeightTest.kt
rename to wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/CurvedWeightTest.kt
diff --git a/wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/FoundationTest.kt b/wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/FoundationTest.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/FoundationTest.kt
rename to wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/FoundationTest.kt
diff --git a/wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/HierarchicalFocusCoordinatorTest.kt b/wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/HierarchicalFocusCoordinatorTest.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/HierarchicalFocusCoordinatorTest.kt
rename to wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/HierarchicalFocusCoordinatorTest.kt
diff --git a/wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/SpyModifier.kt b/wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/SpyModifier.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/SpyModifier.kt
rename to wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/SpyModifier.kt
diff --git a/wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/SwipeToRevealTest.kt b/wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/SwipeToRevealTest.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/SwipeToRevealTest.kt
rename to wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/SwipeToRevealTest.kt
diff --git a/wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyColumnIndexedTest.kt b/wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyColumnIndexedTest.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyColumnIndexedTest.kt
rename to wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyColumnIndexedTest.kt
diff --git a/wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyColumnTest.kt b/wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyColumnTest.kt
similarity index 99%
rename from wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyColumnTest.kt
rename to wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyColumnTest.kt
index bee6208..a13ef306 100644
--- a/wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyColumnTest.kt
+++ b/wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyColumnTest.kt
@@ -52,13 +52,13 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import androidx.wear.compose.foundation.TEST_TAG
+import com.google.common.truth.Truth.assertThat
+import kotlin.math.roundToInt
+import kotlinx.coroutines.runBlocking
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import com.google.common.truth.Truth.assertThat
-import kotlin.math.roundToInt
-import kotlinx.coroutines.runBlocking
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyListLayoutInfoTest.kt b/wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyListLayoutInfoTest.kt
similarity index 99%
rename from wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyListLayoutInfoTest.kt
rename to wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyListLayoutInfoTest.kt
index 9f42158..1b894ff 100644
--- a/wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyListLayoutInfoTest.kt
+++ b/wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyListLayoutInfoTest.kt
@@ -41,6 +41,7 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
+import kotlin.math.roundToInt
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
@@ -48,7 +49,6 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.math.roundToInt
@MediumTest
@RunWith(AndroidJUnit4::class)
diff --git a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/BasicCurvedText.kt b/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/BasicCurvedText.kt
deleted file mode 100644
index ddd16bb..0000000
--- a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/BasicCurvedText.kt
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * Copyright 2021 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
- *
- * http://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.
- */
-
-package androidx.wear.compose.foundation
-
-import androidx.compose.foundation.layout.Box
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.remember
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.geometry.Offset
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.drawscope.DrawScope
-import androidx.compose.ui.layout.Measurable
-import androidx.compose.ui.layout.Placeable
-import androidx.compose.ui.semantics.contentDescription
-import androidx.compose.ui.semantics.semantics
-import androidx.compose.ui.text.font.FontFamily
-import androidx.compose.ui.text.font.FontStyle
-import androidx.compose.ui.text.font.FontSynthesis
-import androidx.compose.ui.text.font.FontWeight
-import androidx.compose.ui.text.style.TextOverflow
-import androidx.compose.ui.unit.Constraints
-import kotlin.math.roundToInt
-import kotlin.math.sqrt
-
-/**
- * [basicCurvedText] is a component allowing developers to easily write curved text following
- * the curvature a circle (usually at the edge of a circular screen).
- * [basicCurvedText] can be only created within the [CurvedLayout] since it's not a not a
- * composable.
- *
- * @sample androidx.wear.compose.foundation.samples.CurvedAndNormalText
- *
- * @param text The text to display
- * @param modifier The [CurvedModifier] to apply to this curved text.
- * @param angularDirection Specify if the text is laid out clockwise or anti-clockwise, and if
- * those needs to be reversed in a Rtl layout.
- * If not specified, it will be inherited from the enclosing [curvedRow] or [CurvedLayout]
- * See [CurvedDirection.Angular].
- * @param overflow How visual overflow should be handled.
- * @param style A @Composable factory to provide the style to use. This composable SHOULDN'T
- * generate any compose nodes.
- */
-public fun CurvedScope.basicCurvedText(
- text: String,
- modifier: CurvedModifier = CurvedModifier,
- angularDirection: CurvedDirection.Angular? = null,
- overflow: TextOverflow = TextOverflow.Clip,
- style: @Composable () -> CurvedTextStyle = { CurvedTextStyle() }
-) = add(CurvedTextChild(
- text,
- curvedLayoutDirection.copy(overrideAngular = angularDirection).absoluteClockwise(),
- style,
- overflow
-), modifier)
-
-/**
- * [basicCurvedText] is a component allowing developers to easily write curved text following
- * the curvature a circle (usually at the edge of a circular screen).
- * [basicCurvedText] can be only created within the [CurvedLayout] since it's not a not a
- * composable.
- *
- * @sample androidx.wear.compose.foundation.samples.CurvedAndNormalText
- *
- * @param text The text to display
- * @param style A style to use.
- * @param modifier The [CurvedModifier] to apply to this curved text.
- * @param angularDirection Specify if the text is laid out clockwise or anti-clockwise, and if
- * those needs to be reversed in a Rtl layout.
- * If not specified, it will be inherited from the enclosing [curvedRow] or [CurvedLayout]
- * See [CurvedDirection.Angular].
- * @param overflow How visual overflow should be handled.
- */
-public fun CurvedScope.basicCurvedText(
- text: String,
- style: CurvedTextStyle,
- modifier: CurvedModifier = CurvedModifier,
- angularDirection: CurvedDirection.Angular? = null,
- overflow: TextOverflow = TextOverflow.Clip,
-) = basicCurvedText(text, modifier, angularDirection, overflow) { style }
-
-internal class CurvedTextChild(
- val text: String,
- val clockwise: Boolean = true,
- val style: @Composable () -> CurvedTextStyle = { CurvedTextStyle() },
- val overflow: TextOverflow
-) : CurvedChild() {
- private lateinit var delegate: CurvedTextDelegate
- private lateinit var actualStyle: CurvedTextStyle
-
- // We create a compose-ui node so that we can attach a11y info.
- private lateinit var placeable: Placeable
-
- @Composable
- override fun SubComposition() {
- actualStyle = DefaultCurvedTextStyles + style()
- // Avoid recreating the delegate if possible, as it's expensive
- delegate = remember { CurvedTextDelegate() }
- delegate.UpdateFontIfNeeded(
- actualStyle.fontFamily,
- actualStyle.fontWeight,
- actualStyle.fontStyle,
- actualStyle.fontSynthesis
- )
-
- // Empty compose-ui node to attach a11y info.
- Box(Modifier.semantics { contentDescription = text })
- }
-
- override fun CurvedMeasureScope.initializeMeasure(
- measurables: Iterator<Measurable>
- ) {
- delegate.updateIfNeeded(
- text,
- clockwise,
- actualStyle.fontSize.toPx()
- )
-
- // Size the compose-ui node reasonably.
- // We make the bounding rectangle sizes as the text, but cut the width (if needed) to the
- // point at which the circle crosses the middle of the side
- val height = delegate.textHeight.roundToInt()
- val maxWidth = sqrt(height * (radius - height / 4))
- val width = delegate.textWidth.coerceAtMost(maxWidth).roundToInt()
-
- // Measure the corresponding measurable.
- placeable = measurables.next().measure(Constraints(
- minWidth = width, maxWidth = width, minHeight = height, maxHeight = height
- ))
- }
-
- override fun doEstimateThickness(maxRadius: Float): Float = delegate.textHeight
-
- override fun doRadialPosition(
- parentOuterRadius: Float,
- parentThickness: Float
- ): PartialLayoutInfo {
- val measureRadius = parentOuterRadius - delegate.baseLinePosition
- return PartialLayoutInfo(
- delegate.textWidth / measureRadius,
- parentOuterRadius,
- delegate.textHeight,
- measureRadius
- )
- }
-
- private var parentSweepRadians: Float = 0f
-
- override fun doAngularPosition(
- parentStartAngleRadians: Float,
- parentSweepRadians: Float,
- centerOffset: Offset
- ): Float {
- this.parentSweepRadians = parentSweepRadians
- return super.doAngularPosition(parentStartAngleRadians, parentSweepRadians, centerOffset)
- }
-
- override fun DrawScope.draw() {
- with(delegate) {
- doDraw(
- layoutInfo!!,
- parentSweepRadians,
- overflow,
- actualStyle.color,
- actualStyle.background
- )
- }
- }
-
- override fun (Placeable.PlacementScope).placeIfNeeded() =
- // clockwise doesn't matter, we have no content in placeable.
- place(placeable, layoutInfo!!, parentSweepRadians, clockwise = false)
-}
-
-internal expect class CurvedTextDelegate() {
- var textWidth: Float
- var textHeight: Float
- var baseLinePosition: Float
-
- fun updateIfNeeded(
- text: String,
- clockwise: Boolean,
- fontSizePx: Float
- )
-
- @Composable
- fun UpdateFontIfNeeded(
- fontFamily: FontFamily?,
- fontWeight: FontWeight?,
- fontStyle: FontStyle?,
- fontSynthesis: FontSynthesis?
- )
-
- fun DrawScope.doDraw(
- layoutInfo: CurvedLayoutInfo,
- parentSweepRadians: Float,
- overflow: TextOverflow,
- color: Color,
- background: Color
- )
-}
diff --git a/wear/compose/compose-foundation/src/desktopMain/kotlin/androidx/wear/compose/foundation/CurvedTextDelegate.desktop.kt b/wear/compose/compose-foundation/src/desktopMain/kotlin/androidx/wear/compose/foundation/CurvedTextDelegate.desktop.kt
deleted file mode 100644
index 3ce976d..0000000
--- a/wear/compose/compose-foundation/src/desktopMain/kotlin/androidx/wear/compose/foundation/CurvedTextDelegate.desktop.kt
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2021 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
- *
- * http://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.
- */
-
-package androidx.wear.compose.foundation
-
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.drawscope.DrawScope
-import androidx.compose.ui.text.font.FontFamily
-import androidx.compose.ui.text.font.FontStyle
-import androidx.compose.ui.text.font.FontSynthesis
-import androidx.compose.ui.text.font.FontWeight
-import androidx.compose.ui.text.style.TextOverflow
-
-internal actual class CurvedTextDelegate {
- actual var textWidth = 0f
- actual var textHeight = 0f
- actual var baseLinePosition = 0f
-
- actual fun updateIfNeeded(
- text: String,
- clockwise: Boolean,
- fontSizePx: Float
- ) {
- // TODO(b/194653251): Implement
- throw java.lang.RuntimeException("Not implemented")
- }
-
- actual fun UpdateFontIfNeeded(
- fontFamily: FontFamily?,
- fontWeight: FontWeight?,
- fontStyle: FontStyle?,
- fontSynthesis: FontSynthesis?
- ) {
- // TODO(b/194653251): Implement
- throw java.lang.RuntimeException("Not implemented")
- }
-
- actual fun DrawScope.doDraw(
- layoutInfo: CurvedLayoutInfo,
- parentSweepRadians: Float,
- overflow: TextOverflow,
- color: Color,
- background: Color
- ) {
- // TODO(b/194653251): Implement
- throw java.lang.RuntimeException("Not implemented")
- }
-}
diff --git a/wear/compose/compose-foundation/src/androidMain/baseline-prof.txt b/wear/compose/compose-foundation/src/main/baseline-prof.txt
similarity index 100%
rename from wear/compose/compose-foundation/src/androidMain/baseline-prof.txt
rename to wear/compose/compose-foundation/src/main/baseline-prof.txt
diff --git a/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/BasicCurvedText.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/BasicCurvedText.kt
new file mode 100644
index 0000000..2f692a0
--- /dev/null
+++ b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/BasicCurvedText.kt
@@ -0,0 +1,385 @@
+/*
+ * Copyright 2021 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
+ *
+ * http://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.
+ */
+
+package androidx.wear.compose.foundation
+
+import android.graphics.Typeface
+import android.text.StaticLayout
+import android.text.TextPaint
+import android.text.TextUtils
+import androidx.compose.foundation.layout.Box
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.State
+import androidx.compose.runtime.derivedStateOf
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableFloatStateOf
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.drawscope.DrawScope
+import androidx.compose.ui.graphics.drawscope.drawIntoCanvas
+import androidx.compose.ui.graphics.isSpecified
+import androidx.compose.ui.graphics.nativeCanvas
+import androidx.compose.ui.graphics.toArgb
+import androidx.compose.ui.layout.Measurable
+import androidx.compose.ui.layout.Placeable
+import androidx.compose.ui.platform.LocalFontFamilyResolver
+import androidx.compose.ui.semantics.contentDescription
+import androidx.compose.ui.semantics.semantics
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontSynthesis
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.font.resolveAsTypeface
+import androidx.compose.ui.text.style.TextOverflow
+import androidx.compose.ui.unit.Constraints
+import kotlin.math.roundToInt
+import kotlin.math.sqrt
+
+/**
+ * [basicCurvedText] is a component allowing developers to easily write curved text following
+ * the curvature a circle (usually at the edge of a circular screen).
+ * [basicCurvedText] can be only created within the [CurvedLayout] since it's not a not a
+ * composable.
+ *
+ * @sample androidx.wear.compose.foundation.samples.CurvedAndNormalText
+ *
+ * @param text The text to display
+ * @param modifier The [CurvedModifier] to apply to this curved text.
+ * @param angularDirection Specify if the text is laid out clockwise or anti-clockwise, and if
+ * those needs to be reversed in a Rtl layout.
+ * If not specified, it will be inherited from the enclosing [curvedRow] or [CurvedLayout]
+ * See [CurvedDirection.Angular].
+ * @param overflow How visual overflow should be handled.
+ * @param style A @Composable factory to provide the style to use. This composable SHOULDN'T
+ * generate any compose nodes.
+ */
+public fun CurvedScope.basicCurvedText(
+ text: String,
+ modifier: CurvedModifier = CurvedModifier,
+ angularDirection: CurvedDirection.Angular? = null,
+ overflow: TextOverflow = TextOverflow.Clip,
+ style: @Composable () -> CurvedTextStyle = { CurvedTextStyle() }
+) = add(CurvedTextChild(
+ text,
+ curvedLayoutDirection.copy(overrideAngular = angularDirection).absoluteClockwise(),
+ style,
+ overflow
+), modifier)
+
+/**
+ * [basicCurvedText] is a component allowing developers to easily write curved text following
+ * the curvature a circle (usually at the edge of a circular screen).
+ * [basicCurvedText] can be only created within the [CurvedLayout] since it's not a not a
+ * composable.
+ *
+ * @sample androidx.wear.compose.foundation.samples.CurvedAndNormalText
+ *
+ * @param text The text to display
+ * @param style A style to use.
+ * @param modifier The [CurvedModifier] to apply to this curved text.
+ * @param angularDirection Specify if the text is laid out clockwise or anti-clockwise, and if
+ * those needs to be reversed in a Rtl layout.
+ * If not specified, it will be inherited from the enclosing [curvedRow] or [CurvedLayout]
+ * See [CurvedDirection.Angular].
+ * @param overflow How visual overflow should be handled.
+ */
+public fun CurvedScope.basicCurvedText(
+ text: String,
+ style: CurvedTextStyle,
+ modifier: CurvedModifier = CurvedModifier,
+ angularDirection: CurvedDirection.Angular? = null,
+ overflow: TextOverflow = TextOverflow.Clip,
+) = basicCurvedText(text, modifier, angularDirection, overflow) { style }
+
+internal class CurvedTextChild(
+ val text: String,
+ val clockwise: Boolean = true,
+ val style: @Composable () -> CurvedTextStyle = { CurvedTextStyle() },
+ val overflow: TextOverflow
+) : CurvedChild() {
+ private lateinit var delegate: CurvedTextDelegate
+ private lateinit var actualStyle: CurvedTextStyle
+
+ // We create a compose-ui node so that we can attach a11y info.
+ private lateinit var placeable: Placeable
+
+ @Composable
+ override fun SubComposition() {
+ actualStyle = DefaultCurvedTextStyles + style()
+ // Avoid recreating the delegate if possible, as it's expensive
+ delegate = remember { CurvedTextDelegate() }
+ delegate.UpdateFontIfNeeded(
+ actualStyle.fontFamily,
+ actualStyle.fontWeight,
+ actualStyle.fontStyle,
+ actualStyle.fontSynthesis
+ )
+
+ // Empty compose-ui node to attach a11y info.
+ Box(Modifier.semantics { contentDescription = text })
+ }
+
+ override fun CurvedMeasureScope.initializeMeasure(
+ measurables: Iterator<Measurable>
+ ) {
+ delegate.updateIfNeeded(
+ text,
+ clockwise,
+ actualStyle.fontSize.toPx()
+ )
+
+ // Size the compose-ui node reasonably.
+ // We make the bounding rectangle sizes as the text, but cut the width (if needed) to the
+ // point at which the circle crosses the middle of the side
+ val height = delegate.textHeight.roundToInt()
+ val maxWidth = sqrt(height * (radius - height / 4))
+ val width = delegate.textWidth.coerceAtMost(maxWidth).roundToInt()
+
+ // Measure the corresponding measurable.
+ placeable = measurables.next().measure(Constraints(
+ minWidth = width, maxWidth = width, minHeight = height, maxHeight = height
+ ))
+ }
+
+ override fun doEstimateThickness(maxRadius: Float): Float = delegate.textHeight
+
+ override fun doRadialPosition(
+ parentOuterRadius: Float,
+ parentThickness: Float
+ ): PartialLayoutInfo {
+ val measureRadius = parentOuterRadius - delegate.baseLinePosition
+ return PartialLayoutInfo(
+ delegate.textWidth / measureRadius,
+ parentOuterRadius,
+ delegate.textHeight,
+ measureRadius
+ )
+ }
+
+ private var parentSweepRadians: Float = 0f
+
+ override fun doAngularPosition(
+ parentStartAngleRadians: Float,
+ parentSweepRadians: Float,
+ centerOffset: Offset
+ ): Float {
+ this.parentSweepRadians = parentSweepRadians
+ return super.doAngularPosition(parentStartAngleRadians, parentSweepRadians, centerOffset)
+ }
+
+ override fun DrawScope.draw() {
+ with(delegate) {
+ doDraw(
+ layoutInfo!!,
+ parentSweepRadians,
+ overflow,
+ actualStyle.color,
+ actualStyle.background
+ )
+ }
+ }
+
+ override fun (Placeable.PlacementScope).placeIfNeeded() =
+ // clockwise doesn't matter, we have no content in placeable.
+ place(placeable, layoutInfo!!, parentSweepRadians, clockwise = false)
+}
+
+/**
+ * Used to cache computations and objects with expensive construction (Android's Paint & Path)
+ */
+internal class CurvedTextDelegate {
+ private var text: String = ""
+ private var clockwise: Boolean = true
+ private var fontSizePx: Float = 0f
+
+ var textWidth by mutableFloatStateOf(0f)
+ var textHeight by mutableFloatStateOf(0f)
+ var baseLinePosition = 0f
+
+ private var typeFace: State<Typeface?> = mutableStateOf(null)
+
+ private val paint = android.graphics.Paint().apply { isAntiAlias = true }
+ private val backgroundPath = android.graphics.Path()
+ private val textPath = android.graphics.Path()
+
+ var lastLayoutInfo: CurvedLayoutInfo? = null
+
+ fun updateIfNeeded(
+ text: String,
+ clockwise: Boolean,
+ fontSizePx: Float
+ ) {
+ if (
+ text != this.text ||
+ clockwise != this.clockwise ||
+ fontSizePx != this.fontSizePx
+ ) {
+ this.text = text
+ this.clockwise = clockwise
+ this.fontSizePx = fontSizePx
+ paint.textSize = fontSizePx
+ updateMeasures()
+ lastLayoutInfo = null // Ensure paths are recomputed
+ }
+ }
+
+ @Composable
+ fun UpdateFontIfNeeded(
+ fontFamily: FontFamily?,
+ fontWeight: FontWeight?,
+ fontStyle: FontStyle?,
+ fontSynthesis: FontSynthesis?
+ ) {
+ val fontFamilyResolver = LocalFontFamilyResolver.current
+ typeFace = remember(fontFamily, fontWeight, fontStyle, fontSynthesis, fontFamilyResolver) {
+ derivedStateOf {
+ fontFamilyResolver.resolveAsTypeface(
+ fontFamily,
+ fontWeight ?: FontWeight.Normal,
+ fontStyle ?: FontStyle.Normal,
+ fontSynthesis ?: FontSynthesis.All
+ ).value
+ }
+ }
+ updateTypeFace()
+ }
+
+ private fun updateMeasures() {
+ val rect = android.graphics.Rect()
+ paint.getTextBounds(text, 0, text.length, rect)
+
+ textWidth = rect.width().toFloat()
+ textHeight = -paint.fontMetrics.top + paint.fontMetrics.bottom
+ baseLinePosition =
+ if (clockwise) -paint.fontMetrics.top else paint.fontMetrics.bottom
+ }
+
+ private fun updateTypeFace() {
+ val currentTypeface = typeFace.value
+ if (currentTypeface != paint.typeface) {
+ paint.typeface = currentTypeface
+ updateMeasures()
+ lastLayoutInfo = null // Ensure paths are recomputed
+ }
+ }
+
+ private fun updatePathsIfNeeded(layoutInfo: CurvedLayoutInfo) {
+ if (layoutInfo != lastLayoutInfo) {
+ lastLayoutInfo = layoutInfo
+ with(layoutInfo) {
+ val clockwiseFactor = if (clockwise) 1f else -1f
+
+ val sweepDegree = sweepRadians.toDegrees().coerceAtMost(360f)
+
+ val centerX = centerOffset.x
+ val centerY = centerOffset.y
+
+ // TODO: move background drawing to a CurvedModifier
+ backgroundPath.reset()
+ backgroundPath.arcTo(
+ centerX - outerRadius,
+ centerY - outerRadius,
+ centerX + outerRadius,
+ centerY + outerRadius,
+ startAngleRadians.toDegrees(),
+ sweepDegree, false
+ )
+ backgroundPath.arcTo(
+ centerX - innerRadius,
+ centerY - innerRadius,
+ centerX + innerRadius,
+ centerY + innerRadius,
+ startAngleRadians.toDegrees() + sweepDegree,
+ -sweepDegree, false
+ )
+ backgroundPath.close()
+
+ textPath.reset()
+ textPath.addArc(
+ centerX - measureRadius,
+ centerY - measureRadius,
+ centerX + measureRadius,
+ centerY + measureRadius,
+ startAngleRadians.toDegrees() +
+ (if (clockwise) 0f else sweepDegree),
+ clockwiseFactor * sweepDegree
+ )
+ }
+ }
+ }
+
+ fun DrawScope.doDraw(
+ layoutInfo: CurvedLayoutInfo,
+ parentSweepRadians: Float,
+ overflow: TextOverflow,
+ color: Color,
+ background: Color
+ ) {
+ updateTypeFace()
+ updatePathsIfNeeded(layoutInfo)
+
+ drawIntoCanvas { canvas ->
+ if (background.isSpecified && background != Color.Transparent) {
+ paint.color = background.toArgb()
+ canvas.nativeCanvas.drawPath(backgroundPath, paint)
+ }
+
+ paint.color = color.toArgb()
+ val actualText = if (
+ // Float arithmetic can make the parentSweepRadians slightly smaller
+ layoutInfo.sweepRadians <= parentSweepRadians + 0.001f ||
+ overflow == TextOverflow.Visible
+ ) {
+ text
+ } else {
+ ellipsize(
+ text, TextPaint(paint), overflow == TextOverflow.Ellipsis,
+ (parentSweepRadians * layoutInfo.measureRadius).roundToInt()
+ )
+ }
+ canvas.nativeCanvas.drawTextOnPath(actualText, textPath, 0f, 0f, paint)
+ }
+ }
+
+ private fun ellipsize(
+ text: String,
+ paint: TextPaint,
+ addEllipsis: Boolean,
+ ellipsizedWidth: Int,
+ ): String {
+ if (addEllipsis) {
+ return TextUtils.ellipsize(
+ text,
+ paint,
+ ellipsizedWidth.toFloat(),
+ TextUtils.TruncateAt.END
+ ).toString()
+ }
+
+ val layout = StaticLayout.Builder
+ .obtain(text, 0, text.length, paint, ellipsizedWidth)
+ .setEllipsize(null)
+ .setMaxLines(1)
+ .build()
+
+ // Cut text that it's too big when in TextOverFlow.Clip mode.
+ return text.substring(0, layout.getLineEnd(0))
+ }
+}
diff --git a/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CompositionLocals.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CompositionLocals.kt
new file mode 100644
index 0000000..f347b14
--- /dev/null
+++ b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CompositionLocals.kt
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.wear.compose.foundation
+
+import android.content.ContentResolver
+import android.content.Context
+import android.database.ContentObserver
+import android.net.Uri
+import android.os.Looper
+import android.provider.Settings
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.ProvidableCompositionLocal
+import androidx.compose.runtime.staticCompositionLocalOf
+import androidx.compose.ui.platform.LocalContext
+import androidx.core.os.HandlerCompat
+import java.util.concurrent.atomic.AtomicReference
+import kotlinx.coroutines.MainScope
+import kotlinx.coroutines.channels.Channel
+import kotlinx.coroutines.channels.Channel.Factory.CONFLATED
+import kotlinx.coroutines.flow.SharingStarted
+import kotlinx.coroutines.flow.StateFlow
+import kotlinx.coroutines.flow.flow
+import kotlinx.coroutines.flow.stateIn
+
+/**
+ * CompositionLocal for global reduce-motion setting, which turns off animations and
+ * screen movements. To use, call LocalReduceMotion.current.enabled(), which returns a Boolean.
+ */
+@get:ExperimentalWearFoundationApi
+@Suppress("OPT_IN_MARKER_ON_WRONG_TARGET")
+@ExperimentalWearFoundationApi
+val LocalReduceMotion: ProvidableCompositionLocal<ReduceMotion> = staticCompositionLocalOf {
+ ReduceMotion {
+ val context = LocalContext.current.applicationContext
+ getReduceMotionFlowFor(context).value
+ }
+}
+
+/**
+ * ReduceMotion provides a means for callers to determine whether an app should turn off
+ * animations and screen movement.
+ */
+@ExperimentalWearFoundationApi
+fun interface ReduceMotion {
+ @Composable
+ fun enabled(): Boolean
+}
+
+private val reduceMotionCache = AtomicReference<StateFlow<Boolean>>()
+
+// Callers of this function should pass an application context. Passing an activity context might
+// result in activity leaks.
+private fun getReduceMotionFlowFor(applicationContext: Context): StateFlow<Boolean> {
+ val resolver = applicationContext.contentResolver
+ val reduceMotionUri = Settings.Global.getUriFor(REDUCE_MOTION)
+ val channel = Channel<Unit>(CONFLATED)
+ val contentObserver =
+ object : ContentObserver(HandlerCompat.createAsync(Looper.getMainLooper())) {
+ override fun onChange(selfChange: Boolean, uri: Uri?) {
+ channel.trySend(Unit)
+ }
+ }
+ return reduceMotionCache.updateAndGet {
+ it ?: flow {
+ resolver.registerContentObserver(reduceMotionUri, false, contentObserver)
+ try {
+ for (value in channel) {
+ val newValue = getReducedMotionSettingValue(resolver)
+ emit(newValue)
+ }
+ } finally {
+ resolver.unregisterContentObserver(contentObserver)
+ }
+ }.stateIn(
+ MainScope(),
+ SharingStarted.WhileSubscribed(),
+ getReducedMotionSettingValue(resolver)
+ )
+ }
+}
+
+private fun getReducedMotionSettingValue(resolver: ContentResolver): Boolean {
+ return Settings.Global.getInt(
+ resolver,
+ REDUCE_MOTION,
+ REDUCE_MOTION_DEFAULT
+ ) == 1
+}
+
+// See framework's Settings.Global.Wearable#REDUCE_MOTION.
+private const val REDUCE_MOTION = "reduce_motion"
+private const val REDUCE_MOTION_DEFAULT = 0
diff --git a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/CurvedAlignment.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CurvedAlignment.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/CurvedAlignment.kt
rename to wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CurvedAlignment.kt
diff --git a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/CurvedBox.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CurvedBox.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/CurvedBox.kt
rename to wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CurvedBox.kt
diff --git a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/CurvedColumn.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CurvedColumn.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/CurvedColumn.kt
rename to wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CurvedColumn.kt
diff --git a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/CurvedComposable.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CurvedComposable.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/CurvedComposable.kt
rename to wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CurvedComposable.kt
diff --git a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/CurvedContainer.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CurvedContainer.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/CurvedContainer.kt
rename to wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CurvedContainer.kt
diff --git a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/CurvedDirection.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CurvedDirection.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/CurvedDirection.kt
rename to wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CurvedDirection.kt
diff --git a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/CurvedDraw.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CurvedDraw.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/CurvedDraw.kt
rename to wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CurvedDraw.kt
diff --git a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/CurvedLayout.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CurvedLayout.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/CurvedLayout.kt
rename to wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CurvedLayout.kt
diff --git a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/CurvedModifier.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CurvedModifier.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/CurvedModifier.kt
rename to wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CurvedModifier.kt
diff --git a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/CurvedPadding.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CurvedPadding.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/CurvedPadding.kt
rename to wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CurvedPadding.kt
diff --git a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/CurvedParentData.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CurvedParentData.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/CurvedParentData.kt
rename to wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CurvedParentData.kt
diff --git a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/CurvedRow.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CurvedRow.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/CurvedRow.kt
rename to wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CurvedRow.kt
diff --git a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/CurvedSize.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CurvedSize.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/CurvedSize.kt
rename to wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CurvedSize.kt
diff --git a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/CurvedTextStyle.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CurvedTextStyle.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/CurvedTextStyle.kt
rename to wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CurvedTextStyle.kt
diff --git a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/Expandable.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/Expandable.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/Expandable.kt
rename to wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/Expandable.kt
diff --git a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/ExperimentalWearFoundationApi.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/ExperimentalWearFoundationApi.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/ExperimentalWearFoundationApi.kt
rename to wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/ExperimentalWearFoundationApi.kt
diff --git a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/HierarchicalFocusCoordinator.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/HierarchicalFocusCoordinator.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/HierarchicalFocusCoordinator.kt
rename to wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/HierarchicalFocusCoordinator.kt
diff --git a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/InternalMutatorMutex.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/InternalMutatorMutex.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/InternalMutatorMutex.kt
rename to wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/InternalMutatorMutex.kt
diff --git a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/SwipeToReveal.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/SwipeToReveal.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/SwipeToReveal.kt
rename to wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/SwipeToReveal.kt
diff --git a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/SwipeableV2.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/SwipeableV2.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/SwipeableV2.kt
rename to wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/SwipeableV2.kt
diff --git a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyColumn.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/lazy/ScalingLazyColumn.kt
similarity index 98%
rename from wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyColumn.kt
rename to wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/lazy/ScalingLazyColumn.kt
index e5138cd..81a893a 100644
--- a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyColumn.kt
+++ b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/lazy/ScalingLazyColumn.kt
@@ -30,7 +30,6 @@
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.calculateEndPadding
import androidx.compose.foundation.layout.calculateStartPadding
-import androidx.compose.foundation.layout.height
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyListScope
import androidx.compose.runtime.Composable
@@ -57,6 +56,8 @@
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.offset
+import androidx.wear.compose.foundation.ExperimentalWearFoundationApi
+import androidx.wear.compose.foundation.LocalReduceMotion
/**
* Receiver scope which is used by [ScalingLazyColumn].
@@ -321,6 +322,7 @@
* manually arrange the items.
* @param content The content of the [ScalingLazyColumn]
*/
+@OptIn(ExperimentalWearFoundationApi::class)
@Composable
public fun ScalingLazyColumn(
modifier: Modifier = Modifier,
@@ -344,8 +346,12 @@
BoxWithConstraints(modifier = modifier, propagateMinConstraints = true) {
val density = LocalDensity.current
val layoutDirection = LocalLayoutDirection.current
+ val reduceMotion = LocalReduceMotion.current
val extraPaddingInPixels = scalingParams.resolveViewportVerticalOffset(constraints)
+ val actualScalingParams =
+ if (reduceMotion.enabled()) ReduceMotionScalingParams(scalingParams) else scalingParams
+
with(density) {
val extraPadding = extraPaddingInPixels.toDp()
val combinedPaddingValues = CombinedPaddingValues(
@@ -377,7 +383,7 @@
)
// Set up transient state
- state.scalingParams.value = scalingParams
+ state.scalingParams.value = actualScalingParams
state.extraPaddingPx.value = extraPaddingInPixels
state.beforeContentPaddingPx.value = beforeContentPaddingInPx
state.afterContentPaddingPx.value = afterContentPaddingInPx
diff --git a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyColumnMeasure.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/lazy/ScalingLazyColumnMeasure.kt
similarity index 91%
rename from wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyColumnMeasure.kt
rename to wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/lazy/ScalingLazyColumnMeasure.kt
index cabfb3f..00d1260 100644
--- a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyColumnMeasure.kt
+++ b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/lazy/ScalingLazyColumnMeasure.kt
@@ -265,6 +265,58 @@
}
}
+@Stable
+internal class ReduceMotionScalingParams(
+ private val initial: ScalingParams,
+) : ScalingParams {
+
+ override val edgeScale: Float = 1.0f
+ override val edgeAlpha: Float = 1.0f
+ override val minElementHeight: Float = initial.minElementHeight
+ override val maxElementHeight: Float = initial.maxElementHeight
+ override val minTransitionArea: Float = initial.minTransitionArea
+ override val maxTransitionArea: Float = initial.maxTransitionArea
+ override val scaleInterpolator: Easing = initial.scaleInterpolator
+ override fun resolveViewportVerticalOffset(viewportConstraints: Constraints): Int {
+ return initial.resolveViewportVerticalOffset(viewportConstraints)
+ }
+
+ override fun toString(): String {
+ return "ReduceMotionScalingParams(edgeScale=$edgeScale, edgeAlpha=$edgeAlpha, " +
+ "minElementHeight=$minElementHeight, maxElementHeight=$maxElementHeight, " +
+ "minTransitionArea=$minTransitionArea, maxTransitionArea=$maxTransitionArea)"
+ }
+
+ override fun equals(other: Any?): Boolean {
+ if (this === other) return true
+ if (other == null) return false
+ if (this::class != other::class) return false
+
+ other as ReduceMotionScalingParams
+
+ if (edgeScale != other.edgeScale) return false
+ if (edgeAlpha != other.edgeAlpha) return false
+ if (minElementHeight != other.minElementHeight) return false
+ if (maxElementHeight != other.maxElementHeight) return false
+ if (minTransitionArea != other.minTransitionArea) return false
+ if (maxTransitionArea != other.maxTransitionArea) return false
+ if (scaleInterpolator != other.scaleInterpolator) return false
+
+ return true
+ }
+
+ override fun hashCode(): Int {
+ var result = edgeScale.hashCode()
+ result = 31 * result + edgeAlpha.hashCode()
+ result = 31 * result + minElementHeight.hashCode()
+ result = 31 * result + maxElementHeight.hashCode()
+ result = 31 * result + minTransitionArea.hashCode()
+ result = 31 * result + maxTransitionArea.hashCode()
+ result = 31 * result + scaleInterpolator.hashCode()
+ return result
+ }
+}
+
/**
* Calculate the scale and alpha to apply for an item based on the start and end position of the
* component's viewport in pixels and top and bottom position of the item, also in pixels.
diff --git a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyColumnSnapFlingBehavior.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/lazy/ScalingLazyColumnSnapFlingBehavior.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyColumnSnapFlingBehavior.kt
rename to wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/lazy/ScalingLazyColumnSnapFlingBehavior.kt
diff --git a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyListItemInfo.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/lazy/ScalingLazyListItemInfo.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyListItemInfo.kt
rename to wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/lazy/ScalingLazyListItemInfo.kt
diff --git a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyListItemScope.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/lazy/ScalingLazyListItemScope.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyListItemScope.kt
rename to wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/lazy/ScalingLazyListItemScope.kt
diff --git a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyListLayoutInfo.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/lazy/ScalingLazyListLayoutInfo.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyListLayoutInfo.kt
rename to wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/lazy/ScalingLazyListLayoutInfo.kt
diff --git a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyListState.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/lazy/ScalingLazyListState.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyListState.kt
rename to wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/lazy/ScalingLazyListState.kt
diff --git a/wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyScopeMarker.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/lazy/ScalingLazyScopeMarker.kt
similarity index 100%
rename from wear/compose/compose-foundation/src/commonMain/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyScopeMarker.kt
rename to wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/lazy/ScalingLazyScopeMarker.kt
diff --git a/wear/compose/compose-foundation/src/test/kotlin/androidx/wear/compose/foundation/CurvedTextStyleTest.kt b/wear/compose/compose-foundation/src/test/kotlin/androidx/wear/compose/foundation/CurvedTextStyleTest.kt
index 53d704d..3c9dab3 100644
--- a/wear/compose/compose-foundation/src/test/kotlin/androidx/wear/compose/foundation/CurvedTextStyleTest.kt
+++ b/wear/compose/compose-foundation/src/test/kotlin/androidx/wear/compose/foundation/CurvedTextStyleTest.kt
@@ -25,8 +25,8 @@
import androidx.compose.ui.unit.isUnspecified
import androidx.compose.ui.unit.sp
import org.junit.Assert.assertEquals
-import org.junit.Assert.assertTrue
import org.junit.Assert.assertNull
+import org.junit.Assert.assertTrue
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
diff --git a/wear/compose/compose-material-core/build.gradle b/wear/compose/compose-material-core/build.gradle
index fe566204..bbe82bd 100644
--- a/wear/compose/compose-material-core/build.gradle
+++ b/wear/compose/compose-material-core/build.gradle
@@ -22,11 +22,9 @@
id("AndroidXPlugin")
id("com.android.library")
id("AndroidXComposePlugin")
+ id("org.jetbrains.kotlin.android")
}
-// Disable multi-platform.
-AndroidXComposePlugin.applyAndConfigureKotlinPlugin(project, /* isMultiplatformEnabled= */ false)
-
dependencies {
api(project(":compose:foundation:foundation"))
api(project(":compose:ui:ui"))
@@ -66,9 +64,6 @@
consumerProguardFiles("proguard-rules.pro")
}
namespace "androidx.wear.compose.material.core"
- lint {
- baseline = file("lint-baseline.xml")
- }
}
androidx {
diff --git a/wear/compose/compose-material-core/lint-baseline.xml b/wear/compose/compose-material-core/lint-baseline.xml
deleted file mode 100644
index dece16a..0000000
--- a/wear/compose/compose-material-core/lint-baseline.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.1.0-alpha07" type="baseline" client="gradle" dependencies="false" name="AGP (8.0.0-beta03)" variant="all" version="8.1.0-alpha07">
-
- <issue
- id="BanHideAnnotation"
- message="@hide is not allowed in Javadoc"
- errorLine1="fun Button("
- errorLine2=" ~~~~~~">
- <location
- file="src/commonMain/kotlin/androidx/wear/compose/materialcore/Button.kt"/>
- </issue>
-
-</issues>
diff --git a/wear/compose/compose-material-core/src/androidAndroidTest/kotlin/androidx/wear/compose/materialcore/ButtonTest.kt b/wear/compose/compose-material-core/src/androidTest/kotlin/androidx/wear/compose/materialcore/ButtonTest.kt
similarity index 100%
rename from wear/compose/compose-material-core/src/androidAndroidTest/kotlin/androidx/wear/compose/materialcore/ButtonTest.kt
rename to wear/compose/compose-material-core/src/androidTest/kotlin/androidx/wear/compose/materialcore/ButtonTest.kt
diff --git a/wear/compose/compose-material-core/src/androidAndroidTest/kotlin/androidx/wear/compose/materialcore/ChipTest.kt b/wear/compose/compose-material-core/src/androidTest/kotlin/androidx/wear/compose/materialcore/ChipTest.kt
similarity index 99%
rename from wear/compose/compose-material-core/src/androidAndroidTest/kotlin/androidx/wear/compose/materialcore/ChipTest.kt
rename to wear/compose/compose-material-core/src/androidTest/kotlin/androidx/wear/compose/materialcore/ChipTest.kt
index 81ec14c..756d558 100644
--- a/wear/compose/compose-material-core/src/androidAndroidTest/kotlin/androidx/wear/compose/materialcore/ChipTest.kt
+++ b/wear/compose/compose-material-core/src/androidTest/kotlin/androidx/wear/compose/materialcore/ChipTest.kt
@@ -32,14 +32,14 @@
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.State
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
-import androidx.compose.runtime.State
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.compositeOver
import androidx.compose.ui.graphics.Shape
+import androidx.compose.ui.graphics.compositeOver
import androidx.compose.ui.graphics.painter.ColorPainter
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.platform.testTag
diff --git a/wear/compose/compose-material-core/src/androidAndroidTest/kotlin/androidx/wear/compose/materialcore/IconTest.kt b/wear/compose/compose-material-core/src/androidTest/kotlin/androidx/wear/compose/materialcore/IconTest.kt
similarity index 99%
rename from wear/compose/compose-material-core/src/androidAndroidTest/kotlin/androidx/wear/compose/materialcore/IconTest.kt
rename to wear/compose/compose-material-core/src/androidTest/kotlin/androidx/wear/compose/materialcore/IconTest.kt
index ce31b5d..1c76ba7 100644
--- a/wear/compose/compose-material-core/src/androidAndroidTest/kotlin/androidx/wear/compose/materialcore/IconTest.kt
+++ b/wear/compose/compose-material-core/src/androidTest/kotlin/androidx/wear/compose/materialcore/IconTest.kt
@@ -29,8 +29,8 @@
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.graphics.drawscope.CanvasDrawScope
-import androidx.compose.ui.graphics.painter.ColorPainter
import androidx.compose.ui.graphics.painter.BitmapPainter
+import androidx.compose.ui.graphics.painter.ColorPainter
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.graphics.vector.rememberVectorPainter
diff --git a/wear/compose/compose-material-core/src/androidAndroidTest/kotlin/androidx/wear/compose/materialcore/MaterialCoreTest.kt b/wear/compose/compose-material-core/src/androidTest/kotlin/androidx/wear/compose/materialcore/MaterialCoreTest.kt
similarity index 100%
rename from wear/compose/compose-material-core/src/androidAndroidTest/kotlin/androidx/wear/compose/materialcore/MaterialCoreTest.kt
rename to wear/compose/compose-material-core/src/androidTest/kotlin/androidx/wear/compose/materialcore/MaterialCoreTest.kt
diff --git a/wear/compose/compose-material-core/src/androidAndroidTest/kotlin/androidx/wear/compose/materialcore/TextTest.kt b/wear/compose/compose-material-core/src/androidTest/kotlin/androidx/wear/compose/materialcore/TextTest.kt
similarity index 99%
rename from wear/compose/compose-material-core/src/androidAndroidTest/kotlin/androidx/wear/compose/materialcore/TextTest.kt
rename to wear/compose/compose-material-core/src/androidTest/kotlin/androidx/wear/compose/materialcore/TextTest.kt
index 7215c15..d1c8fad 100644
--- a/wear/compose/compose-material-core/src/androidAndroidTest/kotlin/androidx/wear/compose/materialcore/TextTest.kt
+++ b/wear/compose/compose-material-core/src/androidTest/kotlin/androidx/wear/compose/materialcore/TextTest.kt
@@ -43,10 +43,10 @@
import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth
+import java.lang.IllegalArgumentException
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.lang.IllegalArgumentException
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/wear/compose/compose-material-core/src/commonMain/kotlin/androidx/wear/compose/materialcore/Button.kt b/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Button.kt
similarity index 99%
rename from wear/compose/compose-material-core/src/commonMain/kotlin/androidx/wear/compose/materialcore/Button.kt
rename to wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Button.kt
index 67e06e3..e389f5c 100644
--- a/wear/compose/compose-material-core/src/commonMain/kotlin/androidx/wear/compose/materialcore/Button.kt
+++ b/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Button.kt
@@ -58,7 +58,6 @@
* @param border Resolves the border for this button in different states.
* @param buttonSize The default size of the button unless overridden by Modifier.size.
* @param content The content displayed on the [Button] such as text, icon or image.
- * @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@Composable
diff --git a/wear/compose/compose-material-core/src/commonMain/kotlin/androidx/wear/compose/materialcore/Card.kt b/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Card.kt
similarity index 100%
rename from wear/compose/compose-material-core/src/commonMain/kotlin/androidx/wear/compose/materialcore/Card.kt
rename to wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Card.kt
diff --git a/wear/compose/compose-material-core/src/commonMain/kotlin/androidx/wear/compose/materialcore/Chip.kt b/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Chip.kt
similarity index 100%
rename from wear/compose/compose-material-core/src/commonMain/kotlin/androidx/wear/compose/materialcore/Chip.kt
rename to wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Chip.kt
diff --git a/wear/compose/compose-material-core/src/commonMain/kotlin/androidx/wear/compose/materialcore/Icon.kt b/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Icon.kt
similarity index 100%
rename from wear/compose/compose-material-core/src/commonMain/kotlin/androidx/wear/compose/materialcore/Icon.kt
rename to wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Icon.kt
diff --git a/wear/compose/compose-material-core/src/commonMain/kotlin/androidx/wear/compose/materialcore/ImageWithScrimPainter.kt b/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/ImageWithScrimPainter.kt
similarity index 100%
rename from wear/compose/compose-material-core/src/commonMain/kotlin/androidx/wear/compose/materialcore/ImageWithScrimPainter.kt
rename to wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/ImageWithScrimPainter.kt
diff --git a/wear/compose/compose-material-core/src/commonMain/kotlin/androidx/wear/compose/materialcore/Text.kt b/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Text.kt
similarity index 100%
rename from wear/compose/compose-material-core/src/commonMain/kotlin/androidx/wear/compose/materialcore/Text.kt
rename to wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Text.kt
diff --git a/wear/compose/compose-material/api/current.txt b/wear/compose/compose-material/api/current.txt
index 761dc1e8..31f3e98 100644
--- a/wear/compose/compose-material/api/current.txt
+++ b/wear/compose/compose-material/api/current.txt
@@ -42,10 +42,10 @@
}
public final class ButtonKt {
- method @androidx.compose.runtime.Composable public static void Button(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static void Button(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void CompactButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Button(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static void CompactButton(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void CompactButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void OutlinedButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void OutlinedCompactButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
}
@@ -113,12 +113,12 @@
}
public final class ChipKt {
- method @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.wear.compose.material.ChipColors colors, androidx.wear.compose.material.ChipBorder border, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
method @Deprecated @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, androidx.wear.compose.material.ChipColors colors, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.wear.compose.material.ChipColors colors, androidx.wear.compose.material.ChipBorder border, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit> label, kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
- method @androidx.compose.runtime.Composable public static void CompactChip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
+ method @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
method @Deprecated @androidx.compose.runtime.Composable public static void CompactChip(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
+ method @androidx.compose.runtime.Composable public static void CompactChip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
method @androidx.compose.runtime.Composable public static void OutlinedChip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
method @androidx.compose.runtime.Composable public static void OutlinedCompactChip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
}
@@ -189,9 +189,9 @@
}
public final class IconKt {
- method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+ method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
}
@androidx.compose.runtime.Stable public interface InlineSliderColors {
@@ -298,10 +298,10 @@
}
public final class PickerKt {
- method @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? readOnlyLabel, optional kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, optional androidx.wear.compose.foundation.lazy.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,kotlin.Unit> option);
method @Deprecated @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? readOnlyLabel, optional androidx.wear.compose.material.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,kotlin.Unit> option);
method @Deprecated @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit>? readOnlyLabel, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit> onSelected, optional androidx.wear.compose.material.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,? extends kotlin.Unit> option);
method @Deprecated @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit>? readOnlyLabel, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit> onSelected, optional androidx.wear.compose.material.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,? extends kotlin.Unit> option);
+ method @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? readOnlyLabel, optional kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, optional androidx.wear.compose.foundation.lazy.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,kotlin.Unit> option);
method @androidx.compose.runtime.Composable public static androidx.wear.compose.material.PickerState rememberPickerState(int initialNumberOfOptions, optional int initiallySelectedOption, optional boolean repeatItems);
}
@@ -351,12 +351,12 @@
}
public final class PositionIndicatorKt {
+ method @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.compose.foundation.lazy.LazyListState lazyListState, optional androidx.compose.ui.Modifier modifier, optional boolean reverseDirection);
method @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.compose.foundation.ScrollState scrollState, optional androidx.compose.ui.Modifier modifier, optional boolean reverseDirection);
method @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.wear.compose.foundation.lazy.ScalingLazyListState scalingLazyListState, optional androidx.compose.ui.Modifier modifier, optional boolean reverseDirection);
- method @Deprecated @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.wear.compose.material.ScalingLazyListState scalingLazyListState, optional androidx.compose.ui.Modifier modifier, optional boolean reverseDirection);
- method @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.compose.foundation.lazy.LazyListState lazyListState, optional androidx.compose.ui.Modifier modifier, optional boolean reverseDirection);
- method @androidx.compose.runtime.Composable public static void PositionIndicator(kotlin.jvm.functions.Function0<java.lang.Float> value, optional androidx.compose.ui.Modifier modifier, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> range, optional long color, optional boolean reverseDirection, optional int position);
method @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.wear.compose.material.PositionIndicatorState state, float indicatorHeight, float indicatorWidth, float paddingHorizontal, optional androidx.compose.ui.Modifier modifier, optional long background, optional long color, optional boolean reverseDirection, optional int position);
+ method @Deprecated @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.wear.compose.material.ScalingLazyListState scalingLazyListState, optional androidx.compose.ui.Modifier modifier, optional boolean reverseDirection);
+ method @androidx.compose.runtime.Composable public static void PositionIndicator(kotlin.jvm.functions.Function0<java.lang.Float> value, optional androidx.compose.ui.Modifier modifier, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> range, optional long color, optional boolean reverseDirection, optional int position);
}
@androidx.compose.runtime.Stable public interface PositionIndicatorState {
@@ -388,8 +388,8 @@
}
public final class ProgressIndicatorKt {
- method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional float startAngle, optional float endAngle, optional long indicatorColor, optional long trackColor, optional float strokeWidth);
method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional float startAngle, optional long indicatorColor, optional long trackColor, optional float strokeWidth);
+ method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional float startAngle, optional float endAngle, optional long indicatorColor, optional long trackColor, optional float strokeWidth);
}
@androidx.compose.runtime.Stable public interface RadioButtonColors {
@@ -536,8 +536,8 @@
}
public final class ScrollAwayKt {
- method public static androidx.compose.ui.Modifier scrollAway(androidx.compose.ui.Modifier, androidx.compose.foundation.ScrollState scrollState, optional float offset);
method public static androidx.compose.ui.Modifier scrollAway(androidx.compose.ui.Modifier, androidx.compose.foundation.lazy.LazyListState scrollState, optional int itemIndex, optional float offset);
+ method public static androidx.compose.ui.Modifier scrollAway(androidx.compose.ui.Modifier, androidx.compose.foundation.ScrollState scrollState, optional float offset);
method public static androidx.compose.ui.Modifier scrollAway(androidx.compose.ui.Modifier, androidx.wear.compose.foundation.lazy.ScalingLazyListState scrollState, optional int itemIndex, optional float offset);
method @Deprecated public static androidx.compose.ui.Modifier scrollAway(androidx.compose.ui.Modifier, androidx.wear.compose.material.ScalingLazyListState scrollState, optional int itemIndex, optional float offset);
}
@@ -575,10 +575,10 @@
}
public final class StepperKt {
- method @androidx.compose.runtime.Composable public static void Stepper(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, int steps, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional long backgroundColor, optional long contentColor, optional long iconColor, optional boolean enableRangeSemantics, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void Stepper(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onValueChange, kotlin.ranges.IntProgression valueProgression, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional long iconColor, optional boolean enableRangeSemantics, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static void Stepper(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,? extends kotlin.Unit> onValueChange, int steps, kotlin.jvm.functions.Function0<? extends kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<? extends kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional long backgroundColor, optional long contentColor, optional long iconColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Stepper(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, int steps, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional long backgroundColor, optional long contentColor, optional long iconColor, optional boolean enableRangeSemantics, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static void Stepper(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends kotlin.Unit> onValueChange, kotlin.ranges.IntProgression valueProgression, kotlin.jvm.functions.Function0<? extends kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<? extends kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional long iconColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Stepper(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onValueChange, kotlin.ranges.IntProgression valueProgression, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional long iconColor, optional boolean enableRangeSemantics, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
}
public final class SwipeToDismissBoxDefaults {
@@ -633,10 +633,10 @@
public final class TextKt {
method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
- method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method @Deprecated @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> LocalTextStyle;
}
@@ -684,9 +684,9 @@
}
public final class ToggleButtonKt {
- method @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional int role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
- method @Deprecated @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,? extends kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,? extends kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
+ method @Deprecated @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,? extends kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional int role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
}
@androidx.compose.runtime.Stable public interface ToggleChipColors {
@@ -800,17 +800,17 @@
}
public final class DialogKt {
- method @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> title, kotlin.jvm.functions.Function0<kotlin.Unit> negativeButton, kotlin.jvm.functions.Function0<kotlin.Unit> positiveButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState scrollState, optional long backgroundColor, optional long contentColor, optional long titleColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? content);
- method @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? message, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState scrollState, optional long backgroundColor, optional long titleColor, optional long messageColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.wear.compose.foundation.lazy.ScalingLazyListScope,kotlin.Unit> content);
- method @Deprecated @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> title, kotlin.jvm.functions.Function0<? extends kotlin.Unit> negativeButton, kotlin.jvm.functions.Function0<? extends kotlin.Unit> positiveButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long backgroundColor, optional long contentColor, optional long titleColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? content);
method @Deprecated @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? icon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? message, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long backgroundColor, optional long titleColor, optional long messageColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.ScalingLazyListScope,? extends kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void Confirmation(kotlin.jvm.functions.Function0<kotlin.Unit> onTimeout, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState scrollState, optional long durationMillis, optional long backgroundColor, optional long contentColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+ method @Deprecated @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> title, kotlin.jvm.functions.Function0<? extends kotlin.Unit> negativeButton, kotlin.jvm.functions.Function0<? extends kotlin.Unit> positiveButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long backgroundColor, optional long contentColor, optional long titleColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? content);
+ method @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? message, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState scrollState, optional long backgroundColor, optional long titleColor, optional long messageColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.wear.compose.foundation.lazy.ScalingLazyListScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> title, kotlin.jvm.functions.Function0<kotlin.Unit> negativeButton, kotlin.jvm.functions.Function0<kotlin.Unit> positiveButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState scrollState, optional long backgroundColor, optional long contentColor, optional long titleColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? content);
method @Deprecated @androidx.compose.runtime.Composable public static void Confirmation(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onTimeout, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long durationMillis, optional long backgroundColor, optional long contentColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Confirmation(kotlin.jvm.functions.Function0<kotlin.Unit> onTimeout, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState scrollState, optional long durationMillis, optional long backgroundColor, optional long contentColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
}
public final class Dialog_androidKt {
- method @androidx.compose.runtime.Composable public static void Dialog(boolean showDialog, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState? scrollState, optional androidx.compose.ui.window.DialogProperties properties, kotlin.jvm.functions.Function0<kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static void Dialog(boolean showDialog, kotlin.jvm.functions.Function0<? extends kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.ScalingLazyListState? scrollState, optional androidx.compose.ui.window.DialogProperties properties, kotlin.jvm.functions.Function0<? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Dialog(boolean showDialog, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState? scrollState, optional androidx.compose.ui.window.DialogProperties properties, kotlin.jvm.functions.Function0<kotlin.Unit> content);
}
}
diff --git a/wear/compose/compose-material/api/public_plus_experimental_current.txt b/wear/compose/compose-material/api/public_plus_experimental_current.txt
index 02e12cd..ab31bbe 100644
--- a/wear/compose/compose-material/api/public_plus_experimental_current.txt
+++ b/wear/compose/compose-material/api/public_plus_experimental_current.txt
@@ -42,10 +42,10 @@
}
public final class ButtonKt {
- method @androidx.compose.runtime.Composable public static void Button(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static void Button(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void CompactButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Button(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static void CompactButton(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void CompactButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void OutlinedButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void OutlinedCompactButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
}
@@ -90,8 +90,8 @@
public final class ChipDefaults {
method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors childChipColors(optional long contentColor, optional long secondaryContentColor, optional long iconColor);
method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipBorder chipBorder(optional androidx.compose.foundation.BorderStroke? borderStroke, optional androidx.compose.foundation.BorderStroke? disabledBorderStroke);
- method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors chipColors(optional long backgroundColor, optional long contentColor, optional long secondaryContentColor, optional long iconColor, optional long disabledBackgroundColor, optional long disabledContentColor, optional long disabledSecondaryContentColor, optional long disabledIconColor);
method @androidx.wear.compose.material.ExperimentalWearMaterialApi public androidx.wear.compose.material.ChipColors chipColors(androidx.compose.ui.graphics.painter.Painter backgroundPainter, long contentColor, long secondaryContentColor, long iconColor, androidx.compose.ui.graphics.painter.Painter disabledBackgroundPainter, long disabledContentColor, long disabledSecondaryContentColor, long disabledIconColor);
+ method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors chipColors(optional long backgroundColor, optional long contentColor, optional long secondaryContentColor, optional long iconColor, optional long disabledBackgroundColor, optional long disabledContentColor, optional long disabledSecondaryContentColor, optional long disabledIconColor);
method public androidx.compose.foundation.layout.PaddingValues getCompactChipContentPadding();
method public androidx.compose.foundation.layout.PaddingValues getCompactChipTapTargetPadding();
method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
@@ -114,12 +114,12 @@
}
public final class ChipKt {
- method @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.wear.compose.material.ChipColors colors, androidx.wear.compose.material.ChipBorder border, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
method @Deprecated @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, androidx.wear.compose.material.ChipColors colors, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.wear.compose.material.ChipColors colors, androidx.wear.compose.material.ChipBorder border, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit> label, kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
- method @androidx.compose.runtime.Composable public static void CompactChip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
+ method @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
method @Deprecated @androidx.compose.runtime.Composable public static void CompactChip(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
+ method @androidx.compose.runtime.Composable public static void CompactChip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
method @androidx.compose.runtime.Composable public static void OutlinedChip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
method @androidx.compose.runtime.Composable public static void OutlinedCompactChip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
}
@@ -205,9 +205,9 @@
}
public final class IconKt {
- method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+ method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
}
@androidx.compose.runtime.Stable public interface InlineSliderColors {
@@ -314,10 +314,10 @@
}
public final class PickerKt {
- method @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? readOnlyLabel, optional kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, optional androidx.wear.compose.foundation.lazy.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,kotlin.Unit> option);
method @Deprecated @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? readOnlyLabel, optional androidx.wear.compose.material.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,kotlin.Unit> option);
method @Deprecated @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit>? readOnlyLabel, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit> onSelected, optional androidx.wear.compose.material.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,? extends kotlin.Unit> option);
method @Deprecated @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit>? readOnlyLabel, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit> onSelected, optional androidx.wear.compose.material.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,? extends kotlin.Unit> option);
+ method @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? readOnlyLabel, optional kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, optional androidx.wear.compose.foundation.lazy.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,kotlin.Unit> option);
method @androidx.compose.runtime.Composable public static androidx.wear.compose.material.PickerState rememberPickerState(int initialNumberOfOptions, optional int initiallySelectedOption, optional boolean repeatItems);
}
@@ -391,12 +391,12 @@
}
public final class PositionIndicatorKt {
+ method @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.compose.foundation.lazy.LazyListState lazyListState, optional androidx.compose.ui.Modifier modifier, optional boolean reverseDirection);
method @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.compose.foundation.ScrollState scrollState, optional androidx.compose.ui.Modifier modifier, optional boolean reverseDirection);
method @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.wear.compose.foundation.lazy.ScalingLazyListState scalingLazyListState, optional androidx.compose.ui.Modifier modifier, optional boolean reverseDirection);
- method @Deprecated @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.wear.compose.material.ScalingLazyListState scalingLazyListState, optional androidx.compose.ui.Modifier modifier, optional boolean reverseDirection);
- method @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.compose.foundation.lazy.LazyListState lazyListState, optional androidx.compose.ui.Modifier modifier, optional boolean reverseDirection);
- method @androidx.compose.runtime.Composable public static void PositionIndicator(kotlin.jvm.functions.Function0<java.lang.Float> value, optional androidx.compose.ui.Modifier modifier, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> range, optional long color, optional boolean reverseDirection, optional int position);
method @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.wear.compose.material.PositionIndicatorState state, float indicatorHeight, float indicatorWidth, float paddingHorizontal, optional androidx.compose.ui.Modifier modifier, optional long background, optional long color, optional boolean reverseDirection, optional int position);
+ method @Deprecated @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.wear.compose.material.ScalingLazyListState scalingLazyListState, optional androidx.compose.ui.Modifier modifier, optional boolean reverseDirection);
+ method @androidx.compose.runtime.Composable public static void PositionIndicator(kotlin.jvm.functions.Function0<java.lang.Float> value, optional androidx.compose.ui.Modifier modifier, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> range, optional long color, optional boolean reverseDirection, optional int position);
}
@androidx.compose.runtime.Stable public interface PositionIndicatorState {
@@ -428,8 +428,8 @@
}
public final class ProgressIndicatorKt {
- method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional float startAngle, optional float endAngle, optional long indicatorColor, optional long trackColor, optional float strokeWidth);
method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional float startAngle, optional long indicatorColor, optional long trackColor, optional float strokeWidth);
+ method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional float startAngle, optional float endAngle, optional long indicatorColor, optional long trackColor, optional float strokeWidth);
}
@androidx.compose.runtime.Stable public interface RadioButtonColors {
@@ -587,8 +587,8 @@
}
public final class ScrollAwayKt {
- method public static androidx.compose.ui.Modifier scrollAway(androidx.compose.ui.Modifier, androidx.compose.foundation.ScrollState scrollState, optional float offset);
method public static androidx.compose.ui.Modifier scrollAway(androidx.compose.ui.Modifier, androidx.compose.foundation.lazy.LazyListState scrollState, optional int itemIndex, optional float offset);
+ method public static androidx.compose.ui.Modifier scrollAway(androidx.compose.ui.Modifier, androidx.compose.foundation.ScrollState scrollState, optional float offset);
method public static androidx.compose.ui.Modifier scrollAway(androidx.compose.ui.Modifier, androidx.wear.compose.foundation.lazy.ScalingLazyListState scrollState, optional int itemIndex, optional float offset);
method @Deprecated public static androidx.compose.ui.Modifier scrollAway(androidx.compose.ui.Modifier, androidx.wear.compose.material.ScalingLazyListState scrollState, optional int itemIndex, optional float offset);
}
@@ -626,10 +626,10 @@
}
public final class StepperKt {
- method @androidx.compose.runtime.Composable public static void Stepper(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, int steps, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional long backgroundColor, optional long contentColor, optional long iconColor, optional boolean enableRangeSemantics, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void Stepper(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onValueChange, kotlin.ranges.IntProgression valueProgression, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional long iconColor, optional boolean enableRangeSemantics, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static void Stepper(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,? extends kotlin.Unit> onValueChange, int steps, kotlin.jvm.functions.Function0<? extends kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<? extends kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional long backgroundColor, optional long contentColor, optional long iconColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Stepper(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, int steps, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional long backgroundColor, optional long contentColor, optional long iconColor, optional boolean enableRangeSemantics, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static void Stepper(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends kotlin.Unit> onValueChange, kotlin.ranges.IntProgression valueProgression, kotlin.jvm.functions.Function0<? extends kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<? extends kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional long iconColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Stepper(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onValueChange, kotlin.ranges.IntProgression valueProgression, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional long iconColor, optional boolean enableRangeSemantics, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
}
@androidx.compose.runtime.Immutable @androidx.wear.compose.material.ExperimentalWearMaterialApi public final class SwipeProgress<T> {
@@ -736,10 +736,10 @@
public final class TextKt {
method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
- method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method @Deprecated @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> LocalTextStyle;
}
@@ -791,9 +791,9 @@
}
public final class ToggleButtonKt {
- method @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional int role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
- method @Deprecated @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,? extends kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,? extends kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
+ method @Deprecated @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,? extends kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional int role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
}
@androidx.compose.runtime.Stable public interface ToggleChipColors {
@@ -907,17 +907,17 @@
}
public final class DialogKt {
- method @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> title, kotlin.jvm.functions.Function0<kotlin.Unit> negativeButton, kotlin.jvm.functions.Function0<kotlin.Unit> positiveButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState scrollState, optional long backgroundColor, optional long contentColor, optional long titleColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? content);
- method @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? message, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState scrollState, optional long backgroundColor, optional long titleColor, optional long messageColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.wear.compose.foundation.lazy.ScalingLazyListScope,kotlin.Unit> content);
- method @Deprecated @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> title, kotlin.jvm.functions.Function0<? extends kotlin.Unit> negativeButton, kotlin.jvm.functions.Function0<? extends kotlin.Unit> positiveButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long backgroundColor, optional long contentColor, optional long titleColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? content);
method @Deprecated @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? icon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? message, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long backgroundColor, optional long titleColor, optional long messageColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.ScalingLazyListScope,? extends kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void Confirmation(kotlin.jvm.functions.Function0<kotlin.Unit> onTimeout, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState scrollState, optional long durationMillis, optional long backgroundColor, optional long contentColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+ method @Deprecated @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> title, kotlin.jvm.functions.Function0<? extends kotlin.Unit> negativeButton, kotlin.jvm.functions.Function0<? extends kotlin.Unit> positiveButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long backgroundColor, optional long contentColor, optional long titleColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? content);
+ method @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? message, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState scrollState, optional long backgroundColor, optional long titleColor, optional long messageColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.wear.compose.foundation.lazy.ScalingLazyListScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> title, kotlin.jvm.functions.Function0<kotlin.Unit> negativeButton, kotlin.jvm.functions.Function0<kotlin.Unit> positiveButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState scrollState, optional long backgroundColor, optional long contentColor, optional long titleColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? content);
method @Deprecated @androidx.compose.runtime.Composable public static void Confirmation(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onTimeout, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long durationMillis, optional long backgroundColor, optional long contentColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Confirmation(kotlin.jvm.functions.Function0<kotlin.Unit> onTimeout, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState scrollState, optional long durationMillis, optional long backgroundColor, optional long contentColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
}
public final class Dialog_androidKt {
- method @androidx.compose.runtime.Composable public static void Dialog(boolean showDialog, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState? scrollState, optional androidx.compose.ui.window.DialogProperties properties, kotlin.jvm.functions.Function0<kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static void Dialog(boolean showDialog, kotlin.jvm.functions.Function0<? extends kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.ScalingLazyListState? scrollState, optional androidx.compose.ui.window.DialogProperties properties, kotlin.jvm.functions.Function0<? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Dialog(boolean showDialog, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState? scrollState, optional androidx.compose.ui.window.DialogProperties properties, kotlin.jvm.functions.Function0<kotlin.Unit> content);
}
}
diff --git a/wear/compose/compose-material/api/restricted_current.txt b/wear/compose/compose-material/api/restricted_current.txt
index 761dc1e8..31f3e98 100644
--- a/wear/compose/compose-material/api/restricted_current.txt
+++ b/wear/compose/compose-material/api/restricted_current.txt
@@ -42,10 +42,10 @@
}
public final class ButtonKt {
- method @androidx.compose.runtime.Composable public static void Button(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static void Button(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void CompactButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Button(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static void CompactButton(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void CompactButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void OutlinedButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable public static void OutlinedCompactButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
}
@@ -113,12 +113,12 @@
}
public final class ChipKt {
- method @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.wear.compose.material.ChipColors colors, androidx.wear.compose.material.ChipBorder border, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
method @Deprecated @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, androidx.wear.compose.material.ChipColors colors, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.wear.compose.material.ChipColors colors, androidx.wear.compose.material.ChipBorder border, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit> label, kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
- method @androidx.compose.runtime.Composable public static void CompactChip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
+ method @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
method @Deprecated @androidx.compose.runtime.Composable public static void CompactChip(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
+ method @androidx.compose.runtime.Composable public static void CompactChip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
method @androidx.compose.runtime.Composable public static void OutlinedChip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
method @androidx.compose.runtime.Composable public static void OutlinedCompactChip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
}
@@ -189,9 +189,9 @@
}
public final class IconKt {
- method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+ method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
}
@androidx.compose.runtime.Stable public interface InlineSliderColors {
@@ -298,10 +298,10 @@
}
public final class PickerKt {
- method @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? readOnlyLabel, optional kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, optional androidx.wear.compose.foundation.lazy.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,kotlin.Unit> option);
method @Deprecated @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? readOnlyLabel, optional androidx.wear.compose.material.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,kotlin.Unit> option);
method @Deprecated @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit>? readOnlyLabel, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit> onSelected, optional androidx.wear.compose.material.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,? extends kotlin.Unit> option);
method @Deprecated @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit>? readOnlyLabel, optional kotlin.jvm.functions.Function0<? extends kotlin.Unit> onSelected, optional androidx.wear.compose.material.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,? extends kotlin.Unit> option);
+ method @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? readOnlyLabel, optional kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, optional androidx.wear.compose.foundation.lazy.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,kotlin.Unit> option);
method @androidx.compose.runtime.Composable public static androidx.wear.compose.material.PickerState rememberPickerState(int initialNumberOfOptions, optional int initiallySelectedOption, optional boolean repeatItems);
}
@@ -351,12 +351,12 @@
}
public final class PositionIndicatorKt {
+ method @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.compose.foundation.lazy.LazyListState lazyListState, optional androidx.compose.ui.Modifier modifier, optional boolean reverseDirection);
method @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.compose.foundation.ScrollState scrollState, optional androidx.compose.ui.Modifier modifier, optional boolean reverseDirection);
method @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.wear.compose.foundation.lazy.ScalingLazyListState scalingLazyListState, optional androidx.compose.ui.Modifier modifier, optional boolean reverseDirection);
- method @Deprecated @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.wear.compose.material.ScalingLazyListState scalingLazyListState, optional androidx.compose.ui.Modifier modifier, optional boolean reverseDirection);
- method @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.compose.foundation.lazy.LazyListState lazyListState, optional androidx.compose.ui.Modifier modifier, optional boolean reverseDirection);
- method @androidx.compose.runtime.Composable public static void PositionIndicator(kotlin.jvm.functions.Function0<java.lang.Float> value, optional androidx.compose.ui.Modifier modifier, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> range, optional long color, optional boolean reverseDirection, optional int position);
method @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.wear.compose.material.PositionIndicatorState state, float indicatorHeight, float indicatorWidth, float paddingHorizontal, optional androidx.compose.ui.Modifier modifier, optional long background, optional long color, optional boolean reverseDirection, optional int position);
+ method @Deprecated @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.wear.compose.material.ScalingLazyListState scalingLazyListState, optional androidx.compose.ui.Modifier modifier, optional boolean reverseDirection);
+ method @androidx.compose.runtime.Composable public static void PositionIndicator(kotlin.jvm.functions.Function0<java.lang.Float> value, optional androidx.compose.ui.Modifier modifier, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> range, optional long color, optional boolean reverseDirection, optional int position);
}
@androidx.compose.runtime.Stable public interface PositionIndicatorState {
@@ -388,8 +388,8 @@
}
public final class ProgressIndicatorKt {
- method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional float startAngle, optional float endAngle, optional long indicatorColor, optional long trackColor, optional float strokeWidth);
method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional float startAngle, optional long indicatorColor, optional long trackColor, optional float strokeWidth);
+ method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional float startAngle, optional float endAngle, optional long indicatorColor, optional long trackColor, optional float strokeWidth);
}
@androidx.compose.runtime.Stable public interface RadioButtonColors {
@@ -536,8 +536,8 @@
}
public final class ScrollAwayKt {
- method public static androidx.compose.ui.Modifier scrollAway(androidx.compose.ui.Modifier, androidx.compose.foundation.ScrollState scrollState, optional float offset);
method public static androidx.compose.ui.Modifier scrollAway(androidx.compose.ui.Modifier, androidx.compose.foundation.lazy.LazyListState scrollState, optional int itemIndex, optional float offset);
+ method public static androidx.compose.ui.Modifier scrollAway(androidx.compose.ui.Modifier, androidx.compose.foundation.ScrollState scrollState, optional float offset);
method public static androidx.compose.ui.Modifier scrollAway(androidx.compose.ui.Modifier, androidx.wear.compose.foundation.lazy.ScalingLazyListState scrollState, optional int itemIndex, optional float offset);
method @Deprecated public static androidx.compose.ui.Modifier scrollAway(androidx.compose.ui.Modifier, androidx.wear.compose.material.ScalingLazyListState scrollState, optional int itemIndex, optional float offset);
}
@@ -575,10 +575,10 @@
}
public final class StepperKt {
- method @androidx.compose.runtime.Composable public static void Stepper(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, int steps, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional long backgroundColor, optional long contentColor, optional long iconColor, optional boolean enableRangeSemantics, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void Stepper(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onValueChange, kotlin.ranges.IntProgression valueProgression, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional long iconColor, optional boolean enableRangeSemantics, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static void Stepper(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,? extends kotlin.Unit> onValueChange, int steps, kotlin.jvm.functions.Function0<? extends kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<? extends kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional long backgroundColor, optional long contentColor, optional long iconColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Stepper(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, int steps, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional long backgroundColor, optional long contentColor, optional long iconColor, optional boolean enableRangeSemantics, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static void Stepper(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends kotlin.Unit> onValueChange, kotlin.ranges.IntProgression valueProgression, kotlin.jvm.functions.Function0<? extends kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<? extends kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional long iconColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Stepper(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onValueChange, kotlin.ranges.IntProgression valueProgression, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional long iconColor, optional boolean enableRangeSemantics, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
}
public final class SwipeToDismissBoxDefaults {
@@ -633,10 +633,10 @@
public final class TextKt {
method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
- method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method @Deprecated @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,? extends androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @Deprecated @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,? extends kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> LocalTextStyle;
}
@@ -684,9 +684,9 @@
}
public final class ToggleButtonKt {
- method @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional int role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
- method @Deprecated @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,? extends kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,? extends kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
+ method @Deprecated @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,? extends kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional int role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
}
@androidx.compose.runtime.Stable public interface ToggleChipColors {
@@ -800,17 +800,17 @@
}
public final class DialogKt {
- method @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> title, kotlin.jvm.functions.Function0<kotlin.Unit> negativeButton, kotlin.jvm.functions.Function0<kotlin.Unit> positiveButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState scrollState, optional long backgroundColor, optional long contentColor, optional long titleColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? content);
- method @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? message, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState scrollState, optional long backgroundColor, optional long titleColor, optional long messageColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.wear.compose.foundation.lazy.ScalingLazyListScope,kotlin.Unit> content);
- method @Deprecated @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> title, kotlin.jvm.functions.Function0<? extends kotlin.Unit> negativeButton, kotlin.jvm.functions.Function0<? extends kotlin.Unit> positiveButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long backgroundColor, optional long contentColor, optional long titleColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? content);
method @Deprecated @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? icon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? message, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long backgroundColor, optional long titleColor, optional long messageColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.ScalingLazyListScope,? extends kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void Confirmation(kotlin.jvm.functions.Function0<kotlin.Unit> onTimeout, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState scrollState, optional long durationMillis, optional long backgroundColor, optional long contentColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+ method @Deprecated @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> title, kotlin.jvm.functions.Function0<? extends kotlin.Unit> negativeButton, kotlin.jvm.functions.Function0<? extends kotlin.Unit> positiveButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long backgroundColor, optional long contentColor, optional long titleColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? content);
+ method @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? message, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState scrollState, optional long backgroundColor, optional long titleColor, optional long messageColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.wear.compose.foundation.lazy.ScalingLazyListScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> title, kotlin.jvm.functions.Function0<kotlin.Unit> negativeButton, kotlin.jvm.functions.Function0<kotlin.Unit> positiveButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState scrollState, optional long backgroundColor, optional long contentColor, optional long titleColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? content);
method @Deprecated @androidx.compose.runtime.Composable public static void Confirmation(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onTimeout, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long durationMillis, optional long backgroundColor, optional long contentColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Confirmation(kotlin.jvm.functions.Function0<kotlin.Unit> onTimeout, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState scrollState, optional long durationMillis, optional long backgroundColor, optional long contentColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
}
public final class Dialog_androidKt {
- method @androidx.compose.runtime.Composable public static void Dialog(boolean showDialog, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState? scrollState, optional androidx.compose.ui.window.DialogProperties properties, kotlin.jvm.functions.Function0<kotlin.Unit> content);
method @Deprecated @androidx.compose.runtime.Composable public static void Dialog(boolean showDialog, kotlin.jvm.functions.Function0<? extends kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.ScalingLazyListState? scrollState, optional androidx.compose.ui.window.DialogProperties properties, kotlin.jvm.functions.Function0<? extends kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void Dialog(boolean showDialog, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.foundation.lazy.ScalingLazyListState? scrollState, optional androidx.compose.ui.window.DialogProperties properties, kotlin.jvm.functions.Function0<kotlin.Unit> content);
}
}
diff --git a/wear/compose/compose-material/build.gradle b/wear/compose/compose-material/build.gradle
index 03e7a68..c19c9a1 100644
--- a/wear/compose/compose-material/build.gradle
+++ b/wear/compose/compose-material/build.gradle
@@ -15,18 +15,14 @@
*/
import androidx.build.LibraryType
-import androidx.build.AndroidXComposePlugin
-import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
id("AndroidXPlugin")
id("com.android.library")
id("AndroidXComposePlugin")
+ id("org.jetbrains.kotlin.android")
}
-// Disable multi-platform.
-AndroidXComposePlugin.applyAndConfigureKotlinPlugin(project, /* isMultiplatformEnabled= */ false)
-
dependencies {
api(project(":compose:foundation:foundation"))
api(project(":compose:ui:ui"))
diff --git a/wear/compose/compose-material/samples/src/main/java/androidx/wear/compose/material/samples/CircularProgressIndicatorSample.kt b/wear/compose/compose-material/samples/src/main/java/androidx/wear/compose/material/samples/CircularProgressIndicatorSample.kt
index ac90813..e70e08c 100644
--- a/wear/compose/compose-material/samples/src/main/java/androidx/wear/compose/material/samples/CircularProgressIndicatorSample.kt
+++ b/wear/compose/compose-material/samples/src/main/java/androidx/wear/compose/material/samples/CircularProgressIndicatorSample.kt
@@ -32,8 +32,8 @@
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
-import androidx.wear.compose.material.CompactChip
import androidx.wear.compose.material.CircularProgressIndicator
+import androidx.wear.compose.material.CompactChip
import androidx.wear.compose.material.ProgressIndicatorDefaults
import androidx.wear.compose.material.Text
diff --git a/wear/compose/compose-material/samples/src/main/java/androidx/wear/compose/material/samples/CurvedTextSample.kt b/wear/compose/compose-material/samples/src/main/java/androidx/wear/compose/material/samples/CurvedTextSample.kt
index 653eab7..aff1014 100644
--- a/wear/compose/compose-material/samples/src/main/java/androidx/wear/compose/material/samples/CurvedTextSample.kt
+++ b/wear/compose/compose-material/samples/src/main/java/androidx/wear/compose/material/samples/CurvedTextSample.kt
@@ -33,11 +33,11 @@
import androidx.wear.compose.foundation.curvedColumn
import androidx.wear.compose.foundation.curvedRow
import androidx.wear.compose.foundation.padding
-import androidx.wear.compose.material.curvedText
import androidx.wear.compose.material.LocalContentAlpha
import androidx.wear.compose.material.LocalContentColor
import androidx.wear.compose.material.LocalTextStyle
import androidx.wear.compose.material.ProvideTextStyle
+import androidx.wear.compose.material.curvedText
@Sampled
@Composable
diff --git a/wear/compose/compose-material/samples/src/main/java/androidx/wear/compose/material/samples/ScaffoldSample.kt b/wear/compose/compose-material/samples/src/main/java/androidx/wear/compose/material/samples/ScaffoldSample.kt
index 9aa2006..92c9d1f 100644
--- a/wear/compose/compose-material/samples/src/main/java/androidx/wear/compose/material/samples/ScaffoldSample.kt
+++ b/wear/compose/compose-material/samples/src/main/java/androidx/wear/compose/material/samples/ScaffoldSample.kt
@@ -24,16 +24,16 @@
import androidx.compose.runtime.mutableStateOf
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
+import androidx.wear.compose.foundation.lazy.ScalingLazyColumn
+import androidx.wear.compose.foundation.lazy.rememberScalingLazyListState
import androidx.wear.compose.material.Chip
import androidx.wear.compose.material.ChipDefaults
import androidx.wear.compose.material.PositionIndicator
import androidx.wear.compose.material.Scaffold
-import androidx.wear.compose.foundation.lazy.ScalingLazyColumn
import androidx.wear.compose.material.Text
import androidx.wear.compose.material.TimeText
import androidx.wear.compose.material.Vignette
import androidx.wear.compose.material.VignettePosition
-import androidx.wear.compose.foundation.lazy.rememberScalingLazyListState
@SuppressLint("UnrememberedMutableState")
@Sampled
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ScalingLazyListLayoutInfoTest.kt b/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ScalingLazyListLayoutInfoTest.kt
deleted file mode 100644
index 82dcfc3..0000000
--- a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ScalingLazyListLayoutInfoTest.kt
+++ /dev/null
@@ -1,1244 +0,0 @@
-/*
- * Copyright 2021 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
- *
- * http://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.
- */
-
-package androidx.wear.compose.material
-
-import androidx.compose.foundation.gestures.Orientation
-import androidx.compose.foundation.gestures.animateScrollBy
-import androidx.compose.foundation.gestures.scrollBy
-import androidx.compose.foundation.layout.Arrangement
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.PaddingValues
-import androidx.compose.foundation.layout.requiredSize
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.rememberCoroutineScope
-import androidx.compose.runtime.setValue
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.platform.LocalDensity
-import androidx.compose.ui.platform.testTag
-import androidx.compose.ui.test.assertIsDisplayed
-import androidx.compose.ui.test.junit4.createComposeRule
-import androidx.compose.ui.test.onNodeWithTag
-import androidx.compose.ui.unit.Dp
-import androidx.compose.ui.unit.IntSize
-import androidx.compose.ui.unit.dp
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.MediumTest
-import com.google.common.truth.Truth.assertThat
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.launch
-import kotlinx.coroutines.runBlocking
-import org.junit.Before
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
-import kotlin.math.roundToInt
-import org.junit.Ignore
-
-@Suppress("DEPRECATION")
-@MediumTest
-@RunWith(AndroidJUnit4::class)
-public class ScalingLazyListLayoutInfoTest {
- @get:Rule
- val rule = createComposeRule()
-
- private var itemSizePx: Int = 50
- private var itemSizeDp: Dp = Dp.Infinity
- private var defaultItemSpacingDp: Dp = 4.dp
- private var defaultItemSpacingPx = Int.MAX_VALUE
-
- @Before
- fun before() {
- with(rule.density) {
- itemSizeDp = itemSizePx.toDp()
- defaultItemSpacingPx = defaultItemSpacingDp.roundToPx()
- }
- }
-
- @Ignore("Awaiting fix for b/236217874")
- @Test
- fun visibleItemsAreCorrect() {
- lateinit var state: ScalingLazyListState
- rule.setContent {
- ScalingLazyColumn(
- state = rememberScalingLazyListState().also { state = it },
- modifier = Modifier.requiredSize(
- itemSizeDp * 3.5f + defaultItemSpacingDp * 2.5f
- ),
- autoCentering = AutoCenteringParams()
- ) {
- items(5) {
- Box(Modifier.requiredSize(itemSizeDp))
- }
- }
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- rule.runOnIdle {
- assertThat(state.centerItemIndex).isEqualTo(1)
- assertThat(state.centerItemScrollOffset).isEqualTo(0)
- state.layoutInfo.assertVisibleItems(count = 4)
- }
- }
-
- @Test
- fun centerItemIndexIsCorrectAfterScrolling() {
- lateinit var state: ScalingLazyListState
- var itemSpacingPx: Int = -1
- val itemSpacingDp = 20.dp
- var scope: CoroutineScope? = null
- rule.setContent {
- scope = rememberCoroutineScope()
- itemSpacingPx = with(LocalDensity.current) { itemSpacingDp.roundToPx() }
- ScalingLazyColumn(
- state = rememberScalingLazyListState().also { state = it },
- modifier = Modifier.requiredSize(
- itemSizeDp * 3.5f + itemSpacingDp * 2.5f
- ),
- verticalArrangement = Arrangement.spacedBy(itemSpacingDp),
- autoCentering = AutoCenteringParams()
- ) {
- items(5) {
- Box(Modifier.requiredSize(itemSizeDp))
- }
- }
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- rule.runOnIdle {
- assertThat(state.centerItemIndex).isEqualTo(1)
- assertThat(state.centerItemScrollOffset).isEqualTo(0)
- state.layoutInfo.assertVisibleItems(count = 3, spacing = itemSpacingPx)
- }
-
- // Scroll so that the center item is just above the center line and check that it is still
- // the correct center item
- val scrollDistance = (itemSizePx / 2) + 1
- scope!!.launch {
- state.animateScrollBy(scrollDistance.toFloat())
- }
- rule.runOnIdle {
- assertThat(state.centerItemIndex).isEqualTo(1)
- assertThat(state.centerItemScrollOffset).isEqualTo(scrollDistance)
- }
- }
-
- @Test
- fun orientationIsCorrect() {
- lateinit var state: ScalingLazyListState
- rule.setContent {
- ScalingLazyColumn(
- state = rememberScalingLazyListState().also { state = it },
- modifier = Modifier.requiredSize(
- itemSizeDp * 3.5f + defaultItemSpacingDp * 2.5f
- ),
- autoCentering = AutoCenteringParams(),
- contentPadding = PaddingValues(all = 0.dp)
- ) {
- items(5) {
- Box(Modifier.requiredSize(itemSizeDp))
- }
- }
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
-
- rule.runOnIdle {
- assertThat(state.layoutInfo.orientation).isEqualTo(Orientation.Vertical)
- }
- }
-
- @Test
- fun reverseLayoutIsCorrectWhenNotReversed() {
- lateinit var state: ScalingLazyListState
- rule.setContent {
- ScalingLazyColumn(
- state = rememberScalingLazyListState().also { state = it },
- modifier = Modifier.requiredSize(
- itemSizeDp * 3.5f + defaultItemSpacingDp * 2.5f
- ),
- autoCentering = AutoCenteringParams(),
- contentPadding = PaddingValues(all = 0.dp)
- ) {
- items(5) {
- Box(Modifier.requiredSize(itemSizeDp))
- }
- }
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
-
- rule.runOnIdle {
- assertThat(state.layoutInfo.reverseLayout).isEqualTo(false)
- }
- }
-
- @Test
- fun reverseLayoutIsCorrectWhenReversed() {
- lateinit var state: ScalingLazyListState
- rule.setContent {
- ScalingLazyColumn(
- state = rememberScalingLazyListState().also { state = it },
- modifier = Modifier.requiredSize(
- itemSizeDp * 3.5f + defaultItemSpacingDp * 2.5f
- ),
- autoCentering = AutoCenteringParams(),
- contentPadding = PaddingValues(all = 0.dp),
- reverseLayout = true
- ) {
- items(5) {
- Box(Modifier.requiredSize(itemSizeDp))
- }
- }
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
-
- rule.runOnIdle {
- assertThat(state.layoutInfo.reverseLayout).isEqualTo(true)
- }
- }
-
- @Test
- fun visibleItemsAreCorrectSetExplicitInitialItemIndex() {
- lateinit var state: ScalingLazyListState
- rule.setContent {
- ScalingLazyColumn(
- state = rememberScalingLazyListState(initialCenterItemIndex = 0)
- .also { state = it },
- modifier = Modifier.requiredSize(
- itemSizeDp * 3.5f + defaultItemSpacingDp * 2.5f
- ),
- autoCentering = AutoCenteringParams(itemIndex = 0)
- ) {
- items(5) {
- Box(Modifier.requiredSize(itemSizeDp))
- }
- }
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- rule.runOnIdle {
- assertThat(state.centerItemIndex).isEqualTo(0)
- assertThat(state.centerItemScrollOffset).isEqualTo(0)
- state.layoutInfo.assertVisibleItems(count = 3)
- }
- }
-
- @Test
- fun visibleItemsAreCorrectNoAutoCentering() {
- lateinit var state: ScalingLazyListState
- rule.setContent {
- ScalingLazyColumn(
- state = rememberScalingLazyListState().also { state = it },
- modifier = Modifier.requiredSize(
- itemSizeDp * 3.5f + defaultItemSpacingDp * 2.5f
- ),
- autoCentering = null
- ) {
- items(5) {
- Box(Modifier.requiredSize(itemSizeDp))
- }
- }
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- rule.runOnIdle {
- state.layoutInfo.assertVisibleItems(count = 4)
- }
- }
-
- @Test
- fun visibleItemsAreCorrectForReverseLayout() {
- lateinit var state: ScalingLazyListState
- rule.setContent {
- ScalingLazyColumn(
- state = rememberScalingLazyListState().also { state = it },
- modifier = Modifier.requiredSize(
- itemSizeDp * 3.5f + defaultItemSpacingDp * 2.5f
- ),
- reverseLayout = true,
- autoCentering = null
- ) {
- items(5) {
- Box(Modifier.requiredSize(itemSizeDp))
- }
- }
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- rule.runOnIdle {
- assertThat(state.centerItemIndex).isEqualTo(1)
- state.layoutInfo.assertVisibleItems(count = 4)
- }
- }
-
- @Test
- fun visibleItemsAreCorrectForReverseLayoutWithAutoCentering() {
- lateinit var state: ScalingLazyListState
- rule.setContent {
- ScalingLazyColumn(
- state = rememberScalingLazyListState(initialCenterItemIndex = 0)
- .also { state = it },
- modifier = Modifier.requiredSize(
- itemSizeDp * 3.5f + defaultItemSpacingDp * 2.5f
- ),
- reverseLayout = true,
- autoCentering = AutoCenteringParams(itemIndex = 0)
- ) {
- items(5) {
- Box(Modifier.requiredSize(itemSizeDp))
- }
- }
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- rule.runOnIdle {
- assertThat(state.centerItemIndex).isEqualTo(0)
- assertThat(state.centerItemScrollOffset).isEqualTo(0)
- state.layoutInfo.assertVisibleItems(count = 3)
- }
- }
-
- @Test
- fun visibleItemsAreCorrectAfterScrolling() {
- lateinit var state: ScalingLazyListState
- rule.setContent {
- ScalingLazyColumn(
- state = rememberScalingLazyListState().also { state = it },
- modifier = Modifier.requiredSize(
- itemSizeDp * 3.5f + defaultItemSpacingDp * 2.5f
- ),
- autoCentering = null
- ) {
- items(5) {
- Box(Modifier.requiredSize(itemSizeDp))
- }
- }
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- rule.runOnIdle {
- runBlocking {
- state.scrollBy(itemSizePx.toFloat() + defaultItemSpacingPx.toFloat())
- }
- state.layoutInfo.assertVisibleItems(count = 4, startIndex = 1)
- }
- }
-
- @Test
- fun itemsCorrectScrollPastStartEndAutoCenterItemZeroOddHeightViewportOddHeightItems() {
- visibleItemsAreCorrectAfterScrollingPastEndOfItems(0, 41, false)
- }
-
- @Test
- fun itemsCorrectScrollPastStartEndAutoCenterItemZeroOddHeightViewportEvenHeightItems() {
- visibleItemsAreCorrectAfterScrollingPastEndOfItems(0, 40, false)
- }
-
- @Test
- fun itemsCorrectScrollPastStartEndAutoCenterItemZeroEvenHeightViewportOddHeightItems() {
- visibleItemsAreCorrectAfterScrollingPastEndOfItems(0, 41, true)
- }
-
- @Test
- fun itemsCorrectScrollPastStartEndAutoCenterItemZeroEvenHeightViewportEvenHeightItems() {
- visibleItemsAreCorrectAfterScrollingPastEndOfItems(0, 40, true)
- }
-
- @Test
- fun itemsCorrectScrollPastStartEndAutoCenterItemOneOddHeightViewportOddHeightItems() {
- visibleItemsAreCorrectAfterScrollingPastEndOfItems(1, 41, false)
- }
-
- @Test
- fun itemsCorrectScrollPastStartEndAutoCenterItemOneOddHeightViewportEvenHeightItems() {
- visibleItemsAreCorrectAfterScrollingPastEndOfItems(1, 40, false)
- }
-
- @Test
- fun itemsCorrectScrollPastStartEndAutoCenterItemOneEvenHeightViewportOddHeightItems() {
- visibleItemsAreCorrectAfterScrollingPastEndOfItems(1, 41, true)
- }
-
- @Test
- fun itemsCorrectScrollPastStartEndAutoCenterItemOneEvenHeightViewportEvenHeightItems() {
- visibleItemsAreCorrectAfterScrollingPastEndOfItems(1, 40, true)
- }
-
- private fun visibleItemsAreCorrectAfterScrollingPastEndOfItems(
- autoCenterItem: Int,
- localItemSizePx: Int,
- viewPortSizeEven: Boolean
- ) {
- lateinit var state: ScalingLazyListState
- lateinit var scope: CoroutineScope
- rule.setContent {
- with(LocalDensity.current) {
- val viewportSizePx =
- (((localItemSizePx * 4 + defaultItemSpacingPx * 3) / 2) * 2) +
- if (viewPortSizeEven) 0 else 1
- scope = rememberCoroutineScope()
- ScalingLazyColumn(
- state = rememberScalingLazyListState(
- initialCenterItemIndex = autoCenterItem
- ).also { state = it },
- modifier = Modifier.requiredSize(
- viewportSizePx.toDp()
- ),
- autoCentering = AutoCenteringParams(itemIndex = autoCenterItem)
- ) {
- items(5) {
- Box(Modifier.requiredSize(localItemSizePx.toDp()))
- }
- }
- }
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- scope.launch {
- state.animateScrollBy(localItemSizePx.toFloat() * 10)
- }
-
- rule.waitUntil { !state.isScrollInProgress }
- assertThat(state.centerItemIndex).isEqualTo(4)
- assertThat(state.centerItemScrollOffset).isEqualTo(0)
-
- scope.launch {
- state.animateScrollBy(- localItemSizePx.toFloat() * 10)
- }
-
- rule.waitUntil { !state.isScrollInProgress }
- assertThat(state.centerItemIndex).isEqualTo(autoCenterItem)
- assertThat(state.centerItemScrollOffset).isEqualTo(0)
- }
-
- @Test
- fun largeItemLargerThanViewPortDoesNotGetScaled() {
- lateinit var state: ScalingLazyListState
- rule.setContent {
- ScalingLazyColumn(
- state = rememberScalingLazyListState().also { state = it },
- modifier = Modifier.requiredSize(
- itemSizeDp
- ),
- autoCentering = null
- ) {
- items(5) {
- Box(Modifier.requiredSize(itemSizeDp * 5))
- }
- }
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- rule.runOnIdle {
- runBlocking {
- state.scrollBy(itemSizePx.toFloat() + defaultItemSpacingPx.toFloat())
- }
- val firstItem = state.layoutInfo.visibleItemsInfo.first()
- assertThat(firstItem.offset).isLessThan(0)
- assertThat(firstItem.offset + firstItem.size).isGreaterThan(itemSizePx)
- assertThat(state.layoutInfo.visibleItemsInfo.first().scale).isEqualTo(1.0f)
- }
- }
-
- @Test
- fun itemInsideScalingLinesDoesNotGetScaled() {
- lateinit var state: ScalingLazyListState
- val centerItemIndex = 2
- rule.setContent {
- ScalingLazyColumn(
- state = rememberScalingLazyListState(centerItemIndex).also { state = it },
- modifier = Modifier.requiredSize(
- itemSizeDp * 3
- ),
- ) {
- items(5) {
- Box(Modifier.requiredSize(itemSizeDp))
- }
- }
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- rule.runOnIdle {
- // Get the middle item on the screen
- val centerScreenItem =
- state.layoutInfo.visibleItemsInfo.find { it.index == centerItemIndex }
- // and confirm its offset is 0
- assertThat(centerScreenItem!!.offset).isEqualTo(0)
- // And that it is not scaled
- assertThat(centerScreenItem.scale).isEqualTo(1.0f)
- }
- }
-
- @Test
- fun itemOutsideScalingLinesDoesGetScaled() {
- lateinit var state: ScalingLazyListState
- val centerItemIndex = 2
- rule.setContent {
- ScalingLazyColumn(
- state = rememberScalingLazyListState(centerItemIndex).also { state = it },
- modifier = Modifier.requiredSize(
- itemSizeDp * 4 + defaultItemSpacingDp * 3
- ),
- ) {
- items(6) {
- Box(Modifier.requiredSize(itemSizeDp))
- }
- }
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- rule.runOnIdle {
- // Get the middle item on the screen
- val edgeScreenItem =
- state.layoutInfo.visibleItemsInfo.find { it.index == 0 }
-
- // And that it is it scaled
- assertThat(edgeScreenItem!!.scale).isLessThan(1.0f)
- }
- }
-
- @Test
- fun visibleItemsAreCorrectAfterScrollingReverseLayout() {
- lateinit var state: ScalingLazyListState
- rule.setContent {
- ScalingLazyColumn(
- state = rememberScalingLazyListState().also { state = it },
- modifier = Modifier.requiredSize(
- itemSizeDp * 3.5f + defaultItemSpacingDp * 2.5f
- ),
- reverseLayout = true,
- autoCentering = null
- ) {
- items(5) {
- Box(Modifier.requiredSize(itemSizeDp))
- }
- }
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- rule.runOnIdle {
- runBlocking {
- state.scrollBy(itemSizePx.toFloat() + defaultItemSpacingPx.toFloat())
- }
- state.layoutInfo.assertVisibleItems(count = 4, startIndex = 1)
- }
- }
-
- @Test
- fun visibleItemsAreCorrectCenterPivotNoOffset() {
- lateinit var state: ScalingLazyListState
- rule.setContent {
- ScalingLazyColumn(
- state = rememberScalingLazyListState(2).also { state = it },
- modifier = Modifier.requiredSize(
- itemSizeDp * 2f + defaultItemSpacingDp * 1f
- ),
- scalingParams = ScalingLazyColumnDefaults.scalingParams(1.0f, 1.0f)
- ) {
- items(5) {
- Box(Modifier.requiredSize(itemSizeDp))
- }
- }
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- rule.runOnIdle {
- state.layoutInfo.assertVisibleItems(count = 3, startIndex = 1)
- assertThat(state.centerItemIndex).isEqualTo(2)
- assertThat(state.centerItemScrollOffset).isEqualTo(0)
- }
- }
-
- @Test
- fun visibleItemsAreCorrectCenterPivotWithOffset() {
- lateinit var state: ScalingLazyListState
- rule.setContent {
- ScalingLazyColumn(
- state = rememberScalingLazyListState(2, -5).also { state = it },
- modifier = Modifier.requiredSize(
- itemSizeDp * 2f + defaultItemSpacingDp * 1f
- ),
- scalingParams = ScalingLazyColumnDefaults.scalingParams(1.0f, 1.0f)
- ) {
- items(5) {
- Box(Modifier.requiredSize(itemSizeDp))
- }
- }
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- rule.runOnIdle {
- state.layoutInfo.assertVisibleItems(count = 3, startIndex = 1)
- assertThat(state.centerItemIndex).isEqualTo(2)
- assertThat(state.centerItemScrollOffset).isEqualTo(-5)
- }
- }
-
- @Test
- fun visibleItemsAreCorrectCenterPivotNoOffsetReverseLayout() {
- lateinit var state: ScalingLazyListState
- rule.setContent {
- ScalingLazyColumn(
- state = rememberScalingLazyListState(2).also { state = it },
- modifier = Modifier.requiredSize(
- itemSizeDp * 2f + defaultItemSpacingDp * 1f
- ),
- scalingParams = ScalingLazyColumnDefaults.scalingParams(1.0f, 1.0f),
- reverseLayout = true
- ) {
- items(5) {
- Box(Modifier.requiredSize(itemSizeDp))
- }
- }
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- rule.runOnIdle {
- state.layoutInfo.assertVisibleItems(count = 3, startIndex = 1)
- assertThat(state.centerItemIndex).isEqualTo(2)
- assertThat(state.centerItemScrollOffset).isEqualTo(0)
- }
- }
-
- @Test
- fun visibleItemsAreCorrectCenterPivotWithOffsetReverseLayout() {
- lateinit var state: ScalingLazyListState
- rule.setContent {
- ScalingLazyColumn(
- state = rememberScalingLazyListState(2, -5).also { state = it },
- modifier = Modifier.requiredSize(
- itemSizeDp * 2f + defaultItemSpacingDp * 1f
- ),
- scalingParams = ScalingLazyColumnDefaults.scalingParams(1.0f, 1.0f),
- reverseLayout = true
- ) {
- items(5) {
- Box(Modifier.requiredSize(itemSizeDp))
- }
- }
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- rule.runOnIdle {
- state.layoutInfo.assertVisibleItems(count = 3, startIndex = 1)
- assertThat(state.centerItemIndex).isEqualTo(2)
- assertThat(state.centerItemScrollOffset).isEqualTo(-5)
- }
- }
-
- @Test
- fun visibleItemsAreCorrectNoScalingForReverseLayout() {
- lateinit var state: ScalingLazyListState
- rule.setContent {
- ScalingLazyColumn(
- state = rememberScalingLazyListState(8).also { state = it },
- modifier = Modifier.requiredSize(
- itemSizeDp * 4f + defaultItemSpacingDp * 3f
- ),
- scalingParams = ScalingLazyColumnDefaults.scalingParams(1.0f, 1.0f),
- reverseLayout = true
- ) {
- items(15) {
- Box(Modifier.requiredSize(itemSizeDp).testTag("Item:$it"))
- }
- }
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- rule.waitForIdle()
-
- // Assert that items are being shown at the end of the parent as this is reverseLayout
- rule.onNodeWithTag(testTag = "Item:8").assertIsDisplayed()
-
- rule.runOnIdle {
- state.layoutInfo.assertVisibleItems(count = 5, startIndex = 6)
- }
- }
-
- @Test
- fun visibleItemsAreCorrectAfterScrollNoScaling() {
- lateinit var state: ScalingLazyListState
- rule.setContent {
- ScalingLazyColumn(
- state = rememberScalingLazyListState(initialCenterItemIndex = 0)
- .also { state = it },
- modifier = Modifier.requiredSize(
- itemSizeDp * 3.5f + defaultItemSpacingDp * 2.5f
- ),
- scalingParams = ScalingLazyColumnDefaults.scalingParams(1.0f, 1.0f),
- autoCentering = AutoCenteringParams(itemIndex = 0)
- ) {
- items(5) {
- Box(
- Modifier
- .requiredSize(itemSizeDp)
- .testTag("Item:$it"))
- }
- }
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- rule.waitForIdle()
-
- rule.onNodeWithTag(testTag = "Item:0").assertIsDisplayed()
-
- val scrollAmount = (itemSizePx.toFloat() + defaultItemSpacingPx.toFloat()).roundToInt()
- rule.runOnIdle {
- assertThat(state.centerItemIndex).isEqualTo(0)
- assertThat(state.centerItemScrollOffset).isEqualTo(0)
-
- runBlocking {
- state.scrollBy(scrollAmount.toFloat())
- }
- state.layoutInfo.assertVisibleItems(count = 4)
- assertThat(state.layoutInfo.visibleItemsInfo.first().offset).isEqualTo(-scrollAmount)
- }
-
- rule.runOnIdle {
- runBlocking {
- state.scrollBy(-scrollAmount.toFloat())
- }
- state.layoutInfo.assertVisibleItems(count = 3)
- assertThat(state.layoutInfo.visibleItemsInfo.first().offset).isEqualTo(0)
- }
- }
-
- @Test
- fun visibleItemsAreCorrectAfterScrollNoScalingForReverseLayout() {
- lateinit var state: ScalingLazyListState
- rule.setContent {
- ScalingLazyColumn(
- state = rememberScalingLazyListState(8).also { state = it },
- modifier = Modifier.requiredSize(
- itemSizeDp * 4f + defaultItemSpacingDp * 3f
- ),
- scalingParams = ScalingLazyColumnDefaults.scalingParams(1.0f, 1.0f),
- reverseLayout = true
- ) {
- items(15) {
- Box(Modifier.requiredSize(itemSizeDp).testTag("Item:$it"))
- }
- }
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- rule.waitForIdle()
-
- rule.onNodeWithTag(testTag = "Item:8").assertIsDisplayed()
-
- val scrollAmount = (itemSizePx.toFloat() + defaultItemSpacingPx.toFloat()).roundToInt()
- rule.runOnIdle {
- state.layoutInfo.assertVisibleItems(count = 5, startIndex = 6)
- assertThat(state.centerItemIndex).isEqualTo(8)
- assertThat(state.centerItemScrollOffset).isEqualTo(0)
-
- runBlocking {
- state.scrollBy(scrollAmount.toFloat())
- }
- state.layoutInfo.assertVisibleItems(count = 5, startIndex = 7)
- }
-
- rule.runOnIdle {
- runBlocking {
- state.scrollBy(-scrollAmount.toFloat())
- }
- state.layoutInfo.assertVisibleItems(count = 5, startIndex = 6)
- }
- }
-
- @Test
- fun visibleItemsAreCorrectAfterDispatchRawDeltaScrollNoScaling() {
- lateinit var state: ScalingLazyListState
- rule.setContent {
- ScalingLazyColumn(
- state = rememberScalingLazyListState(initialCenterItemIndex = 0)
- .also { state = it },
- modifier = Modifier.requiredSize(
- itemSizeDp * 3.5f + defaultItemSpacingDp * 2.5f
- ),
- scalingParams = ScalingLazyColumnDefaults.scalingParams(1.0f, 1.0f),
- autoCentering = AutoCenteringParams(itemIndex = 0)
- ) {
- items(5) {
- Box(Modifier.requiredSize(itemSizeDp))
- }
- }
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- val scrollAmount = itemSizePx.toFloat() + defaultItemSpacingPx.toFloat()
- rule.runOnIdle {
- runBlocking {
- state.dispatchRawDelta(scrollAmount)
- }
- state.layoutInfo.assertVisibleItems(count = 4, startIndex = 0)
- assertThat(state.layoutInfo.visibleItemsInfo.first().offset)
- .isEqualTo(-scrollAmount.roundToInt())
- }
-
- rule.runOnIdle {
- runBlocking {
- state.dispatchRawDelta(-scrollAmount)
- }
- state.layoutInfo.assertVisibleItems(count = 3, startIndex = 0)
- assertThat(state.layoutInfo.visibleItemsInfo.first().offset).isEqualTo(0)
- }
- }
-
- @Test
- fun visibleItemsAreCorrectAfterDispatchRawDeltaScrollNoScalingForReverseLayout() {
- lateinit var state: ScalingLazyListState
- rule.setContent {
- ScalingLazyColumn(
- state = rememberScalingLazyListState().also { state = it },
- modifier = Modifier.requiredSize(
- itemSizeDp * 3.5f + defaultItemSpacingDp * 2.5f
- ),
- scalingParams = ScalingLazyColumnDefaults.scalingParams(1.0f, 1.0f),
- reverseLayout = true,
- autoCentering = null
- ) {
- items(5) {
- Box(Modifier.requiredSize(itemSizeDp))
- }
- }
- }
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- val firstItemOffset = state.layoutInfo.visibleItemsInfo.first().offset
- rule.runOnIdle {
- runBlocking {
- state.dispatchRawDelta(itemSizePx.toFloat() + defaultItemSpacingPx.toFloat())
- }
- state.layoutInfo.assertVisibleItems(count = 4, startIndex = 1)
- assertThat(state.layoutInfo.visibleItemsInfo.first().offset).isEqualTo(firstItemOffset)
- }
-
- rule.runOnIdle {
- runBlocking {
- state.dispatchRawDelta(-(itemSizePx.toFloat() + defaultItemSpacingPx.toFloat()))
- }
- state.layoutInfo.assertVisibleItems(count = 4, startIndex = 0)
- assertThat(state.layoutInfo.visibleItemsInfo.first().offset).isEqualTo(firstItemOffset)
- }
- }
-
- @Test
- fun visibleItemsAreCorrectWithCustomSpacing() {
- lateinit var state: ScalingLazyListState
- val spacing: Dp = 10.dp
- rule.setContent {
- ScalingLazyColumn(
- state = rememberScalingLazyListState().also { state = it },
- modifier = Modifier.requiredSize(itemSizeDp * 3.5f + spacing * 2.5f),
- verticalArrangement = Arrangement.spacedBy(spacing),
- autoCentering = null
- ) {
- items(5) {
- Box(Modifier.requiredSize(itemSizeDp))
- }
- }
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- rule.runOnIdle {
- val spacingPx = with(rule.density) {
- spacing.roundToPx()
- }
- state.layoutInfo.assertVisibleItems(
- count = 4,
- spacing = spacingPx
- )
- }
- }
-
- @Composable
- fun ObservingFun(
- state: ScalingLazyListState,
- currentInfo: StableRef<ScalingLazyListLayoutInfo?>
- ) {
- currentInfo.value = state.layoutInfo
- }
-
- @Test
- fun visibleItemsAreObservableWhenWeScroll() {
- lateinit var state: ScalingLazyListState
- val currentInfo = StableRef<ScalingLazyListLayoutInfo?>(null)
- rule.setContent {
- ScalingLazyColumn(
- state = rememberScalingLazyListState().also { state = it },
- modifier = Modifier.requiredSize(itemSizeDp * 3.5f + defaultItemSpacingDp * 2.5f),
- autoCentering = null
- ) {
- items(6) {
- Box(Modifier.requiredSize(itemSizeDp))
- }
- }
- ObservingFun(state, currentInfo)
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- rule.runOnIdle {
- // empty it here and scrolling should invoke observingFun again
- currentInfo.value = null
- runBlocking {
- state.scrollBy(itemSizePx.toFloat() + defaultItemSpacingPx.toFloat())
- }
- }
-
- rule.runOnIdle {
- assertThat(currentInfo.value).isNotNull()
- currentInfo.value!!.assertVisibleItems(count = 4, startIndex = 1)
- }
- }
-
- @Test
- fun visibleItemsAreObservableWhenWeDispatchRawDeltaScroll() {
- lateinit var state: ScalingLazyListState
- val currentInfo = StableRef<ScalingLazyListLayoutInfo?>(null)
- rule.setContent {
- ScalingLazyColumn(
- state = rememberScalingLazyListState().also { state = it },
- modifier = Modifier.requiredSize(itemSizeDp * 3.5f + defaultItemSpacingDp * 2.5f),
- autoCentering = null
- ) {
- items(6) {
- Box(Modifier.requiredSize(itemSizeDp))
- }
- }
- ObservingFun(state, currentInfo)
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- rule.runOnIdle {
- // empty it here and scrolling should invoke observingFun again
- currentInfo.value = null
- runBlocking {
- state.dispatchRawDelta(itemSizePx.toFloat() + defaultItemSpacingPx.toFloat())
- }
- }
-
- rule.runOnIdle {
- assertThat(currentInfo.value).isNotNull()
- currentInfo.value!!.assertVisibleItems(count = 4, startIndex = 1)
- }
- }
-
- @Composable
- fun ObservingIsScrollInProgressTrueFun(
- state: ScalingLazyListState,
- currentInfo: StableRef<Boolean?>
- ) {
- // If isScrollInProgress is ever true record it - otherwise leave the value as null
- if (state.isScrollInProgress) {
- currentInfo.value = true
- }
- }
-
- @Test
- fun isScrollInProgressIsObservableWhenWeScroll() {
- lateinit var state: ScalingLazyListState
- lateinit var scope: CoroutineScope
- val currentInfo = StableRef<Boolean?>(null)
- rule.setContent {
- scope = rememberCoroutineScope()
- ScalingLazyColumn(
- state = rememberScalingLazyListState().also { state = it },
- modifier = Modifier.requiredSize(itemSizeDp * 3.5f + defaultItemSpacingDp * 2.5f)
- ) {
- items(6) {
- Box(Modifier.requiredSize(itemSizeDp))
- }
- }
- ObservingIsScrollInProgressTrueFun(state, currentInfo)
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- scope.launch {
- // empty it here and scrolling should invoke observingFun again
- currentInfo.value = null
- state.animateScrollBy(itemSizePx.toFloat() + defaultItemSpacingPx.toFloat())
- }
-
- rule.runOnIdle {
- assertThat(currentInfo.value).isNotNull()
- assertThat(currentInfo.value).isTrue()
- }
- }
-
- @Composable
- fun ObservingCentralItemIndexFun(
- state: ScalingLazyListState,
- currentInfo: StableRef<Int?>
- ) {
- currentInfo.value = state.centerItemIndex
- }
-
- @Test
- fun isCentralListItemIndexObservableWhenWeScroll() {
- lateinit var state: ScalingLazyListState
- lateinit var scope: CoroutineScope
- val currentInfo = StableRef<Int?>(null)
- rule.setContent {
- scope = rememberCoroutineScope()
- ScalingLazyColumn(
- state = rememberScalingLazyListState().also { state = it },
- modifier = Modifier.requiredSize(itemSizeDp * 3.5f + defaultItemSpacingDp * 2.5f),
- autoCentering = null
- ) {
- items(6) {
- Box(Modifier.requiredSize(itemSizeDp))
- }
- }
- ObservingCentralItemIndexFun(state, currentInfo)
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- scope.launch {
- // empty it here and scrolling should invoke observingFun again
- currentInfo.value = null
- state.animateScrollBy(itemSizePx.toFloat() + defaultItemSpacingPx.toFloat())
- }
-
- rule.runOnIdle {
- assertThat(currentInfo.value).isNotNull()
- assertThat(currentInfo.value).isEqualTo(2)
- }
- }
-
- @Test
- fun visibleItemsAreObservableWhenResize() {
- lateinit var state: ScalingLazyListState
- var size by mutableStateOf(itemSizeDp * 2)
- var currentInfo: ScalingLazyListLayoutInfo? = null
- @Composable
- fun observingFun() {
- currentInfo = state.layoutInfo
- }
- rule.setContent {
- ScalingLazyColumn(
- state = rememberScalingLazyListState().also { state = it }
- ) {
- item {
- Box(Modifier.requiredSize(size))
- }
- }
- observingFun()
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- rule.runOnIdle {
- assertThat(currentInfo).isNotNull()
- currentInfo!!.assertVisibleItems(count = 1, unscaledSize = itemSizePx * 2)
- currentInfo = null
- size = itemSizeDp
- }
-
- rule.runOnIdle {
- assertThat(currentInfo).isNotNull()
- currentInfo!!.assertVisibleItems(count = 1, unscaledSize = itemSizePx)
- }
- }
-
- @Test
- fun viewportOffsetsAndSizeAreCorrect() {
- val sizePx = 45
- val sizeDp = with(rule.density) { sizePx.toDp() }
- lateinit var state: ScalingLazyListState
- rule.setContent {
- ScalingLazyColumn(
- Modifier.requiredSize(sizeDp),
- state = rememberScalingLazyListState().also { state = it }
- ) {
- items(4) {
- Box(Modifier.requiredSize(sizeDp))
- }
- }
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- rule.runOnIdle {
- assertThat(state.layoutInfo.viewportStartOffset).isEqualTo(0)
- assertThat(state.layoutInfo.viewportEndOffset).isEqualTo(sizePx)
- assertThat(state.layoutInfo.viewportSize).isEqualTo(IntSize(sizePx, sizePx))
- assertThat(state.layoutInfo.beforeContentPadding).isEqualTo(0)
- assertThat(state.layoutInfo.afterContentPadding).isEqualTo(0)
- assertThat(state.layoutInfo.beforeAutoCenteringPadding).isEqualTo(0)
- assertThat(state.layoutInfo.afterAutoCenteringPadding).isEqualTo(0)
- }
- }
-
- @Test
- fun viewportOffsetsAndSizeAreCorrectWithContentPadding() {
- val sizePx = 45
- val startPaddingPx = 10
- val endPaddingPx = 15
- val sizeDp = with(rule.density) { sizePx.toDp() }
- val topPaddingDp = with(rule.density) { startPaddingPx.toDp() }
- val bottomPaddingDp = with(rule.density) { endPaddingPx.toDp() }
- lateinit var state: ScalingLazyListState
- rule.setContent {
- ScalingLazyColumn(
- Modifier.requiredSize(sizeDp),
- contentPadding = PaddingValues(top = topPaddingDp, bottom = bottomPaddingDp),
- state = rememberScalingLazyListState().also { state = it }
- ) {
- items(4) {
- Box(Modifier.requiredSize(sizeDp))
- }
- }
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- rule.runOnIdle {
- assertThat(state.layoutInfo.viewportStartOffset).isEqualTo(-startPaddingPx)
- assertThat(state.layoutInfo.viewportEndOffset).isEqualTo(sizePx - startPaddingPx)
- assertThat(state.layoutInfo.viewportSize).isEqualTo(IntSize(sizePx, sizePx))
- assertThat(state.layoutInfo.beforeContentPadding).isEqualTo(10)
- assertThat(state.layoutInfo.afterContentPadding).isEqualTo(15)
- assertThat(state.layoutInfo.beforeAutoCenteringPadding).isEqualTo(0)
- assertThat(state.layoutInfo.afterAutoCenteringPadding).isEqualTo(0)
- }
- }
-
- @Test
- fun viewportOffsetsAreCorrectWithAutoCentering() {
- val itemSizePx = 45
- val itemSizeDp = with(rule.density) { itemSizePx.toDp() }
- val viewPortSizePx = itemSizePx * 4
- val viewPortSizeDp = with(rule.density) { viewPortSizePx.toDp() }
- lateinit var state: ScalingLazyListState
- rule.setContent {
- ScalingLazyColumn(
- Modifier.requiredSize(viewPortSizeDp),
- state = rememberScalingLazyListState(
- initialCenterItemIndex = 0
- ).also { state = it },
- autoCentering = AutoCenteringParams()
- ) {
- items(7) {
- Box(Modifier.requiredSize(itemSizeDp))
- }
- }
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- rule.runOnIdle {
- assertThat(state.layoutInfo.viewportStartOffset).isEqualTo(0)
- assertThat(state.layoutInfo.viewportEndOffset).isEqualTo(viewPortSizePx)
- assertThat(state.layoutInfo.beforeContentPadding).isEqualTo(0)
- assertThat(state.layoutInfo.afterContentPadding).isEqualTo(0)
- assertThat(state.layoutInfo.beforeAutoCenteringPadding).isGreaterThan(0)
- assertThat(state.layoutInfo.afterAutoCenteringPadding).isEqualTo(0)
-
- runBlocking {
- state.scrollToItem(3)
- }
- assertThat(state.layoutInfo.beforeAutoCenteringPadding).isEqualTo(0)
- assertThat(state.layoutInfo.afterAutoCenteringPadding).isEqualTo(0)
-
- runBlocking {
- state.scrollToItem(5)
- }
- assertThat(state.layoutInfo.beforeAutoCenteringPadding).isEqualTo(0)
- assertThat(state.layoutInfo.afterAutoCenteringPadding).isGreaterThan(0)
- }
- }
-
- @Test
- fun totalCountIsCorrect() {
- var count by mutableStateOf(10)
- lateinit var state: ScalingLazyListState
- rule.setContent {
- ScalingLazyColumn(
- state = rememberScalingLazyListState().also { state = it }
- ) {
- items(count) {
- Box(Modifier.requiredSize(10.dp))
- }
- }
- }
-
- // TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
- rule.waitUntil { state.initialized.value }
- rule.runOnIdle {
- assertThat(state.layoutInfo.totalItemsCount).isEqualTo(10)
- count = 20
- }
-
- rule.runOnIdle {
- assertThat(state.layoutInfo.totalItemsCount).isEqualTo(20)
- }
- }
-
- private fun ScalingLazyListLayoutInfo.assertVisibleItems(
- count: Int,
- startIndex: Int = 0,
- unscaledSize: Int = itemSizePx,
- spacing: Int = defaultItemSpacingPx,
- anchorType: ScalingLazyListAnchorType = ScalingLazyListAnchorType.ItemCenter
- ) {
- assertThat(visibleItemsInfo.size).isEqualTo(count)
- var currentIndex = startIndex
- var previousEndOffset = -1
- visibleItemsInfo.forEach {
- assertThat(it.index).isEqualTo(currentIndex)
- assertThat(it.size).isEqualTo((unscaledSize * it.scale).roundToInt())
- currentIndex++
- val startOffset = it.startOffset(anchorType).roundToInt()
- if (previousEndOffset != -1) {
- assertThat(spacing).isEqualTo(startOffset - previousEndOffset)
- }
- previousEndOffset = startOffset + it.size
- }
- }
-}
\ No newline at end of file
diff --git a/wear/compose/compose-material/src/androidMain/kotlin/androidx/wear/compose/material/DefaultTimeSource.kt b/wear/compose/compose-material/src/androidMain/kotlin/androidx/wear/compose/material/DefaultTimeSource.kt
deleted file mode 100644
index 9ee204f..0000000
--- a/wear/compose/compose-material/src/androidMain/kotlin/androidx/wear/compose/material/DefaultTimeSource.kt
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright 2021 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
- *
- * http://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.
- */
-
-package androidx.wear.compose.material
-
-import android.content.BroadcastReceiver
-import android.content.Context
-import android.content.Intent
-import android.content.IntentFilter
-import android.text.format.DateFormat
-import androidx.annotation.VisibleForTesting
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.DisposableEffect
-import androidx.compose.runtime.State
-import androidx.compose.runtime.derivedStateOf
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableLongStateOf
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
-import androidx.compose.runtime.rememberUpdatedState
-import androidx.compose.runtime.setValue
-import androidx.compose.ui.platform.LocalContext
-import java.util.Calendar
-
-internal actual class DefaultTimeSource actual constructor(timeFormat: String) : TimeSource {
- private val _timeFormat = timeFormat
-
- override val currentTime: String
- @Composable
- get() = currentTime({ currentTimeMillis() }, _timeFormat).value
-}
-
-@Composable
-@VisibleForTesting
-internal fun currentTime(
- time: () -> Long,
- timeFormat: String
-): State<String> {
-
- var calendar by remember { mutableStateOf(Calendar.getInstance()) }
- var currentTime by remember { mutableLongStateOf(time()) }
-
- val timeText = remember {
- derivedStateOf { formatTime(calendar, currentTime, timeFormat) }
- }
-
- val context = LocalContext.current
- val updatedTimeLambda by rememberUpdatedState(time)
-
- DisposableEffect(context, updatedTimeLambda) {
- val receiver = TimeBroadcastReceiver(
- onTimeChanged = { currentTime = updatedTimeLambda() },
- onTimeZoneChanged = { calendar = Calendar.getInstance() }
- )
- receiver.register(context)
- onDispose {
- receiver.unregister(context)
- }
- }
- return timeText
-}
-
-/**
- * A [BroadcastReceiver] to receive time tick, time change, and time zone change events.
- */
-private class TimeBroadcastReceiver(
- val onTimeChanged: () -> Unit,
- val onTimeZoneChanged: () -> Unit
-) : BroadcastReceiver() {
- private var registered = false
-
- override fun onReceive(context: Context, intent: Intent) {
- if (intent.action == Intent.ACTION_TIMEZONE_CHANGED) {
- onTimeZoneChanged()
- } else {
- onTimeChanged()
- }
- }
-
- fun register(context: Context) {
- if (!registered) {
- val filter = IntentFilter()
- filter.addAction(Intent.ACTION_TIME_TICK)
- filter.addAction(Intent.ACTION_TIME_CHANGED)
- filter.addAction(Intent.ACTION_TIMEZONE_CHANGED)
- context.registerReceiver(this, filter)
- registered = true
- }
- }
-
- fun unregister(context: Context) {
- if (registered) {
- context.unregisterReceiver(this)
- registered = false
- }
- }
-}
-
-private fun formatTime(
- calendar: Calendar,
- currentTime: Long,
- timeFormat: String
-): String {
- calendar.timeInMillis = currentTime
- return DateFormat.format(timeFormat, calendar).toString()
-}
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ButtonScreenshotTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ButtonScreenshotTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ButtonScreenshotTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ButtonScreenshotTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ButtonTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ButtonTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ButtonTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ButtonTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/CardScreenshotTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/CardScreenshotTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/CardScreenshotTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/CardScreenshotTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/CardTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/CardTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/CardTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/CardTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ChipScreenshotTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ChipScreenshotTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ChipScreenshotTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ChipScreenshotTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ChipTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ChipTest.kt
similarity index 99%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ChipTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ChipTest.kt
index c0dfbe8..d2b7da4 100644
--- a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ChipTest.kt
+++ b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ChipTest.kt
@@ -31,8 +31,8 @@
import androidx.compose.testutils.assertShape
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.compositeOver
import androidx.compose.ui.graphics.Shape
+import androidx.compose.ui.graphics.compositeOver
import androidx.compose.ui.graphics.vector.rememberVectorPainter
import androidx.compose.ui.platform.LocalLayoutDirection
import androidx.compose.ui.platform.testTag
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ConfigurableShapeScreen.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ConfigurableShapeScreen.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ConfigurableShapeScreen.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ConfigurableShapeScreen.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/HorizontalPageIndicatorScreenshotTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/HorizontalPageIndicatorScreenshotTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/HorizontalPageIndicatorScreenshotTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/HorizontalPageIndicatorScreenshotTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/HorizontalPageIndicatorTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/HorizontalPageIndicatorTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/HorizontalPageIndicatorTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/HorizontalPageIndicatorTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/IconTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/IconTest.kt
similarity index 99%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/IconTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/IconTest.kt
index 0f1d9c4..50d241b 100644
--- a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/IconTest.kt
+++ b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/IconTest.kt
@@ -26,8 +26,8 @@
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.graphics.drawscope.CanvasDrawScope
-import androidx.compose.ui.graphics.painter.ColorPainter
import androidx.compose.ui.graphics.painter.BitmapPainter
+import androidx.compose.ui.graphics.painter.ColorPainter
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.testTag
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/InlineSliderTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/InlineSliderTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/InlineSliderTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/InlineSliderTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/MaterialTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/MaterialTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/MaterialTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/MaterialTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/MaterialThemeTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/MaterialThemeTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/MaterialThemeTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/MaterialThemeTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/PickerGroupScreenshotTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/PickerGroupScreenshotTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/PickerGroupScreenshotTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/PickerGroupScreenshotTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/PickerGroupTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/PickerGroupTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/PickerGroupTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/PickerGroupTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/PickerScreenshotTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/PickerScreenshotTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/PickerScreenshotTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/PickerScreenshotTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/PickerTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/PickerTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/PickerTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/PickerTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/PlaceholderTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/PlaceholderTest.kt
similarity index 99%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/PlaceholderTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/PlaceholderTest.kt
index 37e074b..913b5b1 100644
--- a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/PlaceholderTest.kt
+++ b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/PlaceholderTest.kt
@@ -34,10 +34,10 @@
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.unit.Dp
-import org.junit.Rule
-import org.junit.Test
import com.google.common.truth.Truth.assertThat
import kotlin.math.max
+import org.junit.Rule
+import org.junit.Test
class PlaceholderTest {
@get:Rule
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/PositionIndicatorScreenshotTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/PositionIndicatorScreenshotTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/PositionIndicatorScreenshotTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/PositionIndicatorScreenshotTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/PositionIndicatorTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/PositionIndicatorTest.kt
similarity index 99%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/PositionIndicatorTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/PositionIndicatorTest.kt
index 246fd6a..586cb58 100644
--- a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/PositionIndicatorTest.kt
+++ b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/PositionIndicatorTest.kt
@@ -16,13 +16,6 @@
package androidx.wear.compose.material
-import androidx.wear.compose.foundation.lazy.ScalingLazyListLayoutInfo as ScalingLazyListLayoutInfo
-import androidx.wear.compose.foundation.lazy.ScalingLazyListState as ScalingLazyListState
-import androidx.wear.compose.foundation.lazy.rememberScalingLazyListState as rememberScalingLazyListState
-import androidx.wear.compose.foundation.lazy.ScalingLazyColumn as ScalingLazyColumn
-import androidx.wear.compose.foundation.lazy.ScalingLazyColumnDefaults as ScalingLazyColumnDefaults
-import androidx.wear.compose.foundation.lazy.AutoCenteringParams as AutoCenteringParams
-import androidx.wear.compose.foundation.lazy.ScalingLazyListScope as ScalingLazyListScope
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.ScrollState
import androidx.compose.foundation.background
@@ -55,6 +48,13 @@
import androidx.compose.ui.unit.dp
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
+import androidx.wear.compose.foundation.lazy.AutoCenteringParams as AutoCenteringParams
+import androidx.wear.compose.foundation.lazy.ScalingLazyColumn as ScalingLazyColumn
+import androidx.wear.compose.foundation.lazy.ScalingLazyColumnDefaults as ScalingLazyColumnDefaults
+import androidx.wear.compose.foundation.lazy.ScalingLazyListLayoutInfo as ScalingLazyListLayoutInfo
+import androidx.wear.compose.foundation.lazy.ScalingLazyListScope as ScalingLazyListScope
+import androidx.wear.compose.foundation.lazy.ScalingLazyListState as ScalingLazyListState
+import androidx.wear.compose.foundation.lazy.rememberScalingLazyListState as rememberScalingLazyListState
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.runBlocking
import org.junit.Before
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ProgressIndicatorScreenshotTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ProgressIndicatorScreenshotTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ProgressIndicatorScreenshotTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ProgressIndicatorScreenshotTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ProgressIndicatorTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ProgressIndicatorTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ProgressIndicatorTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ProgressIndicatorTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ScaffoldTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ScaffoldTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ScaffoldTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ScaffoldTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ScalingLazyColumnIndexedTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ScalingLazyColumnIndexedTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ScalingLazyColumnIndexedTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ScalingLazyColumnIndexedTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ScalingLazyColumnTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ScalingLazyColumnTest.kt
similarity index 99%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ScalingLazyColumnTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ScalingLazyColumnTest.kt
index a0ef0e1..d5dfb4c 100644
--- a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ScalingLazyColumnTest.kt
+++ b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ScalingLazyColumnTest.kt
@@ -49,13 +49,13 @@
import androidx.compose.ui.unit.dp
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
+import com.google.common.truth.Truth.assertThat
+import kotlin.math.roundToInt
+import kotlinx.coroutines.runBlocking
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import com.google.common.truth.Truth.assertThat
-import kotlin.math.roundToInt
-import kotlinx.coroutines.runBlocking
@Suppress("DEPRECATION")
@MediumTest
diff --git a/wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyListLayoutInfoTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ScalingLazyListLayoutInfoTest.kt
similarity index 99%
copy from wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyListLayoutInfoTest.kt
copy to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ScalingLazyListLayoutInfoTest.kt
index 9f42158..7a88093 100644
--- a/wear/compose/compose-foundation/src/androidAndroidTest/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyListLayoutInfoTest.kt
+++ b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ScalingLazyListLayoutInfoTest.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2022 The Android Open Source Project
+ * Copyright 2021 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.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package androidx.wear.compose.foundation.lazy
+package androidx.wear.compose.material
import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.gestures.animateScrollBy
@@ -24,7 +24,6 @@
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.requiredSize
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.Stable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.rememberCoroutineScope
@@ -41,15 +40,17 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import com.google.common.truth.Truth.assertThat
+import kotlin.math.roundToInt
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import org.junit.Before
+import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import kotlin.math.roundToInt
+@Suppress("DEPRECATION")
@MediumTest
@RunWith(AndroidJUnit4::class)
public class ScalingLazyListLayoutInfoTest {
@@ -69,6 +70,7 @@
}
}
+ @Ignore("Awaiting fix for b/236217874")
@Test
fun visibleItemsAreCorrect() {
lateinit var state: ScalingLazyListState
@@ -1239,7 +1241,4 @@
previousEndOffset = startOffset + it.size
}
}
-}
-
-@Stable
-public class StableRef<T>(var value: T)
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/Screenshot.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/Screenshot.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/Screenshot.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/Screenshot.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ScrollAwayTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ScrollAwayTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ScrollAwayTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ScrollAwayTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/SliderScreenshotTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SliderScreenshotTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/SliderScreenshotTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SliderScreenshotTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/StepperScreenshotTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/StepperScreenshotTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/StepperScreenshotTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/StepperScreenshotTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/StepperTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/StepperTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/StepperTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/StepperTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxScreenshotTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxScreenshotTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxScreenshotTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxScreenshotTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxTest.kt
similarity index 99%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxTest.kt
index d5bd277..da64262 100644
--- a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxTest.kt
+++ b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeToDismissBoxTest.kt
@@ -47,9 +47,9 @@
import androidx.compose.ui.test.swipe
import androidx.compose.ui.test.swipeLeft
import androidx.compose.ui.test.swipeRight
+import com.google.common.truth.Truth.assertThat
import java.lang.Math.sin
import org.junit.Assert.assertEquals
-import com.google.common.truth.Truth.assertThat
import org.junit.Rule
import org.junit.Test
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/SwipeableTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeableTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/SwipeableTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/SwipeableTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/TextTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/TextTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/TextTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/TextTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/TimeTextTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/TimeTextTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/TimeTextTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/TimeTextTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ToggleButtonScreenshotTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ToggleButtonScreenshotTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ToggleButtonScreenshotTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ToggleButtonScreenshotTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ToggleButtonTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ToggleButtonTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ToggleButtonTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ToggleButtonTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ToggleChipScreenshotTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ToggleChipScreenshotTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ToggleChipScreenshotTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ToggleChipScreenshotTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ToggleChipTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ToggleChipTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ToggleChipTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ToggleChipTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ToggleControlScreenshotTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ToggleControlScreenshotTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ToggleControlScreenshotTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ToggleControlScreenshotTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ToggleControlTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ToggleControlTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/ToggleControlTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ToggleControlTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/VignetteScreenshotTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/VignetteScreenshotTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/VignetteScreenshotTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/VignetteScreenshotTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/dialog/DialogScreenshotTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/dialog/DialogScreenshotTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/dialog/DialogScreenshotTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/dialog/DialogScreenshotTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/dialog/DialogTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/dialog/DialogTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/dialog/DialogTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/dialog/DialogTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/dialog/DialogWithMaterialSlcTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/dialog/DialogWithMaterialSlcTest.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/kotlin/androidx/wear/compose/material/dialog/DialogWithMaterialSlcTest.kt
rename to wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/dialog/DialogWithMaterialSlcTest.kt
diff --git a/wear/compose/compose-material/src/androidAndroidTest/res/drawable/backgroundimage1.png b/wear/compose/compose-material/src/androidTest/res/drawable/backgroundimage1.png
similarity index 100%
rename from wear/compose/compose-material/src/androidAndroidTest/res/drawable/backgroundimage1.png
rename to wear/compose/compose-material/src/androidTest/res/drawable/backgroundimage1.png
Binary files differ
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Resources.kt b/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Resources.kt
deleted file mode 100644
index 1e4f721..0000000
--- a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Resources.kt
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2021 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
- *
- * http://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.
- */
-
-package androidx.wear.compose.material
-
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.graphics.painter.Painter
-
-internal enum class ImageResources {
- CircularVignetteBottom,
- CircularVignetteTop,
- RectangularVignetteBottom,
- RectangularVignetteTop,
-}
-
-@Composable
-internal expect fun imageResource(image: ImageResources): Painter
-
-@Composable
-internal expect fun isRoundDevice(): Boolean
-
-@Composable
-internal expect fun is24HourFormat(): Boolean
-
-internal expect fun currentTimeMillis(): Long
-
-@Composable
-internal expect fun isLeftyModeEnabled(): Boolean
-
-@Composable
-internal expect fun screenHeightDp(): Int
-
-@Composable
-internal expect fun screenWidthDp(): Int
\ No newline at end of file
diff --git a/wear/compose/compose-material/src/desktopMain/kotlin/androidx/wear/compose/material/DefaultTimeSource.kt b/wear/compose/compose-material/src/desktopMain/kotlin/androidx/wear/compose/material/DefaultTimeSource.kt
deleted file mode 100644
index 1b21069..0000000
--- a/wear/compose/compose-material/src/desktopMain/kotlin/androidx/wear/compose/material/DefaultTimeSource.kt
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright 2021 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
- *
- * http://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.
- */
-
-package androidx.wear.compose.material
-
-import androidx.compose.runtime.Composable
-
-internal actual class DefaultTimeSource actual constructor(timeFormat: String) : TimeSource {
-
- override val currentTime: String
- @Composable
- get() = "Test time"
-}
diff --git a/wear/compose/compose-material/src/desktopMain/kotlin/androidx/wear/compose/material/Resources.desktop.kt b/wear/compose/compose-material/src/desktopMain/kotlin/androidx/wear/compose/material/Resources.desktop.kt
deleted file mode 100644
index 9780d2a..0000000
--- a/wear/compose/compose-material/src/desktopMain/kotlin/androidx/wear/compose/material/Resources.desktop.kt
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 2021 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
- *
- * http://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.
- */
-
-package androidx.wear.compose.material
-
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.graphics.painter.Painter
-import androidx.compose.ui.res.painterResource
-
-@Composable
-internal actual fun isRoundDevice(): Boolean {
- return false
-}
-
-@Composable
-internal actual fun imageResource(image: ImageResources): Painter =
- painterResource(
- when (image) {
- ImageResources.CircularVignetteBottom -> "circular_vignette_bottom"
- ImageResources.CircularVignetteTop -> "circular_vignette_top"
- ImageResources.RectangularVignetteBottom -> "rectangular_vignette_bottom"
- ImageResources.RectangularVignetteTop -> "rectangular_vignette_top"
- }
- )
-
-@Composable
-internal actual fun is24HourFormat(): Boolean {
- return true
-}
-
-internal actual fun currentTimeMillis(): Long = System.currentTimeMillis()
-
-internal actual fun isLeftyModeEnabled() = false
-
-@Composable
-internal actual fun screenHeightDp() = -1
-
-@Composable
-internal actual fun screenWidthDp() = -1
\ No newline at end of file
diff --git a/wear/compose/compose-material/src/androidMain/baseline-prof.txt b/wear/compose/compose-material/src/main/baseline-prof.txt
similarity index 100%
rename from wear/compose/compose-material/src/androidMain/baseline-prof.txt
rename to wear/compose/compose-material/src/main/baseline-prof.txt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Animation.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Animation.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Animation.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Animation.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Button.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Button.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Button.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Button.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Card.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Card.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Card.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Card.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Chip.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Chip.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Chip.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Chip.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Colors.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Colors.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Colors.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Colors.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ContentAlpha.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ContentAlpha.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ContentAlpha.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ContentAlpha.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ContentColor.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ContentColor.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ContentColor.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ContentColor.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/CurvedText.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/CurvedText.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/CurvedText.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/CurvedText.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ExperimentalWearMaterialApi.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ExperimentalWearMaterialApi.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ExperimentalWearMaterialApi.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ExperimentalWearMaterialApi.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/HorizontalPageIndicator.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/HorizontalPageIndicator.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/HorizontalPageIndicator.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/HorizontalPageIndicator.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Icon.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Icon.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Icon.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Icon.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ImageWithScrimPainter.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ImageWithScrimPainter.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ImageWithScrimPainter.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ImageWithScrimPainter.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ListHeader.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ListHeader.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ListHeader.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ListHeader.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/MaterialTextSelectionColors.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/MaterialTextSelectionColors.kt
similarity index 99%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/MaterialTextSelectionColors.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/MaterialTextSelectionColors.kt
index 2838258..fe1151e 100644
--- a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/MaterialTextSelectionColors.kt
+++ b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/MaterialTextSelectionColors.kt
@@ -15,13 +15,13 @@
*/
package androidx.wear.compose.material
+import androidx.compose.foundation.text.selection.TextSelectionColors
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.compositeOver
import androidx.compose.ui.graphics.luminance
import androidx.compose.ui.graphics.takeOrElse
-import androidx.compose.foundation.text.selection.TextSelectionColors
import kotlin.math.max
import kotlin.math.min
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/MaterialTheme.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/MaterialTheme.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/MaterialTheme.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/MaterialTheme.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Picker.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Picker.kt
similarity index 99%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Picker.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Picker.kt
index 1615159..2aaa04b 100644
--- a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Picker.kt
+++ b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Picker.kt
@@ -15,11 +15,6 @@
*/
package androidx.wear.compose.material
-import androidx.wear.compose.foundation.lazy.ScalingLazyColumn as ScalingLazyColumn
-import androidx.wear.compose.foundation.lazy.ScalingParams as ScalingParams
-import androidx.wear.compose.foundation.lazy.ScalingLazyColumnDefaults as ScalingLazyColumnDefaults
-import androidx.wear.compose.foundation.lazy.AutoCenteringParams as AutoCenteringParams
-import androidx.wear.compose.foundation.lazy.ScalingLazyListState as ScalingLazyListState
import androidx.compose.animation.core.CubicBezierEasing
import androidx.compose.animation.core.DecayAnimationSpec
import androidx.compose.animation.core.Easing
@@ -64,6 +59,11 @@
import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
+import androidx.wear.compose.foundation.lazy.AutoCenteringParams as AutoCenteringParams
+import androidx.wear.compose.foundation.lazy.ScalingLazyColumn as ScalingLazyColumn
+import androidx.wear.compose.foundation.lazy.ScalingLazyColumnDefaults as ScalingLazyColumnDefaults
+import androidx.wear.compose.foundation.lazy.ScalingLazyListState as ScalingLazyListState
+import androidx.wear.compose.foundation.lazy.ScalingParams as ScalingParams
import kotlinx.coroutines.launch
/**
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/PickerGroup.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/PickerGroup.kt
similarity index 99%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/PickerGroup.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/PickerGroup.kt
index 6ddae0d4..8588ee8 100644
--- a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/PickerGroup.kt
+++ b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/PickerGroup.kt
@@ -16,12 +16,12 @@
package androidx.wear.compose.material
+import androidx.compose.foundation.focusable
import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.gestures.awaitEachGesture
import androidx.compose.foundation.gestures.awaitFirstDown
import androidx.compose.foundation.gestures.scrollable
import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.focusable
import androidx.compose.foundation.layout.BoxScope
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Placeholder.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Placeholder.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Placeholder.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Placeholder.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/PositionIndicator.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/PositionIndicator.kt
similarity index 99%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/PositionIndicator.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/PositionIndicator.kt
index 2daae1d..74be61a 100644
--- a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/PositionIndicator.kt
+++ b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/PositionIndicator.kt
@@ -16,10 +16,6 @@
package androidx.wear.compose.material
-import androidx.wear.compose.foundation.lazy.ScalingLazyListState as ScalingLazyListState
-import androidx.wear.compose.foundation.lazy.ScalingLazyColumn as ScalingLazyColumn
-import androidx.wear.compose.foundation.lazy.ScalingLazyListItemInfo as ScalingLazyListItemInfo
-import androidx.wear.compose.foundation.lazy.ScalingLazyListAnchorType as ScalingLazyListAnchorType
import androidx.compose.animation.core.Animatable
import androidx.compose.animation.core.AnimationSpec
import androidx.compose.animation.core.AnimationVector
@@ -74,6 +70,10 @@
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp
+import androidx.wear.compose.foundation.lazy.ScalingLazyColumn as ScalingLazyColumn
+import androidx.wear.compose.foundation.lazy.ScalingLazyListAnchorType as ScalingLazyListAnchorType
+import androidx.wear.compose.foundation.lazy.ScalingLazyListItemInfo as ScalingLazyListItemInfo
+import androidx.wear.compose.foundation.lazy.ScalingLazyListState as ScalingLazyListState
import kotlin.math.PI
import kotlin.math.asin
import kotlin.math.max
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ProgressIndicator.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ProgressIndicator.kt
similarity index 99%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ProgressIndicator.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ProgressIndicator.kt
index e784c13..9a1ffd1 100644
--- a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ProgressIndicator.kt
+++ b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ProgressIndicator.kt
@@ -29,8 +29,8 @@
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.wear.compose.material.ProgressIndicatorDefaults.BaseRotationAngle
-import androidx.wear.compose.material.ProgressIndicatorDefaults.CircularEasing
import androidx.wear.compose.material.ProgressIndicatorDefaults.ButtonCircularIndicatorDiameter
+import androidx.wear.compose.material.ProgressIndicatorDefaults.CircularEasing
import androidx.wear.compose.material.ProgressIndicatorDefaults.HeadAndTailAnimationDuration
import androidx.wear.compose.material.ProgressIndicatorDefaults.HeadAndTailDelayDuration
import androidx.wear.compose.material.ProgressIndicatorDefaults.IndeterminateCircularIndicatorDiameter
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Providers.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Providers.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Providers.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Providers.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/RangeDefaults.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/RangeDefaults.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/RangeDefaults.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/RangeDefaults.kt
diff --git a/wear/compose/compose-material/src/androidMain/kotlin/androidx/wear/compose/material/Resources.android.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Resources.kt
similarity index 74%
rename from wear/compose/compose-material/src/androidMain/kotlin/androidx/wear/compose/material/Resources.android.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Resources.kt
index ae59fc3..286b29a 100644
--- a/wear/compose/compose-material/src/androidMain/kotlin/androidx/wear/compose/material/Resources.android.kt
+++ b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Resources.kt
@@ -26,16 +26,15 @@
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
-@Composable
-internal actual fun isRoundDevice(): Boolean {
- val configuration = LocalConfiguration.current
- return remember(configuration) {
- configuration.isScreenRound
- }
+internal enum class ImageResources {
+ CircularVignetteBottom,
+ CircularVignetteTop,
+ RectangularVignetteBottom,
+ RectangularVignetteTop,
}
@Composable
-internal actual fun imageResource(image: ImageResources): Painter =
+internal fun imageResource(image: ImageResources): Painter =
painterResource(
when (image) {
ImageResources.CircularVignetteBottom -> R.drawable.circular_vignette_bottom
@@ -46,12 +45,20 @@
)
@Composable
-internal actual fun is24HourFormat(): Boolean = DateFormat.is24HourFormat(LocalContext.current)
-
-internal actual fun currentTimeMillis(): Long = System.currentTimeMillis()
+internal fun isRoundDevice(): Boolean {
+ val configuration = LocalConfiguration.current
+ return remember(configuration) {
+ configuration.isScreenRound
+ }
+}
@Composable
-internal actual fun isLeftyModeEnabled(): Boolean {
+internal fun is24HourFormat(): Boolean = DateFormat.is24HourFormat(LocalContext.current)
+
+internal fun currentTimeMillis(): Long = System.currentTimeMillis()
+
+@Composable
+internal fun isLeftyModeEnabled(): Boolean {
val context = LocalContext.current
return remember(context) {
Settings.System.getInt(
@@ -63,7 +70,7 @@
}
@Composable
-internal actual fun screenHeightDp() = LocalContext.current.resources.configuration.screenHeightDp
+internal fun screenHeightDp() = LocalContext.current.resources.configuration.screenHeightDp
@Composable
-internal actual fun screenWidthDp() = LocalContext.current.resources.configuration.screenWidthDp
\ No newline at end of file
+internal fun screenWidthDp() = LocalContext.current.resources.configuration.screenWidthDp
\ No newline at end of file
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Scaffold.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Scaffold.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Scaffold.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Scaffold.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ScalingLazyColumn.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ScalingLazyColumn.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ScalingLazyColumn.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ScalingLazyColumn.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ScalingLazyColumnMeasure.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ScalingLazyColumnMeasure.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ScalingLazyColumnMeasure.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ScalingLazyColumnMeasure.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ScalingLazyColumnSnapFlingBehavior.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ScalingLazyColumnSnapFlingBehavior.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ScalingLazyColumnSnapFlingBehavior.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ScalingLazyColumnSnapFlingBehavior.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ScalingLazyListItemInfo.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ScalingLazyListItemInfo.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ScalingLazyListItemInfo.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ScalingLazyListItemInfo.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ScalingLazyListItemScope.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ScalingLazyListItemScope.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ScalingLazyListItemScope.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ScalingLazyListItemScope.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ScalingLazyListLayoutInfo.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ScalingLazyListLayoutInfo.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ScalingLazyListLayoutInfo.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ScalingLazyListLayoutInfo.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ScalingLazyListState.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ScalingLazyListState.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ScalingLazyListState.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ScalingLazyListState.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ScalingLazyScopeMarker.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ScalingLazyScopeMarker.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ScalingLazyScopeMarker.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ScalingLazyScopeMarker.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ScrollAway.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ScrollAway.kt
similarity index 99%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ScrollAway.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ScrollAway.kt
index d577f3e..c15fd01 100644
--- a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ScrollAway.kt
+++ b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ScrollAway.kt
@@ -31,8 +31,8 @@
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.compose.ui.util.lerp
-import androidx.wear.compose.foundation.lazy.ScalingLazyListState
import androidx.wear.compose.foundation.lazy.ScalingLazyColumn
+import androidx.wear.compose.foundation.lazy.ScalingLazyListState
/**
* Scroll an item vertically in/out of view based on a [ScrollState].
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Shapes.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Shapes.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Shapes.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Shapes.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Slider.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Slider.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Slider.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Slider.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Stepper.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Stepper.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Stepper.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Stepper.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/SwipeToDismissBox.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/SwipeToDismissBox.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/SwipeToDismissBox.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/SwipeToDismissBox.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Swipeable.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Swipeable.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Swipeable.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Swipeable.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Text.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Text.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Text.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Text.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/TimeText.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/TimeText.kt
similarity index 78%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/TimeText.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/TimeText.kt
index cb8a7d4..4834be9 100644
--- a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/TimeText.kt
+++ b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/TimeText.kt
@@ -16,15 +16,31 @@
package androidx.wear.compose.material
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import android.content.IntentFilter
+import android.text.format.DateFormat
+import androidx.annotation.VisibleForTesting
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.DisposableEffect
+import androidx.compose.runtime.State
+import androidx.compose.runtime.derivedStateOf
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableLongStateOf
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberUpdatedState
+import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.TextUnit
@@ -40,6 +56,7 @@
import androidx.wear.compose.material.TimeTextDefaults.CurvedTextSeparator
import androidx.wear.compose.material.TimeTextDefaults.TextSeparator
import androidx.wear.compose.material.TimeTextDefaults.timeFormat
+import java.util.Calendar
/**
* Layout to show the current time and a label at the top of the screen.
@@ -279,4 +296,85 @@
) = calculateLeftPadding(layoutDirection)
}
-internal expect class DefaultTimeSource(timeFormat: String) : TimeSource
+internal class DefaultTimeSource constructor(timeFormat: String) : TimeSource {
+ private val _timeFormat = timeFormat
+
+ override val currentTime: String
+ @Composable
+ get() = currentTime({ currentTimeMillis() }, _timeFormat).value
+}
+
+@Composable
+@VisibleForTesting
+internal fun currentTime(
+ time: () -> Long,
+ timeFormat: String
+): State<String> {
+
+ var calendar by remember { mutableStateOf(Calendar.getInstance()) }
+ var currentTime by remember { mutableLongStateOf(time()) }
+
+ val timeText = remember {
+ derivedStateOf { formatTime(calendar, currentTime, timeFormat) }
+ }
+
+ val context = LocalContext.current
+ val updatedTimeLambda by rememberUpdatedState(time)
+
+ DisposableEffect(context, updatedTimeLambda) {
+ val receiver = TimeBroadcastReceiver(
+ onTimeChanged = { currentTime = updatedTimeLambda() },
+ onTimeZoneChanged = { calendar = Calendar.getInstance() }
+ )
+ receiver.register(context)
+ onDispose {
+ receiver.unregister(context)
+ }
+ }
+ return timeText
+}
+
+/**
+ * A [BroadcastReceiver] to receive time tick, time change, and time zone change events.
+ */
+private class TimeBroadcastReceiver(
+ val onTimeChanged: () -> Unit,
+ val onTimeZoneChanged: () -> Unit
+) : BroadcastReceiver() {
+ private var registered = false
+
+ override fun onReceive(context: Context, intent: Intent) {
+ if (intent.action == Intent.ACTION_TIMEZONE_CHANGED) {
+ onTimeZoneChanged()
+ } else {
+ onTimeChanged()
+ }
+ }
+
+ fun register(context: Context) {
+ if (!registered) {
+ val filter = IntentFilter()
+ filter.addAction(Intent.ACTION_TIME_TICK)
+ filter.addAction(Intent.ACTION_TIME_CHANGED)
+ filter.addAction(Intent.ACTION_TIMEZONE_CHANGED)
+ context.registerReceiver(this, filter)
+ registered = true
+ }
+ }
+
+ fun unregister(context: Context) {
+ if (registered) {
+ context.unregisterReceiver(this)
+ registered = false
+ }
+ }
+}
+
+private fun formatTime(
+ calendar: Calendar,
+ currentTime: Long,
+ timeFormat: String
+): String {
+ calendar.timeInMillis = currentTime
+ return DateFormat.format(timeFormat, calendar).toString()
+}
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ToggleButton.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ToggleButton.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ToggleButton.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ToggleButton.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ToggleChip.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ToggleChip.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ToggleChip.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ToggleChip.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ToggleControl.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ToggleControl.kt
similarity index 99%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ToggleControl.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ToggleControl.kt
index d129aba..88c3b0de 100644
--- a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/ToggleControl.kt
+++ b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/ToggleControl.kt
@@ -17,10 +17,10 @@
import androidx.compose.animation.animateColorAsState
import androidx.compose.animation.core.AnimationSpec
-import androidx.compose.animation.core.animateFloat
-import androidx.compose.animation.core.updateTransition
import androidx.compose.animation.core.Transition
+import androidx.compose.animation.core.animateFloat
import androidx.compose.animation.core.tween
+import androidx.compose.animation.core.updateTransition
import androidx.compose.foundation.Canvas
import androidx.compose.foundation.Indication
import androidx.compose.foundation.interaction.Interaction
@@ -33,8 +33,8 @@
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Immutable
import androidx.compose.runtime.Stable
-import androidx.compose.runtime.remember
import androidx.compose.runtime.State
+import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.CornerRadius
@@ -42,12 +42,12 @@
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.graphics.BlendMode
import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.drawscope.DrawScope
-import androidx.compose.ui.graphics.drawscope.Fill
-import androidx.compose.ui.graphics.drawscope.Stroke
import androidx.compose.ui.graphics.Path
import androidx.compose.ui.graphics.StrokeCap
import androidx.compose.ui.graphics.compositeOver
+import androidx.compose.ui.graphics.drawscope.DrawScope
+import androidx.compose.ui.graphics.drawscope.Fill
+import androidx.compose.ui.graphics.drawscope.Stroke
import androidx.compose.ui.semantics.Role
import androidx.compose.ui.unit.dp
import androidx.compose.ui.util.lerp
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/TouchExplorationStateProvider.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/TouchExplorationStateProvider.kt
similarity index 99%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/TouchExplorationStateProvider.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/TouchExplorationStateProvider.kt
index e8a261e..564b2df 100644
--- a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/TouchExplorationStateProvider.kt
+++ b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/TouchExplorationStateProvider.kt
@@ -25,9 +25,9 @@
import androidx.compose.runtime.State
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
-import androidx.compose.runtime.setValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.lifecycle.Lifecycle
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Typography.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Typography.kt
similarity index 97%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Typography.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Typography.kt
index 1c7c2a3..28a45ac 100644
--- a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Typography.kt
+++ b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Typography.kt
@@ -261,10 +261,16 @@
platformStyle = defaultPlatformTextStyle()
)
+private const val DefaultIncludeFontPadding = true
+
+@Suppress("DEPRECATION")
+private val DefaultPlatformTextStyle = PlatformTextStyle(
+ includeFontPadding = DefaultIncludeFontPadding
+)
/**
* Returns Default [PlatformTextStyle].
*/
-internal expect fun defaultPlatformTextStyle(): PlatformTextStyle?
+internal fun defaultPlatformTextStyle(): PlatformTextStyle = DefaultPlatformTextStyle
/**
* This Ambient holds on to the current definition of typography for this application as described
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Vignette.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Vignette.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Vignette.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/Vignette.kt
diff --git a/wear/compose/compose-material/src/androidMain/kotlin/androidx/wear/compose/material/dialog/Dialog.android.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/dialog/Dialog.android.kt
similarity index 100%
rename from wear/compose/compose-material/src/androidMain/kotlin/androidx/wear/compose/material/dialog/Dialog.android.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/dialog/Dialog.android.kt
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/dialog/Dialog.kt b/wear/compose/compose-material/src/main/java/androidx/wear/compose/material/dialog/Dialog.kt
similarity index 100%
rename from wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/dialog/Dialog.kt
rename to wear/compose/compose-material/src/main/java/androidx/wear/compose/material/dialog/Dialog.kt
diff --git a/wear/compose/compose-material/src/androidMain/res/drawable/circular_vignette_bottom.png b/wear/compose/compose-material/src/main/res/drawable/circular_vignette_bottom.png
similarity index 100%
rename from wear/compose/compose-material/src/androidMain/res/drawable/circular_vignette_bottom.png
rename to wear/compose/compose-material/src/main/res/drawable/circular_vignette_bottom.png
Binary files differ
diff --git a/wear/compose/compose-material/src/androidMain/res/drawable/circular_vignette_top.png b/wear/compose/compose-material/src/main/res/drawable/circular_vignette_top.png
similarity index 100%
rename from wear/compose/compose-material/src/androidMain/res/drawable/circular_vignette_top.png
rename to wear/compose/compose-material/src/main/res/drawable/circular_vignette_top.png
Binary files differ
diff --git a/wear/compose/compose-material/src/androidMain/res/drawable/rectangular_vignette_bottom.png b/wear/compose/compose-material/src/main/res/drawable/rectangular_vignette_bottom.png
similarity index 100%
rename from wear/compose/compose-material/src/androidMain/res/drawable/rectangular_vignette_bottom.png
rename to wear/compose/compose-material/src/main/res/drawable/rectangular_vignette_bottom.png
Binary files differ
diff --git a/wear/compose/compose-material/src/androidMain/res/drawable/rectangular_vignette_top.png b/wear/compose/compose-material/src/main/res/drawable/rectangular_vignette_top.png
similarity index 100%
rename from wear/compose/compose-material/src/androidMain/res/drawable/rectangular_vignette_top.png
rename to wear/compose/compose-material/src/main/res/drawable/rectangular_vignette_top.png
Binary files differ
diff --git a/wear/compose/compose-material3/api/current.txt b/wear/compose/compose-material3/api/current.txt
index ffc5824..eae7d69e 100644
--- a/wear/compose/compose-material3/api/current.txt
+++ b/wear/compose/compose-material3/api/current.txt
@@ -158,7 +158,6 @@
method public float getSmallIconSize();
method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.IconButtonColors iconButtonColors(optional long containerColor, optional long contentColor, optional long disabledContainerColor, optional long disabledContentColor);
method public float iconSizeFor(float size);
- method @androidx.compose.runtime.Composable public androidx.compose.foundation.BorderStroke outlinedIconButtonBorder(boolean enabled, optional long borderColor, optional long disabledBorderColor, optional float borderWidth);
method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.IconButtonColors outlinedIconButtonColors(optional long contentColor);
property public final float DefaultButtonSize;
property public final float DefaultIconSize;
@@ -179,9 +178,9 @@
}
public final class IconKt {
- method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+ method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
}
public final class InteractiveComponentSizeKt {
@@ -239,10 +238,36 @@
property public final androidx.compose.ui.graphics.Shape small;
}
+ @androidx.compose.runtime.Immutable public final class TextButtonColors {
+ ctor public TextButtonColors(long containerColor, long contentColor, long disabledContainerColor, long disabledContentColor);
+ }
+
+ public final class TextButtonDefaults {
+ method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.TextButtonColors filledTextButtonColors(optional long containerColor, optional long contentColor);
+ method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.TextButtonColors filledTonalTextButtonColors(optional long containerColor, optional long contentColor);
+ method public float getDefaultButtonSize();
+ method public float getExtraSmallButtonSize();
+ method public float getLargeButtonSize();
+ method public androidx.compose.foundation.shape.RoundedCornerShape getShape();
+ method public float getSmallButtonSize();
+ method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.TextButtonColors outlinedTextButtonColors(optional long contentColor);
+ method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.TextButtonColors textButtonColors(optional long containerColor, optional long contentColor, optional long disabledContainerColor, optional long disabledContentColor);
+ property public final float DefaultButtonSize;
+ property public final float ExtraSmallButtonSize;
+ property public final float LargeButtonSize;
+ property public final float SmallButtonSize;
+ property public final androidx.compose.foundation.shape.RoundedCornerShape shape;
+ field public static final androidx.wear.compose.material3.TextButtonDefaults INSTANCE;
+ }
+
+ public final class TextButtonKt {
+ method @androidx.compose.runtime.Composable public static void TextButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material3.TextButtonColors colors, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+ }
+
public final class TextKt {
method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> LocalTextStyle;
}
diff --git a/wear/compose/compose-material3/api/public_plus_experimental_current.txt b/wear/compose/compose-material3/api/public_plus_experimental_current.txt
index bbe675a..0dd7042 100644
--- a/wear/compose/compose-material3/api/public_plus_experimental_current.txt
+++ b/wear/compose/compose-material3/api/public_plus_experimental_current.txt
@@ -161,7 +161,6 @@
method public float getSmallIconSize();
method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.IconButtonColors iconButtonColors(optional long containerColor, optional long contentColor, optional long disabledContainerColor, optional long disabledContentColor);
method public float iconSizeFor(float size);
- method @androidx.compose.runtime.Composable public androidx.compose.foundation.BorderStroke outlinedIconButtonBorder(boolean enabled, optional long borderColor, optional long disabledBorderColor, optional float borderWidth);
method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.IconButtonColors outlinedIconButtonColors(optional long contentColor);
property public final float DefaultButtonSize;
property public final float DefaultIconSize;
@@ -182,9 +181,9 @@
}
public final class IconKt {
- method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+ method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
}
public final class InteractiveComponentSizeKt {
@@ -244,10 +243,36 @@
property public final androidx.compose.ui.graphics.Shape small;
}
+ @androidx.compose.runtime.Immutable public final class TextButtonColors {
+ ctor public TextButtonColors(long containerColor, long contentColor, long disabledContainerColor, long disabledContentColor);
+ }
+
+ public final class TextButtonDefaults {
+ method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.TextButtonColors filledTextButtonColors(optional long containerColor, optional long contentColor);
+ method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.TextButtonColors filledTonalTextButtonColors(optional long containerColor, optional long contentColor);
+ method public float getDefaultButtonSize();
+ method public float getExtraSmallButtonSize();
+ method public float getLargeButtonSize();
+ method public androidx.compose.foundation.shape.RoundedCornerShape getShape();
+ method public float getSmallButtonSize();
+ method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.TextButtonColors outlinedTextButtonColors(optional long contentColor);
+ method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.TextButtonColors textButtonColors(optional long containerColor, optional long contentColor, optional long disabledContainerColor, optional long disabledContentColor);
+ property public final float DefaultButtonSize;
+ property public final float ExtraSmallButtonSize;
+ property public final float LargeButtonSize;
+ property public final float SmallButtonSize;
+ property public final androidx.compose.foundation.shape.RoundedCornerShape shape;
+ field public static final androidx.wear.compose.material3.TextButtonDefaults INSTANCE;
+ }
+
+ public final class TextButtonKt {
+ method @androidx.compose.runtime.Composable public static void TextButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material3.TextButtonColors colors, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+ }
+
public final class TextKt {
method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> LocalTextStyle;
}
diff --git a/wear/compose/compose-material3/api/restricted_current.txt b/wear/compose/compose-material3/api/restricted_current.txt
index ffc5824..eae7d69e 100644
--- a/wear/compose/compose-material3/api/restricted_current.txt
+++ b/wear/compose/compose-material3/api/restricted_current.txt
@@ -158,7 +158,6 @@
method public float getSmallIconSize();
method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.IconButtonColors iconButtonColors(optional long containerColor, optional long contentColor, optional long disabledContainerColor, optional long disabledContentColor);
method public float iconSizeFor(float size);
- method @androidx.compose.runtime.Composable public androidx.compose.foundation.BorderStroke outlinedIconButtonBorder(boolean enabled, optional long borderColor, optional long disabledBorderColor, optional float borderWidth);
method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.IconButtonColors outlinedIconButtonColors(optional long contentColor);
property public final float DefaultButtonSize;
property public final float DefaultIconSize;
@@ -179,9 +178,9 @@
}
public final class IconKt {
- method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+ method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
}
public final class InteractiveComponentSizeKt {
@@ -239,10 +238,36 @@
property public final androidx.compose.ui.graphics.Shape small;
}
+ @androidx.compose.runtime.Immutable public final class TextButtonColors {
+ ctor public TextButtonColors(long containerColor, long contentColor, long disabledContainerColor, long disabledContentColor);
+ }
+
+ public final class TextButtonDefaults {
+ method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.TextButtonColors filledTextButtonColors(optional long containerColor, optional long contentColor);
+ method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.TextButtonColors filledTonalTextButtonColors(optional long containerColor, optional long contentColor);
+ method public float getDefaultButtonSize();
+ method public float getExtraSmallButtonSize();
+ method public float getLargeButtonSize();
+ method public androidx.compose.foundation.shape.RoundedCornerShape getShape();
+ method public float getSmallButtonSize();
+ method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.TextButtonColors outlinedTextButtonColors(optional long contentColor);
+ method @androidx.compose.runtime.Composable public androidx.wear.compose.material3.TextButtonColors textButtonColors(optional long containerColor, optional long contentColor, optional long disabledContainerColor, optional long disabledContentColor);
+ property public final float DefaultButtonSize;
+ property public final float ExtraSmallButtonSize;
+ property public final float LargeButtonSize;
+ property public final float SmallButtonSize;
+ property public final androidx.compose.foundation.shape.RoundedCornerShape shape;
+ field public static final androidx.wear.compose.material3.TextButtonDefaults INSTANCE;
+ }
+
+ public final class TextButtonKt {
+ method @androidx.compose.runtime.Composable public static void TextButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material3.TextButtonColors colors, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+ }
+
public final class TextKt {
method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+ method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional int minLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> LocalTextStyle;
}
diff --git a/wear/compose/compose-material3/build.gradle b/wear/compose/compose-material3/build.gradle
index 5ec1e2a..229a1c1 100644
--- a/wear/compose/compose-material3/build.gradle
+++ b/wear/compose/compose-material3/build.gradle
@@ -15,18 +15,15 @@
*/
import androidx.build.LibraryType
-import androidx.build.AndroidXComposePlugin
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
id("AndroidXPlugin")
id("com.android.library")
id("AndroidXComposePlugin")
+ id("org.jetbrains.kotlin.android")
}
-// Disable multi-platform.
-AndroidXComposePlugin.applyAndConfigureKotlinPlugin(project, /* isMultiplatformEnabled= */ false)
-
dependencies {
api(project(":compose:foundation:foundation"))
api(project(":compose:ui:ui"))
diff --git a/wear/compose/compose-material3/integration-tests/build.gradle b/wear/compose/compose-material3/integration-tests/build.gradle
new file mode 100644
index 0000000..b139b83
--- /dev/null
+++ b/wear/compose/compose-material3/integration-tests/build.gradle
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+import androidx.build.Publish
+
+plugins {
+ id("AndroidXPlugin")
+ id("com.android.library")
+ id("AndroidXComposePlugin")
+ id("org.jetbrains.kotlin.android")
+}
+
+dependencies {
+ implementation(libs.kotlinStdlib)
+
+ implementation(project(":compose:animation:animation"))
+ implementation(project(":compose:foundation:foundation"))
+ implementation(project(":compose:foundation:foundation-layout"))
+ implementation(project(":compose:runtime:runtime"))
+ implementation(project(":compose:ui:ui"))
+ implementation(project(":compose:ui:ui-text"))
+
+ implementation(project(':wear:compose:compose-foundation'))
+ implementation(project(':wear:compose:compose-material3'))
+ implementation(project(':wear:compose:integration-tests:demos:common'))
+}
+
+androidx {
+ name = "AndroidX Wear Compose Material3 Components Demos"
+ publish = Publish.NONE
+ inceptionYear = "2023"
+ description = "Contains the demo code for the AndroidX Wear Compose Material 3 components."
+}
+
+android {
+ defaultConfig {
+ minSdkVersion 25
+ }
+ namespace "androidx.wear.compose.material3.demos"
+}
\ No newline at end of file
diff --git a/wear/compose/compose-material/src/desktopMain/kotlin/androidx/wear/compose/material/DefaultPlatformTextStyle.desktop.kt b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/WearMaterial3Demos.kt
similarity index 64%
copy from wear/compose/compose-material/src/desktopMain/kotlin/androidx/wear/compose/material/DefaultPlatformTextStyle.desktop.kt
copy to wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/WearMaterial3Demos.kt
index fd5d994..6492902 100644
--- a/wear/compose/compose-material/src/desktopMain/kotlin/androidx/wear/compose/material/DefaultPlatformTextStyle.desktop.kt
+++ b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/WearMaterial3Demos.kt
@@ -14,8 +14,18 @@
* limitations under the License.
*/
-package androidx.wear.compose.material
+package androidx.wear.compose.material3.demos
-import androidx.compose.ui.text.PlatformTextStyle
+import androidx.wear.compose.integration.demos.common.DemoCategory
-internal actual fun defaultPlatformTextStyle(): PlatformTextStyle? = null
\ No newline at end of file
+val WearMaterial3Demos = DemoCategory(
+ "Material3",
+ listOf(
+ DemoCategory(
+ "ScrollAway",
+ listOf(
+ // Add Material 3 demos here
+ )
+ ),
+ )
+)
\ No newline at end of file
diff --git a/wear/compose/compose-material3/src/androidAndroidTest/kotlin/androidx/wear/compose/material3/ButtonScreenshotTest.kt b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/ButtonScreenshotTest.kt
similarity index 100%
rename from wear/compose/compose-material3/src/androidAndroidTest/kotlin/androidx/wear/compose/material3/ButtonScreenshotTest.kt
rename to wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/ButtonScreenshotTest.kt
diff --git a/wear/compose/compose-material3/src/androidAndroidTest/kotlin/androidx/wear/compose/material3/ButtonTest.kt b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/ButtonTest.kt
similarity index 100%
rename from wear/compose/compose-material3/src/androidAndroidTest/kotlin/androidx/wear/compose/material3/ButtonTest.kt
rename to wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/ButtonTest.kt
diff --git a/wear/compose/compose-material3/src/androidAndroidTest/kotlin/androidx/wear/compose/material3/CardScreenshotTest.kt b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/CardScreenshotTest.kt
similarity index 100%
rename from wear/compose/compose-material3/src/androidAndroidTest/kotlin/androidx/wear/compose/material3/CardScreenshotTest.kt
rename to wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/CardScreenshotTest.kt
diff --git a/wear/compose/compose-material3/src/androidAndroidTest/kotlin/androidx/wear/compose/material3/CardTest.kt b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/CardTest.kt
similarity index 100%
rename from wear/compose/compose-material3/src/androidAndroidTest/kotlin/androidx/wear/compose/material3/CardTest.kt
rename to wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/CardTest.kt
diff --git a/wear/compose/compose-material3/src/androidAndroidTest/kotlin/androidx/wear/compose/material3/IconButtonTest.kt b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/IconButtonTest.kt
similarity index 100%
rename from wear/compose/compose-material3/src/androidAndroidTest/kotlin/androidx/wear/compose/material3/IconButtonTest.kt
rename to wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/IconButtonTest.kt
diff --git a/wear/compose/compose-material3/src/androidAndroidTest/kotlin/androidx/wear/compose/material3/IconTest.kt b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/IconTest.kt
similarity index 100%
rename from wear/compose/compose-material3/src/androidAndroidTest/kotlin/androidx/wear/compose/material3/IconTest.kt
rename to wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/IconTest.kt
diff --git a/wear/compose/compose-material3/src/androidAndroidTest/kotlin/androidx/wear/compose/material3/Material3Test.kt b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/Material3Test.kt
similarity index 99%
rename from wear/compose/compose-material3/src/androidAndroidTest/kotlin/androidx/wear/compose/material3/Material3Test.kt
rename to wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/Material3Test.kt
index 2c8d474..afa5a80 100644
--- a/wear/compose/compose-material3/src/androidAndroidTest/kotlin/androidx/wear/compose/material3/Material3Test.kt
+++ b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/Material3Test.kt
@@ -33,17 +33,17 @@
import androidx.compose.testutils.assertContainsColor
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
+import androidx.compose.ui.geometry.Rect
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.graphics.compositeOver
import androidx.compose.ui.graphics.toPixelMap
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.semantics.SemanticsNode
import androidx.compose.ui.test.SemanticsNodeInteraction
import androidx.compose.ui.test.assertTouchHeightIsEqualTo
import androidx.compose.ui.test.assertTouchWidthIsEqualTo
-import androidx.compose.ui.geometry.Rect
-import androidx.compose.ui.semantics.SemanticsNode
import androidx.compose.ui.test.captureToImage
import androidx.compose.ui.test.junit4.ComposeContentTestRule
import androidx.compose.ui.test.onNodeWithTag
@@ -53,8 +53,8 @@
import androidx.compose.ui.unit.height
import androidx.compose.ui.unit.isUnspecified
import androidx.compose.ui.unit.toSize
-import org.junit.Assert
import kotlin.math.abs
+import org.junit.Assert
/**
* Constant to emulate very big but finite constraints
diff --git a/wear/compose/compose-material3/src/androidAndroidTest/kotlin/androidx/wear/compose/material3/Screenshot.kt b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/Screenshot.kt
similarity index 100%
rename from wear/compose/compose-material3/src/androidAndroidTest/kotlin/androidx/wear/compose/material3/Screenshot.kt
rename to wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/Screenshot.kt
diff --git a/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/TextButtonTest.kt b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/TextButtonTest.kt
new file mode 100644
index 0000000..a37ef7b
--- /dev/null
+++ b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/TextButtonTest.kt
@@ -0,0 +1,552 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.wear.compose.material3
+
+import android.os.Build
+import androidx.annotation.RequiresApi
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.shape.CircleShape
+import androidx.compose.foundation.shape.CutCornerShape
+import androidx.compose.runtime.Composable
+import androidx.compose.testutils.assertShape
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.Shape
+import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.semantics.Role
+import androidx.compose.ui.semantics.SemanticsProperties
+import androidx.compose.ui.test.SemanticsMatcher
+import androidx.compose.ui.test.assert
+import androidx.compose.ui.test.assertHasClickAction
+import androidx.compose.ui.test.assertIsEnabled
+import androidx.compose.ui.test.assertIsNotEnabled
+import androidx.compose.ui.test.captureToImage
+import androidx.compose.ui.test.hasText
+import androidx.compose.ui.test.junit4.ComposeContentTestRule
+import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.compose.ui.test.onNodeWithTag
+import androidx.compose.ui.test.onNodeWithText
+import androidx.compose.ui.test.performClick
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.unit.dp
+import androidx.wear.compose.material3.TextButtonDefaults.DefaultButtonSize
+import androidx.wear.compose.material3.TextButtonDefaults.ExtraSmallButtonSize
+import androidx.wear.compose.material3.TextButtonDefaults.LargeButtonSize
+import androidx.wear.compose.material3.TextButtonDefaults.SmallButtonSize
+import org.junit.Assert.assertEquals
+import org.junit.Rule
+import org.junit.Test
+
+class TextButtonTest {
+ @get:Rule
+ val rule = createComposeRule()
+
+ @Test
+ fun supports_testtag() {
+ rule.setContentWithTheme {
+ TextButton(
+ modifier = Modifier.testTag(TEST_TAG),
+ onClick = {}
+ ) {
+ Text("Test")
+ }
+ }
+
+ rule.onNodeWithTag(TEST_TAG).assertExists()
+ }
+
+ @Test
+ fun contains_text() {
+ val text = "Test"
+ rule.setContentWithTheme {
+ TextButton(
+ onClick = {},
+ ) {
+ Text("Test")
+ }
+ }
+
+ rule.onNodeWithText(text).assertExists()
+ }
+
+ @Test
+ fun matches_has_text_for_button() {
+ val text = "Test"
+ rule.setContentWithTheme {
+ TextButton(
+ onClick = {},
+ ) {
+ Text("Test")
+ }
+ }
+
+ rule.onNode(hasText(text)).assertExists()
+ }
+
+ @Test
+ fun has_click_action_when_enabled() {
+ rule.setContentWithTheme {
+ TextButton(
+ onClick = {},
+ enabled = true,
+ modifier = Modifier.testTag(TEST_TAG)
+ ) {
+ Text("Test")
+ }
+ }
+
+ rule.onNodeWithTag(TEST_TAG).assertHasClickAction()
+ }
+
+ @Test
+ fun has_click_action_when_disabled() {
+ rule.setContentWithTheme {
+ TextButton(
+ onClick = {},
+ enabled = false,
+ modifier = Modifier.testTag(TEST_TAG)
+ ) {
+ Text("Test")
+ }
+ }
+
+ rule.onNodeWithTag(TEST_TAG).assertHasClickAction()
+ }
+
+ @Test
+ fun is_correctly_enabled() {
+ rule.setContentWithTheme {
+ TextButton(
+ onClick = {},
+ enabled = true,
+ modifier = Modifier.testTag(TEST_TAG)
+ ) {
+ Text("Test")
+ }
+ }
+
+ rule.onNodeWithTag(TEST_TAG).assertIsEnabled()
+ }
+
+ @Test
+ fun is_correctly_disabled() {
+ rule.setContentWithTheme {
+ TextButton(
+ onClick = {},
+ enabled = false,
+ modifier = Modifier.testTag(TEST_TAG)
+ ) {
+ Text("Test")
+ }
+ }
+
+ rule.onNodeWithTag(TEST_TAG).assertIsNotEnabled()
+ }
+
+ @Test
+ fun responds_to_click_when_enabled() {
+ var clicked = false
+
+ rule.setContentWithTheme {
+ TextButton(
+ onClick = { clicked = true },
+ enabled = true,
+ modifier = Modifier.testTag(TEST_TAG)
+ ) {
+ Text("Test")
+ }
+ }
+
+ rule.onNodeWithTag(TEST_TAG).performClick()
+
+ rule.runOnIdle {
+ assertEquals(true, clicked)
+ }
+ }
+
+ @Test
+ fun does_not_respond_to_click_when_disabled() {
+ var clicked = false
+
+ rule.setContentWithTheme {
+ TextButton(
+ onClick = { clicked = true },
+ enabled = false,
+ modifier = Modifier.testTag(TEST_TAG)
+ ) {
+ Text("Test")
+ }
+ }
+
+ rule.onNodeWithTag(TEST_TAG).performClick()
+
+ rule.runOnIdle {
+ assertEquals(false, clicked)
+ }
+ }
+
+ @Test
+ fun has_role_button() {
+ rule.setContentWithTheme {
+ TextButton(
+ onClick = {},
+ modifier = Modifier.testTag(TEST_TAG)
+ ) {
+ Text("Test")
+ }
+ }
+
+ rule.onNodeWithTag(TEST_TAG)
+ .assert(
+ SemanticsMatcher.expectValue(
+ SemanticsProperties.Role,
+ Role.Button
+ )
+ )
+ }
+
+ @Test
+ fun sets_correct_font() {
+ var actualTextStyle = TextStyle.Default
+ var expectedTextStyle = TextStyle.Default
+
+ rule.setContentWithTheme {
+ expectedTextStyle = MaterialTheme.typography.buttonMedium
+ TextButton(
+ onClick = {},
+ ) {
+ actualTextStyle = LocalTextStyle.current
+ }
+ }
+
+ assertEquals(expectedTextStyle, actualTextStyle)
+ }
+
+ @Test
+ fun gives_default_button_correct_tap_size() {
+ rule.verifyTapSize(DefaultButtonSize) { modifier ->
+ TextButton(
+ onClick = {},
+ modifier = modifier.touchTargetAwareSize(DefaultButtonSize)
+ ) {
+ Text("ABC")
+ }
+ }
+ }
+
+ @Test
+ fun gives_large_button_correct_tap_size() {
+ rule.verifyTapSize(LargeButtonSize) { modifier ->
+ TextButton(
+ onClick = {},
+ modifier = modifier.touchTargetAwareSize(LargeButtonSize)
+ ) {
+ Text("Large")
+ }
+ }
+ }
+
+ @Test
+ fun gives_small_button_correct_tap_size() {
+ rule.verifyTapSize(SmallButtonSize) { modifier ->
+ TextButton(
+ onClick = {},
+ modifier = modifier.touchTargetAwareSize(SmallButtonSize)
+ ) {
+ Text("abc")
+ }
+ }
+ }
+
+ @Test
+ fun gives_extra_small_button_correct_tap_size() {
+ rule.verifyTapSize(
+ expectedSize = MinimumButtonTapSize
+ ) { modifier ->
+ TextButton(
+ onClick = {},
+ modifier = modifier.touchTargetAwareSize(ExtraSmallButtonSize)
+ ) {
+ Text("xs")
+ }
+ }
+ }
+
+ @RequiresApi(Build.VERSION_CODES.O)
+ @Test
+ fun default_shape_is_circular() {
+ rule.isShape(
+ expectedShape = CircleShape,
+ colors = { TextButtonDefaults.textButtonColors() }
+ ) { modifier ->
+ TextButton(
+ onClick = {},
+ modifier = modifier
+ ) {
+ // omit content to allow us to validate the shape by pixel checking.
+ }
+ }
+ }
+
+ @RequiresApi(Build.VERSION_CODES.O)
+ @Test
+ fun allows_custom_shape_override() {
+ val shape = CutCornerShape(4.dp)
+
+ rule.isShape(
+ expectedShape = shape,
+ colors = { TextButtonDefaults.textButtonColors() }
+ ) { modifier ->
+ TextButton(
+ onClick = {},
+ modifier = modifier,
+ shape = shape
+ ) {
+ // omit content to allow us to validate the shape by pixel checking.
+ }
+ }
+ }
+
+ @RequiresApi(Build.VERSION_CODES.O)
+ @Test
+ fun gives_enabled_text_button_colors() {
+ rule.verifyTextButtonColors(
+ status = Status.Enabled,
+ colors = { TextButtonDefaults.textButtonColors() },
+ expectedContainerColor = { Color.Transparent },
+ expectedContentColor = { MaterialTheme.colorScheme.onBackground }
+ )
+ }
+
+ @RequiresApi(Build.VERSION_CODES.O)
+ @Test
+ fun gives_disabled_text_button_colors() {
+ rule.verifyTextButtonColors(
+ status = Status.Disabled,
+ colors = { TextButtonDefaults.textButtonColors() },
+ expectedContainerColor = { Color.Transparent },
+ expectedContentColor = { MaterialTheme.colorScheme.onSurface.copy(
+ alpha = ContentAlpha.disabled
+ ) }
+ )
+ }
+
+ @RequiresApi(Build.VERSION_CODES.O)
+ @Test
+ fun gives_enabled_filled_text_button_colors() {
+ rule.verifyTextButtonColors(
+ status = Status.Enabled,
+ colors = { TextButtonDefaults.filledTextButtonColors() },
+ expectedContainerColor = { MaterialTheme.colorScheme.primary },
+ expectedContentColor = { MaterialTheme.colorScheme.onPrimary }
+ )
+ }
+
+ @RequiresApi(Build.VERSION_CODES.O)
+ @Test
+ fun gives_disabled_filled_text_button_colors() {
+ rule.verifyTextButtonColors(
+ status = Status.Disabled,
+ colors = { TextButtonDefaults.filledTextButtonColors() },
+ expectedContainerColor = { MaterialTheme.colorScheme.onSurface.copy(
+ alpha = DisabledBorderAndContainerAlpha
+ ) },
+ expectedContentColor = { MaterialTheme.colorScheme.onSurface.copy(
+ alpha = ContentAlpha.disabled
+ ) }
+ )
+ }
+
+ @RequiresApi(Build.VERSION_CODES.O)
+ @Test
+ fun gives_enabled_filled_tonal_text_button_colors() {
+ rule.verifyTextButtonColors(
+ status = Status.Enabled,
+ colors = { TextButtonDefaults.filledTonalTextButtonColors() },
+ expectedContainerColor = { MaterialTheme.colorScheme.surface },
+ expectedContentColor = { MaterialTheme.colorScheme.onSurface }
+ )
+ }
+
+ @RequiresApi(Build.VERSION_CODES.O)
+ @Test
+ fun gives_disabled_filled_tonal_text_button_colors() {
+ rule.verifyTextButtonColors(
+ status = Status.Disabled,
+ colors = { TextButtonDefaults.filledTonalTextButtonColors() },
+ expectedContainerColor = { MaterialTheme.colorScheme.onSurface.copy(
+ alpha = DisabledBorderAndContainerAlpha
+ ) },
+ expectedContentColor = { MaterialTheme.colorScheme.onSurface.copy(
+ alpha = ContentAlpha.disabled
+ ) }
+ )
+ }
+
+ @RequiresApi(Build.VERSION_CODES.O)
+ @Test
+ fun gives_enabled_outlined_text_button_colors() {
+ rule.verifyTextButtonColors(
+ status = Status.Enabled,
+ colors = { TextButtonDefaults.outlinedTextButtonColors() },
+ expectedContainerColor = { Color.Transparent },
+ expectedContentColor = { MaterialTheme.colorScheme.onBackground }
+ )
+ }
+
+ @RequiresApi(Build.VERSION_CODES.O)
+ @Test
+ fun gives_disabled_outlined_text_button_colors() {
+ rule.verifyTextButtonColors(
+ status = Status.Disabled,
+ colors = { TextButtonDefaults.outlinedTextButtonColors() },
+ expectedContainerColor = { MaterialTheme.colorScheme.onSurface.copy(
+ alpha = DisabledBorderAndContainerAlpha
+ ) },
+ expectedContentColor = { MaterialTheme.colorScheme.onSurface.copy(
+ alpha = ContentAlpha.disabled
+ ) }
+ )
+ }
+
+ @RequiresApi(Build.VERSION_CODES.O)
+ @Test
+ fun gives_enabled_outlined_text_button_correct_border_colors() {
+ val status = Status.Enabled
+ rule.verifyButtonBorderColor(
+ expectedBorderColor = { MaterialTheme.colorScheme.outline },
+ content = { modifier: Modifier ->
+ TextButton(
+ onClick = {},
+ modifier = modifier,
+ enabled = status.enabled(),
+ colors = TextButtonDefaults.outlinedTextButtonColors(),
+ border = ButtonDefaults.outlinedButtonBorder(enabled = status.enabled())
+ ) {}
+ }
+ )
+ }
+
+ @RequiresApi(Build.VERSION_CODES.O)
+ @Test
+ fun gives_disabled_outlined_text_button_correct_border_colors() {
+ val status = Status.Disabled
+ rule.verifyButtonBorderColor(
+ expectedBorderColor = {
+ MaterialTheme.colorScheme.onSurface.copy(alpha = DisabledBorderAndContainerAlpha)
+ },
+ content = { modifier: Modifier ->
+ TextButton(
+ onClick = {},
+ modifier = modifier,
+ enabled = status.enabled(),
+ colors = TextButtonDefaults.outlinedTextButtonColors(),
+ border = ButtonDefaults.outlinedButtonBorder(enabled = status.enabled())
+
+ ) {}
+ }
+ )
+ }
+
+ @RequiresApi(Build.VERSION_CODES.O)
+ @Test
+ fun overrides_outlined_text_button_border_color() {
+ val status = Status.Enabled
+ rule.verifyButtonBorderColor(
+ expectedBorderColor = { Color.Green },
+ content = { modifier: Modifier ->
+ TextButton(
+ onClick = {},
+ modifier = modifier,
+ enabled = status.enabled(),
+ border = ButtonDefaults.outlinedButtonBorder(
+ enabled = status.enabled(),
+ borderColor = Color.Green,
+ disabledBorderColor = Color.Red
+ )
+ ) {}
+ }
+ )
+ }
+
+ @RequiresApi(Build.VERSION_CODES.O)
+ private fun ComposeContentTestRule.verifyTextButtonColors(
+ status: Status,
+ colors: @Composable () -> TextButtonColors,
+ expectedContainerColor: @Composable () -> Color,
+ expectedContentColor: @Composable () -> Color,
+ ) {
+ verifyColors(
+ status = status,
+ expectedContainerColor = expectedContainerColor,
+ expectedContentColor = expectedContentColor,
+ applyAlphaForDisabled = false,
+ content = {
+ var actualContentColor = Color.Transparent
+ TextButton(
+ onClick = {},
+ enabled = status.enabled(),
+ colors = colors(),
+ modifier = Modifier.testTag(TEST_TAG),
+ ) {
+ actualContentColor = LocalContentColor.current
+ }
+ return@verifyColors actualContentColor
+ }
+ )
+ }
+}
+
+@RequiresApi(Build.VERSION_CODES.O)
+private fun ComposeContentTestRule.isShape(
+ expectedShape: Shape,
+ colors: @Composable () -> TextButtonColors,
+ content: @Composable (Modifier) -> Unit
+) {
+ var background = Color.Transparent
+ var buttonColor = Color.Transparent
+ val padding = 0.dp
+
+ setContentWithTheme {
+ background = MaterialTheme.colorScheme.surface
+ Box(Modifier.background(background)) {
+ buttonColor = colors().containerColor(true).value
+ if (buttonColor == Color.Transparent) {
+ buttonColor = background
+ }
+ content(
+ Modifier
+ .testTag(TEST_TAG)
+ .padding(padding)
+ )
+ }
+ }
+
+ onNodeWithTag(TEST_TAG)
+ .captureToImage()
+ .assertShape(
+ density = density,
+ horizontalPadding = 0.dp,
+ verticalPadding = 0.dp,
+ shapeColor = buttonColor,
+ backgroundColor = background,
+ shapeOverlapPixelCount = 2.0f,
+ shape = expectedShape,
+ )
+}
diff --git a/wear/compose/compose-material3/src/androidAndroidTest/kotlin/androidx/wear/compose/material3/TextTest.kt b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/TextTest.kt
similarity index 99%
rename from wear/compose/compose-material3/src/androidAndroidTest/kotlin/androidx/wear/compose/material3/TextTest.kt
rename to wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/TextTest.kt
index a61944f..2596530 100644
--- a/wear/compose/compose-material3/src/androidAndroidTest/kotlin/androidx/wear/compose/material3/TextTest.kt
+++ b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/TextTest.kt
@@ -35,10 +35,10 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth
+import java.lang.IllegalArgumentException
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.lang.IllegalArgumentException
@SmallTest
@RunWith(AndroidJUnit4::class)
diff --git a/wear/compose/compose-material3/src/androidAndroidTest/res/drawable/backgroundimage1.png b/wear/compose/compose-material3/src/androidTest/res/drawable/backgroundimage1.png
similarity index 100%
rename from wear/compose/compose-material3/src/androidAndroidTest/res/drawable/backgroundimage1.png
rename to wear/compose/compose-material3/src/androidTest/res/drawable/backgroundimage1.png
Binary files differ
diff --git a/wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/Button.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Button.kt
similarity index 98%
rename from wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/Button.kt
rename to wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Button.kt
index 7503da4..4523dc5 100644
--- a/wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/Button.kt
+++ b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Button.kt
@@ -803,8 +803,8 @@
fun outlinedButtonBorder(
enabled: Boolean,
borderColor: Color = MaterialTheme.colorScheme.outline,
- disabledBorderColor: Color = MaterialTheme.colorScheme.onSurface.copy(
- alpha = DisabledBorderAndContainerAlpha
+ disabledBorderColor: Color = MaterialTheme.colorScheme.onSurface.toDisabledColor(
+ disabledAlpha = DisabledBorderAndContainerAlpha
),
borderWidth: Dp = 1.dp
): BorderStroke {
@@ -853,18 +853,13 @@
contentColor: Color = contentColorFor(containerColor),
secondaryContentColor: Color = contentColor,
iconColor: Color = contentColor,
- disabledContainerColor: Color = MaterialTheme.colorScheme.onSurface.copy(
- alpha = DisabledBorderAndContainerAlpha
+ disabledContainerColor: Color = MaterialTheme.colorScheme.onSurface.toDisabledColor(
+ disabledAlpha = DisabledBorderAndContainerAlpha
),
- disabledContentColor: Color = MaterialTheme.colorScheme.onSurface.copy(
- alpha = ContentAlpha.disabled
- ),
- disabledSecondaryContentColor: Color = MaterialTheme.colorScheme.onSurface.copy(
- alpha = ContentAlpha.disabled
- ),
- disabledIconColor: Color = MaterialTheme.colorScheme.onSurface.copy(
- alpha = ContentAlpha.disabled
- ),
+ disabledContentColor: Color = MaterialTheme.colorScheme.onSurface.toDisabledColor(),
+ disabledSecondaryContentColor: Color =
+ MaterialTheme.colorScheme.onSurface.toDisabledColor(),
+ disabledIconColor: Color = MaterialTheme.colorScheme.onSurface.toDisabledColor()
): ButtonColors = ButtonColors(
containerColor = containerColor,
contentColor = contentColor,
diff --git a/wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/Card.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Card.kt
similarity index 100%
rename from wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/Card.kt
rename to wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Card.kt
diff --git a/wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/ColorScheme.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/ColorScheme.kt
similarity index 98%
rename from wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/ColorScheme.kt
rename to wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/ColorScheme.kt
index 1216db9..1ee0789 100644
--- a/wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/ColorScheme.kt
+++ b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/ColorScheme.kt
@@ -454,3 +454,11 @@
}
internal val LocalColors = staticCompositionLocalOf<ColorScheme> { ColorScheme() }
+
+/**
+ * Convert given color to disabled color.
+ * @param disabledAlpha Alpha used to represent disabled colors.
+ */
+@Composable
+internal fun Color.toDisabledColor(disabledAlpha: Float = ContentAlpha.disabled) =
+ this.copy(alpha = this.alpha * disabledAlpha)
diff --git a/wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/ContentAlpha.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/ContentAlpha.kt
similarity index 100%
rename from wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/ContentAlpha.kt
rename to wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/ContentAlpha.kt
diff --git a/wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/ContentColor.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/ContentColor.kt
similarity index 100%
rename from wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/ContentColor.kt
rename to wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/ContentColor.kt
diff --git a/wear/compose/compose-material3/src/androidMain/kotlin/androidx/wear/compose/material3/DefaultPlatformTextStyle.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/DefaultPlatformTextStyle.kt
similarity index 100%
rename from wear/compose/compose-material3/src/androidMain/kotlin/androidx/wear/compose/material3/DefaultPlatformTextStyle.kt
rename to wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/DefaultPlatformTextStyle.kt
diff --git a/wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/ExperimentalWearMaterial3Api.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/ExperimentalWearMaterial3Api.kt
similarity index 100%
rename from wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/ExperimentalWearMaterial3Api.kt
rename to wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/ExperimentalWearMaterial3Api.kt
diff --git a/wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/Icon.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Icon.kt
similarity index 100%
rename from wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/Icon.kt
rename to wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Icon.kt
diff --git a/wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/IconButton.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/IconButton.kt
similarity index 93%
rename from wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/IconButton.kt
rename to wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/IconButton.kt
index d4b2a43..8785b894 100644
--- a/wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/IconButton.kt
+++ b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/IconButton.kt
@@ -218,8 +218,9 @@
* @param shape Defines the icon button's shape. It is strongly recommended to use the default
* as this shape is a key characteristic of the Wear Material3 design.
* @param colors [IconButtonColors] that will be used to resolve the background and icon color for
- * this button in different states. See [IconButtonDefaults.outlinedIconButtonBorder].
- * @param border Optional [BorderStroke] for the icon button border.
+ * this button in different states. See [IconButtonDefaults.outlinedIconButtonColors].
+ * @param border Optional [BorderStroke] for the icon button border -
+ * [ButtonDefaults.outlinedButtonBorder] by default.
* @param interactionSource The [MutableInteractionSource] representing the stream of
* [Interaction]s for this Button. You can create and pass in your own remembered
* [MutableInteractionSource] if you want to observe [Interaction]s and customize the
@@ -233,7 +234,7 @@
enabled: Boolean = true,
shape: Shape = IconButtonDefaults.shape,
colors: IconButtonColors = IconButtonDefaults.outlinedIconButtonColors(),
- border: BorderStroke? = IconButtonDefaults.outlinedIconButtonBorder(enabled),
+ border: BorderStroke? = ButtonDefaults.outlinedButtonBorder(enabled),
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
content: @Composable BoxScope.() -> Unit,
) = IconButton(onClick, modifier, enabled, shape, colors, border, interactionSource, content)
@@ -332,12 +333,10 @@
fun iconButtonColors(
containerColor: Color = Color.Transparent,
contentColor: Color = MaterialTheme.colorScheme.onBackground,
- disabledContainerColor: Color = MaterialTheme.colorScheme.onSurface.copy(
- alpha = DisabledBorderAndContainerAlpha
+ disabledContainerColor: Color = MaterialTheme.colorScheme.onSurface.toDisabledColor(
+ disabledAlpha = DisabledBorderAndContainerAlpha
),
- disabledContentColor: Color = MaterialTheme.colorScheme.onSurface.copy(
- alpha = ContentAlpha.disabled
- )
+ disabledContentColor: Color = MaterialTheme.colorScheme.onSurface.toDisabledColor()
): IconButtonColors = IconButtonColors(
containerColor = containerColor,
contentColor = contentColor,
@@ -346,30 +345,6 @@
)
/**
- * Creates a [BorderStroke], such as for an [OutlinedIconButton]
- *
- * @param borderColor The color to use for the border for this outline when enabled
- * @param disabledBorderColor The color to use for the border for this outline when
- * disabled
- * @param borderWidth The width to use for the border for this outline. It is strongly
- * recommended to use the default width as this outline is a key characteristic
- * of Wear Material3.
- */
- @Composable
- fun outlinedIconButtonBorder(
- enabled: Boolean,
- borderColor: Color = MaterialTheme.colorScheme.outline,
- disabledBorderColor: Color = MaterialTheme.colorScheme.onSurface.copy(
- alpha = DisabledBorderAndContainerAlpha
- ),
- borderWidth: Dp = 1.dp
- ): BorderStroke {
- return remember {
- BorderStroke(borderWidth, if (enabled) borderColor else disabledBorderColor)
- }
- }
-
- /**
* The recommended size of an icon when used inside an icon button with size
* [SmallButtonSize] or [ExtraSmallButtonSize].
* Use [iconSizeFor] to easily determine the icon size.
diff --git a/wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/InteractiveComponentSize.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/InteractiveComponentSize.kt
similarity index 100%
rename from wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/InteractiveComponentSize.kt
rename to wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/InteractiveComponentSize.kt
diff --git a/wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/MaterialTextSelectionColors.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/MaterialTextSelectionColors.kt
similarity index 99%
rename from wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/MaterialTextSelectionColors.kt
rename to wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/MaterialTextSelectionColors.kt
index 8939ee4..cfd8d63 100644
--- a/wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/MaterialTextSelectionColors.kt
+++ b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/MaterialTextSelectionColors.kt
@@ -15,13 +15,13 @@
*/
package androidx.wear.compose.material3
+import androidx.compose.foundation.text.selection.TextSelectionColors
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.compositeOver
import androidx.compose.ui.graphics.luminance
import androidx.compose.ui.graphics.takeOrElse
-import androidx.compose.foundation.text.selection.TextSelectionColors
import kotlin.math.max
import kotlin.math.min
diff --git a/wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/MaterialTheme.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/MaterialTheme.kt
similarity index 100%
rename from wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/MaterialTheme.kt
rename to wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/MaterialTheme.kt
diff --git a/wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/Providers.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Providers.kt
similarity index 100%
rename from wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/Providers.kt
rename to wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Providers.kt
diff --git a/wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/Shapes.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Shapes.kt
similarity index 100%
rename from wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/Shapes.kt
rename to wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Shapes.kt
diff --git a/wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/Text.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Text.kt
similarity index 100%
rename from wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/Text.kt
rename to wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Text.kt
diff --git a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/TextButton.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/TextButton.kt
new file mode 100644
index 0000000..e3c916a
--- /dev/null
+++ b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/TextButton.kt
@@ -0,0 +1,274 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.wear.compose.material3
+
+import androidx.compose.foundation.BorderStroke
+import androidx.compose.foundation.interaction.Interaction
+import androidx.compose.foundation.interaction.MutableInteractionSource
+import androidx.compose.foundation.layout.BoxScope
+import androidx.compose.foundation.shape.CircleShape
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.State
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberUpdatedState
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.Shape
+import androidx.compose.ui.unit.dp
+
+/**
+ * Wear Material [TextButton] is a circular, text-only button with transparent background and
+ * no border. It offers a single slot for text.
+ *
+ * Set the size of the [TextButton] with [Modifier.touchTargetAwareSize]
+ * to ensure that the recommended minimum touch target size is available.
+ *
+ * The recommended [TextButton] sizes are [TextButtonDefaults.DefaultButtonSize],
+ * [TextButtonDefaults.LargeButtonSize], [TextButtonDefaults.SmallButtonSize] and
+ * [TextButtonDefaults.ExtraSmallButtonSize].
+ *
+ * The default [TextButton] has no border and a transparent background for low emphasis actions.
+ * For actions that require high emphasis, set [colors] to
+ * [TextButtonDefaults.filledTextButtonColors].
+ * For a medium-emphasis, outlined [TextButton], set [border] to
+ * [ButtonDefaults.outlinedButtonBorder].
+ * For a middle ground between outlined and filled, set [colors] to
+ * [TextButtonDefaults.filledTonalTextButtonColors].
+ *
+ * [TextButton] can be enabled or disabled. A disabled button will not respond to click events.
+ *
+ * TODO(b/261838497) Add Material3 samples and UX guidance links
+ *
+ * @param onClick Will be called when the user clicks the button.
+ * @param modifier Modifier to be applied to the button.
+ * @param enabled Controls the enabled state of the button. When `false`, this button will not
+ * be clickable.
+ * @param shape Defines the text button's shape. It is strongly recommended to use the default
+ * as this shape is a key characteristic of the Wear Material3 Theme.
+ * @param colors [TextButtonColors] that will be used to resolve the background and content color
+ * for this button in different states.
+ * @param border Optional [BorderStroke] that will be used to resolve the text button border in
+ * different states. See [ButtonDefaults.outlinedButtonBorder].
+ * @param interactionSource The [MutableInteractionSource] representing the stream of
+ * [Interaction]s for this Button. You can create and pass in your own remembered
+ * [MutableInteractionSource] if you want to observe [Interaction]s and customize the
+ * appearance / behavior of this Button in different [Interaction]s.
+ * @param content The content displayed on the text button, expected to be text or image.
+ */
+@Composable
+fun TextButton(
+ onClick: () -> Unit,
+ modifier: Modifier = Modifier,
+ enabled: Boolean = true,
+ shape: Shape = TextButtonDefaults.shape,
+ colors: TextButtonColors = TextButtonDefaults.textButtonColors(),
+ border: BorderStroke? = null,
+ interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
+ content: @Composable BoxScope.() -> Unit,
+) {
+ androidx.wear.compose.materialcore.Button(
+ onClick = onClick,
+ modifier.minimumInteractiveComponentSize(),
+ enabled = enabled,
+ backgroundColor = { colors.containerColor(enabled = it) },
+ interactionSource = interactionSource,
+ shape = shape,
+ border = { rememberUpdatedState(border) },
+ buttonSize = TextButtonDefaults.DefaultButtonSize,
+ content = provideScopeContent(
+ colors.contentColor(enabled = enabled),
+ MaterialTheme.typography.buttonMedium,
+ content
+ )
+ )
+}
+
+/**
+ * Contains the default values used by [TextButton].
+ */
+object TextButtonDefaults {
+ /**
+ * Recommended [Shape] for [TextButton].
+ */
+ val shape = CircleShape
+
+ /**
+ * Creates a [TextButtonColors] with the colors for a filled [TextButton]- by default, a
+ * colored background with a contrasting content color.
+ * If the text button is disabled then the colors will default to [ColorScheme.onSurface] with
+ * suitable alpha values applied.
+ *
+ * @param containerColor The background color of this text button when enabled
+ * @param contentColor The content color of this text button when enabled
+ */
+ @Composable
+ fun filledTextButtonColors(
+ containerColor: Color = MaterialTheme.colorScheme.primary,
+ contentColor: Color = MaterialTheme.colorScheme.onPrimary,
+ ): TextButtonColors {
+ return textButtonColors(
+ containerColor = containerColor,
+ contentColor = contentColor
+ )
+ }
+
+ /**
+ * Creates a [TextButtonColors] with the colors for a filled, tonal [TextButton]- by default,
+ * a muted colored background with a contrasting content color.
+ * If the text button is disabled then the colors will default to [ColorScheme.onSurface] with
+ * suitable alpha values applied.
+ *
+ * @param containerColor The background color of this text button when enabled
+ * @param contentColor The content color of this text button when enabled
+ */
+ @Composable
+ fun filledTonalTextButtonColors(
+ containerColor: Color = MaterialTheme.colorScheme.surface,
+ contentColor: Color = MaterialTheme.colorScheme.onSurface,
+ ): TextButtonColors {
+ return textButtonColors(
+ containerColor = containerColor,
+ contentColor = contentColor
+ )
+ }
+
+ /**
+ * Creates a [TextButtonColors] with the colors for an outlined [TextButton]- by default,
+ * a transparent background with contrasting content color. If the button is disabled,
+ * then the colors will default to [ColorScheme.onSurface] with suitable alpha values applied.
+ *
+ * @param contentColor The content color of this text button when enabled
+ */
+ @Composable
+ fun outlinedTextButtonColors(
+ contentColor: Color = MaterialTheme.colorScheme.onBackground,
+ ): TextButtonColors {
+ return textButtonColors(
+ containerColor = Color.Transparent,
+ contentColor = contentColor
+ )
+ }
+
+ /**
+ * Creates a [TextButtonColors] for a text button - by default, a transparent
+ * background with contrasting content color. If the button is disabled
+ * then the colors default to [ColorScheme.onSurface] with suitable alpha values applied.
+ *
+ * @param containerColor the background color of this text button when enabled
+ * @param contentColor the content color of this text button when enabled
+ * @param disabledContainerColor the background color of this text button when not enabled
+ * @param disabledContentColor the content color of this text button when not enabled
+ */
+ @Composable
+ fun textButtonColors(
+ containerColor: Color = Color.Transparent,
+ contentColor: Color = MaterialTheme.colorScheme.onBackground,
+ disabledContainerColor: Color = MaterialTheme.colorScheme.onSurface.copy(
+ alpha = DisabledBorderAndContainerAlpha
+ ),
+ disabledContentColor: Color = MaterialTheme.colorScheme.onSurface.copy(
+ alpha = ContentAlpha.disabled
+ )
+ ): TextButtonColors = TextButtonColors(
+ containerColor = containerColor,
+ contentColor = contentColor,
+ disabledContainerColor = disabledContainerColor,
+ disabledContentColor = disabledContentColor,
+ )
+
+ /**
+ * The recommended background size of an extra small, compact button.
+ * It is recommended to apply this size using [Modifier.touchTargetAwareSize].
+ */
+ val ExtraSmallButtonSize = 32.dp
+
+ /**
+ * The recommended size for a small button.
+ * It is recommended to apply this size using [Modifier.touchTargetAwareSize].
+ */
+ val SmallButtonSize = 48.dp
+
+ /**
+ * The default size applied for buttons.
+ * It is recommended to apply this size using [Modifier.touchTargetAwareSize].
+ */
+ val DefaultButtonSize = 52.dp
+
+ /**
+ * The recommended size for a large button.
+ * It is recommended to apply this size using [Modifier.touchTargetAwareSize].
+ */
+ val LargeButtonSize = 60.dp
+}
+
+/**
+ * Represents the container and content colors used in a text button in different states.
+ *
+ * See [TextButtonDefaults.filledTextButtonColors],
+ * [TextButtonDefaults.filledTonalTextButtonColors], [TextButtonDefaults.textButtonColors] and
+ * [TextButtonDefaults.outlinedTextButtonColors] for [TextButtonColors] with different levels
+ * of emphasis.
+ */
+@Immutable
+class TextButtonColors constructor(
+ private val containerColor: Color,
+ private val contentColor: Color,
+ private val disabledContainerColor: Color,
+ private val disabledContentColor: Color,
+) {
+ /**
+ * Represents the container color for this text button, depending on [enabled].
+ *
+ * @param enabled whether the text button is enabled
+ */
+ @Composable
+ internal fun containerColor(enabled: Boolean): State<Color> {
+ return rememberUpdatedState(if (enabled) containerColor else disabledContainerColor)
+ }
+
+ /**
+ * Represents the content color for this text button, depending on [enabled].
+ *
+ * @param enabled whether the text button is enabled
+ */
+ @Composable
+ internal fun contentColor(enabled: Boolean): State<Color> {
+ return rememberUpdatedState(if (enabled) contentColor else disabledContentColor)
+ }
+
+ override fun equals(other: Any?): Boolean {
+ if (this === other) return true
+ if (other == null || other !is TextButtonColors) return false
+
+ if (containerColor != other.containerColor) return false
+ if (contentColor != other.contentColor) return false
+ if (disabledContainerColor != other.disabledContainerColor) return false
+ if (disabledContentColor != other.disabledContentColor) return false
+
+ return true
+ }
+
+ override fun hashCode(): Int {
+ var result = containerColor.hashCode()
+ result = 31 * result + contentColor.hashCode()
+ result = 31 * result + disabledContainerColor.hashCode()
+ result = 31 * result + disabledContentColor.hashCode()
+
+ return result
+ }
+}
diff --git a/wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/TouchTargetAwareSize.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/TouchTargetAwareSize.kt
similarity index 100%
rename from wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/TouchTargetAwareSize.kt
rename to wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/TouchTargetAwareSize.kt
diff --git a/wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/Typography.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Typography.kt
similarity index 100%
rename from wear/compose/compose-material3/src/commonMain/kotlin/androidx/wear/compose/material3/Typography.kt
rename to wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Typography.kt
diff --git a/wear/compose/compose-navigation/api/current.txt b/wear/compose/compose-navigation/api/current.txt
index 49ccd87d..96ffadf 100644
--- a/wear/compose/compose-navigation/api/current.txt
+++ b/wear/compose/compose-navigation/api/current.txt
@@ -11,8 +11,8 @@
}
public final class SwipeDismissableNavHostKt {
- method @androidx.compose.runtime.Composable public static void SwipeDismissableNavHost(androidx.navigation.NavHostController navController, String startDestination, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.navigation.SwipeDismissableNavHostState state, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
method @androidx.compose.runtime.Composable public static void SwipeDismissableNavHost(androidx.navigation.NavHostController navController, androidx.navigation.NavGraph graph, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.navigation.SwipeDismissableNavHostState state);
+ method @androidx.compose.runtime.Composable public static void SwipeDismissableNavHost(androidx.navigation.NavHostController navController, String startDestination, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.navigation.SwipeDismissableNavHostState state, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
method @androidx.compose.runtime.Composable public static androidx.wear.compose.navigation.SwipeDismissableNavHostState rememberSwipeDismissableNavHostState(optional androidx.wear.compose.material.SwipeToDismissBoxState swipeToDismissBoxState);
}
diff --git a/wear/compose/compose-navigation/api/public_plus_experimental_current.txt b/wear/compose/compose-navigation/api/public_plus_experimental_current.txt
index 49ccd87d..96ffadf 100644
--- a/wear/compose/compose-navigation/api/public_plus_experimental_current.txt
+++ b/wear/compose/compose-navigation/api/public_plus_experimental_current.txt
@@ -11,8 +11,8 @@
}
public final class SwipeDismissableNavHostKt {
- method @androidx.compose.runtime.Composable public static void SwipeDismissableNavHost(androidx.navigation.NavHostController navController, String startDestination, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.navigation.SwipeDismissableNavHostState state, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
method @androidx.compose.runtime.Composable public static void SwipeDismissableNavHost(androidx.navigation.NavHostController navController, androidx.navigation.NavGraph graph, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.navigation.SwipeDismissableNavHostState state);
+ method @androidx.compose.runtime.Composable public static void SwipeDismissableNavHost(androidx.navigation.NavHostController navController, String startDestination, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.navigation.SwipeDismissableNavHostState state, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
method @androidx.compose.runtime.Composable public static androidx.wear.compose.navigation.SwipeDismissableNavHostState rememberSwipeDismissableNavHostState(optional androidx.wear.compose.material.SwipeToDismissBoxState swipeToDismissBoxState);
}
diff --git a/wear/compose/compose-navigation/api/restricted_current.txt b/wear/compose/compose-navigation/api/restricted_current.txt
index 49ccd87d..96ffadf 100644
--- a/wear/compose/compose-navigation/api/restricted_current.txt
+++ b/wear/compose/compose-navigation/api/restricted_current.txt
@@ -11,8 +11,8 @@
}
public final class SwipeDismissableNavHostKt {
- method @androidx.compose.runtime.Composable public static void SwipeDismissableNavHost(androidx.navigation.NavHostController navController, String startDestination, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.navigation.SwipeDismissableNavHostState state, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
method @androidx.compose.runtime.Composable public static void SwipeDismissableNavHost(androidx.navigation.NavHostController navController, androidx.navigation.NavGraph graph, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.navigation.SwipeDismissableNavHostState state);
+ method @androidx.compose.runtime.Composable public static void SwipeDismissableNavHost(androidx.navigation.NavHostController navController, String startDestination, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.navigation.SwipeDismissableNavHostState state, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
method @androidx.compose.runtime.Composable public static androidx.wear.compose.navigation.SwipeDismissableNavHostState rememberSwipeDismissableNavHostState(optional androidx.wear.compose.material.SwipeToDismissBoxState swipeToDismissBoxState);
}
diff --git a/wear/compose/compose-navigation/src/androidTest/kotlin/androidx/wear/compose/navigation/SwipeDismissableNavHostTest.kt b/wear/compose/compose-navigation/src/androidTest/kotlin/androidx/wear/compose/navigation/SwipeDismissableNavHostTest.kt
index 68f68b5..655e7bc 100644
--- a/wear/compose/compose-navigation/src/androidTest/kotlin/androidx/wear/compose/navigation/SwipeDismissableNavHostTest.kt
+++ b/wear/compose/compose-navigation/src/androidTest/kotlin/androidx/wear/compose/navigation/SwipeDismissableNavHostTest.kt
@@ -25,8 +25,8 @@
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.State
-import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.saveable.rememberSaveableStateHolder
import androidx.compose.runtime.setValue
diff --git a/wear/compose/compose-navigation/src/androidMain/baseline-prof.txt b/wear/compose/compose-navigation/src/main/baseline-prof.txt
similarity index 100%
rename from wear/compose/compose-navigation/src/androidMain/baseline-prof.txt
rename to wear/compose/compose-navigation/src/main/baseline-prof.txt
diff --git a/wear/compose/compose-navigation/src/main/java/androidx/wear/compose/navigation/SwipeDismissableNavHost.kt b/wear/compose/compose-navigation/src/main/java/androidx/wear/compose/navigation/SwipeDismissableNavHost.kt
index 1a5e97a..95f6fbe 100644
--- a/wear/compose/compose-navigation/src/main/java/androidx/wear/compose/navigation/SwipeDismissableNavHost.kt
+++ b/wear/compose/compose-navigation/src/main/java/androidx/wear/compose/navigation/SwipeDismissableNavHost.kt
@@ -25,10 +25,10 @@
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.setValue
import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.SaveableStateHolder
import androidx.compose.runtime.saveable.rememberSaveableStateHolder
+import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.lifecycle.Lifecycle
@@ -40,13 +40,13 @@
import androidx.navigation.NavGraphBuilder
import androidx.navigation.NavHostController
import androidx.navigation.Navigator
-import androidx.navigation.createGraph
import androidx.navigation.compose.LocalOwnersProvider
+import androidx.navigation.createGraph
import androidx.navigation.get
-import androidx.wear.compose.material.SwipeToDismissValue
import androidx.wear.compose.material.SwipeToDismissBox
import androidx.wear.compose.material.SwipeToDismissBoxState
import androidx.wear.compose.material.SwipeToDismissKeys
+import androidx.wear.compose.material.SwipeToDismissValue
import androidx.wear.compose.material.edgeSwipeToDismiss
import androidx.wear.compose.material.rememberSwipeToDismissBoxState
diff --git a/wear/compose/compose-navigation/src/main/java/androidx/wear/compose/navigation/SwipeDismissableNavHostController.kt b/wear/compose/compose-navigation/src/main/java/androidx/wear/compose/navigation/SwipeDismissableNavHostController.kt
index 6407471..42c64b5 100644
--- a/wear/compose/compose-navigation/src/main/java/androidx/wear/compose/navigation/SwipeDismissableNavHostController.kt
+++ b/wear/compose/compose-navigation/src/main/java/androidx/wear/compose/navigation/SwipeDismissableNavHostController.kt
@@ -16,10 +16,10 @@
package androidx.wear.compose.navigation
-import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.remember
import androidx.compose.runtime.State
+import androidx.compose.runtime.collectAsState
+import androidx.compose.runtime.remember
import androidx.navigation.NavBackStackEntry
import androidx.navigation.NavController
import androidx.navigation.NavHostController
diff --git a/wear/compose/compose-ui-tooling/build.gradle b/wear/compose/compose-ui-tooling/build.gradle
index 5c5e81d..a88ea8d 100644
--- a/wear/compose/compose-ui-tooling/build.gradle
+++ b/wear/compose/compose-ui-tooling/build.gradle
@@ -14,18 +14,15 @@
* limitations under the License.
*/
-import androidx.build.AndroidXComposePlugin
import androidx.build.LibraryType
plugins {
id("AndroidXPlugin")
id("AndroidXComposePlugin")
+ id("org.jetbrains.kotlin.android")
id("com.android.library")
}
-// Disable multi-platform.
-AndroidXComposePlugin.applyAndConfigureKotlinPlugin(project, /* isMultiplatformEnabled= */ false)
-
dependencies {
api("androidx.annotation:annotation:1.5.0")
diff --git a/wear/compose/compose-ui-tooling/src/commonMain/kotlin/androidx/wear/compose/ui/tooling/preview/WearPreviewDevices.kt b/wear/compose/compose-ui-tooling/src/main/java/androidx/wear/compose/ui/tooling/preview/WearPreviewDevices.kt
similarity index 100%
rename from wear/compose/compose-ui-tooling/src/commonMain/kotlin/androidx/wear/compose/ui/tooling/preview/WearPreviewDevices.kt
rename to wear/compose/compose-ui-tooling/src/main/java/androidx/wear/compose/ui/tooling/preview/WearPreviewDevices.kt
diff --git a/wear/compose/compose-ui-tooling/src/commonMain/kotlin/androidx/wear/compose/ui/tooling/preview/WearPreviewFontScales.kt b/wear/compose/compose-ui-tooling/src/main/java/androidx/wear/compose/ui/tooling/preview/WearPreviewFontScales.kt
similarity index 100%
rename from wear/compose/compose-ui-tooling/src/commonMain/kotlin/androidx/wear/compose/ui/tooling/preview/WearPreviewFontScales.kt
rename to wear/compose/compose-ui-tooling/src/main/java/androidx/wear/compose/ui/tooling/preview/WearPreviewFontScales.kt
diff --git a/wear/compose/compose-ui-tooling/src/commonMain/kotlin/androidx/wear/compose/ui/tooling/preview/WearPreviewLargeRound.kt b/wear/compose/compose-ui-tooling/src/main/java/androidx/wear/compose/ui/tooling/preview/WearPreviewLargeRound.kt
similarity index 100%
rename from wear/compose/compose-ui-tooling/src/commonMain/kotlin/androidx/wear/compose/ui/tooling/preview/WearPreviewLargeRound.kt
rename to wear/compose/compose-ui-tooling/src/main/java/androidx/wear/compose/ui/tooling/preview/WearPreviewLargeRound.kt
diff --git a/wear/compose/compose-ui-tooling/src/commonMain/kotlin/androidx/wear/compose/ui/tooling/preview/WearPreviewSmallRound.kt b/wear/compose/compose-ui-tooling/src/main/java/androidx/wear/compose/ui/tooling/preview/WearPreviewSmallRound.kt
similarity index 100%
rename from wear/compose/compose-ui-tooling/src/commonMain/kotlin/androidx/wear/compose/ui/tooling/preview/WearPreviewSmallRound.kt
rename to wear/compose/compose-ui-tooling/src/main/java/androidx/wear/compose/ui/tooling/preview/WearPreviewSmallRound.kt
diff --git a/wear/compose/compose-ui-tooling/src/commonMain/kotlin/androidx/wear/compose/ui/tooling/preview/WearPreviewSquare.kt b/wear/compose/compose-ui-tooling/src/main/java/androidx/wear/compose/ui/tooling/preview/WearPreviewSquare.kt
similarity index 100%
rename from wear/compose/compose-ui-tooling/src/commonMain/kotlin/androidx/wear/compose/ui/tooling/preview/WearPreviewSquare.kt
rename to wear/compose/compose-ui-tooling/src/main/java/androidx/wear/compose/ui/tooling/preview/WearPreviewSquare.kt
diff --git a/wear/compose/integration-tests/demos/build.gradle b/wear/compose/integration-tests/demos/build.gradle
index 478b99e..0d46a1e 100644
--- a/wear/compose/integration-tests/demos/build.gradle
+++ b/wear/compose/integration-tests/demos/build.gradle
@@ -63,6 +63,8 @@
implementation(project(":wear:compose:compose-foundation-samples"))
implementation(project(':wear:compose:compose-material'))
implementation(project(":wear:compose:compose-material-samples"))
+ implementation(project(':wear:compose:integration-tests:demos:common'))
+ implementation(project(":wear:compose:compose-material3-integration-tests"))
androidTestImplementation(project(":compose:ui:ui-test-junit4"))
androidTestImplementation(project(":emoji2:emoji2"))
diff --git a/wear/compose/integration-tests/demos/common/build.gradle b/wear/compose/integration-tests/demos/common/build.gradle
new file mode 100644
index 0000000..9e6cd01e
--- /dev/null
+++ b/wear/compose/integration-tests/demos/common/build.gradle
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+plugins {
+ id("AndroidXPlugin")
+ id("AndroidXComposePlugin")
+ id("com.android.library")
+ id("org.jetbrains.kotlin.android")
+}
+
+dependencies {
+ implementation(libs.kotlinStdlib)
+
+ api("androidx.activity:activity:1.2.0")
+ implementation(project(':wear:compose:compose-material'))
+
+}
+
+android {
+ defaultConfig {
+ minSdkVersion 25
+ }
+ namespace "androidx.wear.compose.integration.demos.common"
+}
diff --git a/wear/compose/integration-tests/demos/common/src/main/java/androidx/wear/compose/integration/demos/common/Demo.kt b/wear/compose/integration-tests/demos/common/src/main/java/androidx/wear/compose/integration/demos/common/Demo.kt
new file mode 100644
index 0000000..52a987a
--- /dev/null
+++ b/wear/compose/integration-tests/demos/common/src/main/java/androidx/wear/compose/integration/demos/common/Demo.kt
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.wear.compose.integration.demos.common
+
+import android.app.Activity
+import androidx.activity.ComponentActivity
+import androidx.compose.runtime.Composable
+import androidx.wear.compose.material.SwipeToDismissBoxState
+import kotlin.reflect.KClass
+
+/**
+ * Generic demo with a [title] that will be displayed in the list of demos.
+ */
+sealed class Demo(val title: String, val description: String? = null) {
+ override fun toString() = title
+}
+
+/**
+ * Demo that launches an [Activity] when selected.
+ *
+ * This should only be used for demos that need to customize the activity, the large majority of
+ * demos should just use [ComposableDemo] instead.
+ *
+ * @property activityClass the KClass (Foo::class) of the activity that will be launched when
+ * this demo is selected.
+ */
+class ActivityDemo<T : ComponentActivity>(title: String, val activityClass: KClass<T>) : Demo(title)
+
+/**
+ * A category of [Demo]s, that will display a list of [demos] when selected.
+ */
+class DemoCategory(
+ title: String,
+ val demos: List<Demo>
+) : Demo(title)
+
+/**
+ * Parameters which are used by [Demo] screens.
+ */
+class DemoParameters(
+ val navigateBack: () -> Unit,
+ val swipeToDismissBoxState: SwipeToDismissBoxState
+)
+
+/**
+ * Demo that displays [Composable] [content] when selected,
+ * with a method to navigate back to the parent.
+ */
+class ComposableDemo(
+ title: String,
+ description: String? = null,
+ val content: @Composable (params: DemoParameters) -> Unit,
+) : Demo(title, description)
diff --git a/wear/compose/integration-tests/demos/src/androidTest/java/androidx/wear/compose/integration/demos/test/DemoTest.kt b/wear/compose/integration-tests/demos/src/androidTest/java/androidx/wear/compose/integration/demos/test/DemoTest.kt
index 9fe82bca..646addf 100644
--- a/wear/compose/integration-tests/demos/src/androidTest/java/androidx/wear/compose/integration/demos/test/DemoTest.kt
+++ b/wear/compose/integration-tests/demos/src/androidTest/java/androidx/wear/compose/integration/demos/test/DemoTest.kt
@@ -28,10 +28,10 @@
import androidx.test.espresso.Espresso
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
-import androidx.wear.compose.integration.demos.Demo
import androidx.wear.compose.integration.demos.DemoActivity
-import androidx.wear.compose.integration.demos.DemoCategory
import androidx.wear.compose.integration.demos.WearComposeDemos
+import androidx.wear.compose.integration.demos.common.Demo
+import androidx.wear.compose.integration.demos.common.DemoCategory
import com.google.common.truth.Truth.assertThat
import org.junit.Ignore
import org.junit.Rule
diff --git a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/DemoActivity.kt b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/DemoActivity.kt
index 361fb0e..7de734f 100644
--- a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/DemoActivity.kt
+++ b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/DemoActivity.kt
@@ -36,6 +36,9 @@
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.platform.LocalView
import androidx.core.app.ActivityCompat
+import androidx.wear.compose.integration.demos.common.ActivityDemo
+import androidx.wear.compose.integration.demos.common.Demo
+import androidx.wear.compose.integration.demos.common.DemoCategory
import androidx.wear.compose.material.MaterialTheme
/**
diff --git a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/DemoApp.kt b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/DemoApp.kt
index 108b9ad..7e6aa69 100644
--- a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/DemoApp.kt
+++ b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/DemoApp.kt
@@ -32,7 +32,6 @@
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
-import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
import androidx.compose.ui.composed
import androidx.compose.ui.focus.FocusRequester
@@ -49,6 +48,11 @@
import androidx.wear.compose.foundation.lazy.ScalingLazyListState
import androidx.wear.compose.foundation.lazy.ScalingParams
import androidx.wear.compose.foundation.lazy.rememberScalingLazyListState
+import androidx.wear.compose.integration.demos.common.ActivityDemo
+import androidx.wear.compose.integration.demos.common.ComposableDemo
+import androidx.wear.compose.integration.demos.common.Demo
+import androidx.wear.compose.integration.demos.common.DemoCategory
+import androidx.wear.compose.integration.demos.common.DemoParameters
import androidx.wear.compose.material.Chip
import androidx.wear.compose.material.ChipDefaults
import androidx.wear.compose.material.ListHeader
@@ -154,13 +158,13 @@
modifier = Modifier.fillMaxWidth()
)
}
- if (demo.description != null) {
+ demo.description?.let { description ->
item {
CompositionLocalProvider(
LocalTextStyle provides MaterialTheme.typography.caption3
) {
Text(
- text = demo.description,
+ text = description,
modifier = Modifier.fillMaxWidth().align(Alignment.Center),
textAlign = TextAlign.Center
)
@@ -187,7 +191,6 @@
internal data class TimestampedDelta(val time: Long, val delta: Float)
-@OptIn(ExperimentalComposeUiApi::class)
@Suppress("ComposableModifierFactory")
@Composable
fun Modifier.rsbScroll(
diff --git a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/DemoComponents.kt b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/DemoComponents.kt
index ea5174c..4876340 100644
--- a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/DemoComponents.kt
+++ b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/DemoComponents.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2021 The Android Open Source Project
+ * Copyright 2023 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.
@@ -16,8 +16,6 @@
package androidx.wear.compose.integration.demos
-import android.app.Activity
-import androidx.activity.ComponentActivity
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
@@ -43,53 +41,7 @@
import androidx.wear.compose.material.Icon
import androidx.wear.compose.material.LocalContentAlpha
import androidx.wear.compose.material.MaterialTheme
-import androidx.wear.compose.material.SwipeToDismissBoxState
import androidx.wear.compose.material.Text
-import kotlin.reflect.KClass
-
-/**
- * Generic demo with a [title] that will be displayed in the list of demos.
- */
-sealed class Demo(val title: String, val description: String? = null) {
- override fun toString() = title
-}
-
-/**
- * Demo that launches an [Activity] when selected.
- *
- * This should only be used for demos that need to customize the activity, the large majority of
- * demos should just use [ComposableDemo] instead.
- *
- * @property activityClass the KClass (Foo::class) of the activity that will be launched when
- * this demo is selected.
- */
-class ActivityDemo<T : ComponentActivity>(title: String, val activityClass: KClass<T>) : Demo(title)
-
-/**
- * A category of [Demo]s, that will display a list of [demos] when selected.
- */
-class DemoCategory(
- title: String,
- val demos: List<Demo>
-) : Demo(title)
-
-/**
- * Parameters which are used by [Demo] screens.
- */
-class DemoParameters(
- val navigateBack: () -> Unit,
- val swipeToDismissBoxState: SwipeToDismissBoxState
-)
-
-/**
- * Demo that displays [Composable] [content] when selected,
- * with a method to navigate back to the parent.
- */
-class ComposableDemo(
- title: String,
- description: String? = null,
- val content: @Composable (params: DemoParameters) -> Unit,
-) : Demo(title, description)
/**
* A simple [Icon] with default size
diff --git a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/Demos.kt b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/Demos.kt
index 6fa889e..8efc582 100644
--- a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/Demos.kt
+++ b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/Demos.kt
@@ -23,7 +23,10 @@
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.style.TextAlign
+import androidx.wear.compose.integration.demos.common.ComposableDemo
+import androidx.wear.compose.integration.demos.common.DemoCategory
import androidx.wear.compose.material.Text
+import androidx.wear.compose.material3.demos.WearMaterial3Demos
val Info = DemoCategory(
"App Info",
@@ -56,6 +59,7 @@
listOf(
WearFoundationDemos,
WearMaterialDemos,
+ WearMaterial3Demos,
Info
)
)
diff --git a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/FoundationDemos.kt b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/FoundationDemos.kt
index 00e8d98..730a272 100644
--- a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/FoundationDemos.kt
+++ b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/FoundationDemos.kt
@@ -17,8 +17,8 @@
package androidx.wear.compose.integration.demos
import androidx.wear.compose.foundation.samples.CurvedAndNormalText
-import androidx.wear.compose.foundation.samples.CurvedBottomLayout
import androidx.wear.compose.foundation.samples.CurvedBackground
+import androidx.wear.compose.foundation.samples.CurvedBottomLayout
import androidx.wear.compose.foundation.samples.CurvedFixedSize
import androidx.wear.compose.foundation.samples.CurvedFontWeight
import androidx.wear.compose.foundation.samples.CurvedFonts
@@ -34,6 +34,8 @@
import androidx.wear.compose.foundation.samples.SimpleScalingLazyColumnWithContentPadding
import androidx.wear.compose.foundation.samples.SimpleScalingLazyColumnWithSnap
import androidx.wear.compose.foundation.samples.SwipeToRevealWithExpandables
+import androidx.wear.compose.integration.demos.common.ComposableDemo
+import androidx.wear.compose.integration.demos.common.DemoCategory
val WearFoundationDemos = DemoCategory(
"Foundation",
diff --git a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/MaterialDemos.kt b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/MaterialDemos.kt
index 45ecbf2..82d84b9 100644
--- a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/MaterialDemos.kt
+++ b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/MaterialDemos.kt
@@ -27,6 +27,8 @@
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp
+import androidx.wear.compose.integration.demos.common.ComposableDemo
+import androidx.wear.compose.integration.demos.common.DemoCategory
import androidx.wear.compose.material.samples.AlertDialogSample
import androidx.wear.compose.material.samples.AlertWithButtons
import androidx.wear.compose.material.samples.AlertWithChips
@@ -36,9 +38,9 @@
import androidx.wear.compose.material.samples.ButtonWithIcon
import androidx.wear.compose.material.samples.ButtonWithText
import androidx.wear.compose.material.samples.ChipWithIconAndLabel
-import androidx.wear.compose.material.samples.ChipWithIconAndLabelsAndOverlaidPlaceholder
import androidx.wear.compose.material.samples.ChipWithIconAndLabelAndPlaceholders
import androidx.wear.compose.material.samples.ChipWithIconAndLabels
+import androidx.wear.compose.material.samples.ChipWithIconAndLabelsAndOverlaidPlaceholder
import androidx.wear.compose.material.samples.CircularProgressIndicatorFullscreenWithGap
import androidx.wear.compose.material.samples.CircularProgressIndicatorWithAnimation
import androidx.wear.compose.material.samples.CompactButtonWithIcon
diff --git a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/ScrollingWithRotaryInputDemo.kt b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/ScrollingWithRotaryInputDemo.kt
index 7153372..33c1b57 100644
--- a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/ScrollingWithRotaryInputDemo.kt
+++ b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/ScrollingWithRotaryInputDemo.kt
@@ -26,6 +26,7 @@
import androidx.compose.ui.samples.PreRotaryEventSample
import androidx.compose.ui.samples.RotaryEventSample
import androidx.compose.ui.unit.dp
+import androidx.wear.compose.integration.demos.common.ComposableDemo
import androidx.wear.compose.material.Text
internal val RotaryInputDemos = listOf(
diff --git a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/SwipeToDismissDemoWithState.kt b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/SwipeToDismissDemoWithState.kt
index 1f4bef8..2e61b3f 100644
--- a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/SwipeToDismissDemoWithState.kt
+++ b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/SwipeToDismissDemoWithState.kt
@@ -33,8 +33,8 @@
import androidx.compose.ui.Modifier
import androidx.wear.compose.material.Button
import androidx.wear.compose.material.MaterialTheme
-import androidx.wear.compose.material.SwipeToDismissValue
import androidx.wear.compose.material.SwipeToDismissBox
+import androidx.wear.compose.material.SwipeToDismissValue
import androidx.wear.compose.material.Text
import androidx.wear.compose.material.ToggleButton
import androidx.wear.compose.material.rememberSwipeToDismissBoxState
diff --git a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/SwipeToRevealDemo.kt b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/SwipeToRevealDemo.kt
index e0f9d24..0d06716 100644
--- a/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/SwipeToRevealDemo.kt
+++ b/wear/compose/integration-tests/demos/src/main/java/androidx/wear/compose/integration/demos/SwipeToRevealDemo.kt
@@ -47,21 +47,21 @@
import androidx.wear.compose.foundation.ExpandableState
import androidx.wear.compose.foundation.ExperimentalWearFoundationApi
import androidx.wear.compose.foundation.RevealScope
+import androidx.wear.compose.foundation.RevealState
+import androidx.wear.compose.foundation.RevealValue
+import androidx.wear.compose.foundation.SwipeToReveal
+import androidx.wear.compose.foundation.createAnchors
import androidx.wear.compose.foundation.expandableItem
import androidx.wear.compose.foundation.fractionalPositionalThreshold
import androidx.wear.compose.foundation.lazy.ScalingLazyColumn
import androidx.wear.compose.foundation.rememberExpandableState
+import androidx.wear.compose.foundation.rememberRevealState
import androidx.wear.compose.material.AppCard
import androidx.wear.compose.material.Chip
import androidx.wear.compose.material.ChipDefaults
import androidx.wear.compose.material.Icon
import androidx.wear.compose.material.MaterialTheme
-import androidx.wear.compose.foundation.SwipeToReveal
-import androidx.wear.compose.foundation.RevealState
-import androidx.wear.compose.foundation.RevealValue
import androidx.wear.compose.material.Text
-import androidx.wear.compose.foundation.createAnchors
-import androidx.wear.compose.foundation.rememberRevealState
import kotlin.math.abs
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.delay
diff --git a/wear/compose/integration-tests/macrobenchmark-target/src/main/java/androidx/wear/compose/integration/macrobenchmark/target/StartupActivity.kt b/wear/compose/integration-tests/macrobenchmark-target/src/main/java/androidx/wear/compose/integration/macrobenchmark/target/StartupActivity.kt
index 315a00a..db764c8 100644
--- a/wear/compose/integration-tests/macrobenchmark-target/src/main/java/androidx/wear/compose/integration/macrobenchmark/target/StartupActivity.kt
+++ b/wear/compose/integration-tests/macrobenchmark-target/src/main/java/androidx/wear/compose/integration/macrobenchmark/target/StartupActivity.kt
@@ -16,8 +16,8 @@
package androidx.wear.compose.integration.macrobenchmark.target
-import androidx.activity.ComponentActivity
import android.os.Bundle
+import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.wear.compose.material.Text
diff --git a/wear/compose/integration-tests/macrobenchmark-target/src/main/java/androidx/wear/compose/integration/macrobenchmark/target/SwipeActivity.kt b/wear/compose/integration-tests/macrobenchmark-target/src/main/java/androidx/wear/compose/integration/macrobenchmark/target/SwipeActivity.kt
index 1b3ae2f..26990fc 100644
--- a/wear/compose/integration-tests/macrobenchmark-target/src/main/java/androidx/wear/compose/integration/macrobenchmark/target/SwipeActivity.kt
+++ b/wear/compose/integration-tests/macrobenchmark-target/src/main/java/androidx/wear/compose/integration/macrobenchmark/target/SwipeActivity.kt
@@ -16,8 +16,8 @@
package androidx.wear.compose.integration.macrobenchmark.target
-import androidx.activity.ComponentActivity
import android.os.Bundle
+import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
@@ -29,8 +29,8 @@
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.semantics.contentDescription
import androidx.compose.ui.semantics.semantics
-import androidx.wear.compose.material.SwipeToDismissValue
import androidx.wear.compose.material.SwipeToDismissBox
+import androidx.wear.compose.material.SwipeToDismissValue
import androidx.wear.compose.material.Text
import androidx.wear.compose.material.rememberSwipeToDismissBoxState
diff --git a/wear/protolayout/protolayout-expression-pipeline/api/current.txt b/wear/protolayout/protolayout-expression-pipeline/api/current.txt
index 18e01b6..cc787d5 100644
--- a/wear/protolayout/protolayout-expression-pipeline/api/current.txt
+++ b/wear/protolayout/protolayout-expression-pipeline/api/current.txt
@@ -24,17 +24,17 @@
public static final class DynamicTypeEvaluator.Config {
method public androidx.wear.protolayout.expression.pipeline.QuotaManager? getAnimationQuotaManager();
method public androidx.wear.protolayout.expression.pipeline.QuotaManager? getDynamicTypesQuotaManager();
- method public androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway? getSensorGateway();
+ method public java.util.Map<androidx.wear.protolayout.expression.PlatformDataKey<?>!,androidx.wear.protolayout.expression.pipeline.PlatformDataProvider!> getPlatformDataProviders();
method public androidx.wear.protolayout.expression.pipeline.StateStore? getStateStore();
method public androidx.wear.protolayout.expression.pipeline.TimeGateway? getTimeGateway();
}
public static final class DynamicTypeEvaluator.Config.Builder {
ctor public DynamicTypeEvaluator.Config.Builder();
+ method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config.Builder addPlatformDataProvider(androidx.wear.protolayout.expression.pipeline.PlatformDataProvider, java.util.Set<androidx.wear.protolayout.expression.PlatformDataKey<?>!>);
method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config build();
method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config.Builder setAnimationQuotaManager(androidx.wear.protolayout.expression.pipeline.QuotaManager);
method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config.Builder setDynamicTypesQuotaManager(androidx.wear.protolayout.expression.pipeline.QuotaManager);
- method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config.Builder setSensorGateway(androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway);
method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config.Builder setStateStore(androidx.wear.protolayout.expression.pipeline.StateStore);
method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config.Builder setTimeGateway(androidx.wear.protolayout.expression.pipeline.TimeGateway);
}
@@ -48,15 +48,25 @@
method public void onInvalidated();
}
+ public interface PlatformDataProvider {
+ method public void registerForData(java.util.concurrent.Executor, androidx.wear.protolayout.expression.pipeline.PlatformDataReceiver);
+ method public void unregisterForData();
+ }
+
+ public interface PlatformDataReceiver {
+ method public void onData(java.util.Map<androidx.wear.protolayout.expression.PlatformDataKey<?>!,androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue!>);
+ method public void onInvalidated(java.util.Set<androidx.wear.protolayout.expression.PlatformDataKey<?>!>);
+ }
+
public interface QuotaManager {
method public void releaseQuota(int);
method public boolean tryAcquireQuota(int);
}
public class StateStore {
- method public static androidx.wear.protolayout.expression.pipeline.StateStore create(java.util.Map<java.lang.String!,androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue!>);
- method @UiThread public void setStateEntryValues(java.util.Map<java.lang.String!,androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue!>);
- field public static final int MAX_STATE_ENTRY_COUNT = 100; // 0x64
+ method public static androidx.wear.protolayout.expression.pipeline.StateStore create(java.util.Map<androidx.wear.protolayout.expression.AppDataKey<?>!,androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue!>);
+ method public static int getMaxStateEntryCount();
+ method @UiThread public void setAppStateEntryValues(java.util.Map<androidx.wear.protolayout.expression.AppDataKey<?>!,androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue!>);
}
public interface TimeGateway {
@@ -71,22 +81,3 @@
}
-package androidx.wear.protolayout.expression.pipeline.sensor {
-
- public interface SensorGateway {
- method @UiThread public void registerSensorGatewayConsumer(int, androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway.Consumer);
- method @UiThread public void registerSensorGatewayConsumer(int, java.util.concurrent.Executor, androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway.Consumer);
- method @UiThread public void unregisterSensorGatewayConsumer(int, androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway.Consumer);
- field @RequiresApi(android.os.Build.VERSION_CODES.Q) @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) public static final int SENSOR_DATA_TYPE_DAILY_STEP_COUNT = 1; // 0x1
- field @RequiresPermission(android.Manifest.permission.BODY_SENSORS) public static final int SENSOR_DATA_TYPE_HEART_RATE = 0; // 0x0
- field public static final int SENSOR_DATA_TYPE_INVALID = -1; // 0xffffffff
- }
-
- public static interface SensorGateway.Consumer {
- method @AnyThread public void onData(double);
- method @AnyThread public default void onInvalidated();
- method @AnyThread public default void onPreUpdate();
- }
-
-}
-
diff --git a/wear/protolayout/protolayout-expression-pipeline/api/public_plus_experimental_current.txt b/wear/protolayout/protolayout-expression-pipeline/api/public_plus_experimental_current.txt
index 18e01b6..cc787d5 100644
--- a/wear/protolayout/protolayout-expression-pipeline/api/public_plus_experimental_current.txt
+++ b/wear/protolayout/protolayout-expression-pipeline/api/public_plus_experimental_current.txt
@@ -24,17 +24,17 @@
public static final class DynamicTypeEvaluator.Config {
method public androidx.wear.protolayout.expression.pipeline.QuotaManager? getAnimationQuotaManager();
method public androidx.wear.protolayout.expression.pipeline.QuotaManager? getDynamicTypesQuotaManager();
- method public androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway? getSensorGateway();
+ method public java.util.Map<androidx.wear.protolayout.expression.PlatformDataKey<?>!,androidx.wear.protolayout.expression.pipeline.PlatformDataProvider!> getPlatformDataProviders();
method public androidx.wear.protolayout.expression.pipeline.StateStore? getStateStore();
method public androidx.wear.protolayout.expression.pipeline.TimeGateway? getTimeGateway();
}
public static final class DynamicTypeEvaluator.Config.Builder {
ctor public DynamicTypeEvaluator.Config.Builder();
+ method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config.Builder addPlatformDataProvider(androidx.wear.protolayout.expression.pipeline.PlatformDataProvider, java.util.Set<androidx.wear.protolayout.expression.PlatformDataKey<?>!>);
method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config build();
method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config.Builder setAnimationQuotaManager(androidx.wear.protolayout.expression.pipeline.QuotaManager);
method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config.Builder setDynamicTypesQuotaManager(androidx.wear.protolayout.expression.pipeline.QuotaManager);
- method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config.Builder setSensorGateway(androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway);
method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config.Builder setStateStore(androidx.wear.protolayout.expression.pipeline.StateStore);
method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config.Builder setTimeGateway(androidx.wear.protolayout.expression.pipeline.TimeGateway);
}
@@ -48,15 +48,25 @@
method public void onInvalidated();
}
+ public interface PlatformDataProvider {
+ method public void registerForData(java.util.concurrent.Executor, androidx.wear.protolayout.expression.pipeline.PlatformDataReceiver);
+ method public void unregisterForData();
+ }
+
+ public interface PlatformDataReceiver {
+ method public void onData(java.util.Map<androidx.wear.protolayout.expression.PlatformDataKey<?>!,androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue!>);
+ method public void onInvalidated(java.util.Set<androidx.wear.protolayout.expression.PlatformDataKey<?>!>);
+ }
+
public interface QuotaManager {
method public void releaseQuota(int);
method public boolean tryAcquireQuota(int);
}
public class StateStore {
- method public static androidx.wear.protolayout.expression.pipeline.StateStore create(java.util.Map<java.lang.String!,androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue!>);
- method @UiThread public void setStateEntryValues(java.util.Map<java.lang.String!,androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue!>);
- field public static final int MAX_STATE_ENTRY_COUNT = 100; // 0x64
+ method public static androidx.wear.protolayout.expression.pipeline.StateStore create(java.util.Map<androidx.wear.protolayout.expression.AppDataKey<?>!,androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue!>);
+ method public static int getMaxStateEntryCount();
+ method @UiThread public void setAppStateEntryValues(java.util.Map<androidx.wear.protolayout.expression.AppDataKey<?>!,androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue!>);
}
public interface TimeGateway {
@@ -71,22 +81,3 @@
}
-package androidx.wear.protolayout.expression.pipeline.sensor {
-
- public interface SensorGateway {
- method @UiThread public void registerSensorGatewayConsumer(int, androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway.Consumer);
- method @UiThread public void registerSensorGatewayConsumer(int, java.util.concurrent.Executor, androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway.Consumer);
- method @UiThread public void unregisterSensorGatewayConsumer(int, androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway.Consumer);
- field @RequiresApi(android.os.Build.VERSION_CODES.Q) @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) public static final int SENSOR_DATA_TYPE_DAILY_STEP_COUNT = 1; // 0x1
- field @RequiresPermission(android.Manifest.permission.BODY_SENSORS) public static final int SENSOR_DATA_TYPE_HEART_RATE = 0; // 0x0
- field public static final int SENSOR_DATA_TYPE_INVALID = -1; // 0xffffffff
- }
-
- public static interface SensorGateway.Consumer {
- method @AnyThread public void onData(double);
- method @AnyThread public default void onInvalidated();
- method @AnyThread public default void onPreUpdate();
- }
-
-}
-
diff --git a/wear/protolayout/protolayout-expression-pipeline/api/restricted_current.txt b/wear/protolayout/protolayout-expression-pipeline/api/restricted_current.txt
index 6dd8857..a61bc5f 100644
--- a/wear/protolayout/protolayout-expression-pipeline/api/restricted_current.txt
+++ b/wear/protolayout/protolayout-expression-pipeline/api/restricted_current.txt
@@ -24,17 +24,17 @@
public static final class DynamicTypeEvaluator.Config {
method public androidx.wear.protolayout.expression.pipeline.QuotaManager? getAnimationQuotaManager();
method public androidx.wear.protolayout.expression.pipeline.QuotaManager? getDynamicTypesQuotaManager();
- method public androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway? getSensorGateway();
+ method public java.util.Map<androidx.wear.protolayout.expression.PlatformDataKey<?>!,androidx.wear.protolayout.expression.pipeline.PlatformDataProvider!> getPlatformDataProviders();
method public androidx.wear.protolayout.expression.pipeline.StateStore? getStateStore();
method public androidx.wear.protolayout.expression.pipeline.TimeGateway? getTimeGateway();
}
public static final class DynamicTypeEvaluator.Config.Builder {
ctor public DynamicTypeEvaluator.Config.Builder();
+ method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config.Builder addPlatformDataProvider(androidx.wear.protolayout.expression.pipeline.PlatformDataProvider, java.util.Set<androidx.wear.protolayout.expression.PlatformDataKey<?>!>);
method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config build();
method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config.Builder setAnimationQuotaManager(androidx.wear.protolayout.expression.pipeline.QuotaManager);
method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config.Builder setDynamicTypesQuotaManager(androidx.wear.protolayout.expression.pipeline.QuotaManager);
- method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config.Builder setSensorGateway(androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway);
method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config.Builder setStateStore(androidx.wear.protolayout.expression.pipeline.StateStore);
method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config.Builder setTimeGateway(androidx.wear.protolayout.expression.pipeline.TimeGateway);
}
@@ -48,17 +48,33 @@
method public void onInvalidated();
}
+ public interface PlatformDataProvider {
+ method public void registerForData(java.util.concurrent.Executor, androidx.wear.protolayout.expression.pipeline.PlatformDataReceiver);
+ method public void unregisterForData();
+ }
+
+ public interface PlatformDataReceiver {
+ method public void onData(java.util.Map<androidx.wear.protolayout.expression.PlatformDataKey<?>!,androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue!>);
+ method public void onInvalidated(java.util.Set<androidx.wear.protolayout.expression.PlatformDataKey<?>!>);
+ }
+
public interface QuotaManager {
method public void releaseQuota(int);
method public boolean tryAcquireQuota(int);
}
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class SensorGatewaySingleDataProvider implements androidx.wear.protolayout.expression.pipeline.PlatformDataProvider {
+ ctor public SensorGatewaySingleDataProvider(androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway, androidx.wear.protolayout.expression.PlatformDataKey<?>);
+ method public void registerForData(java.util.concurrent.Executor, androidx.wear.protolayout.expression.pipeline.PlatformDataReceiver);
+ method public void unregisterForData();
+ }
+
public class StateStore {
- ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public StateStore(java.util.Map<java.lang.String!,androidx.wear.protolayout.expression.proto.StateEntryProto.StateEntryValue!>);
- method public static androidx.wear.protolayout.expression.pipeline.StateStore create(java.util.Map<java.lang.String!,androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue!>);
- method @UiThread public void setStateEntryValues(java.util.Map<java.lang.String!,androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue!>);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @UiThread public void setStateEntryValuesProto(java.util.Map<java.lang.String!,androidx.wear.protolayout.expression.proto.StateEntryProto.StateEntryValue!>);
- field public static final int MAX_STATE_ENTRY_COUNT = 100; // 0x64
+ ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public StateStore(java.util.Map<androidx.wear.protolayout.expression.AppDataKey<?>!,androidx.wear.protolayout.expression.proto.DynamicDataProto.DynamicDataValue!>);
+ method public static androidx.wear.protolayout.expression.pipeline.StateStore create(java.util.Map<androidx.wear.protolayout.expression.AppDataKey<?>!,androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue!>);
+ method public static int getMaxStateEntryCount();
+ method @UiThread public void setAppStateEntryValues(java.util.Map<androidx.wear.protolayout.expression.AppDataKey<?>!,androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue!>);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @UiThread public void setAppStateEntryValuesProto(java.util.Map<androidx.wear.protolayout.expression.AppDataKey<?>!,androidx.wear.protolayout.expression.proto.DynamicDataProto.DynamicDataValue!>);
}
public interface TimeGateway {
@@ -75,15 +91,12 @@
package androidx.wear.protolayout.expression.pipeline.sensor {
- public interface SensorGateway {
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface SensorGateway {
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void disableUpdates();
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void enableUpdates();
- method @UiThread public void registerSensorGatewayConsumer(int, androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway.Consumer);
- method @UiThread public void registerSensorGatewayConsumer(int, java.util.concurrent.Executor, androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway.Consumer);
- method @UiThread public void unregisterSensorGatewayConsumer(int, androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway.Consumer);
- field @RequiresApi(android.os.Build.VERSION_CODES.Q) @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) public static final int SENSOR_DATA_TYPE_DAILY_STEP_COUNT = 1; // 0x1
- field @RequiresPermission(android.Manifest.permission.BODY_SENSORS) public static final int SENSOR_DATA_TYPE_HEART_RATE = 0; // 0x0
- field public static final int SENSOR_DATA_TYPE_INVALID = -1; // 0xffffffff
+ method @UiThread public void registerSensorGatewayConsumer(androidx.wear.protolayout.expression.PlatformDataKey<?>, androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway.Consumer);
+ method @UiThread public void registerSensorGatewayConsumer(androidx.wear.protolayout.expression.PlatformDataKey<?>, java.util.concurrent.Executor, androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway.Consumer);
+ method @UiThread public void unregisterSensorGatewayConsumer(androidx.wear.protolayout.expression.PlatformDataKey<?>, androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway.Consumer);
}
public static interface SensorGateway.Consumer {
diff --git a/wear/protolayout/protolayout-expression-pipeline/build.gradle b/wear/protolayout/protolayout-expression-pipeline/build.gradle
index d9db9ac..4f92627 100644
--- a/wear/protolayout/protolayout-expression-pipeline/build.gradle
+++ b/wear/protolayout/protolayout-expression-pipeline/build.gradle
@@ -50,7 +50,7 @@
}
androidx {
- name = "ProtoLayout Dynamic Expression Evaluation Pipeline"
+ name = "ProtoLayout Expression Pipeline"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2022"
description = "Evaluate dynamic expressions."
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/BoolNodes.java b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/BoolNodes.java
index c95560c..1651688 100644
--- a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/BoolNodes.java
+++ b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/BoolNodes.java
@@ -19,6 +19,7 @@
import android.util.Log;
import androidx.annotation.UiThread;
+import androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool;
import androidx.wear.protolayout.expression.proto.DynamicProto;
import androidx.wear.protolayout.expression.proto.DynamicProto.ComparisonFloatOp;
import androidx.wear.protolayout.expression.proto.DynamicProto.ComparisonInt32Op;
@@ -65,7 +66,8 @@
DynamicTypeValueReceiverWithPreUpdate<Boolean> downstream) {
super(
stateStore,
- protoNode.getSourceKey(),
+ StateSourceNode.<DynamicBool>createKey(
+ protoNode.getSourceNamespace(), protoNode.getSourceKey()),
se -> se.getBoolVal().getValue(),
downstream);
}
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/ColorNodes.java b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/ColorNodes.java
index 315eaf7..ed1d027 100644
--- a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/ColorNodes.java
+++ b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/ColorNodes.java
@@ -19,6 +19,7 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.UiThread;
+import androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor;
import androidx.wear.protolayout.expression.proto.AnimationParameterProto.AnimationSpec;
import androidx.wear.protolayout.expression.proto.DynamicProto.AnimatableFixedColor;
import androidx.wear.protolayout.expression.proto.DynamicProto.StateColorSource;
@@ -64,7 +65,8 @@
DynamicTypeValueReceiverWithPreUpdate<Integer> downstream) {
super(
stateStore,
- protoNode.getSourceKey(),
+ StateSourceNode.<DynamicColor>createKey(
+ protoNode.getSourceNamespace(), protoNode.getSourceKey()),
se -> se.getColorVal().getArgb(),
downstream);
}
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/DynamicTypeEvaluator.java b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/DynamicTypeEvaluator.java
index 3deccea..a247482 100644
--- a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/DynamicTypeEvaluator.java
+++ b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/DynamicTypeEvaluator.java
@@ -18,6 +18,7 @@
import static java.util.Collections.emptyMap;
+import android.annotation.SuppressLint;
import android.icu.util.ULocale;
import android.os.Handler;
import android.os.Looper;
@@ -26,7 +27,9 @@
import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.annotation.RestrictTo.Scope;
+import androidx.collection.ArrayMap;
import androidx.wear.protolayout.expression.DynamicBuilders;
+import androidx.wear.protolayout.expression.PlatformDataKey;
import androidx.wear.protolayout.expression.pipeline.BoolNodes.ComparisonFloatNode;
import androidx.wear.protolayout.expression.pipeline.BoolNodes.ComparisonInt32Node;
import androidx.wear.protolayout.expression.pipeline.BoolNodes.FixedBoolNode;
@@ -53,7 +56,7 @@
import androidx.wear.protolayout.expression.pipeline.Int32Nodes.FixedInt32Node;
import androidx.wear.protolayout.expression.pipeline.Int32Nodes.FloatToInt32Node;
import androidx.wear.protolayout.expression.pipeline.Int32Nodes.GetDurationPartOpNode;
-import androidx.wear.protolayout.expression.pipeline.Int32Nodes.PlatformInt32SourceNode;
+import androidx.wear.protolayout.expression.pipeline.Int32Nodes.LegacyPlatformInt32SourceNode;
import androidx.wear.protolayout.expression.pipeline.Int32Nodes.StateInt32SourceNode;
import androidx.wear.protolayout.expression.pipeline.StringNodes.FixedStringNode;
import androidx.wear.protolayout.expression.pipeline.StringNodes.FloatFormatNode;
@@ -82,6 +85,8 @@
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
import java.util.concurrent.Executor;
/**
@@ -133,27 +138,28 @@
@NonNull private final QuotaManager mAnimationQuotaManager;
@NonNull private final QuotaManager mDynamicTypesQuotaManager;
@NonNull private final EpochTimePlatformDataSource mTimeDataSource;
- @Nullable private final SensorGatewayPlatformDataSource mSensorGatewayDataSource;
/** Configuration for creating {@link DynamicTypeEvaluator}. */
public static final class Config {
@Nullable private final StateStore mStateStore;
@Nullable private final QuotaManager mAnimationQuotaManager;
@Nullable private final TimeGateway mTimeGateway;
- @Nullable private final SensorGateway mSensorGateway;
@Nullable private final QuotaManager mDynamicTypesQuotaManager;
+ @NonNull private final Map<PlatformDataKey<?>, PlatformDataProvider>
+ mSourceKeyToDataProviders = new ArrayMap<>();
Config(
@Nullable StateStore stateStore,
@Nullable QuotaManager animationQuotaManager,
@Nullable QuotaManager dynamicTypesQuotaManager,
@Nullable TimeGateway timeGateway,
- @Nullable SensorGateway sensorGateway) {
+ @NonNull Map<PlatformDataKey<?>, PlatformDataProvider>
+ sourceKeyToDataProviders) {
this.mStateStore = stateStore;
this.mAnimationQuotaManager = animationQuotaManager;
this.mTimeGateway = timeGateway;
- this.mSensorGateway = sensorGateway;
this.mDynamicTypesQuotaManager = dynamicTypesQuotaManager;
+ this.mSourceKeyToDataProviders.putAll(sourceKeyToDataProviders);
}
/** Builds a {@link DynamicTypeEvaluator.Config}. */
@@ -162,8 +168,8 @@
@Nullable private QuotaManager mAnimationQuotaManager = null;
@Nullable private QuotaManager mDynamicTypesQuotaManager;
@Nullable private TimeGateway mTimeGateway = null;
-
- @Nullable private SensorGateway mSensorGateway = null;
+ @NonNull private final Map<PlatformDataKey<?>, PlatformDataProvider>
+ mSourceKeyToDataProviders = new ArrayMap<>();
/**
* Sets the state store that will be used for dereferencing the state keys in the
@@ -216,14 +222,34 @@
}
/**
- * Sets the gateway used for sensor data.
+ * Add a platform data provider and specify the keys it can provide dynamic data for.
*
- * <p>If not set, sensor data will not be available (sensor bindings will trigger {@link
- * DynamicTypeValueReceiver#onInvalidated()}).
+ * <p> The provider must support at least one key. If the provider supports multiple
+ * keys, they should not be independent, as their values should always update together.
+ * One data key must not have multiple providers, or an exception will be thrown.
+ *
+ * @throws IllegalArgumentException If a PlatformDataProvider supports an empty key
+ * set or if a key has multiple data providers.
*/
+ @SuppressLint("MissingGetterMatchingBuilder")
@NonNull
- public Builder setSensorGateway(@NonNull SensorGateway value) {
- mSensorGateway = value;
+ public Builder addPlatformDataProvider(
+ @NonNull PlatformDataProvider platformDataProvider,
+ @NonNull Set<PlatformDataKey<?>> supportedDataKeys
+ ) {
+ if (supportedDataKeys.isEmpty()) {
+ throw new IllegalArgumentException(
+ "The PlatformDataProvider must support at least one key");
+ }
+ for (PlatformDataKey<?> dataKey : supportedDataKeys) {
+ // Throws exception when one data key has multiple providers.
+ if (mSourceKeyToDataProviders.containsKey(dataKey)) {
+ throw new IllegalArgumentException(String.format(
+ "Multiple data providers for PlatformDataKey (%s)", dataKey));
+ }
+ mSourceKeyToDataProviders.put(dataKey, platformDataProvider);
+ }
+
return this;
}
@@ -234,7 +260,7 @@
mAnimationQuotaManager,
mDynamicTypesQuotaManager,
mTimeGateway,
- mSensorGateway);
+ mSourceKeyToDataProviders);
}
}
@@ -269,15 +295,6 @@
}
/**
- * Gets the gateway used for sensor data, or {@code null} if sensor data is unavailable
- * (sensor bindings will trigger {@link DynamicTypeValueReceiver#onInvalidated()}).
- */
- @Nullable
- public SensorGateway getSensorGateway() {
- return mSensorGateway;
- }
-
- /**
* Gets the gateway used for time data, or {@code null} if a default 1hz {@link TimeGateway}
* that utilizes a main-thread {@code Handler} to trigger is used.
*/
@@ -285,6 +302,15 @@
public TimeGateway getTimeGateway() {
return mTimeGateway;
}
+
+ /**
+ * Returns any available mapping between source key and its data provider.
+ */
+ @NonNull
+ public Map<PlatformDataKey<?>, PlatformDataProvider> getPlatformDataProviders() {
+ return new ArrayMap<>(
+ (ArrayMap<PlatformDataKey<?>, PlatformDataProvider>) mSourceKeyToDataProviders);
+ }
}
/** Constructs a {@link DynamicTypeEvaluator}. */
@@ -307,12 +333,8 @@
((TimeGatewayImpl) timeGateway).enableUpdates();
}
this.mTimeDataSource = new EpochTimePlatformDataSource(uiExecutor, timeGateway);
- if (config.getSensorGateway() != null) {
- this.mSensorGatewayDataSource =
- new SensorGatewayPlatformDataSource(uiExecutor, config.getSensorGateway());
- } else {
- this.mSensorGatewayDataSource = null;
- }
+
+ this.mStateStore.putAllPlatformProviders(config.getPlatformDataProviders());
}
/**
@@ -528,10 +550,8 @@
}
case STATE_SOURCE:
{
- node =
- new StateStringNode(
- mStateStore, stringSource.getStateSource(), consumer);
- break;
+ node = new StateStringNode(mStateStore, stringSource.getStateSource(), consumer);
+ break;
}
case CONDITIONAL_OP:
{
@@ -595,13 +615,13 @@
case FIXED:
node = new FixedInt32Node(int32Source.getFixed(), consumer);
break;
- case PLATFORM_SOURCE:
- node =
- new PlatformInt32SourceNode(
- int32Source.getPlatformSource(),
- mSensorGatewayDataSource,
- consumer);
+ case PLATFORM_SOURCE: {
+ node = new LegacyPlatformInt32SourceNode(
+ mStateStore,
+ int32Source.getPlatformSource(),
+ consumer);
break;
+ }
case ARITHMETIC_OPERATION:
{
ArithmeticInt32Node arithmeticNode =
@@ -621,9 +641,8 @@
}
case STATE_SOURCE:
{
- node =
- new StateInt32SourceNode(
- mStateStore, int32Source.getStateSource(), consumer);
+ node = new StateInt32SourceNode(
+ mStateStore, int32Source.getStateSource(), consumer);
break;
}
case CONDITIONAL_OP:
@@ -819,9 +838,8 @@
node = new FixedFloatNode(floatSource.getFixed(), consumer);
break;
case STATE_SOURCE:
- node =
- new StateFloatSourceNode(
- mStateStore, floatSource.getStateSource(), consumer);
+ node = new StateFloatSourceNode(
+ mStateStore, floatSource.getStateSource(), consumer);
break;
case ARITHMETIC_OPERATION:
{
@@ -920,9 +938,8 @@
node = new FixedColorNode(colorSource.getFixed(), consumer);
break;
case STATE_SOURCE:
- node =
- new StateColorSourceNode(
- mStateStore, colorSource.getStateSource(), consumer);
+ node = new StateColorSourceNode(
+ mStateStore, colorSource.getStateSource(), consumer);
break;
case ANIMATABLE_FIXED:
// We don't have to check if enableAnimations is true, because if it's false and
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/FloatNodes.java b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/FloatNodes.java
index 71ddbd09..9ebd1b1 100644
--- a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/FloatNodes.java
+++ b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/FloatNodes.java
@@ -21,6 +21,7 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.UiThread;
+import androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat;
import androidx.wear.protolayout.expression.proto.AnimationParameterProto.AnimationSpec;
import androidx.wear.protolayout.expression.proto.DynamicProto.AnimatableFixedFloat;
import androidx.wear.protolayout.expression.proto.DynamicProto.ArithmeticFloatOp;
@@ -72,7 +73,8 @@
DynamicTypeValueReceiverWithPreUpdate<Float> downstream) {
super(
stateStore,
- protoNode.getSourceKey(),
+ StateSourceNode.<DynamicFloat>createKey(
+ protoNode.getSourceNamespace(), protoNode.getSourceKey()),
se -> se.getFloatVal().getValue(),
downstream);
}
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/Int32Nodes.java b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/Int32Nodes.java
index d542928..1d69a87 100644
--- a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/Int32Nodes.java
+++ b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/Int32Nodes.java
@@ -23,7 +23,11 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.UiThread;
+import androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32;
+import androidx.wear.protolayout.expression.DynamicDataKey;
+import androidx.wear.protolayout.expression.PlatformHealthSources;
import androidx.wear.protolayout.expression.proto.AnimationParameterProto.AnimationSpec;
+import androidx.wear.protolayout.expression.proto.DynamicDataProto.DynamicDataValue;
import androidx.wear.protolayout.expression.proto.DynamicProto.AnimatableFixedInt32;
import androidx.wear.protolayout.expression.proto.DynamicProto.ArithmeticInt32Op;
import androidx.wear.protolayout.expression.proto.DynamicProto.DurationPartType;
@@ -35,6 +39,7 @@
import androidx.wear.protolayout.expression.proto.FixedProto.FixedInt32;
import java.time.Duration;
+import java.util.function.Function;
/** Dynamic data nodes which yield integers. */
class Int32Nodes {
@@ -70,61 +75,46 @@
}
/** Dynamic integer node that gets value from the platform source. */
- static class PlatformInt32SourceNode implements DynamicDataSourceNode<Integer> {
- private static final String TAG = "PlatformInt32SourceNode";
+ static class LegacyPlatformInt32SourceNode extends StateSourceNode<Integer> {
- @Nullable private final SensorGatewayPlatformDataSource mSensorGatewaySource;
- private final PlatformInt32SourceType mPlatformSourceType;
- private final DynamicTypeValueReceiverWithPreUpdate<Integer> mDownstream;
-
- PlatformInt32SourceNode(
+ LegacyPlatformInt32SourceNode(
+ StateStore stateStore,
PlatformInt32Source protoNode,
- @Nullable SensorGatewayPlatformDataSource sensorGatewaySource,
DynamicTypeValueReceiverWithPreUpdate<Integer> downstream) {
- this.mPlatformSourceType = protoNode.getSourceType();
- if (mPlatformSourceType
- == PlatformInt32SourceType.PLATFORM_INT32_SOURCE_TYPE_CURRENT_HEART_RATE
- || mPlatformSourceType
- == PlatformInt32SourceType
- .PLATFORM_INT32_SOURCE_TYPE_DAILY_STEP_COUNT) {
- this.mSensorGatewaySource = sensorGatewaySource;
- } else {
- this.mSensorGatewaySource = null;
- Log.w(TAG, "Unknown PlatformInt32SourceType: " + mPlatformSourceType);
- }
- this.mDownstream = downstream;
+ super(
+ stateStore,
+ getDataKey(protoNode.getSourceType()),
+ getStateExtractor(protoNode.getSourceType()),
+ downstream);
}
- @Override
- @UiThread
- public void preInit() {
- if (mSensorGatewaySource != null) {
- mDownstream.onPreUpdate();
+ @NonNull
+ private static DynamicDataKey<?> getDataKey(PlatformInt32SourceType type) {
+ if (type == PlatformInt32SourceType.PLATFORM_INT32_SOURCE_TYPE_CURRENT_HEART_RATE) {
+ return PlatformHealthSources.HEART_RATE_BPM;
}
+
+ if (type == PlatformInt32SourceType.PLATFORM_INT32_SOURCE_TYPE_DAILY_STEP_COUNT) {
+ return PlatformHealthSources.DAILY_STEPS;
+ }
+
+ throw new IllegalArgumentException(
+ "Unknown DynamicInt32 platform source type: " + type);
}
- @Override
- @UiThread
- public void init() {
- if (mSensorGatewaySource != null) {
- try {
- mSensorGatewaySource.registerForData(mPlatformSourceType, mDownstream);
- } catch (SecurityException e) {
- // Package does not have the permission to request the health data.
- Log.w(TAG, e.getMessage(), e);
- mDownstream.onInvalidated();
- }
- } else {
- mDownstream.onInvalidated();
+ @NonNull
+ private static Function<DynamicDataValue, Integer> getStateExtractor(
+ PlatformInt32SourceType type) {
+ if (type == PlatformInt32SourceType.PLATFORM_INT32_SOURCE_TYPE_CURRENT_HEART_RATE) {
+ return se -> (int) se.getFloatVal().getValue();
}
- }
- @Override
- @UiThread
- public void destroy() {
- if (mSensorGatewaySource != null) {
- mSensorGatewaySource.unregisterForData(mPlatformSourceType, mDownstream);
+ if (type == PlatformInt32SourceType.PLATFORM_INT32_SOURCE_TYPE_DAILY_STEP_COUNT) {
+ return se -> se.getInt32Val().getValue();
}
+
+ throw new IllegalArgumentException(
+ "Unknown DynamicInt32 platform source type: " + type);
}
}
@@ -175,7 +165,8 @@
DynamicTypeValueReceiverWithPreUpdate<Integer> downstream) {
super(
stateStore,
- protoNode.getSourceKey(),
+ StateSourceNode.<DynamicInt32>createKey(
+ protoNode.getSourceNamespace(), protoNode.getSourceKey()),
se -> se.getInt32Val().getValue(),
downstream);
}
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/PlatformDataProvider.java b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/PlatformDataProvider.java
new file mode 100644
index 0000000..6380561
--- /dev/null
+++ b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/PlatformDataProvider.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.wear.protolayout.expression.pipeline;
+
+import androidx.annotation.NonNull;
+import androidx.wear.protolayout.expression.PlatformDataKey;
+
+import java.util.Map;
+import java.util.concurrent.Executor;
+
+/**
+ * This interface is used by platform data providers to yield dynamic data for their supported data
+ * keys.
+ *
+ * <p> It's up to the implementations to check if the expression provider has the required
+ * permission before sending data with {@link PlatformDataReceiver#onData(Map)} )}. If a required
+ * permission is not granted or is revoked they should stop sending more data and call
+ * {@link DynamicTypeValueReceiver#onInvalidated()} instead.
+ */
+public interface PlatformDataProvider {
+ /**
+ * Registers a callback for receiving the platform data from this provider.
+ *
+ * <p> The implementation should periodically send the dynamic data values for the set of
+ * {@link PlatformDataKey}s specified when registering this {@link PlatformDataProvider} in
+ * {@link DynamicTypeEvaluator.Config.Builder#addPlatformDataProvider}
+ */
+ void registerForData(@NonNull Executor executor, @NonNull PlatformDataReceiver callback);
+
+ /**
+ * Unregister from the provider.
+ */
+ void unregisterForData();
+}
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/PlatformDataReceiver.java b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/PlatformDataReceiver.java
new file mode 100644
index 0000000..f50e2a2
--- /dev/null
+++ b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/PlatformDataReceiver.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.wear.protolayout.expression.pipeline;
+
+import androidx.annotation.NonNull;
+import androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue;
+import androidx.wear.protolayout.expression.PlatformDataKey;
+
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Callback for receiving a PlatformDataProvider's new data.
+ */
+public interface PlatformDataReceiver {
+ /**
+ * Called when the registered data provider is sending new values.
+ */
+ void onData(@NonNull Map<PlatformDataKey<?>, DynamicDataValue> newData);
+
+ /** Called when the data provider has an invalid result. */
+ void onInvalidated(@NonNull Set<PlatformDataKey<?>> keys);
+}
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/SensorGatewayPlatformDataSource.java b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/SensorGatewayPlatformDataSource.java
deleted file mode 100644
index 9297ea7..0000000
--- a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/SensorGatewayPlatformDataSource.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright 2023 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
- *
- * http://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.
- */
-
-package androidx.wear.protolayout.expression.pipeline;
-
-import android.os.Build.VERSION;
-import android.os.Build.VERSION_CODES;
-
-import androidx.annotation.DoNotInline;
-import androidx.annotation.RequiresApi;
-import androidx.collection.ArrayMap;
-import androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway;
-import androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway.SensorDataType;
-import androidx.wear.protolayout.expression.proto.DynamicProto.PlatformInt32SourceType;
-
-import java.util.Map;
-import java.util.concurrent.Executor;
-
-/** Utility for sensor data source. */
-class SensorGatewayPlatformDataSource {
- private static final String TAG = "SensorGtwPltDataSource";
- final Executor mUiExecutor;
- private final SensorGateway mSensorGateway;
- private final Map<
- DynamicTypeValueReceiverWithPreUpdate<Integer>, SensorGateway.Consumer>
- mCallbackToRegisteredSensorConsumer = new ArrayMap<>();
-
- SensorGatewayPlatformDataSource(Executor uiExecutor, SensorGateway sensorGateway) {
- this.mUiExecutor = uiExecutor;
- this.mSensorGateway = sensorGateway;
- }
-
- @SensorDataType
- private static int mapSensorPlatformSource(PlatformInt32SourceType platformSource) {
- switch (platformSource) {
- case PLATFORM_INT32_SOURCE_TYPE_CURRENT_HEART_RATE:
- return SensorGateway.SENSOR_DATA_TYPE_HEART_RATE;
- case PLATFORM_INT32_SOURCE_TYPE_DAILY_STEP_COUNT:
- if (VERSION.SDK_INT >= VERSION_CODES.Q) {
- return Api29Impl.getSensorDataTypeDailyStepCount();
- } else {
- return SensorGateway.SENSOR_DATA_TYPE_INVALID;
- }
- default:
- throw new IllegalArgumentException("Unknown PlatformSourceType");
- }
- }
-
- @SuppressWarnings("ExecutorTaskName")
- public void registerForData(
- PlatformInt32SourceType sourceType,
- DynamicTypeValueReceiverWithPreUpdate<Integer> callback) {
- @SensorDataType int sensorDataType = mapSensorPlatformSource(sourceType);
- SensorGateway.Consumer sensorConsumer =
- new SensorGateway.Consumer() {
- @Override
- public void onPreUpdate() {
- mUiExecutor.execute(callback::onPreUpdate);
- }
-
- @Override
- public void onData(double value) {
- mUiExecutor.execute(() -> callback.onData((int) value));
- }
-
- @Override
- public void onInvalidated() {
- mUiExecutor.execute(callback::onInvalidated);
- }
- };
- mCallbackToRegisteredSensorConsumer.put(callback, sensorConsumer);
- mSensorGateway.registerSensorGatewayConsumer(sensorDataType, sensorConsumer);
- }
-
- public void unregisterForData(
- PlatformInt32SourceType sourceType,
- DynamicTypeValueReceiverWithPreUpdate<Integer> consumer) {
- @SensorDataType int sensorDataType = mapSensorPlatformSource(sourceType);
- SensorGateway.Consumer sensorConsumer = mCallbackToRegisteredSensorConsumer.get(consumer);
- if (sensorConsumer != null) {
- mSensorGateway.unregisterSensorGatewayConsumer(sensorDataType, sensorConsumer);
- }
- }
-
- @RequiresApi(VERSION_CODES.Q)
- private static class Api29Impl {
- @DoNotInline
- static int getSensorDataTypeDailyStepCount() {
- return SensorGateway.SENSOR_DATA_TYPE_DAILY_STEP_COUNT;
- }
- }
-}
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/SensorGatewaySingleDataProvider.java b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/SensorGatewaySingleDataProvider.java
new file mode 100644
index 0000000..564bab1
--- /dev/null
+++ b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/SensorGatewaySingleDataProvider.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.wear.protolayout.expression.pipeline;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.annotation.RestrictTo.Scope;
+import androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue;
+import androidx.wear.protolayout.expression.PlatformDataKey;
+import androidx.wear.protolayout.expression.PlatformHealthSources;
+import androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway;
+
+import java.util.Collections;
+import java.util.Map;
+import java.util.concurrent.Executor;
+import java.util.function.Function;
+
+/** This provider provides sensor data as state value. */
+@RestrictTo(Scope.LIBRARY_GROUP_PREFIX)
+public class SensorGatewaySingleDataProvider implements PlatformDataProvider {
+ @NonNull private final SensorGateway mSensorGateway;
+ @NonNull final PlatformDataKey<?> mSupportedKey;
+ @Nullable private SensorGateway.Consumer mSensorGatewayConsumer = null;
+
+ @NonNull Function<Double, DynamicDataValue> mConvertFunc;
+
+ public SensorGatewaySingleDataProvider(
+ @NonNull SensorGateway sensorGateway,
+ @NonNull PlatformDataKey<?> supportedKey
+ ) {
+ this.mSensorGateway = sensorGateway;
+ this.mSupportedKey = supportedKey;
+
+ if (mSupportedKey.equals(PlatformHealthSources.HEART_RATE_BPM)) {
+ mConvertFunc = value -> DynamicDataValue.fromFloat(value.floatValue());
+ } else { // mSupportedKey.equals(PlatformHealthSources.DAILY_STEPS)
+ mConvertFunc = value -> DynamicDataValue.fromInt(value.intValue());
+ }
+ }
+
+ @Override
+ @SuppressWarnings("HiddenTypeParameters")
+ public void registerForData(
+ @NonNull Executor executor, @NonNull PlatformDataReceiver callback) {
+ SensorGateway.Consumer sensorConsumer =
+ new SensorGateway.Consumer() {
+ @Override
+ public void onData(double value) {
+ executor.execute(() -> callback.onData(
+ Map.of(mSupportedKey, mConvertFunc.apply(value)))
+ );
+ }
+
+ @Override
+ public void onInvalidated() {
+ executor.execute(() -> callback.onInvalidated(
+ Collections.singleton(mSupportedKey)));
+ }
+ };
+ mSensorGatewayConsumer = sensorConsumer;
+ mSensorGateway.registerSensorGatewayConsumer(mSupportedKey, sensorConsumer);
+ }
+
+ @Override
+ public void unregisterForData() {
+ if (mSensorGatewayConsumer != null) {
+ mSensorGateway.unregisterSensorGatewayConsumer(mSupportedKey, mSensorGatewayConsumer);
+ mSensorGatewayConsumer = null;
+ }
+ }
+}
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/StateSourceNode.java b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/StateSourceNode.java
index 3645fef..ef45da0 100644
--- a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/StateSourceNode.java
+++ b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/StateSourceNode.java
@@ -18,25 +18,30 @@
import androidx.annotation.NonNull;
import androidx.annotation.UiThread;
-import androidx.wear.protolayout.expression.proto.StateEntryProto.StateEntryValue;
+import androidx.wear.protolayout.expression.DynamicBuilders.DynamicType;
+import androidx.wear.protolayout.expression.DynamicDataKey;
+import androidx.wear.protolayout.expression.PlatformDataKey;
+import androidx.wear.protolayout.expression.AppDataKey;
+import androidx.wear.protolayout.expression.proto.DynamicDataProto.DynamicDataValue;
import java.util.function.Function;
class StateSourceNode<T>
implements DynamicDataSourceNode<T>,
- DynamicTypeValueReceiverWithPreUpdate<StateEntryValue> {
+ DynamicTypeValueReceiverWithPreUpdate<DynamicDataValue> {
+ @NonNull private static final String RESERVED_NAMESPACE = "protolayout";
private final StateStore mStateStore;
- private final String mBindKey;
- private final Function<StateEntryValue, T> mStateExtractor;
+ private final DynamicDataKey<?> mKey;
+ private final Function<DynamicDataValue, T> mStateExtractor;
private final DynamicTypeValueReceiverWithPreUpdate<T> mDownstream;
StateSourceNode(
StateStore stateStore,
- String bindKey,
- Function<StateEntryValue, T> stateExtractor,
+ DynamicDataKey<?> key,
+ Function<DynamicDataValue, T> stateExtractor,
DynamicTypeValueReceiverWithPreUpdate<T> downstream) {
this.mStateStore = stateStore;
- this.mBindKey = bindKey;
+ this.mKey = key;
this.mStateExtractor = stateExtractor;
this.mDownstream = downstream;
}
@@ -50,8 +55,8 @@
@Override
@UiThread
public void init() {
- mStateStore.registerCallback(mBindKey, this);
- StateEntryValue item = mStateStore.getStateEntryValuesProto(mBindKey);
+ mStateStore.registerCallback(mKey, this);
+ DynamicDataValue item = mStateStore.getDynamicDataValuesProto(mKey);
if (item != null) {
this.onData(item);
@@ -63,7 +68,7 @@
@Override
@UiThread
public void destroy() {
- mStateStore.unregisterCallback(mBindKey, this);
+ mStateStore.unregisterCallback(mKey, this);
}
@Override
@@ -72,7 +77,7 @@
}
@Override
- public void onData(@NonNull StateEntryValue newData) {
+ public void onData(@NonNull DynamicDataValue newData) {
T actualValue = mStateExtractor.apply(newData);
mDownstream.onData(actualValue);
}
@@ -81,4 +86,18 @@
public void onInvalidated() {
mDownstream.onInvalidated();
}
+
+ @NonNull
+ static <T extends DynamicType> DynamicDataKey<T> createKey(
+ @NonNull String namespace, @NonNull String key) {
+ if (namespace.isEmpty()) {
+ return new AppDataKey<T>(key);
+ }
+
+ if (RESERVED_NAMESPACE.equalsIgnoreCase(namespace)) {
+ return new PlatformDataKey<T>(key);
+ }
+
+ return new PlatformDataKey<T>(namespace, key);
+ }
}
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/StateStore.java b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/StateStore.java
index f722bbb..bf65534 100644
--- a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/StateStore.java
+++ b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/StateStore.java
@@ -19,6 +19,8 @@
import static java.util.stream.Collectors.toMap;
import android.annotation.SuppressLint;
+import android.os.Handler;
+import android.os.Looper;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -26,13 +28,17 @@
import androidx.annotation.UiThread;
import androidx.collection.ArrayMap;
import androidx.collection.ArraySet;
-import androidx.wear.protolayout.expression.StateEntryBuilders;
-import androidx.wear.protolayout.expression.proto.StateEntryProto.StateEntryValue;
+import androidx.wear.protolayout.expression.AppDataKey;
+import androidx.wear.protolayout.expression.DynamicDataBuilders;
+import androidx.wear.protolayout.expression.DynamicDataKey;
+import androidx.wear.protolayout.expression.proto.DynamicDataProto.DynamicDataValue;
+import androidx.wear.protolayout.expression.PlatformDataKey;
import java.util.Collections;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
+import java.util.concurrent.Executor;
import java.util.stream.Stream;
/**
@@ -43,155 +49,320 @@
* must only be used from the UI thread.
*/
public class StateStore {
- /**
- * Maximum number for state entries allowed for this {@link StateStore}.
- *
- * <p>The ProtoLayout state model is not designed to handle large volumes of layout provided
- * state. So we limit the number of state entries to keep the on-the-wire size and state
- * store update times manageable.
- */
@SuppressLint("MinMaxConstant")
- public static final int MAX_STATE_ENTRY_COUNT = 100;
- @NonNull private final Map<String, StateEntryValue> mCurrentState = new ArrayMap<>();
+ private static final int MAX_STATE_ENTRY_COUNT = 30;
+
+ private final Executor mUiExecutor;
+ @NonNull private final Map<AppDataKey<?>, DynamicDataValue> mCurrentAppState
+ = new ArrayMap<>();
@NonNull
- private final Map<String, Set<DynamicTypeValueReceiverWithPreUpdate<StateEntryValue>>>
+ private final Map<PlatformDataKey<?>, DynamicDataValue> mCurrentPlatformData
+ = new ArrayMap<>();
+
+ @NonNull
+ private final
+ Map<DynamicDataKey<?>,
+ Set<DynamicTypeValueReceiverWithPreUpdate<DynamicDataValue>>>
mRegisteredCallbacks = new ArrayMap<>();
+ @NonNull
+ private final Map<PlatformDataKey<?>, PlatformDataProvider>
+ mSourceKeyToDataProviders = new ArrayMap<>();
+
+ @NonNull
+ private final Map<PlatformDataProvider, Integer> mProviderToRegisteredKeyCount
+ = new ArrayMap<>();
+
/**
* Creates a {@link StateStore}.
*
* @throws IllegalStateException if number of initialState entries is greater than
- * {@link StateStore#MAX_STATE_ENTRY_COUNT}.
+ * {@link StateStore#getMaxStateEntryCount()}.
*/
@NonNull
public static StateStore create(
- @NonNull Map<String, StateEntryBuilders.StateEntryValue> initialState) {
+ @NonNull Map<AppDataKey<?>, DynamicDataBuilders.DynamicDataValue>
+ initialState) {
return new StateStore(toProto(initialState));
}
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
- public StateStore(@NonNull Map<String, StateEntryValue> initialState) {
- if (initialState.size() > MAX_STATE_ENTRY_COUNT) {
+ public StateStore(
+ @NonNull Map<AppDataKey<?>, DynamicDataValue> initialState) {
+ if (initialState.size() > getMaxStateEntryCount()) {
throw stateTooLargeException(initialState.size());
}
- mCurrentState.putAll(initialState);
+ mCurrentAppState.putAll(initialState);
+ mUiExecutor = new MainThreadExecutor(new Handler(Looper.getMainLooper()));
+ }
+
+ void putAllPlatformProviders(
+ @NonNull Map<PlatformDataKey<?>, PlatformDataProvider> sourceKeyToDataProviders) {
+ mSourceKeyToDataProviders.putAll(sourceKeyToDataProviders);
}
/**
- * Sets the given state, replacing the current state.
+ * Sets the given app state, replacing the current app state.
*
* <p>Informs registered listeners of changed values, invalidates removed values.
*
* @throws IllegalStateException if number of state entries is greater than
- * {@link StateStore#MAX_STATE_ENTRY_COUNT}. The state will not update and old state entries
+ * {@link StateStore#getMaxStateEntryCount()}. The state will not update and old state entries
* will stay in place.
*/
@UiThread
- public void setStateEntryValues(
- @NonNull Map<String, StateEntryBuilders.StateEntryValue> newState) {
- setStateEntryValuesProto(toProto(newState));
+ public void setAppStateEntryValues(
+ @NonNull Map<AppDataKey<?>, DynamicDataBuilders.DynamicDataValue> newState) {
+ setAppStateEntryValuesProto(toProto(newState));
}
/**
- * Sets the given state, replacing the current state.
+ * Sets the given app state, replacing the current app state.
*
* <p>Informs registered listeners of changed values, invalidates removed values.
*
* @throws IllegalStateException if number of state entries is larger than
- * {@link StateStore#MAX_STATE_ENTRY_COUNT}. The state will not update and old state entries
+ * {@link StateStore#getMaxStateEntryCount()}. The state will not update and old state entries
* will stay in place.
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
@UiThread
- public void setStateEntryValuesProto(@NonNull Map<String, StateEntryValue> newState) {
- if (newState.size() > MAX_STATE_ENTRY_COUNT) {
+ public void setAppStateEntryValuesProto(
+ @NonNull Map<AppDataKey<?>, DynamicDataValue> newState) {
+ if (newState.size() > getMaxStateEntryCount()) {
throw stateTooLargeException(newState.size());
}
// Figure out which nodes have actually changed.
- Set<String> removedKeys = getRemovedKeys(newState);
- Map<String, StateEntryValue> changedEntries = getChangedEntries(newState);
+ Set<AppDataKey<?>> removedKeys = getRemovedAppKeys(newState);
+ Map<AppDataKey<?>, DynamicDataValue> changedEntries = getChangedAppEntries(newState);
Stream.concat(removedKeys.stream(), changedEntries.keySet().stream())
.forEach(
key -> {
- for (DynamicTypeValueReceiverWithPreUpdate<StateEntryValue> callback :
+ for (DynamicTypeValueReceiverWithPreUpdate<DynamicDataValue> callback :
mRegisteredCallbacks.getOrDefault(
key, Collections.emptySet())) {
callback.onPreUpdate();
}
});
- mCurrentState.clear();
- mCurrentState.putAll(newState);
+ mCurrentAppState.clear();
+ mCurrentAppState.putAll(newState);
- for (String key : removedKeys) {
- for (DynamicTypeValueReceiverWithPreUpdate<StateEntryValue> callback :
+ for (AppDataKey<?> key : removedKeys) {
+ for (DynamicTypeValueReceiverWithPreUpdate<DynamicDataValue> callback :
mRegisteredCallbacks.getOrDefault(key, Collections.emptySet())) {
callback.onInvalidated();
}
}
- for (Entry<String, StateEntryValue> entry : changedEntries.entrySet()) {
- for (DynamicTypeValueReceiverWithPreUpdate<StateEntryValue> callback :
+ for (Entry<AppDataKey<?>, DynamicDataValue> entry
+ : changedEntries.entrySet()) {
+ for (DynamicTypeValueReceiverWithPreUpdate<DynamicDataValue> callback :
mRegisteredCallbacks.getOrDefault(entry.getKey(), Collections.emptySet())) {
callback.onData(entry.getValue());
}
}
}
- /** Gets state with the given key. */
- @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
- @UiThread
- @Nullable
- public StateEntryValue getStateEntryValuesProto(@NonNull String key) {
- return mCurrentState.get(key);
+ /**
+ * Update the given platform data item.
+ *
+ * <p>Informs registered listeners of changed values.
+ */
+ void updatePlatformDataEntries(
+ @NonNull Map<PlatformDataKey<?>, DynamicDataBuilders.DynamicDataValue> newData) {
+ updatePlatformDataEntryProto(
+ newData.entrySet().stream().collect(
+ toMap(Entry::getKey, entry -> entry.getValue().toDynamicDataValueProto()))
+ );
}
/**
- * Registers the given callback for updates to the state for the given key.
+ * Update the given platform data item.
+ *
+ * <p>Informs registered listeners of changed values.
+ */
+ void updatePlatformDataEntryProto(
+ @NonNull Map<PlatformDataKey<?>, DynamicDataValue> newData) {
+ Map<PlatformDataKey<?>, DynamicDataValue> changedEntries = new ArrayMap<>();
+ for (Entry<PlatformDataKey<?>, DynamicDataValue> newEntry : newData.entrySet()) {
+ DynamicDataValue currentEntry = mCurrentPlatformData.get(newEntry.getKey());
+ if (currentEntry == null || !currentEntry.equals(newEntry.getValue())) {
+ changedEntries.put(newEntry.getKey(), newEntry.getValue());
+ }
+ }
+
+ for (Entry<PlatformDataKey<?>, DynamicDataValue> entry : changedEntries.entrySet()) {
+ for (DynamicTypeValueReceiverWithPreUpdate<DynamicDataValue> callback :
+ mRegisteredCallbacks.getOrDefault(entry.getKey(), Collections.emptySet())) {
+ callback.onPreUpdate();
+ }
+ }
+
+ for (Entry<PlatformDataKey<?>, DynamicDataValue> entry : changedEntries.entrySet()) {
+ for (DynamicTypeValueReceiverWithPreUpdate<DynamicDataValue> callback :
+ mRegisteredCallbacks.getOrDefault(entry.getKey(), Collections.emptySet())) {
+ callback.onData(entry.getValue());
+ }
+ mCurrentPlatformData.put(entry.getKey(), entry.getValue());
+ }
+ }
+
+ /**
+ * Remove the platform data item with the given key.
+ *
+ * <p>Informs registered listeners by invalidating removed values.
+ */
+ void removePlatformDataEntry(@NonNull Set<PlatformDataKey<?>> keys) {
+ for (PlatformDataKey<?> key : keys) {
+ if (mCurrentPlatformData.get(key) != null) {
+ for (DynamicTypeValueReceiverWithPreUpdate<DynamicDataValue> callback :
+ mRegisteredCallbacks.getOrDefault(key, Collections.emptySet())) {
+ callback.onPreUpdate();
+ }
+ }
+ }
+
+ for (PlatformDataKey<?> key : keys) {
+ if (mCurrentPlatformData.get(key) != null) {
+ for (DynamicTypeValueReceiverWithPreUpdate<DynamicDataValue> callback :
+ mRegisteredCallbacks.getOrDefault(key, Collections.emptySet())) {
+ callback.onInvalidated();
+ }
+ mCurrentPlatformData.remove(key);
+ }
+ }
+ }
+
+ /** Gets dynamic value with the given {@code key}. */
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ @UiThread
+ @Nullable
+ public DynamicDataValue getDynamicDataValuesProto(@NonNull DynamicDataKey<?> key) {
+ if (key instanceof AppDataKey) {
+ return mCurrentAppState.get(key);
+ }
+
+ if (key instanceof PlatformDataKey) {
+ return mCurrentPlatformData.get(key);
+ }
+
+ return null;
+ }
+
+ /**
+ * Registers the given callback for updates to the data item for the given {@code key}.
*
* <p>Note that the callback will be executed on the UI thread.
*/
@UiThread
void registerCallback(
- @NonNull String key,
- @NonNull DynamicTypeValueReceiverWithPreUpdate<StateEntryValue> callback) {
+ @NonNull DynamicDataKey<?> key,
+ @NonNull DynamicTypeValueReceiverWithPreUpdate<DynamicDataValue> callback) {
mRegisteredCallbacks.computeIfAbsent(key, k -> new ArraySet<>()).add(callback);
- }
- /** Unregisters from receiving the updates. */
- @UiThread
- void unregisterCallback(
- @NonNull String key,
- @NonNull DynamicTypeValueReceiverWithPreUpdate<StateEntryValue> callback) {
- Set<DynamicTypeValueReceiverWithPreUpdate<StateEntryValue>> callbackSet =
- mRegisteredCallbacks.get(key);
- if (callbackSet != null) {
- callbackSet.remove(callback);
+ if (!(key instanceof PlatformDataKey) ||
+ (mRegisteredCallbacks.containsKey(key) && mRegisteredCallbacks.get(key).size() > 1)
+ ) {
+ return;
+ }
+
+ PlatformDataProvider platformDataProvider = mSourceKeyToDataProviders.get(key);
+ if (platformDataProvider != null) {
+ int registeredKeyCount =
+ mProviderToRegisteredKeyCount.getOrDefault(platformDataProvider, 0);
+
+ if (registeredKeyCount == 0) {
+ platformDataProvider.registerForData(
+ mUiExecutor,
+ new PlatformDataReceiver() {
+ @Override
+ public void onData(
+ @NonNull
+ Map<PlatformDataKey<?>, DynamicDataBuilders.DynamicDataValue>
+ newData) {
+ updatePlatformDataEntries(newData);
+ }
+
+ @Override
+ public void onInvalidated(@NonNull Set<PlatformDataKey<?>> keys) {
+ removePlatformDataEntry(keys);
+ }
+ });
+ }
+
+ mProviderToRegisteredKeyCount.put(platformDataProvider, registeredKeyCount + 1);
+ } else {
+ throw new IllegalArgumentException(
+ String.format("No platform data provider for %s", key));
}
}
- @NonNull
- private static Map<String, StateEntryValue> toProto(
- @NonNull Map<String, StateEntryBuilders.StateEntryValue> value) {
- return value.entrySet().stream()
- .collect(toMap(Entry::getKey, entry -> entry.getValue().toStateEntryValueProto()));
+ /** Unregisters the callback for the given {@code key} from receiving the updates. */
+ @UiThread
+ void unregisterCallback(
+ @NonNull DynamicDataKey<?> key,
+ @NonNull DynamicTypeValueReceiverWithPreUpdate<DynamicDataValue> callback) {
+
+ Set<DynamicTypeValueReceiverWithPreUpdate<DynamicDataValue>> callbackSet =
+ mRegisteredCallbacks.get(key);
+ if (callbackSet != null) {
+ callbackSet.remove(callback);
+
+ if (!(key instanceof PlatformDataKey) || !callbackSet.isEmpty()) {
+ return;
+ }
+
+ PlatformDataProvider platformDataProvider = mSourceKeyToDataProviders.get(key);
+ if (platformDataProvider != null) {
+ int registeredKeyCount =
+ mProviderToRegisteredKeyCount.getOrDefault(platformDataProvider, 0);
+ if (registeredKeyCount == 1) {
+ platformDataProvider.unregisterForData();
+ }
+ mProviderToRegisteredKeyCount.put(platformDataProvider, registeredKeyCount - 1);
+ } else {
+ throw new IllegalArgumentException(
+ String.format("No platform data provider for %s", key));
+ }
+ }
+ }
+
+ /**
+ * Returns the maximum number for state entries allowed for this {@link StateStore}.
+ *
+ * <p>The ProtoLayout state model is not designed to handle large volumes of layout provided
+ * state. So we limit the number of state entries to keep the on-the-wire size and state
+ * store update times manageable.
+ */
+ public static int getMaxStateEntryCount(){
+ return MAX_STATE_ENTRY_COUNT;
}
@NonNull
- private Set<String> getRemovedKeys(@NonNull Map<String, StateEntryValue> newState) {
- Set<String> result = new ArraySet<>(mCurrentState.keySet());
+ private static Map<AppDataKey<?>, DynamicDataValue> toProto(
+ @NonNull Map<AppDataKey<?>, DynamicDataBuilders.DynamicDataValue> value) {
+ return value.entrySet().stream()
+ .collect(toMap(Entry::getKey, entry -> entry.getValue().toDynamicDataValueProto()));
+ }
+
+ @NonNull
+ private Set<AppDataKey<?>> getRemovedAppKeys(
+ @NonNull Map<AppDataKey<?>, DynamicDataValue> newState) {
+ Set<AppDataKey<?>> result = new ArraySet<>(mCurrentAppState.keySet());
result.removeAll(newState.keySet());
return result;
}
@NonNull
- private Map<String, StateEntryValue> getChangedEntries(
- @NonNull Map<String, StateEntryValue> newState) {
- Map<String, StateEntryValue> result = new ArrayMap<>();
- for (Entry<String, StateEntryValue> newEntry : newState.entrySet()) {
- StateEntryValue currentEntry = mCurrentState.get(newEntry.getKey());
+ private Map<AppDataKey<?>, DynamicDataValue> getChangedAppEntries(
+ @NonNull Map<AppDataKey<?>, DynamicDataValue> newState) {
+ Map<AppDataKey<?>, DynamicDataValue> result = new ArrayMap<>();
+ for (Entry<AppDataKey<?>, DynamicDataValue> newEntry
+ : newState.entrySet()) {
+ DynamicDataValue currentEntry = mCurrentAppState.get(newEntry.getKey());
if (currentEntry == null || !currentEntry.equals(newEntry.getValue())) {
result.put(newEntry.getKey(), newEntry.getValue());
}
@@ -204,6 +375,6 @@
String.format(
"Too many state entries: %d. The maximum number of allowed state entries "
+ "is %d.",
- stateSize, MAX_STATE_ENTRY_COUNT));
+ stateSize, getMaxStateEntryCount()));
}
}
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/StringNodes.java b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/StringNodes.java
index e168776..77dcfc4 100644
--- a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/StringNodes.java
+++ b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/StringNodes.java
@@ -19,6 +19,7 @@
import static java.lang.Math.min;
import androidx.annotation.UiThread;
+import androidx.wear.protolayout.expression.DynamicBuilders.DynamicString;
import androidx.wear.protolayout.expression.proto.DynamicProto.StateStringSource;
import androidx.wear.protolayout.expression.proto.FixedProto.FixedString;
@@ -104,7 +105,8 @@
DynamicTypeValueReceiverWithPreUpdate<String> downstream) {
super(
stateStore,
- protoNode.getSourceKey(),
+ StateSourceNode.<DynamicString>createKey(
+ protoNode.getSourceNamespace(), protoNode.getSourceKey()),
se -> truncate(se.getStringVal().getValue()),
downstream);
}
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/sensor/SensorGateway.java b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/sensor/SensorGateway.java
index d6f656d..b6eef40 100644
--- a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/sensor/SensorGateway.java
+++ b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/sensor/SensorGateway.java
@@ -16,58 +16,23 @@
package androidx.wear.protolayout.expression.pipeline.sensor;
-import android.Manifest;
-import android.os.Build.VERSION_CODES;
-
import androidx.annotation.AnyThread;
-import androidx.annotation.IntDef;
import androidx.annotation.NonNull;
-import androidx.annotation.RequiresApi;
-import androidx.annotation.RequiresPermission;
import androidx.annotation.RestrictTo;
import androidx.annotation.RestrictTo.Scope;
import androidx.annotation.UiThread;
+import androidx.wear.protolayout.expression.DynamicBuilders;
+import androidx.wear.protolayout.expression.PlatformDataKey;
+import androidx.wear.protolayout.expression.PlatformHealthSources;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
import java.util.concurrent.Executor;
/**
* Gateway for proto layout expression library to be able to access sensor data, e.g. health data.
*/
+@RestrictTo(Scope.LIBRARY_GROUP_PREFIX)
public interface SensorGateway {
- /** Sensor data types that can be subscribed to from {@link SensorGateway}. */
- @RestrictTo(Scope.LIBRARY_GROUP)
- @Retention(RetentionPolicy.SOURCE)
- @RequiresApi(VERSION_CODES.Q)
- @IntDef({
- SENSOR_DATA_TYPE_INVALID,
- SENSOR_DATA_TYPE_HEART_RATE,
- SENSOR_DATA_TYPE_DAILY_STEP_COUNT
- })
- public @interface SensorDataType {};
-
- /** Invalid data type. Used to return error states. */
- int SENSOR_DATA_TYPE_INVALID = -1;
-
- /**
- * The user's current heart rate. This is an instantaneous reading from the last time it was
- * sampled. Note that this means that apps which subscribe to passive heart rate data may not
- * receive exact heart rate data; it will be batched to a given period.
- */
- @RequiresPermission(Manifest.permission.BODY_SENSORS)
- int SENSOR_DATA_TYPE_HEART_RATE = 0;
-
- /**
- * The user's current daily step count. Note that this data type will reset to zero at midnight.
- * each day, and any subscriptions to this data type will log the number of steps the user has
- * done since 12:00AM local time.
- */
- @RequiresApi(VERSION_CODES.Q)
- @RequiresPermission(Manifest.permission.ACTIVITY_RECOGNITION)
- int SENSOR_DATA_TYPE_DAILY_STEP_COUNT = 1;
-
/**
* Consumer for sensor data.
*
@@ -147,15 +112,15 @@
* type.
*
* <p>Note that the callback will be executed on the single background thread (implementation
- * dependent). To specify the execution thread, use {@link #registerSensorGatewayConsumer(int,
- * Executor, Consumer)}.
+ * dependent). To specify the execution thread, use {@link #registerSensorGatewayConsumer(
+ * PlatformDataKey, Executor, Consumer)}.
*
* @throws SecurityException if the provider does not have permission to provide requested data
* type.
*/
@UiThread
void registerSensorGatewayConsumer(
- @SensorDataType int requestedDataType, @NonNull Consumer consumer);
+ @NonNull PlatformDataKey<?> key, @NonNull Consumer consumer);
/**
* Register for updates for the given data type. This may cause {@link Consumer} to immediately
@@ -172,12 +137,12 @@
*/
@UiThread
void registerSensorGatewayConsumer(
- @SensorDataType int requestedDataType,
+ @NonNull PlatformDataKey<?> key,
@NonNull /* @CallbackExecutor */ Executor executor,
@NonNull Consumer consumer);
/** Unregister for updates for the given data type. */
@UiThread
void unregisterSensorGatewayConsumer(
- @SensorDataType int requestedDataType, @NonNull Consumer consumer);
+ @NonNull PlatformDataKey<?> key, @NonNull Consumer consumer);
}
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/BoolNodesTest.java b/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/BoolNodesTest.java
index e5f987c..bf04b5e 100644
--- a/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/BoolNodesTest.java
+++ b/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/BoolNodesTest.java
@@ -23,13 +23,15 @@
import static com.google.common.truth.Truth.assertThat;
import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.wear.protolayout.expression.AppDataKey;
+import androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool;
import androidx.wear.protolayout.expression.pipeline.BoolNodes.FixedBoolNode;
import androidx.wear.protolayout.expression.pipeline.BoolNodes.StateBoolNode;
import androidx.wear.protolayout.expression.proto.DynamicProto;
import androidx.wear.protolayout.expression.proto.DynamicProto.LogicalBoolOp;
import androidx.wear.protolayout.expression.proto.DynamicProto.StateBoolSource;
import androidx.wear.protolayout.expression.proto.FixedProto.FixedBool;
-import androidx.wear.protolayout.expression.proto.StateEntryProto.StateEntryValue;
+import androidx.wear.protolayout.expression.proto.DynamicDataProto.DynamicDataValue;
import com.google.common.collect.ImmutableMap;
import java.util.ArrayList;
import java.util.List;
@@ -57,8 +59,8 @@
StateStore oss =
new StateStore(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ new AppDataKey<DynamicBool>("foo"),
+ DynamicDataValue.newBuilder()
.setBoolVal(FixedBool.newBuilder().setValue(true))
.build()));
@@ -77,8 +79,8 @@
StateStore oss =
new StateStore(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ new AppDataKey<DynamicBool>("foo"),
+ DynamicDataValue.newBuilder()
.setBoolVal(FixedBool.newBuilder().setValue(true))
.build()));
@@ -90,10 +92,10 @@
results.clear();
- oss.setStateEntryValuesProto(
+ oss.setAppStateEntryValuesProto(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ new AppDataKey<DynamicBool>("foo"),
+ DynamicDataValue.newBuilder()
.setBoolVal(FixedBool.newBuilder().setValue(false))
.build()));
@@ -103,11 +105,12 @@
@Test
public void stateBoolNoUpdatesAfterDestroy() {
List<Boolean> results = new ArrayList<>();
+ AppDataKey<DynamicBool> keyFoo = new AppDataKey<>("foo");
StateStore oss =
new StateStore(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ keyFoo,
+ DynamicDataValue.newBuilder()
.setBoolVal(FixedBool.newBuilder().setValue(false))
.build()));
@@ -120,10 +123,10 @@
results.clear();
node.destroy();
- oss.setStateEntryValuesProto(
+ oss.setAppStateEntryValuesProto(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ keyFoo,
+ DynamicDataValue.newBuilder()
.setBoolVal(FixedBool.newBuilder().setValue(true))
.build()));
assertThat(results).isEmpty();
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/ColorNodesTest.java b/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/ColorNodesTest.java
index 20e1177..cbf06ed 100644
--- a/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/ColorNodesTest.java
+++ b/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/ColorNodesTest.java
@@ -25,6 +25,8 @@
import android.os.Looper;
import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor;
+import androidx.wear.protolayout.expression.AppDataKey;
import androidx.wear.protolayout.expression.pipeline.ColorNodes.AnimatableFixedColorNode;
import androidx.wear.protolayout.expression.pipeline.ColorNodes.DynamicAnimatedColorNode;
import androidx.wear.protolayout.expression.pipeline.ColorNodes.FixedColorNode;
@@ -33,7 +35,7 @@
import androidx.wear.protolayout.expression.proto.DynamicProto.AnimatableFixedColor;
import androidx.wear.protolayout.expression.proto.DynamicProto.StateColorSource;
import androidx.wear.protolayout.expression.proto.FixedProto.FixedColor;
-import androidx.wear.protolayout.expression.proto.StateEntryProto.StateEntryValue;
+import androidx.wear.protolayout.expression.proto.DynamicDataProto.DynamicDataValue;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
@@ -49,6 +51,7 @@
private static final int FROM_COLOR = 0xFF00FF00;
private static final int TO_COLOR = 0xFFFF00FF;
+ private static final AppDataKey<DynamicColor> KEY_FOO = new AppDataKey<>("foo");
@Test
public void fixedColorNode() {
@@ -69,8 +72,8 @@
StateStore oss =
new StateStore(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setColorVal(FixedColor.newBuilder().setArgb(FROM_COLOR))
.build()));
@@ -90,8 +93,8 @@
StateStore oss =
new StateStore(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setColorVal(FixedColor.newBuilder().setArgb(FROM_COLOR))
.build()));
StateColorSource protoNode = StateColorSource.newBuilder().setSourceKey("foo").build();
@@ -100,10 +103,10 @@
node.preInit();
node.init();
- oss.setStateEntryValuesProto(
+ oss.setAppStateEntryValuesProto(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setColorVal(FixedColor.newBuilder().setArgb(TO_COLOR))
.build()));
@@ -116,8 +119,8 @@
StateStore oss =
new StateStore(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setColorVal(FixedColor.newBuilder().setArgb(FROM_COLOR))
.build()));
StateColorSource protoNode = StateColorSource.newBuilder().setSourceKey("foo").build();
@@ -130,10 +133,10 @@
results.clear();
node.destroy();
- oss.setStateEntryValuesProto(
+ oss.setAppStateEntryValuesProto(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setColorVal(FixedColor.newBuilder().setArgb(TO_COLOR))
.build()));
assertThat(results).isEmpty();
@@ -213,8 +216,8 @@
StateStore oss =
new StateStore(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setColorVal(
FixedColor.newBuilder().setArgb(FROM_COLOR).build())
.build()));
@@ -233,10 +236,10 @@
stateNode.preInit();
stateNode.init();
- oss.setStateEntryValuesProto(
+ oss.setAppStateEntryValuesProto(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setColorVal(FixedColor.newBuilder().setArgb(TO_COLOR))
.build()));
shadowOf(Looper.getMainLooper()).idle();
@@ -256,8 +259,8 @@
StateStore oss =
new StateStore(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setColorVal(
FixedColor.newBuilder().setArgb(color1).build())
.build()));
@@ -277,10 +280,10 @@
stateNode.init();
results.clear();
- oss.setStateEntryValuesProto(
+ oss.setAppStateEntryValuesProto(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setColorVal(FixedColor.newBuilder().setArgb(color2))
.build()));
shadowOf(Looper.getMainLooper()).idle();
@@ -291,10 +294,10 @@
colorNode.setVisibility(true);
results.clear();
- oss.setStateEntryValuesProto(
+ oss.setAppStateEntryValuesProto(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setColorVal(FixedColor.newBuilder().setArgb(color3))
.build()));
shadowOf(Looper.getMainLooper()).idle();
@@ -316,8 +319,8 @@
StateStore oss =
new StateStore(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setColorVal(
FixedColor.newBuilder().setArgb(color1).build())
.build()));
@@ -339,10 +342,10 @@
stateNode.init();
results.clear();
- oss.setStateEntryValuesProto(
+ oss.setAppStateEntryValuesProto(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setColorVal(FixedColor.newBuilder().setArgb(color2))
.build()));
shadowOf(Looper.getMainLooper()).idle();
@@ -352,10 +355,10 @@
// Release the only quota
quotaManager.releaseQuota(1);
- oss.setStateEntryValuesProto(
+ oss.setAppStateEntryValuesProto(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setColorVal(FixedColor.newBuilder().setArgb(color3))
.build()));
shadowOf(Looper.getMainLooper()).idle();
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/FakeSensorGateway.java b/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/FakeSensorGateway.java
new file mode 100644
index 0000000..c661e3f
--- /dev/null
+++ b/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/FakeSensorGateway.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.wear.protolayout.expression.pipeline;
+
+import androidx.annotation.NonNull;
+import androidx.wear.protolayout.expression.PlatformDataKey;
+import androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.Executor;
+
+class FakeSensorGateway implements SensorGateway {
+ final List<Consumer> registeredConsumers = new ArrayList<>();
+
+ @Override
+ public void enableUpdates() {
+ }
+
+ @Override
+ public void disableUpdates() {
+ }
+
+ @Override
+ public void registerSensorGatewayConsumer(
+ @NonNull PlatformDataKey<?> key, @NonNull Consumer consumer) {
+ registeredConsumers.add(consumer);
+ }
+
+ @Override
+ public void registerSensorGatewayConsumer(
+ @NonNull PlatformDataKey<?> key,
+ @NonNull Executor executor,
+ @NonNull Consumer consumer) {
+ registerSensorGatewayConsumer(key, consumer);
+ }
+
+ @Override
+ public void unregisterSensorGatewayConsumer(
+ @NonNull PlatformDataKey<?> key, @NonNull Consumer consumer) {
+ registeredConsumers.remove(consumer);
+ }
+}
\ No newline at end of file
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/FloatNodeTest.java b/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/FloatNodeTest.java
index 9a466a2..4f2b87a 100644
--- a/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/FloatNodeTest.java
+++ b/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/FloatNodeTest.java
@@ -24,7 +24,11 @@
import android.os.Looper;
+import androidx.collection.ArrayMap;
import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat;
+import androidx.wear.protolayout.expression.AppDataKey;
+import androidx.wear.protolayout.expression.PlatformHealthSources;
import androidx.wear.protolayout.expression.pipeline.FloatNodes.AnimatableFixedFloatNode;
import androidx.wear.protolayout.expression.pipeline.FloatNodes.ArithmeticFloatNode;
import androidx.wear.protolayout.expression.pipeline.FloatNodes.DynamicAnimatedFloatNode;
@@ -40,7 +44,7 @@
import androidx.wear.protolayout.expression.proto.DynamicProto.StateInt32Source;
import androidx.wear.protolayout.expression.proto.FixedProto.FixedFloat;
import androidx.wear.protolayout.expression.proto.FixedProto.FixedInt32;
-import androidx.wear.protolayout.expression.proto.StateEntryProto.StateEntryValue;
+import androidx.wear.protolayout.expression.proto.DynamicDataProto.DynamicDataValue;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
@@ -49,11 +53,14 @@
import org.junit.runner.RunWith;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
@RunWith(AndroidJUnit4.class)
public class FloatNodeTest {
+ private static final AppDataKey<DynamicFloat> KEY_FOO = new AppDataKey<>("foo");
+
@Test
public void fixedFloatNodesTest() {
List<Float> results = new ArrayList<>();
@@ -75,8 +82,8 @@
StateStore oss =
new StateStore(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setFloatVal(FixedFloat.newBuilder().setValue(testValue))
.build()));
@@ -99,8 +106,8 @@
StateStore oss =
new StateStore(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setFloatVal(FixedFloat.newBuilder().setValue(oldValue))
.build()));
@@ -112,10 +119,10 @@
node.init();
assertThat(results).containsExactly(oldValue);
- oss.setStateEntryValuesProto(
+ oss.setAppStateEntryValuesProto(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setFloatVal(FixedFloat.newBuilder().setValue(newValue))
.build()));
@@ -123,6 +130,40 @@
}
@Test
+ public void stateFloatSource_canSubscribeToHeartRateUpdates() {
+ FakeSensorGateway fakeSensorGateway = new FakeSensorGateway();
+ StateStore stateStore = new StateStore(new ArrayMap<>());
+ stateStore.putAllPlatformProviders(
+ Collections.singletonMap(
+ PlatformHealthSources.HEART_RATE_BPM,
+ new SensorGatewaySingleDataProvider(
+ fakeSensorGateway, PlatformHealthSources.HEART_RATE_BPM)));
+ StateFloatSource dailyStepsSource =
+ StateFloatSource.newBuilder()
+ .setSourceKey(PlatformHealthSources.HEART_RATE_BPM.getKey())
+ .setSourceNamespace(PlatformHealthSources.HEART_RATE_BPM.getNamespace())
+ .build();
+ List<Float> results = new ArrayList<>();
+ StateFloatSourceNode dailyStepsSourceNode =
+ new StateFloatSourceNode(
+ stateStore,
+ dailyStepsSource,
+ new AddToListCallback<>(results));
+
+ dailyStepsSourceNode.preInit();
+ dailyStepsSourceNode.init();
+ assertThat(fakeSensorGateway.registeredConsumers).hasSize(1);
+
+ fakeSensorGateway.registeredConsumers.get(0).onData(70.0);
+ assertThat(results).hasSize(1);
+ assertThat(results).containsExactly(70.0f);
+
+ fakeSensorGateway.registeredConsumers.get(0).onData(80.0);
+ assertThat(results).hasSize(2);
+ assertThat(results).containsExactly(70.0f, 80.0f);
+ }
+
+ @Test
public void stateFloatSourceNode_noUpdatesAfterDestroy() {
List<Float> results = new ArrayList<>();
float oldValue = 6.5f;
@@ -131,8 +172,8 @@
StateStore oss =
new StateStore(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setFloatVal(FixedFloat.newBuilder().setValue(oldValue))
.build()));
@@ -147,10 +188,10 @@
results.clear();
node.destroy();
- oss.setStateEntryValuesProto(
+ oss.setAppStateEntryValuesProto(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setFloatVal(FixedFloat.newBuilder().setValue(newValue))
.build()));
@@ -177,8 +218,8 @@
StateStore oss =
new StateStore(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setFloatVal(FixedFloat.newBuilder().setValue(oldRhsValue))
.build()));
StateFloatSource rhsProtoNode = StateFloatSource.newBuilder().setSourceKey("foo").build();
@@ -191,10 +232,10 @@
assertThat(results).containsExactly(lhsValue + oldRhsValue);
float newRhsValue = 7.8f;
- oss.setStateEntryValuesProto(
+ oss.setAppStateEntryValuesProto(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setFloatVal(FixedFloat.newBuilder().setValue(newRhsValue))
.build()));
assertThat(results)
@@ -211,8 +252,8 @@
StateStore oss =
new StateStore(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setInt32Val(FixedInt32.newBuilder().setValue(oldIntValue))
.build()));
@@ -226,10 +267,10 @@
assertThat(results).containsExactly((float) oldIntValue);
int newIntValue = 12;
- oss.setStateEntryValuesProto(
+ oss.setAppStateEntryValuesProto(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setInt32Val(FixedInt32.newBuilder().setValue(newIntValue))
.build()));
@@ -319,8 +360,8 @@
StateStore oss =
new StateStore(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setFloatVal(
FixedFloat.newBuilder().setValue(value1).build())
.build()));
@@ -340,10 +381,10 @@
stateNode.init();
results.clear();
- oss.setStateEntryValuesProto(
+ oss.setAppStateEntryValuesProto(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setFloatVal(FixedFloat.newBuilder().setValue(value2))
.build()));
shadowOf(Looper.getMainLooper()).idle();
@@ -354,10 +395,10 @@
floatNode.setVisibility(true);
results.clear();
- oss.setStateEntryValuesProto(
+ oss.setAppStateEntryValuesProto(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setFloatVal(FixedFloat.newBuilder().setValue(value3))
.build()));
shadowOf(Looper.getMainLooper()).idle();
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/Int32NodesTest.java b/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/Int32NodesTest.java
index 58f8fd6..043eab7 100644
--- a/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/Int32NodesTest.java
+++ b/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/Int32NodesTest.java
@@ -25,15 +25,17 @@
import android.os.Looper;
-import androidx.annotation.NonNull;
+import androidx.collection.ArrayMap;
import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.wear.protolayout.expression.AppDataKey;
+import androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32;
+import androidx.wear.protolayout.expression.PlatformHealthSources;
import androidx.wear.protolayout.expression.pipeline.Int32Nodes.AnimatableFixedInt32Node;
import androidx.wear.protolayout.expression.pipeline.Int32Nodes.DynamicAnimatedInt32Node;
import androidx.wear.protolayout.expression.pipeline.Int32Nodes.FixedInt32Node;
import androidx.wear.protolayout.expression.pipeline.Int32Nodes.GetDurationPartOpNode;
-import androidx.wear.protolayout.expression.pipeline.Int32Nodes.PlatformInt32SourceNode;
+import androidx.wear.protolayout.expression.pipeline.Int32Nodes.LegacyPlatformInt32SourceNode;
import androidx.wear.protolayout.expression.pipeline.Int32Nodes.StateInt32SourceNode;
-import androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway;
import androidx.wear.protolayout.expression.proto.AnimationParameterProto.AnimationSpec;
import androidx.wear.protolayout.expression.proto.DynamicProto.AnimatableFixedInt32;
import androidx.wear.protolayout.expression.proto.DynamicProto.DurationPartType;
@@ -42,7 +44,7 @@
import androidx.wear.protolayout.expression.proto.DynamicProto.PlatformInt32SourceType;
import androidx.wear.protolayout.expression.proto.DynamicProto.StateInt32Source;
import androidx.wear.protolayout.expression.proto.FixedProto.FixedInt32;
-import androidx.wear.protolayout.expression.proto.StateEntryProto.StateEntryValue;
+import androidx.wear.protolayout.expression.proto.DynamicDataProto.DynamicDataValue;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
@@ -56,14 +58,19 @@
import java.time.Duration;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.concurrent.Executor;
@RunWith(AndroidJUnit4.class)
public class Int32NodesTest {
- @Rule public final MockitoRule mockito = MockitoJUnit.rule();
+ @Rule
+ public final MockitoRule mockito = MockitoJUnit.rule();
- @Mock private DynamicTypeValueReceiverWithPreUpdate<Integer> mMockValueReceiver;
+ @Mock
+ private DynamicTypeValueReceiverWithPreUpdate<Integer> mMockValueReceiver;
+
+ private static final AppDataKey<DynamicInt32> KEY_FOO = new AppDataKey<>("foo");
@Test
public void testFixedInt32Node() {
@@ -85,36 +92,36 @@
Duration duration = Duration.ofSeconds(123456);
assertThat(
- createGetDurationPartOpNodeAndGetPart(
- duration, DurationPartType.DURATION_PART_TYPE_DAYS))
+ createGetDurationPartOpNodeAndGetPart(
+ duration, DurationPartType.DURATION_PART_TYPE_DAYS))
.isEqualTo(1);
assertThat(
- createGetDurationPartOpNodeAndGetPart(
- duration, DurationPartType.DURATION_PART_TYPE_HOURS))
+ createGetDurationPartOpNodeAndGetPart(
+ duration, DurationPartType.DURATION_PART_TYPE_HOURS))
.isEqualTo(10);
assertThat(
- createGetDurationPartOpNodeAndGetPart(
- duration, DurationPartType.DURATION_PART_TYPE_MINUTES))
+ createGetDurationPartOpNodeAndGetPart(
+ duration, DurationPartType.DURATION_PART_TYPE_MINUTES))
.isEqualTo(17);
assertThat(
- createGetDurationPartOpNodeAndGetPart(
- duration, DurationPartType.DURATION_PART_TYPE_SECONDS))
+ createGetDurationPartOpNodeAndGetPart(
+ duration, DurationPartType.DURATION_PART_TYPE_SECONDS))
.isEqualTo(36);
assertThat(
- createGetDurationPartOpNodeAndGetPart(
- duration, DurationPartType.DURATION_PART_TYPE_TOTAL_DAYS))
+ createGetDurationPartOpNodeAndGetPart(
+ duration, DurationPartType.DURATION_PART_TYPE_TOTAL_DAYS))
.isEqualTo(1);
assertThat(
- createGetDurationPartOpNodeAndGetPart(
- duration, DurationPartType.DURATION_PART_TYPE_TOTAL_HOURS))
+ createGetDurationPartOpNodeAndGetPart(
+ duration, DurationPartType.DURATION_PART_TYPE_TOTAL_HOURS))
.isEqualTo(34);
assertThat(
- createGetDurationPartOpNodeAndGetPart(
- duration, DurationPartType.DURATION_PART_TYPE_TOTAL_MINUTES))
+ createGetDurationPartOpNodeAndGetPart(
+ duration, DurationPartType.DURATION_PART_TYPE_TOTAL_MINUTES))
.isEqualTo(2057);
assertThat(
- createGetDurationPartOpNodeAndGetPart(
- duration, DurationPartType.DURATION_PART_TYPE_TOTAL_SECONDS))
+ createGetDurationPartOpNodeAndGetPart(
+ duration, DurationPartType.DURATION_PART_TYPE_TOTAL_SECONDS))
.isEqualTo(123456);
}
@@ -125,36 +132,36 @@
Duration duration = Duration.ofSeconds(-123456);
assertThat(
- createGetDurationPartOpNodeAndGetPart(
- duration, DurationPartType.DURATION_PART_TYPE_DAYS))
+ createGetDurationPartOpNodeAndGetPart(
+ duration, DurationPartType.DURATION_PART_TYPE_DAYS))
.isEqualTo(1);
assertThat(
- createGetDurationPartOpNodeAndGetPart(
- duration, DurationPartType.DURATION_PART_TYPE_HOURS))
+ createGetDurationPartOpNodeAndGetPart(
+ duration, DurationPartType.DURATION_PART_TYPE_HOURS))
.isEqualTo(10);
assertThat(
- createGetDurationPartOpNodeAndGetPart(
- duration, DurationPartType.DURATION_PART_TYPE_MINUTES))
+ createGetDurationPartOpNodeAndGetPart(
+ duration, DurationPartType.DURATION_PART_TYPE_MINUTES))
.isEqualTo(17);
assertThat(
- createGetDurationPartOpNodeAndGetPart(
- duration, DurationPartType.DURATION_PART_TYPE_SECONDS))
+ createGetDurationPartOpNodeAndGetPart(
+ duration, DurationPartType.DURATION_PART_TYPE_SECONDS))
.isEqualTo(36);
assertThat(
- createGetDurationPartOpNodeAndGetPart(
- duration, DurationPartType.DURATION_PART_TYPE_TOTAL_DAYS))
+ createGetDurationPartOpNodeAndGetPart(
+ duration, DurationPartType.DURATION_PART_TYPE_TOTAL_DAYS))
.isEqualTo(-1);
assertThat(
- createGetDurationPartOpNodeAndGetPart(
- duration, DurationPartType.DURATION_PART_TYPE_TOTAL_HOURS))
+ createGetDurationPartOpNodeAndGetPart(
+ duration, DurationPartType.DURATION_PART_TYPE_TOTAL_HOURS))
.isEqualTo(-34);
assertThat(
- createGetDurationPartOpNodeAndGetPart(
- duration, DurationPartType.DURATION_PART_TYPE_TOTAL_MINUTES))
+ createGetDurationPartOpNodeAndGetPart(
+ duration, DurationPartType.DURATION_PART_TYPE_TOTAL_MINUTES))
.isEqualTo(-2057);
assertThat(
- createGetDurationPartOpNodeAndGetPart(
- duration, DurationPartType.DURATION_PART_TYPE_TOTAL_SECONDS))
+ createGetDurationPartOpNodeAndGetPart(
+ duration, DurationPartType.DURATION_PART_TYPE_TOTAL_SECONDS))
.isEqualTo(-123456);
}
@@ -174,8 +181,8 @@
StateStore oss =
new StateStore(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setInt32Val(FixedInt32.newBuilder().setValue(65))
.build()));
@@ -195,8 +202,8 @@
StateStore oss =
new StateStore(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setInt32Val(FixedInt32.newBuilder().setValue(65))
.build()));
@@ -209,10 +216,10 @@
results.clear();
- oss.setStateEntryValuesProto(
+ oss.setAppStateEntryValuesProto(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setInt32Val(FixedInt32.newBuilder().setValue(12))
.build()));
@@ -220,6 +227,40 @@
}
@Test
+ public void stateInt32Source_canSubscribeToDailyStepsUpdates() {
+ FakeSensorGateway fakeSensorGateway = new FakeSensorGateway();
+ StateStore stateStore = new StateStore(new ArrayMap<>());
+ stateStore.putAllPlatformProviders(
+ Collections.singletonMap(
+ PlatformHealthSources.DAILY_STEPS,
+ new SensorGatewaySingleDataProvider(
+ fakeSensorGateway, PlatformHealthSources.DAILY_STEPS)));
+ StateInt32Source dailyStepsSource =
+ StateInt32Source.newBuilder()
+ .setSourceKey(PlatformHealthSources.DAILY_STEPS.getKey())
+ .setSourceNamespace(PlatformHealthSources.DAILY_STEPS.getNamespace())
+ .build();
+ List<Integer> results = new ArrayList<>();
+ StateInt32SourceNode dailyStepsSourceNode =
+ new StateInt32SourceNode(
+ stateStore,
+ dailyStepsSource,
+ new AddToListCallback<>(results));
+
+ dailyStepsSourceNode.preInit();
+ dailyStepsSourceNode.init();
+ assertThat(fakeSensorGateway.registeredConsumers).hasSize(1);
+
+ fakeSensorGateway.registeredConsumers.get(0).onData(70);
+ assertThat(results).hasSize(1);
+ assertThat(results).containsExactly(70);
+
+ fakeSensorGateway.registeredConsumers.get(0).onData(80);
+ assertThat(results).hasSize(2);
+ assertThat(results).containsExactly(70, 80);
+ }
+
+ @Test
public void animatableFixedInt32_animates() {
int startValue = 3;
int endValue = 33;
@@ -302,8 +343,8 @@
StateStore oss =
new StateStore(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setInt32Val(
FixedInt32.newBuilder().setValue(value1).build())
.build()));
@@ -323,10 +364,10 @@
stateNode.init();
results.clear();
- oss.setStateEntryValuesProto(
+ oss.setAppStateEntryValuesProto(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setInt32Val(FixedInt32.newBuilder().setValue(value2))
.build()));
shadowOf(Looper.getMainLooper()).idle();
@@ -337,10 +378,10 @@
int32Node.setVisibility(true);
results.clear();
- oss.setStateEntryValuesProto(
+ oss.setAppStateEntryValuesProto(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setInt32Val(FixedInt32.newBuilder().setValue(value3))
.build()));
shadowOf(Looper.getMainLooper()).idle();
@@ -353,18 +394,94 @@
}
@Test
- public void platformInt32Source_propagatesInvalidatedSignal() {
+ public void platformInt32Source_canSubscribeToHeartRateUpdates() {
FakeSensorGateway fakeSensorGateway = new FakeSensorGateway();
+ StateStore stateStore = new StateStore(new ArrayMap<>());
+ stateStore.putAllPlatformProviders(
+ Collections.singletonMap(
+ PlatformHealthSources.HEART_RATE_BPM,
+ new SensorGatewaySingleDataProvider(
+ fakeSensorGateway, PlatformHealthSources.HEART_RATE_BPM)));
PlatformInt32Source platformSource =
PlatformInt32Source.newBuilder()
.setSourceType(
PlatformInt32SourceType
.PLATFORM_INT32_SOURCE_TYPE_CURRENT_HEART_RATE)
.build();
- PlatformInt32SourceNode platformSourceNode =
- new PlatformInt32SourceNode(
+ List<Integer> results = new ArrayList<>();
+ LegacyPlatformInt32SourceNode platformSourceNode =
+ new LegacyPlatformInt32SourceNode(
+ stateStore,
platformSource,
- new SensorGatewayPlatformDataSource(Runnable::run, fakeSensorGateway),
+ new AddToListCallback<>(results));
+
+ platformSourceNode.preInit();
+ platformSourceNode.init();
+ assertThat(fakeSensorGateway.registeredConsumers).hasSize(1);
+
+ fakeSensorGateway.registeredConsumers.get(0).onData(70);
+ assertThat(results).hasSize(1);
+ assertThat(results).containsExactly(70);
+
+ fakeSensorGateway.registeredConsumers.get(0).onData(80);
+ assertThat(results).hasSize(2);
+ assertThat(results).containsExactly(70, 80);
+ }
+
+ @Test
+ public void platformInt32Source_canSubscribeToDailyStepsUpdates() {
+ FakeSensorGateway fakeSensorGateway = new FakeSensorGateway();
+ StateStore stateStore = new StateStore(new ArrayMap<>());
+ stateStore.putAllPlatformProviders(
+ Collections.singletonMap(
+ PlatformHealthSources.DAILY_STEPS,
+ new SensorGatewaySingleDataProvider(
+ fakeSensorGateway, PlatformHealthSources.DAILY_STEPS)));
+ PlatformInt32Source platformSource =
+ PlatformInt32Source.newBuilder()
+ .setSourceType(
+ PlatformInt32SourceType
+ .PLATFORM_INT32_SOURCE_TYPE_DAILY_STEP_COUNT)
+ .build();
+ List<Integer> results = new ArrayList<>();
+ LegacyPlatformInt32SourceNode platformSourceNode =
+ new LegacyPlatformInt32SourceNode(
+ stateStore,
+ platformSource,
+ new AddToListCallback<>(results));
+
+ platformSourceNode.preInit();
+ platformSourceNode.init();
+ assertThat(fakeSensorGateway.registeredConsumers).hasSize(1);
+
+ fakeSensorGateway.registeredConsumers.get(0).onData(70.0);
+ assertThat(results).hasSize(1);
+ assertThat(results).containsExactly(70);
+
+ fakeSensorGateway.registeredConsumers.get(0).onData(80.0);
+ assertThat(results).hasSize(2);
+ assertThat(results).containsExactly(70, 80);
+ }
+
+ @Test
+ public void platformInt32Source_propagatesInvalidatedSignal() {
+ FakeSensorGateway fakeSensorGateway = new FakeSensorGateway();
+ StateStore stateStore = new StateStore(new ArrayMap<>());
+ stateStore.putAllPlatformProviders(
+ Collections.singletonMap(
+ PlatformHealthSources.HEART_RATE_BPM,
+ new SensorGatewaySingleDataProvider(
+ fakeSensorGateway, PlatformHealthSources.HEART_RATE_BPM)));
+ PlatformInt32Source platformSource =
+ PlatformInt32Source.newBuilder()
+ .setSourceType(
+ PlatformInt32SourceType
+ .PLATFORM_INT32_SOURCE_TYPE_CURRENT_HEART_RATE)
+ .build();
+ LegacyPlatformInt32SourceNode platformSourceNode =
+ new LegacyPlatformInt32SourceNode(
+ stateStore,
+ platformSource,
mMockValueReceiver);
platformSourceNode.preInit();
@@ -376,34 +493,4 @@
fakeSensorGateway.registeredConsumers.get(0).onInvalidated();
verify(mMockValueReceiver).onInvalidated();
}
-
- private static class FakeSensorGateway implements SensorGateway {
- final List<Consumer> registeredConsumers = new ArrayList<>();
-
- @Override
- public void enableUpdates() {}
-
- @Override
- public void disableUpdates() {}
-
- @Override
- public void registerSensorGatewayConsumer(
- @SensorDataType int requestedDataType, @NonNull Consumer consumer) {
- registeredConsumers.add(consumer);
- }
-
- @Override
- public void registerSensorGatewayConsumer(
- @SensorDataType int requestedDataType,
- @NonNull Executor executor,
- @NonNull Consumer consumer) {
- registerSensorGatewayConsumer(requestedDataType, consumer);
- }
-
- @Override
- public void unregisterSensorGatewayConsumer(
- @SensorDataType int requestedDataType, @NonNull Consumer consumer) {
- registeredConsumers.remove(consumer);
- }
- }
}
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/ParametrizedDynamicTypeEvaluatorTest.java b/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/ParametrizedDynamicTypeEvaluatorTest.java
index 2f62ea9..4480847 100644
--- a/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/ParametrizedDynamicTypeEvaluatorTest.java
+++ b/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/ParametrizedDynamicTypeEvaluatorTest.java
@@ -38,11 +38,12 @@
import androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32;
import androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32.IntFormatter;
import androidx.wear.protolayout.expression.DynamicBuilders.DynamicString;
+import androidx.wear.protolayout.expression.AppDataKey;
import androidx.wear.protolayout.expression.proto.FixedProto.FixedBool;
import androidx.wear.protolayout.expression.proto.FixedProto.FixedFloat;
import androidx.wear.protolayout.expression.proto.FixedProto.FixedInt32;
import androidx.wear.protolayout.expression.proto.FixedProto.FixedString;
-import androidx.wear.protolayout.expression.proto.StateEntryProto.StateEntryValue;
+import androidx.wear.protolayout.expression.proto.DynamicDataProto.DynamicDataValue;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
@@ -63,36 +64,38 @@
public class ParametrizedDynamicTypeEvaluatorTest {
@ParameterizedRobolectricTestRunner.Parameters(name = "{0}")
public static ImmutableList<Object[]> params() {
+ AppDataKey<DynamicInt32> int32Source = new AppDataKey<>("state_int_15");
ParametrizedDynamicTypeEvaluatorTest.TestCase<?>[] testCases = {
test(constant("hello"), "hello"),
- test(DynamicString.fromState("state_hello_world"), "hello_world"),
+ test(DynamicString.from(new AppDataKey<>("state_hello_world")), "hello_world"),
test(DynamicInt32.constant(5).format(), "5"),
test(DynamicInt32.constant(10), 10),
- test(DynamicInt32.fromState("state_int_15"), 15),
- test(DynamicInt32.fromState("state_int_15").plus(DynamicInt32.constant(2)), 17),
- test(DynamicInt32.fromState("state_int_15").minus(DynamicInt32.constant(5)), 10),
- test(DynamicInt32.fromState("state_int_15").times(DynamicInt32.constant(2)), 30),
- test(DynamicInt32.fromState("state_int_15").div(DynamicInt32.constant(3)), 5),
- test(DynamicInt32.fromState("state_int_15").rem(DynamicInt32.constant(2)), 1),
- test(DynamicInt32.fromState("state_int_15").plus(2), 17),
- test(DynamicInt32.fromState("state_int_15").minus(5), 10),
- test(DynamicInt32.fromState("state_int_15").times(2), 30),
- test(DynamicInt32.fromState("state_int_15").div(3), 5),
- test(DynamicInt32.fromState("state_int_15").rem(2), 1),
- test(DynamicInt32.fromState("state_int_15").plus(2.5f), 17.5f),
- test(DynamicInt32.fromState("state_int_15").minus(5.5f), 9.5f),
- test(DynamicInt32.fromState("state_int_15").times(2.5f), 37.5f),
- test(DynamicInt32.fromState("state_int_15").div(2.0f), 7.5f),
- test(DynamicInt32.fromState("state_int_15").rem(4.5f), 1.5f),
- test(DynamicInt32.fromState("state_int_15").plus(DynamicFloat.constant(2.5f)), 17.5f),
- test(DynamicInt32.fromState("state_int_15").minus(DynamicFloat.constant(5.5f)), 9.5f),
- test(DynamicInt32.fromState("state_int_15").times(DynamicFloat.constant(2.5f)), 37.5f),
- test(DynamicInt32.fromState("state_int_15").div(DynamicFloat.constant(2.0f)), 7.5f),
- test(DynamicInt32.fromState("state_int_15").rem(DynamicFloat.constant(4.5f)), 1.5f),
+ test(DynamicInt32.from(int32Source), 15),
+ test(DynamicInt32.from(int32Source).plus(DynamicInt32.constant(2)), 17),
+ test(DynamicInt32.from(int32Source).minus(DynamicInt32.constant(5)), 10),
+ test(DynamicInt32.from(int32Source).times(DynamicInt32.constant(2)), 30),
+ test(DynamicInt32.from(int32Source).div(DynamicInt32.constant(3)), 5),
+ test(DynamicInt32.from(int32Source).rem(DynamicInt32.constant(2)), 1),
+ test(DynamicInt32.from(int32Source).plus(2), 17),
+ test(DynamicInt32.from(int32Source).minus(5), 10),
+ test(DynamicInt32.from(int32Source).times(2), 30),
+ test(DynamicInt32.from(int32Source).div(3), 5),
+ test(DynamicInt32.from(int32Source).rem(2), 1),
+ test(DynamicInt32.from(int32Source).plus(2.5f), 17.5f),
+ test(DynamicInt32.from(int32Source).minus(5.5f), 9.5f),
+ test(DynamicInt32.from(int32Source).times(2.5f), 37.5f),
+ test(DynamicInt32.from(int32Source).div(2.0f), 7.5f),
+ test(DynamicInt32.from(int32Source).rem(4.5f), 1.5f),
+ test(DynamicInt32.from(int32Source).plus(DynamicFloat.constant(2.5f)), 17.5f),
+ test(DynamicInt32.from(int32Source).minus(DynamicFloat.constant(5.5f)), 9.5f),
+ test(DynamicInt32.from(int32Source).times(DynamicFloat.constant(2.5f)), 37.5f),
+ test(DynamicInt32.from(int32Source).div(DynamicFloat.constant(2.0f)), 7.5f),
+ test(DynamicInt32.from(int32Source).rem(DynamicFloat.constant(4.5f)), 1.5f),
test(DynamicFloat.constant(5.0f), 5.0f),
testForInvalidValue(DynamicFloat.constant(Float.NaN)),
testForInvalidValue(DynamicFloat.constant(Float.NaN).plus(5.0f)),
- test(DynamicFloat.fromState("state_float_1.5"), 1.5f),
+ test(DynamicFloat.from(
+ new AppDataKey<>("state_float_1.5")), 1.5f),
test(DynamicFloat.constant(1234.567f).asInt(), 1234),
test(DynamicFloat.constant(0.967f).asInt(), 0),
test(DynamicFloat.constant(-1234.967f).asInt(), -1235),
@@ -146,9 +149,11 @@
test(DynamicBool.constant(true).or(DynamicBool.constant(false)), true),
test(DynamicBool.constant(false).or(DynamicBool.constant(true)), true),
test(DynamicBool.constant(false).or(DynamicBool.constant(false)), false),
- test(DynamicBool.fromState("state_bool_true"), true),
+ test(DynamicBool.from(
+ new AppDataKey<>("state_bool_true")), true),
test(DynamicBool.constant(false), false),
- test(DynamicBool.fromState("state_bool_false"), false),
+ test(DynamicBool.from(
+ new AppDataKey<>("state_bool_false")), false),
test(DynamicInt32.constant(5).eq(DynamicInt32.constant(5)), true),
test(DynamicInt32.constant(5).eq(DynamicInt32.constant(6)), false),
test(DynamicInt32.constant(5).ne(DynamicInt32.constant(5)), false),
@@ -204,7 +209,8 @@
.elseUse(constant("World")),
"World"),
test(
- DynamicString.fromState("state_hello_world")
+ DynamicString.from(
+ new AppDataKey<>("state_hello_world"))
.concat(DynamicString.constant("_test")),
"hello_world_test"),
test(
@@ -504,26 +510,26 @@
return DynamicDuration.withSecondsPrecision(Duration.ofSeconds(seconds));
}
- private static ImmutableMap<String, StateEntryValue> generateExampleState() {
+ private static ImmutableMap<AppDataKey<?>, DynamicDataValue> generateExampleState() {
return ImmutableMap.of(
- "state_hello_world",
- StateEntryValue.newBuilder()
+ new AppDataKey<DynamicString>("state_hello_world"),
+ DynamicDataValue.newBuilder()
.setStringVal(FixedString.newBuilder().setValue("hello_world"))
.build(),
- "state_int_15",
- StateEntryValue.newBuilder()
+ new AppDataKey<DynamicInt32>("state_int_15"),
+ DynamicDataValue.newBuilder()
.setInt32Val(FixedInt32.newBuilder().setValue(15))
.build(),
- "state_float_1.5",
- StateEntryValue.newBuilder()
+ new AppDataKey<DynamicFloat>("state_float_1.5"),
+ DynamicDataValue.newBuilder()
.setFloatVal(FixedFloat.newBuilder().setValue(1.5f))
.build(),
- "state_bool_true",
- StateEntryValue.newBuilder()
+ new AppDataKey<DynamicBool>("state_bool_true"),
+ DynamicDataValue.newBuilder()
.setBoolVal(FixedBool.newBuilder().setValue(true))
.build(),
- "state_bool_false",
- StateEntryValue.newBuilder()
+ new AppDataKey<DynamicBool>("state_bool_false"),
+ DynamicDataValue.newBuilder()
.setBoolVal(FixedBool.newBuilder().setValue(false))
.build());
}
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/StateStoreTest.java b/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/StateStoreTest.java
index ae1630d..324d7ed 100644
--- a/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/StateStoreTest.java
+++ b/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/StateStoreTest.java
@@ -25,10 +25,17 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoInteractions;
+import android.util.ArrayMap;
+
+import androidx.annotation.NonNull;
+import androidx.collection.ArraySet;
import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.wear.protolayout.expression.StateEntryBuilders;
+import androidx.wear.protolayout.expression.AppDataKey;
+import androidx.wear.protolayout.expression.DynamicBuilders.DynamicString;
+import androidx.wear.protolayout.expression.DynamicDataBuilders;
+import androidx.wear.protolayout.expression.PlatformDataKey;
import androidx.wear.protolayout.expression.proto.FixedProto.FixedString;
-import androidx.wear.protolayout.expression.proto.StateEntryProto.StateEntryValue;
+import androidx.wear.protolayout.expression.proto.DynamicDataProto.DynamicDataValue;
import com.google.common.collect.ImmutableMap;
import com.google.common.truth.Expect;
@@ -41,101 +48,206 @@
import java.util.HashMap;
import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.Executor;
@RunWith(AndroidJUnit4.class)
public class StateStoreTest {
@Rule public Expect mExpect = Expect.create();
+ private static final AppDataKey<DynamicString> KEY_FOO = new AppDataKey<>("foo");
+ private static final AppDataKey<DynamicString> KEY_BAZ = new AppDataKey<>("baz");
+
+ private static final PlatformDataKey<DynamicString> KEY_FOO_PLATFORM
+ = new PlatformDataKey<>("platform", "foo");
+ private static final PlatformDataKey<DynamicString> KEY_BAZ_PLATFORM
+ = new PlatformDataKey<>("platform","baz");
+
private final StateStore mStateStoreUnderTest =
new StateStore(
ImmutableMap.of(
- "foo", buildStateEntry("bar"),
- "baz", buildStateEntry("foobar")));
+ KEY_FOO, buildDynamicDataValue("bar"),
+ KEY_BAZ, buildDynamicDataValue("foobar")));
public StateStoreTest() {}
@Test
public void setBuilderApi() {
- mStateStoreUnderTest.setStateEntryValues(
- ImmutableMap.of("foo", StateEntryBuilders.StateEntryValue.fromString("baz")));
+ mStateStoreUnderTest.setAppStateEntryValues(
+ ImmutableMap.of(
+ KEY_FOO, DynamicDataBuilders.DynamicDataValue.fromString("baz")));
- mExpect.that(mStateStoreUnderTest.getStateEntryValuesProto("foo"))
- .isEqualTo(buildStateEntry("baz"));
+ mExpect.that(mStateStoreUnderTest.getDynamicDataValuesProto(KEY_FOO))
+ .isEqualTo(buildDynamicDataValue("baz"));
+
+ // This should have been cleared...
+ mExpect.that(mStateStoreUnderTest.getDynamicDataValuesProto(KEY_BAZ)).isNull();
}
@Test
public void initState_largeNumberOfEntries_throws() {
- Map<String, StateEntryBuilders.StateEntryValue> state = new HashMap<>();
- for (int i = 0; i < StateStore.MAX_STATE_ENTRY_COUNT + 10; i++) {
- state.put(Integer.toString(i), StateEntryBuilders.StateEntryValue.fromString("baz"));
+ Map<AppDataKey<?>, DynamicDataBuilders.DynamicDataValue> state = new HashMap<>();
+ for (int i = 0; i < StateStore.getMaxStateEntryCount() + 10; i++) {
+ state.put(
+ new AppDataKey<DynamicString>(Integer.toString(i)),
+ DynamicDataBuilders.DynamicDataValue.fromString("baz"));
}
assertThrows(IllegalStateException.class, () -> StateStore.create(state));
}
@Test
public void newState_largeNumberOfEntries_throws() {
- Map<String, StateEntryBuilders.StateEntryValue> state = new HashMap<>();
- for (int i = 0; i < StateStore.MAX_STATE_ENTRY_COUNT + 10; i++) {
- state.put(Integer.toString(i), StateEntryBuilders.StateEntryValue.fromString("baz"));
+ Map<AppDataKey<?>, DynamicDataBuilders.DynamicDataValue> state = new HashMap<>();
+ for (int i = 0; i < StateStore.getMaxStateEntryCount() + 10; i++) {
+ state.put(
+ new AppDataKey<DynamicString>(Integer.toString(i)),
+ DynamicDataBuilders.DynamicDataValue.fromString("baz"));
}
assertThrows(
- IllegalStateException.class, () -> mStateStoreUnderTest.setStateEntryValues(state));
+ IllegalStateException.class,
+ () -> mStateStoreUnderTest.setAppStateEntryValues(state));
}
@Test
public void canReadInitialState() {
- mExpect.that(mStateStoreUnderTest.getStateEntryValuesProto("foo"))
- .isEqualTo(buildStateEntry("bar"));
- mExpect.that(mStateStoreUnderTest.getStateEntryValuesProto("baz"))
- .isEqualTo(buildStateEntry("foobar"));
+ mExpect.that(mStateStoreUnderTest.getDynamicDataValuesProto(KEY_FOO))
+ .isEqualTo(buildDynamicDataValue("bar"));
+ mExpect.that(mStateStoreUnderTest.getDynamicDataValuesProto(KEY_BAZ))
+ .isEqualTo(buildDynamicDataValue("foobar"));
}
@Test
public void unsetStateReturnsNull() {
- mExpect.that(mStateStoreUnderTest.getStateEntryValuesProto("AAAAAA")).isNull();
+ mExpect.that(
+ mStateStoreUnderTest.getDynamicDataValuesProto(new AppDataKey<>("AAAAAA"))
+ ).isNull();
}
@Test
public void canSetNewState() {
- mStateStoreUnderTest.setStateEntryValuesProto(
+ AppDataKey<DynamicString> keyNew = new AppDataKey<>("newKey");
+ mStateStoreUnderTest.setAppStateEntryValuesProto(
ImmutableMap.of(
- "foo", buildStateEntry("test"),
- "newKey", buildStateEntry("testNewKey")));
+ KEY_FOO, buildDynamicDataValue("test"),
+ keyNew, buildDynamicDataValue("testNewKey")));
- mExpect.that(mStateStoreUnderTest.getStateEntryValuesProto("foo"))
- .isEqualTo(buildStateEntry("test"));
- mExpect.that(mStateStoreUnderTest.getStateEntryValuesProto("newKey"))
- .isEqualTo(buildStateEntry("testNewKey"));
+ mExpect.that(mStateStoreUnderTest.getDynamicDataValuesProto(KEY_FOO))
+ .isEqualTo(buildDynamicDataValue("test"));
+ mExpect.that(mStateStoreUnderTest.getDynamicDataValuesProto(keyNew))
+ .isEqualTo(buildDynamicDataValue("testNewKey"));
// This should have been cleared...
- mExpect.that(mStateStoreUnderTest.getStateEntryValuesProto("baz")).isNull();
+ mExpect.that(mStateStoreUnderTest.getDynamicDataValuesProto(KEY_BAZ)).isNull();
+ }
+
+ @Test
+ public void canUpdatePlatformData() {
+ mStateStoreUnderTest.updatePlatformDataEntryProto(
+ Map.of(KEY_FOO_PLATFORM, buildDynamicDataValue("valueFoo1")));
+
+ mExpect.that(mStateStoreUnderTest.getDynamicDataValuesProto(KEY_FOO))
+ .isEqualTo(buildDynamicDataValue("bar"));
+ mExpect.that(mStateStoreUnderTest.getDynamicDataValuesProto(KEY_BAZ))
+ .isEqualTo(buildDynamicDataValue("foobar"));
+ mExpect.that(mStateStoreUnderTest.getDynamicDataValuesProto(KEY_FOO_PLATFORM))
+ .isEqualTo(buildDynamicDataValue("valueFoo1"));
+
+ mStateStoreUnderTest.updatePlatformDataEntryProto(
+ Map.of(KEY_FOO_PLATFORM, buildDynamicDataValue("valueFoo2"),
+ KEY_BAZ_PLATFORM, buildDynamicDataValue("valueBaz")));
+ mExpect.that(mStateStoreUnderTest.getDynamicDataValuesProto(KEY_FOO_PLATFORM))
+ .isEqualTo(buildDynamicDataValue("valueFoo2"));
+
+ mExpect.that(mStateStoreUnderTest.getDynamicDataValuesProto(KEY_FOO))
+ .isEqualTo(buildDynamicDataValue("bar"));
+ mExpect.that(mStateStoreUnderTest.getDynamicDataValuesProto(KEY_BAZ))
+ .isEqualTo(buildDynamicDataValue("foobar"));
+ mExpect.that(mStateStoreUnderTest.getDynamicDataValuesProto(KEY_FOO_PLATFORM))
+ .isEqualTo(buildDynamicDataValue("valueFoo2"));
+ mExpect.that(mStateStoreUnderTest.getDynamicDataValuesProto(KEY_BAZ_PLATFORM))
+ .isEqualTo(buildDynamicDataValue("valueBaz"));
}
@Test
public void setStateFiresListeners() {
- DynamicTypeValueReceiverWithPreUpdate<StateEntryValue> cb = buildStateUpdateCallbackMock();
- mStateStoreUnderTest.registerCallback("foo", cb);
+ DynamicTypeValueReceiverWithPreUpdate<DynamicDataValue> cb = buildStateUpdateCallbackMock();
+ mStateStoreUnderTest.registerCallback(KEY_FOO, cb);
- mStateStoreUnderTest.setStateEntryValuesProto(
- ImmutableMap.of("foo", buildStateEntry("test")));
+ mStateStoreUnderTest.setAppStateEntryValuesProto(
+ ImmutableMap.of(KEY_FOO, buildDynamicDataValue("test")));
verify(cb).onPreUpdate();
- verify(cb).onData(buildStateEntry("test"));
+ verify(cb).onData(buildDynamicDataValue("test"));
+ }
+
+ @Test
+ public void platformDataProvider_register_updateData_unregister() {
+ PlatformDataProviderUnderTest dataProvider = new PlatformDataProviderUnderTest();
+ Map<PlatformDataKey<?>, PlatformDataProvider> sourceKeyToDataProvider = new ArrayMap<>();
+ sourceKeyToDataProvider.put(KEY_FOO_PLATFORM, dataProvider);
+ sourceKeyToDataProvider.put(KEY_BAZ_PLATFORM, dataProvider);
+ mStateStoreUnderTest.putAllPlatformProviders(sourceKeyToDataProvider);
+
+ DynamicTypeValueReceiverWithPreUpdate<DynamicDataValue> cbFoo =
+ buildStateUpdateCallbackMock();
+ mStateStoreUnderTest.registerCallback(KEY_FOO_PLATFORM, cbFoo);
+ verify(cbFoo).onPreUpdate();
+ verify(cbFoo).onData(buildDynamicDataValue("fooValue"));
+ mExpect.that(dataProvider.mRegisterCount).isEqualTo(1);
+
+ DynamicTypeValueReceiverWithPreUpdate<DynamicDataValue> cbBaz =
+ buildStateUpdateCallbackMock();
+ mStateStoreUnderTest.registerCallback(KEY_BAZ_PLATFORM, cbBaz);
+ mExpect.that(dataProvider.mRegisterCount).isEqualTo(1);
+
+ DynamicTypeValueReceiverWithPreUpdate<DynamicDataValue> cbFoo2 =
+ buildStateUpdateCallbackMock();
+ mStateStoreUnderTest.registerCallback(KEY_FOO_PLATFORM, cbFoo2);
+ mExpect.that(dataProvider.mRegisterCount).isEqualTo(1);
+
+ dataProvider.updateValues(
+ Map.of(KEY_FOO_PLATFORM,
+ DynamicDataBuilders.DynamicDataValue.fromString("newFooValue"),
+ KEY_BAZ_PLATFORM,
+ DynamicDataBuilders.DynamicDataValue.fromString("newBazValue")
+ ));
+ verify(cbFoo, times(2)).onPreUpdate();
+ verify(cbFoo2).onPreUpdate();
+ verify(cbBaz).onPreUpdate();
+ verify(cbFoo).onData(buildDynamicDataValue("newFooValue"));
+ verify(cbFoo2).onData(buildDynamicDataValue("newFooValue"));
+ verify(cbBaz).onData(buildDynamicDataValue("newBazValue"));
+
+ dataProvider.updateValues(
+ Map.of(
+ KEY_BAZ_PLATFORM,
+ DynamicDataBuilders.DynamicDataValue.fromString("updatedBazValue")
+ ));
+ verify(cbFoo, times(1)).onData(buildDynamicDataValue("newFooValue"));
+ verify(cbFoo2, times(1)).onData(buildDynamicDataValue("newFooValue"));
+ verify(cbBaz).onData(buildDynamicDataValue("newBazValue"));
+
+ mStateStoreUnderTest.unregisterCallback(KEY_FOO_PLATFORM, cbFoo);
+ mExpect.that(dataProvider.mRegisterCount).isEqualTo(1);
+ mStateStoreUnderTest.unregisterCallback(KEY_FOO_PLATFORM, cbFoo2);
+ mExpect.that(dataProvider.mRegisterCount).isEqualTo(1);
+ mStateStoreUnderTest.unregisterCallback(KEY_BAZ_PLATFORM, cbBaz);
+ mExpect.that(dataProvider.mRegisterCount).isEqualTo(0);
}
@Test
public void setStateFiresOnPreStateUpdateFirst() {
- DynamicTypeValueReceiverWithPreUpdate<StateEntryValue> cb = buildStateUpdateCallbackMock();
+ DynamicTypeValueReceiverWithPreUpdate<DynamicDataValue> cb = buildStateUpdateCallbackMock();
InOrder inOrder = Mockito.inOrder(cb);
- mStateStoreUnderTest.registerCallback("foo", cb);
- mStateStoreUnderTest.registerCallback("baz", cb);
+ mStateStoreUnderTest.registerCallback(KEY_FOO, cb);
+ mStateStoreUnderTest.registerCallback(KEY_BAZ, cb);
- mStateStoreUnderTest.setStateEntryValuesProto(
+ mStateStoreUnderTest.setAppStateEntryValuesProto(
ImmutableMap.of(
- "foo", buildStateEntry("testFoo"),
- "baz", buildStateEntry("testBaz")));
+ KEY_FOO, buildDynamicDataValue("testFoo"),
+ KEY_BAZ, buildDynamicDataValue("testBaz")));
inOrder.verify(cb, times(2)).onPreUpdate();
inOrder.verify(cb, times(2)).onData(any());
@@ -144,41 +256,44 @@
@Test
public void setStateOnlyFiresListenersForChangedData() {
- DynamicTypeValueReceiverWithPreUpdate<StateEntryValue> cbFoo =
+ DynamicTypeValueReceiverWithPreUpdate<DynamicDataValue> cbFoo =
buildStateUpdateCallbackMock();
- DynamicTypeValueReceiverWithPreUpdate<StateEntryValue> cbBaz =
+ DynamicTypeValueReceiverWithPreUpdate<DynamicDataValue> cbBaz =
buildStateUpdateCallbackMock();
- mStateStoreUnderTest.registerCallback("foo", cbFoo);
- mStateStoreUnderTest.registerCallback("baz", cbBaz);
- mStateStoreUnderTest.setStateEntryValuesProto(
+ mStateStoreUnderTest.registerCallback(KEY_FOO, cbFoo);
+ mStateStoreUnderTest.registerCallback(KEY_BAZ, cbBaz);
+
+ mStateStoreUnderTest.setAppStateEntryValuesProto(
ImmutableMap.of(
- "foo", buildStateEntry("test"),
- "baz", buildStateEntry("foobar")));
+ KEY_FOO, buildDynamicDataValue("test"),
+ KEY_BAZ, buildDynamicDataValue("foobar")));
verify(cbFoo).onPreUpdate();
- verify(cbFoo).onData(buildStateEntry("test"));
+ verify(cbFoo).onData(buildDynamicDataValue("test"));
verify(cbBaz, never()).onPreUpdate();
- verify(cbBaz, never()).onData(buildStateEntry("test"));
+ verify(cbBaz, never()).onData(buildDynamicDataValue("test"));
}
@Test
public void removeStateFiresInvalidated() {
- mStateStoreUnderTest.setStateEntryValuesProto(
+ AppDataKey<DynamicString> keyInvalidated = new AppDataKey<>("invalidated");
+ AppDataKey<DynamicString> keyNotInvalidated = new AppDataKey<>("notInvalidated");
+ mStateStoreUnderTest.setAppStateEntryValuesProto(
ImmutableMap.of(
- "invalidated",
- buildStateEntry("value"),
- "notInvalidated",
- buildStateEntry("value")));
- DynamicTypeValueReceiverWithPreUpdate<StateEntryValue> invalidated =
+ keyInvalidated,
+ buildDynamicDataValue("value"),
+ keyNotInvalidated,
+ buildDynamicDataValue("value")));
+ DynamicTypeValueReceiverWithPreUpdate<DynamicDataValue> invalidated =
buildStateUpdateCallbackMock();
- DynamicTypeValueReceiverWithPreUpdate<StateEntryValue> notInvalidated =
+ DynamicTypeValueReceiverWithPreUpdate<DynamicDataValue> notInvalidated =
buildStateUpdateCallbackMock();
- mStateStoreUnderTest.registerCallback("invalidated", invalidated);
- mStateStoreUnderTest.registerCallback("notInvalidated", notInvalidated);
+ mStateStoreUnderTest.registerCallback(keyInvalidated, invalidated);
+ mStateStoreUnderTest.registerCallback(keyNotInvalidated, notInvalidated);
- mStateStoreUnderTest.setStateEntryValuesProto(
- ImmutableMap.of("notInvalidated", buildStateEntry("value")));
+ mStateStoreUnderTest.setAppStateEntryValuesProto(
+ ImmutableMap.of(keyNotInvalidated, buildDynamicDataValue("value")));
verify(invalidated).onPreUpdate();
verify(invalidated).onInvalidated();
@@ -189,31 +304,83 @@
@SuppressWarnings("unchecked")
@Test
public void canUnregisterListeners() {
- DynamicTypeValueReceiverWithPreUpdate<StateEntryValue> cb = buildStateUpdateCallbackMock();
- mStateStoreUnderTest.registerCallback("foo", cb);
+ DynamicTypeValueReceiverWithPreUpdate<DynamicDataValue> cb = buildStateUpdateCallbackMock();
+ mStateStoreUnderTest.registerCallback(KEY_FOO, cb);
- mStateStoreUnderTest.setStateEntryValuesProto(
- ImmutableMap.of("foo", buildStateEntry("test")));
+ mStateStoreUnderTest.setAppStateEntryValuesProto(
+ ImmutableMap.of(KEY_FOO, buildDynamicDataValue("test")));
reset(cb);
- mStateStoreUnderTest.unregisterCallback("foo", cb);
- mStateStoreUnderTest.setStateEntryValuesProto(
- ImmutableMap.of("foo", buildStateEntry("testAgain")));
+ mStateStoreUnderTest.unregisterCallback(KEY_FOO, cb);
+
+ mStateStoreUnderTest.setAppStateEntryValuesProto(
+ ImmutableMap.of(KEY_FOO, buildDynamicDataValue("testAgain")));
verifyNoInteractions(cb);
}
@SuppressWarnings("unchecked")
- private DynamicTypeValueReceiverWithPreUpdate<StateEntryValue> buildStateUpdateCallbackMock() {
+ private DynamicTypeValueReceiverWithPreUpdate<DynamicDataValue> buildStateUpdateCallbackMock() {
// This needs an unchecked cast because of the generic; this method just centralizes the
// warning suppression.
return mock(DynamicTypeValueReceiverWithPreUpdate.class);
}
- private StateEntryValue buildStateEntry(String value) {
- return StateEntryValue.newBuilder()
+ private DynamicDataValue buildDynamicDataValue(String value) {
+ return DynamicDataValue.newBuilder()
.setStringVal(FixedString.newBuilder().setValue(value))
.build();
}
+
+ private class PlatformDataProviderUnderTest implements PlatformDataProvider {
+
+ private PlatformDataReceiver mRegisteredCallback = null;
+
+ private final Map<PlatformDataKey<?>, DynamicDataBuilders.DynamicDataValue> mCurrentValue =
+ new ArrayMap<>();
+
+ private final Set<PlatformDataKey<?>> mSupportedKeys= new ArraySet<>();
+
+ int mRegisterCount = 0;
+
+ PlatformDataProviderUnderTest() {
+ mSupportedKeys.add(KEY_FOO_PLATFORM);
+ mSupportedKeys.add(KEY_BAZ_PLATFORM);
+ mCurrentValue.put(
+ KEY_FOO_PLATFORM,
+ DynamicDataBuilders.DynamicDataValue.fromString("fooValue")
+ );
+ mCurrentValue.put(
+ KEY_BAZ_PLATFORM,
+ DynamicDataBuilders.DynamicDataValue.fromString("bazValue")
+ );
+ }
+
+ public void updateValues(
+ @NonNull Map<PlatformDataKey<?> , DynamicDataBuilders.DynamicDataValue> newData) {
+ mCurrentValue.putAll(newData);
+ if (mRegisteredCallback != null) {
+ mRegisteredCallback.onData(mCurrentValue);
+ }
+ }
+
+ @Override
+ public void registerForData(
+ @NonNull Executor executor,
+ @NonNull PlatformDataReceiver callback) {
+ mRegisterCount++;
+ mRegisteredCallback = callback;
+ executor.execute(() -> callback.onData(mCurrentValue));
+ }
+
+ @Override
+ public void unregisterForData() {
+ if (mRegisteredCallback != null) {
+ mRegisteredCallback.onInvalidated(mSupportedKeys);
+ mRegisterCount--;
+ mRegisteredCallback = null;
+ }
+ }
+ }
}
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/StringNodesTest.java b/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/StringNodesTest.java
index 7b74e8ed..f9afae6 100644
--- a/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/StringNodesTest.java
+++ b/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/StringNodesTest.java
@@ -23,6 +23,8 @@
import android.icu.util.ULocale;
import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.wear.protolayout.expression.AppDataKey;
+import androidx.wear.protolayout.expression.DynamicBuilders.DynamicString;
import androidx.wear.protolayout.expression.pipeline.StringNodes.FixedStringNode;
import androidx.wear.protolayout.expression.pipeline.StringNodes.Int32FormatNode;
import androidx.wear.protolayout.expression.pipeline.StringNodes.StateStringNode;
@@ -30,7 +32,7 @@
import androidx.wear.protolayout.expression.proto.DynamicProto.Int32FormatOp;
import androidx.wear.protolayout.expression.proto.DynamicProto.StateStringSource;
import androidx.wear.protolayout.expression.proto.FixedProto.FixedString;
-import androidx.wear.protolayout.expression.proto.StateEntryProto.StateEntryValue;
+import androidx.wear.protolayout.expression.proto.DynamicDataProto.DynamicDataValue;
import com.google.common.collect.ImmutableMap;
@@ -43,6 +45,7 @@
@RunWith(AndroidJUnit4.class)
public class StringNodesTest {
+ private static final AppDataKey<DynamicString> KEY_FOO = new AppDataKey<>("foo");
@Test
public void fixedStringNodeTest() {
List<String> results = new ArrayList<>();
@@ -106,8 +109,8 @@
StateStore oss =
new StateStore(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setStringVal(FixedString.newBuilder().setValue("bar"))
.build()));
@@ -129,8 +132,8 @@
StateStore oss =
new StateStore(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setStringVal(
FixedString.newBuilder().setValue(string500chars))
.build()));
@@ -152,8 +155,8 @@
StateStore oss =
new StateStore(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setStringVal(FixedString.newBuilder().setValue("bar"))
.build()));
@@ -166,10 +169,10 @@
results.clear();
- oss.setStateEntryValuesProto(
+ oss.setAppStateEntryValuesProto(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setStringVal(FixedString.newBuilder().setValue("baz"))
.build()));
@@ -208,8 +211,8 @@
StateStore oss =
new StateStore(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setStringVal(FixedString.newBuilder().setValue("bar"))
.build()));
@@ -223,10 +226,11 @@
results.clear();
node.destroy();
- oss.setStateEntryValuesProto(
+
+ oss.setAppStateEntryValuesProto(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ KEY_FOO,
+ DynamicDataValue.newBuilder()
.setStringVal(FixedString.newBuilder().setValue("baz"))
.build()));
assertThat(results).isEmpty();
diff --git a/wear/protolayout/protolayout-expression/api/current.txt b/wear/protolayout/protolayout-expression/api/current.txt
index b4f26d0..ee547f2 100644
--- a/wear/protolayout/protolayout-expression/api/current.txt
+++ b/wear/protolayout/protolayout-expression/api/current.txt
@@ -30,32 +30,13 @@
ctor public AnimationParameterBuilders.AnimationSpec.Builder();
method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec build();
method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec.Builder setAnimationParameters(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationParameters);
- method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec.Builder setInfiniteRepeatable(int);
method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec.Builder setRepeatable(androidx.wear.protolayout.expression.AnimationParameterBuilders.Repeatable);
}
- public static final class AnimationParameterBuilders.CubicBezierEasing implements androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing {
- method public float getX1();
- method public float getX2();
- method public float getY1();
- method public float getY2();
- }
-
- public static final class AnimationParameterBuilders.CubicBezierEasing.Builder {
- ctor public AnimationParameterBuilders.CubicBezierEasing.Builder();
- method public androidx.wear.protolayout.expression.AnimationParameterBuilders.CubicBezierEasing build();
- method public androidx.wear.protolayout.expression.AnimationParameterBuilders.CubicBezierEasing.Builder setX1(float);
- method public androidx.wear.protolayout.expression.AnimationParameterBuilders.CubicBezierEasing.Builder setX2(float);
- method public androidx.wear.protolayout.expression.AnimationParameterBuilders.CubicBezierEasing.Builder setY1(float);
- method public androidx.wear.protolayout.expression.AnimationParameterBuilders.CubicBezierEasing.Builder setY2(float);
- }
-
public static interface AnimationParameterBuilders.Easing {
+ method public static androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing cubicBezier(float, float, float, float);
method public static androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing fromByteArray(byte[]);
method public default byte[] toEasingByteArray();
- }
-
- public static class AnimationParameterBuilders.EasingFunctions {
field public static final androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing FAST_OUT_LINEAR_IN_EASING;
field public static final androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing FAST_OUT_SLOW_IN_EASING;
field public static final androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing LINEAR_OUT_SLOW_IN_EASING;
@@ -67,6 +48,8 @@
method public int getRepeatMode();
method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationParameters? getReverseRepeatOverride();
method public boolean hasInfiniteIteration();
+ field public static final androidx.wear.protolayout.expression.AnimationParameterBuilders.Repeatable INFINITE_REPEATABLE_WITH_RESTART;
+ field public static final androidx.wear.protolayout.expression.AnimationParameterBuilders.Repeatable INFINITE_REPEATABLE_WITH_REVERSE;
}
public static final class AnimationParameterBuilders.Repeatable.Builder {
@@ -78,17 +61,21 @@
method public androidx.wear.protolayout.expression.AnimationParameterBuilders.Repeatable.Builder setReverseRepeatOverride(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationParameters);
}
+ public final class AppDataKey<T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> extends androidx.wear.protolayout.expression.DynamicDataKey<T> {
+ ctor public AppDataKey(String);
+ }
+
public class ConditionScopes {
}
public static class ConditionScopes.ConditionScope<T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType, RawT> {
- method public androidx.wear.protolayout.expression.ConditionScopes.IfTrueScope<T!,RawT!> use(T!);
method public androidx.wear.protolayout.expression.ConditionScopes.IfTrueScope<T!,RawT!> use(RawT!);
+ method public androidx.wear.protolayout.expression.ConditionScopes.IfTrueScope<T!,RawT!> use(T!);
}
public static class ConditionScopes.IfTrueScope<T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType, RawT> {
- method public T! elseUse(T!);
method public T! elseUse(RawT!);
+ method public T! elseUse(T!);
}
public final class DynamicBuilders {
@@ -98,36 +85,45 @@
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool and(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool constant(boolean);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool eq(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool from(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool!>);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool fromByteArray(byte[]);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool fromState(String);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool fromByteArray(byte[], int, int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool ne(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool negate();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool or(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public default byte[] toDynamicBoolByteArray();
+ method public default int toDynamicBoolByteArray(byte[]);
+ method public default int toDynamicBoolByteArray(byte[], int, int);
}
public static interface DynamicBuilders.DynamicColor extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate();
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor!>);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor!>, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(@ColorInt int, @ColorInt int);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(@ColorInt int, @ColorInt int, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(String);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(String, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate();
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor constant(@ColorInt int);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor from(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor!>);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor fromByteArray(byte[]);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor fromState(String);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor fromByteArray(byte[], int, int);
method public static androidx.wear.protolayout.expression.ConditionScopes.ConditionScope<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor!,java.lang.Integer!> onCondition(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public default byte[] toDynamicColorByteArray();
+ method public default int toDynamicColorByteArray(byte[]);
+ method public default int toDynamicColorByteArray(byte[], int, int);
}
public static interface DynamicBuilders.DynamicDuration extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration fromByteArray(byte[]);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration fromByteArray(byte[], int, int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getHoursPart();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getIntDaysPart();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getMinutesPart();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getSecondsPart();
method public static androidx.wear.protolayout.expression.ConditionScopes.ConditionScope<androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration!,java.time.Duration!> onCondition(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public default byte[] toDynamicDurationByteArray();
+ method public default int toDynamicDurationByteArray(byte[]);
+ method public default int toDynamicDurationByteArray(byte[], int, int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 toIntDays();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 toIntHours();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 toIntMinutes();
@@ -136,23 +132,24 @@
}
public static interface DynamicBuilders.DynamicFloat extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate();
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!>);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!>, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(float, float);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(float, float, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(String);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(String, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 asInt();
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat constant(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat div(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat div(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat div(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat div(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool eq(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool eq(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicString format();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicString format(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat.FloatFormatter);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat from(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!>);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat fromByteArray(byte[]);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat fromState(String);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat fromByteArray(byte[], int, int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gt(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gt(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gte(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
@@ -162,21 +159,23 @@
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lte(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lte(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat minus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat minus(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat minus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat minus(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool ne(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool ne(float);
method public static androidx.wear.protolayout.expression.ConditionScopes.ConditionScope<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!,java.lang.Float!> onCondition(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat plus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat plus(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat plus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat plus(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat rem(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat rem(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat rem(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat rem(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat times(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat times(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat times(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat times(float);
method public default byte[] toDynamicFloatByteArray();
+ method public default int toDynamicFloatByteArray(byte[]);
+ method public default int toDynamicFloatByteArray(byte[], int, int);
}
public static class DynamicBuilders.DynamicFloat.FloatFormatter {
@@ -198,31 +197,35 @@
public static interface DynamicBuilders.DynamicInstant extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration durationUntil(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant fromByteArray(byte[]);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant fromByteArray(byte[], int, int);
method public static androidx.wear.protolayout.expression.ConditionScopes.ConditionScope<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant!,java.time.Instant!> onCondition(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant platformTimeWithSecondsPrecision();
method public default byte[] toDynamicInstantByteArray();
+ method public default int toDynamicInstantByteArray(byte[]);
+ method public default int toDynamicInstantByteArray(byte[], int, int);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant withSecondsPrecision(java.time.Instant);
}
public static interface DynamicBuilders.DynamicInt32 extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate();
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!>);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!>, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(int, int);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(int, int, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(String);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(String, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat asFloat();
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 constant(int);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 div(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat div(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 div(int);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 div(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat div(float);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 div(int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool eq(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool eq(int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicString format();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicString format(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32.IntFormatter);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 from(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!>);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 fromByteArray(byte[]);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 fromState(String);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 fromByteArray(byte[], int, int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gt(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gt(int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gte(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
@@ -231,26 +234,28 @@
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lt(int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lte(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lte(int);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 minus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat minus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 minus(int);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 minus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat minus(float);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 minus(int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool ne(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool ne(int);
method public static androidx.wear.protolayout.expression.ConditionScopes.ConditionScope<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!,java.lang.Integer!> onCondition(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 plus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat plus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 plus(int);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 plus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat plus(float);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 rem(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 plus(int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat rem(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 rem(int);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 rem(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat rem(float);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 times(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 rem(int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat times(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 times(int);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 times(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat times(float);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 times(int);
method public default byte[] toDynamicInt32ByteArray();
+ method public default int toDynamicInt32ByteArray(byte[]);
+ method public default int toDynamicInt32ByteArray(byte[], int, int);
}
public static class DynamicBuilders.DynamicInt32.IntFormatter {
@@ -268,24 +273,48 @@
public static interface DynamicBuilders.DynamicString extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicString concat(androidx.wear.protolayout.expression.DynamicBuilders.DynamicString);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicString constant(String);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicString from(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicString!>);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicString fromByteArray(byte[]);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicString fromState(String);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicString fromByteArray(byte[], int, int);
method public static androidx.wear.protolayout.expression.ConditionScopes.ConditionScope<androidx.wear.protolayout.expression.DynamicBuilders.DynamicString!,java.lang.String!> onCondition(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public default byte[] toDynamicStringByteArray();
+ method public default int toDynamicStringByteArray(byte[]);
+ method public default int toDynamicStringByteArray(byte[], int, int);
}
public static interface DynamicBuilders.DynamicType {
}
- public final class StateEntryBuilders {
+ public final class DynamicDataBuilders {
}
- public static interface StateEntryBuilders.StateEntryValue {
- method public static androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue fromBool(boolean);
- method public static androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue fromColor(@ColorInt int);
- method public static androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue fromFloat(float);
- method public static androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue fromInt(int);
- method public static androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue fromString(String);
+ public static interface DynamicDataBuilders.DynamicDataValue {
+ method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue fromBool(boolean);
+ method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue fromByteArray(byte[]);
+ method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue fromByteArray(byte[], int, int);
+ method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue fromColor(@ColorInt int);
+ method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue fromFloat(float);
+ method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue fromInt(int);
+ method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue fromString(String);
+ method public default byte[] toDynamicDataValueByteArray();
+ method public default int toDynamicDataValueByteArray(byte[]);
+ method public default int toDynamicDataValueByteArray(byte[], int, int);
+ }
+
+ public abstract class DynamicDataKey<T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> {
+ method public String getKey();
+ method public String getNamespace();
+ }
+
+ public final class PlatformDataKey<T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> extends androidx.wear.protolayout.expression.DynamicDataKey<T> {
+ ctor public PlatformDataKey(String, String);
+ }
+
+ public class PlatformHealthSources {
+ method @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 dailySteps();
+ method @RequiresPermission(android.Manifest.permission.BODY_SENSORS) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat heartRateBpm();
+ field @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) public static final androidx.wear.protolayout.expression.PlatformDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!> DAILY_STEPS;
+ field @RequiresPermission(android.Manifest.permission.BODY_SENSORS) public static final androidx.wear.protolayout.expression.PlatformDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!> HEART_RATE_BPM;
}
public final class VersionBuilders {
diff --git a/wear/protolayout/protolayout-expression/api/public_plus_experimental_current.txt b/wear/protolayout/protolayout-expression/api/public_plus_experimental_current.txt
index adf05da..d82cdcd 100644
--- a/wear/protolayout/protolayout-expression/api/public_plus_experimental_current.txt
+++ b/wear/protolayout/protolayout-expression/api/public_plus_experimental_current.txt
@@ -30,32 +30,13 @@
ctor public AnimationParameterBuilders.AnimationSpec.Builder();
method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec build();
method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec.Builder setAnimationParameters(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationParameters);
- method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec.Builder setInfiniteRepeatable(int);
method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec.Builder setRepeatable(androidx.wear.protolayout.expression.AnimationParameterBuilders.Repeatable);
}
- public static final class AnimationParameterBuilders.CubicBezierEasing implements androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing {
- method public float getX1();
- method public float getX2();
- method public float getY1();
- method public float getY2();
- }
-
- public static final class AnimationParameterBuilders.CubicBezierEasing.Builder {
- ctor public AnimationParameterBuilders.CubicBezierEasing.Builder();
- method public androidx.wear.protolayout.expression.AnimationParameterBuilders.CubicBezierEasing build();
- method public androidx.wear.protolayout.expression.AnimationParameterBuilders.CubicBezierEasing.Builder setX1(float);
- method public androidx.wear.protolayout.expression.AnimationParameterBuilders.CubicBezierEasing.Builder setX2(float);
- method public androidx.wear.protolayout.expression.AnimationParameterBuilders.CubicBezierEasing.Builder setY1(float);
- method public androidx.wear.protolayout.expression.AnimationParameterBuilders.CubicBezierEasing.Builder setY2(float);
- }
-
public static interface AnimationParameterBuilders.Easing {
+ method public static androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing cubicBezier(float, float, float, float);
method public static androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing fromByteArray(byte[]);
method public default byte[] toEasingByteArray();
- }
-
- public static class AnimationParameterBuilders.EasingFunctions {
field public static final androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing FAST_OUT_LINEAR_IN_EASING;
field public static final androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing FAST_OUT_SLOW_IN_EASING;
field public static final androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing LINEAR_OUT_SLOW_IN_EASING;
@@ -67,6 +48,8 @@
method public int getRepeatMode();
method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationParameters? getReverseRepeatOverride();
method public boolean hasInfiniteIteration();
+ field public static final androidx.wear.protolayout.expression.AnimationParameterBuilders.Repeatable INFINITE_REPEATABLE_WITH_RESTART;
+ field public static final androidx.wear.protolayout.expression.AnimationParameterBuilders.Repeatable INFINITE_REPEATABLE_WITH_REVERSE;
}
public static final class AnimationParameterBuilders.Repeatable.Builder {
@@ -78,17 +61,21 @@
method public androidx.wear.protolayout.expression.AnimationParameterBuilders.Repeatable.Builder setReverseRepeatOverride(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationParameters);
}
+ public final class AppDataKey<T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> extends androidx.wear.protolayout.expression.DynamicDataKey<T> {
+ ctor public AppDataKey(String);
+ }
+
public class ConditionScopes {
}
public static class ConditionScopes.ConditionScope<T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType, RawT> {
- method public androidx.wear.protolayout.expression.ConditionScopes.IfTrueScope<T!,RawT!> use(T!);
method public androidx.wear.protolayout.expression.ConditionScopes.IfTrueScope<T!,RawT!> use(RawT!);
+ method public androidx.wear.protolayout.expression.ConditionScopes.IfTrueScope<T!,RawT!> use(T!);
}
public static class ConditionScopes.IfTrueScope<T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType, RawT> {
- method public T! elseUse(T!);
method public T! elseUse(RawT!);
+ method public T! elseUse(T!);
}
public final class DynamicBuilders {
@@ -98,36 +85,45 @@
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool and(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool constant(boolean);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool eq(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool from(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool!>);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool fromByteArray(byte[]);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool fromState(String);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool fromByteArray(byte[], int, int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool ne(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool negate();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool or(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public default byte[] toDynamicBoolByteArray();
+ method public default int toDynamicBoolByteArray(byte[]);
+ method public default int toDynamicBoolByteArray(byte[], int, int);
}
public static interface DynamicBuilders.DynamicColor extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate();
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor!>);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor!>, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(@ColorInt int, @ColorInt int);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(@ColorInt int, @ColorInt int, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(String);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(String, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate();
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor constant(@ColorInt int);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor from(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor!>);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor fromByteArray(byte[]);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor fromState(String);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor fromByteArray(byte[], int, int);
method public static androidx.wear.protolayout.expression.ConditionScopes.ConditionScope<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor!,java.lang.Integer!> onCondition(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public default byte[] toDynamicColorByteArray();
+ method public default int toDynamicColorByteArray(byte[]);
+ method public default int toDynamicColorByteArray(byte[], int, int);
}
public static interface DynamicBuilders.DynamicDuration extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration fromByteArray(byte[]);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration fromByteArray(byte[], int, int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getHoursPart();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getIntDaysPart();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getMinutesPart();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getSecondsPart();
method public static androidx.wear.protolayout.expression.ConditionScopes.ConditionScope<androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration!,java.time.Duration!> onCondition(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public default byte[] toDynamicDurationByteArray();
+ method public default int toDynamicDurationByteArray(byte[]);
+ method public default int toDynamicDurationByteArray(byte[], int, int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 toIntDays();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 toIntHours();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 toIntMinutes();
@@ -136,23 +132,24 @@
}
public static interface DynamicBuilders.DynamicFloat extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate();
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!>);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!>, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(float, float);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(float, float, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(String);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(String, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 asInt();
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat constant(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat div(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat div(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat div(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat div(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool eq(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool eq(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicString format();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicString format(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat.FloatFormatter);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat from(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!>);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat fromByteArray(byte[]);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat fromState(String);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat fromByteArray(byte[], int, int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gt(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gt(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gte(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
@@ -162,21 +159,23 @@
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lte(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lte(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat minus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat minus(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat minus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat minus(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool ne(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool ne(float);
method public static androidx.wear.protolayout.expression.ConditionScopes.ConditionScope<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!,java.lang.Float!> onCondition(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat plus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat plus(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat plus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat plus(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat rem(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat rem(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat rem(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat rem(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat times(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat times(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat times(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat times(float);
method public default byte[] toDynamicFloatByteArray();
+ method public default int toDynamicFloatByteArray(byte[]);
+ method public default int toDynamicFloatByteArray(byte[], int, int);
}
public static class DynamicBuilders.DynamicFloat.FloatFormatter {
@@ -198,31 +197,35 @@
public static interface DynamicBuilders.DynamicInstant extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration durationUntil(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant fromByteArray(byte[]);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant fromByteArray(byte[], int, int);
method public static androidx.wear.protolayout.expression.ConditionScopes.ConditionScope<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant!,java.time.Instant!> onCondition(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant platformTimeWithSecondsPrecision();
method public default byte[] toDynamicInstantByteArray();
+ method public default int toDynamicInstantByteArray(byte[]);
+ method public default int toDynamicInstantByteArray(byte[], int, int);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant withSecondsPrecision(java.time.Instant);
}
public static interface DynamicBuilders.DynamicInt32 extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate();
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!>);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!>, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(int, int);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(int, int, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(String);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(String, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat asFloat();
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 constant(int);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 div(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat div(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 div(int);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 div(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat div(float);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 div(int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool eq(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool eq(int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicString format();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicString format(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32.IntFormatter);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 from(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!>);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 fromByteArray(byte[]);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 fromState(String);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 fromByteArray(byte[], int, int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gt(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gt(int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gte(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
@@ -231,26 +234,28 @@
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lt(int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lte(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lte(int);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 minus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat minus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 minus(int);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 minus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat minus(float);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 minus(int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool ne(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool ne(int);
method public static androidx.wear.protolayout.expression.ConditionScopes.ConditionScope<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!,java.lang.Integer!> onCondition(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 plus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat plus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 plus(int);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 plus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat plus(float);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 rem(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 plus(int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat rem(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 rem(int);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 rem(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat rem(float);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 times(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 rem(int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat times(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 times(int);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 times(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat times(float);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 times(int);
method public default byte[] toDynamicInt32ByteArray();
+ method public default int toDynamicInt32ByteArray(byte[]);
+ method public default int toDynamicInt32ByteArray(byte[], int, int);
}
public static class DynamicBuilders.DynamicInt32.IntFormatter {
@@ -268,37 +273,56 @@
public static interface DynamicBuilders.DynamicString extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicString concat(androidx.wear.protolayout.expression.DynamicBuilders.DynamicString);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicString constant(String);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicString from(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicString!>);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicString fromByteArray(byte[]);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicString fromState(String);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicString fromByteArray(byte[], int, int);
method public static androidx.wear.protolayout.expression.ConditionScopes.ConditionScope<androidx.wear.protolayout.expression.DynamicBuilders.DynamicString!,java.lang.String!> onCondition(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public default byte[] toDynamicStringByteArray();
+ method public default int toDynamicStringByteArray(byte[]);
+ method public default int toDynamicStringByteArray(byte[], int, int);
}
public static interface DynamicBuilders.DynamicType {
}
+ public final class DynamicDataBuilders {
+ }
+
+ public static interface DynamicDataBuilders.DynamicDataValue {
+ method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue fromBool(boolean);
+ method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue fromByteArray(byte[]);
+ method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue fromByteArray(byte[], int, int);
+ method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue fromColor(@ColorInt int);
+ method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue fromFloat(float);
+ method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue fromInt(int);
+ method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue fromString(String);
+ method public default byte[] toDynamicDataValueByteArray();
+ method public default int toDynamicDataValueByteArray(byte[]);
+ method public default int toDynamicDataValueByteArray(byte[], int, int);
+ }
+
+ public abstract class DynamicDataKey<T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> {
+ method public String getKey();
+ method public String getNamespace();
+ }
+
@RequiresOptIn(level=androidx.annotation.RequiresOptIn.Level.ERROR) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.FIELD}) public @interface ExperimentalProtoLayoutExtensionApi {
}
- @androidx.wear.protolayout.expression.ProtoLayoutExperimental public class PlatformHealthSources {
- method @RequiresApi(android.os.Build.VERSION_CODES.Q) @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) @androidx.wear.protolayout.expression.ProtoLayoutExperimental public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 dailySteps();
- method @RequiresPermission(android.Manifest.permission.BODY_SENSORS) @androidx.wear.protolayout.expression.ProtoLayoutExperimental public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 heartRateBpm();
+ public final class PlatformDataKey<T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> extends androidx.wear.protolayout.expression.DynamicDataKey<T> {
+ ctor public PlatformDataKey(String, String);
+ }
+
+ public class PlatformHealthSources {
+ method @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 dailySteps();
+ method @RequiresPermission(android.Manifest.permission.BODY_SENSORS) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat heartRateBpm();
+ field @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) public static final androidx.wear.protolayout.expression.PlatformDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!> DAILY_STEPS;
+ field @RequiresPermission(android.Manifest.permission.BODY_SENSORS) public static final androidx.wear.protolayout.expression.PlatformDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!> HEART_RATE_BPM;
}
@RequiresOptIn(level=androidx.annotation.RequiresOptIn.Level.ERROR) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.FIELD}) public @interface ProtoLayoutExperimental {
}
- public final class StateEntryBuilders {
- }
-
- public static interface StateEntryBuilders.StateEntryValue {
- method public static androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue fromBool(boolean);
- method public static androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue fromColor(@ColorInt int);
- method public static androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue fromFloat(float);
- method public static androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue fromInt(int);
- method public static androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue fromString(String);
- }
-
public final class VersionBuilders {
}
diff --git a/wear/protolayout/protolayout-expression/api/restricted_current.txt b/wear/protolayout/protolayout-expression/api/restricted_current.txt
index b4f26d0..ee547f2 100644
--- a/wear/protolayout/protolayout-expression/api/restricted_current.txt
+++ b/wear/protolayout/protolayout-expression/api/restricted_current.txt
@@ -30,32 +30,13 @@
ctor public AnimationParameterBuilders.AnimationSpec.Builder();
method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec build();
method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec.Builder setAnimationParameters(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationParameters);
- method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec.Builder setInfiniteRepeatable(int);
method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec.Builder setRepeatable(androidx.wear.protolayout.expression.AnimationParameterBuilders.Repeatable);
}
- public static final class AnimationParameterBuilders.CubicBezierEasing implements androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing {
- method public float getX1();
- method public float getX2();
- method public float getY1();
- method public float getY2();
- }
-
- public static final class AnimationParameterBuilders.CubicBezierEasing.Builder {
- ctor public AnimationParameterBuilders.CubicBezierEasing.Builder();
- method public androidx.wear.protolayout.expression.AnimationParameterBuilders.CubicBezierEasing build();
- method public androidx.wear.protolayout.expression.AnimationParameterBuilders.CubicBezierEasing.Builder setX1(float);
- method public androidx.wear.protolayout.expression.AnimationParameterBuilders.CubicBezierEasing.Builder setX2(float);
- method public androidx.wear.protolayout.expression.AnimationParameterBuilders.CubicBezierEasing.Builder setY1(float);
- method public androidx.wear.protolayout.expression.AnimationParameterBuilders.CubicBezierEasing.Builder setY2(float);
- }
-
public static interface AnimationParameterBuilders.Easing {
+ method public static androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing cubicBezier(float, float, float, float);
method public static androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing fromByteArray(byte[]);
method public default byte[] toEasingByteArray();
- }
-
- public static class AnimationParameterBuilders.EasingFunctions {
field public static final androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing FAST_OUT_LINEAR_IN_EASING;
field public static final androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing FAST_OUT_SLOW_IN_EASING;
field public static final androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing LINEAR_OUT_SLOW_IN_EASING;
@@ -67,6 +48,8 @@
method public int getRepeatMode();
method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationParameters? getReverseRepeatOverride();
method public boolean hasInfiniteIteration();
+ field public static final androidx.wear.protolayout.expression.AnimationParameterBuilders.Repeatable INFINITE_REPEATABLE_WITH_RESTART;
+ field public static final androidx.wear.protolayout.expression.AnimationParameterBuilders.Repeatable INFINITE_REPEATABLE_WITH_REVERSE;
}
public static final class AnimationParameterBuilders.Repeatable.Builder {
@@ -78,17 +61,21 @@
method public androidx.wear.protolayout.expression.AnimationParameterBuilders.Repeatable.Builder setReverseRepeatOverride(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationParameters);
}
+ public final class AppDataKey<T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> extends androidx.wear.protolayout.expression.DynamicDataKey<T> {
+ ctor public AppDataKey(String);
+ }
+
public class ConditionScopes {
}
public static class ConditionScopes.ConditionScope<T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType, RawT> {
- method public androidx.wear.protolayout.expression.ConditionScopes.IfTrueScope<T!,RawT!> use(T!);
method public androidx.wear.protolayout.expression.ConditionScopes.IfTrueScope<T!,RawT!> use(RawT!);
+ method public androidx.wear.protolayout.expression.ConditionScopes.IfTrueScope<T!,RawT!> use(T!);
}
public static class ConditionScopes.IfTrueScope<T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType, RawT> {
- method public T! elseUse(T!);
method public T! elseUse(RawT!);
+ method public T! elseUse(T!);
}
public final class DynamicBuilders {
@@ -98,36 +85,45 @@
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool and(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool constant(boolean);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool eq(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool from(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool!>);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool fromByteArray(byte[]);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool fromState(String);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool fromByteArray(byte[], int, int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool ne(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool negate();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool or(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public default byte[] toDynamicBoolByteArray();
+ method public default int toDynamicBoolByteArray(byte[]);
+ method public default int toDynamicBoolByteArray(byte[], int, int);
}
public static interface DynamicBuilders.DynamicColor extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate();
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor!>);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor!>, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(@ColorInt int, @ColorInt int);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(@ColorInt int, @ColorInt int, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(String);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(String, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate();
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor constant(@ColorInt int);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor from(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor!>);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor fromByteArray(byte[]);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor fromState(String);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor fromByteArray(byte[], int, int);
method public static androidx.wear.protolayout.expression.ConditionScopes.ConditionScope<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor!,java.lang.Integer!> onCondition(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public default byte[] toDynamicColorByteArray();
+ method public default int toDynamicColorByteArray(byte[]);
+ method public default int toDynamicColorByteArray(byte[], int, int);
}
public static interface DynamicBuilders.DynamicDuration extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration fromByteArray(byte[]);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration fromByteArray(byte[], int, int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getHoursPart();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getIntDaysPart();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getMinutesPart();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getSecondsPart();
method public static androidx.wear.protolayout.expression.ConditionScopes.ConditionScope<androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration!,java.time.Duration!> onCondition(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public default byte[] toDynamicDurationByteArray();
+ method public default int toDynamicDurationByteArray(byte[]);
+ method public default int toDynamicDurationByteArray(byte[], int, int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 toIntDays();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 toIntHours();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 toIntMinutes();
@@ -136,23 +132,24 @@
}
public static interface DynamicBuilders.DynamicFloat extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate();
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!>);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!>, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(float, float);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(float, float, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(String);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(String, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 asInt();
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat constant(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat div(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat div(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat div(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat div(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool eq(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool eq(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicString format();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicString format(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat.FloatFormatter);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat from(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!>);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat fromByteArray(byte[]);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat fromState(String);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat fromByteArray(byte[], int, int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gt(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gt(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gte(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
@@ -162,21 +159,23 @@
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lte(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lte(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat minus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat minus(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat minus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat minus(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool ne(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool ne(float);
method public static androidx.wear.protolayout.expression.ConditionScopes.ConditionScope<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!,java.lang.Float!> onCondition(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat plus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat plus(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat plus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat plus(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat rem(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat rem(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat rem(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat rem(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat times(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat times(float);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat times(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat times(float);
method public default byte[] toDynamicFloatByteArray();
+ method public default int toDynamicFloatByteArray(byte[]);
+ method public default int toDynamicFloatByteArray(byte[], int, int);
}
public static class DynamicBuilders.DynamicFloat.FloatFormatter {
@@ -198,31 +197,35 @@
public static interface DynamicBuilders.DynamicInstant extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration durationUntil(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant fromByteArray(byte[]);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant fromByteArray(byte[], int, int);
method public static androidx.wear.protolayout.expression.ConditionScopes.ConditionScope<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant!,java.time.Instant!> onCondition(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant platformTimeWithSecondsPrecision();
method public default byte[] toDynamicInstantByteArray();
+ method public default int toDynamicInstantByteArray(byte[]);
+ method public default int toDynamicInstantByteArray(byte[], int, int);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant withSecondsPrecision(java.time.Instant);
}
public static interface DynamicBuilders.DynamicInt32 extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate();
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!>);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!>, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(int, int);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(int, int, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(String);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(String, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat asFloat();
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 constant(int);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 div(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat div(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 div(int);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 div(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat div(float);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 div(int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool eq(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool eq(int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicString format();
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicString format(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32.IntFormatter);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 from(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!>);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 fromByteArray(byte[]);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 fromState(String);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 fromByteArray(byte[], int, int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gt(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gt(int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gte(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
@@ -231,26 +234,28 @@
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lt(int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lte(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lte(int);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 minus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat minus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 minus(int);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 minus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat minus(float);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 minus(int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool ne(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool ne(int);
method public static androidx.wear.protolayout.expression.ConditionScopes.ConditionScope<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!,java.lang.Integer!> onCondition(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 plus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat plus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 plus(int);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 plus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat plus(float);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 rem(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 plus(int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat rem(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 rem(int);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 rem(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat rem(float);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 times(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 rem(int);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat times(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 times(int);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 times(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat times(float);
+ method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 times(int);
method public default byte[] toDynamicInt32ByteArray();
+ method public default int toDynamicInt32ByteArray(byte[]);
+ method public default int toDynamicInt32ByteArray(byte[], int, int);
}
public static class DynamicBuilders.DynamicInt32.IntFormatter {
@@ -268,24 +273,48 @@
public static interface DynamicBuilders.DynamicString extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicString concat(androidx.wear.protolayout.expression.DynamicBuilders.DynamicString);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicString constant(String);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicString from(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicString!>);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicString fromByteArray(byte[]);
- method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicString fromState(String);
+ method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicString fromByteArray(byte[], int, int);
method public static androidx.wear.protolayout.expression.ConditionScopes.ConditionScope<androidx.wear.protolayout.expression.DynamicBuilders.DynamicString!,java.lang.String!> onCondition(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
method public default byte[] toDynamicStringByteArray();
+ method public default int toDynamicStringByteArray(byte[]);
+ method public default int toDynamicStringByteArray(byte[], int, int);
}
public static interface DynamicBuilders.DynamicType {
}
- public final class StateEntryBuilders {
+ public final class DynamicDataBuilders {
}
- public static interface StateEntryBuilders.StateEntryValue {
- method public static androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue fromBool(boolean);
- method public static androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue fromColor(@ColorInt int);
- method public static androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue fromFloat(float);
- method public static androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue fromInt(int);
- method public static androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue fromString(String);
+ public static interface DynamicDataBuilders.DynamicDataValue {
+ method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue fromBool(boolean);
+ method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue fromByteArray(byte[]);
+ method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue fromByteArray(byte[], int, int);
+ method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue fromColor(@ColorInt int);
+ method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue fromFloat(float);
+ method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue fromInt(int);
+ method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue fromString(String);
+ method public default byte[] toDynamicDataValueByteArray();
+ method public default int toDynamicDataValueByteArray(byte[]);
+ method public default int toDynamicDataValueByteArray(byte[], int, int);
+ }
+
+ public abstract class DynamicDataKey<T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> {
+ method public String getKey();
+ method public String getNamespace();
+ }
+
+ public final class PlatformDataKey<T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> extends androidx.wear.protolayout.expression.DynamicDataKey<T> {
+ ctor public PlatformDataKey(String, String);
+ }
+
+ public class PlatformHealthSources {
+ method @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 dailySteps();
+ method @RequiresPermission(android.Manifest.permission.BODY_SENSORS) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat heartRateBpm();
+ field @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) public static final androidx.wear.protolayout.expression.PlatformDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!> DAILY_STEPS;
+ field @RequiresPermission(android.Manifest.permission.BODY_SENSORS) public static final androidx.wear.protolayout.expression.PlatformDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!> HEART_RATE_BPM;
}
public final class VersionBuilders {
diff --git a/wear/protolayout/protolayout-expression/build.gradle b/wear/protolayout/protolayout-expression/build.gradle
index c9777d4..f0bf70b 100644
--- a/wear/protolayout/protolayout-expression/build.gradle
+++ b/wear/protolayout/protolayout-expression/build.gradle
@@ -49,7 +49,7 @@
}
androidx {
- name = "ProtoLayout Dynamic Expression"
+ name = "ProtoLayout Expression"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2022"
description = "Create dynamic expressions (for late evaluation by a remote evaluator)."
diff --git a/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/AnimationParameterBuilders.java b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/AnimationParameterBuilders.java
index 3ea4fa3..69a0886c 100644
--- a/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/AnimationParameterBuilders.java
+++ b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/AnimationParameterBuilders.java
@@ -35,49 +35,6 @@
public final class AnimationParameterBuilders {
private AnimationParameterBuilders() {}
- /** Prebuilt easing functions with cubic polynomial easing. */
- public static class EasingFunctions {
- private static CubicBezierEasing buildCubicBezierEasing(
- float x1, float y1, float x2, float y2) {
- return new CubicBezierEasing.Builder().setX1(x1).setY1(y1).setX2(x2).setY2(y2).build();
- }
-
- private EasingFunctions() {}
-
- /**
- * Elements that begin and end at rest use this standard easing. They speed up quickly and slow
- * down gradually, in order to emphasize the end of the transition.
- *
- * <p>Standard easing puts subtle attention at the end of an animation, by giving more time to
- * deceleration than acceleration. It is the most common form of easing.
- *
- * <p>This is equivalent to the Compose {@code FastOutSlowInEasing}.
- */
- @NonNull
- public static final Easing FAST_OUT_SLOW_IN_EASING =
- buildCubicBezierEasing(0.4f, 0.0f, 0.2f, 1.0f);
-
- /**
- * Incoming elements are animated using deceleration easing, which starts a transition at peak
- * velocity (the fastest point of an element’s movement) and ends at rest.
- *
- * <p>This is equivalent to the Compose {@code LinearOutSlowInEasing}.
- */
- @NonNull
- public static final Easing LINEAR_OUT_SLOW_IN_EASING =
- buildCubicBezierEasing(0.0f, 0.0f, 0.2f, 1.0f);
-
- /**
- * Elements exiting a screen use acceleration easing, where they start at rest and end at peak
- * velocity.
- *
- * <p>This is equivalent to the Compose {@code FastOutLinearInEasing}.
- */
- @NonNull
- public static final Easing FAST_OUT_LINEAR_IN_EASING =
- buildCubicBezierEasing(0.4f, 0.0f, 1.0f, 1.0f);
- }
-
/**
* The repeat mode to specify how animation will behave when repeated.
*
@@ -239,15 +196,6 @@
return this;
}
- /** Sets the animation to repeat indefinitely with the given repeat mode. */
- @NonNull
- @SuppressWarnings("MissingGetterMatchingBuilder")
- public Builder setInfiniteRepeatable(@RepeatMode int mode) {
- Repeatable repeatable =
- new Repeatable.Builder().setRepeatMode(mode).build();
- return this.setRepeatable(repeatable);
- }
-
/** Builds an instance from accumulated values. */
@NonNull
public AnimationSpec build() {
@@ -413,6 +361,56 @@
* @since 1.2
*/
public interface Easing {
+ /**
+ * The cubic polynomial easing that implements third-order Bezier curves. This is equivalent
+ * to the Android PathInterpolator.
+ *
+ * @param x1 the x coordinate of the first control point. The line through the point (0,
+ * 0) and the first control point is tangent to the easing at the point (0, 0).
+ * @param y1 the y coordinate of the first control point. The line through the point (0,
+ * 0) and the first control point is tangent to the easing at the point (0, 0).
+ * @param x2 the x coordinate of the second control point. The line through the point (1,
+ * 1) and the second control point is tangent to the easing at the point (1, 1).
+ * @param y2 the y coordinate of the second control point. The line through the point (1,
+ * 1) and the second control point is tangent to the easing at the point (1, 1).
+ *
+ * @since 1.2
+ */
+ @NonNull
+ static Easing cubicBezier(float x1, float y1, float x2, float y2) {
+ return new CubicBezierEasing.Builder().setX1(x1).setY1(y1).setX2(x2).setY2(y2).build();
+ }
+
+ /**
+ * Elements that begin and end at rest use this standard easing. They speed up quickly and slow
+ * down gradually, in order to emphasize the end of the transition.
+ *
+ * <p>Standard easing puts subtle attention at the end of an animation, by giving more time to
+ * deceleration than acceleration. It is the most common form of easing.
+ *
+ * <p>This is equivalent to the Compose {@code FastOutSlowInEasing}.
+ */
+ @NonNull
+ Easing FAST_OUT_SLOW_IN_EASING = cubicBezier(0.4f, 0.0f, 0.2f, 1.0f);
+
+ /**
+ * Incoming elements are animated using deceleration easing, which starts a transition at peak
+ * velocity (the fastest point of an element’s movement) and ends at rest.
+ *
+ * <p>This is equivalent to the Compose {@code LinearOutSlowInEasing}.
+ */
+ @NonNull
+ Easing LINEAR_OUT_SLOW_IN_EASING = cubicBezier(0.0f, 0.0f, 0.2f, 1.0f);
+
+ /**
+ * Elements exiting a screen use acceleration easing, where they start at rest and end at peak
+ * velocity.
+ *
+ * <p>This is equivalent to the Compose {@code FastOutLinearInEasing}.
+ */
+ @NonNull
+ Easing FAST_OUT_LINEAR_IN_EASING = cubicBezier(0.4f, 0.0f, 1.0f, 1.0f);
+
/**
* Get the protocol buffer representation of this object.
*
@@ -485,7 +483,7 @@
*
* @since 1.2
*/
- public static final class CubicBezierEasing implements Easing {
+ static final class CubicBezierEasing implements Easing {
private final AnimationParameterProto.CubicBezierEasing mImpl;
@Nullable private final Fingerprint mFingerprint;
@@ -592,7 +590,7 @@
}
/** Builder for {@link CubicBezierEasing}. */
- public static final class Builder implements Easing.Builder {
+ static final class Builder implements Easing.Builder {
private final AnimationParameterProto.CubicBezierEasing.Builder mImpl =
AnimationParameterProto.CubicBezierEasing.newBuilder();
private final Fingerprint mFingerprint = new Fingerprint(856403705);
@@ -665,6 +663,17 @@
* @since 1.2
*/
public static final class Repeatable {
+
+ /**
+ * An infinite {@link Repeatable} where animation restarts from the beginning when repeated.
+ */
+ public static final Repeatable INFINITE_REPEATABLE_WITH_RESTART =
+ new Repeatable.Builder().setRepeatMode(REPEAT_MODE_RESTART).build();
+ /**
+ * An infinite {@link Repeatable} where animation is played in reverse when repeated.
+ */ public static final Repeatable INFINITE_REPEATABLE_WITH_REVERSE =
+ new Repeatable.Builder().setRepeatMode(REPEAT_MODE_REVERSE).build();
+
private final AnimationParameterProto.Repeatable mImpl;
@Nullable private final Fingerprint mFingerprint;
diff --git a/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/AppDataKey.java b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/AppDataKey.java
new file mode 100644
index 0000000..e350a5f
--- /dev/null
+++ b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/AppDataKey.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.wear.protolayout.expression;
+
+import androidx.annotation.NonNull;
+
+/**
+ * Represent a {@link DynamicDataKey} that references app/tile pushed state data.
+ *
+ * @param <T> The data type of the dynamic values that this key is bound to.
+ */
+public final class AppDataKey<T extends DynamicBuilders.DynamicType> extends DynamicDataKey<T> {
+ @NonNull private static final String DEFAULT_NAMESPACE = "";
+
+ /**
+ * Create a {@link AppDataKey} with the specified key.
+ * @param key The key in the state to bind to.
+ */
+ public AppDataKey(@NonNull String key) {
+ super(DEFAULT_NAMESPACE, key);
+ }
+}
diff --git a/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/DynamicBuilders.java b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/DynamicBuilders.java
index 9374277..284104c 100644
--- a/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/DynamicBuilders.java
+++ b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/DynamicBuilders.java
@@ -36,11 +36,13 @@
import androidx.wear.protolayout.expression.FixedValueBuilders.FixedInstant;
import androidx.wear.protolayout.expression.FixedValueBuilders.FixedInt32;
import androidx.wear.protolayout.expression.FixedValueBuilders.FixedString;
-import androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue;
+import androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue;
import androidx.wear.protolayout.expression.proto.DynamicProto;
+import androidx.wear.protolayout.protobuf.CodedInputStream;
+import androidx.wear.protolayout.protobuf.CodedOutputStream;
import androidx.wear.protolayout.protobuf.ExtensionRegistryLite;
-import androidx.wear.protolayout.protobuf.InvalidProtocolBufferException;
+import java.io.IOException;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.time.Duration;
@@ -677,6 +679,16 @@
return mImpl.getSourceKey();
}
+ /**
+ * Gets the namespace for the state key.
+ *
+ * @since 1.2
+ */
+ @NonNull
+ public String getSourceNamespace() {
+ return mImpl.getSourceNamespace();
+ }
+
@Override
@RestrictTo(Scope.LIBRARY_GROUP)
@Nullable
@@ -712,7 +724,12 @@
@Override
@NonNull
public String toString() {
- return "StateInt32Source{" + "sourceKey=" + getSourceKey() + "}";
+ return "StateInt32Source{"
+ + "sourceKey="
+ + getSourceKey()
+ + ", sourceNamespace="
+ + getSourceNamespace()
+ + "}";
}
/** Builder for {@link StateInt32Source}. */
@@ -735,6 +752,18 @@
return this;
}
+ /**
+ * Sets the name space for the state key.
+ *
+ * @since 1.2
+ */
+ @NonNull
+ public Builder setSourceNamespace(@NonNull String sourceNamespace) {
+ mImpl.setSourceNamespace(sourceNamespace);
+ mFingerprint.recordPropertyUpdate(2, sourceNamespace.hashCode());
+ return this;
+ }
+
@Override
@NonNull
public StateInt32Source build() {
@@ -1479,25 +1508,72 @@
/**
* Creates a {@link DynamicInt32} from a byte array generated by {@link
* #toDynamicInt32ByteArray()}.
+ *
+ * @throws IllegalArgumentException if the byte array does not contain a valid serialization
*/
@NonNull
static DynamicInt32 fromByteArray(@NonNull byte[] byteArray) {
+ return fromByteArray(byteArray, 0, byteArray.length);
+ }
+
+ /**
+ * Creates a {@link DynamicInt32} from the provided byte array at the provided offset and
+ * length, that was generated by one of the {@link #toDynamicInt32ByteArray} overloads.
+ *
+ * @throws IllegalArgumentException if the byte array does not contain a valid serialization
+ * in the provided offset and length
+ */
+ @NonNull
+ static DynamicInt32 fromByteArray(@NonNull byte[] byteArray, int offset, int length) {
try {
return dynamicInt32FromProto(
DynamicProto.DynamicInt32.parseFrom(
- byteArray, ExtensionRegistryLite.getEmptyRegistry()));
- } catch (InvalidProtocolBufferException e) {
+ CodedInputStream.newInstance(byteArray, offset, length),
+ ExtensionRegistryLite.getEmptyRegistry()));
+ } catch (IOException e) {
throw new IllegalArgumentException(
"Byte array could not be parsed into DynamicInt32", e);
}
}
- /** Creates a byte array that can later be used with {@link #fromByteArray(byte[])}. */
+ /**
+ * Serializes the {@link DynamicInt32} into a new byte array that can later be used with
+ * {@link #fromByteArray(byte[])}.
+ */
@NonNull
default byte[] toDynamicInt32ByteArray() {
return toDynamicInt32Proto().toByteArray();
}
+ /**
+ * Serializes the {@link DynamicInt32} into the provided byte array, returning the amount of
+ * bytes written, that can later be used with {@code DynamicInt32.fromByteArray(byteArray,
+ * 0, bytesWritten)}.
+ *
+ * @throws IllegalArgumentException if the byte array is too small
+ */
+ default int toDynamicInt32ByteArray(@NonNull byte[] byteArray) {
+ return toDynamicInt32ByteArray(byteArray, 0, byteArray.length);
+ }
+
+ /**
+ * Serializes the {@link DynamicInt32} into the provided byte array, returning the amount of
+ * bytes written, limited by the provided offset and length, that can later be used with
+ * {@code DynamicInt32.fromByteArray(byteArray, offset, bytesWritten)}.
+ *
+ * @throws IllegalArgumentException if the byte array is too small
+ */
+ default int toDynamicInt32ByteArray(@NonNull byte[] byteArray, int offset, int length) {
+ CodedOutputStream stream = CodedOutputStream.newInstance(byteArray, offset, length);
+ try {
+ toDynamicInt32Proto().writeTo(stream);
+ } catch (IOException e) {
+ throw new IllegalArgumentException(
+ "Provided byte array not large enough to contain this DynamicInt32", e);
+ }
+ return stream.getTotalBytesWritten();
+ }
+
/** Creates a constant-valued {@link DynamicInt32}. */
@NonNull
static DynamicInt32 constant(int constant) {
@@ -1507,12 +1583,14 @@
/**
* Creates a {@link DynamicInt32} that is bound to the value of an item of the State.
*
- * @param stateKey The key to a {@link StateEntryValue} with an int value from the
- * provider's state.
+ * @param dynamicDataKey The source key to a {@link DynamicDataValue} with an int value.
*/
@NonNull
- static DynamicInt32 fromState(@NonNull String stateKey) {
- return new StateInt32Source.Builder().setSourceKey(stateKey).build();
+ static DynamicInt32 from(@NonNull DynamicDataKey<DynamicInt32> dynamicDataKey) {
+ return new StateInt32Source.Builder()
+ .setSourceKey(dynamicDataKey.getKey())
+ .setSourceNamespace(dynamicDataKey.getNamespace())
+ .build();
}
/**
@@ -1548,12 +1626,13 @@
* time the state value changes, this {@link DynamicInt32} will animate from its current
* value to the new value (from the state).
*
- * @param stateKey The key to a {@link StateEntryValue} with an int value from the
- * provider's state.
+ * @param dynamicDataKey The source key to a {@link DynamicDataValue} with an int value.
*/
@NonNull
- static DynamicInt32 animate(@NonNull String stateKey) {
- return new AnimatableDynamicInt32.Builder().setInput(fromState(stateKey)).build();
+ static DynamicInt32 animate(@NonNull DynamicDataKey<DynamicInt32> dynamicDataKey) {
+ return new AnimatableDynamicInt32.Builder()
+ .setInput(from(dynamicDataKey))
+ .build();
}
/**
@@ -1561,15 +1640,15 @@
* time the state value changes, this {@link DynamicInt32} will animate from its current
* value to the new value (from the state).
*
- * @param stateKey The key to a {@link StateEntryValue} with an int value from the
- * provider's state.
+ * @param dynamicDataKey The source key to a {@link DynamicDataValue} with an int value
* @param animationSpec The animation parameters.
*/
@NonNull
static DynamicInt32 animate(
- @NonNull String stateKey, @NonNull AnimationSpec animationSpec) {
+ @NonNull DynamicDataKey<DynamicInt32> dynamicDataKey,
+ @NonNull AnimationSpec animationSpec) {
return new AnimatableDynamicInt32.Builder()
- .setInput(fromState(stateKey))
+ .setInput(from(dynamicDataKey))
.setAnimationSpec(animationSpec)
.build();
}
@@ -2643,6 +2722,17 @@
return mImpl.getSourceKey();
}
+ /**
+ * Gets the namespace for the state key.
+ *
+ * @since 1.2
+ */
+ @NonNull
+ public String getSourceNamespace() {
+ return mImpl.getSourceNamespace();
+ }
+
+
@Override
@RestrictTo(Scope.LIBRARY_GROUP)
@Nullable
@@ -2678,7 +2768,11 @@
@Override
@NonNull
public String toString() {
- return "StateStringSource{" + "sourceKey=" + getSourceKey() + "}";
+ return "StateStringSource{"+ "sourceKey="
+ + getSourceKey()
+ + ", sourceNamespace="
+ + getSourceNamespace()
+ + "}";
}
/** Builder for {@link StateStringSource}. */
@@ -2701,6 +2795,18 @@
return this;
}
+ /**
+ * Sets the name space for the state key.
+ *
+ * @since 1.2
+ */
+ @NonNull
+ public Builder setSourceNamespace(@NonNull String sourceNamespace) {
+ mImpl.setSourceNamespace(sourceNamespace);
+ mFingerprint.recordPropertyUpdate(2, sourceNamespace.hashCode());
+ return this;
+ }
+
@Override
@NonNull
public StateStringSource build() {
@@ -3226,26 +3332,73 @@
/**
* Creates a {@link DynamicString} from a byte array generated by {@link
* #toDynamicStringByteArray()}.
+ *
+ * @throws IllegalArgumentException if the byte array does not contain a valid serialization
*/
@NonNull
static DynamicString fromByteArray(@NonNull byte[] byteArray) {
+ return fromByteArray(byteArray, 0, byteArray.length);
+ }
+
+ /**
+ * Creates a {@link DynamicString} from the provided byte array at the provided offset and
+ * length, that was generated by one of the {@link #toDynamicStringByteArray} overloads.
+ *
+ * @throws IllegalArgumentException if the byte array does not contain a valid serialization
+ * in the provided offset and length
+ */
+ @NonNull
+ static DynamicString fromByteArray(@NonNull byte[] byteArray, int offset, int length) {
try {
return dynamicStringFromProto(
DynamicProto.DynamicString.parseFrom(
- byteArray, ExtensionRegistryLite.getEmptyRegistry()));
- } catch (InvalidProtocolBufferException e) {
+ CodedInputStream.newInstance(byteArray, offset, length),
+ ExtensionRegistryLite.getEmptyRegistry()));
+ } catch (IOException e) {
throw new IllegalArgumentException(
"Byte array could not be parsed into DynamicString", e);
}
}
- /** Creates a byte array that can later be used with {@link #fromByteArray(byte[])}. */
+ /**
+ * Serializes the {@link DynamicString} into a new byte array that can later be used with
+ * {@link #fromByteArray(byte[])}.
+ */
@NonNull
default byte[] toDynamicStringByteArray() {
return toDynamicStringProto().toByteArray();
}
/**
+ * Serializes the {@link DynamicString} into the provided byte array, returning the amount
+ * of bytes written, that can later be used with {@code DynamicString.fromByteArray(
+ * byteArray, 0, bytesWritten)}.
+ *
+ * @throws IllegalArgumentException if the byte array is too small
+ */
+ default int toDynamicStringByteArray(@NonNull byte[] byteArray) {
+ return toDynamicStringByteArray(byteArray, 0, byteArray.length);
+ }
+
+ /**
+ * Serializes the {@link DynamicString} into the provided byte array, returning the amount
+ * of bytes written, limited by the provided offset and length, that can later be used with
+ * {@code DynamicString.fromByteArray(byteArray, offset, bytesWritten)}.
+ *
+ * @throws IllegalArgumentException if the byte array is too small
+ */
+ default int toDynamicStringByteArray(@NonNull byte[] byteArray, int offset, int length) {
+ CodedOutputStream stream = CodedOutputStream.newInstance(byteArray, offset, length);
+ try {
+ toDynamicStringProto().writeTo(stream);
+ } catch (IOException e) {
+ throw new IllegalArgumentException(
+ "Provided byte array not large enough to contain this DynamicString", e);
+ }
+ return stream.getTotalBytesWritten();
+ }
+
+ /**
* Creates a constant-valued {@link DynamicString}. The resulted {@link DynamicString} is
* subject to being truncated if it's too long.
*/
@@ -3258,12 +3411,14 @@
* Creates a {@link DynamicString} that is bound to the value of an item of the State. The
* resulted {@link DynamicString} is subject to being truncated if it's too long.
*
- * @param stateKey The key to a {@link StateEntryValue} with a string value from the
- * provider's state.
+ * @param dynamicDataKey The source key to a {@link DynamicDataValue} with a string value.
*/
@NonNull
- static DynamicString fromState(@NonNull String stateKey) {
- return new StateStringSource.Builder().setSourceKey(stateKey).build();
+ static DynamicString from(@NonNull DynamicDataKey<DynamicString> dynamicDataKey) {
+ return new StateStringSource.Builder()
+ .setSourceKey(dynamicDataKey.getKey())
+ .setSourceNamespace(dynamicDataKey.getNamespace())
+ .build();
}
/**
@@ -3520,6 +3675,17 @@
return mImpl.getSourceKey();
}
+ /**
+ * Gets the namespace for the state key.
+ *
+ * @since 1.2
+ */
+ @NonNull
+ public String getSourceNamespace() {
+ return mImpl.getSourceNamespace();
+ }
+
+
@Override
@RestrictTo(Scope.LIBRARY_GROUP)
@Nullable
@@ -3555,7 +3721,11 @@
@Override
@NonNull
public String toString() {
- return "StateFloatSource{" + "sourceKey=" + getSourceKey() + "}";
+ return "StateFloatSource{"+ "sourceKey="
+ + getSourceKey()
+ + ", sourceNamespace="
+ + getSourceNamespace()
+ + "}";
}
/** Builder for {@link StateFloatSource}. */
@@ -3578,6 +3748,18 @@
return this;
}
+ /**
+ * Sets the name space for the state key.
+ *
+ * @since 1.2
+ */
+ @NonNull
+ public Builder setSourceNamespace(@NonNull String sourceNamespace) {
+ mImpl.setSourceNamespace(sourceNamespace);
+ mFingerprint.recordPropertyUpdate(2, sourceNamespace.hashCode());
+ return this;
+ }
+
@Override
@NonNull
public StateFloatSource build() {
@@ -3995,26 +4177,73 @@
/**
* Creates a {@link DynamicFloat} from a byte array generated by {@link
* #toDynamicFloatByteArray()}.
+ *
+ * @throws IllegalArgumentException if the byte array does not contain a valid serialization
*/
@NonNull
static DynamicFloat fromByteArray(@NonNull byte[] byteArray) {
+ return fromByteArray(byteArray, 0, byteArray.length);
+ }
+
+ /**
+ * Creates a {@link DynamicFloat} from the provided byte array at the provided offset and
+ * length, that was generated by one of the {@link #toDynamicFloatByteArray} overloads.
+ *
+ * @throws IllegalArgumentException if the byte array does not contain a valid serialization
+ * in the provided offset and length
+ */
+ @NonNull
+ static DynamicFloat fromByteArray(@NonNull byte[] byteArray, int offset, int length) {
try {
return dynamicFloatFromProto(
DynamicProto.DynamicFloat.parseFrom(
- byteArray, ExtensionRegistryLite.getEmptyRegistry()));
- } catch (InvalidProtocolBufferException e) {
+ CodedInputStream.newInstance(byteArray, offset, length),
+ ExtensionRegistryLite.getEmptyRegistry()));
+ } catch (IOException e) {
throw new IllegalArgumentException(
"Byte array could not be parsed into DynamicFloat", e);
}
}
- /** Creates a byte array that can later be used with {@link #fromByteArray(byte[])}. */
+ /**
+ * Serializes the {@link DynamicFloat} into a new byte array that can later be used with
+ * {@link #fromByteArray(byte[])}.
+ */
@NonNull
default byte[] toDynamicFloatByteArray() {
return toDynamicFloatProto().toByteArray();
}
/**
+ * Serializes the {@link DynamicFloat} into the provided byte array, returning the amount of
+ * bytes written, that can later be used with {@code DynamicFloat.fromByteArray(byteArray,
+ * 0, bytesWritten)}.
+ *
+ * @throws IllegalArgumentException if the byte array is too small
+ */
+ default int toDynamicFloatByteArray(@NonNull byte[] byteArray) {
+ return toDynamicFloatByteArray(byteArray, 0, byteArray.length);
+ }
+
+ /**
+ * Serializes the {@link DynamicFloat} into the provided byte array, returning the amount of
+ * bytes written, limited by the provided offset and length, that can later be used with
+ * {@code DynamicFloat.fromByteArray(byteArray, offset, bytesWritten)}.
+ *
+ * @throws IllegalArgumentException if the byte array is too small
+ */
+ default int toDynamicFloatByteArray(@NonNull byte[] byteArray, int offset, int length) {
+ CodedOutputStream stream = CodedOutputStream.newInstance(byteArray, offset, length);
+ try {
+ toDynamicFloatProto().writeTo(stream);
+ } catch (IOException e) {
+ throw new IllegalArgumentException(
+ "Provided byte array not large enough to contain this DynamicFloat", e);
+ }
+ return stream.getTotalBytesWritten();
+ }
+
+ /**
* Creates a constant-valued {@link DynamicFloat}.
*
* <p>If {@code Float.isNan(constant)} is true, the value will be invalid. And any
@@ -4029,12 +4258,14 @@
/**
* Creates a {@link DynamicFloat} that is bound to the value of an item of the State.
*
- * @param stateKey The key to a {@link StateEntryValue} with a float value from the
- * provider's state.
+ * @param dynamicDataKey The data source to a {@link DynamicDataValue} with a float value.
*/
@NonNull
- static DynamicFloat fromState(@NonNull String stateKey) {
- return new StateFloatSource.Builder().setSourceKey(stateKey).build();
+ static DynamicFloat from(@NonNull DynamicDataKey<DynamicFloat> dynamicDataKey) {
+ return new StateFloatSource.Builder()
+ .setSourceKey(dynamicDataKey.getKey())
+ .setSourceNamespace(dynamicDataKey.getNamespace())
+ .build();
}
/**
@@ -4071,12 +4302,13 @@
* time the state value changes, this {@link DynamicFloat} will animate from its current
* value to the new value (from the state).
*
- * @param stateKey The key to a {@link StateEntryValue} with a float value from the
- * providers state.
+ * @param dynamicDataKey The data source to a {@link DynamicDataValue} with a float value.
*/
@NonNull
- static DynamicFloat animate(@NonNull String stateKey) {
- return new AnimatableDynamicFloat.Builder().setInput(fromState(stateKey)).build();
+ static DynamicFloat animate(@NonNull DynamicDataKey<DynamicFloat> dynamicDataKey) {
+ return new AnimatableDynamicFloat.Builder()
+ .setInput(from(dynamicDataKey))
+ .build();
}
/**
@@ -4084,15 +4316,15 @@
* time the state value changes, this {@link DynamicFloat} will animate from its current
* value to the new value (from the state).
*
- * @param stateKey The key to a {@link StateEntryValue} with a float value from the
- * providers state.
+ * @param dynamicDataKey The source key to a {@link DynamicDataValue} with a float value.
* @param animationSpec The animation parameters.
*/
@NonNull
static DynamicFloat animate(
- @NonNull String stateKey, @NonNull AnimationSpec animationSpec) {
+ @NonNull DynamicDataKey<DynamicFloat> dynamicDataKey,
+ @NonNull AnimationSpec animationSpec) {
return new AnimatableDynamicFloat.Builder()
- .setInput(fromState(stateKey))
+ .setInput(from(dynamicDataKey))
.setAnimationSpec(animationSpec)
.build();
}
@@ -4935,6 +5167,17 @@
return mImpl.getSourceKey();
}
+ /**
+ * Gets the namespace for the state key.
+ *
+ * @since 1.2
+ */
+ @NonNull
+ public String getSourceNamespace() {
+ return mImpl.getSourceNamespace();
+ }
+
+
@Override
@RestrictTo(Scope.LIBRARY_GROUP)
@Nullable
@@ -4970,7 +5213,12 @@
@Override
@NonNull
public String toString() {
- return "StateBoolSource{" + "sourceKey=" + getSourceKey() + "}";
+ return "StateBoolSource{"
+ + "sourceKey="
+ + getSourceKey()
+ + ", sourceNamespace="
+ + getSourceNamespace()
+ + "}";
}
/** Builder for {@link StateBoolSource}. */
@@ -4994,6 +5242,18 @@
return this;
}
+ /**
+ * Sets the name space for the state key.
+ *
+ * @since 1.2
+ */
+ @NonNull
+ public Builder setSourceNamespace(@NonNull String sourceNamespace) {
+ mImpl.setSourceNamespace(sourceNamespace);
+ mFingerprint.recordPropertyUpdate(2, sourceNamespace.hashCode());
+ return this;
+ }
+
@Override
@NonNull
public StateBoolSource build() {
@@ -5551,25 +5811,72 @@
/**
* Creates a {@link DynamicBool} from a byte array generated by {@link
* #toDynamicBoolByteArray()}.
+ *
+ * @throws IllegalArgumentException if the byte array does not contain a valid serialization
*/
@NonNull
static DynamicBool fromByteArray(@NonNull byte[] byteArray) {
+ return fromByteArray(byteArray, 0, byteArray.length);
+ }
+
+ /**
+ * Creates a {@link DynamicBool} from the provided byte array at the provided offset and
+ * length, that was generated by one of the {@link #toDynamicBoolByteArray} overloads.
+ *
+ * @throws IllegalArgumentException if the byte array does not contain a valid serialization
+ * in the provided offset and length
+ */
+ @NonNull
+ static DynamicBool fromByteArray(@NonNull byte[] byteArray, int offset, int length) {
try {
return dynamicBoolFromProto(
DynamicProto.DynamicBool.parseFrom(
- byteArray, ExtensionRegistryLite.getEmptyRegistry()));
- } catch (InvalidProtocolBufferException e) {
+ CodedInputStream.newInstance(byteArray, offset, length),
+ ExtensionRegistryLite.getEmptyRegistry()));
+ } catch (IOException e) {
throw new IllegalArgumentException(
"Byte array could not be parsed into DynamicBool", e);
}
}
- /** Creates a byte array that can later be used with {@link #fromByteArray(byte[])}. */
+ /**
+ * Serializes the {@link DynamicBool} into a new byte array that can later be used with
+ * {@link #fromByteArray(byte[])}.
+ */
@NonNull
default byte[] toDynamicBoolByteArray() {
return toDynamicBoolProto().toByteArray();
}
+ /**
+ * Serializes the {@link DynamicBool} into the provided byte array, returning the amount of
+ * bytes written, that can later be used with {@code DynamicBool.fromByteArray(byteArray, 0,
+ * bytesWritten)}.
+ *
+ * @throws IllegalArgumentException if the byte array is too small
+ */
+ default int toDynamicBoolByteArray(@NonNull byte[] byteArray) {
+ return toDynamicBoolByteArray(byteArray, 0, byteArray.length);
+ }
+
+ /**
+ * Serializes the {@link DynamicBool} into the provided byte array, returning the amount of
+ * bytes written, limited by the provided offset and length, that can later be used with
+ * {@code DynamicBool.fromByteArray(byteArray, offset, bytesWritten)}.
+ *
+ * @throws IllegalArgumentException if the byte array is too small
+ */
+ default int toDynamicBoolByteArray(@NonNull byte[] byteArray, int offset, int length) {
+ CodedOutputStream stream = CodedOutputStream.newInstance(byteArray, offset, length);
+ try {
+ toDynamicBoolProto().writeTo(stream);
+ } catch (IOException e) {
+ throw new IllegalArgumentException(
+ "Provided byte array not large enough to contain this DynamicBool", e);
+ }
+ return stream.getTotalBytesWritten();
+ }
+
/** Creates a constant-valued {@link DynamicBool}. */
@NonNull
static DynamicBool constant(boolean constant) {
@@ -5579,12 +5886,14 @@
/**
* Creates a {@link DynamicBool} that is bound to the value of an item of the State.
*
- * @param stateKey The key to a {@link StateEntryValue} with a boolean value from the
- * provider's state.
+ * @param dynamicDataKey The key to a {@link DynamicDataValue} with a boolean value.
*/
@NonNull
- static DynamicBool fromState(@NonNull String stateKey) {
- return new StateBoolSource.Builder().setSourceKey(stateKey).build();
+ static DynamicBool from(@NonNull DynamicDataKey<DynamicBool> dynamicDataKey) {
+ return new StateBoolSource.Builder()
+ .setSourceKey(dynamicDataKey.getKey())
+ .setSourceNamespace(dynamicDataKey.getNamespace())
+ .build();
}
/**
@@ -5727,6 +6036,16 @@
return mImpl.getSourceKey();
}
+ /**
+ * Gets the namespace for the state key.
+ *
+ * @since 1.2
+ */
+ @NonNull
+ public String getSourceNamespace() {
+ return mImpl.getSourceNamespace();
+ }
+
@Override
@RestrictTo(Scope.LIBRARY_GROUP)
@Nullable
@@ -5762,7 +6081,12 @@
@Override
@NonNull
public String toString() {
- return "StateColorSource{" + "sourceKey=" + getSourceKey() + "}";
+ return "StateColorSource{"
+ + "sourceKey="
+ + getSourceKey()
+ + ", sourceNamespace="
+ + getSourceNamespace()
+ + "}";
}
/** Builder for {@link StateColorSource}. */
@@ -5785,6 +6109,18 @@
return this;
}
+ /**
+ * Sets the name space for the state key.
+ *
+ * @since 1.2
+ */
+ @NonNull
+ public Builder setSourceNamespace(@NonNull String sourceNamespace) {
+ mImpl.setSourceNamespace(sourceNamespace);
+ mFingerprint.recordPropertyUpdate(2, sourceNamespace.hashCode());
+ return this;
+ }
+
@Override
@NonNull
public StateColorSource build() {
@@ -6255,25 +6591,72 @@
/**
* Creates a {@link DynamicColor} from a byte array generated by {@link
* #toDynamicColorByteArray()}.
+ *
+ * @throws IllegalArgumentException if the byte array does not contain a valid serialization
*/
@NonNull
static DynamicColor fromByteArray(@NonNull byte[] byteArray) {
+ return fromByteArray(byteArray, 0, byteArray.length);
+ }
+
+ /**
+ * Creates a {@link DynamicColor} from the provided byte array at the provided offset and
+ * length, that was generated by one of the {@link #toDynamicColorByteArray} overloads.
+ *
+ * @throws IllegalArgumentException if the byte array does not contain a valid serialization
+ * in the provided offset and length
+ */
+ @NonNull
+ static DynamicColor fromByteArray(@NonNull byte[] byteArray, int offset, int length) {
try {
return dynamicColorFromProto(
DynamicProto.DynamicColor.parseFrom(
- byteArray, ExtensionRegistryLite.getEmptyRegistry()));
- } catch (InvalidProtocolBufferException e) {
+ CodedInputStream.newInstance(byteArray, offset, length),
+ ExtensionRegistryLite.getEmptyRegistry()));
+ } catch (IOException e) {
throw new IllegalArgumentException(
"Byte array could not be parsed into DynamicColor", e);
}
}
- /** Creates a byte array that can later be used with {@link #fromByteArray(byte[])}. */
+ /**
+ * Serializes the {@link DynamicColor} into a new byte array that can later be used with
+ * {@link #fromByteArray(byte[])}.
+ */
@NonNull
default byte[] toDynamicColorByteArray() {
return toDynamicColorProto().toByteArray();
}
+ /**
+ * Serializes the {@link DynamicColor} into the provided byte array, returning the amount of
+ * bytes written, that can later be used with {@code DynamicColor.fromByteArray(byteArray,
+ * 0, bytesWritten)}.
+ *
+ * @throws IllegalArgumentException if the byte array is too small
+ */
+ default int toDynamicColorByteArray(@NonNull byte[] byteArray) {
+ return toDynamicColorByteArray(byteArray, 0, byteArray.length);
+ }
+
+ /**
+ * Serializes the {@link DynamicColor} into the provided byte array, returning the amount of
+ * bytes written, limited by the provided offset and length, that can later be used with
+ * {@code DynamicColor.fromByteArray(byteArray, offset, bytesWritten)}.
+ *
+ * @throws IllegalArgumentException if the byte array is too small
+ */
+ default int toDynamicColorByteArray(@NonNull byte[] byteArray, int offset, int length) {
+ CodedOutputStream stream = CodedOutputStream.newInstance(byteArray, offset, length);
+ try {
+ toDynamicColorProto().writeTo(stream);
+ } catch (IOException e) {
+ throw new IllegalArgumentException(
+ "Provided byte array not large enough to contain this DynamicColor", e);
+ }
+ return stream.getTotalBytesWritten();
+ }
+
/** Creates a constant-valued {@link DynamicColor}. */
@NonNull
static DynamicColor constant(@ColorInt int constant) {
@@ -6283,12 +6666,14 @@
/**
* Creates a {@link DynamicColor} that is bound to the value of an item of the State.
*
- * @param stateKey The key to a {@link StateEntryValue} with a color value from the
- * provider's state.
+ * @param dynamicDataKey The source key to a {@link DynamicDataValue} with a color value.
*/
@NonNull
- static DynamicColor fromState(@NonNull String stateKey) {
- return new StateColorSource.Builder().setSourceKey(stateKey).build();
+ static DynamicColor from(@NonNull DynamicDataKey<DynamicColor> dynamicDataKey) {
+ return new StateColorSource.Builder()
+ .setSourceKey(dynamicDataKey.getKey())
+ .setSourceNamespace(dynamicDataKey.getNamespace())
+ .build();
}
/**
@@ -6326,12 +6711,13 @@
* time the state value changes, this {@link DynamicColor} will animate from its current
* value to the new value (from the state).
*
- * @param stateKey The key to a {@link StateEntryValue} with a color value from the
- * provider's state.
+ * @param dynamicDataKey The source key to a {@link DynamicDataValue} with a color value.
*/
@NonNull
- static DynamicColor animate(@NonNull String stateKey) {
- return new AnimatableDynamicColor.Builder().setInput(fromState(stateKey)).build();
+ static DynamicColor animate(@NonNull DynamicDataKey<DynamicColor> dynamicDataKey) {
+ return new AnimatableDynamicColor.Builder()
+ .setInput(from(dynamicDataKey))
+ .build();
}
/**
@@ -6339,15 +6725,15 @@
* time the state value changes, this {@link DynamicColor} will animate from its current
* value to the new value (from the state).
*
- * @param stateKey The key to a {@link StateEntryValue} with a color value from the
- * provider's state.
+ * @param dynamicDataKey The source key to a {@link DynamicDataValue} with a color value.
* @param animationSpec The animation parameters.
*/
@NonNull
static DynamicColor animate(
- @NonNull String stateKey, @NonNull AnimationSpec animationSpec) {
+ @NonNull DynamicDataKey<DynamicColor> dynamicDataKey,
+ @NonNull AnimationSpec animationSpec) {
return new AnimatableDynamicColor.Builder()
- .setInput(fromState(stateKey))
+ .setInput(from(dynamicDataKey))
.setAnimationSpec(animationSpec)
.build();
}
@@ -6691,26 +7077,73 @@
/**
* Creates a {@link DynamicInstant} from a byte array generated by {@link
* #toDynamicInstantByteArray()}.
+ *
+ * @throws IllegalArgumentException if the byte array does not contain a valid serialization
*/
@NonNull
static DynamicInstant fromByteArray(@NonNull byte[] byteArray) {
+ return fromByteArray(byteArray, 0, byteArray.length);
+ }
+
+ /**
+ * Creates a {@link DynamicInstant} from the provided byte array at the provided offset and
+ * length, that was generated by one of the {@link #toDynamicInstantByteArray} overloads.
+ *
+ * @throws IllegalArgumentException if the byte array does not contain a valid serialization
+ * in the provided offset and length
+ */
+ @NonNull
+ static DynamicInstant fromByteArray(@NonNull byte[] byteArray, int offset, int length) {
try {
return dynamicInstantFromProto(
DynamicProto.DynamicInstant.parseFrom(
- byteArray, ExtensionRegistryLite.getEmptyRegistry()));
- } catch (InvalidProtocolBufferException e) {
+ CodedInputStream.newInstance(byteArray, offset, length),
+ ExtensionRegistryLite.getEmptyRegistry()));
+ } catch (IOException e) {
throw new IllegalArgumentException(
"Byte array could not be parsed into DynamicInstant", e);
}
}
- /** Creates a byte array that can later be used with {@link #fromByteArray(byte[])}. */
+ /**
+ * Serializes the {@link DynamicInstant} into a new byte array that can later be used with
+ * {@link #fromByteArray(byte[])}.
+ */
@NonNull
default byte[] toDynamicInstantByteArray() {
return toDynamicInstantProto().toByteArray();
}
/**
+ * Serializes the {@link DynamicInstant} into the provided byte array, returning the amount
+ * of bytes written, that can later be used with {@code DynamicInstant.fromByteArray(
+ * byteArray, 0, bytesWritten)}.
+ *
+ * @throws IllegalArgumentException if the byte array is too small
+ */
+ default int toDynamicInstantByteArray(@NonNull byte[] byteArray) {
+ return toDynamicInstantByteArray(byteArray, 0, byteArray.length);
+ }
+
+ /**
+ * Serializes the {@link DynamicInstant} into the provided byte array, returning the amount
+ * of bytes written, limited by the provided offset and length, that can later be used with
+ * {@code DynamicInstant.fromByteArray(byteArray, offset, bytesWritten)}.
+ *
+ * @throws IllegalArgumentException if the byte array is too small
+ */
+ default int toDynamicInstantByteArray(@NonNull byte[] byteArray, int offset, int length) {
+ CodedOutputStream stream = CodedOutputStream.newInstance(byteArray, offset, length);
+ try {
+ toDynamicInstantProto().writeTo(stream);
+ } catch (IOException e) {
+ throw new IllegalArgumentException(
+ "Provided byte array not large enough to contain this DynamicInstant", e);
+ }
+ return stream.getTotalBytesWritten();
+ }
+
+ /**
* Creates a constant-valued {@link DynamicInstant} from an {@link Instant}. If {@link
* Instant} precision is greater than seconds, then any excess precision information will be
* dropped.
@@ -7117,26 +7550,73 @@
/**
* Creates a {@link DynamicDuration} from a byte array generated by {@link
* #toDynamicDurationByteArray()}.
+ *
+ * @throws IllegalArgumentException if the byte array does not contain a valid serialization
*/
@NonNull
static DynamicDuration fromByteArray(@NonNull byte[] byteArray) {
+ return fromByteArray(byteArray, 0, byteArray.length);
+ }
+
+ /**
+ * Creates a {@link DynamicDuration} from the provided byte array at the provided offset and
+ * length, that was generated by one of the {@link #toDynamicDurationByteArray} overloads.
+ *
+ * @throws IllegalArgumentException if the byte array does not contain a valid serialization
+ * in the provided offset and length
+ */
+ @NonNull
+ static DynamicDuration fromByteArray(@NonNull byte[] byteArray, int offset, int length) {
try {
return dynamicDurationFromProto(
DynamicProto.DynamicDuration.parseFrom(
- byteArray, ExtensionRegistryLite.getEmptyRegistry()));
- } catch (InvalidProtocolBufferException e) {
+ CodedInputStream.newInstance(byteArray, offset, length),
+ ExtensionRegistryLite.getEmptyRegistry()));
+ } catch (IOException e) {
throw new IllegalArgumentException(
"Byte array could not be parsed into DynamicDuration", e);
}
}
- /** Creates a byte array that can later be used with {@link #fromByteArray(byte[])}. */
+ /**
+ * Serializes the {@link DynamicDuration} into a new byte array that can later be used with
+ * {@link #fromByteArray(byte[])}.
+ */
@NonNull
default byte[] toDynamicDurationByteArray() {
return toDynamicDurationProto().toByteArray();
}
/**
+ * Serializes the {@link DynamicDuration} into the provided byte array, returning the amount
+ * of bytes written, that can later be used with {@code DynamicDuration.fromByteArray(
+ * byteArray, 0, bytesWritten)}.
+ *
+ * @throws IllegalArgumentException if the byte array is too small
+ */
+ default int toDynamicDurationByteArray(@NonNull byte[] byteArray) {
+ return toDynamicDurationByteArray(byteArray, 0, byteArray.length);
+ }
+
+ /**
+ * Serializes the {@link DynamicDuration} into the provided byte array, returning the amount
+ * of bytes written, limited by the provided offset and length, that can later be used with
+ * {@code DynamicDuration.fromByteArray(byteArray, offset, bytesWritten)}.
+ *
+ * @throws IllegalArgumentException if the byte array is too small
+ */
+ default int toDynamicDurationByteArray(@NonNull byte[] byteArray, int offset, int length) {
+ CodedOutputStream stream = CodedOutputStream.newInstance(byteArray, offset, length);
+ try {
+ toDynamicDurationProto().writeTo(stream);
+ } catch (IOException e) {
+ throw new IllegalArgumentException(
+ "Provided byte array not large enough to contain this DynamicDuration", e);
+ }
+ return stream.getTotalBytesWritten();
+ }
+
+ /**
* Creates a constant-valued {@link DynamicDuration} from a {@link Duration}. If {@link
* Duration} precision is greater than seconds, then any excess precision information will
* be dropped.
diff --git a/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/DynamicDataBuilders.java b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/DynamicDataBuilders.java
new file mode 100644
index 0000000..8f91189
--- /dev/null
+++ b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/DynamicDataBuilders.java
@@ -0,0 +1,199 @@
+/*
+ * Copyright 2022 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
+ *
+ * http://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.
+ */
+
+package androidx.wear.protolayout.expression;
+
+import androidx.annotation.ColorInt;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.annotation.RestrictTo.Scope;
+import androidx.wear.protolayout.expression.FixedValueBuilders.FixedBool;
+import androidx.wear.protolayout.expression.FixedValueBuilders.FixedColor;
+import androidx.wear.protolayout.expression.FixedValueBuilders.FixedFloat;
+import androidx.wear.protolayout.expression.FixedValueBuilders.FixedInt32;
+import androidx.wear.protolayout.expression.FixedValueBuilders.FixedString;
+import androidx.wear.protolayout.expression.proto.DynamicDataProto;
+import androidx.wear.protolayout.protobuf.CodedInputStream;
+import androidx.wear.protolayout.protobuf.CodedOutputStream;
+import androidx.wear.protolayout.protobuf.ExtensionRegistryLite;
+
+import java.io.IOException;
+
+/** Builders for dynamic data value of a provider. */
+public final class DynamicDataBuilders {
+ private DynamicDataBuilders() {}
+
+ /**
+ * Interface defining a dynamic data value.
+ *
+ * @since 1.2
+ */
+ public interface DynamicDataValue {
+ /**
+ * Get the protocol buffer representation of this object.
+ *
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ DynamicDataProto.DynamicDataValue toDynamicDataValueProto();
+
+ /**
+ * Creates a {@link DynamicDataValue} from a byte array generated by {@link
+ * #toDynamicDataValueByteArray()}.
+ *
+ * @throws IllegalArgumentException if the byte array does not contain a valid serialization
+ */
+ @NonNull
+ static DynamicDataValue fromByteArray(@NonNull byte[] byteArray) {
+ return fromByteArray(byteArray, 0, byteArray.length);
+ }
+
+ /**
+ * Creates a {@link DynamicDataValue} from the provided byte array at the provided offset and
+ * length, that was generated by one of the {@link #toDynamicDataValueByteArray} overloads.
+ *
+ * @throws IllegalArgumentException if the byte array does not contain a valid serialization in
+ * the provided offset and length
+ */
+ @NonNull
+ static DynamicDataValue fromByteArray(@NonNull byte[] byteArray, int offset, int length) {
+ try {
+ return dynamicDataValueFromProto(
+ DynamicDataProto.DynamicDataValue.parseFrom(
+ CodedInputStream.newInstance(byteArray, offset, length),
+ ExtensionRegistryLite.getEmptyRegistry()));
+ } catch (IOException e) {
+ throw new IllegalArgumentException(
+ "Byte array could not be parsed into DynamicDataValue", e);
+ }
+ }
+
+ /**
+ * Serializes the {@link DynamicDataValue} into a new byte array that can later be used with
+ * {@link #fromByteArray(byte[])}.
+ */
+ @NonNull
+ default byte[] toDynamicDataValueByteArray() {
+ return toDynamicDataValueProto().toByteArray();
+ }
+
+ /**
+ * Serializes the {@link DynamicDataValue} into the provided byte array, returning the amount of
+ * bytes written, that can later be used with {@code DynamicDataValue.fromByteArray(byteArray,
+ * 0, bytesWritten)}.
+ *
+ * @throws IllegalArgumentException if the byte array is too small
+ */
+ default int toDynamicDataValueByteArray(@NonNull byte[] byteArray) {
+ return toDynamicDataValueByteArray(byteArray, 0, byteArray.length);
+ }
+
+ /**
+ * Serializes the {@link DynamicDataValue} into the provided byte array, returning the amount of
+ * bytes written, limited by the provided offset and length, that can later be used with {@code
+ * DynamicDataValue.fromByteArray(byteArray, offset, bytesWritten)}.
+ *
+ * @throws IllegalArgumentException if the byte array is too small
+ */
+ default int toDynamicDataValueByteArray(@NonNull byte[] byteArray, int offset, int length) {
+ CodedOutputStream stream = CodedOutputStream.newInstance(byteArray, offset, length);
+ try {
+ toDynamicDataValueProto().writeTo(stream);
+ } catch (IOException e) {
+ throw new IllegalArgumentException(
+ "Provided byte array not large enough to contain this DynamicDataValue", e);
+ }
+ return stream.getTotalBytesWritten();
+ }
+
+ /** Creates a boolean {@link DynamicDataValue}. */
+ @NonNull
+ static DynamicDataValue fromBool(boolean constant) {
+ return new FixedBool.Builder().setValue(constant).build();
+ }
+
+ /** Creates a int {@link DynamicDataValue}. */
+ @NonNull
+ static DynamicDataValue fromInt(int constant) {
+ return new FixedInt32.Builder().setValue(constant).build();
+ }
+
+ /** Creates a float {@link DynamicDataValue}. */
+ @NonNull
+ static DynamicDataValue fromFloat(float constant) {
+ return new FixedFloat.Builder().setValue(constant).build();
+ }
+
+ /** Creates a color {@link DynamicDataValue}. */
+ @NonNull
+ static DynamicDataValue fromColor(@ColorInt int constant) {
+ return new FixedColor.Builder().setArgb(constant).build();
+ }
+
+ /** Creates a string {@link DynamicDataValue}. */
+ @NonNull
+ static DynamicDataValue fromString(@NonNull String constant) {
+ return new FixedString.Builder().setValue(constant).build();
+ }
+
+ /**
+ * Get the fingerprint for this object or null if unknown.
+ *
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Nullable
+ Fingerprint getFingerprint();
+
+ /** Builder to create {@link DynamicDataValue} objects.
+ *
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ interface Builder {
+
+ /** Builds an instance with values accumulated in this Builder. */
+ @NonNull
+ DynamicDataValue build();
+ }
+ }
+
+ /**
+ * Creates a new wrapper instance from the proto. Intended for testing purposes only. An object
+ * created using this method can't be added to any other wrapper.
+ *
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ public static DynamicDataValue dynamicDataValueFromProto(
+ @NonNull DynamicDataProto.DynamicDataValue proto) {
+ if (proto.hasStringVal()) {
+ return FixedString.fromProto(proto.getStringVal());
+ }
+ if (proto.hasInt32Val()) {
+ return FixedInt32.fromProto(proto.getInt32Val());
+ }
+ if (proto.hasFloatVal()) {
+ return FixedFloat.fromProto(proto.getFloatVal());
+ }
+ if (proto.hasBoolVal()) {
+ return FixedBool.fromProto(proto.getBoolVal());
+ }
+ if (proto.hasColorVal()) {
+ return FixedColor.fromProto(proto.getColorVal());
+ }
+ throw new IllegalStateException("Proto was not a recognised instance of DynamicDataValue");
+ }
+}
diff --git a/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/DynamicDataKey.java b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/DynamicDataKey.java
new file mode 100644
index 0000000..29c060d
--- /dev/null
+++ b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/DynamicDataKey.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.wear.protolayout.expression;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import java.util.Objects;
+
+/**
+ * Represent a key that references a dynamic value source, such as state pushed by app/tile or
+ * real-time data from the platform.
+ *
+ * @param <T> The data type of the dynamic values that this key is bound to.
+ */
+public abstract class DynamicDataKey<T extends DynamicBuilders.DynamicType> {
+ @NonNull private final String mKey;
+ @NonNull private final String mNamespace;
+
+ /**
+ * Create a {@link DynamicDataKey} with the specified key in the given namespace.
+ * @param namespace The namespace of the key for the dynamic data source.
+ * @param key The key that references the dynamic data source.
+ */
+ DynamicDataKey(@NonNull String namespace, @NonNull String key) {
+ mKey = key;
+ mNamespace = namespace;
+ }
+
+ /**
+ * Gets the key that references the dynamic data source
+ */
+ @NonNull public String getKey() {
+ return mKey;
+ }
+
+ /**
+ * Gets the namespace of the key for the dynamic data source.
+ */
+ @NonNull public String getNamespace() {
+ return mNamespace;
+ }
+
+ @Override
+ public boolean equals(@Nullable Object other) {
+ if (other == this) {
+ return true;
+ }
+
+ if (!(other instanceof DynamicDataKey)) {
+ return false;
+ }
+
+ DynamicDataKey<?> comp = (DynamicDataKey<?>) other;
+
+ return mKey.equals(comp.getKey()) && mNamespace.equals(comp.getNamespace());
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(mKey,mNamespace);
+ }
+
+ @NonNull
+ @Override
+ public String toString() {
+ return String.format("namespace = %s, key = %s", mNamespace, mKey);
+ }
+}
diff --git a/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/FixedValueBuilders.java b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/FixedValueBuilders.java
index f4f2cb7..5d6d870 100644
--- a/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/FixedValueBuilders.java
+++ b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/FixedValueBuilders.java
@@ -24,7 +24,7 @@
import androidx.annotation.RestrictTo.Scope;
import androidx.wear.protolayout.expression.proto.DynamicProto;
import androidx.wear.protolayout.expression.proto.FixedProto;
-import androidx.wear.protolayout.expression.proto.StateEntryProto;
+import androidx.wear.protolayout.expression.proto.DynamicDataProto;
/**
* Builders for fixed value primitive types that can be used in dynamic expressions and in for state
@@ -39,7 +39,7 @@
* @since 1.2
*/
static final class FixedInt32
- implements DynamicBuilders.DynamicInt32, StateEntryBuilders.StateEntryValue {
+ implements DynamicBuilders.DynamicInt32, DynamicDataBuilders.DynamicDataValue {
private final FixedProto.FixedInt32 mImpl;
@Nullable private final Fingerprint mFingerprint;
@@ -92,8 +92,8 @@
@Override
@RestrictTo(Scope.LIBRARY_GROUP)
@NonNull
- public StateEntryProto.StateEntryValue toStateEntryValueProto() {
- return StateEntryProto.StateEntryValue.newBuilder().setInt32Val(mImpl).build();
+ public DynamicDataProto.DynamicDataValue toDynamicDataValueProto() {
+ return DynamicDataProto.DynamicDataValue.newBuilder().setInt32Val(mImpl).build();
}
@Override
@@ -105,7 +105,7 @@
/** Builder for {@link FixedInt32}. */
public static final class Builder
implements DynamicBuilders.DynamicInt32.Builder,
- StateEntryBuilders.StateEntryValue.Builder {
+ DynamicDataBuilders.DynamicDataValue.Builder {
private final FixedProto.FixedInt32.Builder mImpl = FixedProto.FixedInt32.newBuilder();
private final Fingerprint mFingerprint = new Fingerprint(974881783);
@@ -137,7 +137,7 @@
* @since 1.2
*/
static final class FixedString
- implements DynamicBuilders.DynamicString, StateEntryBuilders.StateEntryValue {
+ implements DynamicBuilders.DynamicString, DynamicDataBuilders.DynamicDataValue {
private final FixedProto.FixedString mImpl;
@Nullable private final Fingerprint mFingerprint;
@@ -191,8 +191,8 @@
@Override
@RestrictTo(Scope.LIBRARY_GROUP)
@NonNull
- public StateEntryProto.StateEntryValue toStateEntryValueProto() {
- return StateEntryProto.StateEntryValue.newBuilder().setStringVal(mImpl).build();
+ public DynamicDataProto.DynamicDataValue toDynamicDataValueProto() {
+ return DynamicDataProto.DynamicDataValue.newBuilder().setStringVal(mImpl).build();
}
@Override
@@ -204,7 +204,7 @@
/** Builder for {@link FixedString}. */
public static final class Builder
implements DynamicBuilders.DynamicString.Builder,
- StateEntryBuilders.StateEntryValue.Builder {
+ DynamicDataBuilders.DynamicDataValue.Builder {
private final FixedProto.FixedString.Builder mImpl = FixedProto.FixedString.newBuilder();
private final Fingerprint mFingerprint = new Fingerprint(1963352072);
@@ -236,7 +236,7 @@
* @since 1.2
*/
static final class FixedFloat
- implements DynamicBuilders.DynamicFloat, StateEntryBuilders.StateEntryValue {
+ implements DynamicBuilders.DynamicFloat, DynamicDataBuilders.DynamicDataValue {
private final FixedProto.FixedFloat mImpl;
@Nullable private final Fingerprint mFingerprint;
@@ -290,8 +290,8 @@
@Override
@RestrictTo(Scope.LIBRARY_GROUP)
@NonNull
- public StateEntryProto.StateEntryValue toStateEntryValueProto() {
- return StateEntryProto.StateEntryValue.newBuilder().setFloatVal(mImpl).build();
+ public DynamicDataProto.DynamicDataValue toDynamicDataValueProto() {
+ return DynamicDataProto.DynamicDataValue.newBuilder().setFloatVal(mImpl).build();
}
@Override
@@ -303,7 +303,7 @@
/** Builder for {@link FixedFloat}. */
public static final class Builder
implements DynamicBuilders.DynamicFloat.Builder,
- StateEntryBuilders.StateEntryValue.Builder {
+ DynamicDataBuilders.DynamicDataValue.Builder {
private final FixedProto.FixedFloat.Builder mImpl = FixedProto.FixedFloat.newBuilder();
private final Fingerprint mFingerprint = new Fingerprint(-144724541);
@@ -338,7 +338,7 @@
* @since 1.2
*/
static final class FixedBool
- implements DynamicBuilders.DynamicBool, StateEntryBuilders.StateEntryValue {
+ implements DynamicBuilders.DynamicBool, DynamicDataBuilders.DynamicDataValue {
private final FixedProto.FixedBool mImpl;
@Nullable private final Fingerprint mFingerprint;
@@ -391,8 +391,8 @@
@Override
@RestrictTo(Scope.LIBRARY_GROUP)
@NonNull
- public StateEntryProto.StateEntryValue toStateEntryValueProto() {
- return StateEntryProto.StateEntryValue.newBuilder().setBoolVal(mImpl).build();
+ public DynamicDataProto.DynamicDataValue toDynamicDataValueProto() {
+ return DynamicDataProto.DynamicDataValue.newBuilder().setBoolVal(mImpl).build();
}
@Override
@@ -403,7 +403,8 @@
/** Builder for {@link FixedBool}. */
public static final class Builder
- implements DynamicBuilders.DynamicBool.Builder, StateEntryBuilders.StateEntryValue.Builder {
+ implements DynamicBuilders.DynamicBool.Builder,
+ DynamicDataBuilders.DynamicDataValue.Builder {
private final FixedProto.FixedBool.Builder mImpl = FixedProto.FixedBool.newBuilder();
private final Fingerprint mFingerprint = new Fingerprint(-665116398);
@@ -436,7 +437,7 @@
* @since 1.2
*/
static final class FixedColor
- implements DynamicBuilders.DynamicColor, StateEntryBuilders.StateEntryValue {
+ implements DynamicBuilders.DynamicColor, DynamicDataBuilders.DynamicDataValue {
private final FixedProto.FixedColor mImpl;
@Nullable private final Fingerprint mFingerprint;
@@ -490,8 +491,8 @@
@Override
@RestrictTo(Scope.LIBRARY_GROUP)
@NonNull
- public StateEntryProto.StateEntryValue toStateEntryValueProto() {
- return StateEntryProto.StateEntryValue.newBuilder().setColorVal(mImpl).build();
+ public DynamicDataProto.DynamicDataValue toDynamicDataValueProto() {
+ return DynamicDataProto.DynamicDataValue.newBuilder().setColorVal(mImpl).build();
}
@Override
@@ -503,7 +504,7 @@
/** Builder for {@link FixedColor}. */
public static final class Builder
implements DynamicBuilders.DynamicColor.Builder,
- StateEntryBuilders.StateEntryValue.Builder {
+ DynamicDataBuilders.DynamicDataValue.Builder {
private final FixedProto.FixedColor.Builder mImpl = FixedProto.FixedColor.newBuilder();
private final Fingerprint mFingerprint = new Fingerprint(-1895809356);
diff --git a/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/PlatformDataKey.java b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/PlatformDataKey.java
new file mode 100644
index 0000000..24ed21e
--- /dev/null
+++ b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/PlatformDataKey.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.wear.protolayout.expression;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+
+/**
+ * Represent a {@link DynamicDataKey} that references real-time data from the platform.
+ *
+ * <p> The [namespace, key] tuple creates the actual reference, so that a single key can refer to
+ * two different sources in two different namespaces.
+ *
+ * <p> The namespace must not be empty. Additionally, the "protolayout" namespace (and its
+ * lowercase and uppercase variations) are reserved for the default platform data sources and
+ * should not be used for any custom OEM data source. To choose the namespace that does not
+ * conflict with an existing one, use a unique prefix for your namespace, for example, company
+ * name or product name.
+ *
+ * @param <T> The data type of the dynamic values that this key is bound to.
+ */
+public final class PlatformDataKey<T extends DynamicBuilders.DynamicType> extends DynamicDataKey<T>
+{
+ @NonNull private static final String RESERVED_NAMESPACE = "protolayout";
+
+ /**
+ * Create a {@link PlatformDataKey} with the specified key in the given namespace.
+ *
+ * @param namespace The namespace of the key for the platform data source.
+ * @param key The key that references the platform data source.
+ */
+ public PlatformDataKey(@NonNull String namespace, @NonNull String key) {
+ super(namespace, key);
+ if (namespace.isEmpty()) {
+ throw new IllegalArgumentException("Custom data source namespace must not be empty.");
+ }
+
+ if (RESERVED_NAMESPACE.equalsIgnoreCase(namespace)) {
+ throw new IllegalArgumentException(String.format(
+ "Custom data source must not use the reserved namespace:%s",
+ RESERVED_NAMESPACE));
+ }
+ }
+
+ /**
+ * Create a {@link PlatformDataKey} with the specified key in the reserved namespace.
+ * This should only be used by protolayout library internally for default platform data sources.
+ *
+ * @param key The key that references the platform data source
+ */
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ public PlatformDataKey(@NonNull String key) {
+ super(RESERVED_NAMESPACE, key);
+ }
+}
+
diff --git a/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/PlatformHealthSources.java b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/PlatformHealthSources.java
index 0974b70..8be1449 100644
--- a/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/PlatformHealthSources.java
+++ b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/PlatformHealthSources.java
@@ -20,38 +20,57 @@
import static androidx.wear.protolayout.expression.DynamicBuilders.PLATFORM_INT32_SOURCE_TYPE_DAILY_STEP_COUNT;
import android.Manifest;
-import android.os.Build.VERSION_CODES;
import androidx.annotation.NonNull;
-import androidx.annotation.RequiresApi;
import androidx.annotation.RequiresPermission;
+import androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat;
import androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32;
import androidx.wear.protolayout.expression.DynamicBuilders.PlatformInt32Source;
/** Utility class provides utils to access health data. */
-@ProtoLayoutExperimental
public class PlatformHealthSources {
private PlatformHealthSources() {
}
- /** Creates a {@link DynamicInt32} which receives the current heat rate from the sensor. */
- @RequiresPermission(Manifest.permission.BODY_SENSORS)
- @ProtoLayoutExperimental
+ /**
+ * The data source key for heart rate bpm data from default platform health sources.
+ */
@NonNull
- public static DynamicInt32 heartRateBpm() {
+ @RequiresPermission(Manifest.permission.BODY_SENSORS)
+ public static final PlatformDataKey<DynamicFloat> HEART_RATE_BPM =
+ new PlatformDataKey<>("HeartRate");
+
+ /**
+ * The data source key for daily step count data from default platform health sources.
+ */
+ @NonNull
+ @RequiresPermission(Manifest.permission.ACTIVITY_RECOGNITION)
+ public static final PlatformDataKey<DynamicInt32> DAILY_STEPS =
+ new PlatformDataKey<>("Daily Steps");
+
+ /**
+ * Creates a {@link DynamicInt32} which receives the current heat rate from the sensor.
+ *
+ * <p> This method provides backward compatibility and is preferred over using {@code
+ * HEART_RATE_BPM} directly.
+ */
+ @RequiresPermission(Manifest.permission.BODY_SENSORS)
+ @NonNull
+ public static DynamicFloat heartRateBpm() {
return new PlatformInt32Source.Builder()
.setSourceType(PLATFORM_INT32_SOURCE_TYPE_CURRENT_HEART_RATE)
- .build();
+ .build().asFloat();
}
/**
* Creates a {@link DynamicInt32} which receives the current daily steps from the sensor.
* This is the total step count over a day, where the previous day ends and a new day begins at
* 12:00 AM local time.
+ *
+ * <p> This method provides backward compatibility and is preferred over using {@code
+ * DAILY_STEPS} directly.
*/
- @RequiresApi(VERSION_CODES.Q)
@RequiresPermission(Manifest.permission.ACTIVITY_RECOGNITION)
- @ProtoLayoutExperimental
@NonNull
public static DynamicInt32 dailySteps() {
return new PlatformInt32Source.Builder()
diff --git a/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/StateEntryBuilders.java b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/StateEntryBuilders.java
deleted file mode 100644
index 304b9b8..0000000
--- a/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/StateEntryBuilders.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright 2022 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
- *
- * http://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.
- */
-
-package androidx.wear.protolayout.expression;
-
-import android.annotation.SuppressLint;
-import androidx.annotation.ColorInt;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.annotation.RestrictTo;
-import androidx.annotation.RestrictTo.Scope;
-import androidx.wear.protolayout.expression.FixedValueBuilders.FixedBool;
-import androidx.wear.protolayout.expression.FixedValueBuilders.FixedColor;
-import androidx.wear.protolayout.expression.FixedValueBuilders.FixedFloat;
-import androidx.wear.protolayout.expression.FixedValueBuilders.FixedInt32;
-import androidx.wear.protolayout.expression.FixedValueBuilders.FixedString;
-import androidx.wear.protolayout.expression.proto.StateEntryProto;
-
-/** Builders for state entries of a provider. */
-public final class StateEntryBuilders {
- private StateEntryBuilders() {}
-
- /**
- * Interface defining a state entry value.
- *
- * @since 1.2
- */
- public interface StateEntryValue {
- /**
- * Get the protocol buffer representation of this object.
- *
- */
- @RestrictTo(Scope.LIBRARY_GROUP)
- @NonNull
- StateEntryProto.StateEntryValue toStateEntryValueProto();
-
- /** Creates a boolean {@link StateEntryValue}. */
- @NonNull
- static StateEntryValue fromBool(boolean constant) {
- return new FixedBool.Builder().setValue(constant).build();
- }
-
- /** Creates a int {@link StateEntryValue}. */
- @NonNull
- static StateEntryValue fromInt(int constant) {
- return new FixedInt32.Builder().setValue(constant).build();
- }
-
- /** Creates a float {@link StateEntryValue}. */
- @NonNull
- static StateEntryValue fromFloat(float constant) {
- return new FixedFloat.Builder().setValue(constant).build();
- }
-
- /** Creates a color {@link StateEntryValue}. */
- @NonNull
- static StateEntryValue fromColor(@ColorInt int constant) {
- return new FixedColor.Builder().setArgb(constant).build();
- }
-
- /** Creates a string {@link StateEntryValue}. */
- @NonNull
- static StateEntryValue fromString(@NonNull String constant) {
- return new FixedString.Builder().setValue(constant).build();
- }
-
- /**
- * Get the fingerprint for this object or null if unknown.
- *
- */
- @RestrictTo(Scope.LIBRARY_GROUP)
- @Nullable
- Fingerprint getFingerprint();
-
- /** Builder to create {@link StateEntryValue} objects.
- *
- */
- @RestrictTo(Scope.LIBRARY_GROUP)
- interface Builder {
-
- /** Builds an instance with values accumulated in this Builder. */
- @NonNull
- StateEntryValue build();
- }
- }
-
- /**
- * Creates a new wrapper instance from the proto. Intended for testing purposes only. An object
- * created using this method can't be added to any other wrapper.
- *
- */
- @RestrictTo(Scope.LIBRARY_GROUP)
- @NonNull
- public static StateEntryValue stateEntryValueFromProto(
- @NonNull StateEntryProto.StateEntryValue proto) {
- if (proto.hasStringVal()) {
- return FixedString.fromProto(proto.getStringVal());
- }
- if (proto.hasInt32Val()) {
- return FixedInt32.fromProto(proto.getInt32Val());
- }
- if (proto.hasFloatVal()) {
- return FixedFloat.fromProto(proto.getFloatVal());
- }
- if (proto.hasBoolVal()) {
- return FixedBool.fromProto(proto.getBoolVal());
- }
- if (proto.hasColorVal()) {
- return FixedColor.fromProto(proto.getColorVal());
- }
- throw new IllegalStateException("Proto was not a recognised instance of StateEntryValue");
- }
-}
diff --git a/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicBoolTest.java b/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicBoolTest.java
index beb1207..3c0bc87 100644
--- a/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicBoolTest.java
+++ b/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicBoolTest.java
@@ -51,7 +51,7 @@
@Test
public void stateEntryValueBool() {
- DynamicBool stateBool = DynamicBool.fromState(STATE_KEY);
+ DynamicBool stateBool = DynamicBool.from(new AppDataKey<>(STATE_KEY));
assertThat(stateBool.toDynamicBoolProto().getStateSource().getSourceKey())
.isEqualTo(STATE_KEY);
@@ -59,8 +59,8 @@
@Test
public void stateToString() {
- assertThat(DynamicBool.fromState("key").toString())
- .isEqualTo("StateBoolSource{sourceKey=key}");
+ assertThat(DynamicBool.from(new AppDataKey<>("key")).toString())
+ .isEqualTo("StateBoolSource{sourceKey=key, sourceNamespace=}");
}
@Test
@@ -144,7 +144,7 @@
}
@Test
- public void validProto() {
+ public void fromByteArray_validProto() {
DynamicBool from = DynamicBool.constant(true);
DynamicBool to = DynamicBool.fromByteArray(from.toDynamicBoolByteArray());
@@ -152,8 +152,56 @@
}
@Test
- public void invalidProto() {
+ public void fromByteArray_invalidProto() {
assertThrows(
IllegalArgumentException.class, () -> DynamicBool.fromByteArray(new byte[] {1}));
}
+
+ @Test
+ public void fromByteArray_existingByteArray() {
+ DynamicBool from = DynamicBool.constant(true);
+ byte[] buffer = new byte[100];
+ int written = from.toDynamicBoolByteArray(buffer, 10, 50);
+
+ DynamicBool to = DynamicBool.fromByteArray(buffer, 10, written);
+
+ assertThat(to.toDynamicBoolProto().getFixed().getValue()).isTrue();
+ }
+
+ @Test
+ public void fromByteArray_existingByteArrayTooSmall() {
+ DynamicBool from = DynamicBool.constant(true);
+ byte[] buffer = new byte[100];
+ int written = from.toDynamicBoolByteArray(buffer);
+
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> DynamicBool.fromByteArray(buffer, 0, written - 1));
+ }
+
+ @Test
+ public void fromByteArray_existingByteArrayTooLarge() {
+ DynamicBool from = DynamicBool.constant(true);
+ byte[] buffer = new byte[100];
+ int written = from.toDynamicBoolByteArray(buffer);
+
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> DynamicBool.fromByteArray(buffer, 0, written + 1));
+ }
+
+ @Test
+ public void toByteArray_existingByteArrayTooSmall() {
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> DynamicBool.constant(true).toDynamicBoolByteArray(new byte[1]));
+ }
+
+ @Test
+ public void toByteArray_existingByteArraySameSize() {
+ DynamicBool from = DynamicBool.constant(true);
+
+ assertThat(from.toDynamicBoolByteArray(new byte[100]))
+ .isEqualTo(from.toDynamicBoolByteArray().length);
+ }
}
diff --git a/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicColorTest.java b/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicColorTest.java
index 9f03379..d879ce5f 100644
--- a/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicColorTest.java
+++ b/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicColorTest.java
@@ -58,7 +58,7 @@
@Test
public void stateEntryValueColor() {
- DynamicColor stateColor = DynamicColor.fromState(STATE_KEY);
+ DynamicColor stateColor = DynamicColor.from(new AppDataKey<>(STATE_KEY));
assertThat(stateColor.toDynamicColorProto().getStateSource().getSourceKey())
.isEqualTo(STATE_KEY);
@@ -66,8 +66,8 @@
@Test
public void stateToString() {
- assertThat(DynamicColor.fromState("key").toString())
- .isEqualTo("StateColorSource{sourceKey=key}");
+ assertThat(DynamicColor.from(new AppDataKey<>("key")).toString())
+ .isEqualTo("StateColorSource{sourceKey=key, sourceNamespace=}");
}
@Test
@@ -104,10 +104,11 @@
@Test
public void stateAnimatedColor() {
- DynamicColor stateColor = DynamicColor.fromState(STATE_KEY);
+ AppDataKey<DynamicColor> source = new AppDataKey<>(STATE_KEY);
+ DynamicColor stateColor = DynamicColor.from(source);
- DynamicColor animatedColor = DynamicColor.animate(STATE_KEY);
- DynamicColor animatedColorWithSpec = DynamicColor.animate(STATE_KEY, SPEC);
+ DynamicColor animatedColor = DynamicColor.animate(source);
+ DynamicColor animatedColorWithSpec = DynamicColor.animate(source, SPEC);
assertThat(animatedColor.toDynamicColorProto().getAnimatableDynamic().hasAnimationSpec())
.isFalse();
@@ -124,7 +125,7 @@
public void stateAnimatedToString() {
assertThat(
DynamicColor.animate(
- /* stateKey= */ "key",
+ /* stateKey= */ new AppDataKey<>("key"),
new AnimationSpec.Builder()
.setAnimationParameters(
new AnimationParameters.Builder().setDelayMillis(1).build())
@@ -132,13 +133,14 @@
.toString())
.isEqualTo(
"AnimatableDynamicColor{"
- + "input=StateColorSource{sourceKey=key}, animationSpec=AnimationSpec{"
+ + "input=StateColorSource{sourceKey=key, sourceNamespace=}, "
+ + "animationSpec=AnimationSpec{"
+ "animationParameters=AnimationParameters{durationMillis=0, easing=null, "
+ "delayMillis=1}, repeatable=null}}");
}
@Test
- public void validProto() {
+ public void fromByteArray_validProto() {
DynamicColor from = DynamicColor.constant(CONSTANT_VALUE);
DynamicColor to = DynamicColor.fromByteArray(from.toDynamicColorByteArray());
@@ -146,7 +148,55 @@
}
@Test
- public void invalidProto() {
+ public void fromByteArray_invalidProto() {
assertThrows(IllegalArgumentException.class, () -> DynamicColor.fromByteArray(new byte[] {1}));
}
+
+ @Test
+ public void fromByteArray_existingByteArray() {
+ DynamicColor from = DynamicColor.constant(CONSTANT_VALUE);
+ byte[] buffer = new byte[100];
+ int written = from.toDynamicColorByteArray(buffer, 10, 50);
+
+ DynamicColor to = DynamicColor.fromByteArray(buffer, 10, written);
+
+ assertThat(to.toDynamicColorProto().getFixed().getArgb()).isEqualTo(CONSTANT_VALUE);
+ }
+
+ @Test
+ public void fromByteArray_existingByteArrayTooSmall() {
+ DynamicColor from = DynamicColor.constant(CONSTANT_VALUE);
+ byte[] buffer = new byte[100];
+ int written = from.toDynamicColorByteArray(buffer);
+
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> DynamicColor.fromByteArray(buffer, 0, written - 1));
+ }
+
+ @Test
+ public void fromByteArray_existingByteArrayTooLarge() {
+ DynamicColor from = DynamicColor.constant(CONSTANT_VALUE);
+ byte[] buffer = new byte[100];
+ int written = from.toDynamicColorByteArray(buffer);
+
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> DynamicColor.fromByteArray(buffer, 0, written + 1));
+ }
+
+ @Test
+ public void toByteArray_existingByteArrayTooSmall() {
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> DynamicColor.constant(CONSTANT_VALUE).toDynamicColorByteArray(new byte[1]));
+ }
+
+ @Test
+ public void toByteArray_existingByteArraySameSize() {
+ DynamicColor from = DynamicColor.constant(CONSTANT_VALUE);
+
+ assertThat(from.toDynamicColorByteArray(new byte[100]))
+ .isEqualTo(from.toDynamicColorByteArray().length);
+ }
}
diff --git a/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicDataValueTest.java b/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicDataValueTest.java
new file mode 100644
index 0000000..47237c4
--- /dev/null
+++ b/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicDataValueTest.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2022 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
+ *
+ * http://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.
+ */
+
+package androidx.wear.protolayout.expression;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+
+@RunWith(RobolectricTestRunner.class)
+public final class DynamicDataValueTest {
+ @Test
+ public void boolDynamicDataValue() {
+ DynamicDataValue boolDynamicDataValue = DynamicDataValue.fromBool(true);
+
+ assertThat(boolDynamicDataValue.toDynamicDataValueProto().getBoolVal().getValue()).isTrue();
+ }
+
+ @Test
+ public void colorDynamicDataValue() {
+ DynamicDataValue colorDynamicDataValue = DynamicDataValue.fromColor(0xff00ff00);
+
+ assertThat(colorDynamicDataValue.toDynamicDataValueProto().getColorVal().getArgb())
+ .isEqualTo(0xff00ff00);
+ }
+
+ @Test
+ public void floatDynamicDataValue() {
+ DynamicDataValue floatDynamicDataValue = DynamicDataValue.fromFloat(42.42f);
+
+ assertThat(floatDynamicDataValue.toDynamicDataValueProto().getFloatVal().getValue())
+ .isWithin(0.0001f)
+ .of(42.42f);
+ }
+
+ @Test
+ public void intDynamicDataValue() {
+ DynamicDataValue intDynamicDataValue = DynamicDataValue.fromInt(42);
+
+ assertThat(intDynamicDataValue.toDynamicDataValueProto().getInt32Val().getValue())
+ .isEqualTo(42);
+ }
+
+ @Test
+ public void stringDynamicDataValue() {
+ DynamicDataValue stringDynamicDataValue = DynamicDataValue.fromString("constant-value");
+
+ assertThat(stringDynamicDataValue.toDynamicDataValueProto().getStringVal().getValue())
+ .isEqualTo("constant-value");
+ }
+}
diff --git a/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicFloatTest.java b/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicFloatTest.java
index d00b7f3..c7b9e7e 100644
--- a/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicFloatTest.java
+++ b/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicFloatTest.java
@@ -67,7 +67,7 @@
@Test
public void stateEntryValueFloat() {
- DynamicFloat stateFloat = DynamicFloat.fromState(STATE_KEY);
+ DynamicFloat stateFloat = DynamicFloat.from(new AppDataKey<>(STATE_KEY));
assertThat(stateFloat.toDynamicFloatProto().getStateSource().getSourceKey())
.isEqualTo(STATE_KEY);
@@ -75,8 +75,8 @@
@Test
public void stateToString() {
- assertThat(DynamicFloat.fromState("key").toString())
- .isEqualTo("StateFloatSource{sourceKey=key}");
+ assertThat(DynamicFloat.from(new AppDataKey<>("key")).toString())
+ .isEqualTo("StateFloatSource{sourceKey=key, sourceNamespace=}");
}
@Test
@@ -198,10 +198,10 @@
@Test
public void stateAnimatedFloat() {
- DynamicFloat stateFloat = DynamicFloat.fromState(STATE_KEY);
-
- DynamicFloat animatedFloat = DynamicFloat.animate(STATE_KEY);
- DynamicFloat animatedFloatWithSpec = DynamicFloat.animate(STATE_KEY, SPEC);
+ AppDataKey<DynamicFloat> source = new AppDataKey<>(STATE_KEY);
+ DynamicFloat stateFloat = DynamicFloat.from(source);
+ DynamicFloat animatedFloat = DynamicFloat.animate(source);
+ DynamicFloat animatedFloatWithSpec = DynamicFloat.animate(source, SPEC);
assertThat(animatedFloat.toDynamicFloatProto().getAnimatableDynamic().hasAnimationSpec())
.isFalse();
@@ -221,7 +221,7 @@
public void stateAnimatedToString() {
assertThat(
DynamicFloat.animate(
- /* stateKey= */ "key",
+ new AppDataKey<>("key"),
new AnimationSpec.Builder()
.setAnimationParameters(
new AnimationParameters.Builder()
@@ -230,14 +230,15 @@
.build())
.toString())
.isEqualTo(
- "AnimatableDynamicFloat{input=StateFloatSource{sourceKey=key},"
+ "AnimatableDynamicFloat{"
+ + "input=StateFloatSource{sourceKey=key, sourceNamespace=},"
+ " animationSpec=AnimationSpec{animationParameters"
+ "=AnimationParameters{durationMillis=0,"
+ " easing=null, delayMillis=1}, repeatable=null}}");
}
@Test
- public void validProto() {
+ public void fromByteArray_validProto() {
DynamicFloat from = DynamicFloat.constant(CONSTANT_VALUE);
DynamicFloat to = DynamicFloat.fromByteArray(from.toDynamicFloatByteArray());
@@ -245,8 +246,56 @@
}
@Test
- public void invalidProto() {
+ public void fromByteArray_invalidProto() {
assertThrows(
IllegalArgumentException.class, () -> DynamicFloat.fromByteArray(new byte[] {1}));
}
+
+ @Test
+ public void fromByteArray_existingByteArray() {
+ DynamicFloat from = DynamicFloat.constant(CONSTANT_VALUE);
+ byte[] buffer = new byte[100];
+ int written = from.toDynamicFloatByteArray(buffer, 10, 50);
+
+ DynamicFloat to = DynamicFloat.fromByteArray(buffer, 10, written);
+
+ assertThat(to.toDynamicFloatProto().getFixed().getValue()).isEqualTo(CONSTANT_VALUE);
+ }
+
+ @Test
+ public void fromByteArray_existingByteArrayTooSmall() {
+ DynamicFloat from = DynamicFloat.constant(CONSTANT_VALUE);
+ byte[] buffer = new byte[100];
+ int written = from.toDynamicFloatByteArray(buffer);
+
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> DynamicFloat.fromByteArray(buffer, 0, written - 1));
+ }
+
+ @Test
+ public void fromByteArray_existingByteArrayTooLarge() {
+ DynamicFloat from = DynamicFloat.constant(CONSTANT_VALUE);
+ byte[] buffer = new byte[100];
+ int written = from.toDynamicFloatByteArray(buffer);
+
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> DynamicFloat.fromByteArray(buffer, 0, written + 1));
+ }
+
+ @Test
+ public void toByteArray_existingByteArrayTooSmall() {
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> DynamicFloat.constant(CONSTANT_VALUE).toDynamicFloatByteArray(new byte[1]));
+ }
+
+ @Test
+ public void toByteArray_existingByteArraySameSize() {
+ DynamicFloat from = DynamicFloat.constant(CONSTANT_VALUE);
+
+ assertThat(from.toDynamicFloatByteArray(new byte[100]))
+ .isEqualTo(from.toDynamicFloatByteArray().length);
+ }
}
diff --git a/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicInt32Test.java b/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicInt32Test.java
index f87e5b5..ff1bc0f 100644
--- a/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicInt32Test.java
+++ b/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicInt32Test.java
@@ -48,7 +48,7 @@
@Test
public void stateEntryValueInt32() {
- DynamicInt32 stateInt32 = DynamicInt32.fromState(STATE_KEY);
+ DynamicInt32 stateInt32 = DynamicInt32.from(new AppDataKey<>(STATE_KEY));
assertThat(stateInt32.toDynamicInt32Proto().getStateSource().getSourceKey())
.isEqualTo(STATE_KEY);
@@ -56,8 +56,8 @@
@Test
public void stateToString() {
- assertThat(DynamicInt32.fromState("key").toString())
- .isEqualTo("StateInt32Source{sourceKey=key}");
+ assertThat(DynamicInt32.from(new AppDataKey<>("key")).toString())
+ .isEqualTo("StateInt32Source{sourceKey=key, sourceNamespace=}");
}
@Test
@@ -131,7 +131,7 @@
}
@Test
- public void validProto() {
+ public void fromByteArray_validProto() {
DynamicInt32 from = DynamicInt32.constant(CONSTANT_VALUE);
DynamicInt32 to = DynamicInt32.fromByteArray(from.toDynamicInt32ByteArray());
@@ -139,8 +139,56 @@
}
@Test
- public void invalidProto() {
+ public void fromByteArray_invalidProto() {
assertThrows(
IllegalArgumentException.class, () -> DynamicInt32.fromByteArray(new byte[] {1}));
}
+
+ @Test
+ public void fromByteArray_existingByteArray() {
+ DynamicInt32 from = DynamicInt32.constant(CONSTANT_VALUE);
+ byte[] buffer = new byte[100];
+ int written = from.toDynamicInt32ByteArray(buffer, 10, 50);
+
+ DynamicInt32 to = DynamicInt32.fromByteArray(buffer, 10, written);
+
+ assertThat(to.toDynamicInt32Proto().getFixed().getValue()).isEqualTo(CONSTANT_VALUE);
+ }
+
+ @Test
+ public void fromByteArray_existingByteArrayTooSmall() {
+ DynamicInt32 from = DynamicInt32.constant(CONSTANT_VALUE);
+ byte[] buffer = new byte[100];
+ int written = from.toDynamicInt32ByteArray(buffer);
+
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> DynamicInt32.fromByteArray(buffer, 0, written - 1));
+ }
+
+ @Test
+ public void fromByteArray_existingByteArrayTooLarge() {
+ DynamicInt32 from = DynamicInt32.constant(CONSTANT_VALUE);
+ byte[] buffer = new byte[100];
+ int written = from.toDynamicInt32ByteArray(buffer);
+
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> DynamicInt32.fromByteArray(buffer, 0, written + 1));
+ }
+
+ @Test
+ public void toByteArray_existingByteArrayTooSmall() {
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> DynamicInt32.constant(CONSTANT_VALUE).toDynamicInt32ByteArray(new byte[1]));
+ }
+
+ @Test
+ public void toByteArray_existingByteArraySameSize() {
+ DynamicInt32 from = DynamicInt32.constant(CONSTANT_VALUE);
+
+ assertThat(from.toDynamicInt32ByteArray(new byte[100]))
+ .isEqualTo(from.toDynamicInt32ByteArray().length);
+ }
}
diff --git a/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicStringTest.java b/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicStringTest.java
index b0f2be1..658664f 100644
--- a/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicStringTest.java
+++ b/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/DynamicStringTest.java
@@ -46,7 +46,7 @@
@Test
public void stateEntryValueString() {
- DynamicString stateString = DynamicString.fromState(STATE_KEY);
+ DynamicString stateString = DynamicString.from(new AppDataKey<>(STATE_KEY));
assertThat(stateString.toDynamicStringProto().getStateSource().getSourceKey())
.isEqualTo(STATE_KEY);
@@ -54,8 +54,8 @@
@Test
public void stateToString() {
- assertThat(DynamicString.fromState("key").toString())
- .isEqualTo("StateStringSource{sourceKey=key}");
+ assertThat(DynamicString.from(new AppDataKey<>("key")).toString())
+ .isEqualTo("StateStringSource{sourceKey=key, sourceNamespace=}");
}
@Test
@@ -120,7 +120,7 @@
}
@Test
- public void validProto() {
+ public void fromByteArray_validProto() {
DynamicString from = DynamicString.constant(CONSTANT_VALUE);
DynamicString to = DynamicString.fromByteArray(from.toDynamicStringByteArray());
@@ -128,7 +128,55 @@
}
@Test
- public void invalidProto() {
+ public void fromByteArray_invalidProto() {
assertThrows(IllegalArgumentException.class, () -> DynamicString.fromByteArray(new byte[] {1}));
}
+
+ @Test
+ public void fromByteArray_existingByteArray() {
+ DynamicString from = DynamicString.constant(CONSTANT_VALUE);
+ byte[] buffer = new byte[100];
+ int written = from.toDynamicStringByteArray(buffer, 10, 50);
+
+ DynamicString to = DynamicString.fromByteArray(buffer, 10, written);
+
+ assertThat(to.toDynamicStringProto().getFixed().getValue()).isEqualTo(CONSTANT_VALUE);
+ }
+
+ @Test
+ public void fromByteArray_existingByteArrayTooSmall() {
+ DynamicString from = DynamicString.constant(CONSTANT_VALUE);
+ byte[] buffer = new byte[100];
+ int written = from.toDynamicStringByteArray(buffer);
+
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> DynamicString.fromByteArray(buffer, 0, written - 1));
+ }
+
+ @Test
+ public void fromByteArray_existingByteArrayTooLarge() {
+ DynamicString from = DynamicString.constant(CONSTANT_VALUE);
+ byte[] buffer = new byte[100];
+ int written = from.toDynamicStringByteArray(buffer);
+
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> DynamicString.fromByteArray(buffer, 0, written + 1));
+ }
+
+ @Test
+ public void toByteArray_existingByteArrayTooSmall() {
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> DynamicString.constant(CONSTANT_VALUE).toDynamicStringByteArray(new byte[1]));
+ }
+
+ @Test
+ public void toByteArray_existingByteArraySameSize() {
+ DynamicString from = DynamicString.constant(CONSTANT_VALUE);
+
+ assertThat(from.toDynamicStringByteArray(new byte[100]))
+ .isEqualTo(from.toDynamicStringByteArray().length);
+ }
}
diff --git a/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/StateEntryValueTest.java b/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/StateEntryValueTest.java
deleted file mode 100644
index fae643d..0000000
--- a/wear/protolayout/protolayout-expression/src/test/java/androidx/wear/protolayout/expression/StateEntryValueTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 2022 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
- *
- * http://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.
- */
-
-package androidx.wear.protolayout.expression;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.robolectric.RobolectricTestRunner;
-
-@RunWith(RobolectricTestRunner.class)
-public final class StateEntryValueTest {
- @Test
- public void boolStateEntryValue() {
- StateEntryValue boolStateEntryValue = StateEntryValue.fromBool(true);
-
- assertThat(boolStateEntryValue.toStateEntryValueProto().getBoolVal().getValue()).isTrue();
- }
-
- @Test
- public void colorStateEntryValue() {
- StateEntryValue colorStateEntryValue = StateEntryValue.fromColor(0xff00ff00);
-
- assertThat(colorStateEntryValue.toStateEntryValueProto().getColorVal().getArgb())
- .isEqualTo(0xff00ff00);
- }
-
- @Test
- public void floatStateEntryValue() {
- StateEntryValue floatStateEntryValue = StateEntryValue.fromFloat(42.42f);
-
- assertThat(floatStateEntryValue.toStateEntryValueProto().getFloatVal().getValue())
- .isWithin(0.0001f)
- .of(42.42f);
- }
-
- @Test
- public void intStateEntryValue() {
- StateEntryValue intStateEntryValue = StateEntryValue.fromInt(42);
-
- assertThat(intStateEntryValue.toStateEntryValueProto().getInt32Val().getValue()).isEqualTo(42);
- }
-
- @Test
- public void stringStateEntryValue() {
- StateEntryValue stringStateEntryValue = StateEntryValue.fromString("constant-value");
-
- assertThat(stringStateEntryValue.toStateEntryValueProto().getStringVal().getValue())
- .isEqualTo("constant-value");
- }
-}
diff --git a/wear/protolayout/protolayout-material/api/current.txt b/wear/protolayout/protolayout-material/api/current.txt
index 1437f29..b76356d 100644
--- a/wear/protolayout/protolayout-material/api/current.txt
+++ b/wear/protolayout/protolayout-material/api/current.txt
@@ -17,11 +17,11 @@
ctor public Button.Builder(android.content.Context, androidx.wear.protolayout.ModifiersBuilders.Clickable);
method public androidx.wear.protolayout.material.Button build();
method public androidx.wear.protolayout.material.Button.Builder setButtonColors(androidx.wear.protolayout.material.ButtonColors);
- method public androidx.wear.protolayout.material.Button.Builder setContentDescription(CharSequence);
method public androidx.wear.protolayout.material.Button.Builder setContentDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
+ method public androidx.wear.protolayout.material.Button.Builder setContentDescription(CharSequence);
method public androidx.wear.protolayout.material.Button.Builder setCustomContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
- method public androidx.wear.protolayout.material.Button.Builder setIconContent(String, androidx.wear.protolayout.DimensionBuilders.DpProp);
method public androidx.wear.protolayout.material.Button.Builder setIconContent(String);
+ method public androidx.wear.protolayout.material.Button.Builder setIconContent(String, androidx.wear.protolayout.DimensionBuilders.DpProp);
method public androidx.wear.protolayout.material.Button.Builder setImageContent(String);
method public androidx.wear.protolayout.material.Button.Builder setSize(androidx.wear.protolayout.DimensionBuilders.DpProp);
method public androidx.wear.protolayout.material.Button.Builder setSize(@Dimension(unit=androidx.annotation.Dimension.DP) float);
@@ -30,8 +30,8 @@
}
public class ButtonColors {
- ctor public ButtonColors(@ColorInt int, @ColorInt int);
ctor public ButtonColors(androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp);
+ ctor public ButtonColors(@ColorInt int, @ColorInt int);
method public androidx.wear.protolayout.ColorBuilders.ColorProp getBackgroundColor();
method public androidx.wear.protolayout.ColorBuilders.ColorProp getContentColor();
method public static androidx.wear.protolayout.material.ButtonColors primaryButtonColors(androidx.wear.protolayout.material.Colors);
@@ -66,8 +66,8 @@
ctor public Chip.Builder(android.content.Context, androidx.wear.protolayout.ModifiersBuilders.Clickable, androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
method public androidx.wear.protolayout.material.Chip build();
method public androidx.wear.protolayout.material.Chip.Builder setChipColors(androidx.wear.protolayout.material.ChipColors);
- method public androidx.wear.protolayout.material.Chip.Builder setContentDescription(CharSequence);
method public androidx.wear.protolayout.material.Chip.Builder setContentDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
+ method public androidx.wear.protolayout.material.Chip.Builder setContentDescription(CharSequence);
method public androidx.wear.protolayout.material.Chip.Builder setCustomContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
method public androidx.wear.protolayout.material.Chip.Builder setHorizontalAlignment(int);
method public androidx.wear.protolayout.material.Chip.Builder setIconContent(String);
@@ -78,10 +78,10 @@
}
public class ChipColors {
- ctor public ChipColors(@ColorInt int, @ColorInt int, @ColorInt int, @ColorInt int);
- ctor public ChipColors(@ColorInt int, @ColorInt int);
- ctor public ChipColors(androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp);
ctor public ChipColors(androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp);
+ ctor public ChipColors(androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp);
+ ctor public ChipColors(@ColorInt int, @ColorInt int);
+ ctor public ChipColors(@ColorInt int, @ColorInt int, @ColorInt int, @ColorInt int);
method public androidx.wear.protolayout.ColorBuilders.ColorProp getBackgroundColor();
method public androidx.wear.protolayout.ColorBuilders.ColorProp getContentColor();
method public androidx.wear.protolayout.ColorBuilders.ColorProp getIconColor();
@@ -113,8 +113,8 @@
ctor public CircularProgressIndicator.Builder();
method public androidx.wear.protolayout.material.CircularProgressIndicator build();
method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setCircularProgressIndicatorColors(androidx.wear.protolayout.material.ProgressIndicatorColors);
- method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setContentDescription(CharSequence);
method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setContentDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
+ method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setContentDescription(CharSequence);
method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setEndAngle(float);
method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setProgress(@FloatRange(from=0, to=1) float);
method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setStartAngle(float);
@@ -168,13 +168,14 @@
method public androidx.wear.protolayout.ModifiersBuilders.Modifiers getModifiers();
method public int getMultilineAlignment();
method public int getOverflow();
- method public String getText();
+ method public androidx.wear.protolayout.TypeBuilders.StringProp getText();
method public int getWeight();
method public boolean isItalic();
method public boolean isUnderline();
}
public static final class Text.Builder implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement.Builder {
+ ctor public Text.Builder(android.content.Context, androidx.wear.protolayout.TypeBuilders.StringProp, androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint);
ctor public Text.Builder(android.content.Context, String);
method public androidx.wear.protolayout.material.Text build();
method public androidx.wear.protolayout.material.Text.Builder setColor(androidx.wear.protolayout.ColorBuilders.ColorProp);
@@ -246,10 +247,17 @@
field public static final androidx.wear.protolayout.DimensionBuilders.DpProp DEFAULT_VERTICAL_SPACER_HEIGHT;
field public static final float EDGE_CONTENT_LAYOUT_PADDING_ABOVE_MAIN_CONTENT_DP = 6.0f;
field public static final float EDGE_CONTENT_LAYOUT_PADDING_BELOW_MAIN_CONTENT_DP = 8.0f;
- field public static final int MULTI_BUTTON_MAX_NUMBER = 7; // 0x7
+ field @Deprecated public static final int MULTI_BUTTON_MAX_NUMBER = 7; // 0x7
field public static final androidx.wear.protolayout.DimensionBuilders.DpProp MULTI_SLOT_LAYOUT_HORIZONTAL_SPACER_WIDTH;
}
+ public static final class LayoutDefaults.MultiButtonLayoutDefaults {
+ field public static final int BUTTON_MAX_NUMBER = 7; // 0x7
+ field public static final androidx.wear.protolayout.DimensionBuilders.DpProp BUTTON_SIZE_FOR_1_BUTTON;
+ field public static final androidx.wear.protolayout.DimensionBuilders.DpProp BUTTON_SIZE_FOR_2_BUTTONS;
+ field public static final androidx.wear.protolayout.DimensionBuilders.DpProp BUTTON_SIZE_FOR_3_PLUS_BUTTONS;
+ }
+
public class MultiButtonLayout implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
method public static androidx.wear.protolayout.material.layouts.MultiButtonLayout? fromLayoutElement(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
method public java.util.List<androidx.wear.protolayout.LayoutElementBuilders.LayoutElement!> getButtonContents();
diff --git a/wear/protolayout/protolayout-material/api/public_plus_experimental_current.txt b/wear/protolayout/protolayout-material/api/public_plus_experimental_current.txt
index 24d20a6..0f24435 100644
--- a/wear/protolayout/protolayout-material/api/public_plus_experimental_current.txt
+++ b/wear/protolayout/protolayout-material/api/public_plus_experimental_current.txt
@@ -17,11 +17,11 @@
ctor public Button.Builder(android.content.Context, androidx.wear.protolayout.ModifiersBuilders.Clickable);
method public androidx.wear.protolayout.material.Button build();
method public androidx.wear.protolayout.material.Button.Builder setButtonColors(androidx.wear.protolayout.material.ButtonColors);
- method public androidx.wear.protolayout.material.Button.Builder setContentDescription(CharSequence);
method public androidx.wear.protolayout.material.Button.Builder setContentDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
+ method public androidx.wear.protolayout.material.Button.Builder setContentDescription(CharSequence);
method public androidx.wear.protolayout.material.Button.Builder setCustomContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
- method public androidx.wear.protolayout.material.Button.Builder setIconContent(String, androidx.wear.protolayout.DimensionBuilders.DpProp);
method public androidx.wear.protolayout.material.Button.Builder setIconContent(String);
+ method public androidx.wear.protolayout.material.Button.Builder setIconContent(String, androidx.wear.protolayout.DimensionBuilders.DpProp);
method public androidx.wear.protolayout.material.Button.Builder setImageContent(String);
method public androidx.wear.protolayout.material.Button.Builder setSize(androidx.wear.protolayout.DimensionBuilders.DpProp);
method public androidx.wear.protolayout.material.Button.Builder setSize(@Dimension(unit=androidx.annotation.Dimension.DP) float);
@@ -30,8 +30,8 @@
}
public class ButtonColors {
- ctor public ButtonColors(@ColorInt int, @ColorInt int);
ctor public ButtonColors(androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp);
+ ctor public ButtonColors(@ColorInt int, @ColorInt int);
method public androidx.wear.protolayout.ColorBuilders.ColorProp getBackgroundColor();
method public androidx.wear.protolayout.ColorBuilders.ColorProp getContentColor();
method public static androidx.wear.protolayout.material.ButtonColors primaryButtonColors(androidx.wear.protolayout.material.Colors);
@@ -66,8 +66,8 @@
ctor public Chip.Builder(android.content.Context, androidx.wear.protolayout.ModifiersBuilders.Clickable, androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
method public androidx.wear.protolayout.material.Chip build();
method public androidx.wear.protolayout.material.Chip.Builder setChipColors(androidx.wear.protolayout.material.ChipColors);
- method public androidx.wear.protolayout.material.Chip.Builder setContentDescription(CharSequence);
method public androidx.wear.protolayout.material.Chip.Builder setContentDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
+ method public androidx.wear.protolayout.material.Chip.Builder setContentDescription(CharSequence);
method public androidx.wear.protolayout.material.Chip.Builder setCustomContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
method public androidx.wear.protolayout.material.Chip.Builder setHorizontalAlignment(int);
method public androidx.wear.protolayout.material.Chip.Builder setIconContent(String);
@@ -78,10 +78,10 @@
}
public class ChipColors {
- ctor public ChipColors(@ColorInt int, @ColorInt int, @ColorInt int, @ColorInt int);
- ctor public ChipColors(@ColorInt int, @ColorInt int);
- ctor public ChipColors(androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp);
ctor public ChipColors(androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp);
+ ctor public ChipColors(androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp);
+ ctor public ChipColors(@ColorInt int, @ColorInt int);
+ ctor public ChipColors(@ColorInt int, @ColorInt int, @ColorInt int, @ColorInt int);
method public androidx.wear.protolayout.ColorBuilders.ColorProp getBackgroundColor();
method public androidx.wear.protolayout.ColorBuilders.ColorProp getContentColor();
method public androidx.wear.protolayout.ColorBuilders.ColorProp getIconColor();
@@ -113,8 +113,8 @@
ctor public CircularProgressIndicator.Builder();
method public androidx.wear.protolayout.material.CircularProgressIndicator build();
method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setCircularProgressIndicatorColors(androidx.wear.protolayout.material.ProgressIndicatorColors);
- method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setContentDescription(CharSequence);
method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setContentDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
+ method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setContentDescription(CharSequence);
method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setEndAngle(float);
method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setProgress(@FloatRange(from=0, to=1) float);
method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setStartAngle(float);
@@ -169,13 +169,14 @@
method public androidx.wear.protolayout.ModifiersBuilders.Modifiers getModifiers();
method public int getMultilineAlignment();
method public int getOverflow();
- method public String getText();
+ method public androidx.wear.protolayout.TypeBuilders.StringProp getText();
method public int getWeight();
method public boolean isItalic();
method public boolean isUnderline();
}
public static final class Text.Builder implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement.Builder {
+ ctor public Text.Builder(android.content.Context, androidx.wear.protolayout.TypeBuilders.StringProp, androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint);
ctor public Text.Builder(android.content.Context, String);
method public androidx.wear.protolayout.material.Text build();
method public androidx.wear.protolayout.material.Text.Builder setColor(androidx.wear.protolayout.ColorBuilders.ColorProp);
@@ -248,10 +249,17 @@
field public static final androidx.wear.protolayout.DimensionBuilders.DpProp DEFAULT_VERTICAL_SPACER_HEIGHT;
field public static final float EDGE_CONTENT_LAYOUT_PADDING_ABOVE_MAIN_CONTENT_DP = 6.0f;
field public static final float EDGE_CONTENT_LAYOUT_PADDING_BELOW_MAIN_CONTENT_DP = 8.0f;
- field public static final int MULTI_BUTTON_MAX_NUMBER = 7; // 0x7
+ field @Deprecated public static final int MULTI_BUTTON_MAX_NUMBER = 7; // 0x7
field public static final androidx.wear.protolayout.DimensionBuilders.DpProp MULTI_SLOT_LAYOUT_HORIZONTAL_SPACER_WIDTH;
}
+ public static final class LayoutDefaults.MultiButtonLayoutDefaults {
+ field public static final int BUTTON_MAX_NUMBER = 7; // 0x7
+ field public static final androidx.wear.protolayout.DimensionBuilders.DpProp BUTTON_SIZE_FOR_1_BUTTON;
+ field public static final androidx.wear.protolayout.DimensionBuilders.DpProp BUTTON_SIZE_FOR_2_BUTTONS;
+ field public static final androidx.wear.protolayout.DimensionBuilders.DpProp BUTTON_SIZE_FOR_3_PLUS_BUTTONS;
+ }
+
public class MultiButtonLayout implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
method public static androidx.wear.protolayout.material.layouts.MultiButtonLayout? fromLayoutElement(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
method public java.util.List<androidx.wear.protolayout.LayoutElementBuilders.LayoutElement!> getButtonContents();
diff --git a/wear/protolayout/protolayout-material/api/restricted_current.txt b/wear/protolayout/protolayout-material/api/restricted_current.txt
index 1437f29..b76356d 100644
--- a/wear/protolayout/protolayout-material/api/restricted_current.txt
+++ b/wear/protolayout/protolayout-material/api/restricted_current.txt
@@ -17,11 +17,11 @@
ctor public Button.Builder(android.content.Context, androidx.wear.protolayout.ModifiersBuilders.Clickable);
method public androidx.wear.protolayout.material.Button build();
method public androidx.wear.protolayout.material.Button.Builder setButtonColors(androidx.wear.protolayout.material.ButtonColors);
- method public androidx.wear.protolayout.material.Button.Builder setContentDescription(CharSequence);
method public androidx.wear.protolayout.material.Button.Builder setContentDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
+ method public androidx.wear.protolayout.material.Button.Builder setContentDescription(CharSequence);
method public androidx.wear.protolayout.material.Button.Builder setCustomContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
- method public androidx.wear.protolayout.material.Button.Builder setIconContent(String, androidx.wear.protolayout.DimensionBuilders.DpProp);
method public androidx.wear.protolayout.material.Button.Builder setIconContent(String);
+ method public androidx.wear.protolayout.material.Button.Builder setIconContent(String, androidx.wear.protolayout.DimensionBuilders.DpProp);
method public androidx.wear.protolayout.material.Button.Builder setImageContent(String);
method public androidx.wear.protolayout.material.Button.Builder setSize(androidx.wear.protolayout.DimensionBuilders.DpProp);
method public androidx.wear.protolayout.material.Button.Builder setSize(@Dimension(unit=androidx.annotation.Dimension.DP) float);
@@ -30,8 +30,8 @@
}
public class ButtonColors {
- ctor public ButtonColors(@ColorInt int, @ColorInt int);
ctor public ButtonColors(androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp);
+ ctor public ButtonColors(@ColorInt int, @ColorInt int);
method public androidx.wear.protolayout.ColorBuilders.ColorProp getBackgroundColor();
method public androidx.wear.protolayout.ColorBuilders.ColorProp getContentColor();
method public static androidx.wear.protolayout.material.ButtonColors primaryButtonColors(androidx.wear.protolayout.material.Colors);
@@ -66,8 +66,8 @@
ctor public Chip.Builder(android.content.Context, androidx.wear.protolayout.ModifiersBuilders.Clickable, androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
method public androidx.wear.protolayout.material.Chip build();
method public androidx.wear.protolayout.material.Chip.Builder setChipColors(androidx.wear.protolayout.material.ChipColors);
- method public androidx.wear.protolayout.material.Chip.Builder setContentDescription(CharSequence);
method public androidx.wear.protolayout.material.Chip.Builder setContentDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
+ method public androidx.wear.protolayout.material.Chip.Builder setContentDescription(CharSequence);
method public androidx.wear.protolayout.material.Chip.Builder setCustomContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
method public androidx.wear.protolayout.material.Chip.Builder setHorizontalAlignment(int);
method public androidx.wear.protolayout.material.Chip.Builder setIconContent(String);
@@ -78,10 +78,10 @@
}
public class ChipColors {
- ctor public ChipColors(@ColorInt int, @ColorInt int, @ColorInt int, @ColorInt int);
- ctor public ChipColors(@ColorInt int, @ColorInt int);
- ctor public ChipColors(androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp);
ctor public ChipColors(androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp);
+ ctor public ChipColors(androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp);
+ ctor public ChipColors(@ColorInt int, @ColorInt int);
+ ctor public ChipColors(@ColorInt int, @ColorInt int, @ColorInt int, @ColorInt int);
method public androidx.wear.protolayout.ColorBuilders.ColorProp getBackgroundColor();
method public androidx.wear.protolayout.ColorBuilders.ColorProp getContentColor();
method public androidx.wear.protolayout.ColorBuilders.ColorProp getIconColor();
@@ -113,8 +113,8 @@
ctor public CircularProgressIndicator.Builder();
method public androidx.wear.protolayout.material.CircularProgressIndicator build();
method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setCircularProgressIndicatorColors(androidx.wear.protolayout.material.ProgressIndicatorColors);
- method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setContentDescription(CharSequence);
method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setContentDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
+ method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setContentDescription(CharSequence);
method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setEndAngle(float);
method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setProgress(@FloatRange(from=0, to=1) float);
method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setStartAngle(float);
@@ -168,13 +168,14 @@
method public androidx.wear.protolayout.ModifiersBuilders.Modifiers getModifiers();
method public int getMultilineAlignment();
method public int getOverflow();
- method public String getText();
+ method public androidx.wear.protolayout.TypeBuilders.StringProp getText();
method public int getWeight();
method public boolean isItalic();
method public boolean isUnderline();
}
public static final class Text.Builder implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement.Builder {
+ ctor public Text.Builder(android.content.Context, androidx.wear.protolayout.TypeBuilders.StringProp, androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint);
ctor public Text.Builder(android.content.Context, String);
method public androidx.wear.protolayout.material.Text build();
method public androidx.wear.protolayout.material.Text.Builder setColor(androidx.wear.protolayout.ColorBuilders.ColorProp);
@@ -246,10 +247,17 @@
field public static final androidx.wear.protolayout.DimensionBuilders.DpProp DEFAULT_VERTICAL_SPACER_HEIGHT;
field public static final float EDGE_CONTENT_LAYOUT_PADDING_ABOVE_MAIN_CONTENT_DP = 6.0f;
field public static final float EDGE_CONTENT_LAYOUT_PADDING_BELOW_MAIN_CONTENT_DP = 8.0f;
- field public static final int MULTI_BUTTON_MAX_NUMBER = 7; // 0x7
+ field @Deprecated public static final int MULTI_BUTTON_MAX_NUMBER = 7; // 0x7
field public static final androidx.wear.protolayout.DimensionBuilders.DpProp MULTI_SLOT_LAYOUT_HORIZONTAL_SPACER_WIDTH;
}
+ public static final class LayoutDefaults.MultiButtonLayoutDefaults {
+ field public static final int BUTTON_MAX_NUMBER = 7; // 0x7
+ field public static final androidx.wear.protolayout.DimensionBuilders.DpProp BUTTON_SIZE_FOR_1_BUTTON;
+ field public static final androidx.wear.protolayout.DimensionBuilders.DpProp BUTTON_SIZE_FOR_2_BUTTONS;
+ field public static final androidx.wear.protolayout.DimensionBuilders.DpProp BUTTON_SIZE_FOR_3_PLUS_BUTTONS;
+ }
+
public class MultiButtonLayout implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
method public static androidx.wear.protolayout.material.layouts.MultiButtonLayout? fromLayoutElement(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
method public java.util.List<androidx.wear.protolayout.LayoutElementBuilders.LayoutElement!> getButtonContents();
diff --git a/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/Button.java b/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/Button.java
index f2ac282..3a28ff4 100644
--- a/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/Button.java
+++ b/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/Button.java
@@ -442,7 +442,7 @@
@Nullable
public String getTextContent() {
Text text = getTextContentObject();
- return text != null ? text.getText() : null;
+ return text != null ? text.getText().getValue() : null;
}
@NonNull
diff --git a/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/Chip.java b/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/Chip.java
index 41017f2..d4e15b1 100644
--- a/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/Chip.java
+++ b/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/Chip.java
@@ -589,14 +589,14 @@
@Nullable
public String getPrimaryLabelContent() {
Text primaryLabel = getPrimaryLabelContentObject();
- return primaryLabel != null ? primaryLabel.getText() : null;
+ return primaryLabel != null ? primaryLabel.getText().getValue() : null;
}
/** Returns secondary label from this Chip if it has been added. Otherwise, it returns null. */
@Nullable
public String getSecondaryLabelContent() {
Text label = getSecondaryLabelContentObject();
- return label != null ? label.getText() : null;
+ return label != null ? label.getText().getValue() : null;
}
/** Returns icon id from this Chip if it has been added. Otherwise, it returns null. */
diff --git a/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/Helper.java b/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/Helper.java
index 1e87ef39..3ec3360 100644
--- a/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/Helper.java
+++ b/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/Helper.java
@@ -27,6 +27,7 @@
import androidx.wear.protolayout.DimensionBuilders.DpProp;
import androidx.wear.protolayout.ModifiersBuilders.ElementMetadata;
import androidx.wear.protolayout.ModifiersBuilders.Modifiers;
+import androidx.wear.protolayout.TypeBuilders.StringProp;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
@@ -131,4 +132,12 @@
byte[] tag = Arrays.copyOf(metadataTag, validPrefix.length());
return metadataTag.length == validBase.length && validPrefix.equals(getTagName(tag));
}
+
+ /**
+ * Returns a {@link StringProp} for the given string value.
+ */
+ @NonNull
+ public static StringProp staticString(@NonNull String value) {
+ return new StringProp.Builder(value).build();
+ }
}
diff --git a/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/Text.java b/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/Text.java
index 6c8a631..c9d8575 100644
--- a/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/Text.java
+++ b/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/Text.java
@@ -20,6 +20,7 @@
import static androidx.wear.protolayout.LayoutElementBuilders.TEXT_ALIGN_CENTER;
import static androidx.wear.protolayout.LayoutElementBuilders.TEXT_OVERFLOW_ELLIPSIZE_END;
import static androidx.wear.protolayout.material.Helper.checkNotNull;
+import static androidx.wear.protolayout.material.Helper.staticString;
import static androidx.wear.protolayout.material.Typography.TYPOGRAPHY_DISPLAY1;
import static androidx.wear.protolayout.material.Typography.getFontStyleBuilder;
import static androidx.wear.protolayout.material.Typography.getLineHeightForTypography;
@@ -40,6 +41,8 @@
import androidx.wear.protolayout.LayoutElementBuilders.TextAlignment;
import androidx.wear.protolayout.LayoutElementBuilders.TextOverflow;
import androidx.wear.protolayout.ModifiersBuilders.Modifiers;
+import androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint;
+import androidx.wear.protolayout.TypeBuilders.StringProp;
import androidx.wear.protolayout.expression.Fingerprint;
import androidx.wear.protolayout.expression.ProtoLayoutExperimental;
import androidx.wear.protolayout.material.Typography.TypographyName;
@@ -96,14 +99,34 @@
.setOverflow(TEXT_OVERFLOW_ELLIPSIZE_END);
/**
- * Creates a builder for {@link Text}.
+ * Creates a builder for a {@link Text} component with static text.
*
* @param context The application's context.
* @param text The text content for this component.
*/
public Builder(@NonNull Context context, @NonNull String text) {
mContext = context;
+ mElementBuilder.setText(staticString(text));
+ }
+
+ /**
+ * Creates a builder for a {@link Text}.
+ *
+ * <p>While this component is statically accessible from 1.0, it's only bindable since
+ * version 1.2 and renderers supporting version 1.2 will use the dynamic value (if set).
+ *
+ * @param context The application's context.
+ * @param text The text content for this component.
+ * @param stringLayoutConstraint Layout constraints used to correctly measure Text view
+ * size and align text when {@code text} has dynamic value.
+ */
+ public Builder(
+ @NonNull Context context,
+ @NonNull StringProp text,
+ @NonNull StringLayoutConstraint stringLayoutConstraint) {
+ mContext = context;
mElementBuilder.setText(text);
+ mElementBuilder.setLayoutConstraintsForDynamicText(stringLayoutConstraint);
}
/**
@@ -238,8 +261,8 @@
/** Returns the text of this Text element. */
@NonNull
- public String getText() {
- return checkNotNull(checkNotNull(mText.getText()).getValue());
+ public StringProp getText() {
+ return checkNotNull(mText.getText());
}
/** Returns the color of this Text element. */
diff --git a/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/layouts/LayoutDefaults.java b/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/layouts/LayoutDefaults.java
index b43b43c..0f1d947 100644
--- a/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/layouts/LayoutDefaults.java
+++ b/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/layouts/LayoutDefaults.java
@@ -107,28 +107,47 @@
/** The recommended space between the main content and additional labels in layouts. */
public static final DpProp DEFAULT_VERTICAL_SPACER_HEIGHT = dp(8);
- /** The maximum number of button that can be added to the {@link MultiButtonLayout}. */
- public static final int MULTI_BUTTON_MAX_NUMBER = 7;
-
/**
- * The default size of button in case when there are 3 or more buttons in the {@link
- * MultiButtonLayout}.
+ * The maximum number of button that can be added to the {@link MultiButtonLayout}.
+ *
+ * @deprecated Use {@link MultiButtonLayoutDefaults#BUTTON_MAX_NUMBER} instead.
*/
- static final DpProp MULTI_BUTTON_3_PLUS_SIZE = ButtonDefaults.DEFAULT_SIZE;
+ @Deprecated public static final int MULTI_BUTTON_MAX_NUMBER = 7;
- /** The default size of button in case when there 2 buttons in the {@link MultiButtonLayout}. */
- static final DpProp MULTI_BUTTON_2_SIZE = ButtonDefaults.LARGE_SIZE;
+ /** Contains default values used for {@link MultiButtonLayout}. */
+ public static final class MultiButtonLayoutDefaults {
+ private MultiButtonLayoutDefaults() {
+ }
- /**
- * The default size of button in case when there is 1 button in the {@link MultiButtonLayout}.
- */
- static final DpProp MULTI_BUTTON_1_SIZE = ButtonDefaults.EXTRA_LARGE_SIZE;
+ /** The maximum number of button that can be added to the {@link MultiButtonLayout}. */
+ public static final int BUTTON_MAX_NUMBER = 7;
- /** The default width for vertical spacer between buttons in the {@link MultiButtonLayout}. */
- static final DpProp MULTI_BUTTON_SPACER_WIDTH = dp(6);
+ /**
+ * The default size of button in case when there are 3 or more buttons in the {@link
+ * MultiButtonLayout}.
+ */
+ public static final DpProp BUTTON_SIZE_FOR_3_PLUS_BUTTONS = ButtonDefaults.DEFAULT_SIZE;
- /**
- * The default height for horizontal spacer between buttons in the {@link MultiButtonLayout}.
- */
- static final DpProp MULTI_BUTTON_SPACER_HEIGHT = dp(4);
+ /**
+ * The default size of button in case when there are 2 buttons in the {@link MultiButtonLayout}.
+ */
+ public static final DpProp BUTTON_SIZE_FOR_2_BUTTONS = ButtonDefaults.LARGE_SIZE;
+
+ /**
+ * The default size of button in case when there is 1 button in the
+ * {@link MultiButtonLayout}.
+ */
+ public static final DpProp BUTTON_SIZE_FOR_1_BUTTON = ButtonDefaults.EXTRA_LARGE_SIZE;
+
+ /**
+ * The default width for vertical spacer between buttons in the {@link MultiButtonLayout}.
+ */
+ static final DpProp SPACER_WIDTH = dp(6);
+
+ /**
+ * The default height for horizontal spacer between buttons in the
+ * {@link MultiButtonLayout}.
+ */
+ static final DpProp SPACER_HEIGHT = dp(4);
+ }
}
diff --git a/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/layouts/MultiButtonLayout.java b/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/layouts/MultiButtonLayout.java
index 2267c1a..28c88dc 100644
--- a/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/layouts/MultiButtonLayout.java
+++ b/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/layouts/MultiButtonLayout.java
@@ -21,12 +21,12 @@
import static androidx.wear.protolayout.material.Helper.checkTag;
import static androidx.wear.protolayout.material.Helper.getMetadataTagName;
import static androidx.wear.protolayout.material.Helper.getTagBytes;
-import static androidx.wear.protolayout.material.layouts.LayoutDefaults.MULTI_BUTTON_1_SIZE;
-import static androidx.wear.protolayout.material.layouts.LayoutDefaults.MULTI_BUTTON_2_SIZE;
-import static androidx.wear.protolayout.material.layouts.LayoutDefaults.MULTI_BUTTON_3_PLUS_SIZE;
-import static androidx.wear.protolayout.material.layouts.LayoutDefaults.MULTI_BUTTON_MAX_NUMBER;
-import static androidx.wear.protolayout.material.layouts.LayoutDefaults.MULTI_BUTTON_SPACER_HEIGHT;
-import static androidx.wear.protolayout.material.layouts.LayoutDefaults.MULTI_BUTTON_SPACER_WIDTH;
+import static androidx.wear.protolayout.material.layouts.LayoutDefaults.MultiButtonLayoutDefaults.BUTTON_MAX_NUMBER;
+import static androidx.wear.protolayout.material.layouts.LayoutDefaults.MultiButtonLayoutDefaults.BUTTON_SIZE_FOR_1_BUTTON;
+import static androidx.wear.protolayout.material.layouts.LayoutDefaults.MultiButtonLayoutDefaults.BUTTON_SIZE_FOR_2_BUTTONS;
+import static androidx.wear.protolayout.material.layouts.LayoutDefaults.MultiButtonLayoutDefaults.BUTTON_SIZE_FOR_3_PLUS_BUTTONS;
+import static androidx.wear.protolayout.material.layouts.LayoutDefaults.MultiButtonLayoutDefaults.SPACER_HEIGHT;
+import static androidx.wear.protolayout.material.layouts.LayoutDefaults.MultiButtonLayoutDefaults.SPACER_WIDTH;
import androidx.annotation.IntDef;
import androidx.annotation.NonNull;
@@ -52,9 +52,11 @@
/**
* Opinionated ProtoLayout layout, that can contain between 1 and {@link
- * LayoutDefaults#MULTI_BUTTON_MAX_NUMBER} number of buttons arranged inline with the Material
+ * LayoutDefaults.MultiButtonLayoutDefaults#BUTTON_MAX_NUMBER} number of buttons arranged
+ * inline with the Material
* guidelines. Can be used as a content passed in to the {@link PrimaryLayout}, but if there is
- * {@link LayoutDefaults#MULTI_BUTTON_MAX_NUMBER} buttons it should be used on its own.
+ * {@link LayoutDefaults.MultiButtonLayoutDefaults#BUTTON_MAX_NUMBER} buttons it should be used
+ * on its own.
*
* <p>When accessing the contents of a container for testing, note that this element can't be simply
* casted back to the original type, i.e.:
@@ -112,8 +114,9 @@
/**
* Add one new button to the layout. Note that it is accepted to pass in any {@link
* LayoutElement}, but it is strongly recommended to add a {@link Button} as the layout is
- * optimized for it. Any button added after {@link LayoutDefaults#MULTI_BUTTON_MAX_NUMBER}
- * is reached will be discarded.
+ * optimized for it. Any button added after
+ * {@link LayoutDefaults.MultiButtonLayoutDefaults#BUTTON_MAX_NUMBER} is reached will be
+ * discarded.
*/
@NonNull
@SuppressWarnings("MissingGetterMatchingBuilder")
@@ -140,10 +143,10 @@
@Override
public MultiButtonLayout build() {
int buttonNum = mButtonsContent.size();
- if (buttonNum > MULTI_BUTTON_MAX_NUMBER) {
+ if (buttonNum > BUTTON_MAX_NUMBER) {
throw new IllegalArgumentException(
"Too many buttons are added. Maximum number is "
- + MULTI_BUTTON_MAX_NUMBER
+ + BUTTON_MAX_NUMBER
+ ".");
}
@@ -166,10 +169,11 @@
private LayoutElement buildButtons(int buttonNum) {
switch (buttonNum) {
case 1:
- return wrapButton(mButtonsContent.get(0), MULTI_BUTTON_1_SIZE);
+ return wrapButton(mButtonsContent.get(0), BUTTON_SIZE_FOR_1_BUTTON);
case 2:
return build2ButtonRow(
- mButtonsContent.get(0), mButtonsContent.get(1), MULTI_BUTTON_2_SIZE);
+ mButtonsContent.get(0), mButtonsContent.get(1),
+ BUTTON_SIZE_FOR_2_BUTTONS);
case 3:
return build3ButtonRow(
mButtonsContent.get(0), mButtonsContent.get(1), mButtonsContent.get(2));
@@ -179,13 +183,13 @@
build2ButtonRow(
mButtonsContent.get(0),
mButtonsContent.get(1),
- MULTI_BUTTON_3_PLUS_SIZE))
+ BUTTON_SIZE_FOR_3_PLUS_BUTTONS))
.addContent(buildVerticalSpacer())
.addContent(
build2ButtonRow(
mButtonsContent.get(2),
mButtonsContent.get(3),
- MULTI_BUTTON_3_PLUS_SIZE))
+ BUTTON_SIZE_FOR_3_PLUS_BUTTONS))
.build();
case 5:
return new Column.Builder()
@@ -198,14 +202,14 @@
: build2ButtonRow(
mButtonsContent.get(0),
mButtonsContent.get(1),
- MULTI_BUTTON_3_PLUS_SIZE))
+ BUTTON_SIZE_FOR_3_PLUS_BUTTONS))
.addContent(buildVerticalSpacer())
.addContent(
mFiveButtonDistribution == FIVE_BUTTON_DISTRIBUTION_TOP_HEAVY
? build2ButtonRow(
mButtonsContent.get(3),
mButtonsContent.get(4),
- MULTI_BUTTON_3_PLUS_SIZE)
+ BUTTON_SIZE_FOR_3_PLUS_BUTTONS)
: build3ButtonRow(
mButtonsContent.get(2),
mButtonsContent.get(3),
@@ -231,7 +235,7 @@
build2ButtonRow(
mButtonsContent.get(0),
mButtonsContent.get(1),
- MULTI_BUTTON_3_PLUS_SIZE))
+ BUTTON_SIZE_FOR_3_PLUS_BUTTONS))
.addContent(buildVerticalSpacer())
.addContent(
build3ButtonRow(
@@ -243,7 +247,7 @@
build2ButtonRow(
mButtonsContent.get(5),
mButtonsContent.get(6),
- MULTI_BUTTON_3_PLUS_SIZE))
+ BUTTON_SIZE_FOR_3_PLUS_BUTTONS))
.build();
}
// This shouldn't happen, but return an empty Box instead of having this method nullable
@@ -259,11 +263,11 @@
return new Row.Builder()
.setWidth(wrap())
.setHeight(wrap())
- .addContent(wrapButton(button1, MULTI_BUTTON_3_PLUS_SIZE))
+ .addContent(wrapButton(button1, BUTTON_SIZE_FOR_3_PLUS_BUTTONS))
.addContent(buildHorizontalSpacer())
- .addContent(wrapButton(button2, MULTI_BUTTON_3_PLUS_SIZE))
+ .addContent(wrapButton(button2, BUTTON_SIZE_FOR_3_PLUS_BUTTONS))
.addContent(buildHorizontalSpacer())
- .addContent(wrapButton(button3, MULTI_BUTTON_3_PLUS_SIZE))
+ .addContent(wrapButton(button3, BUTTON_SIZE_FOR_3_PLUS_BUTTONS))
.build();
}
@@ -283,12 +287,12 @@
@NonNull
private Spacer buildHorizontalSpacer() {
- return new Spacer.Builder().setWidth(MULTI_BUTTON_SPACER_WIDTH).build();
+ return new Spacer.Builder().setWidth(SPACER_WIDTH).build();
}
@NonNull
private Spacer buildVerticalSpacer() {
- return new Spacer.Builder().setHeight(MULTI_BUTTON_SPACER_HEIGHT).build();
+ return new Spacer.Builder().setHeight(SPACER_HEIGHT).build();
}
@NonNull
diff --git a/wear/protolayout/protolayout-material/src/test/java/androidx/wear/protolayout/material/TextTest.java b/wear/protolayout/protolayout-material/src/test/java/androidx/wear/protolayout/material/TextTest.java
index a63dd69..a9957f4 100644
--- a/wear/protolayout/protolayout-material/src/test/java/androidx/wear/protolayout/material/TextTest.java
+++ b/wear/protolayout/protolayout-material/src/test/java/androidx/wear/protolayout/material/TextTest.java
@@ -39,12 +39,16 @@
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.wear.protolayout.LayoutElementBuilders;
import androidx.wear.protolayout.LayoutElementBuilders.Box;
import androidx.wear.protolayout.LayoutElementBuilders.Column;
import androidx.wear.protolayout.LayoutElementBuilders.FontStyle;
import androidx.wear.protolayout.ModifiersBuilders.Background;
import androidx.wear.protolayout.ModifiersBuilders.ElementMetadata;
import androidx.wear.protolayout.ModifiersBuilders.Modifiers;
+import androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint;
+import androidx.wear.protolayout.TypeBuilders.StringProp;
+import androidx.wear.protolayout.expression.DynamicBuilders.DynamicString;
import androidx.wear.protolayout.expression.ProtoLayoutExperimental;
import org.junit.Test;
@@ -165,6 +169,37 @@
assertThat(Text.fromLayoutElement(text)).isEqualTo(text);
}
+ @Test
+ public void testDynamicText() {
+ String textContent = "Testing text.";
+ String valueForLayout = "PLACEHOLDER";
+ Text text =
+ new Text.Builder(
+ CONTEXT,
+ new StringProp.Builder(textContent)
+ .setDynamicValue(DynamicString.constant(textContent))
+ .build(),
+ new StringLayoutConstraint.Builder(valueForLayout)
+ .setAlignment(TEXT_ALIGN_END)
+ .build())
+ .build();
+
+ Box box = new Box.Builder().addContent(text).build();
+ Text newText = Text.fromLayoutElement(box.getContents().get(0));
+ assertThat(newText).isNotNull();
+ StringProp newProp = newText.getText();
+ assertThat(newProp.getValue()).isEqualTo(textContent);
+ assertThat(newProp.getDynamicValue()).isNotNull();
+ assertThat(newProp.getDynamicValue().toDynamicStringProto().hasFixed()).isTrue();
+ assertThat(newProp.getDynamicValue().toDynamicStringProto().getFixed().getValue())
+ .isEqualTo(textContent);
+ StringLayoutConstraint constraint =
+ ((LayoutElementBuilders.Text) box.getContents().get(0))
+ .getLayoutConstraintsForDynamicText();
+ assertThat(constraint.getPatternForLayout()).isEqualTo(valueForLayout);
+ assertThat(constraint.getAlignment()).isEqualTo(TEXT_ALIGN_END);
+ }
+
@ProtoLayoutExperimental
private void assertTextIsEqual(
Text actualText,
@@ -173,7 +208,7 @@
int expectedColor,
FontStyle expectedFontStyle) {
assertThat(actualText.getFontStyle().toProto()).isEqualTo(expectedFontStyle.toProto());
- assertThat(actualText.getText()).isEqualTo(expectedTextContent);
+ assertThat(actualText.getText().getValue()).isEqualTo(expectedTextContent);
assertThat(actualText.getColor().getArgb()).isEqualTo(expectedColor);
assertThat(actualText.getOverflow()).isEqualTo(TEXT_OVERFLOW_ELLIPSIZE_END);
assertThat(actualText.getMultilineAlignment()).isEqualTo(TEXT_ALIGN_END);
diff --git a/wear/protolayout/protolayout-material/src/test/java/androidx/wear/protolayout/material/layouts/MultiButtonLayoutTest.java b/wear/protolayout/protolayout-material/src/test/java/androidx/wear/protolayout/material/layouts/MultiButtonLayoutTest.java
index 085b61d..c90bb91 100644
--- a/wear/protolayout/protolayout-material/src/test/java/androidx/wear/protolayout/material/layouts/MultiButtonLayoutTest.java
+++ b/wear/protolayout/protolayout-material/src/test/java/androidx/wear/protolayout/material/layouts/MultiButtonLayoutTest.java
@@ -106,7 +106,7 @@
public void test_too_many_button() {
Button button = new Button.Builder(CONTEXT, CLICKABLE).setTextContent("1").build();
MultiButtonLayout.Builder layoutBuilder = new MultiButtonLayout.Builder();
- for (int i = 0; i < LayoutDefaults.MULTI_BUTTON_MAX_NUMBER + 1; i++) {
+ for (int i = 0; i < LayoutDefaults.MultiButtonLayoutDefaults.BUTTON_MAX_NUMBER + 1; i++) {
layoutBuilder.addButtonContent(button);
}
diff --git a/wear/protolayout/protolayout-proto/src/main/proto/action.proto b/wear/protolayout/protolayout-proto/src/main/proto/action.proto
index 589a31c..944843d 100644
--- a/wear/protolayout/protolayout-proto/src/main/proto/action.proto
+++ b/wear/protolayout/protolayout-proto/src/main/proto/action.proto
@@ -4,7 +4,7 @@
package androidx.wear.protolayout.proto;
import "state.proto";
-import "state_entry.proto";
+import "dynamic_data.proto";
option java_package = "androidx.wear.protolayout.proto";
option java_outer_classname = "ActionProto";
@@ -101,5 +101,5 @@
// The target key of the state item for this action.
string target_key = 1;
// The value to set the state item to, when this action is executed.
- androidx.wear.protolayout.expression.proto.StateEntryValue value = 2;
+ androidx.wear.protolayout.expression.proto.DynamicDataValue value = 2;
}
diff --git a/wear/protolayout/protolayout-proto/src/main/proto/dynamic.proto b/wear/protolayout/protolayout-proto/src/main/proto/dynamic.proto
index b0729ce..bbb26b9 100644
--- a/wear/protolayout/protolayout-proto/src/main/proto/dynamic.proto
+++ b/wear/protolayout/protolayout-proto/src/main/proto/dynamic.proto
@@ -75,6 +75,9 @@
message StateInt32Source {
// The key in the state to bind to.
string source_key = 1;
+
+ // The namespace for the state key.
+ string source_namespace = 2;
}
// A conditional operator which yields an integer depending on the boolean
@@ -214,6 +217,9 @@
message StateStringSource {
// The key in the state to bind to.
string source_key = 1;
+
+ // The namespace for the state key.
+ string source_namespace = 2;
}
// A conditional operator which yields an string depending on the boolean
@@ -299,6 +305,9 @@
message StateFloatSource {
// The key in the state to bind to.
string source_key = 1;
+
+ // The namespace for the state key.
+ string source_namespace = 2;
}
// An operation to convert a Int32 value in the dynamic data pipeline to a Float
@@ -373,6 +382,9 @@
message StateBoolSource {
// The key in the state to bind to.
string source_key = 1;
+
+ // The namespace for the state key.
+ string source_namespace = 2;
}
// The type of comparison used in ComparisonInt32Op and ComparisonFloatOp.
@@ -483,6 +495,9 @@
message StateColorSource {
// The key in the state to bind to.
string source_key = 1;
+
+ // The namespace for the state key.
+ string source_namespace = 2;
}
// A static interpolation node, between two fixed color values.
diff --git a/wear/protolayout/protolayout-proto/src/main/proto/state_entry.proto b/wear/protolayout/protolayout-proto/src/main/proto/dynamic_data.proto
similarity index 70%
rename from wear/protolayout/protolayout-proto/src/main/proto/state_entry.proto
rename to wear/protolayout/protolayout-proto/src/main/proto/dynamic_data.proto
index 622043d..f373b86 100644
--- a/wear/protolayout/protolayout-proto/src/main/proto/state_entry.proto
+++ b/wear/protolayout/protolayout-proto/src/main/proto/dynamic_data.proto
@@ -1,4 +1,4 @@
-// State entries of a provider.
+// Dynamic data entries of a provider.
syntax = "proto3";
package androidx.wear.protolayout.expression.proto;
@@ -6,10 +6,10 @@
import "fixed.proto";
option java_package = "androidx.wear.protolayout.expression.proto";
-option java_outer_classname = "StateEntryProto";
+option java_outer_classname = "DynamicDataProto";
-// A state entry value.
-message StateEntryValue {
+// A dynamic data value.
+message DynamicDataValue {
oneof inner {
FixedString string_val = 1;
FixedInt32 int32_val = 2;
diff --git a/wear/protolayout/protolayout-proto/src/main/proto/state.proto b/wear/protolayout/protolayout-proto/src/main/proto/state.proto
index 162077e..8929f1e 100644
--- a/wear/protolayout/protolayout-proto/src/main/proto/state.proto
+++ b/wear/protolayout/protolayout-proto/src/main/proto/state.proto
@@ -3,7 +3,7 @@
package androidx.wear.protolayout.proto;
-import "state_entry.proto";
+import "dynamic_data.proto";
option java_package = "androidx.wear.protolayout.proto";
option java_outer_classname = "StateProto";
@@ -14,6 +14,6 @@
string last_clickable_id = 1;
// Any shared state between the provider and renderer.
- map<string, androidx.wear.protolayout.expression.proto.StateEntryValue>
+ map<string, androidx.wear.protolayout.expression.proto.DynamicDataValue>
id_to_value = 2;
}
diff --git a/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java b/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java
index 208c686..3b0a666 100644
--- a/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java
+++ b/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java
@@ -40,6 +40,7 @@
import androidx.collection.ArrayMap;
import androidx.collection.ArraySet;
import androidx.vectordrawable.graphics.drawable.SeekableAnimatedVectorDrawable;
+import androidx.wear.protolayout.expression.PlatformHealthSources;
import androidx.wear.protolayout.expression.pipeline.BoundDynamicType;
import androidx.wear.protolayout.expression.pipeline.DynamicTypeBindingRequest;
import androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator;
@@ -47,6 +48,7 @@
import androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver;
import androidx.wear.protolayout.expression.pipeline.FixedQuotaManagerImpl;
import androidx.wear.protolayout.expression.pipeline.QuotaManager;
+import androidx.wear.protolayout.expression.pipeline.SensorGatewaySingleDataProvider;
import androidx.wear.protolayout.expression.pipeline.StateStore;
import androidx.wear.protolayout.expression.pipeline.TimeGatewayImpl;
import androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway;
@@ -65,6 +67,7 @@
import androidx.wear.protolayout.renderer.dynamicdata.NodeInfo.ResolvedAvd;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -145,7 +148,16 @@
.setStateStore(stateStore);
evaluatorConfigBuilder.setDynamicTypesQuotaManager(dynamicNodeQuotaManager);
if (sensorGateway != null) {
- evaluatorConfigBuilder.setSensorGateway(sensorGateway);
+ evaluatorConfigBuilder.addPlatformDataProvider(
+ new SensorGatewaySingleDataProvider(
+ sensorGateway, PlatformHealthSources.HEART_RATE_BPM),
+ Collections.singleton(PlatformHealthSources.HEART_RATE_BPM)
+ );
+ evaluatorConfigBuilder.addPlatformDataProvider(
+ new SensorGatewaySingleDataProvider(
+ sensorGateway, PlatformHealthSources.DAILY_STEPS),
+ Collections.singleton(PlatformHealthSources.DAILY_STEPS)
+ );
}
if (enableAnimations) {
evaluatorConfigBuilder.setAnimationQuotaManager(animationQuotaManager);
diff --git a/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipelineTest.java b/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipelineTest.java
index d89a564..12e7936 100644
--- a/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipelineTest.java
+++ b/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipelineTest.java
@@ -42,6 +42,8 @@
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.vectordrawable.graphics.drawable.SeekableAnimatedVectorDrawable;
+import androidx.wear.protolayout.expression.AppDataKey;
+import androidx.wear.protolayout.expression.DynamicBuilders;
import androidx.wear.protolayout.expression.pipeline.FixedQuotaManagerImpl;
import androidx.wear.protolayout.expression.pipeline.QuotaManager;
import androidx.wear.protolayout.expression.pipeline.StateStore;
@@ -70,7 +72,7 @@
import androidx.wear.protolayout.expression.proto.FixedProto.FixedFloat;
import androidx.wear.protolayout.expression.proto.FixedProto.FixedInt32;
import androidx.wear.protolayout.expression.proto.FixedProto.FixedString;
-import androidx.wear.protolayout.expression.proto.StateEntryProto.StateEntryValue;
+import androidx.wear.protolayout.expression.proto.DynamicDataProto.DynamicDataValue;
import androidx.wear.protolayout.proto.ColorProto.ColorProp;
import androidx.wear.protolayout.proto.DimensionProto.DegreesProp;
import androidx.wear.protolayout.proto.DimensionProto.DpProp;
@@ -1926,20 +1928,20 @@
}
private void setFloatStateVal(String key, float val) {
- mStateStore.setStateEntryValuesProto(
+ mStateStore.setAppStateEntryValuesProto(
ImmutableMap.of(
- key,
- StateEntryValue.newBuilder()
+ new AppDataKey<DynamicBuilders.DynamicFloat>(key),
+ DynamicDataValue.newBuilder()
.setFloatVal(FixedFloat.newBuilder().setValue(val))
.build()));
shadowOf(getMainLooper()).idle();
}
private void setBoolStateVal(String key, boolean val) {
- mStateStore.setStateEntryValuesProto(
+ mStateStore.setAppStateEntryValuesProto(
ImmutableMap.of(
- key,
- StateEntryValue.newBuilder()
+ new AppDataKey<DynamicBuilders.DynamicBool>(key),
+ DynamicDataValue.newBuilder()
.setBoolVal(FixedBool.newBuilder().setValue(val))
.build()));
shadowOf(getMainLooper()).idle();
diff --git a/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflaterTest.java b/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflaterTest.java
index 9a529c2..1eb0e31 100644
--- a/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflaterTest.java
+++ b/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflaterTest.java
@@ -75,6 +75,8 @@
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.vectordrawable.graphics.drawable.SeekableAnimatedVectorDrawable;
+import androidx.wear.protolayout.expression.AppDataKey;
+import androidx.wear.protolayout.expression.DynamicBuilders;
import androidx.wear.protolayout.expression.pipeline.FixedQuotaManagerImpl;
import androidx.wear.protolayout.expression.pipeline.StateStore;
import androidx.wear.protolayout.expression.proto.AnimationParameterProto.AnimationParameters;
@@ -94,7 +96,7 @@
import androidx.wear.protolayout.expression.proto.FixedProto.FixedFloat;
import androidx.wear.protolayout.expression.proto.FixedProto.FixedInt32;
import androidx.wear.protolayout.expression.proto.FixedProto.FixedString;
-import androidx.wear.protolayout.expression.proto.StateEntryProto.StateEntryValue;
+import androidx.wear.protolayout.expression.proto.DynamicDataProto.DynamicDataValue;
import androidx.wear.protolayout.proto.ActionProto.Action;
import androidx.wear.protolayout.proto.ActionProto.AndroidActivity;
import androidx.wear.protolayout.proto.ActionProto.AndroidBooleanExtra;
@@ -415,38 +417,40 @@
assertThat(tv.isImportantForAccessibility()).isTrue();
assertThat(info.isFocusable()).isTrue();
- mStateStore.setStateEntryValuesProto(
+ AppDataKey<DynamicBuilders.DynamicString> keyContent = new AppDataKey<>("content");
+ AppDataKey<DynamicBuilders.DynamicString> keyState = new AppDataKey<>("state");
+ mStateStore.setAppStateEntryValuesProto(
ImmutableMap.of(
- "content",
- StateEntryValue.newBuilder()
+ keyContent,
+ DynamicDataValue.newBuilder()
.setStringVal(
FixedString.newBuilder()
.setValue(initialDynamicContentDescription))
.build(),
- "state",
- StateEntryValue.newBuilder()
+ keyState,
+ DynamicDataValue.newBuilder()
.setStringVal(
FixedString.newBuilder()
.setValue(initialDynamicStateDescription))
.build()));
info = AccessibilityNodeInfoCompat.wrap(tv.createAccessibilityNodeInfo());
- assertThat(mStateStore.getStateEntryValuesProto("content").getStringVal().getValue())
+ assertThat(mStateStore.getDynamicDataValuesProto(keyContent).getStringVal().getValue())
.isEqualTo(initialDynamicContentDescription);
assertThat(info.getContentDescription().toString())
.isEqualTo(initialDynamicContentDescription);
assertThat(info.getStateDescription().toString()).isEqualTo(initialDynamicStateDescription);
- mStateStore.setStateEntryValuesProto(
+ mStateStore.setAppStateEntryValuesProto(
ImmutableMap.of(
- "content",
- StateEntryValue.newBuilder()
+ keyContent,
+ DynamicDataValue.newBuilder()
.setStringVal(
FixedString.newBuilder()
.setValue(targetDynamicContentDescription))
.build(),
- "state",
- StateEntryValue.newBuilder()
+ keyState,
+ DynamicDataValue.newBuilder()
.setStringVal(
FixedString.newBuilder()
.setValue(targetDynamicStateDescription))
@@ -1675,10 +1679,10 @@
Drawable drawableAVDSeekable = imageAVDSeekable.getDrawable();
assertThat(drawableAVDSeekable).isInstanceOf(SeekableAnimatedVectorDrawable.class);
- mStateStore.setStateEntryValuesProto(
+ mStateStore.setAppStateEntryValuesProto(
ImmutableMap.of(
- "anim_val",
- StateEntryValue.newBuilder()
+ new AppDataKey<DynamicBuilders.DynamicFloat>("anim_val"),
+ DynamicDataValue.newBuilder()
.setFloatVal(FixedFloat.newBuilder().setValue(0.44f))
.build()));
shadowOf(getMainLooper()).idle();
@@ -2125,10 +2129,11 @@
@Test
public void inflate_arcLine_dynamicData_updatesArcLength() {
- mStateStore.setStateEntryValuesProto(
+ AppDataKey<DynamicBuilders.DynamicInt32> keyFoo = new AppDataKey<>("foo");
+ mStateStore.setAppStateEntryValuesProto(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ keyFoo,
+ DynamicDataValue.newBuilder()
.setInt32Val(FixedInt32.newBuilder().setValue(10))
.build()));
@@ -2173,10 +2178,10 @@
WearCurvedLineView line = (WearCurvedLineView) sizedContainer.getChildAt(0);
assertThat(line.getLineSweepAngleDegrees()).isEqualTo(10);
- mStateStore.setStateEntryValuesProto(
+ mStateStore.setAppStateEntryValuesProto(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ keyFoo,
+ DynamicDataValue.newBuilder()
.setInt32Val(FixedInt32.newBuilder().setValue(20))
.build()));
@@ -2270,10 +2275,11 @@
@Test
public void inflate_text_dynamicColor_updatesColor() {
- mStateStore.setStateEntryValuesProto(
+ AppDataKey<DynamicBuilders.DynamicColor> keyFoo = new AppDataKey<>("foo");
+ mStateStore.setAppStateEntryValuesProto(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ keyFoo,
+ DynamicDataValue.newBuilder()
.setColorVal(FixedColor.newBuilder().setArgb(0xFFFFFFFF))
.build()));
shadowOf(Looper.getMainLooper()).idle();
@@ -2301,10 +2307,10 @@
TextView tv = (TextView) rootLayout.getChildAt(0);
assertThat(tv.getCurrentTextColor()).isEqualTo(0xFFFFFFFF);
- mStateStore.setStateEntryValuesProto(
+ mStateStore.setAppStateEntryValuesProto(
ImmutableMap.of(
- "foo",
- StateEntryValue.newBuilder()
+ keyFoo,
+ DynamicDataValue.newBuilder()
.setColorVal(FixedColor.newBuilder().setArgb(0x11111111))
.build()));
@@ -2316,10 +2322,10 @@
// Must match a resource ID in buildResources
String protoResId = "android";
- mStateStore.setStateEntryValuesProto(
+ mStateStore.setAppStateEntryValuesProto(
ImmutableMap.of(
- "tint",
- StateEntryValue.newBuilder()
+ new AppDataKey<DynamicBuilders.DynamicColor>("tint"),
+ DynamicDataValue.newBuilder()
.setColorVal(FixedColor.newBuilder().setArgb(0xFFFFFFFF))
.build()));
shadowOf(Looper.getMainLooper()).idle();
diff --git a/wear/protolayout/protolayout/api/current.txt b/wear/protolayout/protolayout/api/current.txt
index 506910e9..c9ee11e 100644
--- a/wear/protolayout/protolayout/api/current.txt
+++ b/wear/protolayout/protolayout/api/current.txt
@@ -109,25 +109,6 @@
method public androidx.wear.protolayout.ActionBuilders.LoadAction.Builder setRequestState(androidx.wear.protolayout.StateBuilders.State);
}
- public static interface ActionBuilders.LocalAction {
- }
-
- public static interface ActionBuilders.LocalAction.Builder {
- method public androidx.wear.protolayout.ActionBuilders.LocalAction build();
- }
-
- public static final class ActionBuilders.SetStateAction implements androidx.wear.protolayout.ActionBuilders.LocalAction {
- method public String getTargetKey();
- method public androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue? getValue();
- }
-
- public static final class ActionBuilders.SetStateAction.Builder implements androidx.wear.protolayout.ActionBuilders.LocalAction.Builder {
- ctor public ActionBuilders.SetStateAction.Builder();
- method public androidx.wear.protolayout.ActionBuilders.SetStateAction build();
- method public androidx.wear.protolayout.ActionBuilders.SetStateAction.Builder setTargetKey(String);
- method public androidx.wear.protolayout.ActionBuilders.SetStateAction.Builder setValue(androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue);
- }
-
public final class ColorBuilders {
method public static androidx.wear.protolayout.ColorBuilders.ColorProp argb(@ColorInt int);
}
@@ -178,8 +159,8 @@
public final class DimensionBuilders {
method public static androidx.wear.protolayout.DimensionBuilders.DegreesProp degrees(float);
method public static androidx.wear.protolayout.DimensionBuilders.DpProp dp(@Dimension(unit=androidx.annotation.Dimension.DP) float);
- method public static androidx.wear.protolayout.DimensionBuilders.EmProp em(int);
method public static androidx.wear.protolayout.DimensionBuilders.EmProp em(float);
+ method public static androidx.wear.protolayout.DimensionBuilders.EmProp em(int);
method public static androidx.wear.protolayout.DimensionBuilders.ExpandedDimensionProp expand();
method public static androidx.wear.protolayout.DimensionBuilders.SpProp sp(@Dimension(unit=androidx.annotation.Dimension.SP) float);
method public static androidx.wear.protolayout.DimensionBuilders.WrappedDimensionProp wrap();
@@ -916,8 +897,8 @@
public static final class ModifiersBuilders.Semantics.Builder {
ctor public ModifiersBuilders.Semantics.Builder();
method public androidx.wear.protolayout.ModifiersBuilders.Semantics build();
- method public androidx.wear.protolayout.ModifiersBuilders.Semantics.Builder setContentDescription(String);
method public androidx.wear.protolayout.ModifiersBuilders.Semantics.Builder setContentDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
+ method public androidx.wear.protolayout.ModifiersBuilders.Semantics.Builder setContentDescription(String);
method public androidx.wear.protolayout.ModifiersBuilders.Semantics.Builder setRole(int);
method public androidx.wear.protolayout.ModifiersBuilders.Semantics.Builder setStateDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
}
@@ -935,6 +916,7 @@
public final class ResourceBuilders {
field public static final int ANIMATED_IMAGE_FORMAT_AVD = 1; // 0x1
field public static final int ANIMATED_IMAGE_FORMAT_UNDEFINED = 0; // 0x0
+ field public static final int IMAGE_FORMAT_ARGB_8888 = 2; // 0x2
field public static final int IMAGE_FORMAT_RGB_565 = 1; // 0x1
field public static final int IMAGE_FORMAT_UNDEFINED = 0; // 0x0
}
@@ -993,13 +975,14 @@
}
public static final class StateBuilders.State {
- method public java.util.Map<java.lang.String!,androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue!> getIdToValueMapping();
+ method public java.util.Map<java.lang.String!,androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue!> getIdToValueMapping();
method public String getLastClickableId();
+ method public static int getMaxStateEntryCount();
}
public static final class StateBuilders.State.Builder {
ctor public StateBuilders.State.Builder();
- method public androidx.wear.protolayout.StateBuilders.State.Builder addIdToValueMapping(String, androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue);
+ method public androidx.wear.protolayout.StateBuilders.State.Builder addKeyToValueMapping(androidx.wear.protolayout.expression.AppDataKey<?>, androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue);
method public androidx.wear.protolayout.StateBuilders.State build();
}
diff --git a/wear/protolayout/protolayout/api/public_plus_experimental_current.txt b/wear/protolayout/protolayout/api/public_plus_experimental_current.txt
index ce4acaa..5a5f0f7 100644
--- a/wear/protolayout/protolayout/api/public_plus_experimental_current.txt
+++ b/wear/protolayout/protolayout/api/public_plus_experimental_current.txt
@@ -109,25 +109,6 @@
method public androidx.wear.protolayout.ActionBuilders.LoadAction.Builder setRequestState(androidx.wear.protolayout.StateBuilders.State);
}
- public static interface ActionBuilders.LocalAction {
- }
-
- public static interface ActionBuilders.LocalAction.Builder {
- method public androidx.wear.protolayout.ActionBuilders.LocalAction build();
- }
-
- public static final class ActionBuilders.SetStateAction implements androidx.wear.protolayout.ActionBuilders.LocalAction {
- method public String getTargetKey();
- method public androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue? getValue();
- }
-
- public static final class ActionBuilders.SetStateAction.Builder implements androidx.wear.protolayout.ActionBuilders.LocalAction.Builder {
- ctor public ActionBuilders.SetStateAction.Builder();
- method public androidx.wear.protolayout.ActionBuilders.SetStateAction build();
- method public androidx.wear.protolayout.ActionBuilders.SetStateAction.Builder setTargetKey(String);
- method public androidx.wear.protolayout.ActionBuilders.SetStateAction.Builder setValue(androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue);
- }
-
public final class ColorBuilders {
method public static androidx.wear.protolayout.ColorBuilders.ColorProp argb(@ColorInt int);
}
@@ -190,8 +171,8 @@
public final class DimensionBuilders {
method public static androidx.wear.protolayout.DimensionBuilders.DegreesProp degrees(float);
method public static androidx.wear.protolayout.DimensionBuilders.DpProp dp(@Dimension(unit=androidx.annotation.Dimension.DP) float);
- method public static androidx.wear.protolayout.DimensionBuilders.EmProp em(int);
method public static androidx.wear.protolayout.DimensionBuilders.EmProp em(float);
+ method public static androidx.wear.protolayout.DimensionBuilders.EmProp em(int);
method public static androidx.wear.protolayout.DimensionBuilders.ExpandedDimensionProp expand();
method public static androidx.wear.protolayout.DimensionBuilders.SpProp sp(@Dimension(unit=androidx.annotation.Dimension.SP) float);
method public static androidx.wear.protolayout.DimensionBuilders.WrappedDimensionProp wrap();
@@ -1061,8 +1042,8 @@
public static final class ModifiersBuilders.Semantics.Builder {
ctor public ModifiersBuilders.Semantics.Builder();
method public androidx.wear.protolayout.ModifiersBuilders.Semantics build();
- method public androidx.wear.protolayout.ModifiersBuilders.Semantics.Builder setContentDescription(String);
method public androidx.wear.protolayout.ModifiersBuilders.Semantics.Builder setContentDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
+ method public androidx.wear.protolayout.ModifiersBuilders.Semantics.Builder setContentDescription(String);
method public androidx.wear.protolayout.ModifiersBuilders.Semantics.Builder setRole(int);
method public androidx.wear.protolayout.ModifiersBuilders.Semantics.Builder setStateDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
}
@@ -1121,6 +1102,7 @@
public final class ResourceBuilders {
field public static final int ANIMATED_IMAGE_FORMAT_AVD = 1; // 0x1
field public static final int ANIMATED_IMAGE_FORMAT_UNDEFINED = 0; // 0x0
+ field public static final int IMAGE_FORMAT_ARGB_8888 = 2; // 0x2
field public static final int IMAGE_FORMAT_RGB_565 = 1; // 0x1
field public static final int IMAGE_FORMAT_UNDEFINED = 0; // 0x0
}
@@ -1211,13 +1193,14 @@
}
public static final class StateBuilders.State {
- method public java.util.Map<java.lang.String!,androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue!> getIdToValueMapping();
+ method public java.util.Map<java.lang.String!,androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue!> getIdToValueMapping();
method public String getLastClickableId();
+ method public static int getMaxStateEntryCount();
}
public static final class StateBuilders.State.Builder {
ctor public StateBuilders.State.Builder();
- method public androidx.wear.protolayout.StateBuilders.State.Builder addIdToValueMapping(String, androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue);
+ method public androidx.wear.protolayout.StateBuilders.State.Builder addKeyToValueMapping(androidx.wear.protolayout.expression.AppDataKey<?>, androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue);
method public androidx.wear.protolayout.StateBuilders.State build();
}
diff --git a/wear/protolayout/protolayout/api/restricted_current.txt b/wear/protolayout/protolayout/api/restricted_current.txt
index 506910e9..c9ee11e 100644
--- a/wear/protolayout/protolayout/api/restricted_current.txt
+++ b/wear/protolayout/protolayout/api/restricted_current.txt
@@ -109,25 +109,6 @@
method public androidx.wear.protolayout.ActionBuilders.LoadAction.Builder setRequestState(androidx.wear.protolayout.StateBuilders.State);
}
- public static interface ActionBuilders.LocalAction {
- }
-
- public static interface ActionBuilders.LocalAction.Builder {
- method public androidx.wear.protolayout.ActionBuilders.LocalAction build();
- }
-
- public static final class ActionBuilders.SetStateAction implements androidx.wear.protolayout.ActionBuilders.LocalAction {
- method public String getTargetKey();
- method public androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue? getValue();
- }
-
- public static final class ActionBuilders.SetStateAction.Builder implements androidx.wear.protolayout.ActionBuilders.LocalAction.Builder {
- ctor public ActionBuilders.SetStateAction.Builder();
- method public androidx.wear.protolayout.ActionBuilders.SetStateAction build();
- method public androidx.wear.protolayout.ActionBuilders.SetStateAction.Builder setTargetKey(String);
- method public androidx.wear.protolayout.ActionBuilders.SetStateAction.Builder setValue(androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue);
- }
-
public final class ColorBuilders {
method public static androidx.wear.protolayout.ColorBuilders.ColorProp argb(@ColorInt int);
}
@@ -178,8 +159,8 @@
public final class DimensionBuilders {
method public static androidx.wear.protolayout.DimensionBuilders.DegreesProp degrees(float);
method public static androidx.wear.protolayout.DimensionBuilders.DpProp dp(@Dimension(unit=androidx.annotation.Dimension.DP) float);
- method public static androidx.wear.protolayout.DimensionBuilders.EmProp em(int);
method public static androidx.wear.protolayout.DimensionBuilders.EmProp em(float);
+ method public static androidx.wear.protolayout.DimensionBuilders.EmProp em(int);
method public static androidx.wear.protolayout.DimensionBuilders.ExpandedDimensionProp expand();
method public static androidx.wear.protolayout.DimensionBuilders.SpProp sp(@Dimension(unit=androidx.annotation.Dimension.SP) float);
method public static androidx.wear.protolayout.DimensionBuilders.WrappedDimensionProp wrap();
@@ -916,8 +897,8 @@
public static final class ModifiersBuilders.Semantics.Builder {
ctor public ModifiersBuilders.Semantics.Builder();
method public androidx.wear.protolayout.ModifiersBuilders.Semantics build();
- method public androidx.wear.protolayout.ModifiersBuilders.Semantics.Builder setContentDescription(String);
method public androidx.wear.protolayout.ModifiersBuilders.Semantics.Builder setContentDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
+ method public androidx.wear.protolayout.ModifiersBuilders.Semantics.Builder setContentDescription(String);
method public androidx.wear.protolayout.ModifiersBuilders.Semantics.Builder setRole(int);
method public androidx.wear.protolayout.ModifiersBuilders.Semantics.Builder setStateDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
}
@@ -935,6 +916,7 @@
public final class ResourceBuilders {
field public static final int ANIMATED_IMAGE_FORMAT_AVD = 1; // 0x1
field public static final int ANIMATED_IMAGE_FORMAT_UNDEFINED = 0; // 0x0
+ field public static final int IMAGE_FORMAT_ARGB_8888 = 2; // 0x2
field public static final int IMAGE_FORMAT_RGB_565 = 1; // 0x1
field public static final int IMAGE_FORMAT_UNDEFINED = 0; // 0x0
}
@@ -993,13 +975,14 @@
}
public static final class StateBuilders.State {
- method public java.util.Map<java.lang.String!,androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue!> getIdToValueMapping();
+ method public java.util.Map<java.lang.String!,androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue!> getIdToValueMapping();
method public String getLastClickableId();
+ method public static int getMaxStateEntryCount();
}
public static final class StateBuilders.State.Builder {
ctor public StateBuilders.State.Builder();
- method public androidx.wear.protolayout.StateBuilders.State.Builder addIdToValueMapping(String, androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue);
+ method public androidx.wear.protolayout.StateBuilders.State.Builder addKeyToValueMapping(androidx.wear.protolayout.expression.AppDataKey<?>, androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue);
method public androidx.wear.protolayout.StateBuilders.State build();
}
diff --git a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ActionBuilders.java b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ActionBuilders.java
index b0706de..92da2cf 100644
--- a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ActionBuilders.java
+++ b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ActionBuilders.java
@@ -26,9 +26,10 @@
import androidx.annotation.RestrictTo;
import androidx.annotation.RestrictTo.Scope;
import androidx.wear.protolayout.StateBuilders.State;
+import androidx.wear.protolayout.expression.AppDataKey;
+import androidx.wear.protolayout.expression.DynamicDataBuilders;
import androidx.wear.protolayout.expression.Fingerprint;
-import androidx.wear.protolayout.expression.StateEntryBuilders;
-import androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue;
+import androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue;
import androidx.wear.protolayout.proto.ActionProto;
import java.util.Collections;
import java.util.HashMap;
@@ -861,148 +862,4 @@
}
throw new IllegalStateException("Proto was not a recognised instance of Action");
}
-
- /**
- * Interface defining an action that is handled internal to the current layout and won't cause a
- * layout refresh.
- *
- * @since 1.2
- */
- public interface LocalAction {
- /**
- * Get the protocol buffer representation of this object.
- *
- */
- @RestrictTo(Scope.LIBRARY_GROUP)
- @NonNull
- ActionProto.LocalAction toLocalActionProto();
-
- /**
- * Get the fingerprint for this object or null if unknown.
- *
- */
- @RestrictTo(Scope.LIBRARY_GROUP)
- @Nullable
- Fingerprint getFingerprint();
-
- /** Builder to create {@link LocalAction} objects. */
- @SuppressLint("StaticFinalBuilder")
- interface Builder {
-
- /** Builds an instance with values accumulated in this Builder. */
- @NonNull
- LocalAction build();
- }
- }
-
- @NonNull
- static LocalAction localActionFromProto(@NonNull ActionProto.LocalAction proto) {
- if (proto.hasSetState()) {
- return SetStateAction.fromProto(proto.getSetState());
- }
- throw new IllegalStateException("Proto was not a recognised instance of LocalAction");
- }
-
- /**
- * An action that sets a new value for a {@link androidx.wear.protolayout.StateBuilders.State}.
- *
- * @since 1.2
- */
- public static final class SetStateAction implements LocalAction {
- private final ActionProto.SetStateAction mImpl;
- @Nullable private final Fingerprint mFingerprint;
-
- SetStateAction(ActionProto.SetStateAction impl, @Nullable Fingerprint fingerprint) {
- this.mImpl = impl;
- this.mFingerprint = fingerprint;
- }
-
- /**
- * Gets the target key of the state item for this action.
- *
- * @since 1.2
- */
- @NonNull
- public String getTargetKey() {
- return mImpl.getTargetKey();
- }
-
- /**
- * Gets the value to set the state item to, when this action is executed.
- *
- * @since 1.2
- */
- @Nullable
- public StateEntryValue getValue() {
- if (mImpl.hasValue()) {
- return StateEntryBuilders.stateEntryValueFromProto(mImpl.getValue());
- } else {
- return null;
- }
- }
-
- @Override
- @RestrictTo(Scope.LIBRARY_GROUP)
- @Nullable
- public Fingerprint getFingerprint() {
- return mFingerprint;
- }
-
- @NonNull
- static SetStateAction fromProto(@NonNull ActionProto.SetStateAction proto) {
- return new SetStateAction(proto, null);
- }
-
- @NonNull
- ActionProto.SetStateAction toProto() {
- return mImpl;
- }
-
- @Override
- @RestrictTo(Scope.LIBRARY_GROUP)
- @NonNull
- public ActionProto.LocalAction toLocalActionProto() {
- return ActionProto.LocalAction.newBuilder().setSetState(mImpl).build();
- }
-
- /** Builder for {@link SetStateAction}. */
- public static final class Builder implements LocalAction.Builder {
- private final ActionProto.SetStateAction.Builder mImpl =
- ActionProto.SetStateAction.newBuilder();
- private final Fingerprint mFingerprint = new Fingerprint(2126563467);
-
- public Builder() {}
-
- /**
- * Sets the target key of the state item for this action.
- *
- * @since 1.2
- */
- @NonNull
- public Builder setTargetKey(@NonNull String targetKey) {
- mImpl.setTargetKey(targetKey);
- mFingerprint.recordPropertyUpdate(1, targetKey.hashCode());
- return this;
- }
-
- /**
- * Sets the value to set the state item to, when this action is executed.
- *
- * @since 1.2
- */
- @NonNull
- public Builder setValue(@NonNull StateEntryValue value) {
- mImpl.setValue(value.toStateEntryValueProto());
- mFingerprint.recordPropertyUpdate(
- 2, checkNotNull(value.getFingerprint()).aggregateValueAsInt());
- return this;
- }
-
- @Override
- @NonNull
- public SetStateAction build() {
- return new SetStateAction(mImpl.build(), mFingerprint);
- }
- }
- }
}
diff --git a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ResourceBuilders.java b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ResourceBuilders.java
index 2fa280a..5ac3531 100644
--- a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ResourceBuilders.java
+++ b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ResourceBuilders.java
@@ -53,7 +53,7 @@
* @since 1.0
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
- @IntDef({IMAGE_FORMAT_UNDEFINED, IMAGE_FORMAT_RGB_565})
+ @IntDef({IMAGE_FORMAT_UNDEFINED, IMAGE_FORMAT_RGB_565, IMAGE_FORMAT_ARGB_8888})
@Retention(RetentionPolicy.SOURCE)
public @interface ImageFormat {}
@@ -73,6 +73,14 @@
public static final int IMAGE_FORMAT_RGB_565 = 1;
/**
+ * An image format where each pixel is stored on 4 bytes. RGB and alpha (for translucency) is
+ * stored with 8 bits of precision.
+ *
+ * @since 1.2
+ */
+ public static final int IMAGE_FORMAT_ARGB_8888 = 2;
+
+ /**
* Format describing the contents of an animated image.
*
* @since 1.2
diff --git a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/StateBuilders.java b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/StateBuilders.java
index 0fb8101..601ab2d 100644
--- a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/StateBuilders.java
+++ b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/StateBuilders.java
@@ -23,10 +23,11 @@
import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.annotation.RestrictTo.Scope;
+import androidx.wear.protolayout.expression.DynamicDataBuilders;
import androidx.wear.protolayout.expression.Fingerprint;
-import androidx.wear.protolayout.expression.StateEntryBuilders;
-import androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue;
-import androidx.wear.protolayout.expression.proto.StateEntryProto;
+import androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue;
+import androidx.wear.protolayout.expression.AppDataKey;
+import androidx.wear.protolayout.expression.proto.DynamicDataProto;
import androidx.wear.protolayout.proto.StateProto;
import java.util.Collections;
import java.util.HashMap;
@@ -46,11 +47,25 @@
private final StateProto.State mImpl;
@Nullable private final Fingerprint mFingerprint;
+ private static final int MAX_STATE_ENTRY_COUNT = 30;
+
State(StateProto.State impl, @Nullable Fingerprint fingerprint) {
this.mImpl = impl;
this.mFingerprint = fingerprint;
}
+
+ /**
+ * Returns the maximum number for state entries that can be added to the {@link State} using
+ * {@link Builder#addIdToValueMapping(String, StateEntryValue)}.
+ *
+ * <p>The ProtoLayout state model is not designed to handle large volumes of layout provided
+ * state. So we limit the number of state entries to keep the on-the-wire size and state
+ * store update times manageable.
+ */
+ static public int getMaxStateEntryCount(){
+ return MAX_STATE_ENTRY_COUNT;
+ }
/**
* Gets the ID of the clickable that was last clicked.
*
@@ -67,11 +82,13 @@
* @since 1.2
*/
@NonNull
- public Map<String, StateEntryValue> getIdToValueMapping() {
- Map<String, StateEntryValue> map = new HashMap<>();
- for (Entry<String, StateEntryProto.StateEntryValue> entry :
+ public Map<String, DynamicDataValue> getIdToValueMapping() {
+ Map<String, DynamicDataValue> map = new HashMap<>();
+ for (Entry<String, DynamicDataProto.DynamicDataValue> entry :
mImpl.getIdToValueMap().entrySet()) {
- map.put(entry.getKey(), StateEntryBuilders.stateEntryValueFromProto(entry.getValue()));
+ map.put(
+ entry.getKey(),
+ DynamicDataBuilders.dynamicDataValueFromProto(entry.getValue()));
}
return Collections.unmodifiableMap(map);
}
@@ -142,23 +159,26 @@
*/
@SuppressLint("MissingGetterMatchingBuilder")
@NonNull
- public Builder addIdToValueMapping(@NonNull String id, @NonNull StateEntryValue value) {
- mImpl.putIdToValue(id, value.toStateEntryValueProto());
+ public Builder addKeyToValueMapping(
+ @NonNull AppDataKey<?> sourceKey,
+ @NonNull DynamicDataValue value) {
+ mImpl.putIdToValue(sourceKey.getKey(), value.toDynamicDataValueProto());
mFingerprint.recordPropertyUpdate(
- id.hashCode(), checkNotNull(value.getFingerprint()).aggregateValueAsInt());
+ sourceKey.getKey().hashCode(),
+ checkNotNull(value.getFingerprint()).aggregateValueAsInt());
return this;
}
- private static final int MAX_STATE_SIZE = 30;
+
/** Builds an instance from accumulated values. */
@NonNull
public State build() {
- if (mImpl.getIdToValueMap().size() > MAX_STATE_SIZE) {
+ if (mImpl.getIdToValueMap().size() > getMaxStateEntryCount()) {
throw new IllegalStateException(
String.format(
"State size is too large: %d. Maximum " + "allowed state size is %d.",
- mImpl.getIdToValueMap().size(), MAX_STATE_SIZE));
+ mImpl.getIdToValueMap().size(), getMaxStateEntryCount()));
}
return new State(mImpl.build(), mFingerprint);
}
diff --git a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/ActionBuildersTest.java b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/ActionBuildersTest.java
index 39aa11e..ef7338a 100644
--- a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/ActionBuildersTest.java
+++ b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/ActionBuildersTest.java
@@ -20,7 +20,9 @@
import android.content.ComponentName;
-import androidx.wear.protolayout.expression.StateEntryBuilders;
+import androidx.wear.protolayout.expression.AppDataKey;
+import androidx.wear.protolayout.expression.DynamicBuilders;
+import androidx.wear.protolayout.expression.DynamicDataBuilders;
import androidx.wear.protolayout.proto.ActionProto;
import org.junit.Test;
@@ -35,19 +37,6 @@
"launchClass");
@Test
- public void setStateAction() {
- String key = "key";
- StateEntryBuilders.StateEntryValue value = StateEntryBuilders.StateEntryValue.fromString(
- "value");
- ActionBuilders.SetStateAction setStateAction = new ActionBuilders.SetStateAction.Builder()
- .setTargetKey(key).setValue(value).build();
-
- assertThat(setStateAction.getTargetKey()).isEqualTo(key);
- assertThat(setStateAction.getValue().toStateEntryValueProto()).isEqualTo(
- value.toStateEntryValueProto());
- }
-
- @Test
public void launchAction() {
ActionBuilders.LaunchAction launchAction = ActionBuilders.launchAction(LAUNCH_COMPONENT);
diff --git a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/ColorBuildersTest.java b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/ColorBuildersTest.java
index 078ae25..a37cb28 100644
--- a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/ColorBuildersTest.java
+++ b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/ColorBuildersTest.java
@@ -23,6 +23,7 @@
import android.graphics.Color;
import androidx.wear.protolayout.expression.DynamicBuilders;
+import androidx.wear.protolayout.expression.AppDataKey;
import androidx.wear.protolayout.proto.ColorProto;
import org.junit.Test;
@@ -34,13 +35,17 @@
private static final String STATE_KEY = "state-key";
private static final ColorBuilders.ColorProp COLOR =
new ColorBuilders.ColorProp.Builder(Color.RED)
- .setDynamicValue(DynamicBuilders.DynamicColor.fromState(STATE_KEY))
+ .setDynamicValue(
+ DynamicBuilders.DynamicColor.from(
+ new AppDataKey<>(STATE_KEY)))
.build();
@SuppressWarnings("deprecation")
private static final ColorBuilders.ColorProp.Builder COLOR_BUILDER_WITHOUT_STATIC_VALUE =
new ColorBuilders.ColorProp.Builder()
- .setDynamicValue(DynamicBuilders.DynamicColor.fromState(STATE_KEY));
+ .setDynamicValue(
+ DynamicBuilders.DynamicColor.from(
+ new AppDataKey<>(STATE_KEY)));
@Test
public void colorPropSupportsDynamicColor() {
diff --git a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/DimensionBuildersTest.java b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/DimensionBuildersTest.java
index 81f3b67..cdee4a9 100644
--- a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/DimensionBuildersTest.java
+++ b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/DimensionBuildersTest.java
@@ -23,6 +23,7 @@
import static org.junit.Assert.assertThrows;
import androidx.wear.protolayout.expression.DynamicBuilders;
+import androidx.wear.protolayout.expression.AppDataKey;
import androidx.wear.protolayout.proto.DimensionProto;
import org.junit.Test;
@@ -34,23 +35,31 @@
private static final String STATE_KEY = "state-key";
private static final DimensionBuilders.DpProp DP_PROP =
new DimensionBuilders.DpProp.Builder(3.14f)
- .setDynamicValue(DynamicBuilders.DynamicFloat.fromState(STATE_KEY))
+ .setDynamicValue(
+ DynamicBuilders.DynamicFloat.from(
+ new AppDataKey<>(STATE_KEY)))
.build();
@SuppressWarnings("deprecation")
private static final DimensionBuilders.DpProp.Builder DP_PROP_WITHOUT_STATIC_VALUE =
new DimensionBuilders.DpProp.Builder()
- .setDynamicValue(DynamicBuilders.DynamicFloat.fromState(STATE_KEY));
+ .setDynamicValue(
+ DynamicBuilders.DynamicFloat.from(
+ new AppDataKey<>(STATE_KEY)));
private static final DimensionBuilders.DegreesProp DEGREES_PROP =
new DimensionBuilders.DegreesProp.Builder(3.14f)
- .setDynamicValue(DynamicBuilders.DynamicFloat.fromState(STATE_KEY))
+ .setDynamicValue(
+ DynamicBuilders.DynamicFloat.from(
+ new AppDataKey<>(STATE_KEY)))
.build();
@SuppressWarnings("deprecation")
private static final DimensionBuilders.DegreesProp.Builder DEGREES_PROP_WITHOUT_STATIC_VALUE =
new DimensionBuilders.DegreesProp.Builder()
- .setDynamicValue(DynamicBuilders.DynamicFloat.fromState(STATE_KEY));
+ .setDynamicValue(
+ DynamicBuilders.DynamicFloat.from(
+ new AppDataKey<>(STATE_KEY)));
@Test
public void dpPropSupportsDynamicValue() {
@@ -113,7 +122,8 @@
public void wrappedMinSize_throwsWhenSetToDynamicValue() {
DimensionBuilders.DpProp minSizeDynamic =
new DimensionBuilders.DpProp.Builder(42)
- .setDynamicValue(DynamicBuilders.DynamicFloat.fromState("some-state"))
+ .setDynamicValue(DynamicBuilders.DynamicFloat.from(
+ new AppDataKey<>("some-state")))
.build();
assertThrows(
IllegalArgumentException.class,
diff --git a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/LayoutElementBuildersTest.java b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/LayoutElementBuildersTest.java
index 3b6107e..691b328 100644
--- a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/LayoutElementBuildersTest.java
+++ b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/LayoutElementBuildersTest.java
@@ -21,6 +21,7 @@
import static org.junit.Assert.assertThrows;
import androidx.wear.protolayout.expression.DynamicBuilders;
+import androidx.wear.protolayout.expression.AppDataKey;
import androidx.wear.protolayout.proto.DimensionProto;
import androidx.wear.protolayout.proto.LayoutElementProto;
import androidx.wear.protolayout.proto.TypesProto;
@@ -34,7 +35,9 @@
private static final String STATE_KEY = "state-key";
private static final DimensionBuilders.DegreesProp DEGREES_PROP =
new DimensionBuilders.DegreesProp.Builder(10)
- .setDynamicValue(DynamicBuilders.DynamicFloat.fromState(STATE_KEY))
+ .setDynamicValue(
+ DynamicBuilders.DynamicFloat.from(
+ new AppDataKey<>(STATE_KEY)))
.build();
private static final DimensionBuilders.AngularLayoutConstraint DEGREES_PROP_CONSTRAINT =
new DimensionBuilders.AngularLayoutConstraint.Builder(20)
@@ -42,7 +45,9 @@
.build();
private static final DimensionBuilders.DpProp DP_PROP =
new DimensionBuilders.DpProp.Builder(10)
- .setDynamicValue(DynamicBuilders.DynamicFloat.fromState(STATE_KEY))
+ .setDynamicValue(
+ DynamicBuilders.DynamicFloat.from(
+ new AppDataKey<>(STATE_KEY)))
.build();
private static final DimensionBuilders.HorizontalLayoutConstraint HORIZONTAL_LAYOUT_CONSTRAINT =
new DimensionBuilders.HorizontalLayoutConstraint.Builder(20)
@@ -54,7 +59,9 @@
.build();
private static final TypeBuilders.StringProp STRING_PROP =
new TypeBuilders.StringProp.Builder("string")
- .setDynamicValue(DynamicBuilders.DynamicString.fromState(STATE_KEY))
+ .setDynamicValue(
+ DynamicBuilders.DynamicString.from(
+ new AppDataKey<>(STATE_KEY)))
.build();
private static final TypeBuilders.StringLayoutConstraint STRING_LAYOUT_CONSTRAINT =
new TypeBuilders.StringLayoutConstraint.Builder("pattern")
diff --git a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/ModifiersBuildersTest.java b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/ModifiersBuildersTest.java
index fec2fb2..8cb5f79 100644
--- a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/ModifiersBuildersTest.java
+++ b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/ModifiersBuildersTest.java
@@ -22,6 +22,7 @@
import android.graphics.Color;
import androidx.wear.protolayout.expression.DynamicBuilders;
+import androidx.wear.protolayout.expression.AppDataKey;
import androidx.wear.protolayout.proto.ModifiersProto;
import org.junit.Test;
@@ -33,7 +34,9 @@
private static final String STATE_KEY = "state-key";
private static final ColorBuilders.ColorProp COLOR =
new ColorBuilders.ColorProp.Builder(Color.RED)
- .setDynamicValue(DynamicBuilders.DynamicColor.fromState(STATE_KEY))
+ .setDynamicValue(
+ DynamicBuilders.DynamicColor.from(
+ new AppDataKey<>(STATE_KEY)))
.build();
@Test
diff --git a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/ResourceBuildersTest.java b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/ResourceBuildersTest.java
index 2b6348d..5f6c5d87 100644
--- a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/ResourceBuildersTest.java
+++ b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/ResourceBuildersTest.java
@@ -21,6 +21,7 @@
import static com.google.common.truth.Truth.assertThat;
import androidx.wear.protolayout.expression.DynamicBuilders;
+import androidx.wear.protolayout.expression.AppDataKey;
import androidx.wear.protolayout.proto.ResourceProto;
import org.junit.Test;
@@ -55,7 +56,9 @@
new ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId.Builder()
.setResourceId(RESOURCE_ID)
.setAnimatedImageFormat(FORMAT)
- .setProgress(DynamicBuilders.DynamicFloat.fromState(stateKey))
+ .setProgress(
+ DynamicBuilders.DynamicFloat.from(
+ new AppDataKey<>(stateKey)))
.build();
ResourceProto.AndroidSeekableAnimatedImageResourceByResId avdProto = avd.toProto();
diff --git a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/StateBuildersTest.java b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/StateBuildersTest.java
index 3337f82..86d9ddb 100644
--- a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/StateBuildersTest.java
+++ b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/StateBuildersTest.java
@@ -18,7 +18,10 @@
import static com.google.common.truth.Truth.assertThat;
-import androidx.wear.protolayout.expression.StateEntryBuilders;
+import androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool;
+import androidx.wear.protolayout.expression.DynamicBuilders.DynamicString;
+import androidx.wear.protolayout.expression.DynamicDataBuilders;
+import androidx.wear.protolayout.expression.AppDataKey;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -35,20 +38,21 @@
@Test
public void additionalState() {
- StateEntryBuilders.StateEntryValue boolValue =
- StateEntryBuilders.StateEntryValue.fromBool(true);
- StateEntryBuilders.StateEntryValue stringValue =
- StateEntryBuilders.StateEntryValue.fromString("string");
+ DynamicDataBuilders.DynamicDataValue boolValue =
+ DynamicDataBuilders.DynamicDataValue.fromBool(true);
+ DynamicDataBuilders.DynamicDataValue stringValue =
+ DynamicDataBuilders.DynamicDataValue.fromString("string");
StateBuilders.State state = new StateBuilders.State.Builder()
- .addIdToValueMapping("boolValue", boolValue)
- .addIdToValueMapping("stringValue", stringValue)
+ .addKeyToValueMapping(
+ new AppDataKey<DynamicBool>("boolValue"), boolValue)
+ .addKeyToValueMapping(
+ new AppDataKey<DynamicString>("stringValue"), stringValue)
.build();
assertThat(state.getIdToValueMapping()).hasSize(2);
- assertThat(state.getIdToValueMapping().get("boolValue").toStateEntryValueProto()).isEqualTo(
- boolValue.toStateEntryValueProto());
- assertThat(
- state.getIdToValueMapping().get("stringValue").toStateEntryValueProto()).isEqualTo(
- stringValue.toStateEntryValueProto());
+ assertThat(state.getIdToValueMapping().get("boolValue").toDynamicDataValueProto())
+ .isEqualTo(boolValue.toDynamicDataValueProto());
+ assertThat(state.getIdToValueMapping().get("stringValue").toDynamicDataValueProto())
+ .isEqualTo(stringValue.toDynamicDataValueProto());
}
}
diff --git a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/TriggerBuildersTest.java b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/TriggerBuildersTest.java
index 6230a66..7cdffd5 100644
--- a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/TriggerBuildersTest.java
+++ b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/TriggerBuildersTest.java
@@ -19,6 +19,7 @@
import static com.google.common.truth.Truth.assertThat;
import androidx.wear.protolayout.expression.DynamicBuilders;
+import androidx.wear.protolayout.expression.AppDataKey;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -37,7 +38,8 @@
@Test
public void onConditionTrigger() {
- DynamicBuilders.DynamicBool condition = DynamicBuilders.DynamicBool.fromState("state");
+ DynamicBuilders.DynamicBool condition =
+ DynamicBuilders.DynamicBool.from(new AppDataKey<>("state"));
TriggerBuilders.Trigger onConditionMetTrigger =
TriggerBuilders.createOnConditionMetTrigger(
diff --git a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/TypeBuildersTest.java b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/TypeBuildersTest.java
index 4de0b0a..3245f32 100644
--- a/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/TypeBuildersTest.java
+++ b/wear/protolayout/protolayout/src/test/java/androidx/wear/protolayout/TypeBuildersTest.java
@@ -21,6 +21,7 @@
import static org.junit.Assert.assertThrows;
import androidx.wear.protolayout.expression.DynamicBuilders;
+import androidx.wear.protolayout.expression.AppDataKey;
import androidx.wear.protolayout.proto.TypesProto;
import org.junit.Test;
@@ -29,13 +30,17 @@
private static final String STATE_KEY = "state-key";
private static final TypeBuilders.StringProp STRING_PROP =
new TypeBuilders.StringProp.Builder("string")
- .setDynamicValue(DynamicBuilders.DynamicString.fromState(STATE_KEY))
+ .setDynamicValue(
+ DynamicBuilders.DynamicString.from(
+ new AppDataKey<>(STATE_KEY)))
.build();
@SuppressWarnings("deprecation")
private static final TypeBuilders.StringProp.Builder STRING_PROP_BUILDER_WITHOUT_STATIC_VALUE =
new TypeBuilders.StringProp.Builder()
- .setDynamicValue(DynamicBuilders.DynamicString.fromState(STATE_KEY));
+ .setDynamicValue(
+ DynamicBuilders.DynamicString.from(
+ new AppDataKey<>(STATE_KEY)));
@Test
public void stringPropSupportsDynamicString() {
diff --git a/wear/tiles/tiles-material/api/current.txt b/wear/tiles/tiles-material/api/current.txt
index a798a8f..85c110b 100644
--- a/wear/tiles/tiles-material/api/current.txt
+++ b/wear/tiles/tiles-material/api/current.txt
@@ -19,8 +19,8 @@
method @Deprecated public androidx.wear.tiles.material.Button.Builder setButtonColors(androidx.wear.tiles.material.ButtonColors);
method @Deprecated public androidx.wear.tiles.material.Button.Builder setContentDescription(CharSequence);
method @Deprecated public androidx.wear.tiles.material.Button.Builder setCustomContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
- method @Deprecated public androidx.wear.tiles.material.Button.Builder setIconContent(String, androidx.wear.tiles.DimensionBuilders.DpProp);
method @Deprecated public androidx.wear.tiles.material.Button.Builder setIconContent(String);
+ method @Deprecated public androidx.wear.tiles.material.Button.Builder setIconContent(String, androidx.wear.tiles.DimensionBuilders.DpProp);
method @Deprecated public androidx.wear.tiles.material.Button.Builder setImageContent(String);
method @Deprecated public androidx.wear.tiles.material.Button.Builder setSize(androidx.wear.tiles.DimensionBuilders.DpProp);
method @Deprecated public androidx.wear.tiles.material.Button.Builder setSize(@Dimension(unit=androidx.annotation.Dimension.DP) float);
@@ -29,8 +29,8 @@
}
@Deprecated public class ButtonColors {
- ctor @Deprecated public ButtonColors(@ColorInt int, @ColorInt int);
ctor @Deprecated public ButtonColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
+ ctor @Deprecated public ButtonColors(@ColorInt int, @ColorInt int);
method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getBackgroundColor();
method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getContentColor();
method @Deprecated public static androidx.wear.tiles.material.ButtonColors primaryButtonColors(androidx.wear.tiles.material.Colors);
@@ -76,10 +76,10 @@
}
@Deprecated public class ChipColors {
- ctor @Deprecated public ChipColors(@ColorInt int, @ColorInt int, @ColorInt int, @ColorInt int);
- ctor @Deprecated public ChipColors(@ColorInt int, @ColorInt int);
- ctor @Deprecated public ChipColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
ctor @Deprecated public ChipColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
+ ctor @Deprecated public ChipColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
+ ctor @Deprecated public ChipColors(@ColorInt int, @ColorInt int);
+ ctor @Deprecated public ChipColors(@ColorInt int, @ColorInt int, @ColorInt int, @ColorInt int);
method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getBackgroundColor();
method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getContentColor();
method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getIconColor();
diff --git a/wear/tiles/tiles-material/api/public_plus_experimental_current.txt b/wear/tiles/tiles-material/api/public_plus_experimental_current.txt
index a798a8f..85c110b 100644
--- a/wear/tiles/tiles-material/api/public_plus_experimental_current.txt
+++ b/wear/tiles/tiles-material/api/public_plus_experimental_current.txt
@@ -19,8 +19,8 @@
method @Deprecated public androidx.wear.tiles.material.Button.Builder setButtonColors(androidx.wear.tiles.material.ButtonColors);
method @Deprecated public androidx.wear.tiles.material.Button.Builder setContentDescription(CharSequence);
method @Deprecated public androidx.wear.tiles.material.Button.Builder setCustomContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
- method @Deprecated public androidx.wear.tiles.material.Button.Builder setIconContent(String, androidx.wear.tiles.DimensionBuilders.DpProp);
method @Deprecated public androidx.wear.tiles.material.Button.Builder setIconContent(String);
+ method @Deprecated public androidx.wear.tiles.material.Button.Builder setIconContent(String, androidx.wear.tiles.DimensionBuilders.DpProp);
method @Deprecated public androidx.wear.tiles.material.Button.Builder setImageContent(String);
method @Deprecated public androidx.wear.tiles.material.Button.Builder setSize(androidx.wear.tiles.DimensionBuilders.DpProp);
method @Deprecated public androidx.wear.tiles.material.Button.Builder setSize(@Dimension(unit=androidx.annotation.Dimension.DP) float);
@@ -29,8 +29,8 @@
}
@Deprecated public class ButtonColors {
- ctor @Deprecated public ButtonColors(@ColorInt int, @ColorInt int);
ctor @Deprecated public ButtonColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
+ ctor @Deprecated public ButtonColors(@ColorInt int, @ColorInt int);
method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getBackgroundColor();
method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getContentColor();
method @Deprecated public static androidx.wear.tiles.material.ButtonColors primaryButtonColors(androidx.wear.tiles.material.Colors);
@@ -76,10 +76,10 @@
}
@Deprecated public class ChipColors {
- ctor @Deprecated public ChipColors(@ColorInt int, @ColorInt int, @ColorInt int, @ColorInt int);
- ctor @Deprecated public ChipColors(@ColorInt int, @ColorInt int);
- ctor @Deprecated public ChipColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
ctor @Deprecated public ChipColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
+ ctor @Deprecated public ChipColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
+ ctor @Deprecated public ChipColors(@ColorInt int, @ColorInt int);
+ ctor @Deprecated public ChipColors(@ColorInt int, @ColorInt int, @ColorInt int, @ColorInt int);
method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getBackgroundColor();
method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getContentColor();
method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getIconColor();
diff --git a/wear/tiles/tiles-material/api/restricted_current.txt b/wear/tiles/tiles-material/api/restricted_current.txt
index a798a8f..85c110b 100644
--- a/wear/tiles/tiles-material/api/restricted_current.txt
+++ b/wear/tiles/tiles-material/api/restricted_current.txt
@@ -19,8 +19,8 @@
method @Deprecated public androidx.wear.tiles.material.Button.Builder setButtonColors(androidx.wear.tiles.material.ButtonColors);
method @Deprecated public androidx.wear.tiles.material.Button.Builder setContentDescription(CharSequence);
method @Deprecated public androidx.wear.tiles.material.Button.Builder setCustomContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
- method @Deprecated public androidx.wear.tiles.material.Button.Builder setIconContent(String, androidx.wear.tiles.DimensionBuilders.DpProp);
method @Deprecated public androidx.wear.tiles.material.Button.Builder setIconContent(String);
+ method @Deprecated public androidx.wear.tiles.material.Button.Builder setIconContent(String, androidx.wear.tiles.DimensionBuilders.DpProp);
method @Deprecated public androidx.wear.tiles.material.Button.Builder setImageContent(String);
method @Deprecated public androidx.wear.tiles.material.Button.Builder setSize(androidx.wear.tiles.DimensionBuilders.DpProp);
method @Deprecated public androidx.wear.tiles.material.Button.Builder setSize(@Dimension(unit=androidx.annotation.Dimension.DP) float);
@@ -29,8 +29,8 @@
}
@Deprecated public class ButtonColors {
- ctor @Deprecated public ButtonColors(@ColorInt int, @ColorInt int);
ctor @Deprecated public ButtonColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
+ ctor @Deprecated public ButtonColors(@ColorInt int, @ColorInt int);
method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getBackgroundColor();
method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getContentColor();
method @Deprecated public static androidx.wear.tiles.material.ButtonColors primaryButtonColors(androidx.wear.tiles.material.Colors);
@@ -76,10 +76,10 @@
}
@Deprecated public class ChipColors {
- ctor @Deprecated public ChipColors(@ColorInt int, @ColorInt int, @ColorInt int, @ColorInt int);
- ctor @Deprecated public ChipColors(@ColorInt int, @ColorInt int);
- ctor @Deprecated public ChipColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
ctor @Deprecated public ChipColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
+ ctor @Deprecated public ChipColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
+ ctor @Deprecated public ChipColors(@ColorInt int, @ColorInt int);
+ ctor @Deprecated public ChipColors(@ColorInt int, @ColorInt int, @ColorInt int, @ColorInt int);
method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getBackgroundColor();
method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getContentColor();
method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getIconColor();
diff --git a/wear/tiles/tiles-renderer/api/current.txt b/wear/tiles/tiles-renderer/api/current.txt
index 431fc0c..ea08664 100644
--- a/wear/tiles/tiles-renderer/api/current.txt
+++ b/wear/tiles/tiles-renderer/api/current.txt
@@ -16,8 +16,8 @@
package androidx.wear.tiles.connection {
public final class DefaultTileClient implements androidx.wear.tiles.client.TileClient {
- ctor public DefaultTileClient(android.content.Context context, android.content.ComponentName componentName, kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
ctor public DefaultTileClient(android.content.Context context, android.content.ComponentName componentName, java.util.concurrent.Executor executor);
+ ctor public DefaultTileClient(android.content.Context context, android.content.ComponentName componentName, kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
method public com.google.common.util.concurrent.ListenableFuture<java.lang.Integer> requestApiVersion();
method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources> requestResources(androidx.wear.tiles.RequestBuilders.ResourcesRequest requestParams);
method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.TileBuilders.Tile> requestTile(androidx.wear.tiles.RequestBuilders.TileRequest requestParams);
diff --git a/wear/tiles/tiles-renderer/api/public_plus_experimental_current.txt b/wear/tiles/tiles-renderer/api/public_plus_experimental_current.txt
index 431fc0c..ea08664 100644
--- a/wear/tiles/tiles-renderer/api/public_plus_experimental_current.txt
+++ b/wear/tiles/tiles-renderer/api/public_plus_experimental_current.txt
@@ -16,8 +16,8 @@
package androidx.wear.tiles.connection {
public final class DefaultTileClient implements androidx.wear.tiles.client.TileClient {
- ctor public DefaultTileClient(android.content.Context context, android.content.ComponentName componentName, kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
ctor public DefaultTileClient(android.content.Context context, android.content.ComponentName componentName, java.util.concurrent.Executor executor);
+ ctor public DefaultTileClient(android.content.Context context, android.content.ComponentName componentName, kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
method public com.google.common.util.concurrent.ListenableFuture<java.lang.Integer> requestApiVersion();
method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources> requestResources(androidx.wear.tiles.RequestBuilders.ResourcesRequest requestParams);
method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.TileBuilders.Tile> requestTile(androidx.wear.tiles.RequestBuilders.TileRequest requestParams);
diff --git a/wear/tiles/tiles-renderer/api/restricted_current.txt b/wear/tiles/tiles-renderer/api/restricted_current.txt
index 431fc0c..ea08664 100644
--- a/wear/tiles/tiles-renderer/api/restricted_current.txt
+++ b/wear/tiles/tiles-renderer/api/restricted_current.txt
@@ -16,8 +16,8 @@
package androidx.wear.tiles.connection {
public final class DefaultTileClient implements androidx.wear.tiles.client.TileClient {
- ctor public DefaultTileClient(android.content.Context context, android.content.ComponentName componentName, kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
ctor public DefaultTileClient(android.content.Context context, android.content.ComponentName componentName, java.util.concurrent.Executor executor);
+ ctor public DefaultTileClient(android.content.Context context, android.content.ComponentName componentName, kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
method public com.google.common.util.concurrent.ListenableFuture<java.lang.Integer> requestApiVersion();
method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources> requestResources(androidx.wear.tiles.RequestBuilders.ResourcesRequest requestParams);
method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.TileBuilders.Tile> requestTile(androidx.wear.tiles.RequestBuilders.TileRequest requestParams);
diff --git a/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/connection/DefaultTileClient.kt b/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/connection/DefaultTileClient.kt
index 4edda94..324056c 100644
--- a/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/connection/DefaultTileClient.kt
+++ b/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/connection/DefaultTileClient.kt
@@ -20,37 +20,37 @@
import android.content.Context
import androidx.annotation.VisibleForTesting
import androidx.concurrent.futures.ResolvableFuture
+import androidx.wear.protolayout.proto.ResourceProto
+import androidx.wear.protolayout.protobuf.InvalidProtocolBufferException
import androidx.wear.tiles.EventBuilders
import androidx.wear.tiles.RequestBuilders
import androidx.wear.tiles.ResourcesCallback
import androidx.wear.tiles.ResourcesData
import androidx.wear.tiles.ResourcesRequestData
-import androidx.wear.tiles.TileCallback
-import androidx.wear.tiles.TileData
-import androidx.wear.tiles.TileRequestData
import androidx.wear.tiles.TileAddEventData
import androidx.wear.tiles.TileBuilders
+import androidx.wear.tiles.TileCallback
+import androidx.wear.tiles.TileData
import androidx.wear.tiles.TileEnterEventData
import androidx.wear.tiles.TileLeaveEventData
import androidx.wear.tiles.TileProvider
-import androidx.wear.tiles.TileService
import androidx.wear.tiles.TileRemoveEventData
+import androidx.wear.tiles.TileRequestData
+import androidx.wear.tiles.TileService
import androidx.wear.tiles.client.TileClient
-import androidx.wear.protolayout.proto.ResourceProto
import androidx.wear.tiles.proto.TileProto
-import androidx.wear.protolayout.protobuf.InvalidProtocolBufferException
import com.google.common.util.concurrent.ListenableFuture
+import java.lang.IllegalArgumentException
+import java.util.concurrent.Executor
+import kotlin.coroutines.Continuation
+import kotlin.coroutines.resume
+import kotlin.coroutines.resumeWithException
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.asCoroutineDispatcher
import kotlinx.coroutines.launch
import kotlinx.coroutines.suspendCancellableCoroutine
import kotlinx.coroutines.withTimeout
-import java.lang.IllegalArgumentException
-import java.util.concurrent.Executor
-import kotlin.coroutines.Continuation
-import kotlin.coroutines.resume
-import kotlin.coroutines.resumeWithException
/**
* Implementation of [TileClient] which can connect to a `TileService` in either the local
diff --git a/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/connection/TilesConnectionBinder.kt b/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/connection/TilesConnectionBinder.kt
index cb797f6..c015756 100644
--- a/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/connection/TilesConnectionBinder.kt
+++ b/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/connection/TilesConnectionBinder.kt
@@ -23,6 +23,8 @@
import android.os.IBinder
import androidx.wear.tiles.TileProvider
import androidx.wear.tiles.TileService
+import java.util.concurrent.TimeUnit.SECONDS
+import kotlin.coroutines.resume
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Deferred
@@ -36,8 +38,6 @@
import kotlinx.coroutines.suspendCancellableCoroutine
import kotlinx.coroutines.withContext
import kotlinx.coroutines.withTimeout
-import java.util.concurrent.TimeUnit.SECONDS
-import kotlin.coroutines.resume
/**
* Connection binder for Tiles. This will connect to a {@link TileProvider} (with a timeout), and
diff --git a/wear/tiles/tiles-renderer/src/test/java/androidx/wear/tiles/checkers/TimelineCheckerTest.kt b/wear/tiles/tiles-renderer/src/test/java/androidx/wear/tiles/checkers/TimelineCheckerTest.kt
index be1d8a2..4222ae5 100644
--- a/wear/tiles/tiles-renderer/src/test/java/androidx/wear/tiles/checkers/TimelineCheckerTest.kt
+++ b/wear/tiles/tiles-renderer/src/test/java/androidx/wear/tiles/checkers/TimelineCheckerTest.kt
@@ -18,6 +18,8 @@
import androidx.wear.tiles.TilesTestRunner
import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
import org.mockito.kotlin.any
import org.mockito.kotlin.argumentCaptor
import org.mockito.kotlin.doReturn
@@ -25,8 +27,6 @@
import org.mockito.kotlin.mock
import org.mockito.kotlin.times
import org.mockito.kotlin.verify
-import org.junit.Test
-import org.junit.runner.RunWith
@RunWith(TilesTestRunner::class)
class TimelineCheckerTest {
diff --git a/wear/tiles/tiles-renderer/src/test/java/androidx/wear/tiles/connection/DefaultTileClientTest.kt b/wear/tiles/tiles-renderer/src/test/java/androidx/wear/tiles/connection/DefaultTileClientTest.kt
index 26f99dc..7e800c9 100644
--- a/wear/tiles/tiles-renderer/src/test/java/androidx/wear/tiles/connection/DefaultTileClientTest.kt
+++ b/wear/tiles/tiles-renderer/src/test/java/androidx/wear/tiles/connection/DefaultTileClientTest.kt
@@ -22,6 +22,7 @@
import android.os.Looper
import androidx.concurrent.futures.await
import androidx.test.core.app.ApplicationProvider
+import androidx.wear.protolayout.protobuf.InvalidProtocolBufferException
import androidx.wear.tiles.RequestBuilders
import androidx.wear.tiles.ResourcesCallback
import androidx.wear.tiles.ResourcesData
@@ -37,13 +38,13 @@
import androidx.wear.tiles.TileRequestData
import androidx.wear.tiles.TilesTestRunner
import androidx.wear.tiles.proto.TileProto
-import androidx.wear.protolayout.protobuf.InvalidProtocolBufferException
import com.google.common.truth.Truth.assertThat
+import java.lang.IllegalArgumentException
import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.Job
import kotlinx.coroutines.TimeoutCancellationException
import kotlinx.coroutines.async
import kotlinx.coroutines.launch
-import kotlinx.coroutines.Job
import kotlinx.coroutines.test.StandardTestDispatcher
import kotlinx.coroutines.test.TestDispatcher
import kotlinx.coroutines.test.TestScope
@@ -56,7 +57,6 @@
import org.junit.runner.RunWith
import org.robolectric.Shadows
import org.robolectric.annotation.Config
-import java.lang.IllegalArgumentException
@Config(manifest = Config.NONE)
@OptIn(ExperimentalCoroutinesApi::class, ExperimentalStdlibApi::class)
diff --git a/wear/tiles/tiles-renderer/src/test/java/androidx/wear/tiles/connection/TilesConnectionBinderTest.kt b/wear/tiles/tiles-renderer/src/test/java/androidx/wear/tiles/connection/TilesConnectionBinderTest.kt
index 613fa1b..64ae254 100644
--- a/wear/tiles/tiles-renderer/src/test/java/androidx/wear/tiles/connection/TilesConnectionBinderTest.kt
+++ b/wear/tiles/tiles-renderer/src/test/java/androidx/wear/tiles/connection/TilesConnectionBinderTest.kt
@@ -32,11 +32,12 @@
import androidx.wear.tiles.TileRequestData
import androidx.wear.tiles.TilesTestRunner
import com.google.common.truth.Truth.assertThat
+import java.lang.IllegalStateException
import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.Job
import kotlinx.coroutines.TimeoutCancellationException
import kotlinx.coroutines.async
import kotlinx.coroutines.delay
-import kotlinx.coroutines.Job
import kotlinx.coroutines.test.TestDispatcher
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.UnconfinedTestDispatcher
@@ -49,7 +50,6 @@
import org.junit.runner.RunWith
import org.robolectric.Shadows.shadowOf
import org.robolectric.annotation.Config
-import java.lang.IllegalStateException
@Config(manifest = Config.NONE)
@OptIn(ExperimentalCoroutinesApi::class)
diff --git a/wear/tiles/tiles-testing/api/current.txt b/wear/tiles/tiles-testing/api/current.txt
index 353b0c6..07ee6fd 100644
--- a/wear/tiles/tiles-testing/api/current.txt
+++ b/wear/tiles/tiles-testing/api/current.txt
@@ -2,8 +2,8 @@
package androidx.wear.tiles.testing {
public final class TestTileClient<T extends androidx.wear.tiles.TileService> implements androidx.wear.tiles.client.TileClient {
- ctor public TestTileClient(T service, kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
ctor public TestTileClient(T service, java.util.concurrent.Executor executor);
+ ctor public TestTileClient(T service, kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
method public com.google.common.util.concurrent.ListenableFuture<java.lang.Integer> requestApiVersion();
method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources> requestResources(androidx.wear.tiles.RequestBuilders.ResourcesRequest requestParams);
method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.TileBuilders.Tile> requestTile(androidx.wear.tiles.RequestBuilders.TileRequest requestParams);
diff --git a/wear/tiles/tiles-testing/api/public_plus_experimental_current.txt b/wear/tiles/tiles-testing/api/public_plus_experimental_current.txt
index 353b0c6..07ee6fd 100644
--- a/wear/tiles/tiles-testing/api/public_plus_experimental_current.txt
+++ b/wear/tiles/tiles-testing/api/public_plus_experimental_current.txt
@@ -2,8 +2,8 @@
package androidx.wear.tiles.testing {
public final class TestTileClient<T extends androidx.wear.tiles.TileService> implements androidx.wear.tiles.client.TileClient {
- ctor public TestTileClient(T service, kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
ctor public TestTileClient(T service, java.util.concurrent.Executor executor);
+ ctor public TestTileClient(T service, kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
method public com.google.common.util.concurrent.ListenableFuture<java.lang.Integer> requestApiVersion();
method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources> requestResources(androidx.wear.tiles.RequestBuilders.ResourcesRequest requestParams);
method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.TileBuilders.Tile> requestTile(androidx.wear.tiles.RequestBuilders.TileRequest requestParams);
diff --git a/wear/tiles/tiles-testing/api/restricted_current.txt b/wear/tiles/tiles-testing/api/restricted_current.txt
index 353b0c6..07ee6fd 100644
--- a/wear/tiles/tiles-testing/api/restricted_current.txt
+++ b/wear/tiles/tiles-testing/api/restricted_current.txt
@@ -2,8 +2,8 @@
package androidx.wear.tiles.testing {
public final class TestTileClient<T extends androidx.wear.tiles.TileService> implements androidx.wear.tiles.client.TileClient {
- ctor public TestTileClient(T service, kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
ctor public TestTileClient(T service, java.util.concurrent.Executor executor);
+ ctor public TestTileClient(T service, kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
method public com.google.common.util.concurrent.ListenableFuture<java.lang.Integer> requestApiVersion();
method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources> requestResources(androidx.wear.tiles.RequestBuilders.ResourcesRequest requestParams);
method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.TileBuilders.Tile> requestTile(androidx.wear.tiles.RequestBuilders.TileRequest requestParams);
diff --git a/wear/tiles/tiles-testing/src/main/java/androidx/wear/tiles/testing/TestTileClient.kt b/wear/tiles/tiles-testing/src/main/java/androidx/wear/tiles/testing/TestTileClient.kt
index 5d5858d..9b36360 100644
--- a/wear/tiles/tiles-testing/src/main/java/androidx/wear/tiles/testing/TestTileClient.kt
+++ b/wear/tiles/tiles-testing/src/main/java/androidx/wear/tiles/testing/TestTileClient.kt
@@ -27,11 +27,11 @@
import androidx.wear.tiles.client.TileClient
import androidx.wear.tiles.connection.DefaultTileClient
import com.google.common.util.concurrent.ListenableFuture
+import java.util.concurrent.Executor
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import org.robolectric.Shadows.shadowOf
import org.robolectric.android.controller.ServiceController
-import java.util.concurrent.Executor
/**
* [TileClient] for testing purposes. This will pass calls through to the given instance of
diff --git a/wear/tiles/tiles-testing/src/test/java/androidx/wear/tiles/testing/TestTileClientTest.kt b/wear/tiles/tiles-testing/src/test/java/androidx/wear/tiles/testing/TestTileClientTest.kt
index e437cc6..ed539b0 100644
--- a/wear/tiles/tiles-testing/src/test/java/androidx/wear/tiles/testing/TestTileClientTest.kt
+++ b/wear/tiles/tiles-testing/src/test/java/androidx/wear/tiles/testing/TestTileClientTest.kt
@@ -18,12 +18,12 @@
import android.os.Looper
import androidx.concurrent.futures.ResolvableFuture
+import androidx.wear.protolayout.ResourceBuilders
import androidx.wear.tiles.EventBuilders
import androidx.wear.tiles.RequestBuilders
import androidx.wear.tiles.TileBuilders
import androidx.wear.tiles.TileProvider
import androidx.wear.tiles.TileService
-import androidx.wear.protolayout.ResourceBuilders
import com.google.common.truth.Truth.assertThat
import com.google.common.util.concurrent.ListenableFuture
import org.junit.Before
diff --git a/wear/tiles/tiles-tooling/src/androidTest/java/androidx/wear/tiles/tooling/TileServiceViewAdapterTest.kt b/wear/tiles/tiles-tooling/src/androidTest/java/androidx/wear/tiles/tooling/TileServiceViewAdapterTest.kt
index 675e207..d197c38 100644
--- a/wear/tiles/tiles-tooling/src/androidTest/java/androidx/wear/tiles/tooling/TileServiceViewAdapterTest.kt
+++ b/wear/tiles/tiles-tooling/src/androidTest/java/androidx/wear/tiles/tooling/TileServiceViewAdapterTest.kt
@@ -16,11 +16,11 @@
package androidx.wear.tiles.tooling
-import androidx.wear.tiles.tooling.test.R
import android.app.Activity
import android.os.Bundle
import android.view.ViewGroup
import android.widget.TextView
+import androidx.wear.tiles.tooling.test.R
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotNull
import org.junit.Before
diff --git a/wear/tiles/tiles-tooling/src/test/java/androidx/wear/tiles/tooling/FindMethodTest.kt b/wear/tiles/tiles-tooling/src/test/java/androidx/wear/tiles/tooling/FindMethodTest.kt
index 05337da..e84bbc5 100644
--- a/wear/tiles/tiles-tooling/src/test/java/androidx/wear/tiles/tooling/FindMethodTest.kt
+++ b/wear/tiles/tiles-tooling/src/test/java/androidx/wear/tiles/tooling/FindMethodTest.kt
@@ -16,10 +16,9 @@
package androidx.wear.tiles.tooling
-import org.junit.Test
-
import org.junit.Assert.assertEquals
import org.junit.Assert.fail
+import org.junit.Test
@Suppress("unused")
open class A {
diff --git a/wear/tiles/tiles/api/current.txt b/wear/tiles/tiles/api/current.txt
index 45fe573..59cc0e5 100644
--- a/wear/tiles/tiles/api/current.txt
+++ b/wear/tiles/tiles/api/current.txt
@@ -150,8 +150,8 @@
@Deprecated public final class DimensionBuilders {
method @Deprecated public static androidx.wear.tiles.DimensionBuilders.DegreesProp degrees(float);
method @Deprecated public static androidx.wear.tiles.DimensionBuilders.DpProp dp(@Dimension(unit=androidx.annotation.Dimension.DP) float);
- method @Deprecated public static androidx.wear.tiles.DimensionBuilders.EmProp em(int);
method @Deprecated public static androidx.wear.tiles.DimensionBuilders.EmProp em(float);
+ method @Deprecated public static androidx.wear.tiles.DimensionBuilders.EmProp em(int);
method @Deprecated public static androidx.wear.tiles.DimensionBuilders.ExpandedDimensionProp expand();
method @Deprecated public static androidx.wear.tiles.DimensionBuilders.SpProp sp(@Dimension(unit=androidx.annotation.Dimension.SP) float);
method @Deprecated public static androidx.wear.tiles.DimensionBuilders.WrappedDimensionProp wrap();
diff --git a/wear/tiles/tiles/api/public_plus_experimental_current.txt b/wear/tiles/tiles/api/public_plus_experimental_current.txt
index 0b4241a..5f0bde2 100644
--- a/wear/tiles/tiles/api/public_plus_experimental_current.txt
+++ b/wear/tiles/tiles/api/public_plus_experimental_current.txt
@@ -150,8 +150,8 @@
@Deprecated public final class DimensionBuilders {
method @Deprecated public static androidx.wear.tiles.DimensionBuilders.DegreesProp degrees(float);
method @Deprecated public static androidx.wear.tiles.DimensionBuilders.DpProp dp(@Dimension(unit=androidx.annotation.Dimension.DP) float);
- method @Deprecated public static androidx.wear.tiles.DimensionBuilders.EmProp em(int);
method @Deprecated public static androidx.wear.tiles.DimensionBuilders.EmProp em(float);
+ method @Deprecated public static androidx.wear.tiles.DimensionBuilders.EmProp em(int);
method @Deprecated public static androidx.wear.tiles.DimensionBuilders.ExpandedDimensionProp expand();
method @Deprecated public static androidx.wear.tiles.DimensionBuilders.SpProp sp(@Dimension(unit=androidx.annotation.Dimension.SP) float);
method @Deprecated public static androidx.wear.tiles.DimensionBuilders.WrappedDimensionProp wrap();
diff --git a/wear/tiles/tiles/api/restricted_current.txt b/wear/tiles/tiles/api/restricted_current.txt
index 45fe573..59cc0e5 100644
--- a/wear/tiles/tiles/api/restricted_current.txt
+++ b/wear/tiles/tiles/api/restricted_current.txt
@@ -150,8 +150,8 @@
@Deprecated public final class DimensionBuilders {
method @Deprecated public static androidx.wear.tiles.DimensionBuilders.DegreesProp degrees(float);
method @Deprecated public static androidx.wear.tiles.DimensionBuilders.DpProp dp(@Dimension(unit=androidx.annotation.Dimension.DP) float);
- method @Deprecated public static androidx.wear.tiles.DimensionBuilders.EmProp em(int);
method @Deprecated public static androidx.wear.tiles.DimensionBuilders.EmProp em(float);
+ method @Deprecated public static androidx.wear.tiles.DimensionBuilders.EmProp em(int);
method @Deprecated public static androidx.wear.tiles.DimensionBuilders.ExpandedDimensionProp expand();
method @Deprecated public static androidx.wear.tiles.DimensionBuilders.SpProp sp(@Dimension(unit=androidx.annotation.Dimension.SP) float);
method @Deprecated public static androidx.wear.tiles.DimensionBuilders.WrappedDimensionProp wrap();
diff --git a/wear/tiles/tiles/src/test/java/androidx/wear/tiles/RequestBuildersTest.java b/wear/tiles/tiles/src/test/java/androidx/wear/tiles/RequestBuildersTest.java
index 0f105f3..93ea260 100644
--- a/wear/tiles/tiles/src/test/java/androidx/wear/tiles/RequestBuildersTest.java
+++ b/wear/tiles/tiles/src/test/java/androidx/wear/tiles/RequestBuildersTest.java
@@ -22,9 +22,11 @@
import androidx.wear.protolayout.DeviceParametersBuilders;
import androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters;
import androidx.wear.protolayout.StateBuilders.State;
-import androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue;
+import androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32;
+import androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue;
+import androidx.wear.protolayout.expression.AppDataKey;
import androidx.wear.protolayout.expression.proto.FixedProto;
-import androidx.wear.protolayout.expression.proto.StateEntryProto;
+import androidx.wear.protolayout.expression.proto.DynamicDataProto;
import androidx.wear.protolayout.proto.DeviceParametersProto;
import androidx.wear.protolayout.proto.StateProto;
import androidx.wear.tiles.RequestBuilders.ResourcesRequest;
@@ -45,8 +47,9 @@
new TileRequest.Builder()
.setCurrentState(
new State.Builder()
- .addIdToValueMapping(
- "entry_id", StateEntryValue.fromInt(13))
+ .addKeyToValueMapping(
+ new AppDataKey<DynamicInt32>("entry_id"),
+ DynamicDataValue.fromInt(13))
.build())
.setDeviceConfiguration(
new DeviceParameters.Builder()
@@ -132,7 +135,7 @@
StateProto.State.newBuilder()
.putIdToValue(
"entry_id",
- StateEntryProto.StateEntryValue.newBuilder()
+ DynamicDataProto.DynamicDataValue.newBuilder()
.setInt32Val(
FixedProto.FixedInt32.newBuilder()
.setValue(13))
diff --git a/wear/watchface/watchface-client-guava/api/current.txt b/wear/watchface/watchface-client-guava/api/current.txt
index 1b8efee..471cc7f 100644
--- a/wear/watchface/watchface-client-guava/api/current.txt
+++ b/wear/watchface/watchface-client-guava/api/current.txt
@@ -10,8 +10,8 @@
method @Deprecated public java.util.Map<java.lang.Integer,androidx.wear.watchface.client.DefaultComplicationDataSourcePolicyAndType> getDefaultComplicationDataSourcePoliciesAndType(android.content.ComponentName watchFaceName);
method public androidx.wear.watchface.client.EditorServiceClient getEditorServiceClient();
method public androidx.wear.watchface.client.InteractiveWatchFaceClient? getInteractiveWatchFaceClientInstance(String instanceId);
- method @Deprecated public suspend Object? getOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>);
method public suspend Object? getOrCreateInteractiveWatchFaceClient(String instanceId, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, java.util.concurrent.Executor previewImageUpdateRequestedExecutor, androidx.core.util.Consumer<java.lang.String> previewImageUpdateRequestedListener, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>);
+ method @Deprecated public suspend Object? getOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>);
method @Deprecated public com.google.common.util.concurrent.ListenableFuture<androidx.wear.watchface.client.InteractiveWatchFaceClient> listenableGetOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData);
method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.watchface.client.InteractiveWatchFaceClient> listenableGetOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, java.util.concurrent.Executor previewImageUpdateRequestedExecutor, androidx.core.util.Consumer<java.lang.String> previewImageUpdateRequestedListener);
field public static final androidx.wear.watchface.client.ListenableWatchFaceControlClient.Companion Companion;
diff --git a/wear/watchface/watchface-client-guava/api/public_plus_experimental_current.txt b/wear/watchface/watchface-client-guava/api/public_plus_experimental_current.txt
index 1b8efee..471cc7f 100644
--- a/wear/watchface/watchface-client-guava/api/public_plus_experimental_current.txt
+++ b/wear/watchface/watchface-client-guava/api/public_plus_experimental_current.txt
@@ -10,8 +10,8 @@
method @Deprecated public java.util.Map<java.lang.Integer,androidx.wear.watchface.client.DefaultComplicationDataSourcePolicyAndType> getDefaultComplicationDataSourcePoliciesAndType(android.content.ComponentName watchFaceName);
method public androidx.wear.watchface.client.EditorServiceClient getEditorServiceClient();
method public androidx.wear.watchface.client.InteractiveWatchFaceClient? getInteractiveWatchFaceClientInstance(String instanceId);
- method @Deprecated public suspend Object? getOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>);
method public suspend Object? getOrCreateInteractiveWatchFaceClient(String instanceId, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, java.util.concurrent.Executor previewImageUpdateRequestedExecutor, androidx.core.util.Consumer<java.lang.String> previewImageUpdateRequestedListener, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>);
+ method @Deprecated public suspend Object? getOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>);
method @Deprecated public com.google.common.util.concurrent.ListenableFuture<androidx.wear.watchface.client.InteractiveWatchFaceClient> listenableGetOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData);
method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.watchface.client.InteractiveWatchFaceClient> listenableGetOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, java.util.concurrent.Executor previewImageUpdateRequestedExecutor, androidx.core.util.Consumer<java.lang.String> previewImageUpdateRequestedListener);
field public static final androidx.wear.watchface.client.ListenableWatchFaceControlClient.Companion Companion;
diff --git a/wear/watchface/watchface-client-guava/api/restricted_current.txt b/wear/watchface/watchface-client-guava/api/restricted_current.txt
index 1b8efee..471cc7f 100644
--- a/wear/watchface/watchface-client-guava/api/restricted_current.txt
+++ b/wear/watchface/watchface-client-guava/api/restricted_current.txt
@@ -10,8 +10,8 @@
method @Deprecated public java.util.Map<java.lang.Integer,androidx.wear.watchface.client.DefaultComplicationDataSourcePolicyAndType> getDefaultComplicationDataSourcePoliciesAndType(android.content.ComponentName watchFaceName);
method public androidx.wear.watchface.client.EditorServiceClient getEditorServiceClient();
method public androidx.wear.watchface.client.InteractiveWatchFaceClient? getInteractiveWatchFaceClientInstance(String instanceId);
- method @Deprecated public suspend Object? getOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>);
method public suspend Object? getOrCreateInteractiveWatchFaceClient(String instanceId, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, java.util.concurrent.Executor previewImageUpdateRequestedExecutor, androidx.core.util.Consumer<java.lang.String> previewImageUpdateRequestedListener, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>);
+ method @Deprecated public suspend Object? getOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>);
method @Deprecated public com.google.common.util.concurrent.ListenableFuture<androidx.wear.watchface.client.InteractiveWatchFaceClient> listenableGetOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData);
method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.watchface.client.InteractiveWatchFaceClient> listenableGetOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, java.util.concurrent.Executor previewImageUpdateRequestedExecutor, androidx.core.util.Consumer<java.lang.String> previewImageUpdateRequestedListener);
field public static final androidx.wear.watchface.client.ListenableWatchFaceControlClient.Companion Companion;
diff --git a/wear/watchface/watchface-client-guava/build.gradle b/wear/watchface/watchface-client-guava/build.gradle
index 49dba28..45693e3 100644
--- a/wear/watchface/watchface-client-guava/build.gradle
+++ b/wear/watchface/watchface-client-guava/build.gradle
@@ -40,7 +40,7 @@
}
androidx {
- name = "Android Wear Watchface Client Guava"
+ name = "Android Wear Watchface Client Guava Integration"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2021"
description = "Guava wrappers for the Androidx Wear Watchface library"
diff --git a/wear/watchface/watchface-client/api/current.txt b/wear/watchface/watchface-client/api/current.txt
index fe929f3..57c6843 100644
--- a/wear/watchface/watchface-client/api/current.txt
+++ b/wear/watchface/watchface-client/api/current.txt
@@ -20,8 +20,8 @@
}
public final class ComplicationSlotState {
- ctor public ComplicationSlotState(android.graphics.Rect bounds, int boundsType, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy, boolean isEnabled, boolean isInitiallyEnabled, androidx.wear.watchface.complications.data.ComplicationType currentType, boolean fixedComplicationDataSource, android.os.Bundle complicationConfigExtras, Integer? nameResourceId, Integer? screenReaderNameResourceId);
ctor @Deprecated public ComplicationSlotState(android.graphics.Rect bounds, int boundsType, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy, androidx.wear.watchface.complications.data.ComplicationType defaultDataSourceType, boolean isEnabled, boolean isInitiallyEnabled, androidx.wear.watchface.complications.data.ComplicationType currentType, boolean fixedComplicationDataSource, android.os.Bundle complicationConfigExtras);
+ ctor public ComplicationSlotState(android.graphics.Rect bounds, int boundsType, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy, boolean isEnabled, boolean isInitiallyEnabled, androidx.wear.watchface.complications.data.ComplicationType currentType, boolean fixedComplicationDataSource, android.os.Bundle complicationConfigExtras, Integer? nameResourceId, Integer? screenReaderNameResourceId);
method public android.graphics.Rect getBounds();
method public int getBoundsType();
method public android.os.Bundle getComplicationConfigExtras();
@@ -179,8 +179,8 @@
}
public final class OverlayStyle {
- ctor public OverlayStyle(android.graphics.Color? backgroundColor, android.graphics.Color? foregroundColor);
ctor public OverlayStyle();
+ ctor public OverlayStyle(android.graphics.Color? backgroundColor, android.graphics.Color? foregroundColor);
method public android.graphics.Color? getBackgroundColor();
method public android.graphics.Color? getForegroundColor();
property public final android.graphics.Color? backgroundColor;
@@ -200,8 +200,8 @@
method @Deprecated @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public java.util.Map<java.lang.Integer,androidx.wear.watchface.client.DefaultComplicationDataSourcePolicyAndType> getDefaultComplicationDataSourcePoliciesAndType(android.content.ComponentName watchFaceName) throws android.os.RemoteException;
method @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public androidx.wear.watchface.client.EditorServiceClient getEditorServiceClient() throws android.os.RemoteException;
method @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public androidx.wear.watchface.client.InteractiveWatchFaceClient? getInteractiveWatchFaceClientInstance(String instanceId) throws android.os.RemoteException;
- method @Deprecated @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public suspend Object? getOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>) throws android.os.RemoteException;
method @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public default suspend Object? getOrCreateInteractiveWatchFaceClient(String instanceId, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, java.util.concurrent.Executor previewImageUpdateRequestedExecutor, androidx.core.util.Consumer<java.lang.String> previewImageUpdateRequestedListener, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>) throws android.os.RemoteException;
+ method @Deprecated @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public suspend Object? getOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>) throws android.os.RemoteException;
method public default boolean hasComplicationDataCache();
field public static final androidx.wear.watchface.client.WatchFaceControlClient.Companion Companion;
}
diff --git a/wear/watchface/watchface-client/api/public_plus_experimental_current.txt b/wear/watchface/watchface-client/api/public_plus_experimental_current.txt
index ee9780b..f122001 100644
--- a/wear/watchface/watchface-client/api/public_plus_experimental_current.txt
+++ b/wear/watchface/watchface-client/api/public_plus_experimental_current.txt
@@ -2,8 +2,8 @@
package androidx.wear.watchface.client {
public final class ComplicationSlotMetadata {
- ctor @androidx.wear.watchface.complications.data.ComplicationExperimental public ComplicationSlotMetadata(androidx.wear.watchface.complications.ComplicationSlotBounds? bounds, int boundsType, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy, boolean isInitiallyEnabled, boolean fixedComplicationDataSource, android.os.Bundle complicationConfigExtras, androidx.wear.watchface.BoundingArc? boundingArc);
ctor public ComplicationSlotMetadata(androidx.wear.watchface.complications.ComplicationSlotBounds? bounds, int boundsType, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy, boolean isInitiallyEnabled, boolean fixedComplicationDataSource, android.os.Bundle complicationConfigExtras);
+ ctor @androidx.wear.watchface.complications.data.ComplicationExperimental public ComplicationSlotMetadata(androidx.wear.watchface.complications.ComplicationSlotBounds? bounds, int boundsType, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy, boolean isInitiallyEnabled, boolean fixedComplicationDataSource, android.os.Bundle complicationConfigExtras, androidx.wear.watchface.BoundingArc? boundingArc);
method @androidx.wear.watchface.complications.data.ComplicationExperimental public androidx.wear.watchface.BoundingArc? getBoundingArc();
method public androidx.wear.watchface.complications.ComplicationSlotBounds? getBounds();
method public int getBoundsType();
@@ -22,9 +22,9 @@
}
public final class ComplicationSlotState {
+ ctor @Deprecated public ComplicationSlotState(android.graphics.Rect bounds, int boundsType, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy, androidx.wear.watchface.complications.data.ComplicationType defaultDataSourceType, boolean isEnabled, boolean isInitiallyEnabled, androidx.wear.watchface.complications.data.ComplicationType currentType, boolean fixedComplicationDataSource, android.os.Bundle complicationConfigExtras);
ctor public ComplicationSlotState(android.graphics.Rect bounds, int boundsType, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy, boolean isEnabled, boolean isInitiallyEnabled, androidx.wear.watchface.complications.data.ComplicationType currentType, boolean fixedComplicationDataSource, android.os.Bundle complicationConfigExtras, Integer? nameResourceId, Integer? screenReaderNameResourceId);
ctor @androidx.wear.watchface.complications.data.ComplicationExperimental public ComplicationSlotState(android.graphics.Rect bounds, int boundsType, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy, boolean isEnabled, boolean isInitiallyEnabled, androidx.wear.watchface.complications.data.ComplicationType currentType, boolean fixedComplicationDataSource, android.os.Bundle complicationConfigExtras, Integer? nameResourceId, Integer? screenReaderNameResourceId, androidx.wear.watchface.BoundingArc? edgeComplicationBoundingArc);
- ctor @Deprecated public ComplicationSlotState(android.graphics.Rect bounds, int boundsType, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy, androidx.wear.watchface.complications.data.ComplicationType defaultDataSourceType, boolean isEnabled, boolean isInitiallyEnabled, androidx.wear.watchface.complications.data.ComplicationType currentType, boolean fixedComplicationDataSource, android.os.Bundle complicationConfigExtras);
method @androidx.wear.watchface.complications.data.ComplicationExperimental public androidx.wear.watchface.BoundingArc? getBoundingArc();
method public android.graphics.Rect getBounds();
method public int getBoundsType();
@@ -185,8 +185,8 @@
}
public final class OverlayStyle {
- ctor public OverlayStyle(android.graphics.Color? backgroundColor, android.graphics.Color? foregroundColor);
ctor public OverlayStyle();
+ ctor public OverlayStyle(android.graphics.Color? backgroundColor, android.graphics.Color? foregroundColor);
method public android.graphics.Color? getBackgroundColor();
method public android.graphics.Color? getForegroundColor();
property public final android.graphics.Color? backgroundColor;
@@ -209,8 +209,8 @@
method @Deprecated @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public java.util.Map<java.lang.Integer,androidx.wear.watchface.client.DefaultComplicationDataSourcePolicyAndType> getDefaultComplicationDataSourcePoliciesAndType(android.content.ComponentName watchFaceName) throws android.os.RemoteException;
method @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public androidx.wear.watchface.client.EditorServiceClient getEditorServiceClient() throws android.os.RemoteException;
method @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public androidx.wear.watchface.client.InteractiveWatchFaceClient? getInteractiveWatchFaceClientInstance(String instanceId) throws android.os.RemoteException;
- method @Deprecated @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public suspend Object? getOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>) throws android.os.RemoteException;
method @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public default suspend Object? getOrCreateInteractiveWatchFaceClient(String instanceId, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, java.util.concurrent.Executor previewImageUpdateRequestedExecutor, androidx.core.util.Consumer<java.lang.String> previewImageUpdateRequestedListener, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>) throws android.os.RemoteException;
+ method @Deprecated @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public suspend Object? getOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>) throws android.os.RemoteException;
method public default boolean hasComplicationDataCache();
field public static final androidx.wear.watchface.client.WatchFaceControlClient.Companion Companion;
}
diff --git a/wear/watchface/watchface-client/api/restricted_current.txt b/wear/watchface/watchface-client/api/restricted_current.txt
index fe929f3..57c6843 100644
--- a/wear/watchface/watchface-client/api/restricted_current.txt
+++ b/wear/watchface/watchface-client/api/restricted_current.txt
@@ -20,8 +20,8 @@
}
public final class ComplicationSlotState {
- ctor public ComplicationSlotState(android.graphics.Rect bounds, int boundsType, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy, boolean isEnabled, boolean isInitiallyEnabled, androidx.wear.watchface.complications.data.ComplicationType currentType, boolean fixedComplicationDataSource, android.os.Bundle complicationConfigExtras, Integer? nameResourceId, Integer? screenReaderNameResourceId);
ctor @Deprecated public ComplicationSlotState(android.graphics.Rect bounds, int boundsType, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy, androidx.wear.watchface.complications.data.ComplicationType defaultDataSourceType, boolean isEnabled, boolean isInitiallyEnabled, androidx.wear.watchface.complications.data.ComplicationType currentType, boolean fixedComplicationDataSource, android.os.Bundle complicationConfigExtras);
+ ctor public ComplicationSlotState(android.graphics.Rect bounds, int boundsType, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy, boolean isEnabled, boolean isInitiallyEnabled, androidx.wear.watchface.complications.data.ComplicationType currentType, boolean fixedComplicationDataSource, android.os.Bundle complicationConfigExtras, Integer? nameResourceId, Integer? screenReaderNameResourceId);
method public android.graphics.Rect getBounds();
method public int getBoundsType();
method public android.os.Bundle getComplicationConfigExtras();
@@ -179,8 +179,8 @@
}
public final class OverlayStyle {
- ctor public OverlayStyle(android.graphics.Color? backgroundColor, android.graphics.Color? foregroundColor);
ctor public OverlayStyle();
+ ctor public OverlayStyle(android.graphics.Color? backgroundColor, android.graphics.Color? foregroundColor);
method public android.graphics.Color? getBackgroundColor();
method public android.graphics.Color? getForegroundColor();
property public final android.graphics.Color? backgroundColor;
@@ -200,8 +200,8 @@
method @Deprecated @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public java.util.Map<java.lang.Integer,androidx.wear.watchface.client.DefaultComplicationDataSourcePolicyAndType> getDefaultComplicationDataSourcePoliciesAndType(android.content.ComponentName watchFaceName) throws android.os.RemoteException;
method @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public androidx.wear.watchface.client.EditorServiceClient getEditorServiceClient() throws android.os.RemoteException;
method @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public androidx.wear.watchface.client.InteractiveWatchFaceClient? getInteractiveWatchFaceClientInstance(String instanceId) throws android.os.RemoteException;
- method @Deprecated @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public suspend Object? getOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>) throws android.os.RemoteException;
method @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public default suspend Object? getOrCreateInteractiveWatchFaceClient(String instanceId, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, java.util.concurrent.Executor previewImageUpdateRequestedExecutor, androidx.core.util.Consumer<java.lang.String> previewImageUpdateRequestedListener, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>) throws android.os.RemoteException;
+ method @Deprecated @kotlin.jvm.Throws(exceptionClasses=RemoteException::class) public suspend Object? getOrCreateInteractiveWatchFaceClient(String id, androidx.wear.watchface.client.DeviceConfig deviceConfig, androidx.wear.watchface.client.WatchUiState watchUiState, androidx.wear.watchface.style.UserStyleData? userStyle, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>? slotIdToComplicationData, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>) throws android.os.RemoteException;
method public default boolean hasComplicationDataCache();
field public static final androidx.wear.watchface.client.WatchFaceControlClient.Companion Companion;
}
diff --git a/wear/watchface/watchface-complications-data-source/api/current.txt b/wear/watchface/watchface-complications-data-source/api/current.txt
index dd2d8e2..8624bca 100644
--- a/wear/watchface/watchface-complications-data-source/api/current.txt
+++ b/wear/watchface/watchface-complications-data-source/api/current.txt
@@ -53,9 +53,9 @@
}
public final class ComplicationRequest {
- ctor @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public ComplicationRequest(int complicationInstanceId, androidx.wear.watchface.complications.data.ComplicationType complicationType, boolean immediateResponseRequired, int isForSafeWatchFace);
- ctor public ComplicationRequest(int complicationInstanceId, androidx.wear.watchface.complications.data.ComplicationType complicationType, boolean immediateResponseRequired);
ctor @Deprecated public ComplicationRequest(int complicationInstanceId, androidx.wear.watchface.complications.data.ComplicationType complicationType);
+ ctor public ComplicationRequest(int complicationInstanceId, androidx.wear.watchface.complications.data.ComplicationType complicationType, boolean immediateResponseRequired);
+ ctor @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public ComplicationRequest(int complicationInstanceId, androidx.wear.watchface.complications.data.ComplicationType complicationType, boolean immediateResponseRequired, int isForSafeWatchFace);
method public int getComplicationInstanceId();
method public androidx.wear.watchface.complications.data.ComplicationType getComplicationType();
method public int isForSafeWatchFace();
diff --git a/wear/watchface/watchface-complications-data-source/api/public_plus_experimental_current.txt b/wear/watchface/watchface-complications-data-source/api/public_plus_experimental_current.txt
index dd2d8e2..8624bca 100644
--- a/wear/watchface/watchface-complications-data-source/api/public_plus_experimental_current.txt
+++ b/wear/watchface/watchface-complications-data-source/api/public_plus_experimental_current.txt
@@ -53,9 +53,9 @@
}
public final class ComplicationRequest {
- ctor @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public ComplicationRequest(int complicationInstanceId, androidx.wear.watchface.complications.data.ComplicationType complicationType, boolean immediateResponseRequired, int isForSafeWatchFace);
- ctor public ComplicationRequest(int complicationInstanceId, androidx.wear.watchface.complications.data.ComplicationType complicationType, boolean immediateResponseRequired);
ctor @Deprecated public ComplicationRequest(int complicationInstanceId, androidx.wear.watchface.complications.data.ComplicationType complicationType);
+ ctor public ComplicationRequest(int complicationInstanceId, androidx.wear.watchface.complications.data.ComplicationType complicationType, boolean immediateResponseRequired);
+ ctor @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public ComplicationRequest(int complicationInstanceId, androidx.wear.watchface.complications.data.ComplicationType complicationType, boolean immediateResponseRequired, int isForSafeWatchFace);
method public int getComplicationInstanceId();
method public androidx.wear.watchface.complications.data.ComplicationType getComplicationType();
method public int isForSafeWatchFace();
diff --git a/wear/watchface/watchface-complications-data-source/api/restricted_current.txt b/wear/watchface/watchface-complications-data-source/api/restricted_current.txt
index dd2d8e2..8624bca 100644
--- a/wear/watchface/watchface-complications-data-source/api/restricted_current.txt
+++ b/wear/watchface/watchface-complications-data-source/api/restricted_current.txt
@@ -53,9 +53,9 @@
}
public final class ComplicationRequest {
- ctor @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public ComplicationRequest(int complicationInstanceId, androidx.wear.watchface.complications.data.ComplicationType complicationType, boolean immediateResponseRequired, int isForSafeWatchFace);
- ctor public ComplicationRequest(int complicationInstanceId, androidx.wear.watchface.complications.data.ComplicationType complicationType, boolean immediateResponseRequired);
ctor @Deprecated public ComplicationRequest(int complicationInstanceId, androidx.wear.watchface.complications.data.ComplicationType complicationType);
+ ctor public ComplicationRequest(int complicationInstanceId, androidx.wear.watchface.complications.data.ComplicationType complicationType, boolean immediateResponseRequired);
+ ctor @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public ComplicationRequest(int complicationInstanceId, androidx.wear.watchface.complications.data.ComplicationType complicationType, boolean immediateResponseRequired, int isForSafeWatchFace);
method public int getComplicationInstanceId();
method public androidx.wear.watchface.complications.data.ComplicationType getComplicationType();
method public int isForSafeWatchFace();
diff --git a/wear/watchface/watchface-complications-data/api/current.txt b/wear/watchface/watchface-complications-data/api/current.txt
index 2992e08..d0ccbde 100644
--- a/wear/watchface/watchface-complications-data/api/current.txt
+++ b/wear/watchface/watchface-complications-data/api/current.txt
@@ -375,8 +375,8 @@
}
public static final class TimeDifferenceComplicationText.Builder {
- ctor public TimeDifferenceComplicationText.Builder(androidx.wear.watchface.complications.data.TimeDifferenceStyle style, androidx.wear.watchface.complications.data.CountUpTimeReference countUpTimeReference);
ctor public TimeDifferenceComplicationText.Builder(androidx.wear.watchface.complications.data.TimeDifferenceStyle style, androidx.wear.watchface.complications.data.CountDownTimeReference countDownTimeReference);
+ ctor public TimeDifferenceComplicationText.Builder(androidx.wear.watchface.complications.data.TimeDifferenceStyle style, androidx.wear.watchface.complications.data.CountUpTimeReference countUpTimeReference);
method public androidx.wear.watchface.complications.data.TimeDifferenceComplicationText build();
method public androidx.wear.watchface.complications.data.TimeDifferenceComplicationText.Builder setDisplayAsNow(boolean displayAsNow);
method public androidx.wear.watchface.complications.data.TimeDifferenceComplicationText.Builder setMinimumTimeUnit(java.util.concurrent.TimeUnit? minimumUnit);
diff --git a/wear/watchface/watchface-complications-data/api/public_plus_experimental_current.txt b/wear/watchface/watchface-complications-data/api/public_plus_experimental_current.txt
index e6efd13..4aa8a0e 100644
--- a/wear/watchface/watchface-complications-data/api/public_plus_experimental_current.txt
+++ b/wear/watchface/watchface-complications-data/api/public_plus_experimental_current.txt
@@ -378,8 +378,8 @@
}
public static final class TimeDifferenceComplicationText.Builder {
- ctor public TimeDifferenceComplicationText.Builder(androidx.wear.watchface.complications.data.TimeDifferenceStyle style, androidx.wear.watchface.complications.data.CountUpTimeReference countUpTimeReference);
ctor public TimeDifferenceComplicationText.Builder(androidx.wear.watchface.complications.data.TimeDifferenceStyle style, androidx.wear.watchface.complications.data.CountDownTimeReference countDownTimeReference);
+ ctor public TimeDifferenceComplicationText.Builder(androidx.wear.watchface.complications.data.TimeDifferenceStyle style, androidx.wear.watchface.complications.data.CountUpTimeReference countUpTimeReference);
method public androidx.wear.watchface.complications.data.TimeDifferenceComplicationText build();
method public androidx.wear.watchface.complications.data.TimeDifferenceComplicationText.Builder setDisplayAsNow(boolean displayAsNow);
method public androidx.wear.watchface.complications.data.TimeDifferenceComplicationText.Builder setMinimumTimeUnit(java.util.concurrent.TimeUnit? minimumUnit);
diff --git a/wear/watchface/watchface-complications-data/api/restricted_current.txt b/wear/watchface/watchface-complications-data/api/restricted_current.txt
index 7a434b5..81cfcf3 100644
--- a/wear/watchface/watchface-complications-data/api/restricted_current.txt
+++ b/wear/watchface/watchface-complications-data/api/restricted_current.txt
@@ -377,8 +377,8 @@
}
public static final class TimeDifferenceComplicationText.Builder {
- ctor public TimeDifferenceComplicationText.Builder(androidx.wear.watchface.complications.data.TimeDifferenceStyle style, androidx.wear.watchface.complications.data.CountUpTimeReference countUpTimeReference);
ctor public TimeDifferenceComplicationText.Builder(androidx.wear.watchface.complications.data.TimeDifferenceStyle style, androidx.wear.watchface.complications.data.CountDownTimeReference countDownTimeReference);
+ ctor public TimeDifferenceComplicationText.Builder(androidx.wear.watchface.complications.data.TimeDifferenceStyle style, androidx.wear.watchface.complications.data.CountUpTimeReference countUpTimeReference);
method public androidx.wear.watchface.complications.data.TimeDifferenceComplicationText build();
method public androidx.wear.watchface.complications.data.TimeDifferenceComplicationText.Builder setDisplayAsNow(boolean displayAsNow);
method public androidx.wear.watchface.complications.data.TimeDifferenceComplicationText.Builder setMinimumTimeUnit(java.util.concurrent.TimeUnit? minimumUnit);
diff --git a/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/ComplicationDataExpressionEvaluator.kt b/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/ComplicationDataExpressionEvaluator.kt
index ddf43de..ca001fa 100644
--- a/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/ComplicationDataExpressionEvaluator.kt
+++ b/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/ComplicationDataExpressionEvaluator.kt
@@ -23,13 +23,17 @@
import androidx.annotation.MainThread
import androidx.annotation.RestrictTo
import androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat
+import androidx.wear.protolayout.expression.PlatformDataKey
+import androidx.wear.protolayout.expression.PlatformHealthSources
import androidx.wear.protolayout.expression.pipeline.BoundDynamicType
import androidx.wear.protolayout.expression.pipeline.DynamicTypeBindingRequest
import androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator
import androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver
+import androidx.wear.protolayout.expression.pipeline.SensorGatewaySingleDataProvider
import androidx.wear.protolayout.expression.pipeline.StateStore
import androidx.wear.protolayout.expression.pipeline.TimeGateway
import androidx.wear.protolayout.expression.pipeline.sensor.SensorGateway
+import java.util.Collections
import java.util.concurrent.Executor
import kotlin.coroutines.ContinuationInterceptor
import kotlin.coroutines.CoroutineContext
@@ -59,6 +63,7 @@
class ComplicationDataExpressionEvaluator(
private val stateStore: StateStore? = StateStore(emptyMap()),
private val timeGateway: TimeGateway? = null,
+ // TODO(b/281664278): remove the SensorGateway usage, implement PlatformDataProvider instead.
private val sensorGateway: SensorGateway? = null,
private val keepExpression: Boolean = false,
) {
@@ -294,7 +299,22 @@
DynamicTypeEvaluator.Config.Builder()
.apply { stateStore?.let { setStateStore(it) } }
.apply { timeGateway?.let { setTimeGateway(it) } }
- .apply { sensorGateway?.let { setSensorGateway(it) } }
+ .apply { sensorGateway?.let {
+ addPlatformDataProvider(
+ SensorGatewaySingleDataProvider(
+ sensorGateway, PlatformHealthSources.HEART_RATE_BPM
+ ),
+ Collections.singleton(PlatformHealthSources.HEART_RATE_BPM)
+ as Set<PlatformDataKey<*>>
+ )
+ addPlatformDataProvider(
+ SensorGatewaySingleDataProvider(
+ sensorGateway, PlatformHealthSources.DAILY_STEPS
+ ),
+ Collections.singleton(PlatformHealthSources.DAILY_STEPS)
+ as Set<PlatformDataKey<*>>
+ )
+ } }
.build()
)
try {
diff --git a/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/Text.kt b/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/Text.kt
index 9d2d48f..0bdbfb6 100644
--- a/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/Text.kt
+++ b/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/Text.kt
@@ -22,8 +22,8 @@
import android.support.wearable.complications.ComplicationText as WireComplicationText
import android.support.wearable.complications.ComplicationText.TimeDifferenceBuilder as WireComplicationTextTimeDifferenceBuilder
import android.support.wearable.complications.ComplicationText.TimeFormatBuilder as WireComplicationTextTimeFormatBuilder
-import android.support.wearable.complications.TimeDependentText as WireTimeDependentText
import android.support.wearable.complications.TimeDependentText
+import android.support.wearable.complications.TimeDependentText as WireTimeDependentText
import android.support.wearable.complications.TimeDifferenceText
import android.text.style.ForegroundColorSpan
import android.text.style.LocaleSpan
diff --git a/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/ComplicationDataExpressionEvaluatorTest.kt b/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/ComplicationDataExpressionEvaluatorTest.kt
index 3a22917..65d472b 100644
--- a/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/ComplicationDataExpressionEvaluatorTest.kt
+++ b/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/ComplicationDataExpressionEvaluatorTest.kt
@@ -21,10 +21,11 @@
import android.support.wearable.complications.ComplicationData.Companion.TYPE_SHORT_TEXT
import android.support.wearable.complications.ComplicationText as WireComplicationText
import android.util.Log
+import androidx.wear.protolayout.expression.AppDataKey
import androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat
import androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant
import androidx.wear.protolayout.expression.DynamicBuilders.DynamicString
-import androidx.wear.protolayout.expression.StateEntryBuilders.StateEntryValue
+import androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue
import androidx.wear.protolayout.expression.pipeline.StateStore
import androidx.wear.protolayout.expression.pipeline.TimeGateway
import androidx.wear.watchface.complications.data.ComplicationDataExpressionEvaluator.Companion.INVALID_DATA
@@ -75,7 +76,7 @@
*/
enum class DataWithExpressionScenario(
val expressed: WireComplicationData,
- val states: List<Map<String, StateEntryValue>>,
+ val states: List<Map<AppDataKey<*>, DynamicDataValue>>,
val evaluated: List<WireComplicationData>,
) {
SET_IMMEDIATELY_WHEN_ALL_DATA_AVAILABLE(
@@ -112,13 +113,19 @@
SET_ONLY_AFTER_ALL_FIELDS_EVALUATED(
expressed =
WireComplicationData.Builder(TYPE_NO_DATA)
- .setRangedValueExpression(DynamicFloat.fromState("ranged_value"))
- .setLongText(WireComplicationText(DynamicString.fromState("long_text")))
- .setLongTitle(WireComplicationText(DynamicString.fromState("long_title")))
- .setShortText(WireComplicationText(DynamicString.fromState("short_text")))
- .setShortTitle(WireComplicationText(DynamicString.fromState("short_title")))
+ .setRangedValueExpression(DynamicFloat.from(AppDataKey("ranged_value")))
+ .setLongText(WireComplicationText(DynamicString.from(AppDataKey("long_text"))))
+ .setLongTitle(
+ WireComplicationText(DynamicString.from(AppDataKey("long_title")))
+ )
+ .setShortText(
+ WireComplicationText(DynamicString.from(AppDataKey("short_text")))
+ )
+ .setShortTitle(
+ WireComplicationText(DynamicString.from(AppDataKey("short_title")))
+ )
.setContentDescription(
- WireComplicationText(DynamicString.fromState("description"))
+ WireComplicationText(DynamicString.from(AppDataKey("description")))
)
.setPlaceholder(stateData("placeholder"))
.setListEntryCollection(listOf(stateData("list")))
@@ -127,15 +134,38 @@
states =
aggregate(
// Each map piles on top of the previous ones.
- mapOf("ranged_value" to StateEntryValue.fromFloat(1f)),
- mapOf("long_text" to StateEntryValue.fromString("Long Text")),
- mapOf("long_title" to StateEntryValue.fromString("Long Title")),
- mapOf("short_text" to StateEntryValue.fromString("Short Text")),
- mapOf("short_title" to StateEntryValue.fromString("Short Title")),
- mapOf("description" to StateEntryValue.fromString("Description")),
- mapOf("placeholder" to StateEntryValue.fromString("Placeholder")),
- mapOf("list" to StateEntryValue.fromString("List")),
- mapOf("timeline" to StateEntryValue.fromString("Timeline")),
+ mapOf(
+ AppDataKey<DynamicFloat>("ranged_value") to DynamicDataValue.fromFloat(1f)
+ ),
+ mapOf(
+ AppDataKey<DynamicString>("long_text") to
+ DynamicDataValue.fromString("Long Text")
+ ),
+ mapOf(
+ AppDataKey<DynamicString>("long_title") to
+ DynamicDataValue.fromString("Long Title")
+ ),
+ mapOf(
+ AppDataKey<DynamicString>("short_text") to
+ DynamicDataValue.fromString("Short Text")
+ ),
+ mapOf(
+ AppDataKey<DynamicString>("short_title") to
+ DynamicDataValue.fromString("Short Title")
+ ),
+ mapOf(
+ AppDataKey<DynamicString>("description") to
+ DynamicDataValue.fromString("Description")
+ ),
+ mapOf(
+ AppDataKey<DynamicString>("placeholder") to
+ DynamicDataValue.fromString("Placeholder")
+ ),
+ mapOf(AppDataKey<DynamicString>("list") to DynamicDataValue.fromString("List")),
+ mapOf(
+ AppDataKey<DynamicString>("timeline") to
+ DynamicDataValue.fromString("Timeline")
+ ),
// Only the last one will trigger an evaluated data.
),
evaluated =
@@ -164,12 +194,14 @@
SET_TO_EVALUATED_IF_ALL_FIELDS_VALID(
expressed =
WireComplicationData.Builder(TYPE_SHORT_TEXT)
- .setShortTitle(WireComplicationText(DynamicString.fromState("valid")))
- .setShortText(WireComplicationText(DynamicString.fromState("valid")))
+ .setShortTitle(WireComplicationText(DynamicString.from(AppDataKey("valid"))))
+ .setShortText(WireComplicationText(DynamicString.from(AppDataKey("valid"))))
.build(),
states =
listOf(
- mapOf("valid" to StateEntryValue.fromString("Valid")),
+ mapOf(
+ AppDataKey<DynamicString>("valid") to DynamicDataValue.fromString("Valid")
+ ),
),
evaluated =
listOf(
@@ -183,13 +215,15 @@
SET_TO_NO_DATA_IF_FIRST_STATE_IS_INVALID(
expressed =
WireComplicationData.Builder(TYPE_SHORT_TEXT)
- .setShortTitle(WireComplicationText(DynamicString.fromState("valid")))
- .setShortText(WireComplicationText(DynamicString.fromState("invalid")))
+ .setShortTitle(WireComplicationText(DynamicString.from(AppDataKey("valid"))))
+ .setShortText(WireComplicationText(DynamicString.from(AppDataKey("invalid"))))
.build(),
states =
listOf(
mapOf(),
- mapOf("valid" to StateEntryValue.fromString("Valid")),
+ mapOf(
+ AppDataKey<DynamicString>("valid") to DynamicDataValue.fromString("Valid")
+ ),
),
evaluated =
listOf(
@@ -199,16 +233,19 @@
SET_TO_NO_DATA_IF_LAST_STATE_IS_INVALID(
expressed =
WireComplicationData.Builder(TYPE_SHORT_TEXT)
- .setShortTitle(WireComplicationText(DynamicString.fromState("valid")))
- .setShortText(WireComplicationText(DynamicString.fromState("invalid")))
+ .setShortTitle(WireComplicationText(DynamicString.from(AppDataKey("valid"))))
+ .setShortText(WireComplicationText(DynamicString.from(AppDataKey("invalid"))))
.build(),
states =
listOf(
mapOf(
- "valid" to StateEntryValue.fromString("Valid"),
- "invalid" to StateEntryValue.fromString("Valid"),
+ AppDataKey<DynamicString>("valid") to DynamicDataValue.fromString("Valid"),
+ AppDataKey<DynamicString>("invalid") to
+ DynamicDataValue.fromString("Valid"),
),
- mapOf("valid" to StateEntryValue.fromString("Valid")),
+ mapOf(
+ AppDataKey<DynamicString>("valid") to DynamicDataValue.fromString("Valid")
+ ),
),
evaluated =
listOf(
@@ -237,18 +274,18 @@
),
SET_TO_EVALUATED_WITHOUT_PLACEHOLDER_EVEN_IF_PLACEHOLDER_INVALID_IF_NOT_NO_DATA(
expressed =
- WireComplicationData.Builder(TYPE_SHORT_TEXT)
- .setShortText(WireComplicationText("Text"))
- .setPlaceholder(stateData("placeholder"))
- .build(),
- states = listOf(), // placeholder state not set.
- evaluated =
- listOf(
- // No placeholder.
WireComplicationData.Builder(TYPE_SHORT_TEXT)
.setShortText(WireComplicationText("Text"))
+ .setPlaceholder(stateData("placeholder"))
.build(),
- )
+ states = listOf(), // placeholder state not set.
+ evaluated =
+ listOf(
+ // No placeholder.
+ WireComplicationData.Builder(TYPE_SHORT_TEXT)
+ .setShortText(WireComplicationText("Text"))
+ .build(),
+ )
),
}
@@ -269,7 +306,7 @@
)
for (state in scenario.states) {
- stateStore.setStateEntryValues(state)
+ stateStore.setAppStateEntryValues(state)
}
expect
@@ -385,7 +422,7 @@
fun stateData(value: String) =
WireComplicationData.Builder(TYPE_NO_DATA)
- .setLongText(WireComplicationText(DynamicString.fromState(value)))
+ .setLongText(WireComplicationText(DynamicString.from(AppDataKey(value))))
.build()
fun evaluatedData(value: String) =
diff --git a/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/TextTest.kt b/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/TextTest.kt
index 2125d4f..bdb7c92 100644
--- a/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/TextTest.kt
+++ b/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/TextTest.kt
@@ -18,8 +18,8 @@
import android.content.Context
import android.icu.util.TimeZone
-import android.support.wearable.complications.ComplicationText as WireComplicationText
import android.support.wearable.complications.ComplicationText
+import android.support.wearable.complications.ComplicationText as WireComplicationText
import android.support.wearable.complications.ComplicationText.TimeDifferenceBuilder as WireTimeDifferenceBuilder
import android.support.wearable.complications.ComplicationText.TimeFormatBuilder as WireTimeFormatBuilder
import android.support.wearable.complications.TimeFormatText
diff --git a/wear/watchface/watchface-complications-permission-dialogs-sample/build.gradle b/wear/watchface/watchface-complications-permission-dialogs-sample/build.gradle
index 5342fd8..ecf03eb 100644
--- a/wear/watchface/watchface-complications-permission-dialogs-sample/build.gradle
+++ b/wear/watchface/watchface-complications-permission-dialogs-sample/build.gradle
@@ -29,7 +29,7 @@
}
androidx {
- name = "AndroidX Wear Watchface Permission Dialog Samples"
+ name = "Wear Watchface Permission Dialog Samples"
type = LibraryType.SAMPLES
inceptionYear = "2021"
description = "Contains sample code for building Watchface Permission Dialogs"
diff --git a/wear/watchface/watchface-complications/api/current.txt b/wear/watchface/watchface-complications/api/current.txt
index 53d23f2..2ce7f08 100644
--- a/wear/watchface/watchface-complications/api/current.txt
+++ b/wear/watchface/watchface-complications/api/current.txt
@@ -36,10 +36,10 @@
}
public final class ComplicationSlotBounds {
- ctor public ComplicationSlotBounds(java.util.Map<androidx.wear.watchface.complications.data.ComplicationType,? extends android.graphics.RectF> perComplicationTypeBounds, java.util.Map<androidx.wear.watchface.complications.data.ComplicationType,? extends android.graphics.RectF> perComplicationTypeMargins);
- ctor @Deprecated public ComplicationSlotBounds(java.util.Map<androidx.wear.watchface.complications.data.ComplicationType,? extends android.graphics.RectF> perComplicationTypeBounds);
- ctor public ComplicationSlotBounds(android.graphics.RectF bounds, optional android.graphics.RectF margins);
ctor public ComplicationSlotBounds(android.graphics.RectF bounds);
+ ctor public ComplicationSlotBounds(android.graphics.RectF bounds, optional android.graphics.RectF margins);
+ ctor @Deprecated public ComplicationSlotBounds(java.util.Map<androidx.wear.watchface.complications.data.ComplicationType,? extends android.graphics.RectF> perComplicationTypeBounds);
+ ctor public ComplicationSlotBounds(java.util.Map<androidx.wear.watchface.complications.data.ComplicationType,? extends android.graphics.RectF> perComplicationTypeBounds, java.util.Map<androidx.wear.watchface.complications.data.ComplicationType,? extends android.graphics.RectF> perComplicationTypeMargins);
method public java.util.Map<androidx.wear.watchface.complications.data.ComplicationType,android.graphics.RectF> getPerComplicationTypeBounds();
method public java.util.Map<androidx.wear.watchface.complications.data.ComplicationType,android.graphics.RectF> getPerComplicationTypeMargins();
property public final java.util.Map<androidx.wear.watchface.complications.data.ComplicationType,android.graphics.RectF> perComplicationTypeBounds;
@@ -48,12 +48,12 @@
public final class DefaultComplicationDataSourcePolicy {
ctor public DefaultComplicationDataSourcePolicy();
- ctor @Deprecated public DefaultComplicationDataSourcePolicy(int systemProvider);
- ctor public DefaultComplicationDataSourcePolicy(int systemDataSource, androidx.wear.watchface.complications.data.ComplicationType systemDataSourceDefaultType);
- ctor @Deprecated public DefaultComplicationDataSourcePolicy(android.content.ComponentName dataSource, int systemDataSourceFallback);
- ctor public DefaultComplicationDataSourcePolicy(android.content.ComponentName primaryDataSource, androidx.wear.watchface.complications.data.ComplicationType primaryDataSourceDefaultType, int systemDataSourceFallback, androidx.wear.watchface.complications.data.ComplicationType systemDataSourceFallbackDefaultType);
ctor @Deprecated public DefaultComplicationDataSourcePolicy(android.content.ComponentName primaryDataSource, android.content.ComponentName secondaryDataSource, int systemDataSourceFallback);
ctor public DefaultComplicationDataSourcePolicy(android.content.ComponentName primaryDataSource, androidx.wear.watchface.complications.data.ComplicationType primaryDataSourceDefaultType, android.content.ComponentName secondaryDataSource, androidx.wear.watchface.complications.data.ComplicationType secondaryDataSourceDefaultType, int systemDataSourceFallback, androidx.wear.watchface.complications.data.ComplicationType systemDataSourceFallbackDefaultType);
+ ctor public DefaultComplicationDataSourcePolicy(android.content.ComponentName primaryDataSource, androidx.wear.watchface.complications.data.ComplicationType primaryDataSourceDefaultType, int systemDataSourceFallback, androidx.wear.watchface.complications.data.ComplicationType systemDataSourceFallbackDefaultType);
+ ctor @Deprecated public DefaultComplicationDataSourcePolicy(android.content.ComponentName dataSource, int systemDataSourceFallback);
+ ctor @Deprecated public DefaultComplicationDataSourcePolicy(int systemProvider);
+ ctor public DefaultComplicationDataSourcePolicy(int systemDataSource, androidx.wear.watchface.complications.data.ComplicationType systemDataSourceDefaultType);
method public android.content.ComponentName? getPrimaryDataSource();
method public androidx.wear.watchface.complications.data.ComplicationType? getPrimaryDataSourceDefaultType();
method public android.content.ComponentName? getSecondaryDataSource();
diff --git a/wear/watchface/watchface-complications/api/public_plus_experimental_current.txt b/wear/watchface/watchface-complications/api/public_plus_experimental_current.txt
index 53d23f2..2ce7f08 100644
--- a/wear/watchface/watchface-complications/api/public_plus_experimental_current.txt
+++ b/wear/watchface/watchface-complications/api/public_plus_experimental_current.txt
@@ -36,10 +36,10 @@
}
public final class ComplicationSlotBounds {
- ctor public ComplicationSlotBounds(java.util.Map<androidx.wear.watchface.complications.data.ComplicationType,? extends android.graphics.RectF> perComplicationTypeBounds, java.util.Map<androidx.wear.watchface.complications.data.ComplicationType,? extends android.graphics.RectF> perComplicationTypeMargins);
- ctor @Deprecated public ComplicationSlotBounds(java.util.Map<androidx.wear.watchface.complications.data.ComplicationType,? extends android.graphics.RectF> perComplicationTypeBounds);
- ctor public ComplicationSlotBounds(android.graphics.RectF bounds, optional android.graphics.RectF margins);
ctor public ComplicationSlotBounds(android.graphics.RectF bounds);
+ ctor public ComplicationSlotBounds(android.graphics.RectF bounds, optional android.graphics.RectF margins);
+ ctor @Deprecated public ComplicationSlotBounds(java.util.Map<androidx.wear.watchface.complications.data.ComplicationType,? extends android.graphics.RectF> perComplicationTypeBounds);
+ ctor public ComplicationSlotBounds(java.util.Map<androidx.wear.watchface.complications.data.ComplicationType,? extends android.graphics.RectF> perComplicationTypeBounds, java.util.Map<androidx.wear.watchface.complications.data.ComplicationType,? extends android.graphics.RectF> perComplicationTypeMargins);
method public java.util.Map<androidx.wear.watchface.complications.data.ComplicationType,android.graphics.RectF> getPerComplicationTypeBounds();
method public java.util.Map<androidx.wear.watchface.complications.data.ComplicationType,android.graphics.RectF> getPerComplicationTypeMargins();
property public final java.util.Map<androidx.wear.watchface.complications.data.ComplicationType,android.graphics.RectF> perComplicationTypeBounds;
@@ -48,12 +48,12 @@
public final class DefaultComplicationDataSourcePolicy {
ctor public DefaultComplicationDataSourcePolicy();
- ctor @Deprecated public DefaultComplicationDataSourcePolicy(int systemProvider);
- ctor public DefaultComplicationDataSourcePolicy(int systemDataSource, androidx.wear.watchface.complications.data.ComplicationType systemDataSourceDefaultType);
- ctor @Deprecated public DefaultComplicationDataSourcePolicy(android.content.ComponentName dataSource, int systemDataSourceFallback);
- ctor public DefaultComplicationDataSourcePolicy(android.content.ComponentName primaryDataSource, androidx.wear.watchface.complications.data.ComplicationType primaryDataSourceDefaultType, int systemDataSourceFallback, androidx.wear.watchface.complications.data.ComplicationType systemDataSourceFallbackDefaultType);
ctor @Deprecated public DefaultComplicationDataSourcePolicy(android.content.ComponentName primaryDataSource, android.content.ComponentName secondaryDataSource, int systemDataSourceFallback);
ctor public DefaultComplicationDataSourcePolicy(android.content.ComponentName primaryDataSource, androidx.wear.watchface.complications.data.ComplicationType primaryDataSourceDefaultType, android.content.ComponentName secondaryDataSource, androidx.wear.watchface.complications.data.ComplicationType secondaryDataSourceDefaultType, int systemDataSourceFallback, androidx.wear.watchface.complications.data.ComplicationType systemDataSourceFallbackDefaultType);
+ ctor public DefaultComplicationDataSourcePolicy(android.content.ComponentName primaryDataSource, androidx.wear.watchface.complications.data.ComplicationType primaryDataSourceDefaultType, int systemDataSourceFallback, androidx.wear.watchface.complications.data.ComplicationType systemDataSourceFallbackDefaultType);
+ ctor @Deprecated public DefaultComplicationDataSourcePolicy(android.content.ComponentName dataSource, int systemDataSourceFallback);
+ ctor @Deprecated public DefaultComplicationDataSourcePolicy(int systemProvider);
+ ctor public DefaultComplicationDataSourcePolicy(int systemDataSource, androidx.wear.watchface.complications.data.ComplicationType systemDataSourceDefaultType);
method public android.content.ComponentName? getPrimaryDataSource();
method public androidx.wear.watchface.complications.data.ComplicationType? getPrimaryDataSourceDefaultType();
method public android.content.ComponentName? getSecondaryDataSource();
diff --git a/wear/watchface/watchface-complications/api/restricted_current.txt b/wear/watchface/watchface-complications/api/restricted_current.txt
index 53d23f2..2ce7f08 100644
--- a/wear/watchface/watchface-complications/api/restricted_current.txt
+++ b/wear/watchface/watchface-complications/api/restricted_current.txt
@@ -36,10 +36,10 @@
}
public final class ComplicationSlotBounds {
- ctor public ComplicationSlotBounds(java.util.Map<androidx.wear.watchface.complications.data.ComplicationType,? extends android.graphics.RectF> perComplicationTypeBounds, java.util.Map<androidx.wear.watchface.complications.data.ComplicationType,? extends android.graphics.RectF> perComplicationTypeMargins);
- ctor @Deprecated public ComplicationSlotBounds(java.util.Map<androidx.wear.watchface.complications.data.ComplicationType,? extends android.graphics.RectF> perComplicationTypeBounds);
- ctor public ComplicationSlotBounds(android.graphics.RectF bounds, optional android.graphics.RectF margins);
ctor public ComplicationSlotBounds(android.graphics.RectF bounds);
+ ctor public ComplicationSlotBounds(android.graphics.RectF bounds, optional android.graphics.RectF margins);
+ ctor @Deprecated public ComplicationSlotBounds(java.util.Map<androidx.wear.watchface.complications.data.ComplicationType,? extends android.graphics.RectF> perComplicationTypeBounds);
+ ctor public ComplicationSlotBounds(java.util.Map<androidx.wear.watchface.complications.data.ComplicationType,? extends android.graphics.RectF> perComplicationTypeBounds, java.util.Map<androidx.wear.watchface.complications.data.ComplicationType,? extends android.graphics.RectF> perComplicationTypeMargins);
method public java.util.Map<androidx.wear.watchface.complications.data.ComplicationType,android.graphics.RectF> getPerComplicationTypeBounds();
method public java.util.Map<androidx.wear.watchface.complications.data.ComplicationType,android.graphics.RectF> getPerComplicationTypeMargins();
property public final java.util.Map<androidx.wear.watchface.complications.data.ComplicationType,android.graphics.RectF> perComplicationTypeBounds;
@@ -48,12 +48,12 @@
public final class DefaultComplicationDataSourcePolicy {
ctor public DefaultComplicationDataSourcePolicy();
- ctor @Deprecated public DefaultComplicationDataSourcePolicy(int systemProvider);
- ctor public DefaultComplicationDataSourcePolicy(int systemDataSource, androidx.wear.watchface.complications.data.ComplicationType systemDataSourceDefaultType);
- ctor @Deprecated public DefaultComplicationDataSourcePolicy(android.content.ComponentName dataSource, int systemDataSourceFallback);
- ctor public DefaultComplicationDataSourcePolicy(android.content.ComponentName primaryDataSource, androidx.wear.watchface.complications.data.ComplicationType primaryDataSourceDefaultType, int systemDataSourceFallback, androidx.wear.watchface.complications.data.ComplicationType systemDataSourceFallbackDefaultType);
ctor @Deprecated public DefaultComplicationDataSourcePolicy(android.content.ComponentName primaryDataSource, android.content.ComponentName secondaryDataSource, int systemDataSourceFallback);
ctor public DefaultComplicationDataSourcePolicy(android.content.ComponentName primaryDataSource, androidx.wear.watchface.complications.data.ComplicationType primaryDataSourceDefaultType, android.content.ComponentName secondaryDataSource, androidx.wear.watchface.complications.data.ComplicationType secondaryDataSourceDefaultType, int systemDataSourceFallback, androidx.wear.watchface.complications.data.ComplicationType systemDataSourceFallbackDefaultType);
+ ctor public DefaultComplicationDataSourcePolicy(android.content.ComponentName primaryDataSource, androidx.wear.watchface.complications.data.ComplicationType primaryDataSourceDefaultType, int systemDataSourceFallback, androidx.wear.watchface.complications.data.ComplicationType systemDataSourceFallbackDefaultType);
+ ctor @Deprecated public DefaultComplicationDataSourcePolicy(android.content.ComponentName dataSource, int systemDataSourceFallback);
+ ctor @Deprecated public DefaultComplicationDataSourcePolicy(int systemProvider);
+ ctor public DefaultComplicationDataSourcePolicy(int systemDataSource, androidx.wear.watchface.complications.data.ComplicationType systemDataSourceDefaultType);
method public android.content.ComponentName? getPrimaryDataSource();
method public androidx.wear.watchface.complications.data.ComplicationType? getPrimaryDataSourceDefaultType();
method public android.content.ComponentName? getSecondaryDataSource();
diff --git a/wear/watchface/watchface-editor-guava/build.gradle b/wear/watchface/watchface-editor-guava/build.gradle
index c8cb24c..933c2fc 100644
--- a/wear/watchface/watchface-editor-guava/build.gradle
+++ b/wear/watchface/watchface-editor-guava/build.gradle
@@ -38,7 +38,7 @@
}
androidx {
- name = "Android Wear Watchface Client Editor"
+ name = "Android Wear Watchface Editor Guava Integration"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2021"
description = "Guava wrappers for the Androidx Wear Watchface Editor library"
diff --git a/wear/watchface/watchface-editor/api/current.txt b/wear/watchface/watchface-editor/api/current.txt
index 6a24f7f..42feecd 100644
--- a/wear/watchface/watchface-editor/api/current.txt
+++ b/wear/watchface/watchface-editor/api/current.txt
@@ -12,8 +12,8 @@
}
public final class EditorRequest {
- ctor @RequiresApi(android.os.Build.VERSION_CODES.R) public EditorRequest(android.content.ComponentName watchFaceComponentName, String editorPackageName, androidx.wear.watchface.style.UserStyleData? initialUserStyle, @RequiresApi(android.os.Build.VERSION_CODES.R) androidx.wear.watchface.client.WatchFaceId watchFaceId, androidx.wear.watchface.client.DeviceConfig? headlessDeviceConfig, androidx.wear.watchface.editor.PreviewScreenshotParams? previewScreenshotParams);
ctor public EditorRequest(android.content.ComponentName watchFaceComponentName, String editorPackageName, androidx.wear.watchface.style.UserStyleData? initialUserStyle);
+ ctor @RequiresApi(android.os.Build.VERSION_CODES.R) public EditorRequest(android.content.ComponentName watchFaceComponentName, String editorPackageName, androidx.wear.watchface.style.UserStyleData? initialUserStyle, @RequiresApi(android.os.Build.VERSION_CODES.R) androidx.wear.watchface.client.WatchFaceId watchFaceId, androidx.wear.watchface.client.DeviceConfig? headlessDeviceConfig, androidx.wear.watchface.editor.PreviewScreenshotParams? previewScreenshotParams);
method @kotlin.jvm.Throws(exceptionClasses=TimeoutCancellationException::class) public static androidx.wear.watchface.editor.EditorRequest createFromIntent(android.content.Intent intent) throws kotlinx.coroutines.TimeoutCancellationException;
method public String getEditorPackageName();
method public androidx.wear.watchface.client.DeviceConfig? getHeadlessDeviceConfig();
diff --git a/wear/watchface/watchface-editor/api/public_plus_experimental_current.txt b/wear/watchface/watchface-editor/api/public_plus_experimental_current.txt
index 6a24f7f..42feecd 100644
--- a/wear/watchface/watchface-editor/api/public_plus_experimental_current.txt
+++ b/wear/watchface/watchface-editor/api/public_plus_experimental_current.txt
@@ -12,8 +12,8 @@
}
public final class EditorRequest {
- ctor @RequiresApi(android.os.Build.VERSION_CODES.R) public EditorRequest(android.content.ComponentName watchFaceComponentName, String editorPackageName, androidx.wear.watchface.style.UserStyleData? initialUserStyle, @RequiresApi(android.os.Build.VERSION_CODES.R) androidx.wear.watchface.client.WatchFaceId watchFaceId, androidx.wear.watchface.client.DeviceConfig? headlessDeviceConfig, androidx.wear.watchface.editor.PreviewScreenshotParams? previewScreenshotParams);
ctor public EditorRequest(android.content.ComponentName watchFaceComponentName, String editorPackageName, androidx.wear.watchface.style.UserStyleData? initialUserStyle);
+ ctor @RequiresApi(android.os.Build.VERSION_CODES.R) public EditorRequest(android.content.ComponentName watchFaceComponentName, String editorPackageName, androidx.wear.watchface.style.UserStyleData? initialUserStyle, @RequiresApi(android.os.Build.VERSION_CODES.R) androidx.wear.watchface.client.WatchFaceId watchFaceId, androidx.wear.watchface.client.DeviceConfig? headlessDeviceConfig, androidx.wear.watchface.editor.PreviewScreenshotParams? previewScreenshotParams);
method @kotlin.jvm.Throws(exceptionClasses=TimeoutCancellationException::class) public static androidx.wear.watchface.editor.EditorRequest createFromIntent(android.content.Intent intent) throws kotlinx.coroutines.TimeoutCancellationException;
method public String getEditorPackageName();
method public androidx.wear.watchface.client.DeviceConfig? getHeadlessDeviceConfig();
diff --git a/wear/watchface/watchface-editor/api/restricted_current.txt b/wear/watchface/watchface-editor/api/restricted_current.txt
index 6a24f7f..42feecd 100644
--- a/wear/watchface/watchface-editor/api/restricted_current.txt
+++ b/wear/watchface/watchface-editor/api/restricted_current.txt
@@ -12,8 +12,8 @@
}
public final class EditorRequest {
- ctor @RequiresApi(android.os.Build.VERSION_CODES.R) public EditorRequest(android.content.ComponentName watchFaceComponentName, String editorPackageName, androidx.wear.watchface.style.UserStyleData? initialUserStyle, @RequiresApi(android.os.Build.VERSION_CODES.R) androidx.wear.watchface.client.WatchFaceId watchFaceId, androidx.wear.watchface.client.DeviceConfig? headlessDeviceConfig, androidx.wear.watchface.editor.PreviewScreenshotParams? previewScreenshotParams);
ctor public EditorRequest(android.content.ComponentName watchFaceComponentName, String editorPackageName, androidx.wear.watchface.style.UserStyleData? initialUserStyle);
+ ctor @RequiresApi(android.os.Build.VERSION_CODES.R) public EditorRequest(android.content.ComponentName watchFaceComponentName, String editorPackageName, androidx.wear.watchface.style.UserStyleData? initialUserStyle, @RequiresApi(android.os.Build.VERSION_CODES.R) androidx.wear.watchface.client.WatchFaceId watchFaceId, androidx.wear.watchface.client.DeviceConfig? headlessDeviceConfig, androidx.wear.watchface.editor.PreviewScreenshotParams? previewScreenshotParams);
method @kotlin.jvm.Throws(exceptionClasses=TimeoutCancellationException::class) public static androidx.wear.watchface.editor.EditorRequest createFromIntent(android.content.Intent intent) throws kotlinx.coroutines.TimeoutCancellationException;
method public String getEditorPackageName();
method public androidx.wear.watchface.client.DeviceConfig? getHeadlessDeviceConfig();
diff --git a/wear/watchface/watchface-editor/samples/build.gradle b/wear/watchface/watchface-editor/samples/build.gradle
index 85c5449..4fa0e56 100644
--- a/wear/watchface/watchface-editor/samples/build.gradle
+++ b/wear/watchface/watchface-editor/samples/build.gradle
@@ -32,7 +32,7 @@
}
androidx {
- name = "AndroidX Wear Editor Samples"
+ name = "Wear Editor Samples"
type = LibraryType.SAMPLES
inceptionYear = "2020"
description = "Contains sample code for the Androidx Wear Editor library"
diff --git a/wear/watchface/watchface-guava/api/current.txt b/wear/watchface/watchface-guava/api/current.txt
index 54f29fe..2460e8b2 100644
--- a/wear/watchface/watchface-guava/api/current.txt
+++ b/wear/watchface/watchface-guava/api/current.txt
@@ -2,15 +2,15 @@
package androidx.wear.watchface {
@Deprecated public abstract class ListenableCanvasRenderer extends androidx.wear.watchface.Renderer.CanvasRenderer {
- ctor @Deprecated public ListenableCanvasRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, int canvasType, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional boolean clearWithBackgroundTintBeforeRenderingHighlightLayer);
ctor @Deprecated public ListenableCanvasRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, int canvasType, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis);
+ ctor @Deprecated public ListenableCanvasRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, int canvasType, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional boolean clearWithBackgroundTintBeforeRenderingHighlightLayer);
method @Deprecated public suspend Object? init(kotlin.coroutines.Continuation<? super kotlin.Unit>);
method @Deprecated @UiThread public com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> initFuture();
}
public abstract class ListenableCanvasRenderer2<SharedAssetsT extends androidx.wear.watchface.Renderer.SharedAssets> extends androidx.wear.watchface.Renderer.CanvasRenderer2<SharedAssetsT> {
- ctor public ListenableCanvasRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, int canvasType, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional boolean clearWithBackgroundTintBeforeRenderingHighlightLayer);
ctor public ListenableCanvasRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, int canvasType, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis);
+ ctor public ListenableCanvasRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, int canvasType, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional boolean clearWithBackgroundTintBeforeRenderingHighlightLayer);
method protected final suspend Object? createSharedAssets(kotlin.coroutines.Continuation<? super SharedAssetsT>);
method @WorkerThread public abstract com.google.common.util.concurrent.ListenableFuture<SharedAssetsT> createSharedAssetsFuture();
method public final suspend Object? init(kotlin.coroutines.Continuation<? super kotlin.Unit>);
@@ -18,9 +18,9 @@
}
@Deprecated public abstract class ListenableGlesRenderer extends androidx.wear.watchface.Renderer.GlesRenderer {
- ctor @Deprecated @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public ListenableGlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
- ctor @Deprecated @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public ListenableGlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
ctor @Deprecated @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public ListenableGlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
+ ctor @Deprecated @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public ListenableGlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
+ ctor @Deprecated @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public ListenableGlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
method @Deprecated public suspend Object? onBackgroundThreadGlContextCreated(kotlin.coroutines.Continuation<? super kotlin.Unit>);
method @Deprecated protected com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> onBackgroundThreadGlContextCreatedFuture();
method @Deprecated public suspend Object? onUiThreadGlSurfaceCreated(@Px int width, @Px int height, kotlin.coroutines.Continuation<? super kotlin.Unit>);
@@ -30,9 +30,9 @@
}
public abstract class ListenableGlesRenderer2<SharedAssetsT extends androidx.wear.watchface.Renderer.SharedAssets> extends androidx.wear.watchface.Renderer.GlesRenderer2<SharedAssetsT> {
- ctor @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public ListenableGlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
- ctor @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public ListenableGlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
ctor @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public ListenableGlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
+ ctor @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public ListenableGlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
+ ctor @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public ListenableGlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
method protected final suspend Object? createSharedAssets(kotlin.coroutines.Continuation<? super SharedAssetsT>);
method @WorkerThread public abstract com.google.common.util.concurrent.ListenableFuture<SharedAssetsT> createSharedAssetsFuture();
method public final suspend Object? onBackgroundThreadGlContextCreated(kotlin.coroutines.Continuation<? super kotlin.Unit>);
diff --git a/wear/watchface/watchface-guava/api/public_plus_experimental_current.txt b/wear/watchface/watchface-guava/api/public_plus_experimental_current.txt
index 54f29fe..2460e8b2 100644
--- a/wear/watchface/watchface-guava/api/public_plus_experimental_current.txt
+++ b/wear/watchface/watchface-guava/api/public_plus_experimental_current.txt
@@ -2,15 +2,15 @@
package androidx.wear.watchface {
@Deprecated public abstract class ListenableCanvasRenderer extends androidx.wear.watchface.Renderer.CanvasRenderer {
- ctor @Deprecated public ListenableCanvasRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, int canvasType, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional boolean clearWithBackgroundTintBeforeRenderingHighlightLayer);
ctor @Deprecated public ListenableCanvasRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, int canvasType, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis);
+ ctor @Deprecated public ListenableCanvasRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, int canvasType, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional boolean clearWithBackgroundTintBeforeRenderingHighlightLayer);
method @Deprecated public suspend Object? init(kotlin.coroutines.Continuation<? super kotlin.Unit>);
method @Deprecated @UiThread public com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> initFuture();
}
public abstract class ListenableCanvasRenderer2<SharedAssetsT extends androidx.wear.watchface.Renderer.SharedAssets> extends androidx.wear.watchface.Renderer.CanvasRenderer2<SharedAssetsT> {
- ctor public ListenableCanvasRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, int canvasType, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional boolean clearWithBackgroundTintBeforeRenderingHighlightLayer);
ctor public ListenableCanvasRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, int canvasType, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis);
+ ctor public ListenableCanvasRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, int canvasType, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional boolean clearWithBackgroundTintBeforeRenderingHighlightLayer);
method protected final suspend Object? createSharedAssets(kotlin.coroutines.Continuation<? super SharedAssetsT>);
method @WorkerThread public abstract com.google.common.util.concurrent.ListenableFuture<SharedAssetsT> createSharedAssetsFuture();
method public final suspend Object? init(kotlin.coroutines.Continuation<? super kotlin.Unit>);
@@ -18,9 +18,9 @@
}
@Deprecated public abstract class ListenableGlesRenderer extends androidx.wear.watchface.Renderer.GlesRenderer {
- ctor @Deprecated @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public ListenableGlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
- ctor @Deprecated @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public ListenableGlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
ctor @Deprecated @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public ListenableGlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
+ ctor @Deprecated @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public ListenableGlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
+ ctor @Deprecated @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public ListenableGlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
method @Deprecated public suspend Object? onBackgroundThreadGlContextCreated(kotlin.coroutines.Continuation<? super kotlin.Unit>);
method @Deprecated protected com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> onBackgroundThreadGlContextCreatedFuture();
method @Deprecated public suspend Object? onUiThreadGlSurfaceCreated(@Px int width, @Px int height, kotlin.coroutines.Continuation<? super kotlin.Unit>);
@@ -30,9 +30,9 @@
}
public abstract class ListenableGlesRenderer2<SharedAssetsT extends androidx.wear.watchface.Renderer.SharedAssets> extends androidx.wear.watchface.Renderer.GlesRenderer2<SharedAssetsT> {
- ctor @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public ListenableGlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
- ctor @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public ListenableGlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
ctor @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public ListenableGlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
+ ctor @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public ListenableGlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
+ ctor @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public ListenableGlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
method protected final suspend Object? createSharedAssets(kotlin.coroutines.Continuation<? super SharedAssetsT>);
method @WorkerThread public abstract com.google.common.util.concurrent.ListenableFuture<SharedAssetsT> createSharedAssetsFuture();
method public final suspend Object? onBackgroundThreadGlContextCreated(kotlin.coroutines.Continuation<? super kotlin.Unit>);
diff --git a/wear/watchface/watchface-guava/api/restricted_current.txt b/wear/watchface/watchface-guava/api/restricted_current.txt
index 54f29fe..2460e8b2 100644
--- a/wear/watchface/watchface-guava/api/restricted_current.txt
+++ b/wear/watchface/watchface-guava/api/restricted_current.txt
@@ -2,15 +2,15 @@
package androidx.wear.watchface {
@Deprecated public abstract class ListenableCanvasRenderer extends androidx.wear.watchface.Renderer.CanvasRenderer {
- ctor @Deprecated public ListenableCanvasRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, int canvasType, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional boolean clearWithBackgroundTintBeforeRenderingHighlightLayer);
ctor @Deprecated public ListenableCanvasRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, int canvasType, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis);
+ ctor @Deprecated public ListenableCanvasRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, int canvasType, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional boolean clearWithBackgroundTintBeforeRenderingHighlightLayer);
method @Deprecated public suspend Object? init(kotlin.coroutines.Continuation<? super kotlin.Unit>);
method @Deprecated @UiThread public com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> initFuture();
}
public abstract class ListenableCanvasRenderer2<SharedAssetsT extends androidx.wear.watchface.Renderer.SharedAssets> extends androidx.wear.watchface.Renderer.CanvasRenderer2<SharedAssetsT> {
- ctor public ListenableCanvasRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, int canvasType, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional boolean clearWithBackgroundTintBeforeRenderingHighlightLayer);
ctor public ListenableCanvasRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, int canvasType, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis);
+ ctor public ListenableCanvasRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, int canvasType, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional boolean clearWithBackgroundTintBeforeRenderingHighlightLayer);
method protected final suspend Object? createSharedAssets(kotlin.coroutines.Continuation<? super SharedAssetsT>);
method @WorkerThread public abstract com.google.common.util.concurrent.ListenableFuture<SharedAssetsT> createSharedAssetsFuture();
method public final suspend Object? init(kotlin.coroutines.Continuation<? super kotlin.Unit>);
@@ -18,9 +18,9 @@
}
@Deprecated public abstract class ListenableGlesRenderer extends androidx.wear.watchface.Renderer.GlesRenderer {
- ctor @Deprecated @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public ListenableGlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
- ctor @Deprecated @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public ListenableGlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
ctor @Deprecated @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public ListenableGlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
+ ctor @Deprecated @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public ListenableGlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
+ ctor @Deprecated @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public ListenableGlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
method @Deprecated public suspend Object? onBackgroundThreadGlContextCreated(kotlin.coroutines.Continuation<? super kotlin.Unit>);
method @Deprecated protected com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> onBackgroundThreadGlContextCreatedFuture();
method @Deprecated public suspend Object? onUiThreadGlSurfaceCreated(@Px int width, @Px int height, kotlin.coroutines.Continuation<? super kotlin.Unit>);
@@ -30,9 +30,9 @@
}
public abstract class ListenableGlesRenderer2<SharedAssetsT extends androidx.wear.watchface.Renderer.SharedAssets> extends androidx.wear.watchface.Renderer.GlesRenderer2<SharedAssetsT> {
- ctor @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public ListenableGlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
- ctor @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public ListenableGlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
ctor @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public ListenableGlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
+ ctor @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public ListenableGlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
+ ctor @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public ListenableGlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
method protected final suspend Object? createSharedAssets(kotlin.coroutines.Continuation<? super SharedAssetsT>);
method @WorkerThread public abstract com.google.common.util.concurrent.ListenableFuture<SharedAssetsT> createSharedAssetsFuture();
method public final suspend Object? onBackgroundThreadGlContextCreated(kotlin.coroutines.Continuation<? super kotlin.Unit>);
diff --git a/wear/watchface/watchface-guava/build.gradle b/wear/watchface/watchface-guava/build.gradle
index 6571f63..c72486d 100644
--- a/wear/watchface/watchface-guava/build.gradle
+++ b/wear/watchface/watchface-guava/build.gradle
@@ -45,7 +45,7 @@
}
androidx {
- name = "AndroidX Wear Watchface Guava"
+ name = "Android Wear Watchface Guava Integration"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2021"
description = "Guava wrappers for the Androidx Wear Watchface library"
diff --git a/wear/watchface/watchface-samples-minimal-complications/build.gradle b/wear/watchface/watchface-samples-minimal-complications/build.gradle
index ce74910..eb6c3db 100644
--- a/wear/watchface/watchface-samples-minimal-complications/build.gradle
+++ b/wear/watchface/watchface-samples-minimal-complications/build.gradle
@@ -35,7 +35,7 @@
}
androidx {
- name = "AndroidX Wear Watchface Minimal Complications Sample"
+ name = "Wear Watchface Minimal Complications Sample"
type = LibraryType.SAMPLES
inceptionYear = "2021"
description = "Contains the sample code for the Androidx Wear Watchface library"
diff --git a/wear/watchface/watchface-samples-minimal-instances/build.gradle b/wear/watchface/watchface-samples-minimal-instances/build.gradle
index 9fd911c..cefa848 100644
--- a/wear/watchface/watchface-samples-minimal-instances/build.gradle
+++ b/wear/watchface/watchface-samples-minimal-instances/build.gradle
@@ -34,7 +34,7 @@
}
androidx {
- name = "AndroidX Wear Watchface Minimal Style Sample"
+ name = "Wear Watchface Minimal Style Sample"
type = LibraryType.SAMPLES
inceptionYear = "2021"
description = "Contains the sample code for the Androidx Wear Watchface library"
diff --git a/wear/watchface/watchface-samples-minimal-style/build.gradle b/wear/watchface/watchface-samples-minimal-style/build.gradle
index 3931645..76d81e8 100644
--- a/wear/watchface/watchface-samples-minimal-style/build.gradle
+++ b/wear/watchface/watchface-samples-minimal-style/build.gradle
@@ -32,7 +32,7 @@
}
androidx {
- name = "AndroidX Wear Watchface Minimal Style Sample"
+ name = "Wear Watchface Minimal Style Sample"
type = LibraryType.SAMPLES
inceptionYear = "2021"
description = "Contains the sample code for the Androidx Wear Watchface library"
diff --git a/wear/watchface/watchface-style/api/current.txt b/wear/watchface/watchface-style/api/current.txt
index fb68cef..bc864ab 100644
--- a/wear/watchface/watchface-style/api/current.txt
+++ b/wear/watchface/watchface-style/api/current.txt
@@ -15,8 +15,8 @@
method public int getSize();
method public java.util.Iterator<java.util.Map.Entry<androidx.wear.watchface.style.UserStyleSetting,androidx.wear.watchface.style.UserStyleSetting.Option>> iterator();
method public operator void set(androidx.wear.watchface.style.UserStyleSetting setting, androidx.wear.watchface.style.UserStyleSetting.Option option);
- method public operator void set(androidx.wear.watchface.style.UserStyleSetting.Id settingId, androidx.wear.watchface.style.UserStyleSetting.Option option);
method public operator void set(androidx.wear.watchface.style.UserStyleSetting setting, androidx.wear.watchface.style.UserStyleSetting.Option.Id optionId);
+ method public operator void set(androidx.wear.watchface.style.UserStyleSetting.Id settingId, androidx.wear.watchface.style.UserStyleSetting.Option option);
method public operator void set(androidx.wear.watchface.style.UserStyleSetting.Id settingId, androidx.wear.watchface.style.UserStyleSetting.Option.Id optionId);
method public androidx.wear.watchface.style.UserStyle toUserStyle();
property public final int size;
@@ -24,8 +24,8 @@
public final class UserStyle implements kotlin.jvm.internal.markers.KMappedMarker java.util.Map<androidx.wear.watchface.style.UserStyleSetting,androidx.wear.watchface.style.UserStyleSetting.Option> {
ctor public UserStyle(androidx.wear.watchface.style.UserStyle userStyle);
- ctor public UserStyle(java.util.Map<androidx.wear.watchface.style.UserStyleSetting,? extends androidx.wear.watchface.style.UserStyleSetting.Option> selectedOptions);
ctor public UserStyle(androidx.wear.watchface.style.UserStyleData userStyle, androidx.wear.watchface.style.UserStyleSchema styleSchema);
+ ctor public UserStyle(java.util.Map<androidx.wear.watchface.style.UserStyleSetting,? extends androidx.wear.watchface.style.UserStyleSetting.Option> selectedOptions);
method public boolean containsKey(androidx.wear.watchface.style.UserStyleSetting key);
method public boolean containsValue(androidx.wear.watchface.style.UserStyleSetting.Option value);
method public operator androidx.wear.watchface.style.UserStyleSetting.Option? get(androidx.wear.watchface.style.UserStyleSetting key);
@@ -50,8 +50,8 @@
}
public final class UserStyleFlavor {
- ctor public UserStyleFlavor(String id, androidx.wear.watchface.style.UserStyleData style, java.util.Map<java.lang.Integer,androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy> complications);
ctor public UserStyleFlavor(String id, androidx.wear.watchface.style.UserStyle style, java.util.Map<java.lang.Integer,androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy> complications);
+ ctor public UserStyleFlavor(String id, androidx.wear.watchface.style.UserStyleData style, java.util.Map<java.lang.Integer,androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy> complications);
method public java.util.Map<java.lang.Integer,androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy> getComplications();
method public String getId();
method public androidx.wear.watchface.style.UserStyleData getStyle();
@@ -61,8 +61,8 @@
}
public final class UserStyleFlavors {
- ctor public UserStyleFlavors(java.util.List<androidx.wear.watchface.style.UserStyleFlavor> flavors);
ctor public UserStyleFlavors();
+ ctor public UserStyleFlavors(java.util.List<androidx.wear.watchface.style.UserStyleFlavor> flavors);
method public java.util.List<androidx.wear.watchface.style.UserStyleFlavor> getFlavors();
property public final java.util.List<androidx.wear.watchface.style.UserStyleFlavor> flavors;
}
@@ -102,8 +102,8 @@
}
public static final class UserStyleSetting.BooleanUserStyleSetting extends androidx.wear.watchface.style.UserStyleSetting {
- ctor public UserStyleSetting.BooleanUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, boolean defaultValue, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
ctor public UserStyleSetting.BooleanUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, boolean defaultValue);
+ ctor public UserStyleSetting.BooleanUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, boolean defaultValue, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
method public boolean getDefaultValue();
}
@@ -124,14 +124,14 @@
}
public static final class UserStyleSetting.ComplicationSlotsUserStyleSetting extends androidx.wear.watchface.style.UserStyleSetting {
- ctor public UserStyleSetting.ComplicationSlotsUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption> complicationConfig, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, optional androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption defaultOption, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
- ctor public UserStyleSetting.ComplicationSlotsUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption> complicationConfig, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, optional androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption defaultOption);
ctor public UserStyleSetting.ComplicationSlotsUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption> complicationConfig, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers);
+ ctor public UserStyleSetting.ComplicationSlotsUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption> complicationConfig, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, optional androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption defaultOption);
+ ctor public UserStyleSetting.ComplicationSlotsUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption> complicationConfig, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, optional androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption defaultOption, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
}
public static final class UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay {
- ctor public UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay(int complicationSlotId, optional Boolean? enabled, optional androidx.wear.watchface.complications.ComplicationSlotBounds? complicationSlotBounds, optional Integer? accessibilityTraversalIndex, optional Integer? nameResourceId, optional Integer? screenReaderNameResourceId);
ctor @Deprecated public UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay(int complicationSlotId, optional Boolean? enabled, optional androidx.wear.watchface.complications.ComplicationSlotBounds? complicationSlotBounds, optional Integer? accessibilityTraversalIndex);
+ ctor public UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay(int complicationSlotId, optional Boolean? enabled, optional androidx.wear.watchface.complications.ComplicationSlotBounds? complicationSlotBounds, optional Integer? accessibilityTraversalIndex, optional Integer? nameResourceId, optional Integer? screenReaderNameResourceId);
method public Integer? getAccessibilityTraversalIndex();
method public androidx.wear.watchface.complications.ComplicationSlotBounds? getComplicationSlotBounds();
method public int getComplicationSlotId();
@@ -157,10 +157,10 @@
}
public static final class UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption extends androidx.wear.watchface.style.UserStyleSetting.Option {
- ctor @Deprecated public UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, android.graphics.drawable.Icon? icon, java.util.Collection<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay> complicationSlotOverlays, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
ctor @Deprecated public UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, android.graphics.drawable.Icon? icon, java.util.Collection<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay> complicationSlotOverlays);
- ctor public UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int screenReaderNameResourceId, android.graphics.drawable.Icon? icon, java.util.Collection<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay> complicationSlotOverlays, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
+ ctor @Deprecated public UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, android.graphics.drawable.Icon? icon, java.util.Collection<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay> complicationSlotOverlays, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
ctor public UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int screenReaderNameResourceId, android.graphics.drawable.Icon? icon, java.util.Collection<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay> complicationSlotOverlays);
+ ctor public UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int screenReaderNameResourceId, android.graphics.drawable.Icon? icon, java.util.Collection<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay> complicationSlotOverlays, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
method public java.util.Collection<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay> getComplicationSlotOverlays();
method public CharSequence getDisplayName();
method public android.graphics.drawable.Icon? getIcon();
@@ -184,8 +184,8 @@
}
public static final class UserStyleSetting.DoubleRangeUserStyleSetting extends androidx.wear.watchface.style.UserStyleSetting {
- ctor public UserStyleSetting.DoubleRangeUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, double minimumValue, double maximumValue, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, double defaultValue, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
ctor public UserStyleSetting.DoubleRangeUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, double minimumValue, double maximumValue, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, double defaultValue);
+ ctor public UserStyleSetting.DoubleRangeUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, double minimumValue, double maximumValue, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, double defaultValue, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
method public double getDefaultValue();
method public double getMaximumValue();
method public double getMinimumValue();
@@ -227,18 +227,18 @@
}
public static class UserStyleSetting.ListUserStyleSetting extends androidx.wear.watchface.style.UserStyleSetting {
- ctor public UserStyleSetting.ListUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption> options, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, optional androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption defaultOption, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
- ctor public UserStyleSetting.ListUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption> options, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, optional androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption defaultOption);
ctor public UserStyleSetting.ListUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption> options, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers);
+ ctor public UserStyleSetting.ListUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption> options, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, optional androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption defaultOption);
+ ctor public UserStyleSetting.ListUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption> options, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, optional androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption defaultOption, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
}
public static final class UserStyleSetting.ListUserStyleSetting.ListOption extends androidx.wear.watchface.style.UserStyleSetting.Option {
- ctor @Deprecated public UserStyleSetting.ListUserStyleSetting.ListOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, android.graphics.drawable.Icon? icon, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
ctor @Deprecated public UserStyleSetting.ListUserStyleSetting.ListOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, android.graphics.drawable.Icon? icon);
+ ctor @Deprecated public UserStyleSetting.ListUserStyleSetting.ListOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, android.graphics.drawable.Icon? icon, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
ctor @Deprecated public UserStyleSetting.ListUserStyleSetting.ListOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, android.graphics.drawable.Icon? icon, optional java.util.Collection<? extends androidx.wear.watchface.style.UserStyleSetting> childSettings, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
- ctor public UserStyleSetting.ListUserStyleSetting.ListOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int screenReaderNameResourceId, android.graphics.drawable.Icon? icon, optional java.util.Collection<? extends androidx.wear.watchface.style.UserStyleSetting> childSettings, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
- ctor public UserStyleSetting.ListUserStyleSetting.ListOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int screenReaderNameResourceId, android.graphics.drawable.Icon? icon, optional java.util.Collection<? extends androidx.wear.watchface.style.UserStyleSetting> childSettings);
ctor public UserStyleSetting.ListUserStyleSetting.ListOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int screenReaderNameResourceId, android.graphics.drawable.Icon? icon);
+ ctor public UserStyleSetting.ListUserStyleSetting.ListOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int screenReaderNameResourceId, android.graphics.drawable.Icon? icon, optional java.util.Collection<? extends androidx.wear.watchface.style.UserStyleSetting> childSettings);
+ ctor public UserStyleSetting.ListUserStyleSetting.ListOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int screenReaderNameResourceId, android.graphics.drawable.Icon? icon, optional java.util.Collection<? extends androidx.wear.watchface.style.UserStyleSetting> childSettings, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
method public CharSequence getDisplayName();
method public android.graphics.drawable.Icon? getIcon();
method public CharSequence? getScreenReaderName();
@@ -250,8 +250,8 @@
}
public static final class UserStyleSetting.LongRangeUserStyleSetting extends androidx.wear.watchface.style.UserStyleSetting {
- ctor public UserStyleSetting.LongRangeUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, long minimumValue, long maximumValue, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, long defaultValue, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
ctor public UserStyleSetting.LongRangeUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, long minimumValue, long maximumValue, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, long defaultValue);
+ ctor public UserStyleSetting.LongRangeUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, long minimumValue, long maximumValue, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, long defaultValue, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
method public long getDefaultValue();
method public long getMaximumValue();
method public long getMinimumValue();
diff --git a/wear/watchface/watchface-style/api/public_plus_experimental_current.txt b/wear/watchface/watchface-style/api/public_plus_experimental_current.txt
index fb68cef..bc864ab 100644
--- a/wear/watchface/watchface-style/api/public_plus_experimental_current.txt
+++ b/wear/watchface/watchface-style/api/public_plus_experimental_current.txt
@@ -15,8 +15,8 @@
method public int getSize();
method public java.util.Iterator<java.util.Map.Entry<androidx.wear.watchface.style.UserStyleSetting,androidx.wear.watchface.style.UserStyleSetting.Option>> iterator();
method public operator void set(androidx.wear.watchface.style.UserStyleSetting setting, androidx.wear.watchface.style.UserStyleSetting.Option option);
- method public operator void set(androidx.wear.watchface.style.UserStyleSetting.Id settingId, androidx.wear.watchface.style.UserStyleSetting.Option option);
method public operator void set(androidx.wear.watchface.style.UserStyleSetting setting, androidx.wear.watchface.style.UserStyleSetting.Option.Id optionId);
+ method public operator void set(androidx.wear.watchface.style.UserStyleSetting.Id settingId, androidx.wear.watchface.style.UserStyleSetting.Option option);
method public operator void set(androidx.wear.watchface.style.UserStyleSetting.Id settingId, androidx.wear.watchface.style.UserStyleSetting.Option.Id optionId);
method public androidx.wear.watchface.style.UserStyle toUserStyle();
property public final int size;
@@ -24,8 +24,8 @@
public final class UserStyle implements kotlin.jvm.internal.markers.KMappedMarker java.util.Map<androidx.wear.watchface.style.UserStyleSetting,androidx.wear.watchface.style.UserStyleSetting.Option> {
ctor public UserStyle(androidx.wear.watchface.style.UserStyle userStyle);
- ctor public UserStyle(java.util.Map<androidx.wear.watchface.style.UserStyleSetting,? extends androidx.wear.watchface.style.UserStyleSetting.Option> selectedOptions);
ctor public UserStyle(androidx.wear.watchface.style.UserStyleData userStyle, androidx.wear.watchface.style.UserStyleSchema styleSchema);
+ ctor public UserStyle(java.util.Map<androidx.wear.watchface.style.UserStyleSetting,? extends androidx.wear.watchface.style.UserStyleSetting.Option> selectedOptions);
method public boolean containsKey(androidx.wear.watchface.style.UserStyleSetting key);
method public boolean containsValue(androidx.wear.watchface.style.UserStyleSetting.Option value);
method public operator androidx.wear.watchface.style.UserStyleSetting.Option? get(androidx.wear.watchface.style.UserStyleSetting key);
@@ -50,8 +50,8 @@
}
public final class UserStyleFlavor {
- ctor public UserStyleFlavor(String id, androidx.wear.watchface.style.UserStyleData style, java.util.Map<java.lang.Integer,androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy> complications);
ctor public UserStyleFlavor(String id, androidx.wear.watchface.style.UserStyle style, java.util.Map<java.lang.Integer,androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy> complications);
+ ctor public UserStyleFlavor(String id, androidx.wear.watchface.style.UserStyleData style, java.util.Map<java.lang.Integer,androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy> complications);
method public java.util.Map<java.lang.Integer,androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy> getComplications();
method public String getId();
method public androidx.wear.watchface.style.UserStyleData getStyle();
@@ -61,8 +61,8 @@
}
public final class UserStyleFlavors {
- ctor public UserStyleFlavors(java.util.List<androidx.wear.watchface.style.UserStyleFlavor> flavors);
ctor public UserStyleFlavors();
+ ctor public UserStyleFlavors(java.util.List<androidx.wear.watchface.style.UserStyleFlavor> flavors);
method public java.util.List<androidx.wear.watchface.style.UserStyleFlavor> getFlavors();
property public final java.util.List<androidx.wear.watchface.style.UserStyleFlavor> flavors;
}
@@ -102,8 +102,8 @@
}
public static final class UserStyleSetting.BooleanUserStyleSetting extends androidx.wear.watchface.style.UserStyleSetting {
- ctor public UserStyleSetting.BooleanUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, boolean defaultValue, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
ctor public UserStyleSetting.BooleanUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, boolean defaultValue);
+ ctor public UserStyleSetting.BooleanUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, boolean defaultValue, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
method public boolean getDefaultValue();
}
@@ -124,14 +124,14 @@
}
public static final class UserStyleSetting.ComplicationSlotsUserStyleSetting extends androidx.wear.watchface.style.UserStyleSetting {
- ctor public UserStyleSetting.ComplicationSlotsUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption> complicationConfig, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, optional androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption defaultOption, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
- ctor public UserStyleSetting.ComplicationSlotsUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption> complicationConfig, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, optional androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption defaultOption);
ctor public UserStyleSetting.ComplicationSlotsUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption> complicationConfig, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers);
+ ctor public UserStyleSetting.ComplicationSlotsUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption> complicationConfig, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, optional androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption defaultOption);
+ ctor public UserStyleSetting.ComplicationSlotsUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption> complicationConfig, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, optional androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption defaultOption, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
}
public static final class UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay {
- ctor public UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay(int complicationSlotId, optional Boolean? enabled, optional androidx.wear.watchface.complications.ComplicationSlotBounds? complicationSlotBounds, optional Integer? accessibilityTraversalIndex, optional Integer? nameResourceId, optional Integer? screenReaderNameResourceId);
ctor @Deprecated public UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay(int complicationSlotId, optional Boolean? enabled, optional androidx.wear.watchface.complications.ComplicationSlotBounds? complicationSlotBounds, optional Integer? accessibilityTraversalIndex);
+ ctor public UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay(int complicationSlotId, optional Boolean? enabled, optional androidx.wear.watchface.complications.ComplicationSlotBounds? complicationSlotBounds, optional Integer? accessibilityTraversalIndex, optional Integer? nameResourceId, optional Integer? screenReaderNameResourceId);
method public Integer? getAccessibilityTraversalIndex();
method public androidx.wear.watchface.complications.ComplicationSlotBounds? getComplicationSlotBounds();
method public int getComplicationSlotId();
@@ -157,10 +157,10 @@
}
public static final class UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption extends androidx.wear.watchface.style.UserStyleSetting.Option {
- ctor @Deprecated public UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, android.graphics.drawable.Icon? icon, java.util.Collection<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay> complicationSlotOverlays, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
ctor @Deprecated public UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, android.graphics.drawable.Icon? icon, java.util.Collection<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay> complicationSlotOverlays);
- ctor public UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int screenReaderNameResourceId, android.graphics.drawable.Icon? icon, java.util.Collection<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay> complicationSlotOverlays, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
+ ctor @Deprecated public UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, android.graphics.drawable.Icon? icon, java.util.Collection<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay> complicationSlotOverlays, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
ctor public UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int screenReaderNameResourceId, android.graphics.drawable.Icon? icon, java.util.Collection<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay> complicationSlotOverlays);
+ ctor public UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int screenReaderNameResourceId, android.graphics.drawable.Icon? icon, java.util.Collection<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay> complicationSlotOverlays, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
method public java.util.Collection<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay> getComplicationSlotOverlays();
method public CharSequence getDisplayName();
method public android.graphics.drawable.Icon? getIcon();
@@ -184,8 +184,8 @@
}
public static final class UserStyleSetting.DoubleRangeUserStyleSetting extends androidx.wear.watchface.style.UserStyleSetting {
- ctor public UserStyleSetting.DoubleRangeUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, double minimumValue, double maximumValue, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, double defaultValue, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
ctor public UserStyleSetting.DoubleRangeUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, double minimumValue, double maximumValue, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, double defaultValue);
+ ctor public UserStyleSetting.DoubleRangeUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, double minimumValue, double maximumValue, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, double defaultValue, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
method public double getDefaultValue();
method public double getMaximumValue();
method public double getMinimumValue();
@@ -227,18 +227,18 @@
}
public static class UserStyleSetting.ListUserStyleSetting extends androidx.wear.watchface.style.UserStyleSetting {
- ctor public UserStyleSetting.ListUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption> options, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, optional androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption defaultOption, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
- ctor public UserStyleSetting.ListUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption> options, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, optional androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption defaultOption);
ctor public UserStyleSetting.ListUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption> options, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers);
+ ctor public UserStyleSetting.ListUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption> options, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, optional androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption defaultOption);
+ ctor public UserStyleSetting.ListUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption> options, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, optional androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption defaultOption, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
}
public static final class UserStyleSetting.ListUserStyleSetting.ListOption extends androidx.wear.watchface.style.UserStyleSetting.Option {
- ctor @Deprecated public UserStyleSetting.ListUserStyleSetting.ListOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, android.graphics.drawable.Icon? icon, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
ctor @Deprecated public UserStyleSetting.ListUserStyleSetting.ListOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, android.graphics.drawable.Icon? icon);
+ ctor @Deprecated public UserStyleSetting.ListUserStyleSetting.ListOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, android.graphics.drawable.Icon? icon, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
ctor @Deprecated public UserStyleSetting.ListUserStyleSetting.ListOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, android.graphics.drawable.Icon? icon, optional java.util.Collection<? extends androidx.wear.watchface.style.UserStyleSetting> childSettings, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
- ctor public UserStyleSetting.ListUserStyleSetting.ListOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int screenReaderNameResourceId, android.graphics.drawable.Icon? icon, optional java.util.Collection<? extends androidx.wear.watchface.style.UserStyleSetting> childSettings, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
- ctor public UserStyleSetting.ListUserStyleSetting.ListOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int screenReaderNameResourceId, android.graphics.drawable.Icon? icon, optional java.util.Collection<? extends androidx.wear.watchface.style.UserStyleSetting> childSettings);
ctor public UserStyleSetting.ListUserStyleSetting.ListOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int screenReaderNameResourceId, android.graphics.drawable.Icon? icon);
+ ctor public UserStyleSetting.ListUserStyleSetting.ListOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int screenReaderNameResourceId, android.graphics.drawable.Icon? icon, optional java.util.Collection<? extends androidx.wear.watchface.style.UserStyleSetting> childSettings);
+ ctor public UserStyleSetting.ListUserStyleSetting.ListOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int screenReaderNameResourceId, android.graphics.drawable.Icon? icon, optional java.util.Collection<? extends androidx.wear.watchface.style.UserStyleSetting> childSettings, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
method public CharSequence getDisplayName();
method public android.graphics.drawable.Icon? getIcon();
method public CharSequence? getScreenReaderName();
@@ -250,8 +250,8 @@
}
public static final class UserStyleSetting.LongRangeUserStyleSetting extends androidx.wear.watchface.style.UserStyleSetting {
- ctor public UserStyleSetting.LongRangeUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, long minimumValue, long maximumValue, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, long defaultValue, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
ctor public UserStyleSetting.LongRangeUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, long minimumValue, long maximumValue, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, long defaultValue);
+ ctor public UserStyleSetting.LongRangeUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, long minimumValue, long maximumValue, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, long defaultValue, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
method public long getDefaultValue();
method public long getMaximumValue();
method public long getMinimumValue();
diff --git a/wear/watchface/watchface-style/api/restricted_current.txt b/wear/watchface/watchface-style/api/restricted_current.txt
index fb68cef..bc864ab 100644
--- a/wear/watchface/watchface-style/api/restricted_current.txt
+++ b/wear/watchface/watchface-style/api/restricted_current.txt
@@ -15,8 +15,8 @@
method public int getSize();
method public java.util.Iterator<java.util.Map.Entry<androidx.wear.watchface.style.UserStyleSetting,androidx.wear.watchface.style.UserStyleSetting.Option>> iterator();
method public operator void set(androidx.wear.watchface.style.UserStyleSetting setting, androidx.wear.watchface.style.UserStyleSetting.Option option);
- method public operator void set(androidx.wear.watchface.style.UserStyleSetting.Id settingId, androidx.wear.watchface.style.UserStyleSetting.Option option);
method public operator void set(androidx.wear.watchface.style.UserStyleSetting setting, androidx.wear.watchface.style.UserStyleSetting.Option.Id optionId);
+ method public operator void set(androidx.wear.watchface.style.UserStyleSetting.Id settingId, androidx.wear.watchface.style.UserStyleSetting.Option option);
method public operator void set(androidx.wear.watchface.style.UserStyleSetting.Id settingId, androidx.wear.watchface.style.UserStyleSetting.Option.Id optionId);
method public androidx.wear.watchface.style.UserStyle toUserStyle();
property public final int size;
@@ -24,8 +24,8 @@
public final class UserStyle implements kotlin.jvm.internal.markers.KMappedMarker java.util.Map<androidx.wear.watchface.style.UserStyleSetting,androidx.wear.watchface.style.UserStyleSetting.Option> {
ctor public UserStyle(androidx.wear.watchface.style.UserStyle userStyle);
- ctor public UserStyle(java.util.Map<androidx.wear.watchface.style.UserStyleSetting,? extends androidx.wear.watchface.style.UserStyleSetting.Option> selectedOptions);
ctor public UserStyle(androidx.wear.watchface.style.UserStyleData userStyle, androidx.wear.watchface.style.UserStyleSchema styleSchema);
+ ctor public UserStyle(java.util.Map<androidx.wear.watchface.style.UserStyleSetting,? extends androidx.wear.watchface.style.UserStyleSetting.Option> selectedOptions);
method public boolean containsKey(androidx.wear.watchface.style.UserStyleSetting key);
method public boolean containsValue(androidx.wear.watchface.style.UserStyleSetting.Option value);
method public operator androidx.wear.watchface.style.UserStyleSetting.Option? get(androidx.wear.watchface.style.UserStyleSetting key);
@@ -50,8 +50,8 @@
}
public final class UserStyleFlavor {
- ctor public UserStyleFlavor(String id, androidx.wear.watchface.style.UserStyleData style, java.util.Map<java.lang.Integer,androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy> complications);
ctor public UserStyleFlavor(String id, androidx.wear.watchface.style.UserStyle style, java.util.Map<java.lang.Integer,androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy> complications);
+ ctor public UserStyleFlavor(String id, androidx.wear.watchface.style.UserStyleData style, java.util.Map<java.lang.Integer,androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy> complications);
method public java.util.Map<java.lang.Integer,androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy> getComplications();
method public String getId();
method public androidx.wear.watchface.style.UserStyleData getStyle();
@@ -61,8 +61,8 @@
}
public final class UserStyleFlavors {
- ctor public UserStyleFlavors(java.util.List<androidx.wear.watchface.style.UserStyleFlavor> flavors);
ctor public UserStyleFlavors();
+ ctor public UserStyleFlavors(java.util.List<androidx.wear.watchface.style.UserStyleFlavor> flavors);
method public java.util.List<androidx.wear.watchface.style.UserStyleFlavor> getFlavors();
property public final java.util.List<androidx.wear.watchface.style.UserStyleFlavor> flavors;
}
@@ -102,8 +102,8 @@
}
public static final class UserStyleSetting.BooleanUserStyleSetting extends androidx.wear.watchface.style.UserStyleSetting {
- ctor public UserStyleSetting.BooleanUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, boolean defaultValue, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
ctor public UserStyleSetting.BooleanUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, boolean defaultValue);
+ ctor public UserStyleSetting.BooleanUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, boolean defaultValue, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
method public boolean getDefaultValue();
}
@@ -124,14 +124,14 @@
}
public static final class UserStyleSetting.ComplicationSlotsUserStyleSetting extends androidx.wear.watchface.style.UserStyleSetting {
- ctor public UserStyleSetting.ComplicationSlotsUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption> complicationConfig, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, optional androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption defaultOption, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
- ctor public UserStyleSetting.ComplicationSlotsUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption> complicationConfig, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, optional androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption defaultOption);
ctor public UserStyleSetting.ComplicationSlotsUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption> complicationConfig, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers);
+ ctor public UserStyleSetting.ComplicationSlotsUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption> complicationConfig, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, optional androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption defaultOption);
+ ctor public UserStyleSetting.ComplicationSlotsUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption> complicationConfig, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, optional androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption defaultOption, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
}
public static final class UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay {
- ctor public UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay(int complicationSlotId, optional Boolean? enabled, optional androidx.wear.watchface.complications.ComplicationSlotBounds? complicationSlotBounds, optional Integer? accessibilityTraversalIndex, optional Integer? nameResourceId, optional Integer? screenReaderNameResourceId);
ctor @Deprecated public UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay(int complicationSlotId, optional Boolean? enabled, optional androidx.wear.watchface.complications.ComplicationSlotBounds? complicationSlotBounds, optional Integer? accessibilityTraversalIndex);
+ ctor public UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay(int complicationSlotId, optional Boolean? enabled, optional androidx.wear.watchface.complications.ComplicationSlotBounds? complicationSlotBounds, optional Integer? accessibilityTraversalIndex, optional Integer? nameResourceId, optional Integer? screenReaderNameResourceId);
method public Integer? getAccessibilityTraversalIndex();
method public androidx.wear.watchface.complications.ComplicationSlotBounds? getComplicationSlotBounds();
method public int getComplicationSlotId();
@@ -157,10 +157,10 @@
}
public static final class UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption extends androidx.wear.watchface.style.UserStyleSetting.Option {
- ctor @Deprecated public UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, android.graphics.drawable.Icon? icon, java.util.Collection<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay> complicationSlotOverlays, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
ctor @Deprecated public UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, android.graphics.drawable.Icon? icon, java.util.Collection<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay> complicationSlotOverlays);
- ctor public UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int screenReaderNameResourceId, android.graphics.drawable.Icon? icon, java.util.Collection<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay> complicationSlotOverlays, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
+ ctor @Deprecated public UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, android.graphics.drawable.Icon? icon, java.util.Collection<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay> complicationSlotOverlays, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
ctor public UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int screenReaderNameResourceId, android.graphics.drawable.Icon? icon, java.util.Collection<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay> complicationSlotOverlays);
+ ctor public UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int screenReaderNameResourceId, android.graphics.drawable.Icon? icon, java.util.Collection<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay> complicationSlotOverlays, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
method public java.util.Collection<androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay> getComplicationSlotOverlays();
method public CharSequence getDisplayName();
method public android.graphics.drawable.Icon? getIcon();
@@ -184,8 +184,8 @@
}
public static final class UserStyleSetting.DoubleRangeUserStyleSetting extends androidx.wear.watchface.style.UserStyleSetting {
- ctor public UserStyleSetting.DoubleRangeUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, double minimumValue, double maximumValue, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, double defaultValue, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
ctor public UserStyleSetting.DoubleRangeUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, double minimumValue, double maximumValue, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, double defaultValue);
+ ctor public UserStyleSetting.DoubleRangeUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, double minimumValue, double maximumValue, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, double defaultValue, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
method public double getDefaultValue();
method public double getMaximumValue();
method public double getMinimumValue();
@@ -227,18 +227,18 @@
}
public static class UserStyleSetting.ListUserStyleSetting extends androidx.wear.watchface.style.UserStyleSetting {
- ctor public UserStyleSetting.ListUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption> options, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, optional androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption defaultOption, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
- ctor public UserStyleSetting.ListUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption> options, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, optional androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption defaultOption);
ctor public UserStyleSetting.ListUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption> options, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers);
+ ctor public UserStyleSetting.ListUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption> options, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, optional androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption defaultOption);
+ ctor public UserStyleSetting.ListUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption> options, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, optional androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption defaultOption, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
}
public static final class UserStyleSetting.ListUserStyleSetting.ListOption extends androidx.wear.watchface.style.UserStyleSetting.Option {
- ctor @Deprecated public UserStyleSetting.ListUserStyleSetting.ListOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, android.graphics.drawable.Icon? icon, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
ctor @Deprecated public UserStyleSetting.ListUserStyleSetting.ListOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, android.graphics.drawable.Icon? icon);
+ ctor @Deprecated public UserStyleSetting.ListUserStyleSetting.ListOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, android.graphics.drawable.Icon? icon, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
ctor @Deprecated public UserStyleSetting.ListUserStyleSetting.ListOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, android.graphics.drawable.Icon? icon, optional java.util.Collection<? extends androidx.wear.watchface.style.UserStyleSetting> childSettings, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
- ctor public UserStyleSetting.ListUserStyleSetting.ListOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int screenReaderNameResourceId, android.graphics.drawable.Icon? icon, optional java.util.Collection<? extends androidx.wear.watchface.style.UserStyleSetting> childSettings, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
- ctor public UserStyleSetting.ListUserStyleSetting.ListOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int screenReaderNameResourceId, android.graphics.drawable.Icon? icon, optional java.util.Collection<? extends androidx.wear.watchface.style.UserStyleSetting> childSettings);
ctor public UserStyleSetting.ListUserStyleSetting.ListOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int screenReaderNameResourceId, android.graphics.drawable.Icon? icon);
+ ctor public UserStyleSetting.ListUserStyleSetting.ListOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int screenReaderNameResourceId, android.graphics.drawable.Icon? icon, optional java.util.Collection<? extends androidx.wear.watchface.style.UserStyleSetting> childSettings);
+ ctor public UserStyleSetting.ListUserStyleSetting.ListOption(androidx.wear.watchface.style.UserStyleSetting.Option.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int screenReaderNameResourceId, android.graphics.drawable.Icon? icon, optional java.util.Collection<? extends androidx.wear.watchface.style.UserStyleSetting> childSettings, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
method public CharSequence getDisplayName();
method public android.graphics.drawable.Icon? getIcon();
method public CharSequence? getScreenReaderName();
@@ -250,8 +250,8 @@
}
public static final class UserStyleSetting.LongRangeUserStyleSetting extends androidx.wear.watchface.style.UserStyleSetting {
- ctor public UserStyleSetting.LongRangeUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, long minimumValue, long maximumValue, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, long defaultValue, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
ctor public UserStyleSetting.LongRangeUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, long minimumValue, long maximumValue, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, long defaultValue);
+ ctor public UserStyleSetting.LongRangeUserStyleSetting(androidx.wear.watchface.style.UserStyleSetting.Id id, android.content.res.Resources resources, @StringRes int displayNameResourceId, @StringRes int descriptionResourceId, android.graphics.drawable.Icon? icon, long minimumValue, long maximumValue, java.util.Collection<? extends androidx.wear.watchface.style.WatchFaceLayer> affectsWatchFaceLayers, long defaultValue, optional androidx.wear.watchface.style.UserStyleSetting.WatchFaceEditorData? watchFaceEditorData);
method public long getDefaultValue();
method public long getMaximumValue();
method public long getMinimumValue();
diff --git a/wear/watchface/watchface-style/old-api-test-service/build.gradle b/wear/watchface/watchface-style/old-api-test-service/build.gradle
index 6d668ff..905cc31 100644
--- a/wear/watchface/watchface-style/old-api-test-service/build.gradle
+++ b/wear/watchface/watchface-style/old-api-test-service/build.gradle
@@ -35,7 +35,7 @@
}
androidx {
- name = "AndroidX WatchFace Style Old Api Test Service"
+ name = "WatchFace Style Old Api Test Service"
type = LibraryType.SAMPLES
inceptionYear = "2022"
description = "Test service built with v1.0.0 of the API, used to check for binary AIDL compat"
diff --git a/wear/watchface/watchface-style/old-api-test-stub/build.gradle b/wear/watchface/watchface-style/old-api-test-stub/build.gradle
index ba36ffc..aa784be 100644
--- a/wear/watchface/watchface-style/old-api-test-stub/build.gradle
+++ b/wear/watchface/watchface-style/old-api-test-stub/build.gradle
@@ -32,7 +32,7 @@
}
androidx {
- name = "AndroidX WatchFace Style Old Api Test Stub"
+ name = "WatchFace Style Old Api Test Stub"
type = LibraryType.INTERNAL_TEST_LIBRARY
inceptionYear = "2022"
description = "Test stub built with v1.0.0 of the API, used to check for binary AIDL compat"
diff --git a/wear/watchface/watchface/api/current.txt b/wear/watchface/watchface/api/current.txt
index 7376e37..1424af5 100644
--- a/wear/watchface/watchface/api/current.txt
+++ b/wear/watchface/watchface/api/current.txt
@@ -22,8 +22,8 @@
}
public final class ComplicationSlot {
- method public android.graphics.Rect computeBounds(android.graphics.Rect screen, optional boolean applyMargins);
method public android.graphics.Rect computeBounds(android.graphics.Rect screen);
+ method public android.graphics.Rect computeBounds(android.graphics.Rect screen, optional boolean applyMargins);
method public static androidx.wear.watchface.ComplicationSlot.Builder createBackgroundComplicationSlotBuilder(int id, androidx.wear.watchface.CanvasComplicationFactory canvasComplicationFactory, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy);
method public static androidx.wear.watchface.ComplicationSlot.Builder createEdgeComplicationSlotBuilder(int id, androidx.wear.watchface.CanvasComplicationFactory canvasComplicationFactory, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy, androidx.wear.watchface.complications.ComplicationSlotBounds bounds, androidx.wear.watchface.ComplicationTapFilter complicationTapFilter);
method public static androidx.wear.watchface.ComplicationSlot.Builder createRoundRectComplicationSlotBuilder(int id, androidx.wear.watchface.CanvasComplicationFactory canvasComplicationFactory, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy, androidx.wear.watchface.complications.ComplicationSlotBounds bounds);
@@ -109,8 +109,8 @@
}
@kotlin.jvm.JvmDefaultWithCompatibility public interface ComplicationTapFilter {
- method public default boolean hitTest(androidx.wear.watchface.ComplicationSlot complicationSlot, android.graphics.Rect screenBounds, @Px int x, @Px int y, boolean includeMargins);
method @Deprecated public default boolean hitTest(androidx.wear.watchface.ComplicationSlot complicationSlot, android.graphics.Rect screenBounds, @Px int x, @Px int y);
+ method public default boolean hitTest(androidx.wear.watchface.ComplicationSlot complicationSlot, android.graphics.Rect screenBounds, @Px int x, @Px int y, boolean includeMargins);
}
public final class ContentDescriptionLabel {
@@ -134,9 +134,9 @@
}
public final class RenderParameters {
- ctor public RenderParameters(androidx.wear.watchface.DrawMode drawMode, java.util.Set<? extends androidx.wear.watchface.style.WatchFaceLayer> watchFaceLayers, optional androidx.wear.watchface.RenderParameters.HighlightLayer? highlightLayer, optional java.util.Map<java.lang.Integer,androidx.wear.watchface.TapEvent> lastComplicationTapDownEvents);
- ctor public RenderParameters(androidx.wear.watchface.DrawMode drawMode, java.util.Set<? extends androidx.wear.watchface.style.WatchFaceLayer> watchFaceLayers, optional androidx.wear.watchface.RenderParameters.HighlightLayer? highlightLayer);
ctor public RenderParameters(androidx.wear.watchface.DrawMode drawMode, java.util.Set<? extends androidx.wear.watchface.style.WatchFaceLayer> watchFaceLayers);
+ ctor public RenderParameters(androidx.wear.watchface.DrawMode drawMode, java.util.Set<? extends androidx.wear.watchface.style.WatchFaceLayer> watchFaceLayers, optional androidx.wear.watchface.RenderParameters.HighlightLayer? highlightLayer);
+ ctor public RenderParameters(androidx.wear.watchface.DrawMode drawMode, java.util.Set<? extends androidx.wear.watchface.style.WatchFaceLayer> watchFaceLayers, optional androidx.wear.watchface.RenderParameters.HighlightLayer? highlightLayer, optional java.util.Map<java.lang.Integer,androidx.wear.watchface.TapEvent> lastComplicationTapDownEvents);
method public androidx.wear.watchface.DrawMode getDrawMode();
method public androidx.wear.watchface.RenderParameters.HighlightLayer? getHighlightLayer();
method public java.util.Map<java.lang.Integer,androidx.wear.watchface.TapEvent> getLastComplicationTapDownEvents();
@@ -212,8 +212,8 @@
}
@Deprecated public abstract static class Renderer.CanvasRenderer extends androidx.wear.watchface.Renderer {
- ctor @Deprecated @WorkerThread public Renderer.CanvasRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, int canvasType, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional boolean clearWithBackgroundTintBeforeRenderingHighlightLayer);
ctor @Deprecated @WorkerThread public Renderer.CanvasRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, int canvasType, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis);
+ ctor @Deprecated @WorkerThread public Renderer.CanvasRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, int canvasType, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional boolean clearWithBackgroundTintBeforeRenderingHighlightLayer);
method @Deprecated public final boolean getClearWithBackgroundTintBeforeRenderingHighlightLayer();
method @Deprecated @UiThread public suspend Object? init(kotlin.coroutines.Continuation<? super kotlin.Unit>);
method @Deprecated public void onDump(java.io.PrintWriter writer);
@@ -225,17 +225,17 @@
public abstract static class Renderer.CanvasRenderer2<SharedAssetsT extends androidx.wear.watchface.Renderer.SharedAssets> extends androidx.wear.watchface.Renderer.CanvasRenderer {
ctor @WorkerThread public Renderer.CanvasRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, int canvasType, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, boolean clearWithBackgroundTintBeforeRenderingHighlightLayer);
method @WorkerThread protected abstract suspend Object? createSharedAssets(kotlin.coroutines.Continuation<? super SharedAssetsT>);
- method @UiThread public abstract void render(android.graphics.Canvas canvas, android.graphics.Rect bounds, java.time.ZonedDateTime zonedDateTime, SharedAssetsT sharedAssets);
method public final void render(android.graphics.Canvas canvas, android.graphics.Rect bounds, java.time.ZonedDateTime zonedDateTime);
- method @UiThread public abstract void renderHighlightLayer(android.graphics.Canvas canvas, android.graphics.Rect bounds, java.time.ZonedDateTime zonedDateTime, SharedAssetsT sharedAssets);
+ method @UiThread public abstract void render(android.graphics.Canvas canvas, android.graphics.Rect bounds, java.time.ZonedDateTime zonedDateTime, SharedAssetsT sharedAssets);
method public final void renderHighlightLayer(android.graphics.Canvas canvas, android.graphics.Rect bounds, java.time.ZonedDateTime zonedDateTime);
+ method @UiThread public abstract void renderHighlightLayer(android.graphics.Canvas canvas, android.graphics.Rect bounds, java.time.ZonedDateTime zonedDateTime, SharedAssetsT sharedAssets);
}
@Deprecated public abstract static class Renderer.GlesRenderer extends androidx.wear.watchface.Renderer {
- ctor @Deprecated @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList, optional int[] eglContextAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
- ctor @Deprecated @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
- ctor @Deprecated @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
ctor @Deprecated @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
+ ctor @Deprecated @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
+ ctor @Deprecated @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
+ ctor @Deprecated @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList, optional int[] eglContextAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
method @Deprecated public final android.opengl.EGLContext getEglBackgroundThreadContext();
method @Deprecated public final android.opengl.EGLConfig getEglConfig();
method @Deprecated public final android.opengl.EGLDisplay getEglDisplay();
@@ -260,15 +260,15 @@
}
public abstract static class Renderer.GlesRenderer2<SharedAssetsT extends androidx.wear.watchface.Renderer.SharedAssets> extends androidx.wear.watchface.Renderer.GlesRenderer {
- ctor @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList, optional int[] eglContextAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
- ctor @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
- ctor @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
ctor @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
+ ctor @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
+ ctor @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
+ ctor @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList, optional int[] eglContextAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
method @WorkerThread protected abstract suspend Object? createSharedAssets(kotlin.coroutines.Continuation<? super SharedAssetsT>);
- method @UiThread public abstract void render(java.time.ZonedDateTime zonedDateTime, SharedAssetsT sharedAssets);
method public final void render(java.time.ZonedDateTime zonedDateTime);
- method @UiThread public abstract void renderHighlightLayer(java.time.ZonedDateTime zonedDateTime, SharedAssetsT sharedAssets);
+ method @UiThread public abstract void render(java.time.ZonedDateTime zonedDateTime, SharedAssetsT sharedAssets);
method public final void renderHighlightLayer(java.time.ZonedDateTime zonedDateTime);
+ method @UiThread public abstract void renderHighlightLayer(java.time.ZonedDateTime zonedDateTime, SharedAssetsT sharedAssets);
}
public static interface Renderer.SharedAssets {
@@ -317,8 +317,8 @@
}
public static final class WatchFace.LegacyWatchFaceOverlayStyle {
- ctor public WatchFace.LegacyWatchFaceOverlayStyle(int viewProtectionMode, int statusBarGravity, boolean tapEventsAccepted, optional @ColorInt int accentColor);
ctor public WatchFace.LegacyWatchFaceOverlayStyle(int viewProtectionMode, int statusBarGravity, boolean tapEventsAccepted);
+ ctor public WatchFace.LegacyWatchFaceOverlayStyle(int viewProtectionMode, int statusBarGravity, boolean tapEventsAccepted, optional @ColorInt int accentColor);
method public int getAccentColor();
method public int getStatusBarGravity();
method public boolean getTapEventsAccepted();
@@ -330,8 +330,8 @@
}
public static final class WatchFace.OverlayStyle {
- ctor public WatchFace.OverlayStyle(android.graphics.Color? backgroundColor, android.graphics.Color? foregroundColor);
ctor public WatchFace.OverlayStyle();
+ ctor public WatchFace.OverlayStyle(android.graphics.Color? backgroundColor, android.graphics.Color? foregroundColor);
method public android.graphics.Color? getBackgroundColor();
method public android.graphics.Color? getForegroundColor();
property public final android.graphics.Color? backgroundColor;
@@ -361,8 +361,8 @@
}
public final class WatchState {
- ctor public WatchState(kotlinx.coroutines.flow.StateFlow<java.lang.Integer> interruptionFilter, kotlinx.coroutines.flow.StateFlow<java.lang.Boolean> isAmbient, kotlinx.coroutines.flow.StateFlow<java.lang.Boolean> isBatteryLowAndNotCharging, kotlinx.coroutines.flow.StateFlow<java.lang.Boolean> isVisible, boolean hasLowBitAmbient, boolean hasBurnInProtection, long analogPreviewReferenceTimeMillis, long digitalPreviewReferenceTimeMillis, @Px int chinHeight, boolean isHeadless, kotlinx.coroutines.flow.StateFlow<java.lang.String> watchFaceInstanceId);
ctor @Deprecated public WatchState(kotlinx.coroutines.flow.StateFlow<java.lang.Integer> interruptionFilter, kotlinx.coroutines.flow.StateFlow<java.lang.Boolean> isAmbient, kotlinx.coroutines.flow.StateFlow<java.lang.Boolean> isBatteryLowAndNotCharging, kotlinx.coroutines.flow.StateFlow<java.lang.Boolean> isVisible, boolean hasLowBitAmbient, boolean hasBurnInProtection, long analogPreviewReferenceTimeMillis, long digitalPreviewReferenceTimeMillis, int chinHeight, boolean isHeadless);
+ ctor public WatchState(kotlinx.coroutines.flow.StateFlow<java.lang.Integer> interruptionFilter, kotlinx.coroutines.flow.StateFlow<java.lang.Boolean> isAmbient, kotlinx.coroutines.flow.StateFlow<java.lang.Boolean> isBatteryLowAndNotCharging, kotlinx.coroutines.flow.StateFlow<java.lang.Boolean> isVisible, boolean hasLowBitAmbient, boolean hasBurnInProtection, long analogPreviewReferenceTimeMillis, long digitalPreviewReferenceTimeMillis, @Px int chinHeight, boolean isHeadless, kotlinx.coroutines.flow.StateFlow<java.lang.String> watchFaceInstanceId);
method public long getAnalogPreviewReferenceTimeMillis();
method @Px public int getChinHeight();
method public long getDigitalPreviewReferenceTimeMillis();
diff --git a/wear/watchface/watchface/api/public_plus_experimental_current.txt b/wear/watchface/watchface/api/public_plus_experimental_current.txt
index 220208d..6feb579 100644
--- a/wear/watchface/watchface/api/public_plus_experimental_current.txt
+++ b/wear/watchface/watchface/api/public_plus_experimental_current.txt
@@ -34,12 +34,12 @@
}
public final class ComplicationSlot {
- method public android.graphics.Rect computeBounds(android.graphics.Rect screen, optional boolean applyMargins);
method public android.graphics.Rect computeBounds(android.graphics.Rect screen);
+ method public android.graphics.Rect computeBounds(android.graphics.Rect screen, optional boolean applyMargins);
method public static androidx.wear.watchface.ComplicationSlot.Builder createBackgroundComplicationSlotBuilder(int id, androidx.wear.watchface.CanvasComplicationFactory canvasComplicationFactory, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy);
- method public static androidx.wear.watchface.ComplicationSlot.Builder createEdgeComplicationSlotBuilder(int id, androidx.wear.watchface.CanvasComplicationFactory canvasComplicationFactory, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy, androidx.wear.watchface.complications.ComplicationSlotBounds bounds, androidx.wear.watchface.ComplicationTapFilter complicationTapFilter);
- method @androidx.wear.watchface.complications.data.ComplicationExperimental public static androidx.wear.watchface.ComplicationSlot.Builder createEdgeComplicationSlotBuilder(int id, androidx.wear.watchface.CanvasComplicationFactory canvasComplicationFactory, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy, androidx.wear.watchface.complications.ComplicationSlotBounds bounds, androidx.wear.watchface.BoundingArc boundingArc, optional androidx.wear.watchface.ComplicationTapFilter complicationTapFilter);
method @androidx.wear.watchface.complications.data.ComplicationExperimental public static androidx.wear.watchface.ComplicationSlot.Builder createEdgeComplicationSlotBuilder(int id, androidx.wear.watchface.CanvasComplicationFactory canvasComplicationFactory, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy, androidx.wear.watchface.complications.ComplicationSlotBounds bounds, androidx.wear.watchface.BoundingArc boundingArc);
+ method @androidx.wear.watchface.complications.data.ComplicationExperimental public static androidx.wear.watchface.ComplicationSlot.Builder createEdgeComplicationSlotBuilder(int id, androidx.wear.watchface.CanvasComplicationFactory canvasComplicationFactory, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy, androidx.wear.watchface.complications.ComplicationSlotBounds bounds, androidx.wear.watchface.BoundingArc boundingArc, optional androidx.wear.watchface.ComplicationTapFilter complicationTapFilter);
+ method public static androidx.wear.watchface.ComplicationSlot.Builder createEdgeComplicationSlotBuilder(int id, androidx.wear.watchface.CanvasComplicationFactory canvasComplicationFactory, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy, androidx.wear.watchface.complications.ComplicationSlotBounds bounds, androidx.wear.watchface.ComplicationTapFilter complicationTapFilter);
method public static androidx.wear.watchface.ComplicationSlot.Builder createRoundRectComplicationSlotBuilder(int id, androidx.wear.watchface.CanvasComplicationFactory canvasComplicationFactory, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy, androidx.wear.watchface.complications.ComplicationSlotBounds bounds);
method @UiThread public int getAccessibilityTraversalIndex();
method public int getBoundsType();
@@ -95,9 +95,9 @@
public static final class ComplicationSlot.Companion {
method public androidx.wear.watchface.ComplicationSlot.Builder createBackgroundComplicationSlotBuilder(int id, androidx.wear.watchface.CanvasComplicationFactory canvasComplicationFactory, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy);
- method public androidx.wear.watchface.ComplicationSlot.Builder createEdgeComplicationSlotBuilder(int id, androidx.wear.watchface.CanvasComplicationFactory canvasComplicationFactory, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy, androidx.wear.watchface.complications.ComplicationSlotBounds bounds, androidx.wear.watchface.ComplicationTapFilter complicationTapFilter);
- method @androidx.wear.watchface.complications.data.ComplicationExperimental public androidx.wear.watchface.ComplicationSlot.Builder createEdgeComplicationSlotBuilder(int id, androidx.wear.watchface.CanvasComplicationFactory canvasComplicationFactory, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy, androidx.wear.watchface.complications.ComplicationSlotBounds bounds, androidx.wear.watchface.BoundingArc boundingArc, optional androidx.wear.watchface.ComplicationTapFilter complicationTapFilter);
method @androidx.wear.watchface.complications.data.ComplicationExperimental public androidx.wear.watchface.ComplicationSlot.Builder createEdgeComplicationSlotBuilder(int id, androidx.wear.watchface.CanvasComplicationFactory canvasComplicationFactory, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy, androidx.wear.watchface.complications.ComplicationSlotBounds bounds, androidx.wear.watchface.BoundingArc boundingArc);
+ method @androidx.wear.watchface.complications.data.ComplicationExperimental public androidx.wear.watchface.ComplicationSlot.Builder createEdgeComplicationSlotBuilder(int id, androidx.wear.watchface.CanvasComplicationFactory canvasComplicationFactory, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy, androidx.wear.watchface.complications.ComplicationSlotBounds bounds, androidx.wear.watchface.BoundingArc boundingArc, optional androidx.wear.watchface.ComplicationTapFilter complicationTapFilter);
+ method public androidx.wear.watchface.ComplicationSlot.Builder createEdgeComplicationSlotBuilder(int id, androidx.wear.watchface.CanvasComplicationFactory canvasComplicationFactory, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy, androidx.wear.watchface.complications.ComplicationSlotBounds bounds, androidx.wear.watchface.ComplicationTapFilter complicationTapFilter);
method public androidx.wear.watchface.ComplicationSlot.Builder createRoundRectComplicationSlotBuilder(int id, androidx.wear.watchface.CanvasComplicationFactory canvasComplicationFactory, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy, androidx.wear.watchface.complications.ComplicationSlotBounds bounds);
}
@@ -125,8 +125,8 @@
}
@kotlin.jvm.JvmDefaultWithCompatibility public interface ComplicationTapFilter {
- method public default boolean hitTest(androidx.wear.watchface.ComplicationSlot complicationSlot, android.graphics.Rect screenBounds, @Px int x, @Px int y, boolean includeMargins);
method @Deprecated public default boolean hitTest(androidx.wear.watchface.ComplicationSlot complicationSlot, android.graphics.Rect screenBounds, @Px int x, @Px int y);
+ method public default boolean hitTest(androidx.wear.watchface.ComplicationSlot complicationSlot, android.graphics.Rect screenBounds, @Px int x, @Px int y, boolean includeMargins);
}
public final class ContentDescriptionLabel {
@@ -150,9 +150,9 @@
}
public final class RenderParameters {
- ctor public RenderParameters(androidx.wear.watchface.DrawMode drawMode, java.util.Set<? extends androidx.wear.watchface.style.WatchFaceLayer> watchFaceLayers, optional androidx.wear.watchface.RenderParameters.HighlightLayer? highlightLayer, optional java.util.Map<java.lang.Integer,androidx.wear.watchface.TapEvent> lastComplicationTapDownEvents);
- ctor public RenderParameters(androidx.wear.watchface.DrawMode drawMode, java.util.Set<? extends androidx.wear.watchface.style.WatchFaceLayer> watchFaceLayers, optional androidx.wear.watchface.RenderParameters.HighlightLayer? highlightLayer);
ctor public RenderParameters(androidx.wear.watchface.DrawMode drawMode, java.util.Set<? extends androidx.wear.watchface.style.WatchFaceLayer> watchFaceLayers);
+ ctor public RenderParameters(androidx.wear.watchface.DrawMode drawMode, java.util.Set<? extends androidx.wear.watchface.style.WatchFaceLayer> watchFaceLayers, optional androidx.wear.watchface.RenderParameters.HighlightLayer? highlightLayer);
+ ctor public RenderParameters(androidx.wear.watchface.DrawMode drawMode, java.util.Set<? extends androidx.wear.watchface.style.WatchFaceLayer> watchFaceLayers, optional androidx.wear.watchface.RenderParameters.HighlightLayer? highlightLayer, optional java.util.Map<java.lang.Integer,androidx.wear.watchface.TapEvent> lastComplicationTapDownEvents);
method public androidx.wear.watchface.DrawMode getDrawMode();
method public androidx.wear.watchface.RenderParameters.HighlightLayer? getHighlightLayer();
method public java.util.Map<java.lang.Integer,androidx.wear.watchface.TapEvent> getLastComplicationTapDownEvents();
@@ -231,8 +231,8 @@
}
@Deprecated public abstract static class Renderer.CanvasRenderer extends androidx.wear.watchface.Renderer {
- ctor @Deprecated @WorkerThread public Renderer.CanvasRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, int canvasType, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional boolean clearWithBackgroundTintBeforeRenderingHighlightLayer);
ctor @Deprecated @WorkerThread public Renderer.CanvasRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, int canvasType, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis);
+ ctor @Deprecated @WorkerThread public Renderer.CanvasRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, int canvasType, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional boolean clearWithBackgroundTintBeforeRenderingHighlightLayer);
method @Deprecated public final boolean getClearWithBackgroundTintBeforeRenderingHighlightLayer();
method @Deprecated @UiThread public suspend Object? init(kotlin.coroutines.Continuation<? super kotlin.Unit>);
method @Deprecated public void onDump(java.io.PrintWriter writer);
@@ -244,17 +244,17 @@
public abstract static class Renderer.CanvasRenderer2<SharedAssetsT extends androidx.wear.watchface.Renderer.SharedAssets> extends androidx.wear.watchface.Renderer.CanvasRenderer {
ctor @WorkerThread public Renderer.CanvasRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, int canvasType, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, boolean clearWithBackgroundTintBeforeRenderingHighlightLayer);
method @WorkerThread protected abstract suspend Object? createSharedAssets(kotlin.coroutines.Continuation<? super SharedAssetsT>);
- method @UiThread public abstract void render(android.graphics.Canvas canvas, android.graphics.Rect bounds, java.time.ZonedDateTime zonedDateTime, SharedAssetsT sharedAssets);
method public final void render(android.graphics.Canvas canvas, android.graphics.Rect bounds, java.time.ZonedDateTime zonedDateTime);
- method @UiThread public abstract void renderHighlightLayer(android.graphics.Canvas canvas, android.graphics.Rect bounds, java.time.ZonedDateTime zonedDateTime, SharedAssetsT sharedAssets);
+ method @UiThread public abstract void render(android.graphics.Canvas canvas, android.graphics.Rect bounds, java.time.ZonedDateTime zonedDateTime, SharedAssetsT sharedAssets);
method public final void renderHighlightLayer(android.graphics.Canvas canvas, android.graphics.Rect bounds, java.time.ZonedDateTime zonedDateTime);
+ method @UiThread public abstract void renderHighlightLayer(android.graphics.Canvas canvas, android.graphics.Rect bounds, java.time.ZonedDateTime zonedDateTime, SharedAssetsT sharedAssets);
}
@Deprecated public abstract static class Renderer.GlesRenderer extends androidx.wear.watchface.Renderer {
- ctor @Deprecated @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList, optional int[] eglContextAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
- ctor @Deprecated @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
- ctor @Deprecated @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
ctor @Deprecated @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
+ ctor @Deprecated @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
+ ctor @Deprecated @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
+ ctor @Deprecated @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList, optional int[] eglContextAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
method @Deprecated public final android.opengl.EGLContext getEglBackgroundThreadContext();
method @Deprecated public final android.opengl.EGLConfig getEglConfig();
method @Deprecated public final android.opengl.EGLDisplay getEglDisplay();
@@ -279,15 +279,15 @@
}
public abstract static class Renderer.GlesRenderer2<SharedAssetsT extends androidx.wear.watchface.Renderer.SharedAssets> extends androidx.wear.watchface.Renderer.GlesRenderer {
- ctor @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList, optional int[] eglContextAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
- ctor @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
- ctor @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
ctor @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
+ ctor @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
+ ctor @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
+ ctor @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList, optional int[] eglContextAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
method @WorkerThread protected abstract suspend Object? createSharedAssets(kotlin.coroutines.Continuation<? super SharedAssetsT>);
- method @UiThread public abstract void render(java.time.ZonedDateTime zonedDateTime, SharedAssetsT sharedAssets);
method public final void render(java.time.ZonedDateTime zonedDateTime);
- method @UiThread public abstract void renderHighlightLayer(java.time.ZonedDateTime zonedDateTime, SharedAssetsT sharedAssets);
+ method @UiThread public abstract void render(java.time.ZonedDateTime zonedDateTime, SharedAssetsT sharedAssets);
method public final void renderHighlightLayer(java.time.ZonedDateTime zonedDateTime);
+ method @UiThread public abstract void renderHighlightLayer(java.time.ZonedDateTime zonedDateTime, SharedAssetsT sharedAssets);
}
public static interface Renderer.SharedAssets {
@@ -336,8 +336,8 @@
}
public static final class WatchFace.LegacyWatchFaceOverlayStyle {
- ctor public WatchFace.LegacyWatchFaceOverlayStyle(int viewProtectionMode, int statusBarGravity, boolean tapEventsAccepted, optional @ColorInt int accentColor);
ctor public WatchFace.LegacyWatchFaceOverlayStyle(int viewProtectionMode, int statusBarGravity, boolean tapEventsAccepted);
+ ctor public WatchFace.LegacyWatchFaceOverlayStyle(int viewProtectionMode, int statusBarGravity, boolean tapEventsAccepted, optional @ColorInt int accentColor);
method public int getAccentColor();
method public int getStatusBarGravity();
method public boolean getTapEventsAccepted();
@@ -349,8 +349,8 @@
}
public static final class WatchFace.OverlayStyle {
- ctor public WatchFace.OverlayStyle(android.graphics.Color? backgroundColor, android.graphics.Color? foregroundColor);
ctor public WatchFace.OverlayStyle();
+ ctor public WatchFace.OverlayStyle(android.graphics.Color? backgroundColor, android.graphics.Color? foregroundColor);
method public android.graphics.Color? getBackgroundColor();
method public android.graphics.Color? getForegroundColor();
property public final android.graphics.Color? backgroundColor;
@@ -393,8 +393,8 @@
}
public final class WatchState {
- ctor public WatchState(kotlinx.coroutines.flow.StateFlow<java.lang.Integer> interruptionFilter, kotlinx.coroutines.flow.StateFlow<java.lang.Boolean> isAmbient, kotlinx.coroutines.flow.StateFlow<java.lang.Boolean> isBatteryLowAndNotCharging, kotlinx.coroutines.flow.StateFlow<java.lang.Boolean> isVisible, boolean hasLowBitAmbient, boolean hasBurnInProtection, long analogPreviewReferenceTimeMillis, long digitalPreviewReferenceTimeMillis, @Px int chinHeight, boolean isHeadless, kotlinx.coroutines.flow.StateFlow<java.lang.String> watchFaceInstanceId);
ctor @Deprecated public WatchState(kotlinx.coroutines.flow.StateFlow<java.lang.Integer> interruptionFilter, kotlinx.coroutines.flow.StateFlow<java.lang.Boolean> isAmbient, kotlinx.coroutines.flow.StateFlow<java.lang.Boolean> isBatteryLowAndNotCharging, kotlinx.coroutines.flow.StateFlow<java.lang.Boolean> isVisible, boolean hasLowBitAmbient, boolean hasBurnInProtection, long analogPreviewReferenceTimeMillis, long digitalPreviewReferenceTimeMillis, int chinHeight, boolean isHeadless);
+ ctor public WatchState(kotlinx.coroutines.flow.StateFlow<java.lang.Integer> interruptionFilter, kotlinx.coroutines.flow.StateFlow<java.lang.Boolean> isAmbient, kotlinx.coroutines.flow.StateFlow<java.lang.Boolean> isBatteryLowAndNotCharging, kotlinx.coroutines.flow.StateFlow<java.lang.Boolean> isVisible, boolean hasLowBitAmbient, boolean hasBurnInProtection, long analogPreviewReferenceTimeMillis, long digitalPreviewReferenceTimeMillis, @Px int chinHeight, boolean isHeadless, kotlinx.coroutines.flow.StateFlow<java.lang.String> watchFaceInstanceId);
method public long getAnalogPreviewReferenceTimeMillis();
method @Px public int getChinHeight();
method public long getDigitalPreviewReferenceTimeMillis();
diff --git a/wear/watchface/watchface/api/restricted_current.txt b/wear/watchface/watchface/api/restricted_current.txt
index 7376e37..1424af5 100644
--- a/wear/watchface/watchface/api/restricted_current.txt
+++ b/wear/watchface/watchface/api/restricted_current.txt
@@ -22,8 +22,8 @@
}
public final class ComplicationSlot {
- method public android.graphics.Rect computeBounds(android.graphics.Rect screen, optional boolean applyMargins);
method public android.graphics.Rect computeBounds(android.graphics.Rect screen);
+ method public android.graphics.Rect computeBounds(android.graphics.Rect screen, optional boolean applyMargins);
method public static androidx.wear.watchface.ComplicationSlot.Builder createBackgroundComplicationSlotBuilder(int id, androidx.wear.watchface.CanvasComplicationFactory canvasComplicationFactory, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy);
method public static androidx.wear.watchface.ComplicationSlot.Builder createEdgeComplicationSlotBuilder(int id, androidx.wear.watchface.CanvasComplicationFactory canvasComplicationFactory, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy, androidx.wear.watchface.complications.ComplicationSlotBounds bounds, androidx.wear.watchface.ComplicationTapFilter complicationTapFilter);
method public static androidx.wear.watchface.ComplicationSlot.Builder createRoundRectComplicationSlotBuilder(int id, androidx.wear.watchface.CanvasComplicationFactory canvasComplicationFactory, java.util.List<? extends androidx.wear.watchface.complications.data.ComplicationType> supportedTypes, androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy defaultDataSourcePolicy, androidx.wear.watchface.complications.ComplicationSlotBounds bounds);
@@ -109,8 +109,8 @@
}
@kotlin.jvm.JvmDefaultWithCompatibility public interface ComplicationTapFilter {
- method public default boolean hitTest(androidx.wear.watchface.ComplicationSlot complicationSlot, android.graphics.Rect screenBounds, @Px int x, @Px int y, boolean includeMargins);
method @Deprecated public default boolean hitTest(androidx.wear.watchface.ComplicationSlot complicationSlot, android.graphics.Rect screenBounds, @Px int x, @Px int y);
+ method public default boolean hitTest(androidx.wear.watchface.ComplicationSlot complicationSlot, android.graphics.Rect screenBounds, @Px int x, @Px int y, boolean includeMargins);
}
public final class ContentDescriptionLabel {
@@ -134,9 +134,9 @@
}
public final class RenderParameters {
- ctor public RenderParameters(androidx.wear.watchface.DrawMode drawMode, java.util.Set<? extends androidx.wear.watchface.style.WatchFaceLayer> watchFaceLayers, optional androidx.wear.watchface.RenderParameters.HighlightLayer? highlightLayer, optional java.util.Map<java.lang.Integer,androidx.wear.watchface.TapEvent> lastComplicationTapDownEvents);
- ctor public RenderParameters(androidx.wear.watchface.DrawMode drawMode, java.util.Set<? extends androidx.wear.watchface.style.WatchFaceLayer> watchFaceLayers, optional androidx.wear.watchface.RenderParameters.HighlightLayer? highlightLayer);
ctor public RenderParameters(androidx.wear.watchface.DrawMode drawMode, java.util.Set<? extends androidx.wear.watchface.style.WatchFaceLayer> watchFaceLayers);
+ ctor public RenderParameters(androidx.wear.watchface.DrawMode drawMode, java.util.Set<? extends androidx.wear.watchface.style.WatchFaceLayer> watchFaceLayers, optional androidx.wear.watchface.RenderParameters.HighlightLayer? highlightLayer);
+ ctor public RenderParameters(androidx.wear.watchface.DrawMode drawMode, java.util.Set<? extends androidx.wear.watchface.style.WatchFaceLayer> watchFaceLayers, optional androidx.wear.watchface.RenderParameters.HighlightLayer? highlightLayer, optional java.util.Map<java.lang.Integer,androidx.wear.watchface.TapEvent> lastComplicationTapDownEvents);
method public androidx.wear.watchface.DrawMode getDrawMode();
method public androidx.wear.watchface.RenderParameters.HighlightLayer? getHighlightLayer();
method public java.util.Map<java.lang.Integer,androidx.wear.watchface.TapEvent> getLastComplicationTapDownEvents();
@@ -212,8 +212,8 @@
}
@Deprecated public abstract static class Renderer.CanvasRenderer extends androidx.wear.watchface.Renderer {
- ctor @Deprecated @WorkerThread public Renderer.CanvasRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, int canvasType, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional boolean clearWithBackgroundTintBeforeRenderingHighlightLayer);
ctor @Deprecated @WorkerThread public Renderer.CanvasRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, int canvasType, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis);
+ ctor @Deprecated @WorkerThread public Renderer.CanvasRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, int canvasType, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional boolean clearWithBackgroundTintBeforeRenderingHighlightLayer);
method @Deprecated public final boolean getClearWithBackgroundTintBeforeRenderingHighlightLayer();
method @Deprecated @UiThread public suspend Object? init(kotlin.coroutines.Continuation<? super kotlin.Unit>);
method @Deprecated public void onDump(java.io.PrintWriter writer);
@@ -225,17 +225,17 @@
public abstract static class Renderer.CanvasRenderer2<SharedAssetsT extends androidx.wear.watchface.Renderer.SharedAssets> extends androidx.wear.watchface.Renderer.CanvasRenderer {
ctor @WorkerThread public Renderer.CanvasRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, int canvasType, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, boolean clearWithBackgroundTintBeforeRenderingHighlightLayer);
method @WorkerThread protected abstract suspend Object? createSharedAssets(kotlin.coroutines.Continuation<? super SharedAssetsT>);
- method @UiThread public abstract void render(android.graphics.Canvas canvas, android.graphics.Rect bounds, java.time.ZonedDateTime zonedDateTime, SharedAssetsT sharedAssets);
method public final void render(android.graphics.Canvas canvas, android.graphics.Rect bounds, java.time.ZonedDateTime zonedDateTime);
- method @UiThread public abstract void renderHighlightLayer(android.graphics.Canvas canvas, android.graphics.Rect bounds, java.time.ZonedDateTime zonedDateTime, SharedAssetsT sharedAssets);
+ method @UiThread public abstract void render(android.graphics.Canvas canvas, android.graphics.Rect bounds, java.time.ZonedDateTime zonedDateTime, SharedAssetsT sharedAssets);
method public final void renderHighlightLayer(android.graphics.Canvas canvas, android.graphics.Rect bounds, java.time.ZonedDateTime zonedDateTime);
+ method @UiThread public abstract void renderHighlightLayer(android.graphics.Canvas canvas, android.graphics.Rect bounds, java.time.ZonedDateTime zonedDateTime, SharedAssetsT sharedAssets);
}
@Deprecated public abstract static class Renderer.GlesRenderer extends androidx.wear.watchface.Renderer {
- ctor @Deprecated @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList, optional int[] eglContextAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
- ctor @Deprecated @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
- ctor @Deprecated @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
ctor @Deprecated @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
+ ctor @Deprecated @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
+ ctor @Deprecated @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
+ ctor @Deprecated @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList, optional int[] eglContextAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
method @Deprecated public final android.opengl.EGLContext getEglBackgroundThreadContext();
method @Deprecated public final android.opengl.EGLConfig getEglConfig();
method @Deprecated public final android.opengl.EGLDisplay getEglDisplay();
@@ -260,15 +260,15 @@
}
public abstract static class Renderer.GlesRenderer2<SharedAssetsT extends androidx.wear.watchface.Renderer.SharedAssets> extends androidx.wear.watchface.Renderer.GlesRenderer {
- ctor @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList, optional int[] eglContextAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
- ctor @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
- ctor @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
ctor @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
+ ctor @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
+ ctor @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
+ ctor @WorkerThread @kotlin.jvm.Throws(exceptionClasses=GlesException::class) public Renderer.GlesRenderer2(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.CurrentUserStyleRepository currentUserStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0L, to=60000L) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList, optional int[] eglContextAttribList) throws androidx.wear.watchface.Renderer.GlesRenderer.GlesException;
method @WorkerThread protected abstract suspend Object? createSharedAssets(kotlin.coroutines.Continuation<? super SharedAssetsT>);
- method @UiThread public abstract void render(java.time.ZonedDateTime zonedDateTime, SharedAssetsT sharedAssets);
method public final void render(java.time.ZonedDateTime zonedDateTime);
- method @UiThread public abstract void renderHighlightLayer(java.time.ZonedDateTime zonedDateTime, SharedAssetsT sharedAssets);
+ method @UiThread public abstract void render(java.time.ZonedDateTime zonedDateTime, SharedAssetsT sharedAssets);
method public final void renderHighlightLayer(java.time.ZonedDateTime zonedDateTime);
+ method @UiThread public abstract void renderHighlightLayer(java.time.ZonedDateTime zonedDateTime, SharedAssetsT sharedAssets);
}
public static interface Renderer.SharedAssets {
@@ -317,8 +317,8 @@
}
public static final class WatchFace.LegacyWatchFaceOverlayStyle {
- ctor public WatchFace.LegacyWatchFaceOverlayStyle(int viewProtectionMode, int statusBarGravity, boolean tapEventsAccepted, optional @ColorInt int accentColor);
ctor public WatchFace.LegacyWatchFaceOverlayStyle(int viewProtectionMode, int statusBarGravity, boolean tapEventsAccepted);
+ ctor public WatchFace.LegacyWatchFaceOverlayStyle(int viewProtectionMode, int statusBarGravity, boolean tapEventsAccepted, optional @ColorInt int accentColor);
method public int getAccentColor();
method public int getStatusBarGravity();
method public boolean getTapEventsAccepted();
@@ -330,8 +330,8 @@
}
public static final class WatchFace.OverlayStyle {
- ctor public WatchFace.OverlayStyle(android.graphics.Color? backgroundColor, android.graphics.Color? foregroundColor);
ctor public WatchFace.OverlayStyle();
+ ctor public WatchFace.OverlayStyle(android.graphics.Color? backgroundColor, android.graphics.Color? foregroundColor);
method public android.graphics.Color? getBackgroundColor();
method public android.graphics.Color? getForegroundColor();
property public final android.graphics.Color? backgroundColor;
@@ -361,8 +361,8 @@
}
public final class WatchState {
- ctor public WatchState(kotlinx.coroutines.flow.StateFlow<java.lang.Integer> interruptionFilter, kotlinx.coroutines.flow.StateFlow<java.lang.Boolean> isAmbient, kotlinx.coroutines.flow.StateFlow<java.lang.Boolean> isBatteryLowAndNotCharging, kotlinx.coroutines.flow.StateFlow<java.lang.Boolean> isVisible, boolean hasLowBitAmbient, boolean hasBurnInProtection, long analogPreviewReferenceTimeMillis, long digitalPreviewReferenceTimeMillis, @Px int chinHeight, boolean isHeadless, kotlinx.coroutines.flow.StateFlow<java.lang.String> watchFaceInstanceId);
ctor @Deprecated public WatchState(kotlinx.coroutines.flow.StateFlow<java.lang.Integer> interruptionFilter, kotlinx.coroutines.flow.StateFlow<java.lang.Boolean> isAmbient, kotlinx.coroutines.flow.StateFlow<java.lang.Boolean> isBatteryLowAndNotCharging, kotlinx.coroutines.flow.StateFlow<java.lang.Boolean> isVisible, boolean hasLowBitAmbient, boolean hasBurnInProtection, long analogPreviewReferenceTimeMillis, long digitalPreviewReferenceTimeMillis, int chinHeight, boolean isHeadless);
+ ctor public WatchState(kotlinx.coroutines.flow.StateFlow<java.lang.Integer> interruptionFilter, kotlinx.coroutines.flow.StateFlow<java.lang.Boolean> isAmbient, kotlinx.coroutines.flow.StateFlow<java.lang.Boolean> isBatteryLowAndNotCharging, kotlinx.coroutines.flow.StateFlow<java.lang.Boolean> isVisible, boolean hasLowBitAmbient, boolean hasBurnInProtection, long analogPreviewReferenceTimeMillis, long digitalPreviewReferenceTimeMillis, @Px int chinHeight, boolean isHeadless, kotlinx.coroutines.flow.StateFlow<java.lang.String> watchFaceInstanceId);
method public long getAnalogPreviewReferenceTimeMillis();
method @Px public int getChinHeight();
method public long getDigitalPreviewReferenceTimeMillis();
diff --git a/wear/watchface/watchface/samples/app/build.gradle b/wear/watchface/watchface/samples/app/build.gradle
index 875f848..101b6ba 100644
--- a/wear/watchface/watchface/samples/app/build.gradle
+++ b/wear/watchface/watchface/samples/app/build.gradle
@@ -26,7 +26,7 @@
}
androidx {
- name = "AndroidX Wear Watchface Samples app"
+ name = "Wear Watchface Samples app"
type = LibraryType.SAMPLES
inceptionYear = "2021"
description = "APK for the sample code for the Androidx Wear Watchface library"
diff --git a/wear/watchface/watchface/samples/build.gradle b/wear/watchface/watchface/samples/build.gradle
index 0e89628..f7b78e9 100644
--- a/wear/watchface/watchface/samples/build.gradle
+++ b/wear/watchface/watchface/samples/build.gradle
@@ -33,7 +33,7 @@
}
androidx {
- name = "AndroidX Wear Watchface Samples"
+ name = "Wear Watchface Samples"
type = LibraryType.SAMPLES
inceptionYear = "2020"
description = "Contains the sample code for the Androidx Wear Watchface library"
diff --git a/wear/watchface/watchface/samples/minimal/build.gradle b/wear/watchface/watchface/samples/minimal/build.gradle
index 38d5ed5..c8e5139 100644
--- a/wear/watchface/watchface/samples/minimal/build.gradle
+++ b/wear/watchface/watchface/samples/minimal/build.gradle
@@ -28,7 +28,7 @@
}
androidx {
- name = "AndroidX Wear Watchface Minimal Sample"
+ name = "Wear Watchface Minimal Sample"
type = LibraryType.SAMPLES
inceptionYear = "2021"
description = "Contains the sample code for the Androidx Wear Watchface library"
diff --git a/wear/wear-input-testing/build.gradle b/wear/wear-input-testing/build.gradle
index 6952126..d422e13 100644
--- a/wear/wear-input-testing/build.gradle
+++ b/wear/wear-input-testing/build.gradle
@@ -34,9 +34,9 @@
}
androidx {
- name = "Android Wear Support Input Testing Helpers"
+ name = "Android Wear Input Testing Extensions"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.WEAR_INPUT_TESTING
inceptionYear = "2020"
- description = "Android Wear Support Input Testing Helpers"
+ description = "Android Wear Support Input Testing Helpers"
}
diff --git a/wear/wear-input/build.gradle b/wear/wear-input/build.gradle
index 8301f64d..5b5c6d9 100644
--- a/wear/wear-input/build.gradle
+++ b/wear/wear-input/build.gradle
@@ -51,7 +51,7 @@
}
androidx {
- name = "Android Wear Support Input"
+ name = "Android Wear Input"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.WEAR_INPUT
inceptionYear = "2020"
diff --git a/wear/wear-ongoing/api/current.txt b/wear/wear-ongoing/api/current.txt
index 274d7b7..32a3c25 100644
--- a/wear/wear-ongoing/api/current.txt
+++ b/wear/wear-ongoing/api/current.txt
@@ -15,9 +15,9 @@
method public long getTimestamp();
method public String? getTitle();
method public android.app.PendingIntent getTouchIntent();
- method public static androidx.wear.ongoing.OngoingActivity? recoverOngoingActivity(android.content.Context, java.util.function.Predicate<androidx.wear.ongoing.OngoingActivity!>);
method public static androidx.wear.ongoing.OngoingActivity? recoverOngoingActivity(android.content.Context);
method public static androidx.wear.ongoing.OngoingActivity? recoverOngoingActivity(android.content.Context, int);
+ method public static androidx.wear.ongoing.OngoingActivity? recoverOngoingActivity(android.content.Context, java.util.function.Predicate<androidx.wear.ongoing.OngoingActivity!>);
method @RequiresPermission(android.Manifest.permission.POST_NOTIFICATIONS) public void update(android.content.Context, androidx.wear.ongoing.Status);
}
@@ -65,9 +65,9 @@
}
public static final class Status.StopwatchPart extends androidx.wear.ongoing.Status.TimerOrStopwatchPart {
- ctor public Status.StopwatchPart(long, long, long);
- ctor public Status.StopwatchPart(long, long);
ctor public Status.StopwatchPart(long);
+ ctor public Status.StopwatchPart(long, long);
+ ctor public Status.StopwatchPart(long, long, long);
}
public static final class Status.TextPart extends androidx.wear.ongoing.Status.Part {
@@ -88,9 +88,9 @@
}
public static final class Status.TimerPart extends androidx.wear.ongoing.Status.TimerOrStopwatchPart {
- ctor public Status.TimerPart(long, long, long);
- ctor public Status.TimerPart(long, long);
ctor public Status.TimerPart(long);
+ ctor public Status.TimerPart(long, long);
+ ctor public Status.TimerPart(long, long, long);
}
public interface TimeDependentText {
diff --git a/wear/wear-ongoing/api/public_plus_experimental_current.txt b/wear/wear-ongoing/api/public_plus_experimental_current.txt
index 274d7b7..32a3c25 100644
--- a/wear/wear-ongoing/api/public_plus_experimental_current.txt
+++ b/wear/wear-ongoing/api/public_plus_experimental_current.txt
@@ -15,9 +15,9 @@
method public long getTimestamp();
method public String? getTitle();
method public android.app.PendingIntent getTouchIntent();
- method public static androidx.wear.ongoing.OngoingActivity? recoverOngoingActivity(android.content.Context, java.util.function.Predicate<androidx.wear.ongoing.OngoingActivity!>);
method public static androidx.wear.ongoing.OngoingActivity? recoverOngoingActivity(android.content.Context);
method public static androidx.wear.ongoing.OngoingActivity? recoverOngoingActivity(android.content.Context, int);
+ method public static androidx.wear.ongoing.OngoingActivity? recoverOngoingActivity(android.content.Context, java.util.function.Predicate<androidx.wear.ongoing.OngoingActivity!>);
method @RequiresPermission(android.Manifest.permission.POST_NOTIFICATIONS) public void update(android.content.Context, androidx.wear.ongoing.Status);
}
@@ -65,9 +65,9 @@
}
public static final class Status.StopwatchPart extends androidx.wear.ongoing.Status.TimerOrStopwatchPart {
- ctor public Status.StopwatchPart(long, long, long);
- ctor public Status.StopwatchPart(long, long);
ctor public Status.StopwatchPart(long);
+ ctor public Status.StopwatchPart(long, long);
+ ctor public Status.StopwatchPart(long, long, long);
}
public static final class Status.TextPart extends androidx.wear.ongoing.Status.Part {
@@ -88,9 +88,9 @@
}
public static final class Status.TimerPart extends androidx.wear.ongoing.Status.TimerOrStopwatchPart {
- ctor public Status.TimerPart(long, long, long);
- ctor public Status.TimerPart(long, long);
ctor public Status.TimerPart(long);
+ ctor public Status.TimerPart(long, long);
+ ctor public Status.TimerPart(long, long, long);
}
public interface TimeDependentText {
diff --git a/wear/wear-ongoing/api/restricted_current.txt b/wear/wear-ongoing/api/restricted_current.txt
index 274d7b7..32a3c25 100644
--- a/wear/wear-ongoing/api/restricted_current.txt
+++ b/wear/wear-ongoing/api/restricted_current.txt
@@ -15,9 +15,9 @@
method public long getTimestamp();
method public String? getTitle();
method public android.app.PendingIntent getTouchIntent();
- method public static androidx.wear.ongoing.OngoingActivity? recoverOngoingActivity(android.content.Context, java.util.function.Predicate<androidx.wear.ongoing.OngoingActivity!>);
method public static androidx.wear.ongoing.OngoingActivity? recoverOngoingActivity(android.content.Context);
method public static androidx.wear.ongoing.OngoingActivity? recoverOngoingActivity(android.content.Context, int);
+ method public static androidx.wear.ongoing.OngoingActivity? recoverOngoingActivity(android.content.Context, java.util.function.Predicate<androidx.wear.ongoing.OngoingActivity!>);
method @RequiresPermission(android.Manifest.permission.POST_NOTIFICATIONS) public void update(android.content.Context, androidx.wear.ongoing.Status);
}
@@ -65,9 +65,9 @@
}
public static final class Status.StopwatchPart extends androidx.wear.ongoing.Status.TimerOrStopwatchPart {
- ctor public Status.StopwatchPart(long, long, long);
- ctor public Status.StopwatchPart(long, long);
ctor public Status.StopwatchPart(long);
+ ctor public Status.StopwatchPart(long, long);
+ ctor public Status.StopwatchPart(long, long, long);
}
public static final class Status.TextPart extends androidx.wear.ongoing.Status.Part {
@@ -88,9 +88,9 @@
}
public static final class Status.TimerPart extends androidx.wear.ongoing.Status.TimerOrStopwatchPart {
- ctor public Status.TimerPart(long, long, long);
- ctor public Status.TimerPart(long, long);
ctor public Status.TimerPart(long);
+ ctor public Status.TimerPart(long, long);
+ ctor public Status.TimerPart(long, long, long);
}
public interface TimeDependentText {
diff --git a/wear/wear-ongoing/build.gradle b/wear/wear-ongoing/build.gradle
index 8baebed..0985190 100644
--- a/wear/wear-ongoing/build.gradle
+++ b/wear/wear-ongoing/build.gradle
@@ -32,7 +32,7 @@
}
androidx {
- name = "Android Wear Ongoing Activities"
+ name = "Android Wear Ongoing"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.WEAR_ONGOING
inceptionYear = "2021"
diff --git a/wear/wear-ongoing/src/test/java/androidx/wear/ongoing/OngoingActivityStatusTest.kt b/wear/wear-ongoing/src/test/java/androidx/wear/ongoing/OngoingActivityStatusTest.kt
index 31c702f..ca17fe6 100644
--- a/wear/wear-ongoing/src/test/java/androidx/wear/ongoing/OngoingActivityStatusTest.kt
+++ b/wear/wear-ongoing/src/test/java/androidx/wear/ongoing/OngoingActivityStatusTest.kt
@@ -3,6 +3,7 @@
import android.content.Context
import android.os.Build
import androidx.test.core.app.ApplicationProvider
+import java.lang.IllegalStateException
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNull
import org.junit.Before
@@ -10,7 +11,6 @@
import org.junit.runner.RunWith
import org.robolectric.annotation.Config
import org.robolectric.annotation.internal.DoNotInstrument
-import java.lang.IllegalStateException
@RunWith(PatchedRobolectricTestRunner::class)
@DoNotInstrument
diff --git a/wear/wear-phone-interactions/api/current.txt b/wear/wear-phone-interactions/api/current.txt
index 787f956..0be3c03 100644
--- a/wear/wear-phone-interactions/api/current.txt
+++ b/wear/wear-phone-interactions/api/current.txt
@@ -25,8 +25,8 @@
}
@RequiresApi(android.os.Build.VERSION_CODES.O) public final class CodeVerifier {
- ctor public CodeVerifier(optional int byteLength);
ctor public CodeVerifier();
+ ctor public CodeVerifier(optional int byteLength);
ctor public CodeVerifier(String value);
method public String getValue();
property public final String value;
diff --git a/wear/wear-phone-interactions/api/public_plus_experimental_current.txt b/wear/wear-phone-interactions/api/public_plus_experimental_current.txt
index 787f956..0be3c03 100644
--- a/wear/wear-phone-interactions/api/public_plus_experimental_current.txt
+++ b/wear/wear-phone-interactions/api/public_plus_experimental_current.txt
@@ -25,8 +25,8 @@
}
@RequiresApi(android.os.Build.VERSION_CODES.O) public final class CodeVerifier {
- ctor public CodeVerifier(optional int byteLength);
ctor public CodeVerifier();
+ ctor public CodeVerifier(optional int byteLength);
ctor public CodeVerifier(String value);
method public String getValue();
property public final String value;
diff --git a/wear/wear-phone-interactions/api/restricted_current.txt b/wear/wear-phone-interactions/api/restricted_current.txt
index 6266575..0ee9fd0 100644
--- a/wear/wear-phone-interactions/api/restricted_current.txt
+++ b/wear/wear-phone-interactions/api/restricted_current.txt
@@ -25,8 +25,8 @@
}
@RequiresApi(android.os.Build.VERSION_CODES.O) public final class CodeVerifier {
- ctor public CodeVerifier(optional int byteLength);
ctor public CodeVerifier();
+ ctor public CodeVerifier(optional int byteLength);
ctor public CodeVerifier(String value);
method public String getValue();
property public final String value;
diff --git a/wear/wear-phone-interactions/src/test/java/androidx/wear/phone/interactions/authentication/RemoteAuthTest.kt b/wear/wear-phone-interactions/src/test/java/androidx/wear/phone/interactions/authentication/RemoteAuthTest.kt
index 2d0b389..1f175a9 100644
--- a/wear/wear-phone-interactions/src/test/java/androidx/wear/phone/interactions/authentication/RemoteAuthTest.kt
+++ b/wear/wear-phone-interactions/src/test/java/androidx/wear/phone/interactions/authentication/RemoteAuthTest.kt
@@ -29,13 +29,13 @@
import androidx.test.core.app.ApplicationProvider
import androidx.wear.phone.interactions.WearPhoneInteractionsTestRunner
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.Executor
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mockito
import org.robolectric.Shadows
import org.robolectric.annotation.Config
import org.robolectric.annotation.internal.DoNotInstrument
-import java.util.concurrent.Executor
/** Unit tests for [RemoteAuthClient]. */
@RunWith(WearPhoneInteractionsTestRunner::class)
diff --git a/wear/wear-phone-interactions/src/test/java/androidx/wear/phone/interactions/notifications/BridgingManagerTest.kt b/wear/wear-phone-interactions/src/test/java/androidx/wear/phone/interactions/notifications/BridgingManagerTest.kt
index 7946e50..e49909c 100644
--- a/wear/wear-phone-interactions/src/test/java/androidx/wear/phone/interactions/notifications/BridgingManagerTest.kt
+++ b/wear/wear-phone-interactions/src/test/java/androidx/wear/phone/interactions/notifications/BridgingManagerTest.kt
@@ -20,12 +20,12 @@
import android.content.pm.PackageManager
import androidx.wear.phone.interactions.WearPhoneInteractionsTestRunner
import com.google.common.truth.Truth.assertThat
+import java.util.Arrays
import org.junit.Test
import org.junit.runner.RunWith
-import org.mockito.Mockito.`when`
import org.mockito.Mockito.mock
+import org.mockito.Mockito.`when`
import org.robolectric.annotation.internal.DoNotInstrument
-import java.util.Arrays
/** Unit tests for [BridgingManager]. */
@RunWith(WearPhoneInteractionsTestRunner::class)
diff --git a/wear/wear-remote-interactions/api/current.txt b/wear/wear-remote-interactions/api/current.txt
index 208fcb7..287f61d 100644
--- a/wear/wear-remote-interactions/api/current.txt
+++ b/wear/wear-remote-interactions/api/current.txt
@@ -5,8 +5,8 @@
ctor public RemoteActivityHelper(android.content.Context context, optional java.util.concurrent.Executor executor);
method public static android.content.Intent? getTargetIntent(android.content.Intent intent);
method public static String? getTargetNodeId(android.content.Intent intent);
- method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> startRemoteActivity(android.content.Intent targetIntent, optional String? targetNodeId);
method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> startRemoteActivity(android.content.Intent targetIntent);
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> startRemoteActivity(android.content.Intent targetIntent, optional String? targetNodeId);
field public static final String ACTION_REMOTE_INTENT = "com.google.android.wearable.intent.action.REMOTE_INTENT";
field public static final androidx.wear.remote.interactions.RemoteActivityHelper.Companion Companion;
field public static final int RESULT_FAILED = 1; // 0x1
diff --git a/wear/wear-remote-interactions/api/public_plus_experimental_current.txt b/wear/wear-remote-interactions/api/public_plus_experimental_current.txt
index 208fcb7..287f61d 100644
--- a/wear/wear-remote-interactions/api/public_plus_experimental_current.txt
+++ b/wear/wear-remote-interactions/api/public_plus_experimental_current.txt
@@ -5,8 +5,8 @@
ctor public RemoteActivityHelper(android.content.Context context, optional java.util.concurrent.Executor executor);
method public static android.content.Intent? getTargetIntent(android.content.Intent intent);
method public static String? getTargetNodeId(android.content.Intent intent);
- method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> startRemoteActivity(android.content.Intent targetIntent, optional String? targetNodeId);
method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> startRemoteActivity(android.content.Intent targetIntent);
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> startRemoteActivity(android.content.Intent targetIntent, optional String? targetNodeId);
field public static final String ACTION_REMOTE_INTENT = "com.google.android.wearable.intent.action.REMOTE_INTENT";
field public static final androidx.wear.remote.interactions.RemoteActivityHelper.Companion Companion;
field public static final int RESULT_FAILED = 1; // 0x1
diff --git a/wear/wear-remote-interactions/api/restricted_current.txt b/wear/wear-remote-interactions/api/restricted_current.txt
index 208fcb7..287f61d 100644
--- a/wear/wear-remote-interactions/api/restricted_current.txt
+++ b/wear/wear-remote-interactions/api/restricted_current.txt
@@ -5,8 +5,8 @@
ctor public RemoteActivityHelper(android.content.Context context, optional java.util.concurrent.Executor executor);
method public static android.content.Intent? getTargetIntent(android.content.Intent intent);
method public static String? getTargetNodeId(android.content.Intent intent);
- method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> startRemoteActivity(android.content.Intent targetIntent, optional String? targetNodeId);
method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> startRemoteActivity(android.content.Intent targetIntent);
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> startRemoteActivity(android.content.Intent targetIntent, optional String? targetNodeId);
field public static final String ACTION_REMOTE_INTENT = "com.google.android.wearable.intent.action.REMOTE_INTENT";
field public static final androidx.wear.remote.interactions.RemoteActivityHelper.Companion Companion;
field public static final int RESULT_FAILED = 1; // 0x1
diff --git a/wear/wear-remote-interactions/src/test/java/androidx/wear/remote/interactions/RemoteActivityHelperTest.kt b/wear/wear-remote-interactions/src/test/java/androidx/wear/remote/interactions/RemoteActivityHelperTest.kt
index b5c09d4..c043ba5 100644
--- a/wear/wear-remote-interactions/src/test/java/androidx/wear/remote/interactions/RemoteActivityHelperTest.kt
+++ b/wear/wear-remote-interactions/src/test/java/androidx/wear/remote/interactions/RemoteActivityHelperTest.kt
@@ -30,13 +30,14 @@
import androidx.wear.remote.interactions.RemoteActivityHelper.Companion.DEFAULT_PACKAGE
import androidx.wear.remote.interactions.RemoteActivityHelper.Companion.RESULT_FAILED
import androidx.wear.remote.interactions.RemoteActivityHelper.Companion.RESULT_OK
+import androidx.wear.remote.interactions.RemoteActivityHelper.Companion.getRemoteIntentResultReceiver
import androidx.wear.remote.interactions.RemoteActivityHelper.Companion.getTargetIntent
import androidx.wear.remote.interactions.RemoteActivityHelper.Companion.getTargetNodeId
-import androidx.wear.remote.interactions.RemoteActivityHelper.Companion.getRemoteIntentResultReceiver
import com.google.android.gms.tasks.Tasks
import com.google.android.gms.wearable.Node
import com.google.android.gms.wearable.NodeClient
-import org.mockito.kotlin.mock
+import java.util.concurrent.ExecutionException
+import java.util.concurrent.Executor
import org.junit.Assert.assertEquals
import org.junit.Assert.assertThrows
import org.junit.Assert.assertTrue
@@ -47,11 +48,10 @@
import org.mockito.ArgumentMatchers.any
import org.mockito.Mock
import org.mockito.Mockito
+import org.mockito.kotlin.mock
import org.robolectric.Shadows.shadowOf
import org.robolectric.annotation.Config
import org.robolectric.annotation.Implements
-import java.util.concurrent.ExecutionException
-import java.util.concurrent.Executor
@RunWith(WearRemoteInteractionsTestRunner::class)
@Config(shadows = [RemoteActivityHelperTest.ActualResultReceiver::class])
diff --git a/wear/wear/api/current.txt b/wear/wear/api/current.txt
index f28511a1..40f7aad 100644
--- a/wear/wear/api/current.txt
+++ b/wear/wear/api/current.txt
@@ -37,8 +37,8 @@
}
public final class AmbientLifecycleObserverKt {
- method public static androidx.wear.ambient.AmbientLifecycleObserver AmbientLifecycleObserver(android.app.Activity activity, java.util.concurrent.Executor callbackExecutor, androidx.wear.ambient.AmbientLifecycleObserver.AmbientLifecycleCallback callbacks);
method public static androidx.wear.ambient.AmbientLifecycleObserver AmbientLifecycleObserver(android.app.Activity activity, androidx.wear.ambient.AmbientLifecycleObserver.AmbientLifecycleCallback callbacks);
+ method public static androidx.wear.ambient.AmbientLifecycleObserver AmbientLifecycleObserver(android.app.Activity activity, java.util.concurrent.Executor callbackExecutor, androidx.wear.ambient.AmbientLifecycleObserver.AmbientLifecycleCallback callbacks);
}
@Deprecated public final class AmbientMode extends android.app.Fragment {
@@ -166,8 +166,8 @@
public static class ArcLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
ctor public ArcLayout.LayoutParams(android.content.Context, android.util.AttributeSet?);
- ctor public ArcLayout.LayoutParams(int, int);
ctor public ArcLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public ArcLayout.LayoutParams(int, int);
method public int getVerticalAlignment();
method public float getWeight();
method public boolean isRotated();
@@ -196,13 +196,13 @@
public static class BoxInsetLayout.LayoutParams extends android.widget.FrameLayout.LayoutParams {
ctor public BoxInsetLayout.LayoutParams(android.content.Context, android.util.AttributeSet?);
- ctor public BoxInsetLayout.LayoutParams(int, int);
- ctor public BoxInsetLayout.LayoutParams(int, int, int);
- ctor public BoxInsetLayout.LayoutParams(int, int, int, int);
ctor public BoxInsetLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
ctor public BoxInsetLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
ctor public BoxInsetLayout.LayoutParams(android.widget.FrameLayout.LayoutParams);
ctor public BoxInsetLayout.LayoutParams(androidx.wear.widget.BoxInsetLayout.LayoutParams);
+ ctor public BoxInsetLayout.LayoutParams(int, int);
+ ctor public BoxInsetLayout.LayoutParams(int, int, int);
+ ctor public BoxInsetLayout.LayoutParams(int, int, int, int);
field public static final int BOX_ALL = 15; // 0xf
field public static final int BOX_BOTTOM = 8; // 0x8
field public static final int BOX_LEFT = 1; // 0x1
@@ -244,8 +244,8 @@
ctor public ConfirmationOverlay();
method public androidx.wear.widget.ConfirmationOverlay setDuration(int);
method @Deprecated public androidx.wear.widget.ConfirmationOverlay setFinishedAnimationListener(androidx.wear.widget.ConfirmationOverlay.OnAnimationFinishedListener?);
- method @Deprecated public androidx.wear.widget.ConfirmationOverlay setMessage(String);
method public androidx.wear.widget.ConfirmationOverlay setMessage(CharSequence);
+ method @Deprecated public androidx.wear.widget.ConfirmationOverlay setMessage(String);
method public androidx.wear.widget.ConfirmationOverlay setOnAnimationFinishedListener(androidx.wear.widget.ConfirmationOverlay.OnAnimationFinishedListener?);
method public androidx.wear.widget.ConfirmationOverlay setType(@androidx.wear.widget.ConfirmationOverlay.OverlayType int);
method @MainThread public void showAbove(android.view.View);
@@ -296,8 +296,8 @@
method public void setText(String?);
method public void setTextColor(@ColorInt int);
method public void setTextSize(float);
- method public void setTypeface(android.graphics.Typeface?, int);
method public void setTypeface(android.graphics.Typeface?);
+ method public void setTypeface(android.graphics.Typeface?, int);
}
public class CurvingLayoutCallback extends androidx.wear.widget.WearableLinearLayoutManager.LayoutCallback {
@@ -367,8 +367,8 @@
}
public class WearableLinearLayoutManager extends androidx.recyclerview.widget.LinearLayoutManager {
- ctor public WearableLinearLayoutManager(android.content.Context!, androidx.wear.widget.WearableLinearLayoutManager.LayoutCallback!);
ctor public WearableLinearLayoutManager(android.content.Context!);
+ ctor public WearableLinearLayoutManager(android.content.Context!, androidx.wear.widget.WearableLinearLayoutManager.LayoutCallback!);
method public androidx.wear.widget.WearableLinearLayoutManager.LayoutCallback? getLayoutCallback();
method public void setLayoutCallback(androidx.wear.widget.WearableLinearLayoutManager.LayoutCallback?);
}
diff --git a/wear/wear/api/public_plus_experimental_current.txt b/wear/wear/api/public_plus_experimental_current.txt
index f28511a1..40f7aad 100644
--- a/wear/wear/api/public_plus_experimental_current.txt
+++ b/wear/wear/api/public_plus_experimental_current.txt
@@ -37,8 +37,8 @@
}
public final class AmbientLifecycleObserverKt {
- method public static androidx.wear.ambient.AmbientLifecycleObserver AmbientLifecycleObserver(android.app.Activity activity, java.util.concurrent.Executor callbackExecutor, androidx.wear.ambient.AmbientLifecycleObserver.AmbientLifecycleCallback callbacks);
method public static androidx.wear.ambient.AmbientLifecycleObserver AmbientLifecycleObserver(android.app.Activity activity, androidx.wear.ambient.AmbientLifecycleObserver.AmbientLifecycleCallback callbacks);
+ method public static androidx.wear.ambient.AmbientLifecycleObserver AmbientLifecycleObserver(android.app.Activity activity, java.util.concurrent.Executor callbackExecutor, androidx.wear.ambient.AmbientLifecycleObserver.AmbientLifecycleCallback callbacks);
}
@Deprecated public final class AmbientMode extends android.app.Fragment {
@@ -166,8 +166,8 @@
public static class ArcLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
ctor public ArcLayout.LayoutParams(android.content.Context, android.util.AttributeSet?);
- ctor public ArcLayout.LayoutParams(int, int);
ctor public ArcLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public ArcLayout.LayoutParams(int, int);
method public int getVerticalAlignment();
method public float getWeight();
method public boolean isRotated();
@@ -196,13 +196,13 @@
public static class BoxInsetLayout.LayoutParams extends android.widget.FrameLayout.LayoutParams {
ctor public BoxInsetLayout.LayoutParams(android.content.Context, android.util.AttributeSet?);
- ctor public BoxInsetLayout.LayoutParams(int, int);
- ctor public BoxInsetLayout.LayoutParams(int, int, int);
- ctor public BoxInsetLayout.LayoutParams(int, int, int, int);
ctor public BoxInsetLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
ctor public BoxInsetLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
ctor public BoxInsetLayout.LayoutParams(android.widget.FrameLayout.LayoutParams);
ctor public BoxInsetLayout.LayoutParams(androidx.wear.widget.BoxInsetLayout.LayoutParams);
+ ctor public BoxInsetLayout.LayoutParams(int, int);
+ ctor public BoxInsetLayout.LayoutParams(int, int, int);
+ ctor public BoxInsetLayout.LayoutParams(int, int, int, int);
field public static final int BOX_ALL = 15; // 0xf
field public static final int BOX_BOTTOM = 8; // 0x8
field public static final int BOX_LEFT = 1; // 0x1
@@ -244,8 +244,8 @@
ctor public ConfirmationOverlay();
method public androidx.wear.widget.ConfirmationOverlay setDuration(int);
method @Deprecated public androidx.wear.widget.ConfirmationOverlay setFinishedAnimationListener(androidx.wear.widget.ConfirmationOverlay.OnAnimationFinishedListener?);
- method @Deprecated public androidx.wear.widget.ConfirmationOverlay setMessage(String);
method public androidx.wear.widget.ConfirmationOverlay setMessage(CharSequence);
+ method @Deprecated public androidx.wear.widget.ConfirmationOverlay setMessage(String);
method public androidx.wear.widget.ConfirmationOverlay setOnAnimationFinishedListener(androidx.wear.widget.ConfirmationOverlay.OnAnimationFinishedListener?);
method public androidx.wear.widget.ConfirmationOverlay setType(@androidx.wear.widget.ConfirmationOverlay.OverlayType int);
method @MainThread public void showAbove(android.view.View);
@@ -296,8 +296,8 @@
method public void setText(String?);
method public void setTextColor(@ColorInt int);
method public void setTextSize(float);
- method public void setTypeface(android.graphics.Typeface?, int);
method public void setTypeface(android.graphics.Typeface?);
+ method public void setTypeface(android.graphics.Typeface?, int);
}
public class CurvingLayoutCallback extends androidx.wear.widget.WearableLinearLayoutManager.LayoutCallback {
@@ -367,8 +367,8 @@
}
public class WearableLinearLayoutManager extends androidx.recyclerview.widget.LinearLayoutManager {
- ctor public WearableLinearLayoutManager(android.content.Context!, androidx.wear.widget.WearableLinearLayoutManager.LayoutCallback!);
ctor public WearableLinearLayoutManager(android.content.Context!);
+ ctor public WearableLinearLayoutManager(android.content.Context!, androidx.wear.widget.WearableLinearLayoutManager.LayoutCallback!);
method public androidx.wear.widget.WearableLinearLayoutManager.LayoutCallback? getLayoutCallback();
method public void setLayoutCallback(androidx.wear.widget.WearableLinearLayoutManager.LayoutCallback?);
}
diff --git a/wear/wear/api/restricted_current.txt b/wear/wear/api/restricted_current.txt
index 60ff9cb..31c3f46 100644
--- a/wear/wear/api/restricted_current.txt
+++ b/wear/wear/api/restricted_current.txt
@@ -37,8 +37,8 @@
}
public final class AmbientLifecycleObserverKt {
- method public static androidx.wear.ambient.AmbientLifecycleObserver AmbientLifecycleObserver(android.app.Activity activity, java.util.concurrent.Executor callbackExecutor, androidx.wear.ambient.AmbientLifecycleObserver.AmbientLifecycleCallback callbacks);
method public static androidx.wear.ambient.AmbientLifecycleObserver AmbientLifecycleObserver(android.app.Activity activity, androidx.wear.ambient.AmbientLifecycleObserver.AmbientLifecycleCallback callbacks);
+ method public static androidx.wear.ambient.AmbientLifecycleObserver AmbientLifecycleObserver(android.app.Activity activity, java.util.concurrent.Executor callbackExecutor, androidx.wear.ambient.AmbientLifecycleObserver.AmbientLifecycleCallback callbacks);
}
@Deprecated public final class AmbientMode extends android.app.Fragment {
@@ -169,8 +169,8 @@
public static class ArcLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
ctor public ArcLayout.LayoutParams(android.content.Context, android.util.AttributeSet?);
- ctor public ArcLayout.LayoutParams(int, int);
ctor public ArcLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public ArcLayout.LayoutParams(int, int);
method @androidx.wear.widget.ArcLayout.LayoutParams.VerticalAlignment public int getVerticalAlignment();
method public float getWeight();
method public boolean isRotated();
@@ -202,13 +202,13 @@
public static class BoxInsetLayout.LayoutParams extends android.widget.FrameLayout.LayoutParams {
ctor public BoxInsetLayout.LayoutParams(android.content.Context, android.util.AttributeSet?);
- ctor public BoxInsetLayout.LayoutParams(int, int);
- ctor public BoxInsetLayout.LayoutParams(int, int, int);
- ctor public BoxInsetLayout.LayoutParams(int, int, int, int);
ctor public BoxInsetLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
ctor public BoxInsetLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
ctor public BoxInsetLayout.LayoutParams(android.widget.FrameLayout.LayoutParams);
ctor public BoxInsetLayout.LayoutParams(androidx.wear.widget.BoxInsetLayout.LayoutParams);
+ ctor public BoxInsetLayout.LayoutParams(int, int);
+ ctor public BoxInsetLayout.LayoutParams(int, int, int);
+ ctor public BoxInsetLayout.LayoutParams(int, int, int, int);
field public static final int BOX_ALL = 15; // 0xf
field public static final int BOX_BOTTOM = 8; // 0x8
field public static final int BOX_LEFT = 1; // 0x1
@@ -251,8 +251,8 @@
method @MainThread @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @VisibleForTesting public void hide();
method public androidx.wear.widget.ConfirmationOverlay setDuration(int);
method @Deprecated public androidx.wear.widget.ConfirmationOverlay setFinishedAnimationListener(androidx.wear.widget.ConfirmationOverlay.OnAnimationFinishedListener?);
- method @Deprecated public androidx.wear.widget.ConfirmationOverlay setMessage(String);
method public androidx.wear.widget.ConfirmationOverlay setMessage(CharSequence);
+ method @Deprecated public androidx.wear.widget.ConfirmationOverlay setMessage(String);
method public androidx.wear.widget.ConfirmationOverlay setOnAnimationFinishedListener(androidx.wear.widget.ConfirmationOverlay.OnAnimationFinishedListener?);
method public androidx.wear.widget.ConfirmationOverlay setType(@androidx.wear.widget.ConfirmationOverlay.OverlayType int);
method @MainThread public void showAbove(android.view.View);
@@ -303,8 +303,8 @@
method public void setText(String?);
method public void setTextColor(@ColorInt int);
method public void setTextSize(float);
- method public void setTypeface(android.graphics.Typeface?, int);
method public void setTypeface(android.graphics.Typeface?);
+ method public void setTypeface(android.graphics.Typeface?, int);
}
public class CurvingLayoutCallback extends androidx.wear.widget.WearableLinearLayoutManager.LayoutCallback {
@@ -374,8 +374,8 @@
}
public class WearableLinearLayoutManager extends androidx.recyclerview.widget.LinearLayoutManager {
- ctor public WearableLinearLayoutManager(android.content.Context!, androidx.wear.widget.WearableLinearLayoutManager.LayoutCallback!);
ctor public WearableLinearLayoutManager(android.content.Context!);
+ ctor public WearableLinearLayoutManager(android.content.Context!, androidx.wear.widget.WearableLinearLayoutManager.LayoutCallback!);
method public androidx.wear.widget.WearableLinearLayoutManager.LayoutCallback? getLayoutCallback();
method public void setLayoutCallback(androidx.wear.widget.WearableLinearLayoutManager.LayoutCallback?);
}
diff --git a/wear/wear/build.gradle b/wear/wear/build.gradle
index 83bcb50..ea42582 100644
--- a/wear/wear/build.gradle
+++ b/wear/wear/build.gradle
@@ -62,7 +62,7 @@
}
androidx {
- name = "Android Wear Support UI"
+ name = "Android Wear"
publish = Publish.SNAPSHOT_AND_RELEASE
mavenVersion = LibraryVersions.WEAR
inceptionYear = "2016"
diff --git a/wear/wear/src/androidTest/java/androidx/wear/widget/ArcLayoutTest.kt b/wear/wear/src/androidTest/java/androidx/wear/widget/ArcLayoutTest.kt
index 3409862..0c16c1a 100644
--- a/wear/wear/src/androidTest/java/androidx/wear/widget/ArcLayoutTest.kt
+++ b/wear/wear/src/androidTest/java/androidx/wear/widget/ArcLayoutTest.kt
@@ -54,6 +54,8 @@
import androidx.wear.widget.ArcLayout.LayoutParams.VERTICAL_ALIGN_OUTER
import androidx.wear.widget.util.AsyncViewActions.waitForMatchingView
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.hamcrest.CoreMatchers.allOf
import org.hamcrest.CoreMatchers.any
import org.hamcrest.Matcher
@@ -63,8 +65,6 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@RunWith(Parameterized::class)
@MediumTest
diff --git a/wear/wear/src/androidTest/java/androidx/wear/widget/CurvedTextViewTest.kt b/wear/wear/src/androidTest/java/androidx/wear/widget/CurvedTextViewTest.kt
index 34cec3d..96c10c8 100644
--- a/wear/wear/src/androidTest/java/androidx/wear/widget/CurvedTextViewTest.kt
+++ b/wear/wear/src/androidTest/java/androidx/wear/widget/CurvedTextViewTest.kt
@@ -29,11 +29,11 @@
import androidx.test.filters.MediumTest
import androidx.test.screenshot.AndroidXScreenshotTestRule
import androidx.test.screenshot.assertAgainstGolden
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@RunWith(AndroidJUnit4::class)
@MediumTest
diff --git a/wear/wear/src/main/java/androidx/wear/ambient/AmbientLifecycleObserver.kt b/wear/wear/src/main/java/androidx/wear/ambient/AmbientLifecycleObserver.kt
index 0f24c5b..97204f0 100644
--- a/wear/wear/src/main/java/androidx/wear/ambient/AmbientLifecycleObserver.kt
+++ b/wear/wear/src/main/java/androidx/wear/ambient/AmbientLifecycleObserver.kt
@@ -47,6 +47,12 @@
* }
* ```
*
+ * If the observer is registered while the device is in ambient mode, the registered callback
+ * will immediately receive a call to
+ * [AmbientLifecycleObserver.AmbientLifecycleCallback.onEnterAmbient]. If the device is in active
+ * mode, the callbacks will be registered, and `onEnterAmbient` will be called when the device next
+ * enters ambient mode.
+ *
* @param activity The activity that this observer is being attached to.
* @param callbackExecutor The executor to run the provided callbacks on.
* @param callbacks An instance of [AmbientLifecycleObserver.AmbientLifecycleCallback], used to
diff --git a/webkit/webkit/api/current.txt b/webkit/webkit/api/current.txt
index f1058a2..30fe4d1 100644
--- a/webkit/webkit/api/current.txt
+++ b/webkit/webkit/api/current.txt
@@ -39,8 +39,8 @@
ctor public ProxyConfig.Builder();
ctor public ProxyConfig.Builder(androidx.webkit.ProxyConfig);
method public androidx.webkit.ProxyConfig.Builder addBypassRule(String);
- method public androidx.webkit.ProxyConfig.Builder addDirect(String);
method public androidx.webkit.ProxyConfig.Builder addDirect();
+ method public androidx.webkit.ProxyConfig.Builder addDirect(String);
method public androidx.webkit.ProxyConfig.Builder addProxyRule(String);
method public androidx.webkit.ProxyConfig.Builder addProxyRule(String, String);
method public androidx.webkit.ProxyConfig build();
@@ -132,8 +132,8 @@
public abstract class WebMessagePortCompat {
method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_MESSAGE_PORT_CLOSE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void close();
method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_MESSAGE_PORT_POST_MESSAGE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void postMessage(androidx.webkit.WebMessageCompat);
- method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_MESSAGE_PORT_SET_MESSAGE_CALLBACK, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void setWebMessageCallback(androidx.webkit.WebMessagePortCompat.WebMessageCallbackCompat);
method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_MESSAGE_PORT_SET_MESSAGE_CALLBACK, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void setWebMessageCallback(android.os.Handler?, androidx.webkit.WebMessagePortCompat.WebMessageCallbackCompat);
+ method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_MESSAGE_PORT_SET_MESSAGE_CALLBACK, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void setWebMessageCallback(androidx.webkit.WebMessagePortCompat.WebMessageCallbackCompat);
}
public abstract static class WebMessagePortCompat.WebMessageCallbackCompat {
@@ -231,8 +231,8 @@
method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_MESSAGE_LISTENER, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void removeWebMessageListener(android.webkit.WebView, String);
method @RequiresFeature(name=androidx.webkit.WebViewFeature.SAFE_BROWSING_ALLOWLIST, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void setSafeBrowsingAllowlist(java.util.Set<java.lang.String!>, android.webkit.ValueCallback<java.lang.Boolean!>?);
method @Deprecated @RequiresFeature(name=androidx.webkit.WebViewFeature.SAFE_BROWSING_WHITELIST, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void setSafeBrowsingWhitelist(java.util.List<java.lang.String!>, android.webkit.ValueCallback<java.lang.Boolean!>?);
- method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void setWebViewRenderProcessClient(android.webkit.WebView, java.util.concurrent.Executor, androidx.webkit.WebViewRenderProcessClient);
method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void setWebViewRenderProcessClient(android.webkit.WebView, androidx.webkit.WebViewRenderProcessClient?);
+ method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void setWebViewRenderProcessClient(android.webkit.WebView, java.util.concurrent.Executor, androidx.webkit.WebViewRenderProcessClient);
method @RequiresFeature(name=androidx.webkit.WebViewFeature.START_SAFE_BROWSING, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void startSafeBrowsing(android.content.Context, android.webkit.ValueCallback<java.lang.Boolean!>?);
}
diff --git a/webkit/webkit/api/public_plus_experimental_current.txt b/webkit/webkit/api/public_plus_experimental_current.txt
index f1058a2..30fe4d1 100644
--- a/webkit/webkit/api/public_plus_experimental_current.txt
+++ b/webkit/webkit/api/public_plus_experimental_current.txt
@@ -39,8 +39,8 @@
ctor public ProxyConfig.Builder();
ctor public ProxyConfig.Builder(androidx.webkit.ProxyConfig);
method public androidx.webkit.ProxyConfig.Builder addBypassRule(String);
- method public androidx.webkit.ProxyConfig.Builder addDirect(String);
method public androidx.webkit.ProxyConfig.Builder addDirect();
+ method public androidx.webkit.ProxyConfig.Builder addDirect(String);
method public androidx.webkit.ProxyConfig.Builder addProxyRule(String);
method public androidx.webkit.ProxyConfig.Builder addProxyRule(String, String);
method public androidx.webkit.ProxyConfig build();
@@ -132,8 +132,8 @@
public abstract class WebMessagePortCompat {
method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_MESSAGE_PORT_CLOSE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void close();
method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_MESSAGE_PORT_POST_MESSAGE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void postMessage(androidx.webkit.WebMessageCompat);
- method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_MESSAGE_PORT_SET_MESSAGE_CALLBACK, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void setWebMessageCallback(androidx.webkit.WebMessagePortCompat.WebMessageCallbackCompat);
method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_MESSAGE_PORT_SET_MESSAGE_CALLBACK, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void setWebMessageCallback(android.os.Handler?, androidx.webkit.WebMessagePortCompat.WebMessageCallbackCompat);
+ method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_MESSAGE_PORT_SET_MESSAGE_CALLBACK, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void setWebMessageCallback(androidx.webkit.WebMessagePortCompat.WebMessageCallbackCompat);
}
public abstract static class WebMessagePortCompat.WebMessageCallbackCompat {
@@ -231,8 +231,8 @@
method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_MESSAGE_LISTENER, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void removeWebMessageListener(android.webkit.WebView, String);
method @RequiresFeature(name=androidx.webkit.WebViewFeature.SAFE_BROWSING_ALLOWLIST, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void setSafeBrowsingAllowlist(java.util.Set<java.lang.String!>, android.webkit.ValueCallback<java.lang.Boolean!>?);
method @Deprecated @RequiresFeature(name=androidx.webkit.WebViewFeature.SAFE_BROWSING_WHITELIST, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void setSafeBrowsingWhitelist(java.util.List<java.lang.String!>, android.webkit.ValueCallback<java.lang.Boolean!>?);
- method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void setWebViewRenderProcessClient(android.webkit.WebView, java.util.concurrent.Executor, androidx.webkit.WebViewRenderProcessClient);
method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void setWebViewRenderProcessClient(android.webkit.WebView, androidx.webkit.WebViewRenderProcessClient?);
+ method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void setWebViewRenderProcessClient(android.webkit.WebView, java.util.concurrent.Executor, androidx.webkit.WebViewRenderProcessClient);
method @RequiresFeature(name=androidx.webkit.WebViewFeature.START_SAFE_BROWSING, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void startSafeBrowsing(android.content.Context, android.webkit.ValueCallback<java.lang.Boolean!>?);
}
diff --git a/webkit/webkit/api/restricted_current.txt b/webkit/webkit/api/restricted_current.txt
index f1058a2..30fe4d1 100644
--- a/webkit/webkit/api/restricted_current.txt
+++ b/webkit/webkit/api/restricted_current.txt
@@ -39,8 +39,8 @@
ctor public ProxyConfig.Builder();
ctor public ProxyConfig.Builder(androidx.webkit.ProxyConfig);
method public androidx.webkit.ProxyConfig.Builder addBypassRule(String);
- method public androidx.webkit.ProxyConfig.Builder addDirect(String);
method public androidx.webkit.ProxyConfig.Builder addDirect();
+ method public androidx.webkit.ProxyConfig.Builder addDirect(String);
method public androidx.webkit.ProxyConfig.Builder addProxyRule(String);
method public androidx.webkit.ProxyConfig.Builder addProxyRule(String, String);
method public androidx.webkit.ProxyConfig build();
@@ -132,8 +132,8 @@
public abstract class WebMessagePortCompat {
method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_MESSAGE_PORT_CLOSE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void close();
method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_MESSAGE_PORT_POST_MESSAGE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void postMessage(androidx.webkit.WebMessageCompat);
- method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_MESSAGE_PORT_SET_MESSAGE_CALLBACK, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void setWebMessageCallback(androidx.webkit.WebMessagePortCompat.WebMessageCallbackCompat);
method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_MESSAGE_PORT_SET_MESSAGE_CALLBACK, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void setWebMessageCallback(android.os.Handler?, androidx.webkit.WebMessagePortCompat.WebMessageCallbackCompat);
+ method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_MESSAGE_PORT_SET_MESSAGE_CALLBACK, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void setWebMessageCallback(androidx.webkit.WebMessagePortCompat.WebMessageCallbackCompat);
}
public abstract static class WebMessagePortCompat.WebMessageCallbackCompat {
@@ -231,8 +231,8 @@
method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_MESSAGE_LISTENER, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void removeWebMessageListener(android.webkit.WebView, String);
method @RequiresFeature(name=androidx.webkit.WebViewFeature.SAFE_BROWSING_ALLOWLIST, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void setSafeBrowsingAllowlist(java.util.Set<java.lang.String!>, android.webkit.ValueCallback<java.lang.Boolean!>?);
method @Deprecated @RequiresFeature(name=androidx.webkit.WebViewFeature.SAFE_BROWSING_WHITELIST, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void setSafeBrowsingWhitelist(java.util.List<java.lang.String!>, android.webkit.ValueCallback<java.lang.Boolean!>?);
- method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void setWebViewRenderProcessClient(android.webkit.WebView, java.util.concurrent.Executor, androidx.webkit.WebViewRenderProcessClient);
method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void setWebViewRenderProcessClient(android.webkit.WebView, androidx.webkit.WebViewRenderProcessClient?);
+ method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void setWebViewRenderProcessClient(android.webkit.WebView, java.util.concurrent.Executor, androidx.webkit.WebViewRenderProcessClient);
method @RequiresFeature(name=androidx.webkit.WebViewFeature.START_SAFE_BROWSING, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void startSafeBrowsing(android.content.Context, android.webkit.ValueCallback<java.lang.Boolean!>?);
}
diff --git a/webkit/webkit/build.gradle b/webkit/webkit/build.gradle
index 0cc7c77..446ce33 100644
--- a/webkit/webkit/build.gradle
+++ b/webkit/webkit/build.gradle
@@ -68,9 +68,9 @@
}
androidx {
- name = "WebView Support Library"
+ name = "WebKit"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2017"
- description = "The WebView Support Library is a static library you can add to your Android application in order to use android.webkit APIs that are not available for older platform versions."
+ description = "The WebKit Support Library is a static library you can add to your Android application in order to use android.webkit APIs that are not available for older platform versions."
additionalDeviceTestApkKeys.add("chrome")
}
diff --git a/window/extensions/core/core/build.gradle b/window/extensions/core/core/build.gradle
index 9104d8c..5a895b0 100644
--- a/window/extensions/core/core/build.gradle
+++ b/window/extensions/core/core/build.gradle
@@ -45,7 +45,7 @@
}
androidx {
- name = "Jetpack WindowManager library Core Extensions"
+ name = "WindowManager Core Extensions"
type = LibraryType.PUBLISHED_LIBRARY
publish = Publish.SNAPSHOT_AND_RELEASE // Only to generate per-project-zips
inceptionYear = "2022"
diff --git a/window/extensions/extensions/api/current.txt b/window/extensions/extensions/api/current.txt
index bf580d9..490edb0 100644
--- a/window/extensions/extensions/api/current.txt
+++ b/window/extensions/extensions/api/current.txt
@@ -38,8 +38,8 @@
method public boolean isActivityEmbedded(android.app.Activity);
method public void setEmbeddingRules(java.util.Set<androidx.window.extensions.embedding.EmbeddingRule!>);
method public void setSplitAttributesCalculator(androidx.window.extensions.core.util.function.Function<androidx.window.extensions.embedding.SplitAttributesCalculatorParams!,androidx.window.extensions.embedding.SplitAttributes!>);
- method @Deprecated public void setSplitInfoCallback(java.util.function.Consumer<java.util.List<androidx.window.extensions.embedding.SplitInfo!>!>);
method public default void setSplitInfoCallback(androidx.window.extensions.core.util.function.Consumer<java.util.List<androidx.window.extensions.embedding.SplitInfo!>!>);
+ method @Deprecated public void setSplitInfoCallback(java.util.function.Consumer<java.util.List<androidx.window.extensions.embedding.SplitInfo!>!>);
}
public class ActivityRule extends androidx.window.extensions.embedding.EmbeddingRule {
@@ -49,8 +49,8 @@
}
public static final class ActivityRule.Builder {
- ctor @Deprecated @RequiresApi(android.os.Build.VERSION_CODES.N) public ActivityRule.Builder(java.util.function.Predicate<android.app.Activity!>, java.util.function.Predicate<android.content.Intent!>);
ctor public ActivityRule.Builder(androidx.window.extensions.core.util.function.Predicate<android.app.Activity!>, androidx.window.extensions.core.util.function.Predicate<android.content.Intent!>);
+ ctor @Deprecated @RequiresApi(android.os.Build.VERSION_CODES.N) public ActivityRule.Builder(java.util.function.Predicate<android.app.Activity!>, java.util.function.Predicate<android.content.Intent!>);
method public androidx.window.extensions.embedding.ActivityRule build();
method public androidx.window.extensions.embedding.ActivityRule.Builder setShouldAlwaysExpand(boolean);
method public androidx.window.extensions.embedding.ActivityRule.Builder setTag(String);
@@ -128,8 +128,8 @@
}
public static final class SplitPairRule.Builder {
- ctor @Deprecated @RequiresApi(android.os.Build.VERSION_CODES.N) public SplitPairRule.Builder(java.util.function.Predicate<android.util.Pair<android.app.Activity!,android.app.Activity!>!>, java.util.function.Predicate<android.util.Pair<android.app.Activity!,android.content.Intent!>!>, java.util.function.Predicate<android.view.WindowMetrics!>);
ctor public SplitPairRule.Builder(androidx.window.extensions.core.util.function.Predicate<android.util.Pair<android.app.Activity!,android.app.Activity!>!>, androidx.window.extensions.core.util.function.Predicate<android.util.Pair<android.app.Activity!,android.content.Intent!>!>, androidx.window.extensions.core.util.function.Predicate<android.view.WindowMetrics!>);
+ ctor @Deprecated @RequiresApi(android.os.Build.VERSION_CODES.N) public SplitPairRule.Builder(java.util.function.Predicate<android.util.Pair<android.app.Activity!,android.app.Activity!>!>, java.util.function.Predicate<android.util.Pair<android.app.Activity!,android.content.Intent!>!>, java.util.function.Predicate<android.view.WindowMetrics!>);
method public androidx.window.extensions.embedding.SplitPairRule build();
method public androidx.window.extensions.embedding.SplitPairRule.Builder setDefaultSplitAttributes(androidx.window.extensions.embedding.SplitAttributes);
method public androidx.window.extensions.embedding.SplitPairRule.Builder setFinishPrimaryWithSecondary(int);
@@ -152,8 +152,8 @@
}
public static final class SplitPlaceholderRule.Builder {
- ctor @Deprecated @RequiresApi(android.os.Build.VERSION_CODES.N) public SplitPlaceholderRule.Builder(android.content.Intent, java.util.function.Predicate<android.app.Activity!>, java.util.function.Predicate<android.content.Intent!>, java.util.function.Predicate<android.view.WindowMetrics!>);
ctor public SplitPlaceholderRule.Builder(android.content.Intent, androidx.window.extensions.core.util.function.Predicate<android.app.Activity!>, androidx.window.extensions.core.util.function.Predicate<android.content.Intent!>, androidx.window.extensions.core.util.function.Predicate<android.view.WindowMetrics!>);
+ ctor @Deprecated @RequiresApi(android.os.Build.VERSION_CODES.N) public SplitPlaceholderRule.Builder(android.content.Intent, java.util.function.Predicate<android.app.Activity!>, java.util.function.Predicate<android.content.Intent!>, java.util.function.Predicate<android.view.WindowMetrics!>);
method public androidx.window.extensions.embedding.SplitPlaceholderRule build();
method public androidx.window.extensions.embedding.SplitPlaceholderRule.Builder setDefaultSplitAttributes(androidx.window.extensions.embedding.SplitAttributes);
method public androidx.window.extensions.embedding.SplitPlaceholderRule.Builder setFinishPrimaryWithPlaceholder(int);
@@ -196,8 +196,8 @@
public interface WindowLayoutComponent {
method @Deprecated public void addWindowLayoutInfoListener(android.app.Activity, java.util.function.Consumer<androidx.window.extensions.layout.WindowLayoutInfo!>);
method public default void addWindowLayoutInfoListener(@UiContext android.content.Context, androidx.window.extensions.core.util.function.Consumer<androidx.window.extensions.layout.WindowLayoutInfo!>);
- method @Deprecated public void removeWindowLayoutInfoListener(java.util.function.Consumer<androidx.window.extensions.layout.WindowLayoutInfo!>);
method public default void removeWindowLayoutInfoListener(androidx.window.extensions.core.util.function.Consumer<androidx.window.extensions.layout.WindowLayoutInfo!>);
+ method @Deprecated public void removeWindowLayoutInfoListener(java.util.function.Consumer<androidx.window.extensions.layout.WindowLayoutInfo!>);
}
public class WindowLayoutInfo {
diff --git a/window/extensions/extensions/api/public_plus_experimental_current.txt b/window/extensions/extensions/api/public_plus_experimental_current.txt
index bf580d9..490edb0 100644
--- a/window/extensions/extensions/api/public_plus_experimental_current.txt
+++ b/window/extensions/extensions/api/public_plus_experimental_current.txt
@@ -38,8 +38,8 @@
method public boolean isActivityEmbedded(android.app.Activity);
method public void setEmbeddingRules(java.util.Set<androidx.window.extensions.embedding.EmbeddingRule!>);
method public void setSplitAttributesCalculator(androidx.window.extensions.core.util.function.Function<androidx.window.extensions.embedding.SplitAttributesCalculatorParams!,androidx.window.extensions.embedding.SplitAttributes!>);
- method @Deprecated public void setSplitInfoCallback(java.util.function.Consumer<java.util.List<androidx.window.extensions.embedding.SplitInfo!>!>);
method public default void setSplitInfoCallback(androidx.window.extensions.core.util.function.Consumer<java.util.List<androidx.window.extensions.embedding.SplitInfo!>!>);
+ method @Deprecated public void setSplitInfoCallback(java.util.function.Consumer<java.util.List<androidx.window.extensions.embedding.SplitInfo!>!>);
}
public class ActivityRule extends androidx.window.extensions.embedding.EmbeddingRule {
@@ -49,8 +49,8 @@
}
public static final class ActivityRule.Builder {
- ctor @Deprecated @RequiresApi(android.os.Build.VERSION_CODES.N) public ActivityRule.Builder(java.util.function.Predicate<android.app.Activity!>, java.util.function.Predicate<android.content.Intent!>);
ctor public ActivityRule.Builder(androidx.window.extensions.core.util.function.Predicate<android.app.Activity!>, androidx.window.extensions.core.util.function.Predicate<android.content.Intent!>);
+ ctor @Deprecated @RequiresApi(android.os.Build.VERSION_CODES.N) public ActivityRule.Builder(java.util.function.Predicate<android.app.Activity!>, java.util.function.Predicate<android.content.Intent!>);
method public androidx.window.extensions.embedding.ActivityRule build();
method public androidx.window.extensions.embedding.ActivityRule.Builder setShouldAlwaysExpand(boolean);
method public androidx.window.extensions.embedding.ActivityRule.Builder setTag(String);
@@ -128,8 +128,8 @@
}
public static final class SplitPairRule.Builder {
- ctor @Deprecated @RequiresApi(android.os.Build.VERSION_CODES.N) public SplitPairRule.Builder(java.util.function.Predicate<android.util.Pair<android.app.Activity!,android.app.Activity!>!>, java.util.function.Predicate<android.util.Pair<android.app.Activity!,android.content.Intent!>!>, java.util.function.Predicate<android.view.WindowMetrics!>);
ctor public SplitPairRule.Builder(androidx.window.extensions.core.util.function.Predicate<android.util.Pair<android.app.Activity!,android.app.Activity!>!>, androidx.window.extensions.core.util.function.Predicate<android.util.Pair<android.app.Activity!,android.content.Intent!>!>, androidx.window.extensions.core.util.function.Predicate<android.view.WindowMetrics!>);
+ ctor @Deprecated @RequiresApi(android.os.Build.VERSION_CODES.N) public SplitPairRule.Builder(java.util.function.Predicate<android.util.Pair<android.app.Activity!,android.app.Activity!>!>, java.util.function.Predicate<android.util.Pair<android.app.Activity!,android.content.Intent!>!>, java.util.function.Predicate<android.view.WindowMetrics!>);
method public androidx.window.extensions.embedding.SplitPairRule build();
method public androidx.window.extensions.embedding.SplitPairRule.Builder setDefaultSplitAttributes(androidx.window.extensions.embedding.SplitAttributes);
method public androidx.window.extensions.embedding.SplitPairRule.Builder setFinishPrimaryWithSecondary(int);
@@ -152,8 +152,8 @@
}
public static final class SplitPlaceholderRule.Builder {
- ctor @Deprecated @RequiresApi(android.os.Build.VERSION_CODES.N) public SplitPlaceholderRule.Builder(android.content.Intent, java.util.function.Predicate<android.app.Activity!>, java.util.function.Predicate<android.content.Intent!>, java.util.function.Predicate<android.view.WindowMetrics!>);
ctor public SplitPlaceholderRule.Builder(android.content.Intent, androidx.window.extensions.core.util.function.Predicate<android.app.Activity!>, androidx.window.extensions.core.util.function.Predicate<android.content.Intent!>, androidx.window.extensions.core.util.function.Predicate<android.view.WindowMetrics!>);
+ ctor @Deprecated @RequiresApi(android.os.Build.VERSION_CODES.N) public SplitPlaceholderRule.Builder(android.content.Intent, java.util.function.Predicate<android.app.Activity!>, java.util.function.Predicate<android.content.Intent!>, java.util.function.Predicate<android.view.WindowMetrics!>);
method public androidx.window.extensions.embedding.SplitPlaceholderRule build();
method public androidx.window.extensions.embedding.SplitPlaceholderRule.Builder setDefaultSplitAttributes(androidx.window.extensions.embedding.SplitAttributes);
method public androidx.window.extensions.embedding.SplitPlaceholderRule.Builder setFinishPrimaryWithPlaceholder(int);
@@ -196,8 +196,8 @@
public interface WindowLayoutComponent {
method @Deprecated public void addWindowLayoutInfoListener(android.app.Activity, java.util.function.Consumer<androidx.window.extensions.layout.WindowLayoutInfo!>);
method public default void addWindowLayoutInfoListener(@UiContext android.content.Context, androidx.window.extensions.core.util.function.Consumer<androidx.window.extensions.layout.WindowLayoutInfo!>);
- method @Deprecated public void removeWindowLayoutInfoListener(java.util.function.Consumer<androidx.window.extensions.layout.WindowLayoutInfo!>);
method public default void removeWindowLayoutInfoListener(androidx.window.extensions.core.util.function.Consumer<androidx.window.extensions.layout.WindowLayoutInfo!>);
+ method @Deprecated public void removeWindowLayoutInfoListener(java.util.function.Consumer<androidx.window.extensions.layout.WindowLayoutInfo!>);
}
public class WindowLayoutInfo {
diff --git a/window/extensions/extensions/api/restricted_current.txt b/window/extensions/extensions/api/restricted_current.txt
index bf580d9..490edb0 100644
--- a/window/extensions/extensions/api/restricted_current.txt
+++ b/window/extensions/extensions/api/restricted_current.txt
@@ -38,8 +38,8 @@
method public boolean isActivityEmbedded(android.app.Activity);
method public void setEmbeddingRules(java.util.Set<androidx.window.extensions.embedding.EmbeddingRule!>);
method public void setSplitAttributesCalculator(androidx.window.extensions.core.util.function.Function<androidx.window.extensions.embedding.SplitAttributesCalculatorParams!,androidx.window.extensions.embedding.SplitAttributes!>);
- method @Deprecated public void setSplitInfoCallback(java.util.function.Consumer<java.util.List<androidx.window.extensions.embedding.SplitInfo!>!>);
method public default void setSplitInfoCallback(androidx.window.extensions.core.util.function.Consumer<java.util.List<androidx.window.extensions.embedding.SplitInfo!>!>);
+ method @Deprecated public void setSplitInfoCallback(java.util.function.Consumer<java.util.List<androidx.window.extensions.embedding.SplitInfo!>!>);
}
public class ActivityRule extends androidx.window.extensions.embedding.EmbeddingRule {
@@ -49,8 +49,8 @@
}
public static final class ActivityRule.Builder {
- ctor @Deprecated @RequiresApi(android.os.Build.VERSION_CODES.N) public ActivityRule.Builder(java.util.function.Predicate<android.app.Activity!>, java.util.function.Predicate<android.content.Intent!>);
ctor public ActivityRule.Builder(androidx.window.extensions.core.util.function.Predicate<android.app.Activity!>, androidx.window.extensions.core.util.function.Predicate<android.content.Intent!>);
+ ctor @Deprecated @RequiresApi(android.os.Build.VERSION_CODES.N) public ActivityRule.Builder(java.util.function.Predicate<android.app.Activity!>, java.util.function.Predicate<android.content.Intent!>);
method public androidx.window.extensions.embedding.ActivityRule build();
method public androidx.window.extensions.embedding.ActivityRule.Builder setShouldAlwaysExpand(boolean);
method public androidx.window.extensions.embedding.ActivityRule.Builder setTag(String);
@@ -128,8 +128,8 @@
}
public static final class SplitPairRule.Builder {
- ctor @Deprecated @RequiresApi(android.os.Build.VERSION_CODES.N) public SplitPairRule.Builder(java.util.function.Predicate<android.util.Pair<android.app.Activity!,android.app.Activity!>!>, java.util.function.Predicate<android.util.Pair<android.app.Activity!,android.content.Intent!>!>, java.util.function.Predicate<android.view.WindowMetrics!>);
ctor public SplitPairRule.Builder(androidx.window.extensions.core.util.function.Predicate<android.util.Pair<android.app.Activity!,android.app.Activity!>!>, androidx.window.extensions.core.util.function.Predicate<android.util.Pair<android.app.Activity!,android.content.Intent!>!>, androidx.window.extensions.core.util.function.Predicate<android.view.WindowMetrics!>);
+ ctor @Deprecated @RequiresApi(android.os.Build.VERSION_CODES.N) public SplitPairRule.Builder(java.util.function.Predicate<android.util.Pair<android.app.Activity!,android.app.Activity!>!>, java.util.function.Predicate<android.util.Pair<android.app.Activity!,android.content.Intent!>!>, java.util.function.Predicate<android.view.WindowMetrics!>);
method public androidx.window.extensions.embedding.SplitPairRule build();
method public androidx.window.extensions.embedding.SplitPairRule.Builder setDefaultSplitAttributes(androidx.window.extensions.embedding.SplitAttributes);
method public androidx.window.extensions.embedding.SplitPairRule.Builder setFinishPrimaryWithSecondary(int);
@@ -152,8 +152,8 @@
}
public static final class SplitPlaceholderRule.Builder {
- ctor @Deprecated @RequiresApi(android.os.Build.VERSION_CODES.N) public SplitPlaceholderRule.Builder(android.content.Intent, java.util.function.Predicate<android.app.Activity!>, java.util.function.Predicate<android.content.Intent!>, java.util.function.Predicate<android.view.WindowMetrics!>);
ctor public SplitPlaceholderRule.Builder(android.content.Intent, androidx.window.extensions.core.util.function.Predicate<android.app.Activity!>, androidx.window.extensions.core.util.function.Predicate<android.content.Intent!>, androidx.window.extensions.core.util.function.Predicate<android.view.WindowMetrics!>);
+ ctor @Deprecated @RequiresApi(android.os.Build.VERSION_CODES.N) public SplitPlaceholderRule.Builder(android.content.Intent, java.util.function.Predicate<android.app.Activity!>, java.util.function.Predicate<android.content.Intent!>, java.util.function.Predicate<android.view.WindowMetrics!>);
method public androidx.window.extensions.embedding.SplitPlaceholderRule build();
method public androidx.window.extensions.embedding.SplitPlaceholderRule.Builder setDefaultSplitAttributes(androidx.window.extensions.embedding.SplitAttributes);
method public androidx.window.extensions.embedding.SplitPlaceholderRule.Builder setFinishPrimaryWithPlaceholder(int);
@@ -196,8 +196,8 @@
public interface WindowLayoutComponent {
method @Deprecated public void addWindowLayoutInfoListener(android.app.Activity, java.util.function.Consumer<androidx.window.extensions.layout.WindowLayoutInfo!>);
method public default void addWindowLayoutInfoListener(@UiContext android.content.Context, androidx.window.extensions.core.util.function.Consumer<androidx.window.extensions.layout.WindowLayoutInfo!>);
- method @Deprecated public void removeWindowLayoutInfoListener(java.util.function.Consumer<androidx.window.extensions.layout.WindowLayoutInfo!>);
method public default void removeWindowLayoutInfoListener(androidx.window.extensions.core.util.function.Consumer<androidx.window.extensions.layout.WindowLayoutInfo!>);
+ method @Deprecated public void removeWindowLayoutInfoListener(java.util.function.Consumer<androidx.window.extensions.layout.WindowLayoutInfo!>);
}
public class WindowLayoutInfo {
diff --git a/window/extensions/extensions/build.gradle b/window/extensions/extensions/build.gradle
index 279cbba..4941b4f2 100644
--- a/window/extensions/extensions/build.gradle
+++ b/window/extensions/extensions/build.gradle
@@ -41,7 +41,7 @@
}
androidx {
- name = "Jetpack WindowManager library Extensions"
+ name = "WindowManager Extensions"
publish = Publish.SNAPSHOT_AND_RELEASE // Only to generate per-project-zips
runApiTasks = new RunApiTasks.Yes("Need to track API surface before moving to publish")
inceptionYear = "2020"
diff --git a/window/sidecar/sidecar/build.gradle b/window/sidecar/sidecar/build.gradle
index 742646c..67a5ab4 100644
--- a/window/sidecar/sidecar/build.gradle
+++ b/window/sidecar/sidecar/build.gradle
@@ -27,7 +27,7 @@
}
androidx {
- name = "Jetpack WindowManager library Sidecar"
+ name = "WindowManager Sidecar"
publish = Publish.SNAPSHOT_AND_RELEASE // Only to generate per-project-zips
runApiTasks = new RunApiTasks.Yes("Need to track API surface but should never publish")
inceptionYear = "2020"
diff --git a/window/window-core/build.gradle b/window/window-core/build.gradle
index e0e80a3..fbaefda 100644
--- a/window/window-core/build.gradle
+++ b/window/window-core/build.gradle
@@ -36,7 +36,7 @@
}
androidx {
- name = "androidx.window:window-core"
+ name = "WindowManager Core"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2022"
description = "WindowManager Core Library."
diff --git a/window/window-demos/demo/build.gradle b/window/window-demos/demo/build.gradle
index 65adb00..cd3bcf4 100644
--- a/window/window-demos/demo/build.gradle
+++ b/window/window-demos/demo/build.gradle
@@ -82,7 +82,7 @@
}
androidx {
- name = "WM Jetpack Samples"
+ name = "WM Samples"
type = LibraryType.SAMPLES
inceptionYear = "2023"
description = "Samples for the WM Jetpack Library"
diff --git a/window/window-demos/demo/src/main/java/androidx/window/demo/WindowMetricsActivity.kt b/window/window-demos/demo/src/main/java/androidx/window/demo/WindowMetricsActivity.kt
index 4b0faa7..4bdc573 100644
--- a/window/window-demos/demo/src/main/java/androidx/window/demo/WindowMetricsActivity.kt
+++ b/window/window-demos/demo/src/main/java/androidx/window/demo/WindowMetricsActivity.kt
@@ -20,8 +20,8 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.RecyclerView
-import androidx.window.layout.WindowMetricsCalculator
import androidx.window.demo.common.infolog.InfoLogAdapter
+import androidx.window.layout.WindowMetricsCalculator
class WindowMetricsActivity : AppCompatActivity() {
diff --git a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/ExampleWindowInitializer.kt b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/ExampleWindowInitializer.kt
index 7cfc7ee..a5fe754 100644
--- a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/ExampleWindowInitializer.kt
+++ b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/ExampleWindowInitializer.kt
@@ -34,8 +34,8 @@
import androidx.window.embedding.SplitAttributes.LayoutDirection.Companion.LEFT_TO_RIGHT
import androidx.window.embedding.SplitAttributes.LayoutDirection.Companion.RIGHT_TO_LEFT
import androidx.window.embedding.SplitAttributes.LayoutDirection.Companion.TOP_TO_BOTTOM
-import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_HINGE
import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_EQUAL
+import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_HINGE
import androidx.window.embedding.SplitAttributesCalculatorParams
import androidx.window.embedding.SplitController
import androidx.window.embedding.SplitController.SplitSupportStatus.Companion.SPLIT_AVAILABLE
diff --git a/window/window-java/build.gradle b/window/window-java/build.gradle
index ad4a7de..36a1f22 100644
--- a/window/window-java/build.gradle
+++ b/window/window-java/build.gradle
@@ -46,7 +46,7 @@
}
androidx {
- name = "WindowManager Java Support"
+ name = "WindowManager Java"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2021"
description = "WindowManager Java Support"
diff --git a/window/window-java/src/androidTest/java/androidx/window/java/layout/WindowInfoTrackerCallbackAdapterTest.kt b/window/window-java/src/androidTest/java/androidx/window/java/layout/WindowInfoTrackerCallbackAdapterTest.kt
index ccf2fc5..ccba465 100644
--- a/window/window-java/src/androidTest/java/androidx/window/java/layout/WindowInfoTrackerCallbackAdapterTest.kt
+++ b/window/window-java/src/androidTest/java/androidx/window/java/layout/WindowInfoTrackerCallbackAdapterTest.kt
@@ -23,13 +23,13 @@
import androidx.window.layout.FoldingFeature
import androidx.window.layout.WindowInfoTracker
import androidx.window.layout.WindowLayoutInfo
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.whenever
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.receiveAsFlow
import org.junit.Assert.assertTrue
import org.junit.Test
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.whenever
/**
* Add a test for [WindowInfoTrackerCallbackAdapter] to verify adapted methods. Test converting
diff --git a/window/window-java/src/main/java/androidx/window/java/area/WindowAreaControllerJavaAdapter.kt b/window/window-java/src/main/java/androidx/window/java/area/WindowAreaControllerJavaAdapter.kt
index c2f21fe..3ea0c05 100644
--- a/window/window-java/src/main/java/androidx/window/java/area/WindowAreaControllerJavaAdapter.kt
+++ b/window/window-java/src/main/java/androidx/window/java/area/WindowAreaControllerJavaAdapter.kt
@@ -18,18 +18,18 @@
import android.app.Activity
import androidx.core.util.Consumer
+import androidx.window.area.WindowAreaController
import androidx.window.area.WindowAreaSessionCallback
import androidx.window.area.WindowAreaStatus
-import androidx.window.area.WindowAreaController
import androidx.window.core.ExperimentalWindowApi
+import java.util.concurrent.Executor
+import java.util.concurrent.locks.ReentrantLock
+import kotlin.concurrent.withLock
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.asCoroutineDispatcher
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
-import java.util.concurrent.Executor
-import java.util.concurrent.locks.ReentrantLock
-import kotlin.concurrent.withLock
/**
* An adapted interface for [WindowAreaController] that provides the information and
diff --git a/window/window-java/src/main/java/androidx/window/java/layout/WindowInfoTrackerCallbackAdapter.kt b/window/window-java/src/main/java/androidx/window/java/layout/WindowInfoTrackerCallbackAdapter.kt
index 35b10d3..1217182 100644
--- a/window/window-java/src/main/java/androidx/window/java/layout/WindowInfoTrackerCallbackAdapter.kt
+++ b/window/window-java/src/main/java/androidx/window/java/layout/WindowInfoTrackerCallbackAdapter.kt
@@ -18,21 +18,21 @@
import android.app.Activity
import android.content.Context
+import android.inputmethodservice.InputMethodService
import androidx.annotation.UiContext
import androidx.core.util.Consumer
-import android.inputmethodservice.InputMethodService
import androidx.window.core.ExperimentalWindowApi
import androidx.window.layout.WindowInfoTracker
import androidx.window.layout.WindowLayoutInfo
+import java.util.concurrent.Executor
+import java.util.concurrent.locks.ReentrantLock
+import kotlin.concurrent.withLock
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.asCoroutineDispatcher
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
-import java.util.concurrent.Executor
-import java.util.concurrent.locks.ReentrantLock
-import kotlin.concurrent.withLock
/**
* An adapted interface for [WindowInfoTracker] that allows listening for events via a callback
diff --git a/window/window-java/src/test/java/androidx/window/java/layout/WindowInfoTrackerCallbackAdapterTest.kt b/window/window-java/src/test/java/androidx/window/java/layout/WindowInfoTrackerCallbackAdapterTest.kt
index 639e073..f924a0f 100644
--- a/window/window-java/src/test/java/androidx/window/java/layout/WindowInfoTrackerCallbackAdapterTest.kt
+++ b/window/window-java/src/test/java/androidx/window/java/layout/WindowInfoTrackerCallbackAdapterTest.kt
@@ -19,14 +19,14 @@
import androidx.core.util.Consumer
import androidx.window.layout.WindowInfoTracker
import androidx.window.layout.WindowLayoutInfo
+import kotlinx.coroutines.flow.MutableSharedFlow
+import kotlinx.coroutines.runBlocking
+import org.junit.Test
import org.mockito.kotlin.any
import org.mockito.kotlin.mock
import org.mockito.kotlin.verify
import org.mockito.kotlin.verifyNoMoreInteractions
import org.mockito.kotlin.whenever
-import kotlinx.coroutines.flow.MutableSharedFlow
-import kotlinx.coroutines.runBlocking
-import org.junit.Test
class WindowInfoTrackerCallbackAdapterTest {
diff --git a/window/window-rxjava2/build.gradle b/window/window-rxjava2/build.gradle
index 97a6430..f3d1277 100644
--- a/window/window-rxjava2/build.gradle
+++ b/window/window-rxjava2/build.gradle
@@ -50,7 +50,7 @@
}
androidx {
- name = "WindowManager RxJava 2"
+ name = "WindowManager RxJava2"
publish = Publish.SNAPSHOT_AND_RELEASE
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2021"
diff --git a/window/window-rxjava2/src/androidTest/java/androidx/window/rxjava2/layout/WindowInfoTrackerRxTest.kt b/window/window-rxjava2/src/androidTest/java/androidx/window/rxjava2/layout/WindowInfoTrackerRxTest.kt
index 7415e37..9c97bc5 100644
--- a/window/window-rxjava2/src/androidTest/java/androidx/window/rxjava2/layout/WindowInfoTrackerRxTest.kt
+++ b/window/window-rxjava2/src/androidTest/java/androidx/window/rxjava2/layout/WindowInfoTrackerRxTest.kt
@@ -22,10 +22,10 @@
import androidx.window.layout.FoldingFeature
import androidx.window.layout.WindowInfoTracker
import androidx.window.layout.WindowLayoutInfo
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.whenever
import kotlinx.coroutines.flow.flowOf
import org.junit.Test
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.whenever
/**
* Tests for the RxJava 2 adapters.
diff --git a/window/window-rxjava3/build.gradle b/window/window-rxjava3/build.gradle
index 2ab8d1a..e4962e8 100644
--- a/window/window-rxjava3/build.gradle
+++ b/window/window-rxjava3/build.gradle
@@ -49,7 +49,7 @@
}
androidx {
- name = "WindowManager RxJava 3 Support"
+ name = "WindowManager RxJava3"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2021"
description = "WindowManager RxJava 3 Support"
diff --git a/window/window-rxjava3/src/androidTest/java/androidx/window/rxjava3/layout/WindowInfoTrackerRxTest.kt b/window/window-rxjava3/src/androidTest/java/androidx/window/rxjava3/layout/WindowInfoTrackerRxTest.kt
index b32bfa0..07de2d7 100644
--- a/window/window-rxjava3/src/androidTest/java/androidx/window/rxjava3/layout/WindowInfoTrackerRxTest.kt
+++ b/window/window-rxjava3/src/androidTest/java/androidx/window/rxjava3/layout/WindowInfoTrackerRxTest.kt
@@ -22,10 +22,10 @@
import androidx.window.layout.FoldingFeature
import androidx.window.layout.WindowInfoTracker
import androidx.window.layout.WindowLayoutInfo
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.whenever
import kotlinx.coroutines.flow.flowOf
import org.junit.Test
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.whenever
/**
* Test for the adapter functions that convert to [io.reactivex.rxjava3.core.Observable] or
diff --git a/window/window-testing/api/current.txt b/window/window-testing/api/current.txt
index 28a4315..97bc7cf 100644
--- a/window/window-testing/api/current.txt
+++ b/window/window-testing/api/current.txt
@@ -10,25 +10,25 @@
}
public final class TestActivityStack {
- method public static androidx.window.embedding.ActivityStack createTestActivityStack(optional java.util.List<? extends android.app.Activity> activitiesInProcess, optional boolean isEmpty);
- method public static androidx.window.embedding.ActivityStack createTestActivityStack(optional java.util.List<? extends android.app.Activity> activitiesInProcess);
method public static androidx.window.embedding.ActivityStack createTestActivityStack();
+ method public static androidx.window.embedding.ActivityStack createTestActivityStack(optional java.util.List<? extends android.app.Activity> activitiesInProcess);
+ method public static androidx.window.embedding.ActivityStack createTestActivityStack(optional java.util.List<? extends android.app.Activity> activitiesInProcess, optional boolean isEmpty);
}
public final class TestSplitAttributesCalculatorParams {
- method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes, optional boolean areDefaultConstraintsSatisfied, optional String? splitRuleTag);
- method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes, optional boolean areDefaultConstraintsSatisfied);
- method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes);
- method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo);
- method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration);
method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes, optional boolean areDefaultConstraintsSatisfied);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes, optional boolean areDefaultConstraintsSatisfied, optional String? splitRuleTag);
}
public final class TestSplitInfo {
- method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack, optional androidx.window.embedding.ActivityStack secondActivityStack, optional androidx.window.embedding.SplitAttributes splitAttributes);
- method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack, optional androidx.window.embedding.ActivityStack secondActivityStack);
- method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack);
method public static androidx.window.embedding.SplitInfo createTestSplitInfo();
+ method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack);
+ method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack, optional androidx.window.embedding.ActivityStack secondActivityStack);
+ method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack, optional androidx.window.embedding.ActivityStack secondActivityStack, optional androidx.window.embedding.SplitAttributes splitAttributes);
}
}
@@ -36,16 +36,16 @@
package androidx.window.testing.layout {
public final class DisplayFeatureTesting {
- method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional int center, optional int size, optional androidx.window.layout.FoldingFeature.State state, optional androidx.window.layout.FoldingFeature.Orientation orientation);
- method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional int center, optional int size, optional androidx.window.layout.FoldingFeature.State state);
- method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional int center, optional int size);
- method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional int center);
method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity);
- method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional int center, optional int size, optional androidx.window.layout.FoldingFeature.State state, optional androidx.window.layout.FoldingFeature.Orientation orientation);
- method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional int center, optional int size, optional androidx.window.layout.FoldingFeature.State state);
- method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional int center, optional int size);
- method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional int center);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional @IntRange(from=-1L) int center);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional @IntRange(from=-1L) int center, optional int size);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional @IntRange(from=-1L) int center, optional int size, optional androidx.window.layout.FoldingFeature.State state);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional @IntRange(from=-1L) int center, optional int size, optional androidx.window.layout.FoldingFeature.State state, optional androidx.window.layout.FoldingFeature.Orientation orientation);
method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional @IntRange(from=-1L) int center);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional @IntRange(from=-1L) int center, optional int size);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional @IntRange(from=-1L) int center, optional int size, optional androidx.window.layout.FoldingFeature.State state);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional @IntRange(from=-1L) int center, optional int size, optional androidx.window.layout.FoldingFeature.State state, optional androidx.window.layout.FoldingFeature.Orientation orientation);
}
public final class WindowLayoutInfoPublisherRule implements org.junit.rules.TestRule {
@@ -55,8 +55,8 @@
}
public final class WindowLayoutInfoTesting {
- method public static androidx.window.layout.WindowLayoutInfo createWindowLayoutInfo(optional java.util.List<? extends androidx.window.layout.DisplayFeature> displayFeatures);
method public static androidx.window.layout.WindowLayoutInfo createWindowLayoutInfo();
+ method public static androidx.window.layout.WindowLayoutInfo createWindowLayoutInfo(optional java.util.List<? extends androidx.window.layout.DisplayFeature> displayFeatures);
}
public final class WindowMetricsCalculatorRule implements org.junit.rules.TestRule {
diff --git a/window/window-testing/api/public_plus_experimental_current.txt b/window/window-testing/api/public_plus_experimental_current.txt
index 28a4315..97bc7cf 100644
--- a/window/window-testing/api/public_plus_experimental_current.txt
+++ b/window/window-testing/api/public_plus_experimental_current.txt
@@ -10,25 +10,25 @@
}
public final class TestActivityStack {
- method public static androidx.window.embedding.ActivityStack createTestActivityStack(optional java.util.List<? extends android.app.Activity> activitiesInProcess, optional boolean isEmpty);
- method public static androidx.window.embedding.ActivityStack createTestActivityStack(optional java.util.List<? extends android.app.Activity> activitiesInProcess);
method public static androidx.window.embedding.ActivityStack createTestActivityStack();
+ method public static androidx.window.embedding.ActivityStack createTestActivityStack(optional java.util.List<? extends android.app.Activity> activitiesInProcess);
+ method public static androidx.window.embedding.ActivityStack createTestActivityStack(optional java.util.List<? extends android.app.Activity> activitiesInProcess, optional boolean isEmpty);
}
public final class TestSplitAttributesCalculatorParams {
- method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes, optional boolean areDefaultConstraintsSatisfied, optional String? splitRuleTag);
- method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes, optional boolean areDefaultConstraintsSatisfied);
- method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes);
- method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo);
- method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration);
method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes, optional boolean areDefaultConstraintsSatisfied);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes, optional boolean areDefaultConstraintsSatisfied, optional String? splitRuleTag);
}
public final class TestSplitInfo {
- method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack, optional androidx.window.embedding.ActivityStack secondActivityStack, optional androidx.window.embedding.SplitAttributes splitAttributes);
- method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack, optional androidx.window.embedding.ActivityStack secondActivityStack);
- method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack);
method public static androidx.window.embedding.SplitInfo createTestSplitInfo();
+ method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack);
+ method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack, optional androidx.window.embedding.ActivityStack secondActivityStack);
+ method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack, optional androidx.window.embedding.ActivityStack secondActivityStack, optional androidx.window.embedding.SplitAttributes splitAttributes);
}
}
@@ -36,16 +36,16 @@
package androidx.window.testing.layout {
public final class DisplayFeatureTesting {
- method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional int center, optional int size, optional androidx.window.layout.FoldingFeature.State state, optional androidx.window.layout.FoldingFeature.Orientation orientation);
- method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional int center, optional int size, optional androidx.window.layout.FoldingFeature.State state);
- method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional int center, optional int size);
- method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional int center);
method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity);
- method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional int center, optional int size, optional androidx.window.layout.FoldingFeature.State state, optional androidx.window.layout.FoldingFeature.Orientation orientation);
- method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional int center, optional int size, optional androidx.window.layout.FoldingFeature.State state);
- method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional int center, optional int size);
- method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional int center);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional @IntRange(from=-1L) int center);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional @IntRange(from=-1L) int center, optional int size);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional @IntRange(from=-1L) int center, optional int size, optional androidx.window.layout.FoldingFeature.State state);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional @IntRange(from=-1L) int center, optional int size, optional androidx.window.layout.FoldingFeature.State state, optional androidx.window.layout.FoldingFeature.Orientation orientation);
method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional @IntRange(from=-1L) int center);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional @IntRange(from=-1L) int center, optional int size);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional @IntRange(from=-1L) int center, optional int size, optional androidx.window.layout.FoldingFeature.State state);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional @IntRange(from=-1L) int center, optional int size, optional androidx.window.layout.FoldingFeature.State state, optional androidx.window.layout.FoldingFeature.Orientation orientation);
}
public final class WindowLayoutInfoPublisherRule implements org.junit.rules.TestRule {
@@ -55,8 +55,8 @@
}
public final class WindowLayoutInfoTesting {
- method public static androidx.window.layout.WindowLayoutInfo createWindowLayoutInfo(optional java.util.List<? extends androidx.window.layout.DisplayFeature> displayFeatures);
method public static androidx.window.layout.WindowLayoutInfo createWindowLayoutInfo();
+ method public static androidx.window.layout.WindowLayoutInfo createWindowLayoutInfo(optional java.util.List<? extends androidx.window.layout.DisplayFeature> displayFeatures);
}
public final class WindowMetricsCalculatorRule implements org.junit.rules.TestRule {
diff --git a/window/window-testing/api/restricted_current.txt b/window/window-testing/api/restricted_current.txt
index 28a4315..97bc7cf 100644
--- a/window/window-testing/api/restricted_current.txt
+++ b/window/window-testing/api/restricted_current.txt
@@ -10,25 +10,25 @@
}
public final class TestActivityStack {
- method public static androidx.window.embedding.ActivityStack createTestActivityStack(optional java.util.List<? extends android.app.Activity> activitiesInProcess, optional boolean isEmpty);
- method public static androidx.window.embedding.ActivityStack createTestActivityStack(optional java.util.List<? extends android.app.Activity> activitiesInProcess);
method public static androidx.window.embedding.ActivityStack createTestActivityStack();
+ method public static androidx.window.embedding.ActivityStack createTestActivityStack(optional java.util.List<? extends android.app.Activity> activitiesInProcess);
+ method public static androidx.window.embedding.ActivityStack createTestActivityStack(optional java.util.List<? extends android.app.Activity> activitiesInProcess, optional boolean isEmpty);
}
public final class TestSplitAttributesCalculatorParams {
- method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes, optional boolean areDefaultConstraintsSatisfied, optional String? splitRuleTag);
- method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes, optional boolean areDefaultConstraintsSatisfied);
- method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes);
- method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo);
- method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration);
method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes, optional boolean areDefaultConstraintsSatisfied);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes, optional boolean areDefaultConstraintsSatisfied, optional String? splitRuleTag);
}
public final class TestSplitInfo {
- method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack, optional androidx.window.embedding.ActivityStack secondActivityStack, optional androidx.window.embedding.SplitAttributes splitAttributes);
- method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack, optional androidx.window.embedding.ActivityStack secondActivityStack);
- method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack);
method public static androidx.window.embedding.SplitInfo createTestSplitInfo();
+ method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack);
+ method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack, optional androidx.window.embedding.ActivityStack secondActivityStack);
+ method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack, optional androidx.window.embedding.ActivityStack secondActivityStack, optional androidx.window.embedding.SplitAttributes splitAttributes);
}
}
@@ -36,16 +36,16 @@
package androidx.window.testing.layout {
public final class DisplayFeatureTesting {
- method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional int center, optional int size, optional androidx.window.layout.FoldingFeature.State state, optional androidx.window.layout.FoldingFeature.Orientation orientation);
- method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional int center, optional int size, optional androidx.window.layout.FoldingFeature.State state);
- method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional int center, optional int size);
- method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional int center);
method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity);
- method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional int center, optional int size, optional androidx.window.layout.FoldingFeature.State state, optional androidx.window.layout.FoldingFeature.Orientation orientation);
- method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional int center, optional int size, optional androidx.window.layout.FoldingFeature.State state);
- method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional int center, optional int size);
- method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional int center);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional @IntRange(from=-1L) int center);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional @IntRange(from=-1L) int center, optional int size);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional @IntRange(from=-1L) int center, optional int size, optional androidx.window.layout.FoldingFeature.State state);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional @IntRange(from=-1L) int center, optional int size, optional androidx.window.layout.FoldingFeature.State state, optional androidx.window.layout.FoldingFeature.Orientation orientation);
method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional @IntRange(from=-1L) int center);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional @IntRange(from=-1L) int center, optional int size);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional @IntRange(from=-1L) int center, optional int size, optional androidx.window.layout.FoldingFeature.State state);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional @IntRange(from=-1L) int center, optional int size, optional androidx.window.layout.FoldingFeature.State state, optional androidx.window.layout.FoldingFeature.Orientation orientation);
}
public final class WindowLayoutInfoPublisherRule implements org.junit.rules.TestRule {
@@ -55,8 +55,8 @@
}
public final class WindowLayoutInfoTesting {
- method public static androidx.window.layout.WindowLayoutInfo createWindowLayoutInfo(optional java.util.List<? extends androidx.window.layout.DisplayFeature> displayFeatures);
method public static androidx.window.layout.WindowLayoutInfo createWindowLayoutInfo();
+ method public static androidx.window.layout.WindowLayoutInfo createWindowLayoutInfo(optional java.util.List<? extends androidx.window.layout.DisplayFeature> displayFeatures);
}
public final class WindowMetricsCalculatorRule implements org.junit.rules.TestRule {
diff --git a/window/window-testing/build.gradle b/window/window-testing/build.gradle
index 9ccb288..7996b4b 100644
--- a/window/window-testing/build.gradle
+++ b/window/window-testing/build.gradle
@@ -55,7 +55,7 @@
}
androidx {
- name = "WindowManager Test Library"
+ name = "WindowManager Testing Extensions"
type = LibraryType.PUBLISHED_TEST_LIBRARY
inceptionYear = "2021"
description = "WindowManager Test Library"
diff --git a/window/window-testing/src/main/java/androidx/window/testing/embedding/ActivityEmbeddingRule.kt b/window/window-testing/src/main/java/androidx/window/testing/embedding/ActivityEmbeddingRule.kt
index cd9fe23..70f2ba7 100644
--- a/window/window-testing/src/main/java/androidx/window/testing/embedding/ActivityEmbeddingRule.kt
+++ b/window/window-testing/src/main/java/androidx/window/testing/embedding/ActivityEmbeddingRule.kt
@@ -31,6 +31,9 @@
* A [TestRule] that will stub out the behavior of [ActivityEmbeddingController] and
* [RuleController] with a more simple one that will support testing independent of the current
* platform.
+ *
+ * By default [ActivityEmbeddingRule] has values as if the developer has not opted in to the
+ * ActivityEmbedding feature. There are no set rules, and each [Activity] is not embedded.
*/
class ActivityEmbeddingRule : TestRule {
diff --git a/window/window-testing/src/main/java/androidx/window/testing/embedding/ActivityStackTesting.kt b/window/window-testing/src/main/java/androidx/window/testing/embedding/ActivityStackTesting.kt
index 3bbca06..ef38d1a 100644
--- a/window/window-testing/src/main/java/androidx/window/testing/embedding/ActivityStackTesting.kt
+++ b/window/window-testing/src/main/java/androidx/window/testing/embedding/ActivityStackTesting.kt
@@ -21,17 +21,15 @@
import androidx.window.embedding.ActivityStack
/**
- * Creates an [ActivityStack] instance for testing, which defaults to an [ActivityStack] with
- * cross-process activities.
- *
- * The [activitiesInProcess] can be passed from the activity obtained from
- * [androidx.test.core.app.ActivityScenario] or even mock Activities.
+ * Creates an [ActivityStack] instance for testing. The default values are an empty list for
+ * [activitiesInProcess] but a false value for [isEmpty]. This is the same as being embedded with
+ * an [Activity] from another process.
*
* @param activitiesInProcess The [Activity] list with the same process of the host task with
- * empty list as the default value
+ * empty list as the default value.
* @param isEmpty Indicates whether this `ActivityStack` contains any [Activity] regardless of the
- * process with `false` as the default value
- * @return An [ActivityStack] instance for testing
+ * process with `false` as the default value.
+ * @return An [ActivityStack] instance for testing.
*/
@Suppress("FunctionName")
@JvmName("createTestActivityStack")
diff --git a/window/window-testing/src/main/java/androidx/window/testing/layout/DisplayFeatureTesting.kt b/window/window-testing/src/main/java/androidx/window/testing/layout/DisplayFeatureTesting.kt
index 2a065cb..802279b 100644
--- a/window/window-testing/src/main/java/androidx/window/testing/layout/DisplayFeatureTesting.kt
+++ b/window/window-testing/src/main/java/androidx/window/testing/layout/DisplayFeatureTesting.kt
@@ -19,6 +19,7 @@
import android.app.Activity
import android.graphics.Rect
+import androidx.annotation.IntRange
import androidx.window.layout.FoldingFeature
import androidx.window.layout.FoldingFeature.OcclusionType.Companion.FULL
import androidx.window.layout.FoldingFeature.OcclusionType.Companion.NONE
@@ -41,11 +42,16 @@
* ([size] / 2) and the bottom-left y-coordinate is center - ([size] / 2). The folding features
* always cover the window in one dimension and that determines the other coordinates.
*
+ * The [center] is bounded below by -1. For values greater than -1 it will be set as the center.
+ * For -1 it signals that the center should be calculated. The calculation is the center of the
+ * [Activity] window bounds.
+ *
* @param activity that will house the [FoldingFeature].
- * @param center the center of the fold complementary to the orientation. For a [HORIZONTAL] fold,
- * this is the y-axis and for a [VERTICAL] fold this is the x-axis.
- * @param size the smaller dimension of the fold. The larger dimension always covers the entire
- * window.
+ * @param center the center of the fold complementary to the orientation in px. For a
+ * [HORIZONTAL] fold, this is the y-axis and for a [VERTICAL] fold this is the x-axis. The default
+ * value will be calculated to be in the middle of the window.
+ * @param size the smaller dimension of the fold in px. The larger dimension always covers the
+ * entire window.
* @param state [State] of the fold. The default value is [HALF_OPENED]
* @param orientation [Orientation] of the fold. The default value is [HORIZONTAL]
* @return [FoldingFeature] that is splitting if the width is not 0 and runs parallel to the
@@ -55,6 +61,7 @@
@JvmName("createFoldingFeature")
fun FoldingFeature(
activity: Activity,
+ @IntRange(from = -1)
center: Int = -1,
size: Int = 0,
state: State = HALF_OPENED,
@@ -83,11 +90,16 @@
* ([size] / 2) and the bottom-left y-coordinate is center - ([size] / 2). The folding features
* always cover the window in one dimension and that determines the other coordinates.
*
+ * The [center] is bounded below by -1. For values greater than -1 it will be set as the center.
+ * For -1 it signals that the center should be calculated. The calculation is the center of the
+ * [Activity] window bounds.
+ *
* @param windowBounds that will contain the [FoldingFeature].
- * @param center the center of the fold complementary to the orientation. For a [HORIZONTAL] fold,
- * this is the y-axis and for a [VERTICAL] fold this is the x-axis.
- * @param size the smaller dimension of the fold. The larger dimension always covers the entire
- * window.
+ * @param center the center of the fold complementary to the orientation in px. For a
+ * [HORIZONTAL] fold, this is the y-axis and for a [VERTICAL] fold this is the x-axis. The default
+ * value will be calculated to be in the middle of the window.
+ * @param size the smaller dimension of the fold in px. The larger dimension always covers the
+ * entire window.
* @param state [State] of the fold. The default value is [HALF_OPENED]
* @param orientation [Orientation] of the fold. The default value is [HORIZONTAL]
* @return [FoldingFeature] that is splitting if the width is not 0 and runs parallel to the
@@ -97,6 +109,7 @@
@JvmName("createFoldingFeature")
fun FoldingFeature(
windowBounds: Rect,
+ @IntRange(from = -1)
center: Int = -1,
size: Int = 0,
state: State = HALF_OPENED,
diff --git a/window/window-testing/src/test/java/androidx/window/testing/embedding/SplitAttributesCalculatorParamsTestingTest.kt b/window/window-testing/src/test/java/androidx/window/testing/embedding/SplitAttributesCalculatorParamsTestingTest.kt
index f8e8ce2..66dc2e8 100644
--- a/window/window-testing/src/test/java/androidx/window/testing/embedding/SplitAttributesCalculatorParamsTestingTest.kt
+++ b/window/window-testing/src/test/java/androidx/window/testing/embedding/SplitAttributesCalculatorParamsTestingTest.kt
@@ -16,7 +16,6 @@
package androidx.window.testing.embedding
-import androidx.window.testing.layout.FoldingFeature as testFoldingFeature
import android.content.res.Configuration
import android.graphics.Rect
import androidx.window.core.ExperimentalWindowApi
@@ -27,6 +26,7 @@
import androidx.window.layout.FoldingFeature
import androidx.window.layout.WindowLayoutInfo
import androidx.window.layout.WindowMetrics
+import androidx.window.testing.layout.FoldingFeature as testFoldingFeature
import androidx.window.testing.layout.TestWindowLayoutInfo
import java.util.Collections
import org.junit.Assert.assertEquals
diff --git a/window/window/api/current.txt b/window/window/api/current.txt
index 8fbbb45..ff8eb13 100644
--- a/window/window/api/current.txt
+++ b/window/window/api/current.txt
@@ -302,8 +302,8 @@
public interface WindowInfoTracker {
method public default static androidx.window.layout.WindowInfoTracker getOrCreate(android.content.Context context);
- method public default kotlinx.coroutines.flow.Flow<androidx.window.layout.WindowLayoutInfo> windowLayoutInfo(@UiContext android.content.Context context);
method public kotlinx.coroutines.flow.Flow<androidx.window.layout.WindowLayoutInfo> windowLayoutInfo(android.app.Activity activity);
+ method public default kotlinx.coroutines.flow.Flow<androidx.window.layout.WindowLayoutInfo> windowLayoutInfo(@UiContext android.content.Context context);
field public static final androidx.window.layout.WindowInfoTracker.Companion Companion;
}
diff --git a/window/window/api/public_plus_experimental_current.txt b/window/window/api/public_plus_experimental_current.txt
index 0c1d735..412af2b 100644
--- a/window/window/api/public_plus_experimental_current.txt
+++ b/window/window/api/public_plus_experimental_current.txt
@@ -330,8 +330,8 @@
public interface WindowInfoTracker {
method public default static androidx.window.layout.WindowInfoTracker getOrCreate(android.content.Context context);
- method public default kotlinx.coroutines.flow.Flow<androidx.window.layout.WindowLayoutInfo> windowLayoutInfo(@UiContext android.content.Context context);
method public kotlinx.coroutines.flow.Flow<androidx.window.layout.WindowLayoutInfo> windowLayoutInfo(android.app.Activity activity);
+ method public default kotlinx.coroutines.flow.Flow<androidx.window.layout.WindowLayoutInfo> windowLayoutInfo(@UiContext android.content.Context context);
field public static final androidx.window.layout.WindowInfoTracker.Companion Companion;
}
diff --git a/window/window/api/restricted_current.txt b/window/window/api/restricted_current.txt
index 8fbbb45..ff8eb13 100644
--- a/window/window/api/restricted_current.txt
+++ b/window/window/api/restricted_current.txt
@@ -302,8 +302,8 @@
public interface WindowInfoTracker {
method public default static androidx.window.layout.WindowInfoTracker getOrCreate(android.content.Context context);
- method public default kotlinx.coroutines.flow.Flow<androidx.window.layout.WindowLayoutInfo> windowLayoutInfo(@UiContext android.content.Context context);
method public kotlinx.coroutines.flow.Flow<androidx.window.layout.WindowLayoutInfo> windowLayoutInfo(android.app.Activity activity);
+ method public default kotlinx.coroutines.flow.Flow<androidx.window.layout.WindowLayoutInfo> windowLayoutInfo(@UiContext android.content.Context context);
field public static final androidx.window.layout.WindowInfoTracker.Companion Companion;
}
diff --git a/window/window/build.gradle b/window/window/build.gradle
index 4e4170e..402be78 100644
--- a/window/window/build.gradle
+++ b/window/window/build.gradle
@@ -85,7 +85,7 @@
}
androidx {
- name = "Jetpack WindowManager Library"
+ name = "WindowManager"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2020"
description = "WindowManager Jetpack library. Currently only provides additional " +
diff --git a/window/window/samples/build.gradle b/window/window/samples/build.gradle
index e44e0ac..7db715c 100644
--- a/window/window/samples/build.gradle
+++ b/window/window/samples/build.gradle
@@ -36,7 +36,7 @@
}
androidx {
- name = "Jetpack WindowManager Library Samples"
+ name = "WindowManager Samples"
type = LibraryType.SAMPLES
inceptionYear = "2022"
description = "Code samples for WindowManager Jetpack library."
diff --git a/window/window/src/androidTest/java/androidx/window/area/WindowAreaControllerImplTest.kt b/window/window/src/androidTest/java/androidx/window/area/WindowAreaControllerImplTest.kt
index e796c8f..963966d 100644
--- a/window/window/src/androidTest/java/androidx/window/area/WindowAreaControllerImplTest.kt
+++ b/window/window/src/androidTest/java/androidx/window/area/WindowAreaControllerImplTest.kt
@@ -24,19 +24,19 @@
import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.window.TestActivity
import androidx.window.TestConsumer
+import androidx.window.WindowTestUtils.Companion.assumeAtLeastVendorApiLevel
import androidx.window.core.ExperimentalWindowApi
import androidx.window.extensions.area.WindowAreaComponent
import androidx.window.extensions.core.util.function.Consumer
-import androidx.window.WindowTestUtils.Companion.assumeAtLeastVendorApiLevel
-import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.launch
-import org.junit.Rule
-import org.junit.Test
import kotlin.test.assertFailsWith
+import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.Job
+import kotlinx.coroutines.launch
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.runTest
+import org.junit.Rule
+import org.junit.Test
@OptIn(ExperimentalCoroutinesApi::class, ExperimentalWindowApi::class)
class WindowAreaControllerImplTest {
diff --git a/window/window/src/androidTest/java/androidx/window/embedding/ActivityFilterTest.kt b/window/window/src/androidTest/java/androidx/window/embedding/ActivityFilterTest.kt
index ec34298..d927096 100644
--- a/window/window/src/androidTest/java/androidx/window/embedding/ActivityFilterTest.kt
+++ b/window/window/src/androidTest/java/androidx/window/embedding/ActivityFilterTest.kt
@@ -20,12 +20,12 @@
import android.content.ComponentName
import android.content.Intent
import com.google.common.truth.Truth.assertWithMessage
-import org.mockito.kotlin.doReturn
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.whenever
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
+import org.mockito.kotlin.doReturn
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.whenever
/**
* Integration test for [ActivityFilter] to test construction from [ComponentName].
diff --git a/window/window/src/androidTest/java/androidx/window/embedding/EmbeddingAdapterTest.kt b/window/window/src/androidTest/java/androidx/window/embedding/EmbeddingAdapterTest.kt
index 9d0aaba..6d76005 100644
--- a/window/window/src/androidTest/java/androidx/window/embedding/EmbeddingAdapterTest.kt
+++ b/window/window/src/androidTest/java/androidx/window/embedding/EmbeddingAdapterTest.kt
@@ -16,9 +16,6 @@
package androidx.window.embedding
-import androidx.window.extensions.embedding.ActivityStack as OEMActivityStack
-import androidx.window.extensions.embedding.SplitAttributes as OEMSplitAttributes
-import androidx.window.extensions.embedding.SplitInfo as OEMSplitInfo
import android.app.Activity
import androidx.window.WindowTestUtils
import androidx.window.core.ExtensionsUtil
@@ -26,13 +23,16 @@
import androidx.window.embedding.SplitAttributes.SplitType
import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_HINGE
import androidx.window.extensions.WindowExtensions
+import androidx.window.extensions.embedding.ActivityStack as OEMActivityStack
+import androidx.window.extensions.embedding.SplitAttributes as OEMSplitAttributes
import androidx.window.extensions.embedding.SplitAttributes.LayoutDirection.TOP_TO_BOTTOM
import androidx.window.extensions.embedding.SplitAttributes.SplitType.RatioSplitType
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.whenever
+import androidx.window.extensions.embedding.SplitInfo as OEMSplitInfo
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.whenever
/** Tests for [EmbeddingAdapter] */
class EmbeddingAdapterTest {
diff --git a/window/window/src/androidTest/java/androidx/window/layout/adapter/extensions/ExtensionWindowLayoutInfoBackendTest.kt b/window/window/src/androidTest/java/androidx/window/layout/adapter/extensions/ExtensionWindowLayoutInfoBackendTest.kt
index ff28be7..67f29671 100644
--- a/window/window/src/androidTest/java/androidx/window/layout/adapter/extensions/ExtensionWindowLayoutInfoBackendTest.kt
+++ b/window/window/src/androidTest/java/androidx/window/layout/adapter/extensions/ExtensionWindowLayoutInfoBackendTest.kt
@@ -16,10 +16,6 @@
package androidx.window.layout.adapter.extensions
-import androidx.window.extensions.core.util.function.Consumer as OEMConsumer
-import androidx.window.extensions.layout.FoldingFeature as OEMFoldingFeature
-import androidx.window.extensions.layout.WindowLayoutInfo as OEMWindowLayoutInfo
-import java.util.function.Consumer as JavaConsumer
import android.annotation.SuppressLint
import android.app.Activity
import android.content.Context
@@ -37,19 +33,16 @@
import androidx.window.core.ConsumerAdapter
import androidx.window.core.ExtensionsUtil
import androidx.window.extensions.WindowExtensions
+import androidx.window.extensions.core.util.function.Consumer as OEMConsumer
+import androidx.window.extensions.layout.FoldingFeature as OEMFoldingFeature
import androidx.window.extensions.layout.FoldingFeature.STATE_FLAT
import androidx.window.extensions.layout.FoldingFeature.TYPE_HINGE
import androidx.window.extensions.layout.WindowLayoutComponent
+import androidx.window.extensions.layout.WindowLayoutInfo as OEMWindowLayoutInfo
import androidx.window.layout.WindowLayoutInfo
import androidx.window.layout.WindowMetricsCalculatorCompat
import androidx.window.layout.adapter.extensions.ExtensionsWindowLayoutInfoAdapter.translate
-import org.mockito.kotlin.any
-import org.mockito.kotlin.argumentCaptor
-import org.mockito.kotlin.eq
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.times
-import org.mockito.kotlin.verify
-import org.mockito.kotlin.whenever
+import java.util.function.Consumer as JavaConsumer
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
@@ -58,6 +51,13 @@
import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
+import org.mockito.kotlin.any
+import org.mockito.kotlin.argumentCaptor
+import org.mockito.kotlin.eq
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.times
+import org.mockito.kotlin.verify
+import org.mockito.kotlin.whenever
class ExtensionWindowLayoutInfoBackendTest {
diff --git a/window/window/src/androidTest/java/androidx/window/layout/adapter/extensions/ExtensionsWindowLayoutInfoAdapterTest.kt b/window/window/src/androidTest/java/androidx/window/layout/adapter/extensions/ExtensionsWindowLayoutInfoAdapterTest.kt
index 376cf74..02f89fe 100644
--- a/window/window/src/androidTest/java/androidx/window/layout/adapter/extensions/ExtensionsWindowLayoutInfoAdapterTest.kt
+++ b/window/window/src/androidTest/java/androidx/window/layout/adapter/extensions/ExtensionsWindowLayoutInfoAdapterTest.kt
@@ -16,8 +16,6 @@
package androidx.window.layout.adapter.extensions
-import androidx.window.extensions.layout.FoldingFeature as OEMFoldingFeature
-import androidx.window.extensions.layout.WindowLayoutInfo as OEMWindowLayoutInfo
import android.graphics.Rect
import android.os.Build
import androidx.annotation.RequiresApi
@@ -25,8 +23,10 @@
import androidx.window.TestActivity
import androidx.window.WindowTestUtils
import androidx.window.core.Bounds
+import androidx.window.extensions.layout.FoldingFeature as OEMFoldingFeature
import androidx.window.extensions.layout.FoldingFeature.STATE_HALF_OPENED
import androidx.window.extensions.layout.FoldingFeature.TYPE_HINGE
+import androidx.window.extensions.layout.WindowLayoutInfo as OEMWindowLayoutInfo
import androidx.window.layout.FoldingFeature.State.Companion.HALF_OPENED
import androidx.window.layout.HardwareFoldingFeature
import androidx.window.layout.HardwareFoldingFeature.Type.Companion.HINGE
diff --git a/window/window/src/androidTest/java/androidx/window/layout/adapter/sidecar/SidecarCompatDeviceTest.kt b/window/window/src/androidTest/java/androidx/window/layout/adapter/sidecar/SidecarCompatDeviceTest.kt
index 8d3873e..8a36b00 100644
--- a/window/window/src/androidTest/java/androidx/window/layout/adapter/sidecar/SidecarCompatDeviceTest.kt
+++ b/window/window/src/androidTest/java/androidx/window/layout/adapter/sidecar/SidecarCompatDeviceTest.kt
@@ -28,19 +28,13 @@
import androidx.window.core.VerificationMode.QUIET
import androidx.window.core.Version
import androidx.window.layout.HardwareFoldingFeature
-import androidx.window.layout.adapter.sidecar.ExtensionInterfaceCompat.ExtensionCallbackInterface
import androidx.window.layout.HardwareFoldingFeature.Type
import androidx.window.layout.HardwareFoldingFeature.Type.Companion.FOLD
import androidx.window.layout.HardwareFoldingFeature.Type.Companion.HINGE
import androidx.window.layout.WindowLayoutInfo
+import androidx.window.layout.adapter.sidecar.ExtensionInterfaceCompat.ExtensionCallbackInterface
import androidx.window.sidecar.SidecarDisplayFeature
import androidx.window.sidecar.SidecarWindowLayoutInfo
-import org.mockito.kotlin.any
-import org.mockito.kotlin.argThat
-import org.mockito.kotlin.atLeastOnce
-import org.mockito.kotlin.eq
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.verify
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.UnconfinedTestDispatcher
@@ -51,6 +45,12 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentMatcher
+import org.mockito.kotlin.any
+import org.mockito.kotlin.argThat
+import org.mockito.kotlin.atLeastOnce
+import org.mockito.kotlin.eq
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.verify
/**
* Tests for [SidecarCompat] implementation of [ExtensionInterfaceCompat] that are
diff --git a/window/window/src/androidTest/java/androidx/window/layout/adapter/sidecar/SidecarCompatTest.kt b/window/window/src/androidTest/java/androidx/window/layout/adapter/sidecar/SidecarCompatTest.kt
index 305c4f8..e8e0ff1 100644
--- a/window/window/src/androidTest/java/androidx/window/layout/adapter/sidecar/SidecarCompatTest.kt
+++ b/window/window/src/androidTest/java/androidx/window/layout/adapter/sidecar/SidecarCompatTest.kt
@@ -31,7 +31,6 @@
import androidx.window.WindowTestBase
import androidx.window.core.Bounds
import androidx.window.layout.FoldingFeature
-import androidx.window.layout.adapter.sidecar.ExtensionInterfaceCompat.ExtensionCallbackInterface
import androidx.window.layout.FoldingFeature.State.Companion.FLAT
import androidx.window.layout.FoldingFeature.State.Companion.HALF_OPENED
import androidx.window.layout.HardwareFoldingFeature
@@ -39,11 +38,18 @@
import androidx.window.layout.TestFoldingFeatureUtil.invalidFoldBounds
import androidx.window.layout.TestFoldingFeatureUtil.validFoldBound
import androidx.window.layout.WindowLayoutInfo
+import androidx.window.layout.adapter.sidecar.ExtensionInterfaceCompat.ExtensionCallbackInterface
import androidx.window.sidecar.SidecarDeviceState
import androidx.window.sidecar.SidecarDisplayFeature
import androidx.window.sidecar.SidecarInterface
import androidx.window.sidecar.SidecarInterface.SidecarCallback
import androidx.window.sidecar.SidecarWindowLayoutInfo
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
import org.mockito.kotlin.any
import org.mockito.kotlin.argThat
import org.mockito.kotlin.argumentCaptor
@@ -57,12 +63,6 @@
import org.mockito.kotlin.verify
import org.mockito.kotlin.verifyZeroInteractions
import org.mockito.kotlin.whenever
-import org.junit.Assert.assertEquals
-import org.junit.Assert.assertNotNull
-import org.junit.Assert.assertTrue
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
/**
* Tests for [SidecarCompat] implementation of [ExtensionInterfaceCompat]. This class
diff --git a/window/window/src/androidTest/java/androidx/window/layout/adapter/sidecar/SidecarWindowBackendIntegrationTest.kt b/window/window/src/androidTest/java/androidx/window/layout/adapter/sidecar/SidecarWindowBackendIntegrationTest.kt
index 46ae397..283faac 100644
--- a/window/window/src/androidTest/java/androidx/window/layout/adapter/sidecar/SidecarWindowBackendIntegrationTest.kt
+++ b/window/window/src/androidTest/java/androidx/window/layout/adapter/sidecar/SidecarWindowBackendIntegrationTest.kt
@@ -37,11 +37,7 @@
import androidx.window.layout.WindowLayoutInfo
import androidx.window.layout.WindowMetricsCalculator
import androidx.window.layout.adapter.sidecar.ExtensionInterfaceCompat.ExtensionCallbackInterface
-import org.mockito.kotlin.any
-import org.mockito.kotlin.argThat
-import org.mockito.kotlin.atLeastOnce
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.verify
+import java.util.HashSet
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Assume
@@ -50,7 +46,11 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentMatcher
-import java.util.HashSet
+import org.mockito.kotlin.any
+import org.mockito.kotlin.argThat
+import org.mockito.kotlin.atLeastOnce
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.verify
/** Tests for the extension implementation on the device. */
@LargeTest
diff --git a/window/window/src/androidTest/java/androidx/window/layout/adapter/sidecar/SidecarWindowBackendTest.kt b/window/window/src/androidTest/java/androidx/window/layout/adapter/sidecar/SidecarWindowBackendTest.kt
index 434cc92..43daf25 100644
--- a/window/window/src/androidTest/java/androidx/window/layout/adapter/sidecar/SidecarWindowBackendTest.kt
+++ b/window/window/src/androidTest/java/androidx/window/layout/adapter/sidecar/SidecarWindowBackendTest.kt
@@ -30,10 +30,6 @@
import androidx.window.layout.HardwareFoldingFeature.Type.Companion.HINGE
import androidx.window.layout.WindowLayoutInfo
import com.google.common.util.concurrent.MoreExecutors
-import org.mockito.kotlin.eq
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.times
-import org.mockito.kotlin.verify
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertTrue
@@ -41,6 +37,10 @@
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.kotlin.eq
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.times
+import org.mockito.kotlin.verify
/** Tests for [SidecarWindowBackend] class. */
@LargeTest
diff --git a/window/window/src/main/java/androidx/window/area/EmptyWindowAreaControllerImpl.kt b/window/window/src/main/java/androidx/window/area/EmptyWindowAreaControllerImpl.kt
index d56eccb..de0971a 100644
--- a/window/window/src/main/java/androidx/window/area/EmptyWindowAreaControllerImpl.kt
+++ b/window/window/src/main/java/androidx/window/area/EmptyWindowAreaControllerImpl.kt
@@ -18,9 +18,9 @@
import android.app.Activity
import androidx.window.core.ExperimentalWindowApi
+import java.util.concurrent.Executor
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flowOf
-import java.util.concurrent.Executor
/**
* Empty Implementation for devices that do not
diff --git a/window/window/src/main/java/androidx/window/embedding/EmbeddingAdapter.kt b/window/window/src/main/java/androidx/window/embedding/EmbeddingAdapter.kt
index 6dd98b7..3340a8b 100644
--- a/window/window/src/main/java/androidx/window/embedding/EmbeddingAdapter.kt
+++ b/window/window/src/main/java/androidx/window/embedding/EmbeddingAdapter.kt
@@ -16,23 +16,12 @@
package androidx.window.embedding
-import android.util.Pair as AndroidPair
-import androidx.window.extensions.embedding.ActivityRule as OEMActivityRule
-import androidx.window.extensions.embedding.ActivityRule.Builder as ActivityRuleBuilder
-import androidx.window.extensions.embedding.EmbeddingRule as OEMEmbeddingRule
-import androidx.window.extensions.embedding.SplitAttributes as OEMSplitAttributes
-import androidx.window.extensions.embedding.SplitAttributes.SplitType as OEMSplitType
-import androidx.window.extensions.embedding.SplitAttributesCalculatorParams as OEMSplitAttributesCalculatorParams
-import androidx.window.extensions.embedding.SplitInfo as OEMSplitInfo
-import androidx.window.extensions.embedding.SplitPairRule as OEMSplitPairRule
-import androidx.window.extensions.embedding.SplitPairRule.Builder as SplitPairRuleBuilder
-import androidx.window.extensions.embedding.SplitPlaceholderRule as OEMSplitPlaceholderRule
-import androidx.window.extensions.embedding.SplitPlaceholderRule.Builder as SplitPlaceholderRuleBuilder
import android.annotation.SuppressLint
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.util.LayoutDirection
+import android.util.Pair as AndroidPair
import android.view.WindowMetrics
import androidx.window.core.ExperimentalWindowApi
import androidx.window.core.ExtensionsUtil
@@ -43,17 +32,28 @@
import androidx.window.embedding.SplitAttributes.LayoutDirection.Companion.RIGHT_TO_LEFT
import androidx.window.embedding.SplitAttributes.LayoutDirection.Companion.TOP_TO_BOTTOM
import androidx.window.embedding.SplitAttributes.SplitType
-import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_HINGE
import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_EQUAL
import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_EXPAND
+import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_HINGE
import androidx.window.embedding.SplitAttributes.SplitType.Companion.ratio
import androidx.window.extensions.WindowExtensions
import androidx.window.extensions.core.util.function.Function
import androidx.window.extensions.core.util.function.Predicate
+import androidx.window.extensions.embedding.ActivityRule as OEMActivityRule
+import androidx.window.extensions.embedding.ActivityRule.Builder as ActivityRuleBuilder
+import androidx.window.extensions.embedding.EmbeddingRule as OEMEmbeddingRule
+import androidx.window.extensions.embedding.SplitAttributes as OEMSplitAttributes
+import androidx.window.extensions.embedding.SplitAttributes.SplitType as OEMSplitType
import androidx.window.extensions.embedding.SplitAttributes.SplitType.RatioSplitType
+import androidx.window.extensions.embedding.SplitAttributesCalculatorParams as OEMSplitAttributesCalculatorParams
+import androidx.window.extensions.embedding.SplitInfo as OEMSplitInfo
+import androidx.window.extensions.embedding.SplitPairRule as OEMSplitPairRule
+import androidx.window.extensions.embedding.SplitPairRule.Builder as SplitPairRuleBuilder
import androidx.window.extensions.embedding.SplitPairRule.FINISH_ADJACENT
import androidx.window.extensions.embedding.SplitPairRule.FINISH_ALWAYS
import androidx.window.extensions.embedding.SplitPairRule.FINISH_NEVER
+import androidx.window.extensions.embedding.SplitPlaceholderRule as OEMSplitPlaceholderRule
+import androidx.window.extensions.embedding.SplitPlaceholderRule.Builder as SplitPlaceholderRuleBuilder
import androidx.window.layout.WindowMetricsCalculator
import androidx.window.layout.adapter.extensions.ExtensionsWindowLayoutInfoAdapter
import kotlin.Pair
diff --git a/window/window/src/main/java/androidx/window/embedding/EmbeddingCompat.kt b/window/window/src/main/java/androidx/window/embedding/EmbeddingCompat.kt
index 6a1248c..d54b21a 100644
--- a/window/window/src/main/java/androidx/window/embedding/EmbeddingCompat.kt
+++ b/window/window/src/main/java/androidx/window/embedding/EmbeddingCompat.kt
@@ -16,7 +16,6 @@
package androidx.window.embedding
-import androidx.window.extensions.embedding.SplitInfo as OEMSplitInfo
import android.app.Activity
import android.content.Context
import android.util.Log
@@ -31,6 +30,7 @@
import androidx.window.extensions.WindowExtensionsProvider
import androidx.window.extensions.core.util.function.Consumer
import androidx.window.extensions.embedding.ActivityEmbeddingComponent
+import androidx.window.extensions.embedding.SplitInfo as OEMSplitInfo
import java.lang.reflect.Proxy
/**
diff --git a/window/window/src/main/java/androidx/window/embedding/SafeActivityEmbeddingComponentProvider.kt b/window/window/src/main/java/androidx/window/embedding/SafeActivityEmbeddingComponentProvider.kt
index 92965c3..be35e2a 100644
--- a/window/window/src/main/java/androidx/window/embedding/SafeActivityEmbeddingComponentProvider.kt
+++ b/window/window/src/main/java/androidx/window/embedding/SafeActivityEmbeddingComponentProvider.kt
@@ -18,6 +18,7 @@
import android.app.Activity
import androidx.annotation.VisibleForTesting
+import androidx.window.SafeWindowExtensionsProvider
import androidx.window.core.ConsumerAdapter
import androidx.window.core.ExtensionsUtil
import androidx.window.extensions.WindowExtensions
@@ -27,7 +28,6 @@
import androidx.window.reflection.ReflectionUtils.doesReturn
import androidx.window.reflection.ReflectionUtils.isPublic
import androidx.window.reflection.ReflectionUtils.validateReflection
-import androidx.window.SafeWindowExtensionsProvider
import androidx.window.reflection.WindowExtensionsConstants.ACTIVITY_EMBEDDING_COMPONENT_CLASS
/**
diff --git a/window/window/src/main/java/androidx/window/layout/SafeWindowLayoutComponentProvider.kt b/window/window/src/main/java/androidx/window/layout/SafeWindowLayoutComponentProvider.kt
index b9dcbef..047a14c 100644
--- a/window/window/src/main/java/androidx/window/layout/SafeWindowLayoutComponentProvider.kt
+++ b/window/window/src/main/java/androidx/window/layout/SafeWindowLayoutComponentProvider.kt
@@ -20,6 +20,7 @@
import android.content.Context
import android.graphics.Rect
import androidx.annotation.VisibleForTesting
+import androidx.window.SafeWindowExtensionsProvider
import androidx.window.core.ConsumerAdapter
import androidx.window.core.ExtensionsUtil
import androidx.window.extensions.WindowExtensions
@@ -29,7 +30,6 @@
import androidx.window.reflection.ReflectionUtils.doesReturn
import androidx.window.reflection.ReflectionUtils.isPublic
import androidx.window.reflection.ReflectionUtils.validateReflection
-import androidx.window.SafeWindowExtensionsProvider
import androidx.window.reflection.WindowExtensionsConstants.FOLDING_FEATURE_CLASS
import androidx.window.reflection.WindowExtensionsConstants.JAVA_CONSUMER
import androidx.window.reflection.WindowExtensionsConstants.WINDOW_CONSUMER
diff --git a/window/window/src/main/java/androidx/window/layout/WindowMetricsCalculator.kt b/window/window/src/main/java/androidx/window/layout/WindowMetricsCalculator.kt
index 8d8151e..94dd455 100644
--- a/window/window/src/main/java/androidx/window/layout/WindowMetricsCalculator.kt
+++ b/window/window/src/main/java/androidx/window/layout/WindowMetricsCalculator.kt
@@ -16,12 +16,12 @@
package androidx.window.layout
-import android.view.WindowMetrics as AndroidWindowMetrics
import android.app.Activity
import android.content.Context
import android.inputmethodservice.InputMethodService
import android.os.Build
import android.view.Display
+import android.view.WindowMetrics as AndroidWindowMetrics
import androidx.annotation.RequiresApi
import androidx.annotation.RestrictTo
import androidx.annotation.UiContext
diff --git a/window/window/src/main/java/androidx/window/layout/adapter/WindowBackend.kt b/window/window/src/main/java/androidx/window/layout/adapter/WindowBackend.kt
index 3524cb1..efb74a0 100644
--- a/window/window/src/main/java/androidx/window/layout/adapter/WindowBackend.kt
+++ b/window/window/src/main/java/androidx/window/layout/adapter/WindowBackend.kt
@@ -17,10 +17,10 @@
import android.app.Activity
import android.content.Context
+import androidx.annotation.UiContext
import androidx.core.util.Consumer
import androidx.window.layout.WindowLayoutInfo
import java.util.concurrent.Executor
-import androidx.annotation.UiContext
/**
* Backing interface for [androidx.window.layout.WindowInfoTracker] instances that serve as the
diff --git a/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionWindowLayoutInfoBackend.kt b/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionWindowLayoutInfoBackend.kt
index 64e60f8..9de412a 100644
--- a/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionWindowLayoutInfoBackend.kt
+++ b/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionWindowLayoutInfoBackend.kt
@@ -16,8 +16,6 @@
package androidx.window.layout.adapter.extensions
-import androidx.window.extensions.core.util.function.Consumer as OEMConsumer
-import androidx.window.extensions.layout.WindowLayoutInfo as OEMWindowLayoutInfo
import android.app.Activity
import android.content.Context
import androidx.annotation.GuardedBy
@@ -27,7 +25,9 @@
import androidx.window.core.ConsumerAdapter
import androidx.window.core.ExtensionsUtil
import androidx.window.extensions.WindowExtensions
+import androidx.window.extensions.core.util.function.Consumer as OEMConsumer
import androidx.window.extensions.layout.WindowLayoutComponent
+import androidx.window.extensions.layout.WindowLayoutInfo as OEMWindowLayoutInfo
import androidx.window.layout.WindowLayoutInfo
import androidx.window.layout.adapter.WindowBackend
import androidx.window.layout.adapter.extensions.ExtensionsWindowLayoutInfoAdapter.translate
diff --git a/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionsWindowLayoutInfoAdapter.kt b/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionsWindowLayoutInfoAdapter.kt
index ed9f74d..5f4a31b 100644
--- a/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionsWindowLayoutInfoAdapter.kt
+++ b/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionsWindowLayoutInfoAdapter.kt
@@ -16,13 +16,13 @@
package androidx.window.layout.adapter.extensions
-import androidx.window.extensions.layout.FoldingFeature as OEMFoldingFeature
-import androidx.window.extensions.layout.WindowLayoutInfo as OEMWindowLayoutInfo
import android.app.Activity
import android.content.Context
import android.os.Build
import androidx.annotation.UiContext
import androidx.window.core.Bounds
+import androidx.window.extensions.layout.FoldingFeature as OEMFoldingFeature
+import androidx.window.extensions.layout.WindowLayoutInfo as OEMWindowLayoutInfo
import androidx.window.layout.FoldingFeature
import androidx.window.layout.FoldingFeature.State.Companion.FLAT
import androidx.window.layout.FoldingFeature.State.Companion.HALF_OPENED
diff --git a/window/window/src/test/java/androidx/window/core/ConsumerAdapterTest.kt b/window/window/src/test/java/androidx/window/core/ConsumerAdapterTest.kt
index cc18d1e..22dd2b4 100644
--- a/window/window/src/test/java/androidx/window/core/ConsumerAdapterTest.kt
+++ b/window/window/src/test/java/androidx/window/core/ConsumerAdapterTest.kt
@@ -20,11 +20,11 @@
import android.app.Activity
import android.content.Context
import android.os.Build
-import org.mockito.kotlin.mock
import java.util.function.Consumer
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Test
+import org.mockito.kotlin.mock
/**
* Tests for [ConsumerAdapter] ensuring that the reflection calls work as expected.
diff --git a/window/window/src/test/java/androidx/window/core/SpecificationComputerTest.kt b/window/window/src/test/java/androidx/window/core/SpecificationComputerTest.kt
index a527f04..848f97a 100644
--- a/window/window/src/test/java/androidx/window/core/SpecificationComputerTest.kt
+++ b/window/window/src/test/java/androidx/window/core/SpecificationComputerTest.kt
@@ -20,15 +20,15 @@
import androidx.window.core.VerificationMode.LOG
import androidx.window.core.VerificationMode.QUIET
import androidx.window.core.VerificationMode.STRICT
-import org.mockito.kotlin.eq
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.verify
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertNull
import org.junit.Assert.assertTrue
import org.junit.Test
import org.mockito.ArgumentMatchers.contains
+import org.mockito.kotlin.eq
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.verify
/**
* Tests [SpecificationComputer] to verify the following behaviors.
diff --git a/window/window/src/test/java/androidx/window/embedding/EmbeddingCompatTest.kt b/window/window/src/test/java/androidx/window/embedding/EmbeddingCompatTest.kt
index aa9e3f1..029aa99 100644
--- a/window/window/src/test/java/androidx/window/embedding/EmbeddingCompatTest.kt
+++ b/window/window/src/test/java/androidx/window/embedding/EmbeddingCompatTest.kt
@@ -16,8 +16,6 @@
package androidx.window.embedding
-import java.util.function.Consumer as JavaConsumer
-import androidx.window.extensions.embedding.SplitInfo as OEMSplitInfo
import android.app.Activity
import androidx.window.core.ConsumerAdapter
import androidx.window.core.ExtensionsUtil
@@ -25,6 +23,8 @@
import androidx.window.extensions.WindowExtensions.VENDOR_API_LEVEL_2
import androidx.window.extensions.core.util.function.Consumer
import androidx.window.extensions.embedding.ActivityEmbeddingComponent
+import androidx.window.extensions.embedding.SplitInfo as OEMSplitInfo
+import java.util.function.Consumer as JavaConsumer
import org.junit.Test
import org.mockito.kotlin.any
import org.mockito.kotlin.mock
diff --git a/window/window/src/test/java/androidx/window/layout/adapter/sidecar/SidecarCompatUnitTest.kt b/window/window/src/test/java/androidx/window/layout/adapter/sidecar/SidecarCompatUnitTest.kt
index 6af845c..b7dddc4 100644
--- a/window/window/src/test/java/androidx/window/layout/adapter/sidecar/SidecarCompatUnitTest.kt
+++ b/window/window/src/test/java/androidx/window/layout/adapter/sidecar/SidecarCompatUnitTest.kt
@@ -25,15 +25,18 @@
import android.view.Window
import android.view.WindowManager
import androidx.window.TestWindow
-import androidx.window.layout.adapter.sidecar.ExtensionInterfaceCompat.ExtensionCallbackInterface
import androidx.window.layout.TestFoldingFeatureUtil.invalidFoldBounds
import androidx.window.layout.TestFoldingFeatureUtil.validFoldBound
import androidx.window.layout.WindowLayoutInfo
+import androidx.window.layout.adapter.sidecar.ExtensionInterfaceCompat.ExtensionCallbackInterface
import androidx.window.sidecar.SidecarDeviceState
import androidx.window.sidecar.SidecarDisplayFeature
import androidx.window.sidecar.SidecarInterface
import androidx.window.sidecar.SidecarInterface.SidecarCallback
import androidx.window.sidecar.SidecarWindowLayoutInfo
+import org.junit.Assert.assertEquals
+import org.junit.Before
+import org.junit.Test
import org.mockito.kotlin.any
import org.mockito.kotlin.doAnswer
import org.mockito.kotlin.doReturn
@@ -42,9 +45,6 @@
import org.mockito.kotlin.times
import org.mockito.kotlin.verify
import org.mockito.kotlin.whenever
-import org.junit.Assert.assertEquals
-import org.junit.Before
-import org.junit.Test
/**
* Unit tests for [SidecarCompat] that run on the JVM.
diff --git a/window/window/src/test/java/androidx/window/layout/adapter/sidecar/SidecarWindowBackendUnitTest.kt b/window/window/src/test/java/androidx/window/layout/adapter/sidecar/SidecarWindowBackendUnitTest.kt
index f286aa1..dc01b98 100644
--- a/window/window/src/test/java/androidx/window/layout/adapter/sidecar/SidecarWindowBackendUnitTest.kt
+++ b/window/window/src/test/java/androidx/window/layout/adapter/sidecar/SidecarWindowBackendUnitTest.kt
@@ -20,16 +20,16 @@
import androidx.core.util.Consumer
import androidx.window.layout.WindowLayoutInfo
import androidx.window.layout.adapter.sidecar.ExtensionInterfaceCompat.ExtensionCallbackInterface
-import org.mockito.kotlin.any
-import org.mockito.kotlin.eq
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.times
-import org.mockito.kotlin.verify
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
+import org.mockito.kotlin.any
+import org.mockito.kotlin.eq
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.times
+import org.mockito.kotlin.verify
/**
* Unit tests for [SidecarWindowBackend] that run on the JVM.
diff --git a/window/window/src/testUtil/java/androidx/window/layout/adapter/sidecar/SwitchOnUnregisterExtensionInterfaceCompat.kt b/window/window/src/testUtil/java/androidx/window/layout/adapter/sidecar/SwitchOnUnregisterExtensionInterfaceCompat.kt
index 1af0445..d902e75 100644
--- a/window/window/src/testUtil/java/androidx/window/layout/adapter/sidecar/SwitchOnUnregisterExtensionInterfaceCompat.kt
+++ b/window/window/src/testUtil/java/androidx/window/layout/adapter/sidecar/SwitchOnUnregisterExtensionInterfaceCompat.kt
@@ -20,13 +20,13 @@
import androidx.annotation.GuardedBy
import androidx.window.core.Bounds
import androidx.window.layout.FoldingFeature
-import androidx.window.layout.adapter.sidecar.ExtensionInterfaceCompat.ExtensionCallbackInterface
import androidx.window.layout.FoldingFeature.State
import androidx.window.layout.FoldingFeature.State.Companion.FLAT
import androidx.window.layout.FoldingFeature.State.Companion.HALF_OPENED
import androidx.window.layout.HardwareFoldingFeature
import androidx.window.layout.HardwareFoldingFeature.Type.Companion.HINGE
import androidx.window.layout.WindowLayoutInfo
+import androidx.window.layout.adapter.sidecar.ExtensionInterfaceCompat.ExtensionCallbackInterface
import java.util.concurrent.locks.Lock
import java.util.concurrent.locks.ReentrantLock
import kotlin.concurrent.withLock
diff --git a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/RemoteService.kt b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/RemoteService.kt
index 98a2ffd..b1a8714 100644
--- a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/RemoteService.kt
+++ b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/RemoteService.kt
@@ -31,11 +31,11 @@
import androidx.work.WorkQuery
import androidx.work.await
import androidx.work.multiprocess.RemoteWorkManager
+import java.util.concurrent.TimeUnit
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.cancel
import kotlinx.coroutines.launch
-import java.util.concurrent.TimeUnit
class RemoteService : LifecycleService() {
diff --git a/work/work-benchmark/build.gradle b/work/work-benchmark/build.gradle
index d4a2c31..cd0c8a6 100644
--- a/work/work-benchmark/build.gradle
+++ b/work/work-benchmark/build.gradle
@@ -38,7 +38,7 @@
}
androidx {
- name = "Android WorkManager Benchmarks"
+ name = "WorkManager Benchmarks"
publish = Publish.NONE
inceptionYear = "2019"
description = "Android WorkManager Benchmark Library"
diff --git a/work/work-benchmark/src/androidTest/java/androidx/work/benchmark/DispatchingExecutor.kt b/work/work-benchmark/src/androidTest/java/androidx/work/benchmark/DispatchingExecutor.kt
index 84bf03b..9f3beef 100644
--- a/work/work-benchmark/src/androidTest/java/androidx/work/benchmark/DispatchingExecutor.kt
+++ b/work/work-benchmark/src/androidTest/java/androidx/work/benchmark/DispatchingExecutor.kt
@@ -16,12 +16,12 @@
package androidx.work.benchmark
+import java.util.concurrent.Executor
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
-import java.util.concurrent.Executor
/**
* An [Executor] where we can await termination of all commands.
diff --git a/work/work-benchmark/src/androidTest/java/androidx/work/benchmark/MarshallingBenchmark.kt b/work/work-benchmark/src/androidTest/java/androidx/work/benchmark/MarshallingBenchmark.kt
index e174f59..d362916 100644
--- a/work/work-benchmark/src/androidTest/java/androidx/work/benchmark/MarshallingBenchmark.kt
+++ b/work/work-benchmark/src/androidTest/java/androidx/work/benchmark/MarshallingBenchmark.kt
@@ -31,11 +31,11 @@
import androidx.work.multiprocess.parcelable.ParcelConverters
import androidx.work.multiprocess.parcelable.ParcelableConstraints
import androidx.work.multiprocess.parcelable.ParcelableWorkRequest
+import java.util.concurrent.TimeUnit
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.TimeUnit
@RunWith(AndroidJUnit4::class)
@LargeTest
diff --git a/work/work-gcm/build.gradle b/work/work-gcm/build.gradle
index 562422b0..98a4351 100644
--- a/work/work-gcm/build.gradle
+++ b/work/work-gcm/build.gradle
@@ -47,7 +47,7 @@
}
androidx {
- name = "Android WorkManager GCMNetworkManager Support"
+ name = "WorkManager GCM Integration"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2019"
description = "Android WorkManager GCMNetworkManager Support"
diff --git a/work/work-gcm/src/androidTest/java/androidx/work/impl/background/gcm/GcmTaskConverterTest.kt b/work/work-gcm/src/androidTest/java/androidx/work/impl/background/gcm/GcmTaskConverterTest.kt
index 0660ca2..da05ab5 100644
--- a/work/work-gcm/src/androidTest/java/androidx/work/impl/background/gcm/GcmTaskConverterTest.kt
+++ b/work/work-gcm/src/androidTest/java/androidx/work/impl/background/gcm/GcmTaskConverterTest.kt
@@ -27,16 +27,16 @@
import androidx.work.impl.WorkManagerImpl
import androidx.work.impl.background.gcm.GcmTaskConverter.EXECUTION_WINDOW_SIZE_IN_SECONDS
import com.google.android.gms.gcm.Task
+import java.util.concurrent.TimeUnit
+import org.hamcrest.MatcherAssert.assertThat
import org.hamcrest.Matchers.greaterThan
import org.hamcrest.Matchers.lessThanOrEqualTo
import org.junit.Assert.assertEquals
-import org.hamcrest.MatcherAssert.assertThat
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import org.mockito.Mockito.`when`
import org.mockito.Mockito.spy
-import java.util.concurrent.TimeUnit
+import org.mockito.Mockito.`when`
@RunWith(AndroidJUnit4::class)
@SmallTest
diff --git a/work/work-gcm/src/androidTest/java/androidx/work/impl/background/gcm/WorkManagerGcmDispatcherTest.kt b/work/work-gcm/src/androidTest/java/androidx/work/impl/background/gcm/WorkManagerGcmDispatcherTest.kt
index 7e14f39..b3b56f5 100644
--- a/work/work-gcm/src/androidTest/java/androidx/work/impl/background/gcm/WorkManagerGcmDispatcherTest.kt
+++ b/work/work-gcm/src/androidTest/java/androidx/work/impl/background/gcm/WorkManagerGcmDispatcherTest.kt
@@ -26,27 +26,27 @@
import androidx.work.Configuration
import androidx.work.OneTimeWorkRequest
import androidx.work.impl.TestWorkManagerImpl
-import androidx.work.impl.model.WorkGenerationalId
import androidx.work.impl.WorkManagerImpl
+import androidx.work.impl.model.WorkGenerationalId
import androidx.work.impl.utils.SerialExecutorImpl
import androidx.work.impl.utils.SynchronousExecutor
import androidx.work.impl.utils.WorkTimer
import androidx.work.impl.utils.taskexecutor.SerialExecutor
import com.google.android.gms.gcm.GcmNetworkManager
import com.google.android.gms.gcm.TaskParams
+import java.util.concurrent.Executor
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentMatchers.any
import org.mockito.ArgumentMatchers.anyLong
import org.mockito.ArgumentMatchers.eq
-import org.mockito.Mockito.`when`
import org.mockito.Mockito.atLeastOnce
import org.mockito.Mockito.mock
import org.mockito.Mockito.spy
import org.mockito.Mockito.times
import org.mockito.Mockito.verify
-import java.util.concurrent.Executor
+import org.mockito.Mockito.`when`
@RunWith(AndroidJUnit4::class)
@MediumTest
diff --git a/work/work-inspection/build.gradle b/work/work-inspection/build.gradle
index 5385c55..5cfd833 100644
--- a/work/work-inspection/build.gradle
+++ b/work/work-inspection/build.gradle
@@ -42,7 +42,7 @@
}
androidx {
- name = "Android WorkManager Inspector"
+ name = "WorkManager Inspector"
type = LibraryType.IDE_PLUGIN
inceptionYear = "2020"
description = "The implementation of WorkManager Inspector."
diff --git a/work/work-inspection/src/androidTest/java/androidx/work/inspection/DispatchingExecutor.kt b/work/work-inspection/src/androidTest/java/androidx/work/inspection/DispatchingExecutor.kt
index 772f31f..68643032 100644
--- a/work/work-inspection/src/androidTest/java/androidx/work/inspection/DispatchingExecutor.kt
+++ b/work/work-inspection/src/androidTest/java/androidx/work/inspection/DispatchingExecutor.kt
@@ -16,12 +16,12 @@
package androidx.work.inspection
+import java.util.concurrent.Executor
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
-import java.util.concurrent.Executor
/**
* An [Executor] where we can await termination of all commands.
diff --git a/work/work-inspection/src/androidTest/java/androidx/work/inspection/worker/IdleWorker.kt b/work/work-inspection/src/androidTest/java/androidx/work/inspection/worker/IdleWorker.kt
index e5e63e7..c4ba239 100644
--- a/work/work-inspection/src/androidTest/java/androidx/work/inspection/worker/IdleWorker.kt
+++ b/work/work-inspection/src/androidTest/java/androidx/work/inspection/worker/IdleWorker.kt
@@ -19,9 +19,9 @@
import android.content.Context
import androidx.work.Worker
import androidx.work.WorkerParameters
+import kotlin.time.Duration
import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking
-import kotlin.time.Duration
class IdleWorker(
context: Context,
diff --git a/work/work-lint/build.gradle b/work/work-lint/build.gradle
index 083e406..fb59083 100644
--- a/work/work-lint/build.gradle
+++ b/work/work-lint/build.gradle
@@ -32,7 +32,7 @@
}
androidx {
- name = "Android WorkManager Runtime Lint Checks"
+ name = "WorkManager Runtime Lint Checks"
type = LibraryType.LINT
inceptionYear = "2019"
description = "Android WorkManager Runtime Lint Checks"
diff --git a/work/work-lint/src/main/java/androidx/work/lint/IdleBatteryChargingConstraintsDetector.kt b/work/work-lint/src/main/java/androidx/work/lint/IdleBatteryChargingConstraintsDetector.kt
index a0f5d40..975a5a8 100644
--- a/work/work-lint/src/main/java/androidx/work/lint/IdleBatteryChargingConstraintsDetector.kt
+++ b/work/work-lint/src/main/java/androidx/work/lint/IdleBatteryChargingConstraintsDetector.kt
@@ -28,6 +28,7 @@
import com.android.tools.lint.detector.api.Severity
import com.android.tools.lint.detector.api.SourceCodeScanner
import com.intellij.psi.PsiMethod
+import java.util.EnumSet
import org.jetbrains.uast.UBlockExpression
import org.jetbrains.uast.UCallExpression
import org.jetbrains.uast.UQualifiedReferenceExpression
@@ -35,7 +36,6 @@
import org.jetbrains.uast.getParentOfType
import org.jetbrains.uast.toUElement
import org.jetbrains.uast.visitor.AbstractUastVisitor
-import java.util.EnumSet
/**
* Warns when a developer uses both idle + battery charging constraints in WorkManager.
diff --git a/work/work-lint/src/main/java/androidx/work/lint/InvalidPeriodicWorkRequestIntervalDetector.kt b/work/work-lint/src/main/java/androidx/work/lint/InvalidPeriodicWorkRequestIntervalDetector.kt
index a4c7cf6..6404e126cc 100644
--- a/work/work-lint/src/main/java/androidx/work/lint/InvalidPeriodicWorkRequestIntervalDetector.kt
+++ b/work/work-lint/src/main/java/androidx/work/lint/InvalidPeriodicWorkRequestIntervalDetector.kt
@@ -27,11 +27,11 @@
import com.android.tools.lint.detector.api.Severity
import com.android.tools.lint.detector.api.SourceCodeScanner
import com.intellij.psi.PsiMethod
+import java.util.EnumSet
+import java.util.concurrent.TimeUnit
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.Name
import org.jetbrains.uast.UCallExpression
-import java.util.EnumSet
-import java.util.concurrent.TimeUnit
/**
* Ensures a valid interval duration for a `PeriodicWorkRequest`.
diff --git a/work/work-lint/src/main/java/androidx/work/lint/RxWorkerSetProgressDetector.kt b/work/work-lint/src/main/java/androidx/work/lint/RxWorkerSetProgressDetector.kt
index 41a6ac4..f2c1f5d 100644
--- a/work/work-lint/src/main/java/androidx/work/lint/RxWorkerSetProgressDetector.kt
+++ b/work/work-lint/src/main/java/androidx/work/lint/RxWorkerSetProgressDetector.kt
@@ -28,8 +28,8 @@
import com.android.tools.lint.detector.api.Severity
import com.android.tools.lint.detector.api.SourceCodeScanner
import com.intellij.psi.PsiMethod
-import org.jetbrains.uast.UCallExpression
import java.util.EnumSet
+import org.jetbrains.uast.UCallExpression
class RxWorkerSetProgressDetector : Detector(), SourceCodeScanner {
companion object {
diff --git a/work/work-lint/src/main/java/androidx/work/lint/SpecifyForegroundServiceTypeIssueDetector.kt b/work/work-lint/src/main/java/androidx/work/lint/SpecifyForegroundServiceTypeIssueDetector.kt
index 0d6e67d..c4f30bf 100644
--- a/work/work-lint/src/main/java/androidx/work/lint/SpecifyForegroundServiceTypeIssueDetector.kt
+++ b/work/work-lint/src/main/java/androidx/work/lint/SpecifyForegroundServiceTypeIssueDetector.kt
@@ -31,9 +31,9 @@
import com.android.tools.lint.detector.api.XmlContext
import com.android.tools.lint.detector.api.XmlScanner
import com.intellij.psi.PsiMethod
+import java.util.EnumSet
import org.jetbrains.uast.UCallExpression
import org.w3c.dom.Element
-import java.util.EnumSet
/**
* Detects usage of `ForegroundInfo` with the `foregroundServiceType` and ensure that the service
diff --git a/work/work-lint/src/main/java/androidx/work/lint/SpecifyJobSchedulerIdRangeIssueDetector.kt b/work/work-lint/src/main/java/androidx/work/lint/SpecifyJobSchedulerIdRangeIssueDetector.kt
index e3245f8..5d1a66d 100644
--- a/work/work-lint/src/main/java/androidx/work/lint/SpecifyJobSchedulerIdRangeIssueDetector.kt
+++ b/work/work-lint/src/main/java/androidx/work/lint/SpecifyJobSchedulerIdRangeIssueDetector.kt
@@ -29,9 +29,9 @@
import com.android.tools.lint.detector.api.Severity
import com.android.tools.lint.detector.api.SourceCodeScanner
import com.intellij.psi.PsiMethod
+import java.util.EnumSet
import org.jetbrains.uast.UCallExpression
import org.jetbrains.uast.UClass
-import java.util.EnumSet
class SpecifyJobSchedulerIdRangeIssueDetector : Detector(), SourceCodeScanner {
companion object {
diff --git a/work/work-lint/src/main/java/androidx/work/lint/WorkerHasPublicModifierDetector.kt b/work/work-lint/src/main/java/androidx/work/lint/WorkerHasPublicModifierDetector.kt
index a5730e6..b3c794b7 100644
--- a/work/work-lint/src/main/java/androidx/work/lint/WorkerHasPublicModifierDetector.kt
+++ b/work/work-lint/src/main/java/androidx/work/lint/WorkerHasPublicModifierDetector.kt
@@ -30,9 +30,9 @@
import com.android.tools.lint.detector.api.SourceCodeScanner
import com.intellij.lang.jvm.JvmModifier
import com.intellij.psi.PsiMethod
+import java.util.EnumSet
import org.jetbrains.uast.UCallExpression
import org.jetbrains.uast.UClass
-import java.util.EnumSet
class WorkerHasPublicModifierDetector : Detector(), SourceCodeScanner {
companion object {
diff --git a/work/work-multiprocess/build.gradle b/work/work-multiprocess/build.gradle
index 7b7697d..94c4112 100644
--- a/work/work-multiprocess/build.gradle
+++ b/work/work-multiprocess/build.gradle
@@ -49,7 +49,7 @@
}
androidx {
- name = "Android WorkManager Multiprocess Implementation"
+ name = "WorkManager Multiprocess"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2020"
description = "Android WorkManager runtime library"
diff --git a/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/ListenableWorkerImplClientTest.kt b/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/ListenableWorkerImplClientTest.kt
index 65381d0..4f225a8 100644
--- a/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/ListenableWorkerImplClientTest.kt
+++ b/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/ListenableWorkerImplClientTest.kt
@@ -28,6 +28,7 @@
import androidx.work.impl.utils.SerialExecutorImpl
import androidx.work.impl.utils.futures.SettableFuture
import androidx.work.impl.utils.taskexecutor.TaskExecutor
+import java.util.concurrent.Executor
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertNull
import org.junit.Assert.assertTrue
@@ -37,11 +38,10 @@
import org.mockito.ArgumentMatchers.any
import org.mockito.ArgumentMatchers.anyInt
import org.mockito.ArgumentMatchers.anyString
-import org.mockito.Mockito.`when`
import org.mockito.Mockito.mock
import org.mockito.Mockito.spy
import org.mockito.Mockito.verify
-import java.util.concurrent.Executor
+import org.mockito.Mockito.`when`
@RunWith(AndroidJUnit4::class)
public class ListenableWorkerImplClientTest {
diff --git a/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/ParcelableWorkContinuationImplTest.kt b/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/ParcelableWorkContinuationImplTest.kt
index d0d6eee..4e96412 100644
--- a/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/ParcelableWorkContinuationImplTest.kt
+++ b/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/ParcelableWorkContinuationImplTest.kt
@@ -36,14 +36,14 @@
import androidx.work.multiprocess.parcelable.ParcelConverters.marshall
import androidx.work.multiprocess.parcelable.ParcelConverters.unmarshall
import androidx.work.multiprocess.parcelable.ParcelableWorkContinuationImpl
+import java.util.concurrent.Executor
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import org.mockito.Mockito.`when`
import org.mockito.Mockito.mock
import org.mockito.Mockito.spy
-import java.util.concurrent.Executor
+import org.mockito.Mockito.`when`
@RunWith(AndroidJUnit4::class)
public class ParcelableWorkContinuationImplTest {
diff --git a/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/ParcelableWorkInfoTest.kt b/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/ParcelableWorkInfoTest.kt
index 0be0967..96a5676 100644
--- a/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/ParcelableWorkInfoTest.kt
+++ b/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/ParcelableWorkInfoTest.kt
@@ -24,10 +24,10 @@
import androidx.work.multiprocess.parcelable.ParcelConverters
import androidx.work.multiprocess.parcelable.ParcelableWorkInfo
import androidx.work.multiprocess.parcelable.ParcelableWorkInfos
+import java.util.UUID
import org.junit.Assert.assertEquals
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.UUID
@RunWith(AndroidJUnit4::class)
public class ParcelableWorkInfoTest {
diff --git a/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/ParcelableWorkQueryTest.kt b/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/ParcelableWorkQueryTest.kt
index 64a7a50..679f860 100644
--- a/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/ParcelableWorkQueryTest.kt
+++ b/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/ParcelableWorkQueryTest.kt
@@ -23,10 +23,10 @@
import androidx.work.WorkQuery
import androidx.work.multiprocess.parcelable.ParcelConverters
import androidx.work.multiprocess.parcelable.ParcelableWorkQuery
+import java.util.UUID
import org.junit.Assert.assertEquals
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.UUID
@RunWith(AndroidJUnit4::class)
public class ParcelableWorkQueryTest {
diff --git a/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/ParcelableWorkRequestConvertersTest.kt b/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/ParcelableWorkRequestConvertersTest.kt
index ea7ed12..ba9e090 100644
--- a/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/ParcelableWorkRequestConvertersTest.kt
+++ b/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/ParcelableWorkRequestConvertersTest.kt
@@ -30,10 +30,10 @@
import androidx.work.multiprocess.parcelable.ParcelConverters
import androidx.work.multiprocess.parcelable.ParcelableWorkRequest
import androidx.work.multiprocess.parcelable.ParcelableWorkRequests
+import java.util.concurrent.TimeUnit
import org.junit.Assert.assertEquals
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.TimeUnit
@RunWith(AndroidJUnit4::class)
public class ParcelableWorkRequestConvertersTest {
diff --git a/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/RemoteCoroutineWorkerTest.kt b/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/RemoteCoroutineWorkerTest.kt
index e28fc49..3b1c18b 100644
--- a/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/RemoteCoroutineWorkerTest.kt
+++ b/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/RemoteCoroutineWorkerTest.kt
@@ -34,13 +34,13 @@
import androidx.work.impl.foreground.ForegroundProcessor
import androidx.work.impl.utils.SerialExecutorImpl
import androidx.work.impl.utils.taskexecutor.TaskExecutor
+import java.util.concurrent.Executor
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import org.mockito.Mockito.`when`
import org.mockito.Mockito.mock
-import java.util.concurrent.Executor
+import org.mockito.Mockito.`when`
@RunWith(AndroidJUnit4::class)
public class RemoteCoroutineWorkerTest {
diff --git a/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/RemoteListenableWorkerTest.kt b/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/RemoteListenableWorkerTest.kt
index 5efb197..5871f12 100644
--- a/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/RemoteListenableWorkerTest.kt
+++ b/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/RemoteListenableWorkerTest.kt
@@ -39,14 +39,14 @@
import androidx.work.impl.utils.taskexecutor.TaskExecutor
import androidx.work.multiprocess.RemoteListenableWorker.ARGUMENT_CLASS_NAME
import androidx.work.multiprocess.RemoteListenableWorker.ARGUMENT_PACKAGE_NAME
+import java.util.concurrent.Executor
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNull
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import org.mockito.Mockito.`when`
import org.mockito.Mockito.mock
-import java.util.concurrent.Executor
+import org.mockito.Mockito.`when`
@RunWith(AndroidJUnit4::class)
public class RemoteListenableWorkerTest {
diff --git a/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/RemoteWorkManagerClientTest.kt b/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/RemoteWorkManagerClientTest.kt
index 7e1329e..e5d60a2 100644
--- a/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/RemoteWorkManagerClientTest.kt
+++ b/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/RemoteWorkManagerClientTest.kt
@@ -27,6 +27,7 @@
import androidx.work.impl.utils.SerialExecutorImpl
import androidx.work.impl.utils.futures.SettableFuture
import androidx.work.impl.utils.taskexecutor.TaskExecutor
+import java.util.concurrent.Executor
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertNull
import org.junit.Assert.assertTrue
@@ -35,14 +36,13 @@
import org.junit.runner.RunWith
import org.mockito.ArgumentMatchers.any
import org.mockito.ArgumentMatchers.anyString
-import org.mockito.Mockito.`when`
import org.mockito.Mockito.anyInt
import org.mockito.Mockito.atLeastOnce
import org.mockito.Mockito.mock
import org.mockito.Mockito.never
import org.mockito.Mockito.spy
import org.mockito.Mockito.verify
-import java.util.concurrent.Executor
+import org.mockito.Mockito.`when`
@RunWith(AndroidJUnit4::class)
public class RemoteWorkManagerClientTest {
diff --git a/work/work-runtime-ktx/build.gradle b/work/work-runtime-ktx/build.gradle
index f45007c..34051b4 100644
--- a/work/work-runtime-ktx/build.gradle
+++ b/work/work-runtime-ktx/build.gradle
@@ -40,7 +40,7 @@
}
androidx {
- name = "Android WorkManager Kotlin Extensions"
+ name = "WorkManager Kotlin Extensions"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "Android WorkManager Kotlin Extensions"
diff --git a/work/work-runtime-ktx/src/androidTest/java/androidx/work/CoroutineWorkerTest.kt b/work/work-runtime-ktx/src/androidTest/java/androidx/work/CoroutineWorkerTest.kt
index a37928b..34e716c 100644
--- a/work/work-runtime-ktx/src/androidTest/java/androidx/work/CoroutineWorkerTest.kt
+++ b/work/work-runtime-ktx/src/androidTest/java/androidx/work/CoroutineWorkerTest.kt
@@ -30,10 +30,12 @@
import androidx.work.impl.utils.futures.SettableFuture
import androidx.work.impl.utils.taskexecutor.TaskExecutor
import androidx.work.workers.ProgressUpdatingWorker
+import java.util.UUID
+import java.util.concurrent.Executor
import kotlinx.coroutines.asCoroutineDispatcher
import kotlinx.coroutines.runBlocking
-import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.CoreMatchers.instanceOf
+import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.CoreMatchers.nullValue
import org.hamcrest.MatcherAssert.assertThat
import org.junit.After
@@ -46,8 +48,6 @@
import org.mockito.Mockito.spy
import org.mockito.Mockito.times
import org.mockito.Mockito.verify
-import java.util.UUID
-import java.util.concurrent.Executor
@RunWith(AndroidJUnit4::class)
@SmallTest
diff --git a/work/work-runtime-ktx/src/androidTest/java/androidx/work/ListenableFutureTest.kt b/work/work-runtime-ktx/src/androidTest/java/androidx/work/ListenableFutureTest.kt
index 61b8b36..7cf491c 100644
--- a/work/work-runtime-ktx/src/androidTest/java/androidx/work/ListenableFutureTest.kt
+++ b/work/work-runtime-ktx/src/androidTest/java/androidx/work/ListenableFutureTest.kt
@@ -25,8 +25,8 @@
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
-import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.CoreMatchers.instanceOf
+import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Ignore
import org.junit.Test
diff --git a/work/work-runtime-ktx/src/androidTest/java/androidx/work/PeriodicWorkRequestTest.kt b/work/work-runtime-ktx/src/androidTest/java/androidx/work/PeriodicWorkRequestTest.kt
index f406101..c20e521 100644
--- a/work/work-runtime-ktx/src/androidTest/java/androidx/work/PeriodicWorkRequestTest.kt
+++ b/work/work-runtime-ktx/src/androidTest/java/androidx/work/PeriodicWorkRequestTest.kt
@@ -20,11 +20,11 @@
import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
import androidx.work.workers.TestWorker
+import java.time.Duration
+import java.util.concurrent.TimeUnit
import org.junit.Assert.assertEquals
import org.junit.Test
import org.junit.runner.RunWith
-import java.time.Duration
-import java.util.concurrent.TimeUnit
@RunWith(AndroidJUnit4::class)
@SmallTest
diff --git a/work/work-runtime-ktx/src/main/java/androidx/work/ListenableFuture.kt b/work/work-runtime-ktx/src/main/java/androidx/work/ListenableFuture.kt
index 3b825b5..f0edd3f 100644
--- a/work/work-runtime-ktx/src/main/java/androidx/work/ListenableFuture.kt
+++ b/work/work-runtime-ktx/src/main/java/androidx/work/ListenableFuture.kt
@@ -21,12 +21,12 @@
import androidx.annotation.RestrictTo
import androidx.work.impl.utils.futures.SettableFuture
import com.google.common.util.concurrent.ListenableFuture
-import kotlinx.coroutines.Job
-import kotlinx.coroutines.suspendCancellableCoroutine
import java.util.concurrent.CancellationException
import java.util.concurrent.ExecutionException
import kotlin.coroutines.resume
import kotlin.coroutines.resumeWithException
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.suspendCancellableCoroutine
/**
* Awaits for the completion of the [ListenableFuture] without blocking a thread.
diff --git a/work/work-runtime/api/aidlRelease/current/androidx/work/multiprocess/IListenableWorkerImpl.aidl b/work/work-runtime/api/aidlRelease/current/androidx/work/multiprocess/IListenableWorkerImpl.aidl
index 3619cf2..9fa0b41 100644
--- a/work/work-runtime/api/aidlRelease/current/androidx/work/multiprocess/IListenableWorkerImpl.aidl
+++ b/work/work-runtime/api/aidlRelease/current/androidx/work/multiprocess/IListenableWorkerImpl.aidl
@@ -32,7 +32,7 @@
// later when a module using the interface is updated, e.g., Mainline modules.
package androidx.work.multiprocess;
-/* @hide */
+@JavaPassthrough(annotation="@androidx.annotation.RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY)")
interface IListenableWorkerImpl {
oneway void startWork(in byte[] request, androidx.work.multiprocess.IWorkManagerImplCallback callback);
oneway void interrupt(in byte[] request, androidx.work.multiprocess.IWorkManagerImplCallback callback);
diff --git a/work/work-runtime/api/aidlRelease/current/androidx/work/multiprocess/IWorkManagerImpl.aidl b/work/work-runtime/api/aidlRelease/current/androidx/work/multiprocess/IWorkManagerImpl.aidl
index e77921a..1a206cd 100644
--- a/work/work-runtime/api/aidlRelease/current/androidx/work/multiprocess/IWorkManagerImpl.aidl
+++ b/work/work-runtime/api/aidlRelease/current/androidx/work/multiprocess/IWorkManagerImpl.aidl
@@ -32,7 +32,7 @@
// later when a module using the interface is updated, e.g., Mainline modules.
package androidx.work.multiprocess;
-/* @hide */
+@JavaPassthrough(annotation="@androidx.annotation.RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY)")
interface IWorkManagerImpl {
oneway void enqueueWorkRequests(in byte[] request, androidx.work.multiprocess.IWorkManagerImplCallback callback);
oneway void updateUniquePeriodicWorkRequest(String name, in byte[] request, androidx.work.multiprocess.IWorkManagerImplCallback callback);
diff --git a/work/work-runtime/api/aidlRelease/current/androidx/work/multiprocess/IWorkManagerImplCallback.aidl b/work/work-runtime/api/aidlRelease/current/androidx/work/multiprocess/IWorkManagerImplCallback.aidl
index bc20417..cb69433 100644
--- a/work/work-runtime/api/aidlRelease/current/androidx/work/multiprocess/IWorkManagerImplCallback.aidl
+++ b/work/work-runtime/api/aidlRelease/current/androidx/work/multiprocess/IWorkManagerImplCallback.aidl
@@ -32,7 +32,7 @@
// later when a module using the interface is updated, e.g., Mainline modules.
package androidx.work.multiprocess;
-/* @hide */
+@JavaPassthrough(annotation="@androidx.annotation.RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY)")
interface IWorkManagerImplCallback {
oneway void onSuccess(in byte[] response);
oneway void onFailure(String error);
diff --git a/work/work-runtime/api/current.txt b/work/work-runtime/api/current.txt
index 42fc6a2..9b9bf58 100644
--- a/work/work-runtime/api/current.txt
+++ b/work/work-runtime/api/current.txt
@@ -66,10 +66,10 @@
}
public final class Constraints {
+ ctor public Constraints(androidx.work.Constraints other);
ctor @androidx.room.Ignore public Constraints(optional androidx.work.NetworkType requiredNetworkType, optional boolean requiresCharging, optional boolean requiresBatteryNotLow, optional boolean requiresStorageNotLow);
ctor @RequiresApi(23) @androidx.room.Ignore public Constraints(optional androidx.work.NetworkType requiredNetworkType, optional boolean requiresCharging, optional boolean requiresDeviceIdle, optional boolean requiresBatteryNotLow, optional boolean requiresStorageNotLow);
ctor @RequiresApi(24) public Constraints(optional androidx.work.NetworkType requiredNetworkType, optional boolean requiresCharging, optional boolean requiresDeviceIdle, optional boolean requiresBatteryNotLow, optional boolean requiresStorageNotLow, optional long contentTriggerUpdateDelayMillis, optional long contentTriggerMaxDelayMillis, optional java.util.Set<androidx.work.Constraints.ContentUriTrigger> contentUriTriggers);
- ctor public Constraints(androidx.work.Constraints other);
method @RequiresApi(24) public long getContentTriggerMaxDelayMillis();
method @RequiresApi(24) public long getContentTriggerUpdateDelayMillis();
method @RequiresApi(24) public java.util.Set<androidx.work.Constraints.ContentUriTrigger> getContentUriTriggers();
@@ -95,10 +95,10 @@
method public androidx.work.Constraints.Builder setRequiresCharging(boolean requiresCharging);
method @RequiresApi(23) public androidx.work.Constraints.Builder setRequiresDeviceIdle(boolean requiresDeviceIdle);
method public androidx.work.Constraints.Builder setRequiresStorageNotLow(boolean requiresStorageNotLow);
- method @RequiresApi(24) public androidx.work.Constraints.Builder setTriggerContentMaxDelay(long duration, java.util.concurrent.TimeUnit timeUnit);
method @RequiresApi(26) public androidx.work.Constraints.Builder setTriggerContentMaxDelay(java.time.Duration duration);
- method @RequiresApi(24) public androidx.work.Constraints.Builder setTriggerContentUpdateDelay(long duration, java.util.concurrent.TimeUnit timeUnit);
+ method @RequiresApi(24) public androidx.work.Constraints.Builder setTriggerContentMaxDelay(long duration, java.util.concurrent.TimeUnit timeUnit);
method @RequiresApi(26) public androidx.work.Constraints.Builder setTriggerContentUpdateDelay(java.time.Duration duration);
+ method @RequiresApi(24) public androidx.work.Constraints.Builder setTriggerContentUpdateDelay(long duration, java.util.concurrent.TimeUnit timeUnit);
}
public static final class Constraints.Companion {
@@ -300,20 +300,20 @@
}
public static final class PeriodicWorkRequest.Builder extends androidx.work.WorkRequest.Builder<androidx.work.PeriodicWorkRequest.Builder,androidx.work.PeriodicWorkRequest> {
- ctor public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker> workerClass, long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit);
ctor @RequiresApi(26) public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker> workerClass, java.time.Duration repeatInterval);
- ctor public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker> workerClass, long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit, long flexInterval, java.util.concurrent.TimeUnit flexIntervalTimeUnit);
ctor @RequiresApi(26) public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker> workerClass, java.time.Duration repeatInterval, java.time.Duration flexInterval);
+ ctor public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker> workerClass, long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit);
+ ctor public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker> workerClass, long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit, long flexInterval, java.util.concurrent.TimeUnit flexIntervalTimeUnit);
}
public static final class PeriodicWorkRequest.Companion {
}
public final class PeriodicWorkRequestKt {
- method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder PeriodicWorkRequestBuilder(long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit);
method @RequiresApi(26) public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder PeriodicWorkRequestBuilder(java.time.Duration repeatInterval);
- method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder PeriodicWorkRequestBuilder(long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit, long flexTimeInterval, java.util.concurrent.TimeUnit flexTimeIntervalUnit);
method @RequiresApi(26) public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder PeriodicWorkRequestBuilder(java.time.Duration repeatInterval, java.time.Duration flexTimeInterval);
+ method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder PeriodicWorkRequestBuilder(long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit);
+ method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder PeriodicWorkRequestBuilder(long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit, long flexTimeInterval, java.util.concurrent.TimeUnit flexTimeIntervalUnit);
}
public interface ProgressUpdater {
@@ -336,15 +336,15 @@
}
public final class WorkInfo {
- ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount, optional int generation, optional androidx.work.Constraints constraints, optional long initialDelayMillis, optional androidx.work.WorkInfo.PeriodicityInfo? periodicityInfo, optional long nextScheduleTimeMillis);
- ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount, optional int generation, optional androidx.work.Constraints constraints, optional long initialDelayMillis, optional androidx.work.WorkInfo.PeriodicityInfo? periodicityInfo);
- ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount, optional int generation, optional androidx.work.Constraints constraints, optional long initialDelayMillis);
- ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount, optional int generation, optional androidx.work.Constraints constraints);
- ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount, optional int generation);
- ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount);
- ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress);
- ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData);
ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags);
+ ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData);
+ ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress);
+ ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount);
+ ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount, optional int generation);
+ ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount, optional int generation, optional androidx.work.Constraints constraints);
+ ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount, optional int generation, optional androidx.work.Constraints constraints, optional long initialDelayMillis);
+ ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount, optional int generation, optional androidx.work.Constraints constraints, optional long initialDelayMillis, optional androidx.work.WorkInfo.PeriodicityInfo? periodicityInfo);
+ ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount, optional int generation, optional androidx.work.Constraints constraints, optional long initialDelayMillis, optional androidx.work.WorkInfo.PeriodicityInfo? periodicityInfo, optional long nextScheduleTimeMillis);
method public androidx.work.Constraints getConstraints();
method public int getGeneration();
method public java.util.UUID getId();
@@ -443,10 +443,10 @@
public final class WorkQuery {
method public static androidx.work.WorkQuery fromIds(java.util.List<java.util.UUID!>);
method public static androidx.work.WorkQuery fromIds(java.util.UUID!...);
- method public static androidx.work.WorkQuery fromStates(java.util.List<androidx.work.WorkInfo.State!>);
method public static androidx.work.WorkQuery fromStates(androidx.work.WorkInfo.State!...);
- method public static androidx.work.WorkQuery fromTags(java.util.List<java.lang.String!>);
+ method public static androidx.work.WorkQuery fromStates(java.util.List<androidx.work.WorkInfo.State!>);
method public static androidx.work.WorkQuery fromTags(java.lang.String!...);
+ method public static androidx.work.WorkQuery fromTags(java.util.List<java.lang.String!>);
method public static androidx.work.WorkQuery fromUniqueWorkNames(java.lang.String!...);
method public static androidx.work.WorkQuery fromUniqueWorkNames(java.util.List<java.lang.String!>);
method public java.util.List<java.util.UUID!> getIds();
@@ -479,15 +479,15 @@
public abstract static class WorkRequest.Builder<B extends androidx.work.WorkRequest.Builder<B, ?>, W extends androidx.work.WorkRequest> {
method public final B addTag(String tag);
method public final W build();
- method public final B keepResultsForAtLeast(long duration, java.util.concurrent.TimeUnit timeUnit);
method @RequiresApi(26) public final B keepResultsForAtLeast(java.time.Duration duration);
- method public final B setBackoffCriteria(androidx.work.BackoffPolicy backoffPolicy, long backoffDelay, java.util.concurrent.TimeUnit timeUnit);
+ method public final B keepResultsForAtLeast(long duration, java.util.concurrent.TimeUnit timeUnit);
method @RequiresApi(26) public final B setBackoffCriteria(androidx.work.BackoffPolicy backoffPolicy, java.time.Duration duration);
+ method public final B setBackoffCriteria(androidx.work.BackoffPolicy backoffPolicy, long backoffDelay, java.util.concurrent.TimeUnit timeUnit);
method public final B setConstraints(androidx.work.Constraints constraints);
method public B setExpedited(androidx.work.OutOfQuotaPolicy policy);
method public final B setId(java.util.UUID id);
- method public B setInitialDelay(long duration, java.util.concurrent.TimeUnit timeUnit);
method @RequiresApi(26) public B setInitialDelay(java.time.Duration duration);
+ method public B setInitialDelay(long duration, java.util.concurrent.TimeUnit timeUnit);
method public final B setInputData(androidx.work.Data inputData);
}
diff --git a/work/work-runtime/api/public_plus_experimental_current.txt b/work/work-runtime/api/public_plus_experimental_current.txt
index 42fc6a2..9b9bf58 100644
--- a/work/work-runtime/api/public_plus_experimental_current.txt
+++ b/work/work-runtime/api/public_plus_experimental_current.txt
@@ -66,10 +66,10 @@
}
public final class Constraints {
+ ctor public Constraints(androidx.work.Constraints other);
ctor @androidx.room.Ignore public Constraints(optional androidx.work.NetworkType requiredNetworkType, optional boolean requiresCharging, optional boolean requiresBatteryNotLow, optional boolean requiresStorageNotLow);
ctor @RequiresApi(23) @androidx.room.Ignore public Constraints(optional androidx.work.NetworkType requiredNetworkType, optional boolean requiresCharging, optional boolean requiresDeviceIdle, optional boolean requiresBatteryNotLow, optional boolean requiresStorageNotLow);
ctor @RequiresApi(24) public Constraints(optional androidx.work.NetworkType requiredNetworkType, optional boolean requiresCharging, optional boolean requiresDeviceIdle, optional boolean requiresBatteryNotLow, optional boolean requiresStorageNotLow, optional long contentTriggerUpdateDelayMillis, optional long contentTriggerMaxDelayMillis, optional java.util.Set<androidx.work.Constraints.ContentUriTrigger> contentUriTriggers);
- ctor public Constraints(androidx.work.Constraints other);
method @RequiresApi(24) public long getContentTriggerMaxDelayMillis();
method @RequiresApi(24) public long getContentTriggerUpdateDelayMillis();
method @RequiresApi(24) public java.util.Set<androidx.work.Constraints.ContentUriTrigger> getContentUriTriggers();
@@ -95,10 +95,10 @@
method public androidx.work.Constraints.Builder setRequiresCharging(boolean requiresCharging);
method @RequiresApi(23) public androidx.work.Constraints.Builder setRequiresDeviceIdle(boolean requiresDeviceIdle);
method public androidx.work.Constraints.Builder setRequiresStorageNotLow(boolean requiresStorageNotLow);
- method @RequiresApi(24) public androidx.work.Constraints.Builder setTriggerContentMaxDelay(long duration, java.util.concurrent.TimeUnit timeUnit);
method @RequiresApi(26) public androidx.work.Constraints.Builder setTriggerContentMaxDelay(java.time.Duration duration);
- method @RequiresApi(24) public androidx.work.Constraints.Builder setTriggerContentUpdateDelay(long duration, java.util.concurrent.TimeUnit timeUnit);
+ method @RequiresApi(24) public androidx.work.Constraints.Builder setTriggerContentMaxDelay(long duration, java.util.concurrent.TimeUnit timeUnit);
method @RequiresApi(26) public androidx.work.Constraints.Builder setTriggerContentUpdateDelay(java.time.Duration duration);
+ method @RequiresApi(24) public androidx.work.Constraints.Builder setTriggerContentUpdateDelay(long duration, java.util.concurrent.TimeUnit timeUnit);
}
public static final class Constraints.Companion {
@@ -300,20 +300,20 @@
}
public static final class PeriodicWorkRequest.Builder extends androidx.work.WorkRequest.Builder<androidx.work.PeriodicWorkRequest.Builder,androidx.work.PeriodicWorkRequest> {
- ctor public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker> workerClass, long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit);
ctor @RequiresApi(26) public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker> workerClass, java.time.Duration repeatInterval);
- ctor public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker> workerClass, long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit, long flexInterval, java.util.concurrent.TimeUnit flexIntervalTimeUnit);
ctor @RequiresApi(26) public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker> workerClass, java.time.Duration repeatInterval, java.time.Duration flexInterval);
+ ctor public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker> workerClass, long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit);
+ ctor public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker> workerClass, long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit, long flexInterval, java.util.concurrent.TimeUnit flexIntervalTimeUnit);
}
public static final class PeriodicWorkRequest.Companion {
}
public final class PeriodicWorkRequestKt {
- method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder PeriodicWorkRequestBuilder(long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit);
method @RequiresApi(26) public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder PeriodicWorkRequestBuilder(java.time.Duration repeatInterval);
- method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder PeriodicWorkRequestBuilder(long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit, long flexTimeInterval, java.util.concurrent.TimeUnit flexTimeIntervalUnit);
method @RequiresApi(26) public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder PeriodicWorkRequestBuilder(java.time.Duration repeatInterval, java.time.Duration flexTimeInterval);
+ method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder PeriodicWorkRequestBuilder(long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit);
+ method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder PeriodicWorkRequestBuilder(long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit, long flexTimeInterval, java.util.concurrent.TimeUnit flexTimeIntervalUnit);
}
public interface ProgressUpdater {
@@ -336,15 +336,15 @@
}
public final class WorkInfo {
- ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount, optional int generation, optional androidx.work.Constraints constraints, optional long initialDelayMillis, optional androidx.work.WorkInfo.PeriodicityInfo? periodicityInfo, optional long nextScheduleTimeMillis);
- ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount, optional int generation, optional androidx.work.Constraints constraints, optional long initialDelayMillis, optional androidx.work.WorkInfo.PeriodicityInfo? periodicityInfo);
- ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount, optional int generation, optional androidx.work.Constraints constraints, optional long initialDelayMillis);
- ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount, optional int generation, optional androidx.work.Constraints constraints);
- ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount, optional int generation);
- ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount);
- ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress);
- ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData);
ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags);
+ ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData);
+ ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress);
+ ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount);
+ ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount, optional int generation);
+ ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount, optional int generation, optional androidx.work.Constraints constraints);
+ ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount, optional int generation, optional androidx.work.Constraints constraints, optional long initialDelayMillis);
+ ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount, optional int generation, optional androidx.work.Constraints constraints, optional long initialDelayMillis, optional androidx.work.WorkInfo.PeriodicityInfo? periodicityInfo);
+ ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount, optional int generation, optional androidx.work.Constraints constraints, optional long initialDelayMillis, optional androidx.work.WorkInfo.PeriodicityInfo? periodicityInfo, optional long nextScheduleTimeMillis);
method public androidx.work.Constraints getConstraints();
method public int getGeneration();
method public java.util.UUID getId();
@@ -443,10 +443,10 @@
public final class WorkQuery {
method public static androidx.work.WorkQuery fromIds(java.util.List<java.util.UUID!>);
method public static androidx.work.WorkQuery fromIds(java.util.UUID!...);
- method public static androidx.work.WorkQuery fromStates(java.util.List<androidx.work.WorkInfo.State!>);
method public static androidx.work.WorkQuery fromStates(androidx.work.WorkInfo.State!...);
- method public static androidx.work.WorkQuery fromTags(java.util.List<java.lang.String!>);
+ method public static androidx.work.WorkQuery fromStates(java.util.List<androidx.work.WorkInfo.State!>);
method public static androidx.work.WorkQuery fromTags(java.lang.String!...);
+ method public static androidx.work.WorkQuery fromTags(java.util.List<java.lang.String!>);
method public static androidx.work.WorkQuery fromUniqueWorkNames(java.lang.String!...);
method public static androidx.work.WorkQuery fromUniqueWorkNames(java.util.List<java.lang.String!>);
method public java.util.List<java.util.UUID!> getIds();
@@ -479,15 +479,15 @@
public abstract static class WorkRequest.Builder<B extends androidx.work.WorkRequest.Builder<B, ?>, W extends androidx.work.WorkRequest> {
method public final B addTag(String tag);
method public final W build();
- method public final B keepResultsForAtLeast(long duration, java.util.concurrent.TimeUnit timeUnit);
method @RequiresApi(26) public final B keepResultsForAtLeast(java.time.Duration duration);
- method public final B setBackoffCriteria(androidx.work.BackoffPolicy backoffPolicy, long backoffDelay, java.util.concurrent.TimeUnit timeUnit);
+ method public final B keepResultsForAtLeast(long duration, java.util.concurrent.TimeUnit timeUnit);
method @RequiresApi(26) public final B setBackoffCriteria(androidx.work.BackoffPolicy backoffPolicy, java.time.Duration duration);
+ method public final B setBackoffCriteria(androidx.work.BackoffPolicy backoffPolicy, long backoffDelay, java.util.concurrent.TimeUnit timeUnit);
method public final B setConstraints(androidx.work.Constraints constraints);
method public B setExpedited(androidx.work.OutOfQuotaPolicy policy);
method public final B setId(java.util.UUID id);
- method public B setInitialDelay(long duration, java.util.concurrent.TimeUnit timeUnit);
method @RequiresApi(26) public B setInitialDelay(java.time.Duration duration);
+ method public B setInitialDelay(long duration, java.util.concurrent.TimeUnit timeUnit);
method public final B setInputData(androidx.work.Data inputData);
}
diff --git a/work/work-runtime/api/restricted_current.txt b/work/work-runtime/api/restricted_current.txt
index 42fc6a2..9b9bf58 100644
--- a/work/work-runtime/api/restricted_current.txt
+++ b/work/work-runtime/api/restricted_current.txt
@@ -66,10 +66,10 @@
}
public final class Constraints {
+ ctor public Constraints(androidx.work.Constraints other);
ctor @androidx.room.Ignore public Constraints(optional androidx.work.NetworkType requiredNetworkType, optional boolean requiresCharging, optional boolean requiresBatteryNotLow, optional boolean requiresStorageNotLow);
ctor @RequiresApi(23) @androidx.room.Ignore public Constraints(optional androidx.work.NetworkType requiredNetworkType, optional boolean requiresCharging, optional boolean requiresDeviceIdle, optional boolean requiresBatteryNotLow, optional boolean requiresStorageNotLow);
ctor @RequiresApi(24) public Constraints(optional androidx.work.NetworkType requiredNetworkType, optional boolean requiresCharging, optional boolean requiresDeviceIdle, optional boolean requiresBatteryNotLow, optional boolean requiresStorageNotLow, optional long contentTriggerUpdateDelayMillis, optional long contentTriggerMaxDelayMillis, optional java.util.Set<androidx.work.Constraints.ContentUriTrigger> contentUriTriggers);
- ctor public Constraints(androidx.work.Constraints other);
method @RequiresApi(24) public long getContentTriggerMaxDelayMillis();
method @RequiresApi(24) public long getContentTriggerUpdateDelayMillis();
method @RequiresApi(24) public java.util.Set<androidx.work.Constraints.ContentUriTrigger> getContentUriTriggers();
@@ -95,10 +95,10 @@
method public androidx.work.Constraints.Builder setRequiresCharging(boolean requiresCharging);
method @RequiresApi(23) public androidx.work.Constraints.Builder setRequiresDeviceIdle(boolean requiresDeviceIdle);
method public androidx.work.Constraints.Builder setRequiresStorageNotLow(boolean requiresStorageNotLow);
- method @RequiresApi(24) public androidx.work.Constraints.Builder setTriggerContentMaxDelay(long duration, java.util.concurrent.TimeUnit timeUnit);
method @RequiresApi(26) public androidx.work.Constraints.Builder setTriggerContentMaxDelay(java.time.Duration duration);
- method @RequiresApi(24) public androidx.work.Constraints.Builder setTriggerContentUpdateDelay(long duration, java.util.concurrent.TimeUnit timeUnit);
+ method @RequiresApi(24) public androidx.work.Constraints.Builder setTriggerContentMaxDelay(long duration, java.util.concurrent.TimeUnit timeUnit);
method @RequiresApi(26) public androidx.work.Constraints.Builder setTriggerContentUpdateDelay(java.time.Duration duration);
+ method @RequiresApi(24) public androidx.work.Constraints.Builder setTriggerContentUpdateDelay(long duration, java.util.concurrent.TimeUnit timeUnit);
}
public static final class Constraints.Companion {
@@ -300,20 +300,20 @@
}
public static final class PeriodicWorkRequest.Builder extends androidx.work.WorkRequest.Builder<androidx.work.PeriodicWorkRequest.Builder,androidx.work.PeriodicWorkRequest> {
- ctor public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker> workerClass, long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit);
ctor @RequiresApi(26) public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker> workerClass, java.time.Duration repeatInterval);
- ctor public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker> workerClass, long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit, long flexInterval, java.util.concurrent.TimeUnit flexIntervalTimeUnit);
ctor @RequiresApi(26) public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker> workerClass, java.time.Duration repeatInterval, java.time.Duration flexInterval);
+ ctor public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker> workerClass, long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit);
+ ctor public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker> workerClass, long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit, long flexInterval, java.util.concurrent.TimeUnit flexIntervalTimeUnit);
}
public static final class PeriodicWorkRequest.Companion {
}
public final class PeriodicWorkRequestKt {
- method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder PeriodicWorkRequestBuilder(long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit);
method @RequiresApi(26) public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder PeriodicWorkRequestBuilder(java.time.Duration repeatInterval);
- method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder PeriodicWorkRequestBuilder(long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit, long flexTimeInterval, java.util.concurrent.TimeUnit flexTimeIntervalUnit);
method @RequiresApi(26) public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder PeriodicWorkRequestBuilder(java.time.Duration repeatInterval, java.time.Duration flexTimeInterval);
+ method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder PeriodicWorkRequestBuilder(long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit);
+ method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder PeriodicWorkRequestBuilder(long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit, long flexTimeInterval, java.util.concurrent.TimeUnit flexTimeIntervalUnit);
}
public interface ProgressUpdater {
@@ -336,15 +336,15 @@
}
public final class WorkInfo {
- ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount, optional int generation, optional androidx.work.Constraints constraints, optional long initialDelayMillis, optional androidx.work.WorkInfo.PeriodicityInfo? periodicityInfo, optional long nextScheduleTimeMillis);
- ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount, optional int generation, optional androidx.work.Constraints constraints, optional long initialDelayMillis, optional androidx.work.WorkInfo.PeriodicityInfo? periodicityInfo);
- ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount, optional int generation, optional androidx.work.Constraints constraints, optional long initialDelayMillis);
- ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount, optional int generation, optional androidx.work.Constraints constraints);
- ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount, optional int generation);
- ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount);
- ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress);
- ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData);
ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags);
+ ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData);
+ ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress);
+ ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount);
+ ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount, optional int generation);
+ ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount, optional int generation, optional androidx.work.Constraints constraints);
+ ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount, optional int generation, optional androidx.work.Constraints constraints, optional long initialDelayMillis);
+ ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount, optional int generation, optional androidx.work.Constraints constraints, optional long initialDelayMillis, optional androidx.work.WorkInfo.PeriodicityInfo? periodicityInfo);
+ ctor public WorkInfo(java.util.UUID id, androidx.work.WorkInfo.State state, java.util.Set<java.lang.String> tags, optional androidx.work.Data outputData, optional androidx.work.Data progress, optional int runAttemptCount, optional int generation, optional androidx.work.Constraints constraints, optional long initialDelayMillis, optional androidx.work.WorkInfo.PeriodicityInfo? periodicityInfo, optional long nextScheduleTimeMillis);
method public androidx.work.Constraints getConstraints();
method public int getGeneration();
method public java.util.UUID getId();
@@ -443,10 +443,10 @@
public final class WorkQuery {
method public static androidx.work.WorkQuery fromIds(java.util.List<java.util.UUID!>);
method public static androidx.work.WorkQuery fromIds(java.util.UUID!...);
- method public static androidx.work.WorkQuery fromStates(java.util.List<androidx.work.WorkInfo.State!>);
method public static androidx.work.WorkQuery fromStates(androidx.work.WorkInfo.State!...);
- method public static androidx.work.WorkQuery fromTags(java.util.List<java.lang.String!>);
+ method public static androidx.work.WorkQuery fromStates(java.util.List<androidx.work.WorkInfo.State!>);
method public static androidx.work.WorkQuery fromTags(java.lang.String!...);
+ method public static androidx.work.WorkQuery fromTags(java.util.List<java.lang.String!>);
method public static androidx.work.WorkQuery fromUniqueWorkNames(java.lang.String!...);
method public static androidx.work.WorkQuery fromUniqueWorkNames(java.util.List<java.lang.String!>);
method public java.util.List<java.util.UUID!> getIds();
@@ -479,15 +479,15 @@
public abstract static class WorkRequest.Builder<B extends androidx.work.WorkRequest.Builder<B, ?>, W extends androidx.work.WorkRequest> {
method public final B addTag(String tag);
method public final W build();
- method public final B keepResultsForAtLeast(long duration, java.util.concurrent.TimeUnit timeUnit);
method @RequiresApi(26) public final B keepResultsForAtLeast(java.time.Duration duration);
- method public final B setBackoffCriteria(androidx.work.BackoffPolicy backoffPolicy, long backoffDelay, java.util.concurrent.TimeUnit timeUnit);
+ method public final B keepResultsForAtLeast(long duration, java.util.concurrent.TimeUnit timeUnit);
method @RequiresApi(26) public final B setBackoffCriteria(androidx.work.BackoffPolicy backoffPolicy, java.time.Duration duration);
+ method public final B setBackoffCriteria(androidx.work.BackoffPolicy backoffPolicy, long backoffDelay, java.util.concurrent.TimeUnit timeUnit);
method public final B setConstraints(androidx.work.Constraints constraints);
method public B setExpedited(androidx.work.OutOfQuotaPolicy policy);
method public final B setId(java.util.UUID id);
- method public B setInitialDelay(long duration, java.util.concurrent.TimeUnit timeUnit);
method @RequiresApi(26) public B setInitialDelay(java.time.Duration duration);
+ method public B setInitialDelay(long duration, java.util.concurrent.TimeUnit timeUnit);
method public final B setInputData(androidx.work.Data inputData);
}
diff --git a/work/work-runtime/build.gradle b/work/work-runtime/build.gradle
index 5e8d67b..ff562a1 100644
--- a/work/work-runtime/build.gradle
+++ b/work/work-runtime/build.gradle
@@ -96,7 +96,7 @@
}
androidx {
- name = "Android WorkManager Runtime"
+ name = "WorkManager Runtime"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "Android WorkManager runtime library"
diff --git a/work/work-runtime/lint-baseline.xml b/work/work-runtime/lint-baseline.xml
index e8a0ac0..8ab7d19 100644
--- a/work/work-runtime/lint-baseline.xml
+++ b/work/work-runtime/lint-baseline.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.0.0-beta03" type="baseline" client="gradle" dependencies="false" name="AGP (8.0.0-beta03)" variant="all" version="8.0.0-beta03">
+<issues format="6" by="lint 8.1.0-beta02" type="baseline" client="gradle" dependencies="false" name="AGP (8.1.0-beta02)" variant="all" version="8.1.0-beta02">
<issue
id="BanSynchronizedMethods"
@@ -263,33 +263,6 @@
</issue>
<issue
- id="RequireUnstableAidlAnnotation"
- message="Unstable AIDL files must be annotated with @RequiresOptIn marker"
- errorLine1="oneway interface IListenableWorkerImpl {"
- errorLine2="^">
- <location
- file="src/main/aidl/androidx/work/multiprocess/IListenableWorkerImpl.aidl"/>
- </issue>
-
- <issue
- id="RequireUnstableAidlAnnotation"
- message="Unstable AIDL files must be annotated with @RequiresOptIn marker"
- errorLine1="oneway interface IWorkManagerImpl {"
- errorLine2="^">
- <location
- file="src/main/aidl/androidx/work/multiprocess/IWorkManagerImpl.aidl"/>
- </issue>
-
- <issue
- id="RequireUnstableAidlAnnotation"
- message="Unstable AIDL files must be annotated with @RequiresOptIn marker"
- errorLine1="oneway interface IWorkManagerImplCallback {"
- errorLine2="^">
- <location
- file="src/main/aidl/androidx/work/multiprocess/IWorkManagerImplCallback.aidl"/>
- </issue>
-
- <issue
id="UnknownNullness"
message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
errorLine1=" public final void addListener(Runnable listener, Executor executor) {"
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/DelegatingWorkerFactoryTest.kt b/work/work-runtime/src/androidTest/java/androidx/work/DelegatingWorkerFactoryTest.kt
index b89ef48..07cb922 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/DelegatingWorkerFactoryTest.kt
+++ b/work/work-runtime/src/androidTest/java/androidx/work/DelegatingWorkerFactoryTest.kt
@@ -24,6 +24,7 @@
import androidx.work.impl.utils.taskexecutor.WorkManagerTaskExecutor
import androidx.work.worker.FailureWorker
import androidx.work.worker.TestWorker
+import java.util.UUID
import org.hamcrest.CoreMatchers.instanceOf
import org.hamcrest.CoreMatchers.notNullValue
import org.hamcrest.MatcherAssert.assertThat
@@ -31,7 +32,6 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mockito.mock
-import java.util.UUID
@RunWith(AndroidJUnit4::class)
@SmallTest
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/RawWorkInfoDaoTest.kt b/work/work-runtime/src/androidTest/java/androidx/work/RawWorkInfoDaoTest.kt
index a7d4179..d7a6146 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/RawWorkInfoDaoTest.kt
+++ b/work/work-runtime/src/androidTest/java/androidx/work/RawWorkInfoDaoTest.kt
@@ -22,8 +22,8 @@
import androidx.work.worker.RetryWorker
import androidx.work.worker.TestWorker
import org.hamcrest.CoreMatchers.`is`
-import org.hamcrest.Matchers.containsInAnyOrder
import org.hamcrest.MatcherAssert.assertThat
+import org.hamcrest.Matchers.containsInAnyOrder
import org.junit.Test
import org.junit.runner.RunWith
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/SchedulersTest.kt b/work/work-runtime/src/androidTest/java/androidx/work/SchedulersTest.kt
index aa90135..cf09c13 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/SchedulersTest.kt
+++ b/work/work-runtime/src/androidTest/java/androidx/work/SchedulersTest.kt
@@ -24,8 +24,8 @@
import androidx.work.impl.Scheduler
import androidx.work.impl.StartStopTokens
import androidx.work.impl.WorkDatabase
-import androidx.work.impl.WorkManagerImpl
import androidx.work.impl.WorkLauncherImpl
+import androidx.work.impl.WorkManagerImpl
import androidx.work.impl.background.greedy.GreedyScheduler
import androidx.work.impl.constraints.trackers.Trackers
import androidx.work.impl.model.WorkSpec
@@ -54,7 +54,8 @@
val processor = Processor(context, configuration, taskExecutor, db)
val launcher = WorkLauncherImpl(processor, taskExecutor)
val trackers = Trackers(context, taskExecutor)
- val greedyScheduler = GreedyScheduler(context, configuration, trackers, processor, launcher)
+ val greedyScheduler = GreedyScheduler(context, configuration, trackers, processor,
+ launcher, taskExecutor)
@Test
fun runDependency() {
@@ -77,7 +78,7 @@
processor: Processor ->
listOf(
GreedyScheduler(context, configuration, trackers, processor,
- WorkLauncherImpl(processor, taskExecutor)),
+ WorkLauncherImpl(processor, taskExecutor), taskExecutor),
trackingScheduler
)
}
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/WorkDatabasePathHelperTest.kt b/work/work-runtime/src/androidTest/java/androidx/work/WorkDatabasePathHelperTest.kt
index b02375a..9b8dd501 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/WorkDatabasePathHelperTest.kt
+++ b/work/work-runtime/src/androidTest/java/androidx/work/WorkDatabasePathHelperTest.kt
@@ -27,13 +27,13 @@
import androidx.work.impl.WorkDatabase
import androidx.work.impl.WorkDatabasePathHelper
import androidx.work.impl.WorkDatabaseVersions.VERSION_9
+import java.io.File
import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import java.io.File
@RunWith(AndroidJUnit4::class)
@LargeTest
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/WorkForegroundRunnableTest.kt b/work/work-runtime/src/androidTest/java/androidx/work/WorkForegroundRunnableTest.kt
index d13e1f3..cbae3d9 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/WorkForegroundRunnableTest.kt
+++ b/work/work-runtime/src/androidTest/java/androidx/work/WorkForegroundRunnableTest.kt
@@ -30,8 +30,10 @@
import androidx.work.impl.utils.taskexecutor.InstantWorkTaskExecutor
import androidx.work.impl.utils.taskexecutor.TaskExecutor
import androidx.work.worker.TestWorker
-import org.hamcrest.CoreMatchers.`is`
+import java.util.UUID
+import java.util.concurrent.Executor
import org.hamcrest.CoreMatchers.equalTo
+import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Assert.fail
import org.junit.Before
@@ -42,8 +44,6 @@
import org.mockito.Mockito.spy
import org.mockito.Mockito.verify
import org.mockito.Mockito.verifyNoMoreInteractions
-import java.util.UUID
-import java.util.concurrent.Executor
@RunWith(AndroidJUnit4::class)
public class WorkForegroundRunnableTest : DatabaseTest() {
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/WorkInfoFlowsTest.kt b/work/work-runtime/src/androidTest/java/androidx/work/WorkInfoFlowsTest.kt
index ac28b7b..50e4c07 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/WorkInfoFlowsTest.kt
+++ b/work/work-runtime/src/androidTest/java/androidx/work/WorkInfoFlowsTest.kt
@@ -31,22 +31,13 @@
import androidx.work.impl.testutils.TestConstraintTracker
import androidx.work.impl.testutils.TrackingWorkerFactory
import androidx.work.impl.utils.taskexecutor.WorkManagerTaskExecutor
+import androidx.work.testutils.launchTester
import androidx.work.worker.LatchWorker
import androidx.work.worker.TestWorker
import com.google.common.truth.Truth.assertThat
import java.util.concurrent.Executors
import java.util.concurrent.TimeUnit
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Job
-import kotlinx.coroutines.TimeoutCancellationException
-import kotlinx.coroutines.channels.Channel
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.launchIn
-import kotlinx.coroutines.flow.onEach
-import kotlinx.coroutines.job
-import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
-import kotlinx.coroutines.withTimeout
import org.junit.Test
@SmallTest
@@ -72,7 +63,7 @@
context, configuration, taskExecutor, db, schedulers, processor, trackers
)
val greedyScheduler = GreedyScheduler(context, configuration, trackers,
- processor, WorkLauncherImpl(processor, taskExecutor))
+ processor, WorkLauncherImpl(processor, taskExecutor), taskExecutor)
init {
schedulers.add(greedyScheduler)
@@ -93,8 +84,7 @@
workManager.enqueue(unrelatedRequest)
workManager.enqueue(request)
assertThat(tester.awaitNext().state).isEqualTo(WorkInfo.State.ENQUEUED)
- fakeChargingTracker.state = true
-
+ fakeChargingTracker.constraintState = true
assertThat(tester.awaitNext().state).isEqualTo(WorkInfo.State.RUNNING)
val worker = workerFactory.awaitWorker(request.id) as LatchWorker
worker.mLatch.countDown()
@@ -168,36 +158,4 @@
assertThat(secondList.size).isEqualTo(2)
assertThat(secondList.map { it.id }).containsExactly(request1.id, request2.id)
}
-}
-
-private fun <T> CoroutineScope.launchTester(flow: Flow<T>): FlowTester<T> {
- val tester = FlowTester(flow)
- // we don't block parent from completing and simply stop collecting once parent is done
- val forked = Job()
- coroutineContext.job.invokeOnCompletion { forked.cancel() }
- launch(Job()) { tester.launch(this) }
- return tester
-}
-
-private class FlowTester<T>(private val flow: Flow<T>) {
- private val channel = Channel<T>(10)
-
- suspend fun awaitNext(): T {
- val result = try {
- withTimeout(3000L) { channel.receive() }
- } catch (e: TimeoutCancellationException) {
- throw AssertionError("Didn't receive event")
- }
- val next = channel.tryReceive()
- if (next.isSuccess || next.isClosed)
- throw AssertionError(
- "Two events received instead of one;\n" +
- "first: $result;\nsecond: ${next.getOrNull()}"
- )
- return result
- }
-
- fun launch(scope: CoroutineScope) {
- flow.onEach { channel.send(it) }.launchIn(scope)
- }
}
\ No newline at end of file
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/WorkRequestTest.kt b/work/work-runtime/src/androidTest/java/androidx/work/WorkRequestTest.kt
index 4a49ecd..6543a12 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/WorkRequestTest.kt
+++ b/work/work-runtime/src/androidTest/java/androidx/work/WorkRequestTest.kt
@@ -19,10 +19,10 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.work.worker.TestWorker
+import java.util.concurrent.TimeUnit
import org.junit.Assert.assertNotNull
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.TimeUnit
@RunWith(AndroidJUnit4::class)
class WorkRequestTest {
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/WorkUpdateTest.kt b/work/work-runtime/src/androidTest/java/androidx/work/WorkUpdateTest.kt
index b150905..ddc15f0 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/WorkUpdateTest.kt
+++ b/work/work-runtime/src/androidTest/java/androidx/work/WorkUpdateTest.kt
@@ -29,9 +29,10 @@
import androidx.work.WorkManager.UpdateResult.NOT_APPLIED
import androidx.work.impl.Processor
import androidx.work.impl.WorkDatabase
-import androidx.work.impl.WorkManagerImpl
import androidx.work.impl.WorkLauncherImpl
+import androidx.work.impl.WorkManagerImpl
import androidx.work.impl.background.greedy.GreedyScheduler
+import androidx.work.impl.constraints.ConstraintsState.ConstraintsMet
import androidx.work.impl.constraints.trackers.Trackers
import androidx.work.impl.testutils.TestConstraintTracker
import androidx.work.impl.testutils.TrackingWorkerFactory
@@ -69,7 +70,8 @@
val processor = Processor(context, configuration, taskExecutor, db)
val launcher = WorkLauncherImpl(processor, taskExecutor)
- val greedyScheduler = GreedyScheduler(context, configuration, trackers, processor, launcher)
+ val greedyScheduler = GreedyScheduler(context, configuration, trackers, processor, launcher,
+ taskExecutor)
val workManager = WorkManagerImpl(
context, configuration, taskExecutor, db, listOf(greedyScheduler), processor, trackers
)
@@ -176,7 +178,7 @@
serialExecutorBlocker.await()
}
// will add startWork task to the serialTaskExecutor queue
- greedyScheduler.onAllConstraintsMet(listOf(request.workSpec))
+ greedyScheduler.onConstraintsStateChanged(request.workSpec, ConstraintsMet)
val updatedRequest = OneTimeWorkRequest.Builder(TestWorker::class.java)
.setConstraints(Constraints(requiresCharging = true))
.setId(request.id)
@@ -220,7 +222,7 @@
.setConstraints(Constraints(requiresCharging = true))
.build()
workManager.enqueue(request).result.get()
- fakeChargingTracker.state = true
+ fakeChargingTracker.constraintState = true
val runningLatch = CountDownLatch(1)
lateinit var runningObserver: Observer<WorkInfo>
val liveData = workManager.getWorkInfoByIdLiveData(request.id)
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/impl/WorkManagerImplLargeExecutorTest.java b/work/work-runtime/src/androidTest/java/androidx/work/impl/WorkManagerImplLargeExecutorTest.java
index 60777ec..345eba8 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/impl/WorkManagerImplLargeExecutorTest.java
+++ b/work/work-runtime/src/androidTest/java/androidx/work/impl/WorkManagerImplLargeExecutorTest.java
@@ -193,7 +193,8 @@
super(context, configuration, workManagerImpl.getTrackers(),
workManagerImpl.getProcessor(),
new WorkLauncherImpl(workManagerImpl.getProcessor(),
- workManagerImpl.getWorkTaskExecutor()));
+ workManagerImpl.getWorkTaskExecutor()),
+ workManagerImpl.getWorkTaskExecutor());
mScheduledWorkSpecIds = new HashSet<>();
}
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/impl/WorkManagerImplTest.java b/work/work-runtime/src/androidTest/java/androidx/work/impl/WorkManagerImplTest.java
index 6845d6c..351af86 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/impl/WorkManagerImplTest.java
+++ b/work/work-runtime/src/androidTest/java/androidx/work/impl/WorkManagerImplTest.java
@@ -183,7 +183,7 @@
mContext,
mWorkManagerImpl.getConfiguration(),
mWorkManagerImpl.getTrackers(),
- mWorkManagerImpl.getProcessor(), workLauncher));
+ mWorkManagerImpl.getProcessor(), workLauncher, workTaskExecutor));
// Don't return any scheduler. We don't need to actually execute work for most of our tests.
when(mWorkManagerImpl.getSchedulers()).thenReturn(Collections.<Scheduler>emptyList());
WorkManagerImpl.setDelegate(mWorkManagerImpl);
@@ -1929,13 +1929,9 @@
WorkLauncherImpl launcher = new WorkLauncherImpl(processor, workTaskExecutor);
Trackers trackers = mWorkManagerImpl.getTrackers();
- Scheduler scheduler =
- new GreedyScheduler(
- mContext,
- mWorkManagerImpl.getConfiguration(),
- trackers,
- processor, launcher);
- mWorkManagerImpl = createWorkManager(mContext, mConfiguration, workTaskExecutor,
+ Scheduler scheduler = new GreedyScheduler(mContext, mWorkManagerImpl.getConfiguration(),
+ trackers, processor, launcher, workTaskExecutor);
+ mWorkManagerImpl = createWorkManager(mContext, mConfiguration, workTaskExecutor,
mDatabase, trackers, processor, schedulers(scheduler));
WorkManagerImpl.setDelegate(mWorkManagerImpl);
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/impl/background/greedy/DelayedWorkTrackerTest.kt b/work/work-runtime/src/androidTest/java/androidx/work/impl/background/greedy/DelayedWorkTrackerTest.kt
index 5cba6e9..3906259 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/impl/background/greedy/DelayedWorkTrackerTest.kt
+++ b/work/work-runtime/src/androidTest/java/androidx/work/impl/background/greedy/DelayedWorkTrackerTest.kt
@@ -22,6 +22,7 @@
import androidx.work.RunnableScheduler
import androidx.work.SystemClock
import androidx.work.worker.TestWorker
+import java.util.concurrent.TimeUnit
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@@ -29,7 +30,6 @@
import org.mockito.ArgumentMatchers.anyLong
import org.mockito.Mockito.mock
import org.mockito.Mockito.verify
-import java.util.concurrent.TimeUnit
@RunWith(AndroidJUnit4::class)
class DelayedWorkTrackerTest {
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/impl/background/greedy/GreedySchedulerTest.java b/work/work-runtime/src/androidTest/java/androidx/work/impl/background/greedy/GreedySchedulerTest.java
index 4783799..8bdb4dc 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/impl/background/greedy/GreedySchedulerTest.java
+++ b/work/work-runtime/src/androidTest/java/androidx/work/impl/background/greedy/GreedySchedulerTest.java
@@ -24,13 +24,13 @@
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import android.content.Context;
+import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SdkSuppress;
import androidx.test.filters.SmallTest;
@@ -42,42 +42,42 @@
import androidx.work.impl.Processor;
import androidx.work.impl.StartStopToken;
import androidx.work.impl.WorkLauncher;
-import androidx.work.impl.constraints.WorkConstraintsTracker;
+import androidx.work.impl.constraints.ConstraintsState.ConstraintsMet;
+import androidx.work.impl.constraints.ConstraintsState.ConstraintsNotMet;
+import androidx.work.impl.constraints.trackers.Trackers;
import androidx.work.impl.model.WorkSpec;
+import androidx.work.impl.testutils.TestConstraintTracker;
+import androidx.work.impl.utils.taskexecutor.InstantWorkTaskExecutor;
import androidx.work.worker.TestWorker;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
-import org.mockito.ArgumentMatchers;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
import java.util.concurrent.TimeUnit;
@RunWith(AndroidJUnit4.class)
public class GreedySchedulerTest extends WorkManagerTest {
- private Context mContext;
+ private final Context mContext = ApplicationProvider.getApplicationContext();
private Processor mMockProcessor;
- private WorkConstraintsTracker mMockWorkConstraintsTracker;
private GreedyScheduler mGreedyScheduler;
private DelayedWorkTracker mDelayedWorkTracker;
private WorkLauncher mWorkLauncher;
+ private TestConstraintTracker mBatteryTracker;
@Before
public void setUp() {
- mContext = mock(Context.class);
mMockProcessor = mock(Processor.class);
- mMockWorkConstraintsTracker = mock(WorkConstraintsTracker.class);
+ InstantWorkTaskExecutor taskExecutor = new InstantWorkTaskExecutor();
+ mBatteryTracker = new TestConstraintTracker(false, mContext, taskExecutor);
+ Trackers trackers = new Trackers(mContext, taskExecutor, mBatteryTracker);
mWorkLauncher = mock(WorkLauncher.class);
Configuration configuration = new Configuration.Builder().build();
mGreedyScheduler = new GreedyScheduler(
- mContext, configuration,
- mMockWorkConstraintsTracker, mMockProcessor, mWorkLauncher);
+ mContext, configuration, trackers, mMockProcessor, mWorkLauncher, taskExecutor);
mGreedyScheduler.mInDefaultProcess = true;
mDelayedWorkTracker = mock(DelayedWorkTracker.class);
mGreedyScheduler.setDelayedWorkTracker(mDelayedWorkTracker);
@@ -138,19 +138,21 @@
public void testGreedyScheduler_ignoresIdleWorkConstraint() {
Constraints constraints = new Constraints.Builder()
.setRequiresDeviceIdle(true)
+ .setRequiresCharging(true)
.build();
OneTimeWorkRequest work = new OneTimeWorkRequest.Builder(TestWorker.class)
.setConstraints(constraints)
.build();
mGreedyScheduler.schedule(work.getWorkSpec());
- verify(mMockWorkConstraintsTracker, never()).replace(ArgumentMatchers.<WorkSpec>anyList());
+ // shouldn't be tracked, because work has idle constraint unsupported by GreedyScheduler
+ assertThat(mBatteryTracker.isTracking()).isFalse();
}
@Test
@SmallTest
public void testGreedyScheduler_startsWorkWhenConstraintsMet() {
OneTimeWorkRequest work = new OneTimeWorkRequest.Builder(TestWorker.class).build();
- mGreedyScheduler.onAllConstraintsMet(Collections.singletonList(work.getWorkSpec()));
+ mGreedyScheduler.onConstraintsStateChanged(work.getWorkSpec(), ConstraintsMet.INSTANCE);
ArgumentCaptor<StartStopToken> captor = ArgumentCaptor.forClass(StartStopToken.class);
verify(mWorkLauncher).startWork(captor.capture());
assertThat(captor.getValue().getId().getWorkSpecId()).isEqualTo(work.getWorkSpec().id);
@@ -161,8 +163,8 @@
public void testGreedyScheduler_stopsWorkWhenConstraintsNotMet() {
// in order to stop the work, we should start it first.
OneTimeWorkRequest work = new OneTimeWorkRequest.Builder(TestWorker.class).build();
- mGreedyScheduler.onAllConstraintsMet(Collections.singletonList(work.getWorkSpec()));
- mGreedyScheduler.onAllConstraintsNotMet(Collections.singletonList(work.getWorkSpec()));
+ mGreedyScheduler.onConstraintsStateChanged(work.getWorkSpec(), ConstraintsMet.INSTANCE);
+ mGreedyScheduler.onConstraintsStateChanged(work.getWorkSpec(), ConstraintsNotMet.INSTANCE);
ArgumentCaptor<StartStopToken> captor = ArgumentCaptor.forClass(StartStopToken.class);
verify(mWorkLauncher).stopWork(captor.capture());
assertThat(captor.getValue().getId().getWorkSpecId()).isEqualTo(work.getWorkSpec().id);
@@ -176,15 +178,11 @@
.build();
final WorkSpec workSpec = work.getWorkSpec();
workSpec.lastEnqueueTime = System.currentTimeMillis();
- Set<WorkSpec> expected = new HashSet<WorkSpec>();
- expected.add(workSpec);
mGreedyScheduler.schedule(workSpec);
- verify(mMockWorkConstraintsTracker).replace(expected);
- reset(mMockWorkConstraintsTracker);
-
+ assertThat(mBatteryTracker.isTracking()).isTrue();
mGreedyScheduler.onExecuted(generationalId(workSpec), false);
- verify(mMockWorkConstraintsTracker).replace(Collections.<WorkSpec>emptySet());
+ assertThat(mBatteryTracker.isTracking()).isFalse();
}
@Test
@@ -216,7 +214,6 @@
WorkSpec workSpec = work.getWorkSpec();
mGreedyScheduler.schedule(workSpec);
verify(mMockProcessor, times(0)).addExecutionListener(mGreedyScheduler);
- verify(mMockWorkConstraintsTracker, never()).replace(ArgumentMatchers.<WorkSpec>anyList());
}
@Test
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/impl/background/systemalarm/SystemAlarmDispatcherTest.java b/work/work-runtime/src/androidTest/java/androidx/work/impl/background/systemalarm/SystemAlarmDispatcherTest.java
index 459c4ca..7ef2d88 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/impl/background/systemalarm/SystemAlarmDispatcherTest.java
+++ b/work/work-runtime/src/androidTest/java/androidx/work/impl/background/systemalarm/SystemAlarmDispatcherTest.java
@@ -161,8 +161,9 @@
// Requires API 24+ types.
ConstraintTracker<NetworkState> networkStateTracker =
new ConstraintTracker<NetworkState>(mContext, instantTaskExecutor) {
+
@Override
- public NetworkState getInitialState() {
+ public NetworkState readSystemState() {
return new NetworkState(true, true, true, true);
}
@@ -384,7 +385,7 @@
@Test
public void testSchedule_withConstraints() throws InterruptedException {
- mBatteryChargingTracker.setInitialState(true);
+ mBatteryChargingTracker.setSystemState(true);
OneTimeWorkRequest work = new OneTimeWorkRequest.Builder(TestWorker.class)
.setLastEnqueueTime(
System.currentTimeMillis() + TimeUnit.HOURS.toMillis(1),
@@ -488,7 +489,7 @@
@LargeTest
@RepeatRule.Repeat(times = 1)
public void testDelayMet_withPartiallyMetConstraint() throws InterruptedException {
- mStorageNotLowTracker.setInitialState(true);
+ mStorageNotLowTracker.setSystemState(true);
OneTimeWorkRequest work = new OneTimeWorkRequest.Builder(TestWorker.class)
.setLastEnqueueTime(System.currentTimeMillis(), TimeUnit.MILLISECONDS)
.setConstraints(new Constraints.Builder()
@@ -526,7 +527,7 @@
@Test
public void testConstraintsChanged_withConstraint() throws InterruptedException {
- mBatteryChargingTracker.setInitialState(true);
+ mBatteryChargingTracker.setSystemState(true);
OneTimeWorkRequest work = new OneTimeWorkRequest.Builder(TestWorker.class)
.setLastEnqueueTime(System.currentTimeMillis(), TimeUnit.MILLISECONDS)
.setConstraints(new Constraints.Builder()
@@ -544,7 +545,7 @@
@Test
public void testDelayMet_withMetConstraint() throws InterruptedException {
- mBatteryChargingTracker.setInitialState(true);
+ mBatteryChargingTracker.setSystemState(true);
OneTimeWorkRequest work = new OneTimeWorkRequest.Builder(TestWorker.class)
.setLastEnqueueTime(System.currentTimeMillis(), TimeUnit.MILLISECONDS)
.setConstraints(new Constraints.Builder()
@@ -635,7 +636,7 @@
@Test
public void testConstraintsChanged_withFutureWork() throws InterruptedException {
- mBatteryChargingTracker.setInitialState(true);
+ mBatteryChargingTracker.setSystemState(true);
// Use a mocked scheduler in this test.
Scheduler scheduler = mock(Scheduler.class);
doCallRealMethod().when(mWorkManager).rescheduleEligibleWork();
@@ -793,20 +794,21 @@
}
private static final class FakeConstraintTracker extends ConstraintTracker<Boolean> {
- private boolean mInitialState = false;
+ private boolean mSystemState = false;
FakeConstraintTracker(@NonNull Context context,
@NonNull TaskExecutor taskExecutor) {
super(context, taskExecutor);
}
- private void setInitialState(boolean initialState) {
- mInitialState = initialState;
+ private void setSystemState(boolean systemState) {
+ mSystemState = systemState;
}
+
@Override
- public Boolean getInitialState() {
- return mInitialState;
+ public Boolean readSystemState() {
+ return mSystemState;
}
@Override
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/WorkConstraintsTrackerTest.kt b/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/WorkConstraintsTrackerTest.kt
index d1fa948..817a060 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/WorkConstraintsTrackerTest.kt
+++ b/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/WorkConstraintsTrackerTest.kt
@@ -17,11 +17,20 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
+import androidx.work.impl.constraints.ConstraintsState.ConstraintsMet
+import androidx.work.impl.constraints.ConstraintsState.ConstraintsNotMet
import androidx.work.impl.constraints.trackers.ConstraintTracker
import androidx.work.impl.model.WorkSpec
import androidx.work.impl.testutils.TestConstraintController
import androidx.work.impl.testutils.TestConstraintTracker
+import androidx.work.testutils.launchTester
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.Executors
+import kotlinx.coroutines.asCoroutineDispatcher
+import kotlinx.coroutines.async
+import kotlinx.coroutines.cancelAndJoin
+import kotlinx.coroutines.channels.Channel
+import kotlinx.coroutines.runBlocking
import org.junit.Test
import org.junit.runner.RunWith
@@ -29,83 +38,87 @@
@RunWith(AndroidJUnit4::class)
class WorkConstraintsTrackerTest {
- private val capturingCallback = CapturingWorkConstraintsCallback()
-
@Test
- fun testReplace() {
- val tracker = TestConstraintTracker(true)
- val workConstraintsTracker = WorkConstraintsTracker(capturingCallback, tracker)
- workConstraintsTracker.replace(TEST_WORKSPECS.subList(0, 2))
- val (unconstrained1, _) = capturingCallback.consumeCurrent()
- assertThat(unconstrained1).containsExactly(TEST_WORKSPEC_IDS[0], TEST_WORKSPEC_IDS[1])
- workConstraintsTracker.replace(TEST_WORKSPECS.subList(1, 3))
- val (unconstrained2, _) = capturingCallback.consumeCurrent()
- assertThat(unconstrained2).containsExactly(TEST_WORKSPEC_IDS[1], TEST_WORKSPEC_IDS[2])
+ fun testOnConstraintMet_allConstraintsMet() = runBlocking {
+ val tracker = TestConstraintTracker()
+ val workConstraintsTracker = WorkConstraintsTracker(tracker)
+ val tester = launchTester(workConstraintsTracker.track(TEST_WORKSPECS[0]))
+ assertThat(tester.awaitNext()).isEqualTo(ConstraintsNotMet)
+ tracker.constraintState = true
+ assertThat(tester.awaitNext()).isEqualTo(ConstraintsMet)
}
@Test
- fun testReset() {
- val tracker = TestConstraintTracker(true)
- val workConstraintsTracker = WorkConstraintsTracker(capturingCallback, tracker)
- workConstraintsTracker.replace(TEST_WORKSPECS)
+ fun testOnConstraintMet_allConstraintsMet_subList() = runBlocking {
+ val tracker1 = TestConstraintTracker()
+ val tracker2 = TestConstraintTracker()
+ val controller1 = TestConstraintController(tracker1, TEST_WORKSPEC_IDS.subList(0, 2))
+ val controller2 = TestConstraintController(tracker2, TEST_WORKSPEC_IDS.subList(1, 3))
+ val workConstraintsTracker = WorkConstraintsTracker(listOf(controller1, controller2))
+ val testerO = launchTester(workConstraintsTracker.track(TEST_WORKSPECS[0]))
+ val tester1 = launchTester(workConstraintsTracker.track(TEST_WORKSPECS[1]))
+ val tester2 = launchTester(workConstraintsTracker.track(TEST_WORKSPECS[2]))
+ assertThat(testerO.awaitNext()).isEqualTo(ConstraintsNotMet)
+ assertThat(tester1.awaitNext()).isEqualTo(ConstraintsNotMet)
+ assertThat(tester2.awaitNext()).isEqualTo(ConstraintsNotMet)
+
+ val deferred0 = async { testerO.awaitNext() }
+ val deferred1 = async { tester1.awaitNext() }
+ val deferred2 = async { tester2.awaitNext() }
+ tracker1.constraintState = true
+ assertThat(deferred0.await()).isEqualTo(ConstraintsMet)
+ assertThat(deferred1.isCompleted).isFalse()
+ assertThat(deferred2.isCompleted).isFalse()
+ tracker2.constraintState = true
+ assertThat(deferred1.await()).isEqualTo(ConstraintsMet)
+ assertThat(deferred2.await()).isEqualTo(ConstraintsMet)
+ }
+
+ @Test
+ fun testViaCallback() = runBlocking {
+ val tracker = TestConstraintTracker()
+ val workConstraintsTracker = WorkConstraintsTracker(tracker)
+ val executor = Executors.newSingleThreadExecutor()
+ val callback = Callback()
+ val job = workConstraintsTracker.listen(TEST_WORKSPECS[0],
+ executor.asCoroutineDispatcher(), callback)
+ assertThat(callback.channel.receive()).isEqualTo(ConstraintsNotMet)
+ tracker.constraintState = true
+ assertThat(callback.channel.receive()).isEqualTo(ConstraintsMet)
assertThat(tracker.isTracking).isTrue()
- workConstraintsTracker.reset()
+ job.cancelAndJoin()
assertThat(tracker.isTracking).isFalse()
}
@Test
- fun testOnConstraintMet_allConstraintsMet() {
- val tracker = TestConstraintTracker()
- val workConstraintsTracker = WorkConstraintsTracker(capturingCallback, tracker)
- workConstraintsTracker.replace(TEST_WORKSPECS)
- val (_, constrained) = capturingCallback.consumeCurrent()
- assertThat(constrained).isEqualTo(TEST_WORKSPEC_IDS)
- tracker.state = true
- val (unconstrained, _) = capturingCallback.consumeCurrent()
- assertThat(unconstrained).isEqualTo(TEST_WORKSPEC_IDS)
- }
-
- @Test
- fun testOnConstraintMet_allConstraintsMet_subList() {
+ fun testAreAllConstraintsMet() {
val tracker1 = TestConstraintTracker()
val tracker2 = TestConstraintTracker()
val controller1 = TestConstraintController(tracker1, TEST_WORKSPEC_IDS.subList(0, 2))
- val controller2 = TestConstraintController(tracker2, TEST_WORKSPEC_IDS.subList(2, 3))
- val workConstraintsTracker = WorkConstraintsTrackerImpl(
- capturingCallback,
- arrayOf(controller1, controller2)
- )
- workConstraintsTracker.replace(TEST_WORKSPECS)
- capturingCallback.consumeCurrent()
- tracker1.state = true
- val (unconstrained, _) = capturingCallback.consumeCurrent()
- assertThat(unconstrained).containsExactly(TEST_WORKSPEC_IDS[0], TEST_WORKSPEC_IDS[1])
+ val controller2 = TestConstraintController(tracker2, TEST_WORKSPEC_IDS.subList(1, 3))
+ val workConstraintsTracker = WorkConstraintsTracker(listOf(controller1, controller2))
+ assertThat(workConstraintsTracker.areAllConstraintsMet(TEST_WORKSPECS[0])).isFalse()
+ assertThat(workConstraintsTracker.areAllConstraintsMet(TEST_WORKSPECS[1])).isFalse()
+ assertThat(workConstraintsTracker.areAllConstraintsMet(TEST_WORKSPECS[2])).isFalse()
+ tracker1.constraintState = true
+ assertThat(workConstraintsTracker.areAllConstraintsMet(TEST_WORKSPECS[0])).isTrue()
+ assertThat(workConstraintsTracker.areAllConstraintsMet(TEST_WORKSPECS[1])).isFalse()
+ assertThat(workConstraintsTracker.areAllConstraintsMet(TEST_WORKSPECS[2])).isFalse()
+ tracker2.constraintState = true
+ assertThat(workConstraintsTracker.areAllConstraintsMet(TEST_WORKSPECS[0])).isTrue()
+ assertThat(workConstraintsTracker.areAllConstraintsMet(TEST_WORKSPECS[1])).isTrue()
+ assertThat(workConstraintsTracker.areAllConstraintsMet(TEST_WORKSPECS[2])).isTrue()
+ tracker1.constraintState = false
+ assertThat(workConstraintsTracker.areAllConstraintsMet(TEST_WORKSPECS[0])).isFalse()
+ assertThat(workConstraintsTracker.areAllConstraintsMet(TEST_WORKSPECS[1])).isFalse()
+ assertThat(workConstraintsTracker.areAllConstraintsMet(TEST_WORKSPECS[2])).isTrue()
}
- @Test
- fun testOnConstraintMet_allConstraintsNotMet() {
- val tracker1 = TestConstraintTracker()
- val tracker2 = TestConstraintTracker()
- val workConstraintsTracker = WorkConstraintsTracker(capturingCallback, tracker1, tracker2)
- workConstraintsTracker.replace(TEST_WORKSPECS)
- capturingCallback.consumeCurrent()
- tracker1.state = true
- val (unconstrained, _) = capturingCallback.consumeCurrent()
- // only one constraint is resolved, so unconstrained is empty list
- assertThat(unconstrained).isEqualTo(emptyList<String>())
- }
-
- @Test
- fun testOnConstraintNotMet() {
- val tracker1 = TestConstraintTracker(true)
- val tracker2 = TestConstraintTracker(true)
- val workConstraintsTracker = WorkConstraintsTracker(capturingCallback, tracker1, tracker2)
- workConstraintsTracker.replace(TEST_WORKSPECS)
- val (unconstrained, _) = capturingCallback.consumeCurrent()
- assertThat(unconstrained).isEqualTo(TEST_WORKSPEC_IDS)
- tracker1.state = false
- val (_, constrained) = capturingCallback.consumeCurrent()
- assertThat(constrained).isEqualTo(TEST_WORKSPEC_IDS)
+ class Callback : OnConstraintsStateChangedListener {
+ val channel = Channel<ConstraintsState>(10)
+ override fun onConstraintsStateChanged(workSpec: WorkSpec, state: ConstraintsState) {
+ channel.trySend(state)
+ }
}
}
@@ -116,30 +129,9 @@
)
private val TEST_WORKSPEC_IDS = TEST_WORKSPECS.map { it.id }
-private fun WorkConstraintsTracker(
- callback: WorkConstraintsCallback,
+internal fun WorkConstraintsTracker(
vararg trackers: ConstraintTracker<Boolean>
-): WorkConstraintsTrackerImpl {
+): WorkConstraintsTracker {
val controllers = trackers.map { TestConstraintController(it, TEST_WORKSPEC_IDS) }
- return WorkConstraintsTrackerImpl(callback, controllers.toTypedArray())
-}
-
-private class CapturingWorkConstraintsCallback(
- var unconstrainedWorkSpecIds: List<String>? = null,
- var constrainedWorkSpecIds: List<String>? = null,
-) : WorkConstraintsCallback {
- override fun onAllConstraintsMet(workSpecs: List<WorkSpec>) {
- unconstrainedWorkSpecIds = workSpecs.map { it.id }
- }
-
- override fun onAllConstraintsNotMet(workSpecs: List<WorkSpec>) {
- constrainedWorkSpecIds = workSpecs.map { it.id }
- }
-
- fun consumeCurrent(): Pair<List<String>?, List<String>?> {
- val result = unconstrainedWorkSpecIds to constrainedWorkSpecIds
- unconstrainedWorkSpecIds = null
- constrainedWorkSpecIds = null
- return result
- }
+ return WorkConstraintsTracker(controllers)
}
\ No newline at end of file
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/controllers/ConstraintControllerTest.java b/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/controllers/ConstraintControllerTest.java
deleted file mode 100644
index a4bf15f..0000000
--- a/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/controllers/ConstraintControllerTest.java
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- * Copyright 2017 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
- *
- * http://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.
- */
-
-package androidx.work.impl.constraints.controllers;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.atLeastOnce;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
-
-import androidx.annotation.NonNull;
-import androidx.test.core.app.ApplicationProvider;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.filters.SdkSuppress;
-import androidx.test.filters.SmallTest;
-import androidx.work.Constraints;
-import androidx.work.OneTimeWorkRequest;
-import androidx.work.WorkManagerTest;
-import androidx.work.impl.constraints.trackers.ConstraintTracker;
-import androidx.work.impl.model.WorkSpec;
-import androidx.work.impl.utils.taskexecutor.InstantWorkTaskExecutor;
-import androidx.work.worker.TestWorker;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.util.Collections;
-import java.util.List;
-
-@RunWith(AndroidJUnit4.class)
-@SdkSuppress(minSdkVersion = 23)
-public class ConstraintControllerTest extends WorkManagerTest {
- private TestDeviceIdleConstraintController mTestIdleController;
-
- @SuppressWarnings("unchecked")
- private final FakeConstraintTracker mTracker = new FakeConstraintTracker();
-
- private ConstraintController.OnConstraintUpdatedCallback mCallback =
- mock(ConstraintController.OnConstraintUpdatedCallback.class);
-
- @Before
- public void setUp() {
- mTestIdleController = new TestDeviceIdleConstraintController(mTracker);
- mTestIdleController.setCallback(mCallback);
- }
-
- private WorkSpec createTestWorkSpec(Constraints constraints) {
- return new OneTimeWorkRequest.Builder(TestWorker.class)
- .setConstraints(constraints)
- .build().getWorkSpec();
- }
-
- private WorkSpec createTestConstraintWorkSpec() {
- Constraints mConstraintsWithTestConstraint = new Constraints.Builder()
- .setRequiresDeviceIdle(true)
- .build();
-
- return createTestWorkSpec(mConstraintsWithTestConstraint);
- }
-
- private WorkSpec createNoConstraintWorkSpec() {
- return createTestWorkSpec(Constraints.NONE);
- }
-
- @Test
- @SmallTest
- public void testReplace_empty() {
- mTestIdleController.replace(Collections.emptyList());
- assertThat(mTracker.mTracking, is(false));
- verifyZeroInteractions(mCallback);
- }
-
- @Test
- @SmallTest
- public void testReplace_workSpecNoConstraints() {
- WorkSpec workSpecNoConstraints = createNoConstraintWorkSpec();
- List<WorkSpec> workSpecs = Collections.singletonList(workSpecNoConstraints);
- mTestIdleController.replace(workSpecs);
- assertThat(mTracker.mTracking, is(false));
- verifyZeroInteractions(mCallback);
- }
-
- @Test
- @SmallTest
- public void testReplace_workSpecWithConstraint_constrained() {
- WorkSpec workSpecWithConstraint = createTestConstraintWorkSpec();
- List<WorkSpec> workSpecs = Collections.singletonList(workSpecWithConstraint);
-
- mTracker.setDeviceActive();
- mTestIdleController.replace(workSpecs);
- assertThat(mTracker.mTracking, is(true));
- verify(mCallback, atLeastOnce()).onConstraintNotMet(eq(workSpecs));
- }
-
- @Test
- @SmallTest
- public void testReplace_workSpecWithConstraint_unconstrained() {
- WorkSpec workSpecWithConstraint = createTestConstraintWorkSpec();
- List<WorkSpec> workSpecs = Collections.singletonList(workSpecWithConstraint);
-
- mTracker.setDeviceIdle();
- mTestIdleController.replace(workSpecs);
- assertThat(mTracker.mTracking, is(true));
- // called twice: replace calls updateCallback explicitly and
- // tracker.addListener results in updateCallback too
- // probably should be fixed eventually
- verify(mCallback, atLeastOnce()).onConstraintMet(eq(workSpecs));
- }
-
- @Test
- @SmallTest
- public void testReplace_workSpecWithConstraint_constraintNotSet() {
- WorkSpec workSpecWithConstraint = createTestConstraintWorkSpec();
- List<WorkSpec> workSpecs = Collections.singletonList(workSpecWithConstraint);
-
- mTestIdleController.replace(workSpecs);
- // called twice: replace calls updateCallback explictily and
- // tracker.addListener results in updateCallback too
- // probably should be fixed eventually
- verify(mCallback, atLeastOnce()).onConstraintNotMet(workSpecs);
- }
-
- @Test
- @SmallTest
- public void testReset_alreadyNoMatchingWorkSpecs() {
- mTestIdleController.reset();
- assertThat(mTracker.mTracking, is(false));
- }
-
- @Test
- @SmallTest
- public void testReset_withMatchingWorkSpecs() {
- WorkSpec workSpecWithConstraint = createTestConstraintWorkSpec();
- List<WorkSpec> workSpecs = Collections.singletonList(workSpecWithConstraint);
- mTestIdleController.replace(workSpecs);
-
- mTestIdleController.reset();
- assertThat(mTracker.mTracking, is(false));
- }
-
- @Test
- @SmallTest
- public void testOnConstraintChanged_noMatchingWorkSpecs() {
- mTestIdleController.onConstraintChanged(true);
- verifyZeroInteractions(mCallback);
- }
-
- @Test
- @SmallTest
- public void testOnConstraintChanged_toConstrained_withMatchingWorkSpecs() {
- WorkSpec workSpecWithConstraint = createTestConstraintWorkSpec();
- List<WorkSpec> workSpecs = Collections.singletonList(workSpecWithConstraint);
- mTestIdleController.replace(workSpecs);
- verify(mCallback, times(2)).onConstraintNotMet(workSpecs);
-
- final boolean deviceIdle = false;
- mTestIdleController.onConstraintChanged(deviceIdle);
- verify(mCallback, times(3)).onConstraintNotMet(workSpecs);
- }
-
- @Test
- @SmallTest
- public void testOnConstraintChanged_toUnconstrained_withMatchingWorkSpecs() {
- WorkSpec workSpecWithConstraint = createTestConstraintWorkSpec();
- List<WorkSpec> workSpecs = Collections.singletonList(workSpecWithConstraint);
- mTestIdleController.replace(workSpecs);
-
- final boolean deviceIdle = true;
- mTestIdleController.onConstraintChanged(deviceIdle);
- verify(mCallback).onConstraintMet(workSpecs);
- }
-
- @Test
- @SmallTest
- public void testIsWorkSpecConstrained_noMatchingWorkSpecs() {
- WorkSpec workSpecNoConstraints = createNoConstraintWorkSpec();
- mTestIdleController.replace(Collections.singletonList(workSpecNoConstraints));
- assertThat(mTestIdleController.isWorkSpecConstrained(workSpecNoConstraints.id),
- is(false));
- }
-
- @Test
- @SmallTest
- public void testIsWorkSpecConstrained_constrained_withMatchingWorkSpecs() {
- mTracker.setDeviceActive();
-
- WorkSpec workSpecWithConstraint = createTestConstraintWorkSpec();
- mTestIdleController.replace(Collections.singletonList(workSpecWithConstraint));
- assertThat(mTestIdleController.isWorkSpecConstrained(workSpecWithConstraint.id),
- is(true));
- }
-
- @Test
- @SmallTest
- public void testIsWorkSpecConstrained_constrained_noMatchingWorkSpecs() {
- mTracker.setDeviceActive();
-
- WorkSpec workSpecNoConstraints = createNoConstraintWorkSpec();
- mTestIdleController.replace(Collections.singletonList(workSpecNoConstraints));
- assertThat(mTestIdleController.isWorkSpecConstrained(workSpecNoConstraints.id),
- is(false));
- }
-
- @Test
- @SmallTest
- public void testIsWorkSpecConstrained_unconstrained_withMatchingWorkSpecs() {
- mTracker.setDeviceIdle();
-
- WorkSpec workSpecWithConstraint = createTestConstraintWorkSpec();
- mTestIdleController.replace(Collections.singletonList(workSpecWithConstraint));
- assertThat(mTestIdleController.isWorkSpecConstrained(workSpecWithConstraint.id),
- is(false));
- }
-
- @Test
- @SmallTest
- public void testIsWorkSpecConstrained_unconstrained_noMatchingWorkSpecs() {
- mTracker.setDeviceIdle();
-
- WorkSpec workSpecNoConstraints = createNoConstraintWorkSpec();
- mTestIdleController.replace(Collections.singletonList(workSpecNoConstraints));
- assertThat(mTestIdleController.isWorkSpecConstrained(workSpecNoConstraints.id),
- is(false));
- }
-
- private static class TestDeviceIdleConstraintController extends ConstraintController<Boolean> {
- TestDeviceIdleConstraintController(ConstraintTracker<Boolean> tracker) {
- super(tracker);
- }
-
- @Override
- public boolean hasConstraint(@NonNull WorkSpec workSpec) {
- return workSpec.constraints.requiresDeviceIdle();
- }
-
- @Override
- public boolean isConstrained(@NonNull Boolean isDeviceIdle) {
- return !isDeviceIdle;
- }
- }
-
- private static class FakeConstraintTracker extends ConstraintTracker<Boolean> {
- public boolean mTracking;
- private boolean mInitialState;
-
- protected FakeConstraintTracker() {
- super(ApplicationProvider.getApplicationContext(), new InstantWorkTaskExecutor());
- }
-
- @Override
- public Boolean getInitialState() {
- return mInitialState;
- }
-
- @Override
- public void startTracking() {
- mTracking = true;
- }
-
- @Override
- public void stopTracking() {
- mTracking = false;
- }
-
- void setDeviceActive() {
- mInitialState = false;
- }
-
- void setDeviceIdle() {
- mInitialState = true;
- }
- }
-}
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/controllers/ConstraintControllerTest.kt b/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/controllers/ConstraintControllerTest.kt
new file mode 100644
index 0000000..932f872
--- /dev/null
+++ b/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/controllers/ConstraintControllerTest.kt
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.work.impl.constraints.controllers
+
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SdkSuppress
+import androidx.test.filters.SmallTest
+import androidx.work.Constraints
+import androidx.work.OneTimeWorkRequest
+import androidx.work.impl.constraints.ConstraintsState.ConstraintsMet
+import androidx.work.impl.constraints.ConstraintsState.ConstraintsNotMet
+import androidx.work.impl.constraints.trackers.ConstraintTracker
+import androidx.work.impl.model.WorkSpec
+import androidx.work.impl.utils.taskexecutor.InstantWorkTaskExecutor
+import androidx.work.testutils.launchTester
+import androidx.work.worker.TestWorker
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.runBlocking
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+@SdkSuppress(minSdkVersion = 23)
+class ConstraintControllerTest {
+ private val tracker = FakeConstraintTracker()
+ private val testIdleController = TestDeviceIdleConstraintController(tracker)
+
+ @Test
+ @SmallTest
+ fun testTrackViaFlow() = runBlocking {
+ tracker.setDeviceActive()
+ val tester = launchTester(testIdleController.track())
+ assertThat(tester.awaitNext()).isEqualTo(ConstraintsNotMet)
+ assertThat(tracker.tracking).isTrue()
+ tracker.setDeviceIdle()
+ assertThat(tester.awaitNext()).isEqualTo(ConstraintsMet)
+ tracker.setDeviceActive()
+ assertThat(tester.awaitNext()).isEqualTo(ConstraintsNotMet)
+ }
+
+ @Test
+ @SmallTest
+ fun testIsConstrained() {
+ val constrained = OneTimeWorkRequest.Builder(TestWorker::class.java)
+ .setConstraints(Constraints(requiresDeviceIdle = true)).build().workSpec
+ val unconstrained = OneTimeWorkRequest.Builder(TestWorker::class.java).build().workSpec
+ tracker.setDeviceActive()
+ assertThat(testIdleController.isConstrained(unconstrained)).isFalse()
+ assertThat(testIdleController.isConstrained(constrained)).isTrue()
+ tracker.setDeviceIdle()
+ assertThat(testIdleController.isConstrained(unconstrained)).isFalse()
+ assertThat(testIdleController.isConstrained(constrained)).isFalse()
+ }
+
+ private class TestDeviceIdleConstraintController(
+ tracker: ConstraintTracker<Boolean>
+ ) : ConstraintController<Boolean>(tracker) {
+ override fun hasConstraint(workSpec: WorkSpec): Boolean {
+ return workSpec.constraints.requiresDeviceIdle()
+ }
+
+ override fun isConstrained(value: Boolean) = !value
+ }
+
+ private class FakeConstraintTracker : ConstraintTracker<Boolean>(
+ ApplicationProvider.getApplicationContext(),
+ InstantWorkTaskExecutor()
+ ) {
+ var tracking = false
+ var deviceIdle = false
+ override fun startTracking() {
+ tracking = true
+ }
+
+ override fun stopTracking() {
+ tracking = false
+ }
+
+ fun setDeviceActive() {
+ deviceIdle = false
+ state = false
+ }
+
+ fun setDeviceIdle() {
+ deviceIdle = true
+ state = true
+ }
+
+ override fun readSystemState() = deviceIdle
+ }
+}
\ No newline at end of file
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/trackers/BatteryChargingTrackerTest.java b/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/trackers/BatteryChargingTrackerTest.java
index 958e2ff..2687eb0 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/trackers/BatteryChargingTrackerTest.java
+++ b/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/trackers/BatteryChargingTrackerTest.java
@@ -90,23 +90,23 @@
@Test
@SmallTest
- public void testGetInitialState_nullIntent() {
+ public void testReadSystemState_nullIntent() {
mockContextReturns(null);
- assertThat(mTracker.getInitialState(), is(false));
+ assertThat(mTracker.readSystemState(), is(false));
}
@Test
@SmallTest
- public void testGetInitialState_chargingIntent() {
+ public void testReadSystemState_chargingIntent() {
mockContextReturns(createBatteryChangedIntent(true));
- assertThat(mTracker.getInitialState(), is(true));
+ assertThat(mTracker.readSystemState(), is(true));
}
@Test
@SmallTest
- public void testGetInitialState_dischargingIntent() {
+ public void testReadSystemState_dischargingIntent() {
mockContextReturns(createBatteryChangedIntent(false));
- assertThat(mTracker.getInitialState(), is(false));
+ assertThat(mTracker.readSystemState(), is(false));
}
@Test
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/trackers/BatteryNotLowTrackerTest.java b/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/trackers/BatteryNotLowTrackerTest.java
index cbf1e15..69092dd 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/trackers/BatteryNotLowTrackerTest.java
+++ b/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/trackers/BatteryNotLowTrackerTest.java
@@ -81,14 +81,14 @@
private void initialStateHelper(int status, float percentage, boolean expectedBatteryNotLow) {
mockContextReturns(createBatteryChangedIntent(status, percentage));
- assertThat(mTracker.getInitialState(), is(expectedBatteryNotLow));
+ assertThat(mTracker.readSystemState(), is(expectedBatteryNotLow));
}
@Test
@SmallTest
- public void testGetInitialState_nullIntent() {
+ public void testReadSystemState_nullIntent() {
mockContextReturns(null);
- assertThat(mTracker.getInitialState(), is(false));
+ assertThat(mTracker.readSystemState(), is(false));
}
@Test
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/trackers/ConstraintTrackerTest.java b/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/trackers/ConstraintTrackerTest.java
index bfe46a5..f71dbac 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/trackers/ConstraintTrackerTest.java
+++ b/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/trackers/ConstraintTrackerTest.java
@@ -67,17 +67,17 @@
assertThat(mTracker.mIsTracking, is(false));
assertThat(mTracker.mStartTrackingCount, is(0));
- assertThat(mTracker.mGetInitialStateCount, is(0));
+ assertThat(mTracker.mReadSystemStateCount, is(0));
mTracker.addListener(constraintListener1);
assertThat(mTracker.mIsTracking, is(true));
assertThat(mTracker.mStartTrackingCount, is(1));
- assertThat(mTracker.mGetInitialStateCount, is(1));
+ assertThat(mTracker.mReadSystemStateCount, is(1));
mTracker.addListener(constraintListener2);
assertThat(mTracker.mIsTracking, is(true));
assertThat(mTracker.mStartTrackingCount, is(1));
- assertThat(mTracker.mGetInitialStateCount, is(1));
+ assertThat(mTracker.mReadSystemStateCount, is(1));
}
@SuppressWarnings("unchecked")
@@ -87,17 +87,17 @@
assertThat(mTracker.mIsTracking, is(false));
assertThat(mTracker.mStartTrackingCount, is(0));
- assertThat(mTracker.mGetInitialStateCount, is(0));
+ assertThat(mTracker.mReadSystemStateCount, is(0));
mTracker.addListener(constraintListener);
assertThat(mTracker.mIsTracking, is(true));
assertThat(mTracker.mStartTrackingCount, is(1));
- assertThat(mTracker.mGetInitialStateCount, is(1));
+ assertThat(mTracker.mReadSystemStateCount, is(1));
mTracker.addListener(constraintListener);
assertThat(mTracker.mIsTracking, is(true));
assertThat(mTracker.mStartTrackingCount, is(1));
- assertThat(mTracker.mGetInitialStateCount, is(1));
+ assertThat(mTracker.mReadSystemStateCount, is(1));
}
@Test
@@ -174,7 +174,7 @@
private static class TestConstraintTracker extends ConstraintTracker<Boolean> {
boolean mIsTracking;
- int mGetInitialStateCount;
+ int mReadSystemStateCount;
int mStartTrackingCount;
int mStopTrackingCount;
boolean mInitialState = false;
@@ -184,8 +184,8 @@
}
@Override
- public Boolean getInitialState() {
- mGetInitialStateCount++;
+ public Boolean readSystemState() {
+ mReadSystemStateCount++;
return mInitialState;
}
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/trackers/NetworkStateTrackerTest.java b/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/trackers/NetworkStateTrackerTest.java
index c61c213..afbaf5b 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/trackers/NetworkStateTrackerTest.java
+++ b/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/trackers/NetworkStateTrackerTest.java
@@ -69,7 +69,7 @@
public void testGetInitialState_nullNetworkInfoSdk15() {
// API < 16 conservatively treats null networkInfo as metered.
NetworkState expectedState = new NetworkState(false, false, true, false);
- assertThat(mTracker.getInitialState(), is(expectedState));
+ assertThat(mTracker.readSystemState(), is(expectedState));
}
@Test
@@ -77,7 +77,7 @@
@SdkSuppress(minSdkVersion = 16)
public void testGetInitialState_nullNetworkInfo() {
NetworkState expectedState = new NetworkState(false, false, false, false);
- assertThat(mTracker.getInitialState(), is(expectedState));
+ assertThat(mTracker.readSystemState(), is(expectedState));
}
@Test
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/trackers/StorageNotLowTrackerTest.java b/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/trackers/StorageNotLowTrackerTest.java
index 95d0d18..b74549a 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/trackers/StorageNotLowTrackerTest.java
+++ b/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/trackers/StorageNotLowTrackerTest.java
@@ -65,21 +65,21 @@
@SmallTest
public void testGetInitialState_nullIntent() {
mockContextReturns(null);
- assertThat(mTracker.getInitialState(), is(true));
+ assertThat(mTracker.readSystemState(), is(true));
}
@Test
@SmallTest
public void testGetInitialState_storageOkIntent() {
mockContextReturns(new Intent(Intent.ACTION_DEVICE_STORAGE_OK));
- assertThat(mTracker.getInitialState(), is(true));
+ assertThat(mTracker.readSystemState(), is(true));
}
@Test
@SmallTest
public void testGetInitialState_storageLowIntent() {
mockContextReturns(new Intent(Intent.ACTION_DEVICE_STORAGE_LOW));
- assertThat(mTracker.getInitialState(), is(false));
+ assertThat(mTracker.readSystemState(), is(false));
}
@Test
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/impl/foreground/SystemForegroundDispatcherTest.kt b/work/work-runtime/src/androidTest/java/androidx/work/impl/foreground/SystemForegroundDispatcherTest.kt
index 2227d29..1ec33c1 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/impl/foreground/SystemForegroundDispatcherTest.kt
+++ b/work/work-runtime/src/androidTest/java/androidx/work/impl/foreground/SystemForegroundDispatcherTest.kt
@@ -29,7 +29,6 @@
import androidx.work.Constraints
import androidx.work.ForegroundInfo
import androidx.work.ListenableWorker
-import androidx.work.NetworkType
import androidx.work.OneTimeWorkRequest
import androidx.work.WorkInfo
import androidx.work.WorkerParameters
@@ -38,14 +37,15 @@
import androidx.work.impl.StartStopToken
import androidx.work.impl.WorkDatabase
import androidx.work.impl.WorkManagerImpl
-import androidx.work.impl.constraints.WorkConstraintsCallback
import androidx.work.impl.constraints.WorkConstraintsTracker
+import androidx.work.impl.constraints.trackers.Trackers
import androidx.work.impl.foreground.SystemForegroundDispatcher.createCancelWorkIntent
import androidx.work.impl.foreground.SystemForegroundDispatcher.createNotifyIntent
import androidx.work.impl.foreground.SystemForegroundDispatcher.createStartForegroundIntent
import androidx.work.impl.foreground.SystemForegroundDispatcher.createStopForegroundIntent
import androidx.work.impl.model.WorkGenerationalId
import androidx.work.impl.schedulers
+import androidx.work.impl.testutils.TestConstraintTracker
import androidx.work.impl.utils.SynchronousExecutor
import androidx.work.impl.utils.futures.SettableFuture
import androidx.work.impl.utils.taskexecutor.InstantWorkTaskExecutor
@@ -65,32 +65,29 @@
import org.mockito.Mockito.spy
import org.mockito.Mockito.times
import org.mockito.Mockito.verify
-import org.mockito.Mockito.verifyZeroInteractions
import org.mockito.Mockito.`when`
@RunWith(AndroidJUnit4::class)
@MediumTest
class SystemForegroundDispatcherTest {
- private lateinit var context: Context
+ private val context: Context = ApplicationProvider.getApplicationContext()
private lateinit var config: Configuration
- private lateinit var taskExecutor: TaskExecutor
+ private val taskExecutor: TaskExecutor = InstantWorkTaskExecutor()
private lateinit var workManager: WorkManagerImpl
private lateinit var workDatabase: WorkDatabase
private lateinit var processor: Processor
private lateinit var tracker: WorkConstraintsTracker
- private lateinit var constraintsCallback: WorkConstraintsCallback
private lateinit var dispatcher: SystemForegroundDispatcher
private lateinit var dispatcherCallback: SystemForegroundDispatcher.Callback
+ private val fakeChargingTracker = TestConstraintTracker(true, context, taskExecutor)
@Before
fun setUp() {
- context = ApplicationProvider.getApplicationContext()
config = Configuration.Builder()
.setExecutor(SynchronousExecutor())
.setMinimumLoggingLevel(Log.DEBUG)
.build()
- taskExecutor = InstantWorkTaskExecutor()
val scheduler = mock(Scheduler::class.java)
workDatabase = WorkDatabase.create(
context, taskExecutor.serialTaskExecutor, config.clock, true)
@@ -107,8 +104,11 @@
)
workDatabase = workManager.workDatabase
// Initialize WorkConstraintsTracker
- constraintsCallback = mock(WorkConstraintsCallback::class.java)
- tracker = mock(WorkConstraintsTracker::class.java)
+ tracker = WorkConstraintsTracker(Trackers(
+ context = context,
+ taskExecutor = taskExecutor,
+ batteryChargingTracker = fakeChargingTracker
+ ))
// Initialize dispatcher
dispatcherCallback = mock(SystemForegroundDispatcher.Callback::class.java)
dispatcher = spy(SystemForegroundDispatcher(context, workManager, tracker))
@@ -116,7 +116,7 @@
}
@Test
- fun testStartForeground_noInteractions_workSpecHasNoConstraints() {
+ fun testStartForeground_workSpecHasNoConstraints() {
val request = OneTimeWorkRequest.Builder(TestWorker::class.java).build()
val notificationId = 1
val notification = mock(Notification::class.java)
@@ -127,14 +127,13 @@
dispatcher.onStartCommand(intent)
verify(dispatcherCallback, times(1))
.startForeground(eq(notificationId), eq(0), any<Notification>())
- verifyZeroInteractions(tracker)
}
@Test
fun testStartForeground_trackConstraints_workSpecHasConstraints() {
val request = OneTimeWorkRequest.Builder(NeverResolvedWorker::class.java)
.setConstraints(
- Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build()
+ Constraints.Builder().setRequiresCharging(true).build()
).build()
workDatabase.workSpecDao().insertWorkSpec(request.workSpec)
processor.startWork(StartStopToken(WorkGenerationalId(request.stringId, 0)))
@@ -146,7 +145,7 @@
dispatcher.onStartCommand(intent)
verify(dispatcherCallback, times(1))
.startForeground(eq(notificationId), eq(0), any<Notification>())
- verify(tracker, times(1)).replace(setOf(request.workSpec))
+ assertThat(fakeChargingTracker.isTracking, `is`(true))
}
@Test
@@ -383,7 +382,7 @@
fun testStartForeground_trackConstraints_constraintsUnMet() {
val request = OneTimeWorkRequest.Builder(NeverResolvedWorker::class.java)
.setConstraints(
- Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build()
+ Constraints.Builder().setRequiresCharging(true).build()
).build()
workDatabase.workSpecDao().insertWorkSpec(request.workSpec)
processor.startWork(StartStopToken(WorkGenerationalId(request.stringId, 0)))
@@ -393,8 +392,8 @@
val intent = createStartForegroundIntent(context,
WorkGenerationalId(request.stringId, 0), metadata)
dispatcher.onStartCommand(intent)
- verify(tracker, times(1)).replace(setOf(request.workSpec))
- dispatcher.onAllConstraintsNotMet(listOf(request.workSpec))
+ assertThat(fakeChargingTracker.isTracking, `is`(true))
+ fakeChargingTracker.state = false
verify(workManager, times(1)).stopForegroundWork(eq(
WorkGenerationalId(request.workSpec.id, 0)
))
@@ -404,7 +403,7 @@
fun testCancelForegroundWork() {
val request = OneTimeWorkRequest.Builder(NeverResolvedWorker::class.java)
.setConstraints(
- Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build()
+ Constraints.Builder().setRequiresCharging(true).build()
).build()
workDatabase.workSpecDao().insertWorkSpec(request.workSpec)
processor.startWork(StartStopToken(WorkGenerationalId(request.stringId, 0)))
@@ -414,7 +413,7 @@
val intent = createStartForegroundIntent(context,
WorkGenerationalId(request.workSpec.id, 0), metadata)
dispatcher.onStartCommand(intent)
- verify(tracker, times(1)).replace(setOf(request.workSpec))
+ assertThat(fakeChargingTracker.isTracking, `is`(true))
val stopIntent = createCancelWorkIntent(context, request.stringId)
dispatcher.onStartCommand(stopIntent)
verify(workManager, times(1)).cancelWorkById(eq(UUID.fromString(request.workSpec.id)))
@@ -447,7 +446,7 @@
@Test
fun testUseRunningWork() {
val request = OneTimeWorkRequest.Builder(NeverResolvedWorker::class.java)
- .setConstraints(Constraints(requiredNetworkType = NetworkType.CONNECTED))
+ .setConstraints(Constraints.Builder().setRequiresCharging(true).build())
.build()
workDatabase.workSpecDao().insertWorkSpec(request.workSpec)
processor.startWork(StartStopToken(WorkGenerationalId(request.stringId, 0)))
@@ -461,7 +460,7 @@
val intent = createStartForegroundIntent(context,
WorkGenerationalId(request.stringId, 0), metadata)
dispatcher.onStartCommand(intent)
- verify(tracker, times(1)).replace(setOf(request.workSpec))
+ assertThat(fakeChargingTracker.isTracking, `is`(true))
}
}
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/impl/testutils/TestConstraints.kt b/work/work-runtime/src/androidTest/java/androidx/work/impl/testutils/TestConstraints.kt
index d7baf8d..da4d479 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/impl/testutils/TestConstraints.kt
+++ b/work/work-runtime/src/androidTest/java/androidx/work/impl/testutils/TestConstraints.kt
@@ -25,12 +25,21 @@
import androidx.work.impl.utils.taskexecutor.TaskExecutor
class TestConstraintTracker(
- override val initialState: Boolean = false,
+ initialState: Boolean = false,
context: Context = ApplicationProvider.getApplicationContext(),
taskExecutor: TaskExecutor = InstantWorkTaskExecutor(),
) : ConstraintTracker<Boolean>(context, taskExecutor) {
var isTracking = false
+ // some awkwardness because "this.state = ..." is overridden
+ // with `readSystemState` when first listener is added.
+ // so we have a separate state returns that we return from `readSystemState` too.
+ var constraintState: Boolean = initialState
+ set(value) {
+ state = value
+ field = value
+ }
+
override fun startTracking() {
isTracking = true
}
@@ -38,6 +47,8 @@
override fun stopTracking() {
isTracking = false
}
+
+ override fun readSystemState() = constraintState
}
class TestConstraintController(
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/impl/utils/SerialExecutorTest.kt b/work/work-runtime/src/androidTest/java/androidx/work/impl/utils/SerialExecutorTest.kt
index c723d90..814e22f 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/impl/utils/SerialExecutorTest.kt
+++ b/work/work-runtime/src/androidTest/java/androidx/work/impl/utils/SerialExecutorTest.kt
@@ -18,14 +18,14 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.Executors
+import java.util.concurrent.TimeUnit
import org.hamcrest.MatcherAssert.assertThat
import org.hamcrest.Matchers.greaterThanOrEqualTo
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.Executors
-import java.util.concurrent.TimeUnit
@RunWith(AndroidJUnit4::class)
@LargeTest
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/impl/utils/WorkForegroundUpdaterTest.kt b/work/work-runtime/src/androidTest/java/androidx/work/impl/utils/WorkForegroundUpdaterTest.kt
index b9373a0..d7e25ac 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/impl/utils/WorkForegroundUpdaterTest.kt
+++ b/work/work-runtime/src/androidTest/java/androidx/work/impl/utils/WorkForegroundUpdaterTest.kt
@@ -32,15 +32,15 @@
import androidx.work.impl.utils.taskexecutor.InstantWorkTaskExecutor
import androidx.work.impl.utils.taskexecutor.TaskExecutor
import androidx.work.worker.TestWorker
+import java.util.UUID
import org.junit.Assert.assertNotNull
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentMatchers
-import org.mockito.Mockito.`when`
import org.mockito.Mockito.anyString
import org.mockito.Mockito.mock
-import java.util.UUID
+import org.mockito.Mockito.`when`
@RunWith(AndroidJUnit4::class)
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/impl/utils/WorkProgressUpdaterTest.kt b/work/work-runtime/src/androidTest/java/androidx/work/impl/utils/WorkProgressUpdaterTest.kt
index da29a44..eaf7b7b 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/impl/utils/WorkProgressUpdaterTest.kt
+++ b/work/work-runtime/src/androidTest/java/androidx/work/impl/utils/WorkProgressUpdaterTest.kt
@@ -26,13 +26,13 @@
import androidx.work.impl.model.WorkSpecDao
import androidx.work.impl.utils.taskexecutor.InstantWorkTaskExecutor
import androidx.work.impl.utils.taskexecutor.TaskExecutor
+import java.util.UUID
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentMatchers.anyString
import org.mockito.Mockito
import org.mockito.Mockito.`when`
-import java.util.UUID
@RunWith(AndroidJUnit4::class)
// Mockito tries to class load android.os.CancellationSignal which is only available on API >= 16
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/impl/workers/ConstraintTrackingWorkerTest.java b/work/work-runtime/src/androidTest/java/androidx/work/impl/workers/ConstraintTrackingWorkerTest.java
index 3fbaf87..9d99035 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/impl/workers/ConstraintTrackingWorkerTest.java
+++ b/work/work-runtime/src/androidTest/java/androidx/work/impl/workers/ConstraintTrackingWorkerTest.java
@@ -163,7 +163,7 @@
@Test
@SdkSuppress(minSdkVersion = 23, maxSdkVersion = 25)
public void testConstraintTrackingWorker_onConstraintsMet() {
- when(mBatteryNotLowTracker.getInitialState()).thenReturn(true);
+ when(mBatteryNotLowTracker.readSystemState()).thenReturn(true);
setupDelegateForExecution(EchoingWorker.class.getName(), new SynchronousExecutor());
WorkerWrapper.Builder builder = createWorkerWrapperBuilder();
@@ -181,7 +181,7 @@
@Test
@SdkSuppress(minSdkVersion = 23, maxSdkVersion = 25)
public void testConstraintTrackingWorker_onConstraintsNotMet() {
- when(mBatteryNotLowTracker.getInitialState()).thenReturn(false);
+ when(mBatteryNotLowTracker.readSystemState()).thenReturn(false);
setupDelegateForExecution(TestWorker.class.getName(), new SynchronousExecutor());
WorkerWrapper.Builder builder = createWorkerWrapperBuilder();
builder.withWorker(mWorker);
@@ -198,7 +198,7 @@
@SdkSuppress(minSdkVersion = 24, maxSdkVersion = 25)
public void testConstraintTrackingWorker_onConstraintsChanged() throws InterruptedException {
// This test is flaky on API 23 for some reason.
- when(mBatteryNotLowTracker.getInitialState()).thenReturn(true);
+ when(mBatteryNotLowTracker.readSystemState()).thenReturn(true);
ExecutorService executorService = Executors.newSingleThreadExecutor();
setupDelegateForExecution(SleepTestWorker.class.getName(), executorService);
WorkerWrapper.Builder builder = createWorkerWrapperBuilder();
@@ -224,7 +224,7 @@
@FlakyTest(bugId = 180654418, detail = "Passes locally all the time.")
public void testConstraintTrackingWorker_onConstraintsChangedTwice()
throws InterruptedException {
- when(mBatteryNotLowTracker.getInitialState()).thenReturn(true);
+ when(mBatteryNotLowTracker.readSystemState()).thenReturn(true);
ExecutorService executorService = Executors.newSingleThreadExecutor();
setupDelegateForExecution(SleepTestWorker.class.getName(), executorService);
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/testutils/FlowTester.kt b/work/work-runtime/src/androidTest/java/androidx/work/testutils/FlowTester.kt
new file mode 100644
index 0000000..9c5c203
--- /dev/null
+++ b/work/work-runtime/src/androidTest/java/androidx/work/testutils/FlowTester.kt
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2023 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
+ *
+ * http://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.
+ */
+
+package androidx.work.testutils
+
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.TimeoutCancellationException
+import kotlinx.coroutines.channels.Channel
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.launchIn
+import kotlinx.coroutines.flow.onEach
+import kotlinx.coroutines.job
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withTimeout
+
+fun <T> CoroutineScope.launchTester(flow: Flow<T>): FlowTester<T> {
+ val tester = FlowTester(flow)
+ // we don't block parent from completing and simply stop collecting once parent is done
+ val forked = Job()
+ coroutineContext.job.invokeOnCompletion { forked.cancel() }
+ launch(Job()) { tester.launch(this) }
+ return tester
+}
+
+class FlowTester<T>(private val flow: Flow<T>) {
+ private val channel = Channel<T>(10)
+
+ suspend fun awaitNext(): T {
+ val result = try {
+ withTimeout(3000L) { channel.receive() }
+ } catch (e: TimeoutCancellationException) {
+ throw AssertionError("Didn't receive event")
+ }
+ val next = channel.tryReceive()
+ if (next.isSuccess || next.isClosed)
+ throw AssertionError(
+ "Two events received instead of one;\n" +
+ "first: $result;\nsecond: ${next.getOrNull()}"
+ )
+ return result
+ }
+
+ fun launch(scope: CoroutineScope) {
+ flow.onEach { channel.send(it) }.launchIn(scope)
+ }
+}
\ No newline at end of file
diff --git a/work/work-runtime/src/main/java/androidx/work/WorkRequest.kt b/work/work-runtime/src/main/java/androidx/work/WorkRequest.kt
index 27d7f35..8232cf1a8 100644
--- a/work/work-runtime/src/main/java/androidx/work/WorkRequest.kt
+++ b/work/work-runtime/src/main/java/androidx/work/WorkRequest.kt
@@ -20,8 +20,8 @@
import androidx.annotation.RequiresApi
import androidx.annotation.RestrictTo
import androidx.annotation.VisibleForTesting
-import androidx.work.impl.utils.toMillisCompat
import androidx.work.impl.model.WorkSpec
+import androidx.work.impl.utils.toMillisCompat
import java.time.Duration
import java.util.UUID
import java.util.concurrent.TimeUnit
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/WorkManagerImplExt.kt b/work/work-runtime/src/main/java/androidx/work/impl/WorkManagerImplExt.kt
index f09b0a6..c90d2a0 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/WorkManagerImplExt.kt
+++ b/work/work-runtime/src/main/java/androidx/work/impl/WorkManagerImplExt.kt
@@ -86,6 +86,7 @@
Schedulers.createBestAvailableBackgroundScheduler(context, workDatabase, configuration),
GreedyScheduler(
context, configuration, trackers, processor,
- WorkLauncherImpl(processor, workTaskExecutor)
+ WorkLauncherImpl(processor, workTaskExecutor),
+ workTaskExecutor
),
)
\ No newline at end of file
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/background/greedy/GreedyScheduler.java b/work/work-runtime/src/main/java/androidx/work/impl/background/greedy/GreedyScheduler.java
index bb48033..97b2c19 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/background/greedy/GreedyScheduler.java
+++ b/work/work-runtime/src/main/java/androidx/work/impl/background/greedy/GreedyScheduler.java
@@ -19,6 +19,7 @@
import static android.os.Build.VERSION.SDK_INT;
import static androidx.work.WorkRequest.DEFAULT_BACKOFF_DELAY_MILLIS;
+import static androidx.work.impl.constraints.WorkConstraintsTrackerKt.listen;
import static androidx.work.impl.model.WorkSpecKt.generationalId;
import static java.lang.Math.max;
@@ -38,27 +39,30 @@
import androidx.work.impl.StartStopToken;
import androidx.work.impl.StartStopTokens;
import androidx.work.impl.WorkLauncher;
-import androidx.work.impl.constraints.WorkConstraintsCallback;
+import androidx.work.impl.constraints.ConstraintsState;
+import androidx.work.impl.constraints.OnConstraintsStateChangedListener;
import androidx.work.impl.constraints.WorkConstraintsTracker;
-import androidx.work.impl.constraints.WorkConstraintsTrackerImpl;
import androidx.work.impl.constraints.trackers.Trackers;
import androidx.work.impl.model.WorkGenerationalId;
import androidx.work.impl.model.WorkSpec;
import androidx.work.impl.utils.ProcessUtils;
+import androidx.work.impl.utils.taskexecutor.TaskExecutor;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.List;
import java.util.Map;
import java.util.Set;
+import kotlinx.coroutines.Job;
+
/**
* A greedy {@link Scheduler} that schedules unconstrained, non-timed work. It intentionally does
* not acquire any WakeLocks, instead trying to brute-force them as time allows before the process
* gets killed.
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-public class GreedyScheduler implements Scheduler, WorkConstraintsCallback, ExecutionListener {
+public class GreedyScheduler implements Scheduler, OnConstraintsStateChangedListener,
+ ExecutionListener {
private static final String TAG = Logger.tagWithPrefix("GreedyScheduler");
@@ -69,8 +73,7 @@
private static final int NON_THROTTLE_RUN_ATTEMPT_COUNT = 5;
private final Context mContext;
- private final WorkConstraintsTracker mWorkConstraintsTracker;
- private final Set<WorkSpec> mConstrainedWorkSpecs = new HashSet<>();
+ private final Map<WorkGenerationalId, Job> mConstrainedWorkSpecs = new HashMap<>();
private DelayedWorkTracker mDelayedWorkTracker;
private boolean mRegisteredExecutionListener;
private final Object mLock = new Object();
@@ -84,38 +87,28 @@
// Internal State
Boolean mInDefaultProcess;
+ private final WorkConstraintsTracker mConstraintsTracker;
+ private final TaskExecutor mTaskExecutor;
+
public GreedyScheduler(
@NonNull Context context,
@NonNull Configuration configuration,
@NonNull Trackers trackers,
@NonNull Processor processor,
- @NonNull WorkLauncher workLauncher
+ @NonNull WorkLauncher workLauncher,
+ @NonNull TaskExecutor taskExecutor
) {
mContext = context;
- mWorkConstraintsTracker = new WorkConstraintsTrackerImpl(trackers, this);
- mDelayedWorkTracker = new DelayedWorkTracker(
- this, configuration.getRunnableScheduler(), configuration.getClock());
+ mDelayedWorkTracker = new DelayedWorkTracker(this, configuration.getRunnableScheduler(),
+ configuration.getClock());
+ mTaskExecutor = taskExecutor;
+ mConstraintsTracker = new WorkConstraintsTracker(trackers);
mConfiguration = configuration;
mProcessor = processor;
mWorkLauncher = workLauncher;
}
@VisibleForTesting
- public GreedyScheduler(
- @NonNull Context context,
- @NonNull Configuration configuration,
- @NonNull WorkConstraintsTracker workConstraintsTracker,
- @NonNull Processor processor,
- @NonNull WorkLauncher workLauncher
- ) {
- mContext = context;
- mProcessor = processor;
- mWorkLauncher = workLauncher;
- mWorkConstraintsTracker = workConstraintsTracker;
- mConfiguration = configuration;
- }
-
- @VisibleForTesting
public void setDelayedWorkTracker(@NonNull DelayedWorkTracker delayedWorkTracker) {
mDelayedWorkTracker = delayedWorkTracker;
}
@@ -189,8 +182,14 @@
if (!constrainedWorkSpecs.isEmpty()) {
String formattedIds = TextUtils.join(",", constrainedWorkSpecIds);
Logger.get().debug(TAG, "Starting tracking for " + formattedIds);
- mConstrainedWorkSpecs.addAll(constrainedWorkSpecs);
- mWorkConstraintsTracker.replace(mConstrainedWorkSpecs);
+ for (WorkSpec spec: constrainedWorkSpecs) {
+ WorkGenerationalId id = generationalId(spec);
+ if (!mConstrainedWorkSpecs.containsKey(id)) {
+ Job job = listen(mConstraintsTracker, spec,
+ mTaskExecutor.getTaskCoroutineDispatcher(), this);
+ mConstrainedWorkSpecs.put(id, job);
+ }
+ }
}
}
}
@@ -222,21 +221,16 @@
}
@Override
- public void onAllConstraintsMet(@NonNull List<WorkSpec> workSpecs) {
- for (WorkSpec workSpec : workSpecs) {
- WorkGenerationalId id = generationalId(workSpec);
+ public void onConstraintsStateChanged(@NonNull WorkSpec workSpec,
+ @NonNull ConstraintsState state) {
+ WorkGenerationalId id = generationalId(workSpec);
+ if (state instanceof ConstraintsState.ConstraintsMet) {
// it doesn't help against races, but reduces useless load in the system
if (!mStartStopTokens.contains(id)) {
Logger.get().debug(TAG, "Constraints met: Scheduling work ID " + id);
mWorkLauncher.startWork(mStartStopTokens.tokenFor(id));
}
- }
- }
-
- @Override
- public void onAllConstraintsNotMet(@NonNull List<WorkSpec> workSpecs) {
- for (WorkSpec workSpec : workSpecs) {
- WorkGenerationalId id = generationalId(workSpec);
+ } else {
Logger.get().debug(TAG, "Constraints not met: Cancelling work ID " + id);
StartStopToken runId = mStartStopTokens.remove(id);
if (runId != null) {
@@ -261,18 +255,16 @@
}
private void removeConstraintTrackingFor(@NonNull WorkGenerationalId id) {
+ Job job;
synchronized (mLock) {
// This is synchronized because onExecuted is on the main thread but
// Schedulers#schedule() can modify the list of mConstrainedWorkSpecs on the task
// executor thread.
- for (WorkSpec constrainedWorkSpec : mConstrainedWorkSpecs) {
- if (generationalId(constrainedWorkSpec).equals(id)) {
- Logger.get().debug(TAG, "Stopping tracking for " + id);
- mConstrainedWorkSpecs.remove(constrainedWorkSpec);
- mWorkConstraintsTracker.replace(mConstrainedWorkSpecs);
- break;
- }
- }
+ job = mConstrainedWorkSpecs.remove(id);
+ }
+ if (job != null) {
+ Logger.get().debug(TAG, "Stopping tracking for " + id);
+ job.cancel(null);
}
}
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/background/systemalarm/ConstraintsCommandHandler.java b/work/work-runtime/src/main/java/androidx/work/impl/background/systemalarm/ConstraintsCommandHandler.java
index 4bd3fbf..e59758c 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/background/systemalarm/ConstraintsCommandHandler.java
+++ b/work/work-runtime/src/main/java/androidx/work/impl/background/systemalarm/ConstraintsCommandHandler.java
@@ -26,7 +26,7 @@
import androidx.annotation.WorkerThread;
import androidx.work.Clock;
import androidx.work.Logger;
-import androidx.work.impl.constraints.WorkConstraintsTrackerImpl;
+import androidx.work.impl.constraints.WorkConstraintsTracker;
import androidx.work.impl.constraints.trackers.Trackers;
import androidx.work.impl.model.WorkSpec;
@@ -46,7 +46,7 @@
private final Clock mClock;
private final int mStartId;
private final SystemAlarmDispatcher mDispatcher;
- private final WorkConstraintsTrackerImpl mWorkConstraintsTracker;
+ private final WorkConstraintsTracker mWorkConstraintsTracker;
ConstraintsCommandHandler(
@NonNull Context context,
@@ -58,7 +58,7 @@
mStartId = startId;
mDispatcher = dispatcher;
Trackers trackers = mDispatcher.getWorkManager().getTrackers();
- mWorkConstraintsTracker = new WorkConstraintsTrackerImpl(trackers, null);
+ mWorkConstraintsTracker = new WorkConstraintsTracker(trackers);
}
@WorkerThread
@@ -71,17 +71,13 @@
// completed WorkSpecs.
ConstraintProxy.updateAll(mContext, candidates);
- // This needs to be done to populate matching WorkSpec ids in every constraint controller.
- mWorkConstraintsTracker.replace(candidates);
-
List<WorkSpec> eligibleWorkSpecs = new ArrayList<>(candidates.size());
// Filter candidates should have already been scheduled.
long now = mClock.currentTimeMillis();
for (WorkSpec workSpec : candidates) {
- String workSpecId = workSpec.id;
long triggerAt = workSpec.calculateNextRunTime();
if (now >= triggerAt && (!workSpec.hasConstraints()
- || mWorkConstraintsTracker.areAllConstraintsMet(workSpecId))) {
+ || mWorkConstraintsTracker.areAllConstraintsMet(workSpec))) {
eligibleWorkSpecs.add(workSpec);
}
}
@@ -94,7 +90,5 @@
mDispatcher.getTaskExecutor().getMainThreadExecutor().execute(
new SystemAlarmDispatcher.AddRunnable(mDispatcher, intent, mStartId));
}
-
- mWorkConstraintsTracker.reset();
}
}
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/background/systemalarm/DelayMetCommandHandler.java b/work/work-runtime/src/main/java/androidx/work/impl/background/systemalarm/DelayMetCommandHandler.java
index abaa010..65151de 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/background/systemalarm/DelayMetCommandHandler.java
+++ b/work/work-runtime/src/main/java/androidx/work/impl/background/systemalarm/DelayMetCommandHandler.java
@@ -17,7 +17,7 @@
package androidx.work.impl.background.systemalarm;
import static androidx.work.impl.background.systemalarm.CommandHandler.WORK_PROCESSING_TIME_IN_MS;
-import static androidx.work.impl.model.WorkSpecKt.generationalId;
+import static androidx.work.impl.constraints.WorkConstraintsTrackerKt.listen;
import android.content.Context;
import android.content.Intent;
@@ -29,18 +29,20 @@
import androidx.annotation.WorkerThread;
import androidx.work.Logger;
import androidx.work.impl.StartStopToken;
-import androidx.work.impl.constraints.WorkConstraintsCallback;
-import androidx.work.impl.constraints.WorkConstraintsTrackerImpl;
+import androidx.work.impl.constraints.ConstraintsState;
+import androidx.work.impl.constraints.OnConstraintsStateChangedListener;
+import androidx.work.impl.constraints.WorkConstraintsTracker;
import androidx.work.impl.constraints.trackers.Trackers;
import androidx.work.impl.model.WorkGenerationalId;
import androidx.work.impl.model.WorkSpec;
import androidx.work.impl.utils.WakeLocks;
import androidx.work.impl.utils.WorkTimer;
-import java.util.Collections;
-import java.util.List;
import java.util.concurrent.Executor;
+import kotlinx.coroutines.CoroutineDispatcher;
+import kotlinx.coroutines.Job;
+
/**
* This is a command handler which attempts to run a work spec given its id.
* Also handles constraints gracefully.
@@ -48,7 +50,7 @@
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public class DelayMetCommandHandler implements
- WorkConstraintsCallback,
+ OnConstraintsStateChangedListener,
WorkTimer.TimeLimitExceededListener {
private static final String TAG = Logger.tagWithPrefix("DelayMetCommandHandler");
@@ -87,7 +89,7 @@
private final int mStartId;
private final WorkGenerationalId mWorkGenerationalId;
private final SystemAlarmDispatcher mDispatcher;
- private final WorkConstraintsTrackerImpl mWorkConstraintsTracker;
+ private final WorkConstraintsTracker mWorkConstraintsTracker;
private final Object mLock;
// should be accessed only from SerialTaskExecutor
private int mCurrentState;
@@ -97,6 +99,9 @@
@Nullable private PowerManager.WakeLock mWakeLock;
private boolean mHasConstraints;
private final StartStopToken mToken;
+ private final CoroutineDispatcher mCoroutineDispatcher;
+
+ private volatile Job mJob;
DelayMetCommandHandler(
@NonNull Context context,
@@ -111,22 +116,20 @@
Trackers trackers = dispatcher.getWorkManager().getTrackers();
mSerialExecutor = dispatcher.getTaskExecutor().getSerialTaskExecutor();
mMainThreadExecutor = dispatcher.getTaskExecutor().getMainThreadExecutor();
- mWorkConstraintsTracker = new WorkConstraintsTrackerImpl(trackers, this);
+ mCoroutineDispatcher = dispatcher.getTaskExecutor().getTaskCoroutineDispatcher();
+ mWorkConstraintsTracker = new WorkConstraintsTracker(trackers);
mHasConstraints = false;
mCurrentState = STATE_INITIAL;
mLock = new Object();
}
@Override
- public void onAllConstraintsMet(@NonNull List<WorkSpec> workSpecs) {
- // WorkConstraintsTracker will call onAllConstraintsMet with list of workSpecs whose
- // constraints are met. Ensure the workSpecId we are interested is part of the list
- // before we call Processor#startWork().
- for (WorkSpec spec: workSpecs) {
- if (generationalId(spec).equals(mWorkGenerationalId)) {
- mSerialExecutor.execute(this::startWork);
- return;
- }
+ public void onConstraintsStateChanged(@NonNull WorkSpec workSpec,
+ @NonNull ConstraintsState state) {
+ if (state instanceof ConstraintsState.ConstraintsMet) {
+ mSerialExecutor.execute(this::startWork);
+ } else {
+ mSerialExecutor.execute(this::stopWork);
}
}
@@ -183,11 +186,6 @@
mSerialExecutor.execute(this::stopWork);
}
- @Override
- public void onAllConstraintsNotMet(@NonNull List<WorkSpec> workSpecs) {
- mSerialExecutor.execute(this::stopWork);
- }
-
@WorkerThread
void handleProcessWork() {
String workSpecId = mWorkGenerationalId.getWorkSpecId();
@@ -214,10 +212,10 @@
if (!mHasConstraints) {
Logger.get().debug(TAG, "No constraints for " + workSpecId);
- onAllConstraintsMet(Collections.singletonList(workSpec));
+ mSerialExecutor.execute(this::startWork);
} else {
// Allow tracker to report constraint changes
- mWorkConstraintsTracker.replace(Collections.singletonList(workSpec));
+ mJob = listen(mWorkConstraintsTracker, workSpec, mCoroutineDispatcher, this);
}
}
@@ -261,7 +259,9 @@
// To avoid calling mWakeLock.release() twice, we are synchronizing here.
synchronized (mLock) {
// clean up constraint trackers
- mWorkConstraintsTracker.reset();
+ if (mJob != null) {
+ mJob.cancel(null);
+ }
// stop timers
mDispatcher.getWorkTimer().stopTimer(mWorkGenerationalId);
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/constraints/WorkConstraintsCallback.kt b/work/work-runtime/src/main/java/androidx/work/impl/constraints/WorkConstraintsCallback.kt
deleted file mode 100644
index 9f4375e..0000000
--- a/work/work-runtime/src/main/java/androidx/work/impl/constraints/WorkConstraintsCallback.kt
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2017 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
- *
- * http://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.
- */
-package androidx.work.impl.constraints
-
-import androidx.work.impl.model.WorkSpec
-
-/**
- * A callback for when constraints change.
- */
-interface WorkConstraintsCallback {
- /**
- * Called when all constraints are met.
- *
- * @param workSpecs A list of [WorkSpec] IDs that may be eligible to run
- */
- fun onAllConstraintsMet(workSpecs: List<WorkSpec>)
-
- /**
- * Called when all constraints are not met.
- *
- * @param workSpecs A list of [WorkSpec] IDs that are not eligible to run
- */
- fun onAllConstraintsNotMet(workSpecs: List<WorkSpec>)
-}
\ No newline at end of file
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/constraints/WorkConstraintsTracker.kt b/work/work-runtime/src/main/java/androidx/work/impl/constraints/WorkConstraintsTracker.kt
index 224f8e5..3ecadff 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/constraints/WorkConstraintsTracker.kt
+++ b/work/work-runtime/src/main/java/androidx/work/impl/constraints/WorkConstraintsTracker.kt
@@ -15,8 +15,8 @@
*/
package androidx.work.impl.constraints
-import androidx.annotation.VisibleForTesting
import androidx.work.Logger
+import androidx.work.impl.constraints.ConstraintsState.ConstraintsMet
import androidx.work.impl.constraints.controllers.BatteryChargingController
import androidx.work.impl.constraints.controllers.BatteryNotLowController
import androidx.work.impl.constraints.controllers.ConstraintController
@@ -27,47 +27,47 @@
import androidx.work.impl.constraints.controllers.StorageNotLowController
import androidx.work.impl.constraints.trackers.Trackers
import androidx.work.impl.model.WorkSpec
+import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.flow.distinctUntilChanged
+import kotlinx.coroutines.launch
-interface WorkConstraintsTracker {
- /**
- * Replaces the list of tracked [WorkSpec]s to monitor if their constraints are met.
- *
- * @param workSpecs A list of [WorkSpec]s to monitor constraints for
- */
- fun replace(workSpecs: Iterable<WorkSpec>)
+sealed class ConstraintsState {
+ object ConstraintsMet : ConstraintsState()
- /**
- * Resets and clears all tracked [WorkSpec]s.
- */
- fun reset()
+ // TODO: will have a reason
+ object ConstraintsNotMet : ConstraintsState()
}
-/**
- * Tracks [WorkSpec]s and their [androidx.work.Constraints], and notifies an optional
- * [WorkConstraintsCallback] when all of their constraints are met or not met.
- */
-class WorkConstraintsTrackerImpl @VisibleForTesting internal constructor(
- private val callback: WorkConstraintsCallback?,
- private val constraintControllers: Array<ConstraintController<*>>,
-) : WorkConstraintsTracker, ConstraintController.OnConstraintUpdatedCallback {
- // We need to keep hold a lock here for the cases where there is 1 WCT tracking a list of
- // WorkSpecs. Changes in constraints are notified on the main thread. Enqueues / Cancellations
- // occur on the task executor thread pool. So there is a chance of
- // ConcurrentModificationExceptions.
- private val lock: Any = Any()
+fun WorkConstraintsTracker.listen(
+ spec: WorkSpec,
+ dispatcher: CoroutineDispatcher,
+ listener: OnConstraintsStateChangedListener
+): Job {
+ val job = Job()
+ CoroutineScope(dispatcher + job).launch {
+ track(spec).collect { listener.onConstraintsStateChanged(spec, it) }
+ }
+ return job
+}
+fun interface OnConstraintsStateChangedListener {
+ fun onConstraintsStateChanged(workSpec: WorkSpec, state: ConstraintsState)
+}
+
+class WorkConstraintsTracker(
+ private val controllers: List<ConstraintController<*>>
+) {
/**
* @param trackers Constraints trackers
- * @param callback The callback is only necessary when you need
- * [WorkConstraintsTrackerImpl] to notify you about changes in
- * constraints for the list of [WorkSpec]'s that it is tracking.
*/
constructor(
trackers: Trackers,
- callback: WorkConstraintsCallback?
) : this(
- callback,
- arrayOf(
+ listOf(
BatteryChargingController(trackers.batteryChargingTracker),
BatteryNotLowController(trackers.batteryNotLowTracker),
StorageNotLowController(trackers.storageNotLowTracker),
@@ -78,69 +78,23 @@
)
)
- /**
- * Replaces the list of tracked [WorkSpec]s to monitor if their constraints are met.
- *
- * @param workSpecs A list of [WorkSpec]s to monitor constraints for
- */
- override fun replace(workSpecs: Iterable<WorkSpec>) {
- synchronized(lock) {
- for (controller in constraintControllers) {
- controller.callback = null
- }
- for (controller in constraintControllers) {
- controller.replace(workSpecs)
- }
- for (controller in constraintControllers) {
- controller.callback = this
- }
- }
+ fun track(spec: WorkSpec): Flow<ConstraintsState> {
+ val flows = controllers.filter { it.hasConstraint(spec) }.map { it.track() }
+ return combine(flows) { states ->
+ states.firstOrNull { it != ConstraintsMet } ?: ConstraintsMet
+ }.distinctUntilChanged()
}
- /**
- * Resets and clears all tracked [WorkSpec]s.
- */
- override fun reset() {
- synchronized(lock) {
- for (controller in constraintControllers) {
- controller.reset()
- }
- }
- }
+ fun areAllConstraintsMet(workSpec: WorkSpec): Boolean {
+ val controllers = controllers.filter { it.isConstrained(workSpec) }
- /**
- * Returns `true` if all the underlying constraints for a given WorkSpec are met.
- *
- * @param workSpecId The [WorkSpec] id
- * @return `true` if all the underlying constraints for a given [WorkSpec] are
- * met.
- */
- fun areAllConstraintsMet(workSpecId: String): Boolean {
- synchronized(lock) {
- val controller = constraintControllers.firstOrNull {
- it.isWorkSpecConstrained(workSpecId)
- }
- if (controller != null) {
- Logger.get().debug(
- TAG, "Work $workSpecId constrained by ${controller.javaClass.simpleName}"
- )
- }
- return controller == null
+ if (controllers.isNotEmpty()) {
+ Logger.get().debug(
+ TAG, "Work ${workSpec.id} constrained by " +
+ controllers.joinToString { it.javaClass.simpleName }
+ )
}
- }
-
- override fun onConstraintMet(workSpecs: List<WorkSpec>) {
- synchronized(lock) {
- val unconstrainedWorkSpecIds = workSpecs.filter { areAllConstraintsMet(it.id) }
- unconstrainedWorkSpecIds.forEach {
- Logger.get().debug(TAG, "Constraints met for $it")
- }
- callback?.onAllConstraintsMet(unconstrainedWorkSpecIds)
- }
- }
-
- override fun onConstraintNotMet(workSpecs: List<WorkSpec>) {
- synchronized(lock) { callback?.onAllConstraintsNotMet(workSpecs) }
+ return controllers.isEmpty()
}
}
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/constraints/controllers/ConstraintController.kt b/work/work-runtime/src/main/java/androidx/work/impl/constraints/controllers/ConstraintController.kt
deleted file mode 100644
index ffe02c8..0000000
--- a/work/work-runtime/src/main/java/androidx/work/impl/constraints/controllers/ConstraintController.kt
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (C) 2017 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
- *
- * http://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.
- */
-package androidx.work.impl.constraints.controllers
-
-import androidx.work.impl.constraints.ConstraintListener
-import androidx.work.impl.constraints.trackers.ConstraintTracker
-import androidx.work.impl.model.WorkSpec
-
-/**
- * A controller for a particular constraint.
- *
- * @param T the constraint data type managed by this controller.
- */
-abstract class ConstraintController<T> internal constructor(
- private val tracker: ConstraintTracker<T>
-) : ConstraintListener<T> {
- /**
- * A callback for when a constraint changes.
- */
- interface OnConstraintUpdatedCallback {
- /**
- * Called when a constraint is met.
- *
- * @param workSpecs A list of [WorkSpec] IDs that may have become eligible to run
- */
- fun onConstraintMet(workSpecs: List<WorkSpec>)
-
- /**
- * Called when a constraint is not met.
- *
- * @param workSpecs A list of [WorkSpec] IDs that have become ineligible to run
- */
- fun onConstraintNotMet(workSpecs: List<WorkSpec>)
- }
-
- private val matchingWorkSpecs = mutableListOf<WorkSpec>()
- private val matchingWorkSpecIds = mutableListOf<String>()
- private var currentValue: T? = null
-
- /**
- * Sets the callback to inform when constraints change. This callback is also triggered the
- * first time it is set.
- */
- var callback: OnConstraintUpdatedCallback? = null
- set(value) {
- if (field !== value) {
- field = value
- updateCallback(value, currentValue)
- }
- }
-
- abstract fun hasConstraint(workSpec: WorkSpec): Boolean
- abstract fun isConstrained(value: T): Boolean
-
- /**
- * Replaces the list of [WorkSpec]s to monitor constraints for.
- *
- * @param workSpecs A list of [WorkSpec]s to monitor constraints for
- */
- fun replace(workSpecs: Iterable<WorkSpec>) {
- matchingWorkSpecs.clear()
- matchingWorkSpecIds.clear()
- workSpecs.filterTo(matchingWorkSpecs) { hasConstraint(it) }
- matchingWorkSpecs.mapTo(matchingWorkSpecIds) { it.id }
-
- if (matchingWorkSpecs.isEmpty()) {
- tracker.removeListener(this)
- } else {
- tracker.addListener(this)
- }
- updateCallback(callback, currentValue)
- }
-
- /**
- * Clears all tracked [WorkSpec]s.
- */
- fun reset() {
- if (matchingWorkSpecs.isNotEmpty()) {
- matchingWorkSpecs.clear()
- tracker.removeListener(this)
- }
- }
-
- /**
- * Determines if a particular [WorkSpec] is constrained. It is constrained if it is
- * tracked by this controller, and the controller constraint was set, but not satisfied.
- *
- * @param workSpecId The ID of the [WorkSpec] to check if it is constrained.
- * @return `true` if the [WorkSpec] is considered constrained
- */
- fun isWorkSpecConstrained(workSpecId: String): Boolean {
- // TODO: unify `null` treatment here and in updateCallback, because
- // here it is considered as not constrained and but in updateCallback as constrained.
- val value = currentValue
- return (value != null && isConstrained(value) && workSpecId in matchingWorkSpecIds)
- }
-
- private fun updateCallback(callback: OnConstraintUpdatedCallback?, currentValue: T?) {
- // We pass copies of references (callback, currentValue) to updateCallback because public
- // APIs on ConstraintController may be called from any thread, and onConstraintChanged() is
- // called from the main thread.
- if (matchingWorkSpecs.isEmpty() || callback == null) {
- return
- }
- if (currentValue == null || isConstrained(currentValue)) {
- callback.onConstraintNotMet(matchingWorkSpecs)
- } else {
- callback.onConstraintMet(matchingWorkSpecs)
- }
- }
-
- override fun onConstraintChanged(newValue: T) {
- currentValue = newValue
- updateCallback(callback, currentValue)
- }
-}
\ No newline at end of file
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/constraints/controllers/ContraintControllers.kt b/work/work-runtime/src/main/java/androidx/work/impl/constraints/controllers/ContraintControllers.kt
index 559a5b1..2f9ad21 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/constraints/controllers/ContraintControllers.kt
+++ b/work/work-runtime/src/main/java/androidx/work/impl/constraints/controllers/ContraintControllers.kt
@@ -21,10 +21,41 @@
import androidx.work.NetworkType
import androidx.work.NetworkType.TEMPORARILY_UNMETERED
import androidx.work.NetworkType.UNMETERED
+import androidx.work.impl.constraints.ConstraintListener
+import androidx.work.impl.constraints.ConstraintsState
+import androidx.work.impl.constraints.ConstraintsState.ConstraintsMet
+import androidx.work.impl.constraints.ConstraintsState.ConstraintsNotMet
import androidx.work.impl.constraints.NetworkState
import androidx.work.impl.constraints.trackers.BatteryNotLowTracker
import androidx.work.impl.constraints.trackers.ConstraintTracker
import androidx.work.impl.model.WorkSpec
+import kotlinx.coroutines.channels.awaitClose
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.callbackFlow
+
+abstract class ConstraintController<T>(
+ private val tracker: ConstraintTracker<T>
+) {
+ abstract fun hasConstraint(workSpec: WorkSpec): Boolean
+ abstract fun isConstrained(value: T): Boolean
+
+ fun track(): Flow<ConstraintsState> = callbackFlow {
+ val listener = object : ConstraintListener<T> {
+ override fun onConstraintChanged(newValue: T) {
+ val value = if (isConstrained(newValue)) ConstraintsNotMet else ConstraintsMet
+ channel.trySend(value)
+ }
+ }
+ tracker.addListener(listener)
+ awaitClose {
+ tracker.removeListener(listener)
+ }
+ }
+
+ fun isConstrained(workSpec: WorkSpec): Boolean {
+ return hasConstraint(workSpec) && isConstrained(tracker.readSystemState())
+ }
+}
/**
* A [ConstraintController] for battery charging events.
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/constraints/trackers/BatteryChargingTracker.kt b/work/work-runtime/src/main/java/androidx/work/impl/constraints/trackers/BatteryChargingTracker.kt
index 4679415..51030a0 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/constraints/trackers/BatteryChargingTracker.kt
+++ b/work/work-runtime/src/main/java/androidx/work/impl/constraints/trackers/BatteryChargingTracker.kt
@@ -33,8 +33,7 @@
class BatteryChargingTracker(context: Context, taskExecutor: TaskExecutor) :
BroadcastReceiverConstraintTracker<Boolean>(context, taskExecutor) {
- override val initialState: Boolean
- get() {
+ override fun readSystemState(): Boolean {
// {@link ACTION_CHARGING} and {@link ACTION_DISCHARGING} are not sticky broadcasts, so
// we use {@link ACTION_BATTERY_CHANGED} on all APIs to get the initial state.
val intentFilter = IntentFilter(Intent.ACTION_BATTERY_CHANGED)
@@ -44,7 +43,7 @@
return false
}
return isBatteryChangedIntentCharging(intent)
- }
+ }
override val intentFilter: IntentFilter
get() {
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/constraints/trackers/BatteryNotLowTracker.kt b/work/work-runtime/src/main/java/androidx/work/impl/constraints/trackers/BatteryNotLowTracker.kt
index da13e81..e3ff321 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/constraints/trackers/BatteryNotLowTracker.kt
+++ b/work/work-runtime/src/main/java/androidx/work/impl/constraints/trackers/BatteryNotLowTracker.kt
@@ -16,8 +16,8 @@
package androidx.work.impl.constraints.trackers
import android.content.Context
-import android.content.IntentFilter
import android.content.Intent
+import android.content.IntentFilter
import android.os.BatteryManager
import androidx.annotation.RestrictTo
import androidx.work.Logger
@@ -35,8 +35,7 @@
*
* {@see https://android.googlesource.com/platform/frameworks/base/+/oreo-release/services/core/java/com/android/server/BatteryService.java#268}
*/
- override val initialState: Boolean
- get() {
+ override fun readSystemState(): Boolean {
val intentFilter = IntentFilter(Intent.ACTION_BATTERY_CHANGED)
val intent = appContext.registerReceiver(null, intentFilter)
if (intent == null) {
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/constraints/trackers/ConstraintTracker.kt b/work/work-runtime/src/main/java/androidx/work/impl/constraints/trackers/ConstraintTracker.kt
index 0367ff6..d479e81 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/constraints/trackers/ConstraintTracker.kt
+++ b/work/work-runtime/src/main/java/androidx/work/impl/constraints/trackers/ConstraintTracker.kt
@@ -49,7 +49,7 @@
synchronized(lock) {
if (listeners.add(listener)) {
if (listeners.size == 1) {
- currentState = initialState
+ currentState = readSystemState()
Logger.get().debug(
TAG, "${javaClass.simpleName}: initial state = $currentState"
)
@@ -76,7 +76,7 @@
var state: T
get() {
- return currentState ?: initialState
+ return currentState ?: readSystemState()
}
set(newState) {
@@ -103,9 +103,11 @@
}
/**
- * Determines the initial state of the constraint being tracked.
+ * Reads the state of the constraints from source of truth. (e.g. NetworkManager for
+ * NetworkTracker). It is always accurate unlike `state` that can be stale after stopTracking
+ * call.
*/
- abstract val initialState: T
+ abstract fun readSystemState(): T
/**
* Start tracking for constraint state changes.
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/constraints/trackers/NetworkStateTracker.kt b/work/work-runtime/src/main/java/androidx/work/impl/constraints/trackers/NetworkStateTracker.kt
index a16f1b8..b5e78c2 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/constraints/trackers/NetworkStateTracker.kt
+++ b/work/work-runtime/src/main/java/androidx/work/impl/constraints/trackers/NetworkStateTracker.kt
@@ -107,8 +107,8 @@
@Suppress("DEPRECATION")
override val intentFilter: IntentFilter
get() = IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)
- override val initialState: NetworkState
- get() = connectivityManager.activeNetworkState
+
+ override fun readSystemState(): NetworkState = connectivityManager.activeNetworkState
}
@RequiresApi(24)
@@ -117,8 +117,8 @@
private val connectivityManager: ConnectivityManager =
appContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
- override val initialState: NetworkState
- get() = connectivityManager.activeNetworkState
+
+ override fun readSystemState(): NetworkState = connectivityManager.activeNetworkState
private val networkCallback = object : NetworkCallback() {
override fun onCapabilitiesChanged(network: Network, capabilities: NetworkCapabilities) {
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/constraints/trackers/StorageNotLowTracker.kt b/work/work-runtime/src/main/java/androidx/work/impl/constraints/trackers/StorageNotLowTracker.kt
index 6c73576..eb159b2 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/constraints/trackers/StorageNotLowTracker.kt
+++ b/work/work-runtime/src/main/java/androidx/work/impl/constraints/trackers/StorageNotLowTracker.kt
@@ -30,8 +30,7 @@
class StorageNotLowTracker(context: Context, taskExecutor: TaskExecutor) :
BroadcastReceiverConstraintTracker<Boolean>(context, taskExecutor) {
- override val initialState: Boolean
- get() {
+ override fun readSystemState(): Boolean {
val intent = appContext.registerReceiver(null, intentFilter)
return if (intent == null || intent.action == null) {
// ACTION_DEVICE_STORAGE_LOW is a sticky broadcast that is removed when sufficient
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/foreground/SystemForegroundDispatcher.java b/work/work-runtime/src/main/java/androidx/work/impl/foreground/SystemForegroundDispatcher.java
index 98f1b91..99422cc 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/foreground/SystemForegroundDispatcher.java
+++ b/work/work-runtime/src/main/java/androidx/work/impl/foreground/SystemForegroundDispatcher.java
@@ -36,29 +36,29 @@
import androidx.work.Logger;
import androidx.work.impl.ExecutionListener;
import androidx.work.impl.WorkManagerImpl;
-import androidx.work.impl.constraints.WorkConstraintsCallback;
+import androidx.work.impl.constraints.ConstraintsState;
+import androidx.work.impl.constraints.OnConstraintsStateChangedListener;
import androidx.work.impl.constraints.WorkConstraintsTracker;
-import androidx.work.impl.constraints.WorkConstraintsTrackerImpl;
+import androidx.work.impl.constraints.WorkConstraintsTrackerKt;
import androidx.work.impl.model.WorkGenerationalId;
import androidx.work.impl.model.WorkSpec;
import androidx.work.impl.utils.taskexecutor.TaskExecutor;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
-import java.util.List;
import java.util.Map;
-import java.util.Set;
import java.util.UUID;
+import kotlinx.coroutines.Job;
+
/**
* Handles requests for executing {@link androidx.work.WorkRequest}s on behalf of
* {@link SystemForegroundService}.
- *
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-public class SystemForegroundDispatcher implements WorkConstraintsCallback, ExecutionListener {
+public class SystemForegroundDispatcher implements OnConstraintsStateChangedListener,
+ ExecutionListener {
// Synthetic access
@SuppressWarnings("WeakerAccess")
static final String TAG = Logger.tagWithPrefix("SystemFgDispatcher");
@@ -94,7 +94,7 @@
final Map<WorkGenerationalId, WorkSpec> mWorkSpecById;
@SuppressWarnings("WeakerAccess") // Synthetic access
- final Set<WorkSpec> mTrackedWorkSpecs;
+ final Map<WorkGenerationalId, Job> mTrackedWorkSpecs;
@SuppressWarnings("WeakerAccess") // Synthetic access
final WorkConstraintsTracker mConstraintsTracker;
@@ -109,9 +109,9 @@
mTaskExecutor = mWorkManagerImpl.getWorkTaskExecutor();
mCurrentForegroundId = null;
mForegroundInfoById = new LinkedHashMap<>();
- mTrackedWorkSpecs = new HashSet<>();
+ mTrackedWorkSpecs = new HashMap<>();
mWorkSpecById = new HashMap<>();
- mConstraintsTracker = new WorkConstraintsTrackerImpl(mWorkManagerImpl.getTrackers(), this);
+ mConstraintsTracker = new WorkConstraintsTracker(mWorkManagerImpl.getTrackers());
mWorkManagerImpl.getProcessor().addExecutionListener(this);
}
@@ -127,7 +127,7 @@
mTaskExecutor = mWorkManagerImpl.getWorkTaskExecutor();
mCurrentForegroundId = null;
mForegroundInfoById = new LinkedHashMap<>();
- mTrackedWorkSpecs = new HashSet<>();
+ mTrackedWorkSpecs = new HashMap<>();
mWorkSpecById = new HashMap<>();
mConstraintsTracker = tracker;
mWorkManagerImpl.getProcessor().addExecutionListener(this);
@@ -136,15 +136,15 @@
@MainThread
@Override
public void onExecuted(@NonNull WorkGenerationalId id, boolean needsReschedule) {
- boolean removed = false;
+ Job removed = null;
synchronized (mLock) {
WorkSpec workSpec = mWorkSpecById.remove(id);
if (workSpec != null) {
- removed = mTrackedWorkSpecs.remove(workSpec);
+ removed = mTrackedWorkSpecs.remove(id);
}
- if (removed) {
+ if (removed != null) {
// Stop tracking constraints.
- mConstraintsTracker.replace(mTrackedWorkSpecs);
+ removed.cancel(null);
}
}
@@ -230,7 +230,9 @@
void onDestroy() {
mCallback = null;
synchronized (mLock) {
- mConstraintsTracker.reset();
+ for (Job job : mTrackedWorkSpecs.values()) {
+ job.cancel(null);
+ }
}
mWorkManagerImpl.getProcessor().removeExecutionListener(this);
}
@@ -248,8 +250,11 @@
if (workSpec != null && workSpec.hasConstraints()) {
synchronized (mLock) {
mWorkSpecById.put(generationalId(workSpec), workSpec);
- mTrackedWorkSpecs.add(workSpec);
- mConstraintsTracker.replace(mTrackedWorkSpecs);
+ Job job = WorkConstraintsTrackerKt.listen(mConstraintsTracker, workSpec,
+ mTaskExecutor.getTaskCoroutineDispatcher(),
+ SystemForegroundDispatcher.this
+ );
+ mTrackedWorkSpecs.put(generationalId(workSpec), job);
}
}
}
@@ -326,19 +331,12 @@
}
@Override
- public void onAllConstraintsMet(@NonNull List<WorkSpec> workSpecs) {
- // Do nothing
- }
-
- @Override
- public void onAllConstraintsNotMet(@NonNull List<WorkSpec> workSpecs) {
- if (!workSpecs.isEmpty()) {
- for (WorkSpec workSpec : workSpecs) {
- String workSpecId = workSpec.id;
- Logger.get().debug(TAG,
- "Constraints unmet for WorkSpec " + workSpecId);
- mWorkManagerImpl.stopForegroundWork(generationalId(workSpec));
- }
+ public void onConstraintsStateChanged(@NonNull WorkSpec workSpec,
+ @NonNull ConstraintsState state) {
+ if (state instanceof ConstraintsState.ConstraintsNotMet) {
+ String workSpecId = workSpec.id;
+ Logger.get().debug(TAG, "Constraints unmet for WorkSpec " + workSpecId);
+ mWorkManagerImpl.stopForegroundWork(generationalId(workSpec));
}
}
@@ -419,7 +417,7 @@
public static Intent createStopForegroundIntent(@NonNull Context context) {
Intent intent = new Intent(context, SystemForegroundService.class);
intent.setAction(ACTION_STOP_FOREGROUND);
- return intent;
+ return intent;
}
/**
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/workers/ConstraintTrackingWorker.kt b/work/work-runtime/src/main/java/androidx/work/impl/workers/ConstraintTrackingWorker.kt
index 3c3e4020e..520f184 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/workers/ConstraintTrackingWorker.kt
+++ b/work/work-runtime/src/main/java/androidx/work/impl/workers/ConstraintTrackingWorker.kt
@@ -23,9 +23,13 @@
import androidx.work.Logger
import androidx.work.WorkerParameters
import androidx.work.impl.WorkManagerImpl
-import androidx.work.impl.constraints.WorkConstraintsCallback
-import androidx.work.impl.constraints.WorkConstraintsTrackerImpl
+import androidx.work.impl.constraints.ConstraintsState
+import androidx.work.impl.constraints.ConstraintsState.ConstraintsNotMet
+import androidx.work.impl.constraints.OnConstraintsStateChangedListener
+import androidx.work.impl.constraints.WorkConstraintsTracker
+import androidx.work.impl.constraints.listen
import androidx.work.impl.model.WorkSpec
+import androidx.work.impl.utils.SynchronousExecutor
import androidx.work.impl.utils.futures.SettableFuture
import com.google.common.util.concurrent.ListenableFuture
@@ -38,7 +42,7 @@
class ConstraintTrackingWorker(
appContext: Context,
private val workerParameters: WorkerParameters
-) : ListenableWorker(appContext, workerParameters), WorkConstraintsCallback {
+) : ListenableWorker(appContext, workerParameters), OnConstraintsStateChangedListener {
private val lock = Any()
@@ -86,11 +90,13 @@
future.setFailed()
return
}
- val workConstraintsTracker = WorkConstraintsTrackerImpl(workManagerImpl.trackers, this)
+ val workConstraintsTracker = WorkConstraintsTracker(workManagerImpl.trackers)
// Start tracking
- workConstraintsTracker.replace(listOf(workSpec))
- if (workConstraintsTracker.areAllConstraintsMet(id.toString())) {
+ val dispatcher = workManagerImpl.workTaskExecutor.taskCoroutineDispatcher
+ val job = workConstraintsTracker.listen(workSpec, dispatcher, this)
+ future.addListener({ job.cancel(null) }, SynchronousExecutor())
+ if (workConstraintsTracker.areAllConstraintsMet(workSpec)) {
logger.debug(TAG, "Constraints met for delegate $className")
// Wrapping the call to mDelegate#doWork() in a try catch, because
@@ -137,15 +143,12 @@
}
}
- override fun onAllConstraintsMet(workSpecs: List<WorkSpec>) {
- // WorkConstraintTracker notifies on the main thread. So we don't want to trampoline
- // between the background thread and the main thread in this case.
- }
-
- override fun onAllConstraintsNotMet(workSpecs: List<WorkSpec>) {
+ override fun onConstraintsStateChanged(workSpec: WorkSpec, state: ConstraintsState) {
// If at any point, constraints are not met mark it so we can retry the work.
- Logger.get().debug(TAG, "Constraints changed for $workSpecs")
- synchronized(lock) { areConstraintsUnmet = true }
+ Logger.get().debug(TAG, "Constraints changed for $workSpec")
+ if (state == ConstraintsNotMet) {
+ synchronized(lock) { areConstraintsUnmet = true }
+ }
}
}
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/workers/DiagnosticsWorker.kt b/work/work-runtime/src/main/java/androidx/work/impl/workers/DiagnosticsWorker.kt
index 24221a9..b8bc4e6 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/workers/DiagnosticsWorker.kt
+++ b/work/work-runtime/src/main/java/androidx/work/impl/workers/DiagnosticsWorker.kt
@@ -22,11 +22,11 @@
import androidx.work.WorkerParameters
import androidx.work.impl.Scheduler
import androidx.work.impl.WorkManagerImpl
-import androidx.work.impl.model.generationalId
import androidx.work.impl.model.SystemIdInfoDao
import androidx.work.impl.model.WorkNameDao
import androidx.work.impl.model.WorkSpec
import androidx.work.impl.model.WorkTagDao
+import androidx.work.impl.model.generationalId
import java.util.concurrent.TimeUnit
internal class DiagnosticsWorker(context: Context, parameters: WorkerParameters) :
diff --git a/work/work-runtime/src/main/stableAidl/androidx/work/multiprocess/IListenableWorkerImpl.aidl b/work/work-runtime/src/main/stableAidl/androidx/work/multiprocess/IListenableWorkerImpl.aidl
index 9ff1a3a..7d798ed 100644
--- a/work/work-runtime/src/main/stableAidl/androidx/work/multiprocess/IListenableWorkerImpl.aidl
+++ b/work/work-runtime/src/main/stableAidl/androidx/work/multiprocess/IListenableWorkerImpl.aidl
@@ -20,9 +20,8 @@
/**
* Implementation for a multi-process {@link ListenableWorker}.
- *
- * @hide
*/
+@JavaPassthrough(annotation="@androidx.annotation.RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY)")
oneway interface IListenableWorkerImpl {
// request is a ParcelablelRemoteRequest instance.
// callback gets a parcelized representation of Result
diff --git a/work/work-runtime/src/main/stableAidl/androidx/work/multiprocess/IWorkManagerImpl.aidl b/work/work-runtime/src/main/stableAidl/androidx/work/multiprocess/IWorkManagerImpl.aidl
index 2e9c060..3688ab6 100644
--- a/work/work-runtime/src/main/stableAidl/androidx/work/multiprocess/IWorkManagerImpl.aidl
+++ b/work/work-runtime/src/main/stableAidl/androidx/work/multiprocess/IWorkManagerImpl.aidl
@@ -20,9 +20,8 @@
/**
* Implementation for {@link IWorkManager}.
- *
- * @hide
*/
+@JavaPassthrough(annotation="@androidx.annotation.RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY)")
oneway interface IWorkManagerImpl {
// Enqueues WorkRequests
void enqueueWorkRequests(in byte[] request, IWorkManagerImplCallback callback);
diff --git a/work/work-runtime/src/main/stableAidl/androidx/work/multiprocess/IWorkManagerImplCallback.aidl b/work/work-runtime/src/main/stableAidl/androidx/work/multiprocess/IWorkManagerImplCallback.aidl
index 82a5ecf..9bcd35b 100644
--- a/work/work-runtime/src/main/stableAidl/androidx/work/multiprocess/IWorkManagerImplCallback.aidl
+++ b/work/work-runtime/src/main/stableAidl/androidx/work/multiprocess/IWorkManagerImplCallback.aidl
@@ -18,9 +18,8 @@
/**
* RPC Callbacks for {@link IWorkManagerImpl}.
- *
- * @hide
*/
+@JavaPassthrough(annotation="@androidx.annotation.RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY)")
oneway interface IWorkManagerImplCallback {
void onSuccess(in byte[] response);
void onFailure(String error);
diff --git a/work/work-rxjava2/build.gradle b/work/work-rxjava2/build.gradle
index e8e0e7e..9779ab9 100644
--- a/work/work-rxjava2/build.gradle
+++ b/work/work-rxjava2/build.gradle
@@ -32,7 +32,7 @@
}
androidx {
- name = "Android WorkManager RxJava2 Support"
+ name = "WorkManager RxJava2"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "Android WorkManager RxJava2 interoperatibility library"
diff --git a/work/work-rxjava2/src/test/java/androidx/work/RxForegroundInfoTest.kt b/work/work-rxjava2/src/test/java/androidx/work/RxForegroundInfoTest.kt
index 892795f..e2713c2 100644
--- a/work/work-rxjava2/src/test/java/androidx/work/RxForegroundInfoTest.kt
+++ b/work/work-rxjava2/src/test/java/androidx/work/RxForegroundInfoTest.kt
@@ -23,12 +23,12 @@
import androidx.work.impl.utils.futures.SettableFuture
import com.google.common.truth.Truth.assertThat
import io.reactivex.Single
+import java.util.UUID
+import java.util.concurrent.Executor
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
import org.mockito.Mockito.mock
-import java.util.UUID
-import java.util.concurrent.Executor
@RunWith(JUnit4::class)
class RxForegroundInfoTest {
diff --git a/work/work-rxjava2/src/test/java/androidx/work/RxWorkerTest.kt b/work/work-rxjava2/src/test/java/androidx/work/RxWorkerTest.kt
index 5bb80f0..6e04386 100644
--- a/work/work-rxjava2/src/test/java/androidx/work/RxWorkerTest.kt
+++ b/work/work-rxjava2/src/test/java/androidx/work/RxWorkerTest.kt
@@ -22,6 +22,10 @@
import androidx.work.impl.utils.taskexecutor.TaskExecutor
import io.reactivex.Single
import io.reactivex.schedulers.Schedulers
+import java.util.UUID
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.Executor
+import java.util.concurrent.TimeUnit
import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Assert
@@ -29,10 +33,6 @@
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
import org.mockito.Mockito.mock
-import java.util.UUID
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.Executor
-import java.util.concurrent.TimeUnit
@RunWith(JUnit4::class)
class RxWorkerTest {
diff --git a/work/work-rxjava2/src/test/java/androidx/work/SetCompletableProgressTest.kt b/work/work-rxjava2/src/test/java/androidx/work/SetCompletableProgressTest.kt
index f8e2c28..8579353 100644
--- a/work/work-rxjava2/src/test/java/androidx/work/SetCompletableProgressTest.kt
+++ b/work/work-rxjava2/src/test/java/androidx/work/SetCompletableProgressTest.kt
@@ -20,14 +20,14 @@
import androidx.work.ListenableWorker.Result
import androidx.work.impl.utils.SynchronousExecutor
import androidx.work.impl.utils.futures.SettableFuture
+import java.util.UUID
+import java.util.concurrent.Executor
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
import org.mockito.Mockito.mock
-import java.util.UUID
-import java.util.concurrent.Executor
@RunWith(JUnit4::class)
class SetCompletableProgressTest {
diff --git a/work/work-rxjava3/build.gradle b/work/work-rxjava3/build.gradle
index a725099..c6e82b9 100644
--- a/work/work-rxjava3/build.gradle
+++ b/work/work-rxjava3/build.gradle
@@ -32,7 +32,7 @@
}
androidx {
- name = "Android WorkManager RxJava3 Support"
+ name = "WorkManager RxJava3"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2020"
description = "Android WorkManager RxJava3 interoperatibility library"
diff --git a/work/work-rxjava3/src/test/java/androidx/work/rxjava3/RxForegroundInfoTest.kt b/work/work-rxjava3/src/test/java/androidx/work/rxjava3/RxForegroundInfoTest.kt
index 89c230b..131e8a8 100644
--- a/work/work-rxjava3/src/test/java/androidx/work/rxjava3/RxForegroundInfoTest.kt
+++ b/work/work-rxjava3/src/test/java/androidx/work/rxjava3/RxForegroundInfoTest.kt
@@ -29,12 +29,12 @@
import androidx.work.impl.utils.futures.SettableFuture
import com.google.common.truth.Truth.assertThat
import io.reactivex.rxjava3.core.Single
+import java.util.UUID
+import java.util.concurrent.Executor
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
import org.mockito.Mockito.mock
-import java.util.UUID
-import java.util.concurrent.Executor
@RunWith(JUnit4::class)
class RxForegroundInfoTest {
diff --git a/work/work-rxjava3/src/test/java/androidx/work/rxjava3/RxWorkerTest.kt b/work/work-rxjava3/src/test/java/androidx/work/rxjava3/RxWorkerTest.kt
index 2f7d422..13d4305 100644
--- a/work/work-rxjava3/src/test/java/androidx/work/rxjava3/RxWorkerTest.kt
+++ b/work/work-rxjava3/src/test/java/androidx/work/rxjava3/RxWorkerTest.kt
@@ -28,6 +28,10 @@
import androidx.work.impl.utils.taskexecutor.TaskExecutor
import io.reactivex.rxjava3.core.Single
import io.reactivex.rxjava3.schedulers.Schedulers
+import java.util.UUID
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.Executor
+import java.util.concurrent.TimeUnit
import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Assert
@@ -35,10 +39,6 @@
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
import org.mockito.Mockito.mock
-import java.util.UUID
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.Executor
-import java.util.concurrent.TimeUnit
@RunWith(JUnit4::class)
class RxWorkerTest {
diff --git a/work/work-rxjava3/src/test/java/androidx/work/rxjava3/SetCompletableProgressTest.kt b/work/work-rxjava3/src/test/java/androidx/work/rxjava3/SetCompletableProgressTest.kt
index ee837b8..24e8155 100644
--- a/work/work-rxjava3/src/test/java/androidx/work/rxjava3/SetCompletableProgressTest.kt
+++ b/work/work-rxjava3/src/test/java/androidx/work/rxjava3/SetCompletableProgressTest.kt
@@ -25,14 +25,14 @@
import androidx.work.WorkerParameters
import androidx.work.impl.utils.SynchronousExecutor
import androidx.work.impl.utils.futures.SettableFuture
+import java.util.UUID
+import java.util.concurrent.Executor
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
import org.mockito.Mockito.mock
-import java.util.UUID
-import java.util.concurrent.Executor
@RunWith(JUnit4::class)
class SetCompletableProgressTest {
diff --git a/work/work-testing/build.gradle b/work/work-testing/build.gradle
index 45e33ef..52a3ba4 100644
--- a/work/work-testing/build.gradle
+++ b/work/work-testing/build.gradle
@@ -44,7 +44,7 @@
}
androidx {
- name = "Android WorkManager Testing"
+ name = "WorkManager Testing"
publish = Publish.SNAPSHOT_AND_RELEASE
inceptionYear = "2018"
description = "Android WorkManager testing library"
diff --git a/work/work-testing/src/androidTest/java/androidx/work/testing/TestSchedulerTest.java b/work/work-testing/src/androidTest/java/androidx/work/testing/TestSchedulerTest.java
index 2e44ffd..ca861ee 100644
--- a/work/work-testing/src/androidTest/java/androidx/work/testing/TestSchedulerTest.java
+++ b/work/work-testing/src/androidTest/java/androidx/work/testing/TestSchedulerTest.java
@@ -44,6 +44,7 @@
import androidx.work.testing.workers.TestWorker;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -77,6 +78,7 @@
CountingTestWorker.COUNT.set(0);
}
+ @Ignore // b/281720148
@Test
public void testWorker_shouldSucceedSynchronously()
throws InterruptedException, ExecutionException {
diff --git a/work/work-testing/src/androidTest/java/androidx/work/testing/TestWorkerBuilderTest.kt b/work/work-testing/src/androidTest/java/androidx/work/testing/TestWorkerBuilderTest.kt
index 077765c..7548ecb 100644
--- a/work/work-testing/src/androidTest/java/androidx/work/testing/TestWorkerBuilderTest.kt
+++ b/work/work-testing/src/androidTest/java/androidx/work/testing/TestWorkerBuilderTest.kt
@@ -30,9 +30,14 @@
import androidx.work.await
import androidx.work.testing.workers.TestListenableWorker
import androidx.work.testing.workers.TestWorker
+import java.util.UUID
+import java.util.concurrent.ExecutionException
+import java.util.concurrent.Executor
+import java.util.concurrent.Executors
+import kotlin.jvm.Throws
import kotlinx.coroutines.runBlocking
-import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.CoreMatchers.hasItems
+import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.MatcherAssert.assertThat
import org.hamcrest.Matchers.containsInAnyOrder
import org.hamcrest.Matchers.notNullValue
@@ -44,11 +49,6 @@
import org.mockito.Mockito.mock
import org.mockito.Mockito.times
import org.mockito.Mockito.verify
-import java.util.UUID
-import java.util.concurrent.ExecutionException
-import java.util.concurrent.Executor
-import java.util.concurrent.Executors
-import kotlin.jvm.Throws
@RunWith(AndroidJUnit4::class)
class TestWorkerBuilderTest {
diff --git a/work/work-testing/src/main/java/androidx/work/testing/TestWorkManagerImpl.kt b/work/work-testing/src/main/java/androidx/work/testing/TestWorkManagerImpl.kt
index aa1ba31..851f31e 100644
--- a/work/work-testing/src/main/java/androidx/work/testing/TestWorkManagerImpl.kt
+++ b/work/work-testing/src/main/java/androidx/work/testing/TestWorkManagerImpl.kt
@@ -17,7 +17,6 @@
package androidx.work.testing
import android.content.Context
-
import androidx.work.Configuration
import androidx.work.impl.Processor
import androidx.work.impl.Scheduler